1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25#ifndef __BLUETOOTH_H
26#define __BLUETOOTH_H
27
28#include <linux/poll.h>
29#include <net/sock.h>
30#include <linux/seq_file.h>
31
32#define BT_SUBSYS_VERSION 2
33#define BT_SUBSYS_REVISION 22
34
35#ifndef AF_BLUETOOTH
36#define AF_BLUETOOTH 31
37#define PF_BLUETOOTH AF_BLUETOOTH
38#endif
39
40
41#define BLUETOOTH_VER_1_1 1
42#define BLUETOOTH_VER_1_2 2
43#define BLUETOOTH_VER_2_0 3
44#define BLUETOOTH_VER_2_1 4
45#define BLUETOOTH_VER_4_0 6
46
47
48#define BT_SKB_RESERVE 8
49
50#define BTPROTO_L2CAP 0
51#define BTPROTO_HCI 1
52#define BTPROTO_SCO 2
53#define BTPROTO_RFCOMM 3
54#define BTPROTO_BNEP 4
55#define BTPROTO_CMTP 5
56#define BTPROTO_HIDP 6
57#define BTPROTO_AVDTP 7
58
59#define SOL_HCI 0
60#define SOL_L2CAP 6
61#define SOL_SCO 17
62#define SOL_RFCOMM 18
63
64#define BT_SECURITY 4
65struct bt_security {
66 __u8 level;
67 __u8 key_size;
68};
69#define BT_SECURITY_SDP 0
70#define BT_SECURITY_LOW 1
71#define BT_SECURITY_MEDIUM 2
72#define BT_SECURITY_HIGH 3
73#define BT_SECURITY_FIPS 4
74
75#define BT_DEFER_SETUP 7
76
77#define BT_FLUSHABLE 8
78
79#define BT_FLUSHABLE_OFF 0
80#define BT_FLUSHABLE_ON 1
81
82#define BT_POWER 9
83struct bt_power {
84 __u8 force_active;
85};
86#define BT_POWER_FORCE_ACTIVE_OFF 0
87#define BT_POWER_FORCE_ACTIVE_ON 1
88
89#define BT_CHANNEL_POLICY 10
90
91
92
93
94
95
96#define BT_CHANNEL_POLICY_BREDR_ONLY 0
97
98
99
100
101
102
103#define BT_CHANNEL_POLICY_BREDR_PREFERRED 1
104
105
106
107
108
109
110
111
112
113
114#define BT_CHANNEL_POLICY_AMP_PREFERRED 2
115
116#define BT_VOICE 11
117struct bt_voice {
118 __u16 setting;
119};
120
121#define BT_VOICE_TRANSPARENT 0x0003
122#define BT_VOICE_CVSD_16BIT 0x0060
123
124#define BT_SNDMTU 12
125#define BT_RCVMTU 13
126#define BT_PHY 14
127
128#define BT_PHY_BR_1M_1SLOT 0x00000001
129#define BT_PHY_BR_1M_3SLOT 0x00000002
130#define BT_PHY_BR_1M_5SLOT 0x00000004
131#define BT_PHY_EDR_2M_1SLOT 0x00000008
132#define BT_PHY_EDR_2M_3SLOT 0x00000010
133#define BT_PHY_EDR_2M_5SLOT 0x00000020
134#define BT_PHY_EDR_3M_1SLOT 0x00000040
135#define BT_PHY_EDR_3M_3SLOT 0x00000080
136#define BT_PHY_EDR_3M_5SLOT 0x00000100
137#define BT_PHY_LE_1M_TX 0x00000200
138#define BT_PHY_LE_1M_RX 0x00000400
139#define BT_PHY_LE_2M_TX 0x00000800
140#define BT_PHY_LE_2M_RX 0x00001000
141#define BT_PHY_LE_CODED_TX 0x00002000
142#define BT_PHY_LE_CODED_RX 0x00004000
143
144#define BT_MODE 15
145
146#define BT_MODE_BASIC 0x00
147#define BT_MODE_ERTM 0x01
148#define BT_MODE_STREAMING 0x02
149#define BT_MODE_LE_FLOWCTL 0x03
150#define BT_MODE_EXT_FLOWCTL 0x04
151
152#define BT_PKT_STATUS 16
153
154#define BT_SCM_PKT_STATUS 0x03
155
156__printf(1, 2)
157void bt_info(const char *fmt, ...);
158__printf(1, 2)
159void bt_warn(const char *fmt, ...);
160__printf(1, 2)
161void bt_err(const char *fmt, ...);
162#if IS_ENABLED(CONFIG_BT_FEATURE_DEBUG)
163void bt_dbg_set(bool enable);
164bool bt_dbg_get(void);
165__printf(1, 2)
166void bt_dbg(const char *fmt, ...);
167#endif
168__printf(1, 2)
169void bt_warn_ratelimited(const char *fmt, ...);
170__printf(1, 2)
171void bt_err_ratelimited(const char *fmt, ...);
172
173#define BT_INFO(fmt, ...) bt_info(fmt "\n", ##__VA_ARGS__)
174#define BT_WARN(fmt, ...) bt_warn(fmt "\n", ##__VA_ARGS__)
175#define BT_ERR(fmt, ...) bt_err(fmt "\n", ##__VA_ARGS__)
176
177#if IS_ENABLED(CONFIG_BT_FEATURE_DEBUG)
178#define BT_DBG(fmt, ...) bt_dbg(fmt "\n", ##__VA_ARGS__)
179#else
180#define BT_DBG(fmt, ...) pr_debug(fmt "\n", ##__VA_ARGS__)
181#endif
182
183#define bt_dev_info(hdev, fmt, ...) \
184 BT_INFO("%s: " fmt, (hdev)->name, ##__VA_ARGS__)
185#define bt_dev_warn(hdev, fmt, ...) \
186 BT_WARN("%s: " fmt, (hdev)->name, ##__VA_ARGS__)
187#define bt_dev_err(hdev, fmt, ...) \
188 BT_ERR("%s: " fmt, (hdev)->name, ##__VA_ARGS__)
189#define bt_dev_dbg(hdev, fmt, ...) \
190 BT_DBG("%s: " fmt, (hdev)->name, ##__VA_ARGS__)
191
192#define bt_dev_warn_ratelimited(hdev, fmt, ...) \
193 bt_warn_ratelimited("%s: " fmt, (hdev)->name, ##__VA_ARGS__)
194#define bt_dev_err_ratelimited(hdev, fmt, ...) \
195 bt_err_ratelimited("%s: " fmt, (hdev)->name, ##__VA_ARGS__)
196
197
198enum {
199 BT_CONNECTED = 1,
200 BT_OPEN,
201 BT_BOUND,
202 BT_LISTEN,
203 BT_CONNECT,
204 BT_CONNECT2,
205 BT_CONFIG,
206 BT_DISCONN,
207 BT_CLOSED
208};
209
210
211static inline const char *state_to_string(int state)
212{
213 switch (state) {
214 case BT_CONNECTED:
215 return "BT_CONNECTED";
216 case BT_OPEN:
217 return "BT_OPEN";
218 case BT_BOUND:
219 return "BT_BOUND";
220 case BT_LISTEN:
221 return "BT_LISTEN";
222 case BT_CONNECT:
223 return "BT_CONNECT";
224 case BT_CONNECT2:
225 return "BT_CONNECT2";
226 case BT_CONFIG:
227 return "BT_CONFIG";
228 case BT_DISCONN:
229 return "BT_DISCONN";
230 case BT_CLOSED:
231 return "BT_CLOSED";
232 }
233
234 return "invalid state";
235}
236
237
238typedef struct {
239 __u8 b[6];
240} __packed bdaddr_t;
241
242
243#define BDADDR_BREDR 0x00
244#define BDADDR_LE_PUBLIC 0x01
245#define BDADDR_LE_RANDOM 0x02
246
247static inline bool bdaddr_type_is_valid(u8 type)
248{
249 switch (type) {
250 case BDADDR_BREDR:
251 case BDADDR_LE_PUBLIC:
252 case BDADDR_LE_RANDOM:
253 return true;
254 }
255
256 return false;
257}
258
259static inline bool bdaddr_type_is_le(u8 type)
260{
261 switch (type) {
262 case BDADDR_LE_PUBLIC:
263 case BDADDR_LE_RANDOM:
264 return true;
265 }
266
267 return false;
268}
269
270#define BDADDR_ANY (&(bdaddr_t) {{0, 0, 0, 0, 0, 0}})
271#define BDADDR_NONE (&(bdaddr_t) {{0xff, 0xff, 0xff, 0xff, 0xff, 0xff}})
272
273
274static inline int bacmp(const bdaddr_t *ba1, const bdaddr_t *ba2)
275{
276 return memcmp(ba1, ba2, sizeof(bdaddr_t));
277}
278static inline void bacpy(bdaddr_t *dst, const bdaddr_t *src)
279{
280 memcpy(dst, src, sizeof(bdaddr_t));
281}
282
283void baswap(bdaddr_t *dst, const bdaddr_t *src);
284
285
286
287#define bt_sk(__sk) ((struct bt_sock *) __sk)
288
289struct bt_sock {
290 struct sock sk;
291 struct list_head accept_q;
292 struct sock *parent;
293 unsigned long flags;
294 void (*skb_msg_name)(struct sk_buff *, void *, int *);
295 void (*skb_put_cmsg)(struct sk_buff *, struct msghdr *, struct sock *);
296};
297
298enum {
299 BT_SK_DEFER_SETUP,
300 BT_SK_SUSPEND,
301};
302
303struct bt_sock_list {
304 struct hlist_head head;
305 rwlock_t lock;
306#ifdef CONFIG_PROC_FS
307 int (* custom_seq_show)(struct seq_file *, void *);
308#endif
309};
310
311int bt_sock_register(int proto, const struct net_proto_family *ops);
312void bt_sock_unregister(int proto);
313void bt_sock_link(struct bt_sock_list *l, struct sock *s);
314void bt_sock_unlink(struct bt_sock_list *l, struct sock *s);
315int bt_sock_recvmsg(struct socket *sock, struct msghdr *msg, size_t len,
316 int flags);
317int bt_sock_stream_recvmsg(struct socket *sock, struct msghdr *msg,
318 size_t len, int flags);
319__poll_t bt_sock_poll(struct file *file, struct socket *sock, poll_table *wait);
320int bt_sock_ioctl(struct socket *sock, unsigned int cmd, unsigned long arg);
321int bt_sock_wait_state(struct sock *sk, int state, unsigned long timeo);
322int bt_sock_wait_ready(struct sock *sk, unsigned long flags);
323
324void bt_accept_enqueue(struct sock *parent, struct sock *sk, bool bh);
325void bt_accept_unlink(struct sock *sk);
326struct sock *bt_accept_dequeue(struct sock *parent, struct socket *newsock);
327
328
329struct l2cap_ctrl {
330 u8 sframe:1,
331 poll:1,
332 final:1,
333 fcs:1,
334 sar:2,
335 super:2;
336
337 u16 reqseq;
338 u16 txseq;
339 u8 retries;
340 __le16 psm;
341 bdaddr_t bdaddr;
342 struct l2cap_chan *chan;
343};
344
345struct sco_ctrl {
346 u8 pkt_status;
347};
348
349struct hci_dev;
350
351typedef void (*hci_req_complete_t)(struct hci_dev *hdev, u8 status, u16 opcode);
352typedef void (*hci_req_complete_skb_t)(struct hci_dev *hdev, u8 status,
353 u16 opcode, struct sk_buff *skb);
354
355#define HCI_REQ_START BIT(0)
356#define HCI_REQ_SKB BIT(1)
357
358struct hci_ctrl {
359 u16 opcode;
360 u8 req_flags;
361 u8 req_event;
362 union {
363 hci_req_complete_t req_complete;
364 hci_req_complete_skb_t req_complete_skb;
365 };
366};
367
368struct bt_skb_cb {
369 u8 pkt_type;
370 u8 force_active;
371 u16 expect;
372 u8 incoming:1;
373 union {
374 struct l2cap_ctrl l2cap;
375 struct sco_ctrl sco;
376 struct hci_ctrl hci;
377 };
378};
379#define bt_cb(skb) ((struct bt_skb_cb *)((skb)->cb))
380
381#define hci_skb_pkt_type(skb) bt_cb((skb))->pkt_type
382#define hci_skb_expect(skb) bt_cb((skb))->expect
383#define hci_skb_opcode(skb) bt_cb((skb))->hci.opcode
384
385static inline struct sk_buff *bt_skb_alloc(unsigned int len, gfp_t how)
386{
387 struct sk_buff *skb;
388
389 skb = alloc_skb(len + BT_SKB_RESERVE, how);
390 if (skb)
391 skb_reserve(skb, BT_SKB_RESERVE);
392 return skb;
393}
394
395static inline struct sk_buff *bt_skb_send_alloc(struct sock *sk,
396 unsigned long len, int nb, int *err)
397{
398 struct sk_buff *skb;
399
400 skb = sock_alloc_send_skb(sk, len + BT_SKB_RESERVE, nb, err);
401 if (skb)
402 skb_reserve(skb, BT_SKB_RESERVE);
403
404 if (!skb && *err)
405 return NULL;
406
407 *err = sock_error(sk);
408 if (*err)
409 goto out;
410
411 if (sk->sk_shutdown) {
412 *err = -ECONNRESET;
413 goto out;
414 }
415
416 return skb;
417
418out:
419 kfree_skb(skb);
420 return NULL;
421}
422
423int bt_to_errno(u16 code);
424
425void hci_sock_set_flag(struct sock *sk, int nr);
426void hci_sock_clear_flag(struct sock *sk, int nr);
427int hci_sock_test_flag(struct sock *sk, int nr);
428unsigned short hci_sock_get_channel(struct sock *sk);
429u32 hci_sock_get_cookie(struct sock *sk);
430
431int hci_sock_init(void);
432void hci_sock_cleanup(void);
433
434int bt_sysfs_init(void);
435void bt_sysfs_cleanup(void);
436
437int bt_procfs_init(struct net *net, const char *name,
438 struct bt_sock_list *sk_list,
439 int (*seq_show)(struct seq_file *, void *));
440void bt_procfs_cleanup(struct net *net, const char *name);
441
442extern struct dentry *bt_debugfs;
443
444int l2cap_init(void);
445void l2cap_exit(void);
446
447#if IS_ENABLED(CONFIG_BT_BREDR)
448int sco_init(void);
449void sco_exit(void);
450#else
451static inline int sco_init(void)
452{
453 return 0;
454}
455
456static inline void sco_exit(void)
457{
458}
459#endif
460
461int mgmt_init(void);
462void mgmt_exit(void);
463
464void bt_sock_reclassify_lock(struct sock *sk, int proto);
465
466#endif
467