]> git.karo-electronics.de Git - mv-sheeva.git/blob - include/net/bluetooth/hci.h
Bluetooth: mgmt: Make Set Link Security callable while powered off
[mv-sheeva.git] / include / net / bluetooth / hci.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 __HCI_H
26 #define __HCI_H
27
28 #define HCI_MAX_ACL_SIZE        1024
29 #define HCI_MAX_SCO_SIZE        255
30 #define HCI_MAX_EVENT_SIZE      260
31 #define HCI_MAX_FRAME_SIZE      (HCI_MAX_ACL_SIZE + 4)
32
33 /* HCI dev events */
34 #define HCI_DEV_REG                     1
35 #define HCI_DEV_UNREG                   2
36 #define HCI_DEV_UP                      3
37 #define HCI_DEV_DOWN                    4
38 #define HCI_DEV_SUSPEND                 5
39 #define HCI_DEV_RESUME                  6
40
41 /* HCI notify events */
42 #define HCI_NOTIFY_CONN_ADD             1
43 #define HCI_NOTIFY_CONN_DEL             2
44 #define HCI_NOTIFY_VOICE_SETTING        3
45
46 /* HCI bus types */
47 #define HCI_VIRTUAL     0
48 #define HCI_USB         1
49 #define HCI_PCCARD      2
50 #define HCI_UART        3
51 #define HCI_RS232       4
52 #define HCI_PCI         5
53 #define HCI_SDIO        6
54
55 /* HCI controller types */
56 #define HCI_BREDR       0x00
57 #define HCI_AMP         0x01
58
59 /* HCI device quirks */
60 enum {
61         HCI_QUIRK_NO_RESET,
62         HCI_QUIRK_RAW_DEVICE,
63         HCI_QUIRK_FIXUP_BUFFER_SIZE
64 };
65
66 /* HCI device flags */
67 enum {
68         HCI_UP,
69         HCI_INIT,
70         HCI_RUNNING,
71
72         HCI_PSCAN,
73         HCI_ISCAN,
74         HCI_AUTH,
75         HCI_ENCRYPT,
76         HCI_INQUIRY,
77
78         HCI_RAW,
79
80         HCI_RESET,
81 };
82
83 /*
84  * BR/EDR and/or LE controller flags: the flags defined here should represent
85  * states from the controller.
86  */
87 enum {
88         HCI_SETUP,
89         HCI_AUTO_OFF,
90         HCI_MGMT,
91         HCI_PAIRABLE,
92         HCI_SERVICE_CACHE,
93         HCI_LINK_KEYS,
94         HCI_DEBUG_KEYS,
95
96         HCI_LE_SCAN,
97         HCI_SSP_ENABLED,
98         HCI_HS_ENABLED,
99         HCI_CONNECTABLE,
100         HCI_DISCOVERABLE,
101         HCI_LINK_SECURITY,
102 };
103
104 /* HCI ioctl defines */
105 #define HCIDEVUP        _IOW('H', 201, int)
106 #define HCIDEVDOWN      _IOW('H', 202, int)
107 #define HCIDEVRESET     _IOW('H', 203, int)
108 #define HCIDEVRESTAT    _IOW('H', 204, int)
109
110 #define HCIGETDEVLIST   _IOR('H', 210, int)
111 #define HCIGETDEVINFO   _IOR('H', 211, int)
112 #define HCIGETCONNLIST  _IOR('H', 212, int)
113 #define HCIGETCONNINFO  _IOR('H', 213, int)
114 #define HCIGETAUTHINFO  _IOR('H', 215, int)
115
116 #define HCISETRAW       _IOW('H', 220, int)
117 #define HCISETSCAN      _IOW('H', 221, int)
118 #define HCISETAUTH      _IOW('H', 222, int)
119 #define HCISETENCRYPT   _IOW('H', 223, int)
120 #define HCISETPTYPE     _IOW('H', 224, int)
121 #define HCISETLINKPOL   _IOW('H', 225, int)
122 #define HCISETLINKMODE  _IOW('H', 226, int)
123 #define HCISETACLMTU    _IOW('H', 227, int)
124 #define HCISETSCOMTU    _IOW('H', 228, int)
125
126 #define HCIBLOCKADDR    _IOW('H', 230, int)
127 #define HCIUNBLOCKADDR  _IOW('H', 231, int)
128
129 #define HCIINQUIRY      _IOR('H', 240, int)
130
131 /* HCI timeouts */
132 #define HCI_CONNECT_TIMEOUT     (40000) /* 40 seconds */
133 #define HCI_DISCONN_TIMEOUT     (2000)  /* 2 seconds */
134 #define HCI_PAIRING_TIMEOUT     (60000) /* 60 seconds */
135 #define HCI_IDLE_TIMEOUT        (6000)  /* 6 seconds */
136 #define HCI_INIT_TIMEOUT        (10000) /* 10 seconds */
137 #define HCI_CMD_TIMEOUT         (1000)  /* 1 seconds */
138 #define HCI_ACL_TX_TIMEOUT      (45000) /* 45 seconds */
139
140 /* HCI data types */
141 #define HCI_COMMAND_PKT         0x01
142 #define HCI_ACLDATA_PKT         0x02
143 #define HCI_SCODATA_PKT         0x03
144 #define HCI_EVENT_PKT           0x04
145 #define HCI_VENDOR_PKT          0xff
146
147 /* HCI packet types */
148 #define HCI_DM1         0x0008
149 #define HCI_DM3         0x0400
150 #define HCI_DM5         0x4000
151 #define HCI_DH1         0x0010
152 #define HCI_DH3         0x0800
153 #define HCI_DH5         0x8000
154
155 #define HCI_HV1         0x0020
156 #define HCI_HV2         0x0040
157 #define HCI_HV3         0x0080
158
159 #define SCO_PTYPE_MASK  (HCI_HV1 | HCI_HV2 | HCI_HV3)
160 #define ACL_PTYPE_MASK  (~SCO_PTYPE_MASK)
161
162 /* eSCO packet types */
163 #define ESCO_HV1        0x0001
164 #define ESCO_HV2        0x0002
165 #define ESCO_HV3        0x0004
166 #define ESCO_EV3        0x0008
167 #define ESCO_EV4        0x0010
168 #define ESCO_EV5        0x0020
169 #define ESCO_2EV3       0x0040
170 #define ESCO_3EV3       0x0080
171 #define ESCO_2EV5       0x0100
172 #define ESCO_3EV5       0x0200
173
174 #define SCO_ESCO_MASK  (ESCO_HV1 | ESCO_HV2 | ESCO_HV3)
175 #define EDR_ESCO_MASK  (ESCO_2EV3 | ESCO_3EV3 | ESCO_2EV5 | ESCO_3EV5)
176
177 /* ACL flags */
178 #define ACL_START_NO_FLUSH      0x00
179 #define ACL_CONT                0x01
180 #define ACL_START               0x02
181 #define ACL_ACTIVE_BCAST        0x04
182 #define ACL_PICO_BCAST          0x08
183
184 /* Baseband links */
185 #define SCO_LINK        0x00
186 #define ACL_LINK        0x01
187 #define ESCO_LINK       0x02
188 /* Low Energy links do not have defined link type. Use invented one */
189 #define LE_LINK         0x80
190
191 /* LMP features */
192 #define LMP_3SLOT       0x01
193 #define LMP_5SLOT       0x02
194 #define LMP_ENCRYPT     0x04
195 #define LMP_SOFFSET     0x08
196 #define LMP_TACCURACY   0x10
197 #define LMP_RSWITCH     0x20
198 #define LMP_HOLD        0x40
199 #define LMP_SNIFF       0x80
200
201 #define LMP_PARK        0x01
202 #define LMP_RSSI        0x02
203 #define LMP_QUALITY     0x04
204 #define LMP_SCO         0x08
205 #define LMP_HV2         0x10
206 #define LMP_HV3         0x20
207 #define LMP_ULAW        0x40
208 #define LMP_ALAW        0x80
209
210 #define LMP_CVSD        0x01
211 #define LMP_PSCHEME     0x02
212 #define LMP_PCONTROL    0x04
213
214 #define LMP_RSSI_INQ    0x40
215 #define LMP_ESCO        0x80
216
217 #define LMP_EV4         0x01
218 #define LMP_EV5         0x02
219 #define LMP_NO_BREDR    0x20
220 #define LMP_LE          0x40
221
222 #define LMP_SNIFF_SUBR  0x02
223 #define LMP_PAUSE_ENC   0x04
224 #define LMP_EDR_ESCO_2M 0x20
225 #define LMP_EDR_ESCO_3M 0x40
226 #define LMP_EDR_3S_ESCO 0x80
227
228 #define LMP_EXT_INQ     0x01
229 #define LMP_SIMUL_LE_BR 0x02
230 #define LMP_SIMPLE_PAIR 0x08
231 #define LMP_NO_FLUSH    0x40
232
233 #define LMP_LSTO        0x01
234 #define LMP_INQ_TX_PWR  0x02
235 #define LMP_EXTFEATURES 0x80
236
237 /* Extended LMP features */
238 #define LMP_HOST_LE     0x02
239
240 /* Connection modes */
241 #define HCI_CM_ACTIVE   0x0000
242 #define HCI_CM_HOLD     0x0001
243 #define HCI_CM_SNIFF    0x0002
244 #define HCI_CM_PARK     0x0003
245
246 /* Link policies */
247 #define HCI_LP_RSWITCH  0x0001
248 #define HCI_LP_HOLD     0x0002
249 #define HCI_LP_SNIFF    0x0004
250 #define HCI_LP_PARK     0x0008
251
252 /* Link modes */
253 #define HCI_LM_ACCEPT   0x8000
254 #define HCI_LM_MASTER   0x0001
255 #define HCI_LM_AUTH     0x0002
256 #define HCI_LM_ENCRYPT  0x0004
257 #define HCI_LM_TRUSTED  0x0008
258 #define HCI_LM_RELIABLE 0x0010
259 #define HCI_LM_SECURE   0x0020
260
261 /* Authentication types */
262 #define HCI_AT_NO_BONDING               0x00
263 #define HCI_AT_NO_BONDING_MITM          0x01
264 #define HCI_AT_DEDICATED_BONDING        0x02
265 #define HCI_AT_DEDICATED_BONDING_MITM   0x03
266 #define HCI_AT_GENERAL_BONDING          0x04
267 #define HCI_AT_GENERAL_BONDING_MITM     0x05
268
269 /* Link Key types */
270 #define HCI_LK_COMBINATION              0x00
271 #define HCI_LK_LOCAL_UNIT               0x01
272 #define HCI_LK_REMOTE_UNIT              0x02
273 #define HCI_LK_DEBUG_COMBINATION        0x03
274 #define HCI_LK_UNAUTH_COMBINATION       0x04
275 #define HCI_LK_AUTH_COMBINATION         0x05
276 #define HCI_LK_CHANGED_COMBINATION      0x06
277 /* The spec doesn't define types for SMP keys, the _MASTER suffix is implied */
278 #define HCI_SMP_STK                     0x80
279 #define HCI_SMP_STK_SLAVE               0x81
280 #define HCI_SMP_LTK                     0x82
281 #define HCI_SMP_LTK_SLAVE               0x83
282
283 /* ---- HCI Error Codes ---- */
284 #define HCI_ERROR_AUTH_FAILURE          0x05
285 #define HCI_ERROR_REJ_BAD_ADDR          0x0f
286 #define HCI_ERROR_REMOTE_USER_TERM      0x13
287 #define HCI_ERROR_LOCAL_HOST_TERM       0x16
288 #define HCI_ERROR_PAIRING_NOT_ALLOWED   0x18
289
290 /* Flow control modes */
291 #define HCI_FLOW_CTL_MODE_PACKET_BASED  0x00
292 #define HCI_FLOW_CTL_MODE_BLOCK_BASED   0x01
293
294 /* Extended Inquiry Response field types */
295 #define EIR_FLAGS               0x01 /* flags */
296 #define EIR_UUID16_SOME         0x02 /* 16-bit UUID, more available */
297 #define EIR_UUID16_ALL          0x03 /* 16-bit UUID, all listed */
298 #define EIR_UUID32_SOME         0x04 /* 32-bit UUID, more available */
299 #define EIR_UUID32_ALL          0x05 /* 32-bit UUID, all listed */
300 #define EIR_UUID128_SOME        0x06 /* 128-bit UUID, more available */
301 #define EIR_UUID128_ALL         0x07 /* 128-bit UUID, all listed */
302 #define EIR_NAME_SHORT          0x08 /* shortened local name */
303 #define EIR_NAME_COMPLETE       0x09 /* complete local name */
304 #define EIR_TX_POWER            0x0A /* transmit power level */
305 #define EIR_CLASS_OF_DEV        0x0D /* Class of Device */
306 #define EIR_SSP_HASH_C          0x0E /* Simple Pairing Hash C */
307 #define EIR_SSP_RAND_R          0x0F /* Simple Pairing Randomizer R */
308 #define EIR_DEVICE_ID           0x10 /* device ID */
309
310 /* -----  HCI Commands ---- */
311 #define HCI_OP_NOP                      0x0000
312
313 #define HCI_OP_INQUIRY                  0x0401
314 struct hci_cp_inquiry {
315         __u8     lap[3];
316         __u8     length;
317         __u8     num_rsp;
318 } __packed;
319
320 #define HCI_OP_INQUIRY_CANCEL           0x0402
321
322 #define HCI_OP_EXIT_PERIODIC_INQ        0x0404
323
324 #define HCI_OP_CREATE_CONN              0x0405
325 struct hci_cp_create_conn {
326         bdaddr_t bdaddr;
327         __le16   pkt_type;
328         __u8     pscan_rep_mode;
329         __u8     pscan_mode;
330         __le16   clock_offset;
331         __u8     role_switch;
332 } __packed;
333
334 #define HCI_OP_DISCONNECT               0x0406
335 struct hci_cp_disconnect {
336         __le16   handle;
337         __u8     reason;
338 } __packed;
339
340 #define HCI_OP_ADD_SCO                  0x0407
341 struct hci_cp_add_sco {
342         __le16   handle;
343         __le16   pkt_type;
344 } __packed;
345
346 #define HCI_OP_CREATE_CONN_CANCEL       0x0408
347 struct hci_cp_create_conn_cancel {
348         bdaddr_t bdaddr;
349 } __packed;
350
351 #define HCI_OP_ACCEPT_CONN_REQ          0x0409
352 struct hci_cp_accept_conn_req {
353         bdaddr_t bdaddr;
354         __u8     role;
355 } __packed;
356
357 #define HCI_OP_REJECT_CONN_REQ          0x040a
358 struct hci_cp_reject_conn_req {
359         bdaddr_t bdaddr;
360         __u8     reason;
361 } __packed;
362
363 #define HCI_OP_LINK_KEY_REPLY           0x040b
364 struct hci_cp_link_key_reply {
365         bdaddr_t bdaddr;
366         __u8     link_key[16];
367 } __packed;
368
369 #define HCI_OP_LINK_KEY_NEG_REPLY       0x040c
370 struct hci_cp_link_key_neg_reply {
371         bdaddr_t bdaddr;
372 } __packed;
373
374 #define HCI_OP_PIN_CODE_REPLY           0x040d
375 struct hci_cp_pin_code_reply {
376         bdaddr_t bdaddr;
377         __u8     pin_len;
378         __u8     pin_code[16];
379 } __packed;
380 struct hci_rp_pin_code_reply {
381         __u8     status;
382         bdaddr_t bdaddr;
383 } __packed;
384
385 #define HCI_OP_PIN_CODE_NEG_REPLY       0x040e
386 struct hci_cp_pin_code_neg_reply {
387         bdaddr_t bdaddr;
388 } __packed;
389 struct hci_rp_pin_code_neg_reply {
390         __u8     status;
391         bdaddr_t bdaddr;
392 } __packed;
393
394 #define HCI_OP_CHANGE_CONN_PTYPE        0x040f
395 struct hci_cp_change_conn_ptype {
396         __le16   handle;
397         __le16   pkt_type;
398 } __packed;
399
400 #define HCI_OP_AUTH_REQUESTED           0x0411
401 struct hci_cp_auth_requested {
402         __le16   handle;
403 } __packed;
404
405 #define HCI_OP_SET_CONN_ENCRYPT         0x0413
406 struct hci_cp_set_conn_encrypt {
407         __le16   handle;
408         __u8     encrypt;
409 } __packed;
410
411 #define HCI_OP_CHANGE_CONN_LINK_KEY     0x0415
412 struct hci_cp_change_conn_link_key {
413         __le16   handle;
414 } __packed;
415
416 #define HCI_OP_REMOTE_NAME_REQ          0x0419
417 struct hci_cp_remote_name_req {
418         bdaddr_t bdaddr;
419         __u8     pscan_rep_mode;
420         __u8     pscan_mode;
421         __le16   clock_offset;
422 } __packed;
423
424 #define HCI_OP_REMOTE_NAME_REQ_CANCEL   0x041a
425 struct hci_cp_remote_name_req_cancel {
426         bdaddr_t bdaddr;
427 } __packed;
428
429 #define HCI_OP_READ_REMOTE_FEATURES     0x041b
430 struct hci_cp_read_remote_features {
431         __le16   handle;
432 } __packed;
433
434 #define HCI_OP_READ_REMOTE_EXT_FEATURES 0x041c
435 struct hci_cp_read_remote_ext_features {
436         __le16   handle;
437         __u8     page;
438 } __packed;
439
440 #define HCI_OP_READ_REMOTE_VERSION      0x041d
441 struct hci_cp_read_remote_version {
442         __le16   handle;
443 } __packed;
444
445 #define HCI_OP_SETUP_SYNC_CONN          0x0428
446 struct hci_cp_setup_sync_conn {
447         __le16   handle;
448         __le32   tx_bandwidth;
449         __le32   rx_bandwidth;
450         __le16   max_latency;
451         __le16   voice_setting;
452         __u8     retrans_effort;
453         __le16   pkt_type;
454 } __packed;
455
456 #define HCI_OP_ACCEPT_SYNC_CONN_REQ     0x0429
457 struct hci_cp_accept_sync_conn_req {
458         bdaddr_t bdaddr;
459         __le32   tx_bandwidth;
460         __le32   rx_bandwidth;
461         __le16   max_latency;
462         __le16   content_format;
463         __u8     retrans_effort;
464         __le16   pkt_type;
465 } __packed;
466
467 #define HCI_OP_REJECT_SYNC_CONN_REQ     0x042a
468 struct hci_cp_reject_sync_conn_req {
469         bdaddr_t bdaddr;
470         __u8     reason;
471 } __packed;
472
473 #define HCI_OP_IO_CAPABILITY_REPLY      0x042b
474 struct hci_cp_io_capability_reply {
475         bdaddr_t bdaddr;
476         __u8     capability;
477         __u8     oob_data;
478         __u8     authentication;
479 } __packed;
480
481 #define HCI_OP_USER_CONFIRM_REPLY               0x042c
482 struct hci_cp_user_confirm_reply {
483         bdaddr_t bdaddr;
484 } __packed;
485 struct hci_rp_user_confirm_reply {
486         __u8     status;
487         bdaddr_t bdaddr;
488 } __packed;
489
490 #define HCI_OP_USER_CONFIRM_NEG_REPLY   0x042d
491
492 #define HCI_OP_USER_PASSKEY_REPLY               0x042e
493 struct hci_cp_user_passkey_reply {
494         bdaddr_t bdaddr;
495         __le32  passkey;
496 } __packed;
497
498 #define HCI_OP_USER_PASSKEY_NEG_REPLY   0x042f
499
500 #define HCI_OP_REMOTE_OOB_DATA_REPLY    0x0430
501 struct hci_cp_remote_oob_data_reply {
502         bdaddr_t bdaddr;
503         __u8     hash[16];
504         __u8     randomizer[16];
505 } __packed;
506
507 #define HCI_OP_REMOTE_OOB_DATA_NEG_REPLY        0x0433
508 struct hci_cp_remote_oob_data_neg_reply {
509         bdaddr_t bdaddr;
510 } __packed;
511
512 #define HCI_OP_IO_CAPABILITY_NEG_REPLY  0x0434
513 struct hci_cp_io_capability_neg_reply {
514         bdaddr_t bdaddr;
515         __u8     reason;
516 } __packed;
517
518 #define HCI_OP_SNIFF_MODE               0x0803
519 struct hci_cp_sniff_mode {
520         __le16   handle;
521         __le16   max_interval;
522         __le16   min_interval;
523         __le16   attempt;
524         __le16   timeout;
525 } __packed;
526
527 #define HCI_OP_EXIT_SNIFF_MODE          0x0804
528 struct hci_cp_exit_sniff_mode {
529         __le16   handle;
530 } __packed;
531
532 #define HCI_OP_ROLE_DISCOVERY           0x0809
533 struct hci_cp_role_discovery {
534         __le16   handle;
535 } __packed;
536 struct hci_rp_role_discovery {
537         __u8     status;
538         __le16   handle;
539         __u8     role;
540 } __packed;
541
542 #define HCI_OP_SWITCH_ROLE              0x080b
543 struct hci_cp_switch_role {
544         bdaddr_t bdaddr;
545         __u8     role;
546 } __packed;
547
548 #define HCI_OP_READ_LINK_POLICY         0x080c
549 struct hci_cp_read_link_policy {
550         __le16   handle;
551 } __packed;
552 struct hci_rp_read_link_policy {
553         __u8     status;
554         __le16   handle;
555         __le16   policy;
556 } __packed;
557
558 #define HCI_OP_WRITE_LINK_POLICY        0x080d
559 struct hci_cp_write_link_policy {
560         __le16   handle;
561         __le16   policy;
562 } __packed;
563 struct hci_rp_write_link_policy {
564         __u8     status;
565         __le16   handle;
566 } __packed;
567
568 #define HCI_OP_READ_DEF_LINK_POLICY     0x080e
569 struct hci_rp_read_def_link_policy {
570         __u8     status;
571         __le16   policy;
572 } __packed;
573
574 #define HCI_OP_WRITE_DEF_LINK_POLICY    0x080f
575 struct hci_cp_write_def_link_policy {
576         __le16   policy;
577 } __packed;
578
579 #define HCI_OP_SNIFF_SUBRATE            0x0811
580 struct hci_cp_sniff_subrate {
581         __le16   handle;
582         __le16   max_latency;
583         __le16   min_remote_timeout;
584         __le16   min_local_timeout;
585 } __packed;
586
587 #define HCI_OP_SET_EVENT_MASK           0x0c01
588 struct hci_cp_set_event_mask {
589         __u8     mask[8];
590 } __packed;
591
592 #define HCI_OP_RESET                    0x0c03
593
594 #define HCI_OP_SET_EVENT_FLT            0x0c05
595 struct hci_cp_set_event_flt {
596         __u8     flt_type;
597         __u8     cond_type;
598         __u8     condition[0];
599 } __packed;
600
601 /* Filter types */
602 #define HCI_FLT_CLEAR_ALL       0x00
603 #define HCI_FLT_INQ_RESULT      0x01
604 #define HCI_FLT_CONN_SETUP      0x02
605
606 /* CONN_SETUP Condition types */
607 #define HCI_CONN_SETUP_ALLOW_ALL        0x00
608 #define HCI_CONN_SETUP_ALLOW_CLASS      0x01
609 #define HCI_CONN_SETUP_ALLOW_BDADDR     0x02
610
611 /* CONN_SETUP Conditions */
612 #define HCI_CONN_SETUP_AUTO_OFF 0x01
613 #define HCI_CONN_SETUP_AUTO_ON  0x02
614
615 #define HCI_OP_DELETE_STORED_LINK_KEY   0x0c12
616 struct hci_cp_delete_stored_link_key {
617         bdaddr_t bdaddr;
618         __u8     delete_all;
619 } __packed;
620
621 #define HCI_MAX_NAME_LENGTH             248
622
623 #define HCI_OP_WRITE_LOCAL_NAME         0x0c13
624 struct hci_cp_write_local_name {
625         __u8     name[HCI_MAX_NAME_LENGTH];
626 } __packed;
627
628 #define HCI_OP_READ_LOCAL_NAME          0x0c14
629 struct hci_rp_read_local_name {
630         __u8     status;
631         __u8     name[HCI_MAX_NAME_LENGTH];
632 } __packed;
633
634 #define HCI_OP_WRITE_CA_TIMEOUT         0x0c16
635
636 #define HCI_OP_WRITE_PG_TIMEOUT         0x0c18
637
638 #define HCI_OP_WRITE_SCAN_ENABLE        0x0c1a
639         #define SCAN_DISABLED           0x00
640         #define SCAN_INQUIRY            0x01
641         #define SCAN_PAGE               0x02
642
643 #define HCI_OP_READ_AUTH_ENABLE         0x0c1f
644
645 #define HCI_OP_WRITE_AUTH_ENABLE        0x0c20
646         #define AUTH_DISABLED           0x00
647         #define AUTH_ENABLED            0x01
648
649 #define HCI_OP_READ_ENCRYPT_MODE        0x0c21
650
651 #define HCI_OP_WRITE_ENCRYPT_MODE       0x0c22
652         #define ENCRYPT_DISABLED        0x00
653         #define ENCRYPT_P2P             0x01
654         #define ENCRYPT_BOTH            0x02
655
656 #define HCI_OP_READ_CLASS_OF_DEV        0x0c23
657 struct hci_rp_read_class_of_dev {
658         __u8     status;
659         __u8     dev_class[3];
660 } __packed;
661
662 #define HCI_OP_WRITE_CLASS_OF_DEV       0x0c24
663 struct hci_cp_write_class_of_dev {
664         __u8     dev_class[3];
665 } __packed;
666
667 #define HCI_OP_READ_VOICE_SETTING       0x0c25
668 struct hci_rp_read_voice_setting {
669         __u8     status;
670         __le16   voice_setting;
671 } __packed;
672
673 #define HCI_OP_WRITE_VOICE_SETTING      0x0c26
674 struct hci_cp_write_voice_setting {
675         __le16   voice_setting;
676 } __packed;
677
678 #define HCI_OP_HOST_BUFFER_SIZE         0x0c33
679 struct hci_cp_host_buffer_size {
680         __le16   acl_mtu;
681         __u8     sco_mtu;
682         __le16   acl_max_pkt;
683         __le16   sco_max_pkt;
684 } __packed;
685
686 #define HCI_OP_WRITE_INQUIRY_MODE       0x0c45
687
688 #define HCI_MAX_EIR_LENGTH              240
689
690 #define HCI_OP_WRITE_EIR                0x0c52
691 struct hci_cp_write_eir {
692         uint8_t         fec;
693         uint8_t         data[HCI_MAX_EIR_LENGTH];
694 } __packed;
695
696 #define HCI_OP_READ_SSP_MODE            0x0c55
697 struct hci_rp_read_ssp_mode {
698         __u8     status;
699         __u8     mode;
700 } __packed;
701
702 #define HCI_OP_WRITE_SSP_MODE           0x0c56
703 struct hci_cp_write_ssp_mode {
704         __u8     mode;
705 } __packed;
706
707 #define HCI_OP_READ_LOCAL_OOB_DATA              0x0c57
708 struct hci_rp_read_local_oob_data {
709         __u8     status;
710         __u8     hash[16];
711         __u8     randomizer[16];
712 } __packed;
713
714 #define HCI_OP_READ_INQ_RSP_TX_POWER    0x0c58
715
716 #define HCI_OP_READ_FLOW_CONTROL_MODE   0x0c66
717 struct hci_rp_read_flow_control_mode {
718         __u8     status;
719         __u8     mode;
720 } __packed;
721
722 #define HCI_OP_WRITE_LE_HOST_SUPPORTED  0x0c6d
723 struct hci_cp_write_le_host_supported {
724         __u8 le;
725         __u8 simul;
726 } __packed;
727
728 #define HCI_OP_READ_LOCAL_VERSION       0x1001
729 struct hci_rp_read_local_version {
730         __u8     status;
731         __u8     hci_ver;
732         __le16   hci_rev;
733         __u8     lmp_ver;
734         __le16   manufacturer;
735         __le16   lmp_subver;
736 } __packed;
737
738 #define HCI_OP_READ_LOCAL_COMMANDS      0x1002
739 struct hci_rp_read_local_commands {
740         __u8     status;
741         __u8     commands[64];
742 } __packed;
743
744 #define HCI_OP_READ_LOCAL_FEATURES      0x1003
745 struct hci_rp_read_local_features {
746         __u8     status;
747         __u8     features[8];
748 } __packed;
749
750 #define HCI_OP_READ_LOCAL_EXT_FEATURES  0x1004
751 struct hci_cp_read_local_ext_features {
752         __u8     page;
753 } __packed;
754 struct hci_rp_read_local_ext_features {
755         __u8     status;
756         __u8     page;
757         __u8     max_page;
758         __u8     features[8];
759 } __packed;
760
761 #define HCI_OP_READ_BUFFER_SIZE         0x1005
762 struct hci_rp_read_buffer_size {
763         __u8     status;
764         __le16   acl_mtu;
765         __u8     sco_mtu;
766         __le16   acl_max_pkt;
767         __le16   sco_max_pkt;
768 } __packed;
769
770 #define HCI_OP_READ_BD_ADDR             0x1009
771 struct hci_rp_read_bd_addr {
772         __u8     status;
773         bdaddr_t bdaddr;
774 } __packed;
775
776 #define HCI_OP_READ_DATA_BLOCK_SIZE     0x100a
777 struct hci_rp_read_data_block_size {
778         __u8     status;
779         __le16   max_acl_len;
780         __le16   block_len;
781         __le16   num_blocks;
782 } __packed;
783
784 #define HCI_OP_WRITE_PAGE_SCAN_ACTIVITY 0x0c1c
785 struct hci_cp_write_page_scan_activity {
786         __le16   interval;
787         __le16   window;
788 } __packed;
789
790 #define HCI_OP_WRITE_PAGE_SCAN_TYPE     0x0c47
791         #define PAGE_SCAN_TYPE_STANDARD         0x00
792         #define PAGE_SCAN_TYPE_INTERLACED       0x01
793
794 #define HCI_OP_READ_LOCAL_AMP_INFO      0x1409
795 struct hci_rp_read_local_amp_info {
796         __u8     status;
797         __u8     amp_status;
798         __le32   total_bw;
799         __le32   max_bw;
800         __le32   min_latency;
801         __le32   max_pdu;
802         __u8     amp_type;
803         __le16   pal_cap;
804         __le16   max_assoc_size;
805         __le32   max_flush_to;
806         __le32   be_flush_to;
807 } __packed;
808
809 #define HCI_OP_LE_SET_EVENT_MASK        0x2001
810 struct hci_cp_le_set_event_mask {
811         __u8     mask[8];
812 } __packed;
813
814 #define HCI_OP_LE_READ_BUFFER_SIZE      0x2002
815 struct hci_rp_le_read_buffer_size {
816         __u8     status;
817         __le16   le_mtu;
818         __u8     le_max_pkt;
819 } __packed;
820
821 #define HCI_OP_LE_SET_SCAN_PARAM        0x200b
822 struct hci_cp_le_set_scan_param {
823         __u8    type;
824         __le16  interval;
825         __le16  window;
826         __u8    own_address_type;
827         __u8    filter_policy;
828 } __packed;
829
830 #define LE_SCANNING_DISABLED            0x00
831 #define LE_SCANNING_ENABLED             0x01
832
833 #define HCI_OP_LE_SET_SCAN_ENABLE       0x200c
834 struct hci_cp_le_set_scan_enable {
835         __u8     enable;
836         __u8     filter_dup;
837 } __packed;
838
839 #define HCI_OP_LE_CREATE_CONN           0x200d
840 struct hci_cp_le_create_conn {
841         __le16   scan_interval;
842         __le16   scan_window;
843         __u8     filter_policy;
844         __u8     peer_addr_type;
845         bdaddr_t peer_addr;
846         __u8     own_address_type;
847         __le16   conn_interval_min;
848         __le16   conn_interval_max;
849         __le16   conn_latency;
850         __le16   supervision_timeout;
851         __le16   min_ce_len;
852         __le16   max_ce_len;
853 } __packed;
854
855 #define HCI_OP_LE_CREATE_CONN_CANCEL    0x200e
856
857 #define HCI_OP_LE_CONN_UPDATE           0x2013
858 struct hci_cp_le_conn_update {
859         __le16   handle;
860         __le16   conn_interval_min;
861         __le16   conn_interval_max;
862         __le16   conn_latency;
863         __le16   supervision_timeout;
864         __le16   min_ce_len;
865         __le16   max_ce_len;
866 } __packed;
867
868 #define HCI_OP_LE_START_ENC             0x2019
869 struct hci_cp_le_start_enc {
870         __le16  handle;
871         __u8    rand[8];
872         __le16  ediv;
873         __u8    ltk[16];
874 } __packed;
875
876 #define HCI_OP_LE_LTK_REPLY             0x201a
877 struct hci_cp_le_ltk_reply {
878         __le16  handle;
879         __u8    ltk[16];
880 } __packed;
881 struct hci_rp_le_ltk_reply {
882         __u8    status;
883         __le16  handle;
884 } __packed;
885
886 #define HCI_OP_LE_LTK_NEG_REPLY         0x201b
887 struct hci_cp_le_ltk_neg_reply {
888         __le16  handle;
889 } __packed;
890 struct hci_rp_le_ltk_neg_reply {
891         __u8    status;
892         __le16  handle;
893 } __packed;
894
895 /* ---- HCI Events ---- */
896 #define HCI_EV_INQUIRY_COMPLETE         0x01
897
898 #define HCI_EV_INQUIRY_RESULT           0x02
899 struct inquiry_info {
900         bdaddr_t bdaddr;
901         __u8     pscan_rep_mode;
902         __u8     pscan_period_mode;
903         __u8     pscan_mode;
904         __u8     dev_class[3];
905         __le16   clock_offset;
906 } __packed;
907
908 #define HCI_EV_CONN_COMPLETE            0x03
909 struct hci_ev_conn_complete {
910         __u8     status;
911         __le16   handle;
912         bdaddr_t bdaddr;
913         __u8     link_type;
914         __u8     encr_mode;
915 } __packed;
916
917 #define HCI_EV_CONN_REQUEST             0x04
918 struct hci_ev_conn_request {
919         bdaddr_t bdaddr;
920         __u8     dev_class[3];
921         __u8     link_type;
922 } __packed;
923
924 #define HCI_EV_DISCONN_COMPLETE         0x05
925 struct hci_ev_disconn_complete {
926         __u8     status;
927         __le16   handle;
928         __u8     reason;
929 } __packed;
930
931 #define HCI_EV_AUTH_COMPLETE            0x06
932 struct hci_ev_auth_complete {
933         __u8     status;
934         __le16   handle;
935 } __packed;
936
937 #define HCI_EV_REMOTE_NAME              0x07
938 struct hci_ev_remote_name {
939         __u8     status;
940         bdaddr_t bdaddr;
941         __u8     name[HCI_MAX_NAME_LENGTH];
942 } __packed;
943
944 #define HCI_EV_ENCRYPT_CHANGE           0x08
945 struct hci_ev_encrypt_change {
946         __u8     status;
947         __le16   handle;
948         __u8     encrypt;
949 } __packed;
950
951 #define HCI_EV_CHANGE_LINK_KEY_COMPLETE 0x09
952 struct hci_ev_change_link_key_complete {
953         __u8     status;
954         __le16   handle;
955 } __packed;
956
957 #define HCI_EV_REMOTE_FEATURES          0x0b
958 struct hci_ev_remote_features {
959         __u8     status;
960         __le16   handle;
961         __u8     features[8];
962 } __packed;
963
964 #define HCI_EV_REMOTE_VERSION           0x0c
965 struct hci_ev_remote_version {
966         __u8     status;
967         __le16   handle;
968         __u8     lmp_ver;
969         __le16   manufacturer;
970         __le16   lmp_subver;
971 } __packed;
972
973 #define HCI_EV_QOS_SETUP_COMPLETE       0x0d
974 struct hci_qos {
975         __u8     service_type;
976         __u32    token_rate;
977         __u32    peak_bandwidth;
978         __u32    latency;
979         __u32    delay_variation;
980 } __packed;
981 struct hci_ev_qos_setup_complete {
982         __u8     status;
983         __le16   handle;
984         struct   hci_qos qos;
985 } __packed;
986
987 #define HCI_EV_CMD_COMPLETE             0x0e
988 struct hci_ev_cmd_complete {
989         __u8     ncmd;
990         __le16   opcode;
991 } __packed;
992
993 #define HCI_EV_CMD_STATUS               0x0f
994 struct hci_ev_cmd_status {
995         __u8     status;
996         __u8     ncmd;
997         __le16   opcode;
998 } __packed;
999
1000 #define HCI_EV_ROLE_CHANGE              0x12
1001 struct hci_ev_role_change {
1002         __u8     status;
1003         bdaddr_t bdaddr;
1004         __u8     role;
1005 } __packed;
1006
1007 #define HCI_EV_NUM_COMP_PKTS            0x13
1008 struct hci_comp_pkts_info {
1009         __le16   handle;
1010         __le16   count;
1011 } __packed;
1012
1013 struct hci_ev_num_comp_pkts {
1014         __u8     num_hndl;
1015         struct hci_comp_pkts_info handles[0];
1016 } __packed;
1017
1018 #define HCI_EV_MODE_CHANGE              0x14
1019 struct hci_ev_mode_change {
1020         __u8     status;
1021         __le16   handle;
1022         __u8     mode;
1023         __le16   interval;
1024 } __packed;
1025
1026 #define HCI_EV_PIN_CODE_REQ             0x16
1027 struct hci_ev_pin_code_req {
1028         bdaddr_t bdaddr;
1029 } __packed;
1030
1031 #define HCI_EV_LINK_KEY_REQ             0x17
1032 struct hci_ev_link_key_req {
1033         bdaddr_t bdaddr;
1034 } __packed;
1035
1036 #define HCI_EV_LINK_KEY_NOTIFY          0x18
1037 struct hci_ev_link_key_notify {
1038         bdaddr_t bdaddr;
1039         __u8     link_key[16];
1040         __u8     key_type;
1041 } __packed;
1042
1043 #define HCI_EV_CLOCK_OFFSET             0x1c
1044 struct hci_ev_clock_offset {
1045         __u8     status;
1046         __le16   handle;
1047         __le16   clock_offset;
1048 } __packed;
1049
1050 #define HCI_EV_PKT_TYPE_CHANGE          0x1d
1051 struct hci_ev_pkt_type_change {
1052         __u8     status;
1053         __le16   handle;
1054         __le16   pkt_type;
1055 } __packed;
1056
1057 #define HCI_EV_PSCAN_REP_MODE           0x20
1058 struct hci_ev_pscan_rep_mode {
1059         bdaddr_t bdaddr;
1060         __u8     pscan_rep_mode;
1061 } __packed;
1062
1063 #define HCI_EV_INQUIRY_RESULT_WITH_RSSI 0x22
1064 struct inquiry_info_with_rssi {
1065         bdaddr_t bdaddr;
1066         __u8     pscan_rep_mode;
1067         __u8     pscan_period_mode;
1068         __u8     dev_class[3];
1069         __le16   clock_offset;
1070         __s8     rssi;
1071 } __packed;
1072 struct inquiry_info_with_rssi_and_pscan_mode {
1073         bdaddr_t bdaddr;
1074         __u8     pscan_rep_mode;
1075         __u8     pscan_period_mode;
1076         __u8     pscan_mode;
1077         __u8     dev_class[3];
1078         __le16   clock_offset;
1079         __s8     rssi;
1080 } __packed;
1081
1082 #define HCI_EV_REMOTE_EXT_FEATURES      0x23
1083 struct hci_ev_remote_ext_features {
1084         __u8     status;
1085         __le16   handle;
1086         __u8     page;
1087         __u8     max_page;
1088         __u8     features[8];
1089 } __packed;
1090
1091 #define HCI_EV_SYNC_CONN_COMPLETE       0x2c
1092 struct hci_ev_sync_conn_complete {
1093         __u8     status;
1094         __le16   handle;
1095         bdaddr_t bdaddr;
1096         __u8     link_type;
1097         __u8     tx_interval;
1098         __u8     retrans_window;
1099         __le16   rx_pkt_len;
1100         __le16   tx_pkt_len;
1101         __u8     air_mode;
1102 } __packed;
1103
1104 #define HCI_EV_SYNC_CONN_CHANGED        0x2d
1105 struct hci_ev_sync_conn_changed {
1106         __u8     status;
1107         __le16   handle;
1108         __u8     tx_interval;
1109         __u8     retrans_window;
1110         __le16   rx_pkt_len;
1111         __le16   tx_pkt_len;
1112 } __packed;
1113
1114 #define HCI_EV_SNIFF_SUBRATE            0x2e
1115 struct hci_ev_sniff_subrate {
1116         __u8     status;
1117         __le16   handle;
1118         __le16   max_tx_latency;
1119         __le16   max_rx_latency;
1120         __le16   max_remote_timeout;
1121         __le16   max_local_timeout;
1122 } __packed;
1123
1124 #define HCI_EV_EXTENDED_INQUIRY_RESULT  0x2f
1125 struct extended_inquiry_info {
1126         bdaddr_t bdaddr;
1127         __u8     pscan_rep_mode;
1128         __u8     pscan_period_mode;
1129         __u8     dev_class[3];
1130         __le16   clock_offset;
1131         __s8     rssi;
1132         __u8     data[240];
1133 } __packed;
1134
1135 #define HCI_EV_IO_CAPA_REQUEST          0x31
1136 struct hci_ev_io_capa_request {
1137         bdaddr_t bdaddr;
1138 } __packed;
1139
1140 #define HCI_EV_IO_CAPA_REPLY            0x32
1141 struct hci_ev_io_capa_reply {
1142         bdaddr_t bdaddr;
1143         __u8     capability;
1144         __u8     oob_data;
1145         __u8     authentication;
1146 } __packed;
1147
1148 #define HCI_EV_USER_CONFIRM_REQUEST     0x33
1149 struct hci_ev_user_confirm_req {
1150         bdaddr_t        bdaddr;
1151         __le32          passkey;
1152 } __packed;
1153
1154 #define HCI_EV_USER_PASSKEY_REQUEST     0x34
1155 struct hci_ev_user_passkey_req {
1156         bdaddr_t        bdaddr;
1157 } __packed;
1158
1159 #define HCI_EV_REMOTE_OOB_DATA_REQUEST  0x35
1160 struct hci_ev_remote_oob_data_request {
1161         bdaddr_t bdaddr;
1162 } __packed;
1163
1164 #define HCI_EV_SIMPLE_PAIR_COMPLETE     0x36
1165 struct hci_ev_simple_pair_complete {
1166         __u8     status;
1167         bdaddr_t bdaddr;
1168 } __packed;
1169
1170 #define HCI_EV_REMOTE_HOST_FEATURES     0x3d
1171 struct hci_ev_remote_host_features {
1172         bdaddr_t bdaddr;
1173         __u8     features[8];
1174 } __packed;
1175
1176 #define HCI_EV_LE_META                  0x3e
1177 struct hci_ev_le_meta {
1178         __u8     subevent;
1179 } __packed;
1180
1181 #define HCI_EV_NUM_COMP_BLOCKS          0x48
1182 struct hci_comp_blocks_info {
1183         __le16   handle;
1184         __le16   pkts;
1185         __le16   blocks;
1186 } __packed;
1187
1188 struct hci_ev_num_comp_blocks {
1189         __le16   num_blocks;
1190         __u8     num_hndl;
1191         struct hci_comp_blocks_info handles[0];
1192 } __packed;
1193
1194 /* Low energy meta events */
1195 #define HCI_EV_LE_CONN_COMPLETE         0x01
1196 struct hci_ev_le_conn_complete {
1197         __u8     status;
1198         __le16   handle;
1199         __u8     role;
1200         __u8     bdaddr_type;
1201         bdaddr_t bdaddr;
1202         __le16   interval;
1203         __le16   latency;
1204         __le16   supervision_timeout;
1205         __u8     clk_accurancy;
1206 } __packed;
1207
1208 #define HCI_EV_LE_LTK_REQ               0x05
1209 struct hci_ev_le_ltk_req {
1210         __le16  handle;
1211         __u8    random[8];
1212         __le16  ediv;
1213 } __packed;
1214
1215 /* Advertising report event types */
1216 #define ADV_IND         0x00
1217 #define ADV_DIRECT_IND  0x01
1218 #define ADV_SCAN_IND    0x02
1219 #define ADV_NONCONN_IND 0x03
1220 #define ADV_SCAN_RSP    0x04
1221
1222 #define ADDR_LE_DEV_PUBLIC      0x00
1223 #define ADDR_LE_DEV_RANDOM      0x01
1224
1225 #define HCI_EV_LE_ADVERTISING_REPORT    0x02
1226 struct hci_ev_le_advertising_info {
1227         __u8     evt_type;
1228         __u8     bdaddr_type;
1229         bdaddr_t bdaddr;
1230         __u8     length;
1231         __u8     data[0];
1232 } __packed;
1233
1234 /* Internal events generated by Bluetooth stack */
1235 #define HCI_EV_STACK_INTERNAL   0xfd
1236 struct hci_ev_stack_internal {
1237         __u16    type;
1238         __u8     data[0];
1239 } __packed;
1240
1241 #define HCI_EV_SI_DEVICE        0x01
1242 struct hci_ev_si_device {
1243         __u16    event;
1244         __u16    dev_id;
1245 } __packed;
1246
1247 #define HCI_EV_SI_SECURITY      0x02
1248 struct hci_ev_si_security {
1249         __u16    event;
1250         __u16    proto;
1251         __u16    subproto;
1252         __u8     incoming;
1253 } __packed;
1254
1255 /* ---- HCI Packet structures ---- */
1256 #define HCI_COMMAND_HDR_SIZE 3
1257 #define HCI_EVENT_HDR_SIZE   2
1258 #define HCI_ACL_HDR_SIZE     4
1259 #define HCI_SCO_HDR_SIZE     3
1260
1261 struct hci_command_hdr {
1262         __le16  opcode;         /* OCF & OGF */
1263         __u8    plen;
1264 } __packed;
1265
1266 struct hci_event_hdr {
1267         __u8    evt;
1268         __u8    plen;
1269 } __packed;
1270
1271 struct hci_acl_hdr {
1272         __le16  handle;         /* Handle & Flags(PB, BC) */
1273         __le16  dlen;
1274 } __packed;
1275
1276 struct hci_sco_hdr {
1277         __le16  handle;
1278         __u8    dlen;
1279 } __packed;
1280
1281 #include <linux/skbuff.h>
1282 static inline struct hci_event_hdr *hci_event_hdr(const struct sk_buff *skb)
1283 {
1284         return (struct hci_event_hdr *) skb->data;
1285 }
1286
1287 static inline struct hci_acl_hdr *hci_acl_hdr(const struct sk_buff *skb)
1288 {
1289         return (struct hci_acl_hdr *) skb->data;
1290 }
1291
1292 static inline struct hci_sco_hdr *hci_sco_hdr(const struct sk_buff *skb)
1293 {
1294         return (struct hci_sco_hdr *) skb->data;
1295 }
1296
1297 /* Command opcode pack/unpack */
1298 #define hci_opcode_pack(ogf, ocf)       (__u16) ((ocf & 0x03ff)|(ogf << 10))
1299 #define hci_opcode_ogf(op)              (op >> 10)
1300 #define hci_opcode_ocf(op)              (op & 0x03ff)
1301
1302 /* ACL handle and flags pack/unpack */
1303 #define hci_handle_pack(h, f)   (__u16) ((h & 0x0fff)|(f << 12))
1304 #define hci_handle(h)           (h & 0x0fff)
1305 #define hci_flags(h)            (h >> 12)
1306
1307 /* ---- HCI Sockets ---- */
1308
1309 /* Socket options */
1310 #define HCI_DATA_DIR    1
1311 #define HCI_FILTER      2
1312 #define HCI_TIME_STAMP  3
1313
1314 /* CMSG flags */
1315 #define HCI_CMSG_DIR    0x0001
1316 #define HCI_CMSG_TSTAMP 0x0002
1317
1318 struct sockaddr_hci {
1319         sa_family_t    hci_family;
1320         unsigned short hci_dev;
1321         unsigned short hci_channel;
1322 };
1323 #define HCI_DEV_NONE    0xffff
1324
1325 #define HCI_CHANNEL_RAW         0
1326 #define HCI_CHANNEL_CONTROL     1
1327 #define HCI_CHANNEL_MONITOR     2
1328
1329 struct hci_filter {
1330         unsigned long type_mask;
1331         unsigned long event_mask[2];
1332         __le16 opcode;
1333 };
1334
1335 struct hci_ufilter {
1336         __u32  type_mask;
1337         __u32  event_mask[2];
1338         __le16 opcode;
1339 };
1340
1341 #define HCI_FLT_TYPE_BITS       31
1342 #define HCI_FLT_EVENT_BITS      63
1343 #define HCI_FLT_OGF_BITS        63
1344 #define HCI_FLT_OCF_BITS        127
1345
1346 /* ---- HCI Ioctl requests structures ---- */
1347 struct hci_dev_stats {
1348         __u32 err_rx;
1349         __u32 err_tx;
1350         __u32 cmd_tx;
1351         __u32 evt_rx;
1352         __u32 acl_tx;
1353         __u32 acl_rx;
1354         __u32 sco_tx;
1355         __u32 sco_rx;
1356         __u32 byte_rx;
1357         __u32 byte_tx;
1358 };
1359
1360 struct hci_dev_info {
1361         __u16 dev_id;
1362         char  name[8];
1363
1364         bdaddr_t bdaddr;
1365
1366         __u32 flags;
1367         __u8  type;
1368
1369         __u8  features[8];
1370
1371         __u32 pkt_type;
1372         __u32 link_policy;
1373         __u32 link_mode;
1374
1375         __u16 acl_mtu;
1376         __u16 acl_pkts;
1377         __u16 sco_mtu;
1378         __u16 sco_pkts;
1379
1380         struct hci_dev_stats stat;
1381 };
1382
1383 struct hci_conn_info {
1384         __u16    handle;
1385         bdaddr_t bdaddr;
1386         __u8     type;
1387         __u8     out;
1388         __u16    state;
1389         __u32    link_mode;
1390 };
1391
1392 struct hci_dev_req {
1393         __u16  dev_id;
1394         __u32  dev_opt;
1395 };
1396
1397 struct hci_dev_list_req {
1398         __u16  dev_num;
1399         struct hci_dev_req dev_req[0];  /* hci_dev_req structures */
1400 };
1401
1402 struct hci_conn_list_req {
1403         __u16  dev_id;
1404         __u16  conn_num;
1405         struct hci_conn_info conn_info[0];
1406 };
1407
1408 struct hci_conn_info_req {
1409         bdaddr_t bdaddr;
1410         __u8     type;
1411         struct   hci_conn_info conn_info[0];
1412 };
1413
1414 struct hci_auth_info_req {
1415         bdaddr_t bdaddr;
1416         __u8     type;
1417 };
1418
1419 struct hci_inquiry_req {
1420         __u16 dev_id;
1421         __u16 flags;
1422         __u8  lap[3];
1423         __u8  length;
1424         __u8  num_rsp;
1425 };
1426 #define IREQ_CACHE_FLUSH 0x0001
1427
1428 extern bool enable_hs;
1429 extern bool enable_le;
1430
1431 #endif /* __HCI_H */