3fa7b1e3c5d97a7c8c1937b6e7efc2f90c83f413
[linux-2.6-microblaze.git] / include / net / bluetooth / bluetooth.h
1 /*
2    BlueZ - Bluetooth protocol stack for Linux
3    Copyright (C) 2000-2001 Qualcomm Incorporated
4
5    Written 2000,2001 by Maxim Krasnyansky <maxk@qualcomm.com>
6
7    This program is free software; you can redistribute it and/or modify
8    it under the terms of the GNU General Public License version 2 as
9    published by the Free Software Foundation;
10
11    THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
12    OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
13    FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT OF THIRD PARTY RIGHTS.
14    IN NO EVENT SHALL THE COPYRIGHT HOLDER(S) AND AUTHOR(S) BE LIABLE FOR ANY
15    CLAIM, OR ANY SPECIAL INDIRECT OR CONSEQUENTIAL DAMAGES, OR ANY DAMAGES
16    WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
17    ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
18    OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
19
20    ALL LIABILITY, INCLUDING LIABILITY FOR INFRINGEMENT OF ANY PATENTS,
21    COPYRIGHTS, TRADEMARKS OR OTHER RIGHTS, RELATING TO USE OF THIS
22    SOFTWARE IS DISCLAIMED.
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 /* Bluetooth versions */
41 #define BLUETOOTH_VER_1_1       1
42 #define BLUETOOTH_VER_1_2       2
43 #define BLUETOOTH_VER_2_0       3
44
45 /* Reserv for core and drivers use */
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 /* BR/EDR only (default policy)
90  *   AMP controllers cannot be used.
91  *   Channel move requests from the remote device are denied.
92  *   If the L2CAP channel is currently using AMP, move the channel to BR/EDR.
93  */
94 #define BT_CHANNEL_POLICY_BREDR_ONLY            0
95
96 /* BR/EDR Preferred
97  *   Allow use of AMP controllers.
98  *   If the L2CAP channel is currently on AMP, move it to BR/EDR.
99  *   Channel move requests from the remote device are allowed.
100  */
101 #define BT_CHANNEL_POLICY_BREDR_PREFERRED       1
102
103 /* AMP Preferred
104  *   Allow use of AMP controllers
105  *   If the L2CAP channel is currently on BR/EDR and AMP controller
106  *     resources are available, initiate a channel move to AMP.
107  *   Channel move requests from the remote device are allowed.
108  *   If the L2CAP socket has not been connected yet, try to create
109  *     and configure the channel directly on an AMP controller rather
110  *     than BR/EDR.
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 #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)
151 void bt_info(const char *fmt, ...);
152 __printf(1, 2)
153 void bt_warn(const char *fmt, ...);
154 __printf(1, 2)
155 void bt_err(const char *fmt, ...);
156 __printf(1, 2)
157 void bt_warn_ratelimited(const char *fmt, ...);
158 __printf(1, 2)
159 void bt_err_ratelimited(const char *fmt, ...);
160
161 #define BT_INFO(fmt, ...)       bt_info(fmt "\n", ##__VA_ARGS__)
162 #define BT_WARN(fmt, ...)       bt_warn(fmt "\n", ##__VA_ARGS__)
163 #define BT_ERR(fmt, ...)        bt_err(fmt "\n", ##__VA_ARGS__)
164 #define BT_DBG(fmt, ...)        pr_debug(fmt "\n", ##__VA_ARGS__)
165
166 #define bt_dev_info(hdev, fmt, ...)                             \
167         BT_INFO("%s: " fmt, (hdev)->name, ##__VA_ARGS__)
168 #define bt_dev_warn(hdev, fmt, ...)                             \
169         BT_WARN("%s: " fmt, (hdev)->name, ##__VA_ARGS__)
170 #define bt_dev_err(hdev, fmt, ...)                              \
171         BT_ERR("%s: " fmt, (hdev)->name, ##__VA_ARGS__)
172 #define bt_dev_dbg(hdev, fmt, ...)                              \
173         BT_DBG("%s: " fmt, (hdev)->name, ##__VA_ARGS__)
174
175 #define bt_dev_warn_ratelimited(hdev, fmt, ...)                 \
176         bt_warn_ratelimited("%s: " fmt, (hdev)->name, ##__VA_ARGS__)
177 #define bt_dev_err_ratelimited(hdev, fmt, ...)                  \
178         bt_err_ratelimited("%s: " fmt, (hdev)->name, ##__VA_ARGS__)
179
180 /* Connection and socket states */
181 enum {
182         BT_CONNECTED = 1, /* Equal to TCP_ESTABLISHED to make net code happy */
183         BT_OPEN,
184         BT_BOUND,
185         BT_LISTEN,
186         BT_CONNECT,
187         BT_CONNECT2,
188         BT_CONFIG,
189         BT_DISCONN,
190         BT_CLOSED
191 };
192
193 /* If unused will be removed by compiler */
194 static inline const char *state_to_string(int state)
195 {
196         switch (state) {
197         case BT_CONNECTED:
198                 return "BT_CONNECTED";
199         case BT_OPEN:
200                 return "BT_OPEN";
201         case BT_BOUND:
202                 return "BT_BOUND";
203         case BT_LISTEN:
204                 return "BT_LISTEN";
205         case BT_CONNECT:
206                 return "BT_CONNECT";
207         case BT_CONNECT2:
208                 return "BT_CONNECT2";
209         case BT_CONFIG:
210                 return "BT_CONFIG";
211         case BT_DISCONN:
212                 return "BT_DISCONN";
213         case BT_CLOSED:
214                 return "BT_CLOSED";
215         }
216
217         return "invalid state";
218 }
219
220 /* BD Address */
221 typedef struct {
222         __u8 b[6];
223 } __packed bdaddr_t;
224
225 /* BD Address type */
226 #define BDADDR_BREDR            0x00
227 #define BDADDR_LE_PUBLIC        0x01
228 #define BDADDR_LE_RANDOM        0x02
229
230 static inline bool bdaddr_type_is_valid(u8 type)
231 {
232         switch (type) {
233         case BDADDR_BREDR:
234         case BDADDR_LE_PUBLIC:
235         case BDADDR_LE_RANDOM:
236                 return true;
237         }
238
239         return false;
240 }
241
242 static inline bool bdaddr_type_is_le(u8 type)
243 {
244         switch (type) {
245         case BDADDR_LE_PUBLIC:
246         case BDADDR_LE_RANDOM:
247                 return true;
248         }
249
250         return false;
251 }
252
253 #define BDADDR_ANY  (&(bdaddr_t) {{0, 0, 0, 0, 0, 0}})
254 #define BDADDR_NONE (&(bdaddr_t) {{0xff, 0xff, 0xff, 0xff, 0xff, 0xff}})
255
256 /* Copy, swap, convert BD Address */
257 static inline int bacmp(const bdaddr_t *ba1, const bdaddr_t *ba2)
258 {
259         return memcmp(ba1, ba2, sizeof(bdaddr_t));
260 }
261 static inline void bacpy(bdaddr_t *dst, const bdaddr_t *src)
262 {
263         memcpy(dst, src, sizeof(bdaddr_t));
264 }
265
266 void baswap(bdaddr_t *dst, const bdaddr_t *src);
267
268 /* Common socket structures and functions */
269
270 #define bt_sk(__sk) ((struct bt_sock *) __sk)
271
272 struct bt_sock {
273         struct sock sk;
274         struct list_head accept_q;
275         struct sock *parent;
276         unsigned long flags;
277         void (*skb_msg_name)(struct sk_buff *, void *, int *);
278 };
279
280 enum {
281         BT_SK_DEFER_SETUP,
282         BT_SK_SUSPEND,
283 };
284
285 struct bt_sock_list {
286         struct hlist_head head;
287         rwlock_t          lock;
288 #ifdef CONFIG_PROC_FS
289         int (* custom_seq_show)(struct seq_file *, void *);
290 #endif
291 };
292
293 int  bt_sock_register(int proto, const struct net_proto_family *ops);
294 void bt_sock_unregister(int proto);
295 void bt_sock_link(struct bt_sock_list *l, struct sock *s);
296 void bt_sock_unlink(struct bt_sock_list *l, struct sock *s);
297 int  bt_sock_recvmsg(struct socket *sock, struct msghdr *msg, size_t len,
298                      int flags);
299 int  bt_sock_stream_recvmsg(struct socket *sock, struct msghdr *msg,
300                             size_t len, int flags);
301 __poll_t bt_sock_poll(struct file *file, struct socket *sock, poll_table *wait);
302 int  bt_sock_ioctl(struct socket *sock, unsigned int cmd, unsigned long arg);
303 int  bt_sock_wait_state(struct sock *sk, int state, unsigned long timeo);
304 int  bt_sock_wait_ready(struct sock *sk, unsigned long flags);
305
306 void bt_accept_enqueue(struct sock *parent, struct sock *sk, bool bh);
307 void bt_accept_unlink(struct sock *sk);
308 struct sock *bt_accept_dequeue(struct sock *parent, struct socket *newsock);
309
310 /* Skb helpers */
311 struct l2cap_ctrl {
312         u8      sframe:1,
313                 poll:1,
314                 final:1,
315                 fcs:1,
316                 sar:2,
317                 super:2;
318
319         u16     reqseq;
320         u16     txseq;
321         u8      retries;
322         __le16  psm;
323         bdaddr_t bdaddr;
324         struct l2cap_chan *chan;
325 };
326
327 struct hci_dev;
328
329 typedef void (*hci_req_complete_t)(struct hci_dev *hdev, u8 status, u16 opcode);
330 typedef void (*hci_req_complete_skb_t)(struct hci_dev *hdev, u8 status,
331                                        u16 opcode, struct sk_buff *skb);
332
333 #define HCI_REQ_START   BIT(0)
334 #define HCI_REQ_SKB     BIT(1)
335
336 struct hci_ctrl {
337         u16 opcode;
338         u8 req_flags;
339         u8 req_event;
340         union {
341                 hci_req_complete_t req_complete;
342                 hci_req_complete_skb_t req_complete_skb;
343         };
344 };
345
346 struct bt_skb_cb {
347         u8 pkt_type;
348         u8 force_active;
349         u16 expect;
350         u8 incoming:1;
351         union {
352                 struct l2cap_ctrl l2cap;
353                 struct hci_ctrl hci;
354         };
355 };
356 #define bt_cb(skb) ((struct bt_skb_cb *)((skb)->cb))
357
358 #define hci_skb_pkt_type(skb) bt_cb((skb))->pkt_type
359 #define hci_skb_expect(skb) bt_cb((skb))->expect
360 #define hci_skb_opcode(skb) bt_cb((skb))->hci.opcode
361
362 static inline struct sk_buff *bt_skb_alloc(unsigned int len, gfp_t how)
363 {
364         struct sk_buff *skb;
365
366         skb = alloc_skb(len + BT_SKB_RESERVE, how);
367         if (skb)
368                 skb_reserve(skb, BT_SKB_RESERVE);
369         return skb;
370 }
371
372 static inline struct sk_buff *bt_skb_send_alloc(struct sock *sk,
373                                         unsigned long len, int nb, int *err)
374 {
375         struct sk_buff *skb;
376
377         skb = sock_alloc_send_skb(sk, len + BT_SKB_RESERVE, nb, err);
378         if (skb)
379                 skb_reserve(skb, BT_SKB_RESERVE);
380
381         if (!skb && *err)
382                 return NULL;
383
384         *err = sock_error(sk);
385         if (*err)
386                 goto out;
387
388         if (sk->sk_shutdown) {
389                 *err = -ECONNRESET;
390                 goto out;
391         }
392
393         return skb;
394
395 out:
396         kfree_skb(skb);
397         return NULL;
398 }
399
400 int bt_to_errno(u16 code);
401
402 void hci_sock_set_flag(struct sock *sk, int nr);
403 void hci_sock_clear_flag(struct sock *sk, int nr);
404 int hci_sock_test_flag(struct sock *sk, int nr);
405 unsigned short hci_sock_get_channel(struct sock *sk);
406 u32 hci_sock_get_cookie(struct sock *sk);
407
408 int hci_sock_init(void);
409 void hci_sock_cleanup(void);
410
411 int bt_sysfs_init(void);
412 void bt_sysfs_cleanup(void);
413
414 int bt_procfs_init(struct net *net, const char *name,
415                    struct bt_sock_list *sk_list,
416                    int (*seq_show)(struct seq_file *, void *));
417 void bt_procfs_cleanup(struct net *net, const char *name);
418
419 extern struct dentry *bt_debugfs;
420
421 int l2cap_init(void);
422 void l2cap_exit(void);
423
424 #if IS_ENABLED(CONFIG_BT_BREDR)
425 int sco_init(void);
426 void sco_exit(void);
427 #else
428 static inline int sco_init(void)
429 {
430         return 0;
431 }
432
433 static inline void sco_exit(void)
434 {
435 }
436 #endif
437
438 int mgmt_init(void);
439 void mgmt_exit(void);
440
441 void bt_sock_reclassify_lock(struct sock *sk, int proto);
442
443 #endif /* __BLUETOOTH_H */