This source file includes following definitions.
- state_to_string
- bdaddr_type_is_valid
- bdaddr_type_is_le
- bacmp
- bacpy
- bt_skb_alloc
- bt_skb_send_alloc
- sco_init
- sco_exit
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
63 struct 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
81 struct 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
115 struct 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
125 __printf(1, 2)
126 void bt_info(const char *fmt, ...);
127 __printf(1, 2)
128 void bt_warn(const char *fmt, ...);
129 __printf(1, 2)
130 void bt_err(const char *fmt, ...);
131 __printf(1, 2)
132 void bt_err_ratelimited(const char *fmt, ...);
133
134 #define BT_INFO(fmt, ...) bt_info(fmt "\n", ##__VA_ARGS__)
135 #define BT_WARN(fmt, ...) bt_warn(fmt "\n", ##__VA_ARGS__)
136 #define BT_ERR(fmt, ...) bt_err(fmt "\n", ##__VA_ARGS__)
137 #define BT_DBG(fmt, ...) pr_debug(fmt "\n", ##__VA_ARGS__)
138
139 #define BT_ERR_RATELIMITED(fmt, ...) bt_err_ratelimited(fmt "\n", ##__VA_ARGS__)
140
141 #define bt_dev_info(hdev, fmt, ...) \
142 BT_INFO("%s: " fmt, (hdev)->name, ##__VA_ARGS__)
143 #define bt_dev_warn(hdev, fmt, ...) \
144 BT_WARN("%s: " fmt, (hdev)->name, ##__VA_ARGS__)
145 #define bt_dev_err(hdev, fmt, ...) \
146 BT_ERR("%s: " fmt, (hdev)->name, ##__VA_ARGS__)
147 #define bt_dev_dbg(hdev, fmt, ...) \
148 BT_DBG("%s: " fmt, (hdev)->name, ##__VA_ARGS__)
149
150 #define bt_dev_err_ratelimited(hdev, fmt, ...) \
151 BT_ERR_RATELIMITED("%s: " fmt, (hdev)->name, ##__VA_ARGS__)
152
153
154 enum {
155 BT_CONNECTED = 1,
156 BT_OPEN,
157 BT_BOUND,
158 BT_LISTEN,
159 BT_CONNECT,
160 BT_CONNECT2,
161 BT_CONFIG,
162 BT_DISCONN,
163 BT_CLOSED
164 };
165
166
167 static inline const char *state_to_string(int state)
168 {
169 switch (state) {
170 case BT_CONNECTED:
171 return "BT_CONNECTED";
172 case BT_OPEN:
173 return "BT_OPEN";
174 case BT_BOUND:
175 return "BT_BOUND";
176 case BT_LISTEN:
177 return "BT_LISTEN";
178 case BT_CONNECT:
179 return "BT_CONNECT";
180 case BT_CONNECT2:
181 return "BT_CONNECT2";
182 case BT_CONFIG:
183 return "BT_CONFIG";
184 case BT_DISCONN:
185 return "BT_DISCONN";
186 case BT_CLOSED:
187 return "BT_CLOSED";
188 }
189
190 return "invalid state";
191 }
192
193
194 typedef struct {
195 __u8 b[6];
196 } __packed bdaddr_t;
197
198
199 #define BDADDR_BREDR 0x00
200 #define BDADDR_LE_PUBLIC 0x01
201 #define BDADDR_LE_RANDOM 0x02
202
203 static inline bool bdaddr_type_is_valid(u8 type)
204 {
205 switch (type) {
206 case BDADDR_BREDR:
207 case BDADDR_LE_PUBLIC:
208 case BDADDR_LE_RANDOM:
209 return true;
210 }
211
212 return false;
213 }
214
215 static inline bool bdaddr_type_is_le(u8 type)
216 {
217 switch (type) {
218 case BDADDR_LE_PUBLIC:
219 case BDADDR_LE_RANDOM:
220 return true;
221 }
222
223 return false;
224 }
225
226 #define BDADDR_ANY (&(bdaddr_t) {{0, 0, 0, 0, 0, 0}})
227 #define BDADDR_NONE (&(bdaddr_t) {{0xff, 0xff, 0xff, 0xff, 0xff, 0xff}})
228
229
230 static inline int bacmp(const bdaddr_t *ba1, const bdaddr_t *ba2)
231 {
232 return memcmp(ba1, ba2, sizeof(bdaddr_t));
233 }
234 static inline void bacpy(bdaddr_t *dst, const bdaddr_t *src)
235 {
236 memcpy(dst, src, sizeof(bdaddr_t));
237 }
238
239 void baswap(bdaddr_t *dst, const bdaddr_t *src);
240
241
242
243 #define bt_sk(__sk) ((struct bt_sock *) __sk)
244
245 struct bt_sock {
246 struct sock sk;
247 struct list_head accept_q;
248 struct sock *parent;
249 unsigned long flags;
250 void (*skb_msg_name)(struct sk_buff *, void *, int *);
251 };
252
253 enum {
254 BT_SK_DEFER_SETUP,
255 BT_SK_SUSPEND,
256 };
257
258 struct bt_sock_list {
259 struct hlist_head head;
260 rwlock_t lock;
261 #ifdef CONFIG_PROC_FS
262 int (* custom_seq_show)(struct seq_file *, void *);
263 #endif
264 };
265
266 int bt_sock_register(int proto, const struct net_proto_family *ops);
267 void bt_sock_unregister(int proto);
268 void bt_sock_link(struct bt_sock_list *l, struct sock *s);
269 void bt_sock_unlink(struct bt_sock_list *l, struct sock *s);
270 int bt_sock_recvmsg(struct socket *sock, struct msghdr *msg, size_t len,
271 int flags);
272 int bt_sock_stream_recvmsg(struct socket *sock, struct msghdr *msg,
273 size_t len, int flags);
274 __poll_t bt_sock_poll(struct file *file, struct socket *sock, poll_table *wait);
275 int bt_sock_ioctl(struct socket *sock, unsigned int cmd, unsigned long arg);
276 int bt_sock_wait_state(struct sock *sk, int state, unsigned long timeo);
277 int bt_sock_wait_ready(struct sock *sk, unsigned long flags);
278
279 void bt_accept_enqueue(struct sock *parent, struct sock *sk, bool bh);
280 void bt_accept_unlink(struct sock *sk);
281 struct sock *bt_accept_dequeue(struct sock *parent, struct socket *newsock);
282
283
284 struct l2cap_ctrl {
285 u8 sframe:1,
286 poll:1,
287 final:1,
288 fcs:1,
289 sar:2,
290 super:2;
291
292 u16 reqseq;
293 u16 txseq;
294 u8 retries;
295 __le16 psm;
296 bdaddr_t bdaddr;
297 struct l2cap_chan *chan;
298 };
299
300 struct hci_dev;
301
302 typedef void (*hci_req_complete_t)(struct hci_dev *hdev, u8 status, u16 opcode);
303 typedef void (*hci_req_complete_skb_t)(struct hci_dev *hdev, u8 status,
304 u16 opcode, struct sk_buff *skb);
305
306 #define HCI_REQ_START BIT(0)
307 #define HCI_REQ_SKB BIT(1)
308
309 struct hci_ctrl {
310 u16 opcode;
311 u8 req_flags;
312 u8 req_event;
313 union {
314 hci_req_complete_t req_complete;
315 hci_req_complete_skb_t req_complete_skb;
316 };
317 };
318
319 struct bt_skb_cb {
320 u8 pkt_type;
321 u8 force_active;
322 u16 expect;
323 u8 incoming:1;
324 union {
325 struct l2cap_ctrl l2cap;
326 struct hci_ctrl hci;
327 };
328 };
329 #define bt_cb(skb) ((struct bt_skb_cb *)((skb)->cb))
330
331 #define hci_skb_pkt_type(skb) bt_cb((skb))->pkt_type
332 #define hci_skb_expect(skb) bt_cb((skb))->expect
333 #define hci_skb_opcode(skb) bt_cb((skb))->hci.opcode
334
335 static inline struct sk_buff *bt_skb_alloc(unsigned int len, gfp_t how)
336 {
337 struct sk_buff *skb;
338
339 skb = alloc_skb(len + BT_SKB_RESERVE, how);
340 if (skb)
341 skb_reserve(skb, BT_SKB_RESERVE);
342 return skb;
343 }
344
345 static inline struct sk_buff *bt_skb_send_alloc(struct sock *sk,
346 unsigned long len, int nb, int *err)
347 {
348 struct sk_buff *skb;
349
350 skb = sock_alloc_send_skb(sk, len + BT_SKB_RESERVE, nb, err);
351 if (skb)
352 skb_reserve(skb, BT_SKB_RESERVE);
353
354 if (!skb && *err)
355 return NULL;
356
357 *err = sock_error(sk);
358 if (*err)
359 goto out;
360
361 if (sk->sk_shutdown) {
362 *err = -ECONNRESET;
363 goto out;
364 }
365
366 return skb;
367
368 out:
369 kfree_skb(skb);
370 return NULL;
371 }
372
373 int bt_to_errno(u16 code);
374
375 void hci_sock_set_flag(struct sock *sk, int nr);
376 void hci_sock_clear_flag(struct sock *sk, int nr);
377 int hci_sock_test_flag(struct sock *sk, int nr);
378 unsigned short hci_sock_get_channel(struct sock *sk);
379 u32 hci_sock_get_cookie(struct sock *sk);
380
381 int hci_sock_init(void);
382 void hci_sock_cleanup(void);
383
384 int bt_sysfs_init(void);
385 void bt_sysfs_cleanup(void);
386
387 int bt_procfs_init(struct net *net, const char *name,
388 struct bt_sock_list *sk_list,
389 int (*seq_show)(struct seq_file *, void *));
390 void bt_procfs_cleanup(struct net *net, const char *name);
391
392 extern struct dentry *bt_debugfs;
393
394 int l2cap_init(void);
395 void l2cap_exit(void);
396
397 #if IS_ENABLED(CONFIG_BT_BREDR)
398 int sco_init(void);
399 void sco_exit(void);
400 #else
401 static inline int sco_init(void)
402 {
403 return 0;
404 }
405
406 static inline void sco_exit(void)
407 {
408 }
409 #endif
410
411 int mgmt_init(void);
412 void mgmt_exit(void);
413
414 void bt_sock_reclassify_lock(struct sock *sk, int proto);
415
416 #endif