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