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 __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#define HCI_LINK_KEY_SIZE 16
34#define HCI_AMP_LINK_KEY_SIZE (2 * HCI_LINK_KEY_SIZE)
35
36#define HCI_MAX_AMP_ASSOC_SIZE 672
37
38#define HCI_MAX_CSB_DATA_SIZE 252
39
40
41#define HCI_DEV_REG 1
42#define HCI_DEV_UNREG 2
43#define HCI_DEV_UP 3
44#define HCI_DEV_DOWN 4
45#define HCI_DEV_SUSPEND 5
46#define HCI_DEV_RESUME 6
47#define HCI_DEV_OPEN 7
48#define HCI_DEV_CLOSE 8
49#define HCI_DEV_SETUP 9
50
51
52#define HCI_NOTIFY_CONN_ADD 1
53#define HCI_NOTIFY_CONN_DEL 2
54#define HCI_NOTIFY_VOICE_SETTING 3
55
56
57#define HCI_VIRTUAL 0
58#define HCI_USB 1
59#define HCI_PCCARD 2
60#define HCI_UART 3
61#define HCI_RS232 4
62#define HCI_PCI 5
63#define HCI_SDIO 6
64#define HCI_SPI 7
65#define HCI_I2C 8
66
67
68#define HCI_BREDR 0x00
69#define HCI_AMP 0x01
70
71
72#define AMP_ID_BREDR 0x00
73
74
75#define AMP_TYPE_BREDR 0x00
76#define AMP_TYPE_80211 0x01
77
78
79#define AMP_STATUS_POWERED_DOWN 0x00
80#define AMP_STATUS_BLUETOOTH_ONLY 0x01
81#define AMP_STATUS_NO_CAPACITY 0x02
82#define AMP_STATUS_LOW_CAPACITY 0x03
83#define AMP_STATUS_MEDIUM_CAPACITY 0x04
84#define AMP_STATUS_HIGH_CAPACITY 0x05
85#define AMP_STATUS_FULL_CAPACITY 0x06
86
87
88enum {
89
90
91
92
93
94 HCI_QUIRK_RESET_ON_CLOSE,
95
96
97
98
99
100
101 HCI_QUIRK_RAW_DEVICE,
102
103
104
105
106
107
108 HCI_QUIRK_FIXUP_BUFFER_SIZE,
109
110
111
112
113
114
115
116
117
118
119
120 HCI_QUIRK_FIXUP_INQUIRY_MODE,
121
122
123
124
125
126
127
128
129
130 HCI_QUIRK_BROKEN_LOCAL_COMMANDS,
131
132
133
134
135
136
137
138
139 HCI_QUIRK_BROKEN_STORED_LINK_KEY,
140
141
142
143
144
145
146
147
148 HCI_QUIRK_EXTERNAL_CONFIG,
149
150
151
152
153
154
155
156
157
158 HCI_QUIRK_INVALID_BDADDR,
159
160
161
162
163
164
165
166
167 HCI_QUIRK_STRICT_DUPLICATE_FILTER,
168
169
170
171
172
173
174
175 HCI_QUIRK_SIMULTANEOUS_DISCOVERY,
176
177
178
179
180
181
182
183
184 HCI_QUIRK_NON_PERSISTENT_DIAG,
185};
186
187
188enum {
189 HCI_UP,
190 HCI_INIT,
191 HCI_RUNNING,
192
193 HCI_PSCAN,
194 HCI_ISCAN,
195 HCI_AUTH,
196 HCI_ENCRYPT,
197 HCI_INQUIRY,
198
199 HCI_RAW,
200
201 HCI_RESET,
202};
203
204
205enum {
206 HCI_SOCK_TRUSTED,
207 HCI_MGMT_INDEX_EVENTS,
208 HCI_MGMT_UNCONF_INDEX_EVENTS,
209 HCI_MGMT_EXT_INDEX_EVENTS,
210 HCI_MGMT_GENERIC_EVENTS,
211 HCI_MGMT_OOB_DATA_EVENTS,
212};
213
214
215
216
217
218enum {
219 HCI_SETUP,
220 HCI_CONFIG,
221 HCI_AUTO_OFF,
222 HCI_RFKILLED,
223 HCI_MGMT,
224 HCI_BONDABLE,
225 HCI_SERVICE_CACHE,
226 HCI_KEEP_DEBUG_KEYS,
227 HCI_USE_DEBUG_KEYS,
228 HCI_UNREGISTER,
229 HCI_UNCONFIGURED,
230 HCI_USER_CHANNEL,
231 HCI_EXT_CONFIGURED,
232 HCI_LE_ADV,
233 HCI_LE_SCAN,
234 HCI_SSP_ENABLED,
235 HCI_SC_ENABLED,
236 HCI_SC_ONLY,
237 HCI_PRIVACY,
238 HCI_LIMITED_PRIVACY,
239 HCI_RPA_EXPIRED,
240 HCI_RPA_RESOLVING,
241 HCI_HS_ENABLED,
242 HCI_LE_ENABLED,
243 HCI_ADVERTISING,
244 HCI_ADVERTISING_CONNECTABLE,
245 HCI_CONNECTABLE,
246 HCI_DISCOVERABLE,
247 HCI_LIMITED_DISCOVERABLE,
248 HCI_LINK_SECURITY,
249 HCI_PERIODIC_INQ,
250 HCI_FAST_CONNECTABLE,
251 HCI_BREDR_ENABLED,
252 HCI_LE_SCAN_INTERRUPTED,
253
254 HCI_DUT_MODE,
255 HCI_VENDOR_DIAG,
256 HCI_FORCE_BREDR_SMP,
257 HCI_FORCE_STATIC_ADDR,
258
259 __HCI_NUM_FLAGS,
260};
261
262
263#define HCI_DISCONN_TIMEOUT msecs_to_jiffies(2000)
264#define HCI_PAIRING_TIMEOUT msecs_to_jiffies(60000)
265#define HCI_INIT_TIMEOUT msecs_to_jiffies(10000)
266#define HCI_CMD_TIMEOUT msecs_to_jiffies(2000)
267#define HCI_ACL_TX_TIMEOUT msecs_to_jiffies(45000)
268#define HCI_AUTO_OFF_TIMEOUT msecs_to_jiffies(2000)
269#define HCI_POWER_OFF_TIMEOUT msecs_to_jiffies(5000)
270#define HCI_LE_CONN_TIMEOUT msecs_to_jiffies(20000)
271#define HCI_LE_AUTOCONN_TIMEOUT msecs_to_jiffies(2000)
272
273
274#define HCI_COMMAND_PKT 0x01
275#define HCI_ACLDATA_PKT 0x02
276#define HCI_SCODATA_PKT 0x03
277#define HCI_EVENT_PKT 0x04
278#define HCI_DIAG_PKT 0xf0
279#define HCI_VENDOR_PKT 0xff
280
281
282#define HCI_DM1 0x0008
283#define HCI_DM3 0x0400
284#define HCI_DM5 0x4000
285#define HCI_DH1 0x0010
286#define HCI_DH3 0x0800
287#define HCI_DH5 0x8000
288
289#define HCI_HV1 0x0020
290#define HCI_HV2 0x0040
291#define HCI_HV3 0x0080
292
293#define SCO_PTYPE_MASK (HCI_HV1 | HCI_HV2 | HCI_HV3)
294#define ACL_PTYPE_MASK (~SCO_PTYPE_MASK)
295
296
297#define ESCO_HV1 0x0001
298#define ESCO_HV2 0x0002
299#define ESCO_HV3 0x0004
300#define ESCO_EV3 0x0008
301#define ESCO_EV4 0x0010
302#define ESCO_EV5 0x0020
303#define ESCO_2EV3 0x0040
304#define ESCO_3EV3 0x0080
305#define ESCO_2EV5 0x0100
306#define ESCO_3EV5 0x0200
307
308#define SCO_ESCO_MASK (ESCO_HV1 | ESCO_HV2 | ESCO_HV3)
309#define EDR_ESCO_MASK (ESCO_2EV3 | ESCO_3EV3 | ESCO_2EV5 | ESCO_3EV5)
310
311
312#define ACL_START_NO_FLUSH 0x00
313#define ACL_CONT 0x01
314#define ACL_START 0x02
315#define ACL_COMPLETE 0x03
316#define ACL_ACTIVE_BCAST 0x04
317#define ACL_PICO_BCAST 0x08
318
319
320#define SCO_LINK 0x00
321#define ACL_LINK 0x01
322#define ESCO_LINK 0x02
323
324#define LE_LINK 0x80
325#define AMP_LINK 0x81
326#define INVALID_LINK 0xff
327
328
329#define LMP_3SLOT 0x01
330#define LMP_5SLOT 0x02
331#define LMP_ENCRYPT 0x04
332#define LMP_SOFFSET 0x08
333#define LMP_TACCURACY 0x10
334#define LMP_RSWITCH 0x20
335#define LMP_HOLD 0x40
336#define LMP_SNIFF 0x80
337
338#define LMP_PARK 0x01
339#define LMP_RSSI 0x02
340#define LMP_QUALITY 0x04
341#define LMP_SCO 0x08
342#define LMP_HV2 0x10
343#define LMP_HV3 0x20
344#define LMP_ULAW 0x40
345#define LMP_ALAW 0x80
346
347#define LMP_CVSD 0x01
348#define LMP_PSCHEME 0x02
349#define LMP_PCONTROL 0x04
350#define LMP_TRANSPARENT 0x08
351
352#define LMP_RSSI_INQ 0x40
353#define LMP_ESCO 0x80
354
355#define LMP_EV4 0x01
356#define LMP_EV5 0x02
357#define LMP_NO_BREDR 0x20
358#define LMP_LE 0x40
359
360#define LMP_SNIFF_SUBR 0x02
361#define LMP_PAUSE_ENC 0x04
362#define LMP_EDR_ESCO_2M 0x20
363#define LMP_EDR_ESCO_3M 0x40
364#define LMP_EDR_3S_ESCO 0x80
365
366#define LMP_EXT_INQ 0x01
367#define LMP_SIMUL_LE_BR 0x02
368#define LMP_SIMPLE_PAIR 0x08
369#define LMP_NO_FLUSH 0x40
370
371#define LMP_LSTO 0x01
372#define LMP_INQ_TX_PWR 0x02
373#define LMP_EXTFEATURES 0x80
374
375
376#define LMP_CSB_MASTER 0x01
377#define LMP_CSB_SLAVE 0x02
378#define LMP_SYNC_TRAIN 0x04
379#define LMP_SYNC_SCAN 0x08
380
381#define LMP_SC 0x01
382#define LMP_PING 0x02
383
384
385#define LMP_HOST_SSP 0x01
386#define LMP_HOST_LE 0x02
387#define LMP_HOST_LE_BREDR 0x04
388#define LMP_HOST_SC 0x08
389
390
391#define HCI_LE_ENCRYPTION 0x01
392#define HCI_LE_CONN_PARAM_REQ_PROC 0x02
393#define HCI_LE_SLAVE_FEATURES 0x08
394#define HCI_LE_PING 0x10
395#define HCI_LE_DATA_LEN_EXT 0x20
396#define HCI_LE_EXT_SCAN_POLICY 0x80
397
398
399#define HCI_CM_ACTIVE 0x0000
400#define HCI_CM_HOLD 0x0001
401#define HCI_CM_SNIFF 0x0002
402#define HCI_CM_PARK 0x0003
403
404
405#define HCI_LP_RSWITCH 0x0001
406#define HCI_LP_HOLD 0x0002
407#define HCI_LP_SNIFF 0x0004
408#define HCI_LP_PARK 0x0008
409
410
411#define HCI_LM_ACCEPT 0x8000
412#define HCI_LM_MASTER 0x0001
413#define HCI_LM_AUTH 0x0002
414#define HCI_LM_ENCRYPT 0x0004
415#define HCI_LM_TRUSTED 0x0008
416#define HCI_LM_RELIABLE 0x0010
417#define HCI_LM_SECURE 0x0020
418#define HCI_LM_FIPS 0x0040
419
420
421#define HCI_AT_NO_BONDING 0x00
422#define HCI_AT_NO_BONDING_MITM 0x01
423#define HCI_AT_DEDICATED_BONDING 0x02
424#define HCI_AT_DEDICATED_BONDING_MITM 0x03
425#define HCI_AT_GENERAL_BONDING 0x04
426#define HCI_AT_GENERAL_BONDING_MITM 0x05
427
428
429#define HCI_IO_DISPLAY_ONLY 0x00
430#define HCI_IO_DISPLAY_YESNO 0x01
431#define HCI_IO_KEYBOARD_ONLY 0x02
432#define HCI_IO_NO_INPUT_OUTPUT 0x03
433
434
435#define HCI_LK_COMBINATION 0x00
436#define HCI_LK_LOCAL_UNIT 0x01
437#define HCI_LK_REMOTE_UNIT 0x02
438#define HCI_LK_DEBUG_COMBINATION 0x03
439#define HCI_LK_UNAUTH_COMBINATION_P192 0x04
440#define HCI_LK_AUTH_COMBINATION_P192 0x05
441#define HCI_LK_CHANGED_COMBINATION 0x06
442#define HCI_LK_UNAUTH_COMBINATION_P256 0x07
443#define HCI_LK_AUTH_COMBINATION_P256 0x08
444
445
446#define HCI_ERROR_UNKNOWN_CONN_ID 0x02
447#define HCI_ERROR_AUTH_FAILURE 0x05
448#define HCI_ERROR_MEMORY_EXCEEDED 0x07
449#define HCI_ERROR_CONNECTION_TIMEOUT 0x08
450#define HCI_ERROR_REJ_LIMITED_RESOURCES 0x0d
451#define HCI_ERROR_REJ_BAD_ADDR 0x0f
452#define HCI_ERROR_REMOTE_USER_TERM 0x13
453#define HCI_ERROR_REMOTE_LOW_RESOURCES 0x14
454#define HCI_ERROR_REMOTE_POWER_OFF 0x15
455#define HCI_ERROR_LOCAL_HOST_TERM 0x16
456#define HCI_ERROR_PAIRING_NOT_ALLOWED 0x18
457#define HCI_ERROR_INVALID_LL_PARAMS 0x1e
458#define HCI_ERROR_UNSPECIFIED 0x1f
459#define HCI_ERROR_ADVERTISING_TIMEOUT 0x3c
460
461
462#define HCI_FLOW_CTL_MODE_PACKET_BASED 0x00
463#define HCI_FLOW_CTL_MODE_BLOCK_BASED 0x01
464
465
466#define HCI_TX_POWER_INVALID 127
467#define HCI_RSSI_INVALID 127
468
469#define HCI_ROLE_MASTER 0x00
470#define HCI_ROLE_SLAVE 0x01
471
472
473#define EIR_FLAGS 0x01
474#define EIR_UUID16_SOME 0x02
475#define EIR_UUID16_ALL 0x03
476#define EIR_UUID32_SOME 0x04
477#define EIR_UUID32_ALL 0x05
478#define EIR_UUID128_SOME 0x06
479#define EIR_UUID128_ALL 0x07
480#define EIR_NAME_SHORT 0x08
481#define EIR_NAME_COMPLETE 0x09
482#define EIR_TX_POWER 0x0A
483#define EIR_CLASS_OF_DEV 0x0D
484#define EIR_SSP_HASH_C192 0x0E
485#define EIR_SSP_RAND_R192 0x0F
486#define EIR_DEVICE_ID 0x10
487#define EIR_APPEARANCE 0x19
488#define EIR_LE_BDADDR 0x1B
489#define EIR_LE_ROLE 0x1C
490#define EIR_SSP_HASH_C256 0x1D
491#define EIR_SSP_RAND_R256 0x1E
492#define EIR_LE_SC_CONFIRM 0x22
493#define EIR_LE_SC_RANDOM 0x23
494
495
496#define LE_AD_LIMITED 0x01
497#define LE_AD_GENERAL 0x02
498#define LE_AD_NO_BREDR 0x04
499#define LE_AD_SIM_LE_BREDR_CTRL 0x08
500#define LE_AD_SIM_LE_BREDR_HOST 0x10
501
502
503#define HCI_OP_NOP 0x0000
504
505#define HCI_OP_INQUIRY 0x0401
506struct hci_cp_inquiry {
507 __u8 lap[3];
508 __u8 length;
509 __u8 num_rsp;
510} __packed;
511
512#define HCI_OP_INQUIRY_CANCEL 0x0402
513
514#define HCI_OP_PERIODIC_INQ 0x0403
515
516#define HCI_OP_EXIT_PERIODIC_INQ 0x0404
517
518#define HCI_OP_CREATE_CONN 0x0405
519struct hci_cp_create_conn {
520 bdaddr_t bdaddr;
521 __le16 pkt_type;
522 __u8 pscan_rep_mode;
523 __u8 pscan_mode;
524 __le16 clock_offset;
525 __u8 role_switch;
526} __packed;
527
528#define HCI_OP_DISCONNECT 0x0406
529struct hci_cp_disconnect {
530 __le16 handle;
531 __u8 reason;
532} __packed;
533
534#define HCI_OP_ADD_SCO 0x0407
535struct hci_cp_add_sco {
536 __le16 handle;
537 __le16 pkt_type;
538} __packed;
539
540#define HCI_OP_CREATE_CONN_CANCEL 0x0408
541struct hci_cp_create_conn_cancel {
542 bdaddr_t bdaddr;
543} __packed;
544
545#define HCI_OP_ACCEPT_CONN_REQ 0x0409
546struct hci_cp_accept_conn_req {
547 bdaddr_t bdaddr;
548 __u8 role;
549} __packed;
550
551#define HCI_OP_REJECT_CONN_REQ 0x040a
552struct hci_cp_reject_conn_req {
553 bdaddr_t bdaddr;
554 __u8 reason;
555} __packed;
556
557#define HCI_OP_LINK_KEY_REPLY 0x040b
558struct hci_cp_link_key_reply {
559 bdaddr_t bdaddr;
560 __u8 link_key[HCI_LINK_KEY_SIZE];
561} __packed;
562
563#define HCI_OP_LINK_KEY_NEG_REPLY 0x040c
564struct hci_cp_link_key_neg_reply {
565 bdaddr_t bdaddr;
566} __packed;
567
568#define HCI_OP_PIN_CODE_REPLY 0x040d
569struct hci_cp_pin_code_reply {
570 bdaddr_t bdaddr;
571 __u8 pin_len;
572 __u8 pin_code[16];
573} __packed;
574struct hci_rp_pin_code_reply {
575 __u8 status;
576 bdaddr_t bdaddr;
577} __packed;
578
579#define HCI_OP_PIN_CODE_NEG_REPLY 0x040e
580struct hci_cp_pin_code_neg_reply {
581 bdaddr_t bdaddr;
582} __packed;
583struct hci_rp_pin_code_neg_reply {
584 __u8 status;
585 bdaddr_t bdaddr;
586} __packed;
587
588#define HCI_OP_CHANGE_CONN_PTYPE 0x040f
589struct hci_cp_change_conn_ptype {
590 __le16 handle;
591 __le16 pkt_type;
592} __packed;
593
594#define HCI_OP_AUTH_REQUESTED 0x0411
595struct hci_cp_auth_requested {
596 __le16 handle;
597} __packed;
598
599#define HCI_OP_SET_CONN_ENCRYPT 0x0413
600struct hci_cp_set_conn_encrypt {
601 __le16 handle;
602 __u8 encrypt;
603} __packed;
604
605#define HCI_OP_CHANGE_CONN_LINK_KEY 0x0415
606struct hci_cp_change_conn_link_key {
607 __le16 handle;
608} __packed;
609
610#define HCI_OP_REMOTE_NAME_REQ 0x0419
611struct hci_cp_remote_name_req {
612 bdaddr_t bdaddr;
613 __u8 pscan_rep_mode;
614 __u8 pscan_mode;
615 __le16 clock_offset;
616} __packed;
617
618#define HCI_OP_REMOTE_NAME_REQ_CANCEL 0x041a
619struct hci_cp_remote_name_req_cancel {
620 bdaddr_t bdaddr;
621} __packed;
622
623#define HCI_OP_READ_REMOTE_FEATURES 0x041b
624struct hci_cp_read_remote_features {
625 __le16 handle;
626} __packed;
627
628#define HCI_OP_READ_REMOTE_EXT_FEATURES 0x041c
629struct hci_cp_read_remote_ext_features {
630 __le16 handle;
631 __u8 page;
632} __packed;
633
634#define HCI_OP_READ_REMOTE_VERSION 0x041d
635struct hci_cp_read_remote_version {
636 __le16 handle;
637} __packed;
638
639#define HCI_OP_READ_CLOCK_OFFSET 0x041f
640struct hci_cp_read_clock_offset {
641 __le16 handle;
642} __packed;
643
644#define HCI_OP_SETUP_SYNC_CONN 0x0428
645struct hci_cp_setup_sync_conn {
646 __le16 handle;
647 __le32 tx_bandwidth;
648 __le32 rx_bandwidth;
649 __le16 max_latency;
650 __le16 voice_setting;
651 __u8 retrans_effort;
652 __le16 pkt_type;
653} __packed;
654
655#define HCI_OP_ACCEPT_SYNC_CONN_REQ 0x0429
656struct hci_cp_accept_sync_conn_req {
657 bdaddr_t bdaddr;
658 __le32 tx_bandwidth;
659 __le32 rx_bandwidth;
660 __le16 max_latency;
661 __le16 content_format;
662 __u8 retrans_effort;
663 __le16 pkt_type;
664} __packed;
665
666#define HCI_OP_REJECT_SYNC_CONN_REQ 0x042a
667struct hci_cp_reject_sync_conn_req {
668 bdaddr_t bdaddr;
669 __u8 reason;
670} __packed;
671
672#define HCI_OP_IO_CAPABILITY_REPLY 0x042b
673struct hci_cp_io_capability_reply {
674 bdaddr_t bdaddr;
675 __u8 capability;
676 __u8 oob_data;
677 __u8 authentication;
678} __packed;
679
680#define HCI_OP_USER_CONFIRM_REPLY 0x042c
681struct hci_cp_user_confirm_reply {
682 bdaddr_t bdaddr;
683} __packed;
684struct hci_rp_user_confirm_reply {
685 __u8 status;
686 bdaddr_t bdaddr;
687} __packed;
688
689#define HCI_OP_USER_CONFIRM_NEG_REPLY 0x042d
690
691#define HCI_OP_USER_PASSKEY_REPLY 0x042e
692struct hci_cp_user_passkey_reply {
693 bdaddr_t bdaddr;
694 __le32 passkey;
695} __packed;
696
697#define HCI_OP_USER_PASSKEY_NEG_REPLY 0x042f
698
699#define HCI_OP_REMOTE_OOB_DATA_REPLY 0x0430
700struct hci_cp_remote_oob_data_reply {
701 bdaddr_t bdaddr;
702 __u8 hash[16];
703 __u8 rand[16];
704} __packed;
705
706#define HCI_OP_REMOTE_OOB_DATA_NEG_REPLY 0x0433
707struct hci_cp_remote_oob_data_neg_reply {
708 bdaddr_t bdaddr;
709} __packed;
710
711#define HCI_OP_IO_CAPABILITY_NEG_REPLY 0x0434
712struct hci_cp_io_capability_neg_reply {
713 bdaddr_t bdaddr;
714 __u8 reason;
715} __packed;
716
717#define HCI_OP_CREATE_PHY_LINK 0x0435
718struct hci_cp_create_phy_link {
719 __u8 phy_handle;
720 __u8 key_len;
721 __u8 key_type;
722 __u8 key[HCI_AMP_LINK_KEY_SIZE];
723} __packed;
724
725#define HCI_OP_ACCEPT_PHY_LINK 0x0436
726struct hci_cp_accept_phy_link {
727 __u8 phy_handle;
728 __u8 key_len;
729 __u8 key_type;
730 __u8 key[HCI_AMP_LINK_KEY_SIZE];
731} __packed;
732
733#define HCI_OP_DISCONN_PHY_LINK 0x0437
734struct hci_cp_disconn_phy_link {
735 __u8 phy_handle;
736 __u8 reason;
737} __packed;
738
739struct ext_flow_spec {
740 __u8 id;
741 __u8 stype;
742 __le16 msdu;
743 __le32 sdu_itime;
744 __le32 acc_lat;
745 __le32 flush_to;
746} __packed;
747
748#define HCI_OP_CREATE_LOGICAL_LINK 0x0438
749#define HCI_OP_ACCEPT_LOGICAL_LINK 0x0439
750struct hci_cp_create_accept_logical_link {
751 __u8 phy_handle;
752 struct ext_flow_spec tx_flow_spec;
753 struct ext_flow_spec rx_flow_spec;
754} __packed;
755
756#define HCI_OP_DISCONN_LOGICAL_LINK 0x043a
757struct hci_cp_disconn_logical_link {
758 __le16 log_handle;
759} __packed;
760
761#define HCI_OP_LOGICAL_LINK_CANCEL 0x043b
762struct hci_cp_logical_link_cancel {
763 __u8 phy_handle;
764 __u8 flow_spec_id;
765} __packed;
766
767struct hci_rp_logical_link_cancel {
768 __u8 status;
769 __u8 phy_handle;
770 __u8 flow_spec_id;
771} __packed;
772
773#define HCI_OP_SET_CSB 0x0441
774struct hci_cp_set_csb {
775 __u8 enable;
776 __u8 lt_addr;
777 __u8 lpo_allowed;
778 __le16 packet_type;
779 __le16 interval_min;
780 __le16 interval_max;
781 __le16 csb_sv_tout;
782} __packed;
783struct hci_rp_set_csb {
784 __u8 status;
785 __u8 lt_addr;
786 __le16 interval;
787} __packed;
788
789#define HCI_OP_START_SYNC_TRAIN 0x0443
790
791#define HCI_OP_REMOTE_OOB_EXT_DATA_REPLY 0x0445
792struct hci_cp_remote_oob_ext_data_reply {
793 bdaddr_t bdaddr;
794 __u8 hash192[16];
795 __u8 rand192[16];
796 __u8 hash256[16];
797 __u8 rand256[16];
798} __packed;
799
800#define HCI_OP_SNIFF_MODE 0x0803
801struct hci_cp_sniff_mode {
802 __le16 handle;
803 __le16 max_interval;
804 __le16 min_interval;
805 __le16 attempt;
806 __le16 timeout;
807} __packed;
808
809#define HCI_OP_EXIT_SNIFF_MODE 0x0804
810struct hci_cp_exit_sniff_mode {
811 __le16 handle;
812} __packed;
813
814#define HCI_OP_ROLE_DISCOVERY 0x0809
815struct hci_cp_role_discovery {
816 __le16 handle;
817} __packed;
818struct hci_rp_role_discovery {
819 __u8 status;
820 __le16 handle;
821 __u8 role;
822} __packed;
823
824#define HCI_OP_SWITCH_ROLE 0x080b
825struct hci_cp_switch_role {
826 bdaddr_t bdaddr;
827 __u8 role;
828} __packed;
829
830#define HCI_OP_READ_LINK_POLICY 0x080c
831struct hci_cp_read_link_policy {
832 __le16 handle;
833} __packed;
834struct hci_rp_read_link_policy {
835 __u8 status;
836 __le16 handle;
837 __le16 policy;
838} __packed;
839
840#define HCI_OP_WRITE_LINK_POLICY 0x080d
841struct hci_cp_write_link_policy {
842 __le16 handle;
843 __le16 policy;
844} __packed;
845struct hci_rp_write_link_policy {
846 __u8 status;
847 __le16 handle;
848} __packed;
849
850#define HCI_OP_READ_DEF_LINK_POLICY 0x080e
851struct hci_rp_read_def_link_policy {
852 __u8 status;
853 __le16 policy;
854} __packed;
855
856#define HCI_OP_WRITE_DEF_LINK_POLICY 0x080f
857struct hci_cp_write_def_link_policy {
858 __le16 policy;
859} __packed;
860
861#define HCI_OP_SNIFF_SUBRATE 0x0811
862struct hci_cp_sniff_subrate {
863 __le16 handle;
864 __le16 max_latency;
865 __le16 min_remote_timeout;
866 __le16 min_local_timeout;
867} __packed;
868
869#define HCI_OP_SET_EVENT_MASK 0x0c01
870
871#define HCI_OP_RESET 0x0c03
872
873#define HCI_OP_SET_EVENT_FLT 0x0c05
874struct hci_cp_set_event_flt {
875 __u8 flt_type;
876 __u8 cond_type;
877 __u8 condition[0];
878} __packed;
879
880
881#define HCI_FLT_CLEAR_ALL 0x00
882#define HCI_FLT_INQ_RESULT 0x01
883#define HCI_FLT_CONN_SETUP 0x02
884
885
886#define HCI_CONN_SETUP_ALLOW_ALL 0x00
887#define HCI_CONN_SETUP_ALLOW_CLASS 0x01
888#define HCI_CONN_SETUP_ALLOW_BDADDR 0x02
889
890
891#define HCI_CONN_SETUP_AUTO_OFF 0x01
892#define HCI_CONN_SETUP_AUTO_ON 0x02
893
894#define HCI_OP_READ_STORED_LINK_KEY 0x0c0d
895struct hci_cp_read_stored_link_key {
896 bdaddr_t bdaddr;
897 __u8 read_all;
898} __packed;
899struct hci_rp_read_stored_link_key {
900 __u8 status;
901 __u8 max_keys;
902 __u8 num_keys;
903} __packed;
904
905#define HCI_OP_DELETE_STORED_LINK_KEY 0x0c12
906struct hci_cp_delete_stored_link_key {
907 bdaddr_t bdaddr;
908 __u8 delete_all;
909} __packed;
910struct hci_rp_delete_stored_link_key {
911 __u8 status;
912 __u8 num_keys;
913} __packed;
914
915#define HCI_MAX_NAME_LENGTH 248
916
917#define HCI_OP_WRITE_LOCAL_NAME 0x0c13
918struct hci_cp_write_local_name {
919 __u8 name[HCI_MAX_NAME_LENGTH];
920} __packed;
921
922#define HCI_OP_READ_LOCAL_NAME 0x0c14
923struct hci_rp_read_local_name {
924 __u8 status;
925 __u8 name[HCI_MAX_NAME_LENGTH];
926} __packed;
927
928#define HCI_OP_WRITE_CA_TIMEOUT 0x0c16
929
930#define HCI_OP_WRITE_PG_TIMEOUT 0x0c18
931
932#define HCI_OP_WRITE_SCAN_ENABLE 0x0c1a
933 #define SCAN_DISABLED 0x00
934 #define SCAN_INQUIRY 0x01
935 #define SCAN_PAGE 0x02
936
937#define HCI_OP_READ_AUTH_ENABLE 0x0c1f
938
939#define HCI_OP_WRITE_AUTH_ENABLE 0x0c20
940 #define AUTH_DISABLED 0x00
941 #define AUTH_ENABLED 0x01
942
943#define HCI_OP_READ_ENCRYPT_MODE 0x0c21
944
945#define HCI_OP_WRITE_ENCRYPT_MODE 0x0c22
946 #define ENCRYPT_DISABLED 0x00
947 #define ENCRYPT_P2P 0x01
948 #define ENCRYPT_BOTH 0x02
949
950#define HCI_OP_READ_CLASS_OF_DEV 0x0c23
951struct hci_rp_read_class_of_dev {
952 __u8 status;
953 __u8 dev_class[3];
954} __packed;
955
956#define HCI_OP_WRITE_CLASS_OF_DEV 0x0c24
957struct hci_cp_write_class_of_dev {
958 __u8 dev_class[3];
959} __packed;
960
961#define HCI_OP_READ_VOICE_SETTING 0x0c25
962struct hci_rp_read_voice_setting {
963 __u8 status;
964 __le16 voice_setting;
965} __packed;
966
967#define HCI_OP_WRITE_VOICE_SETTING 0x0c26
968struct hci_cp_write_voice_setting {
969 __le16 voice_setting;
970} __packed;
971
972#define HCI_OP_HOST_BUFFER_SIZE 0x0c33
973struct hci_cp_host_buffer_size {
974 __le16 acl_mtu;
975 __u8 sco_mtu;
976 __le16 acl_max_pkt;
977 __le16 sco_max_pkt;
978} __packed;
979
980#define HCI_OP_READ_NUM_SUPPORTED_IAC 0x0c38
981struct hci_rp_read_num_supported_iac {
982 __u8 status;
983 __u8 num_iac;
984} __packed;
985
986#define HCI_OP_READ_CURRENT_IAC_LAP 0x0c39
987
988#define HCI_OP_WRITE_CURRENT_IAC_LAP 0x0c3a
989struct hci_cp_write_current_iac_lap {
990 __u8 num_iac;
991 __u8 iac_lap[6];
992} __packed;
993
994#define HCI_OP_WRITE_INQUIRY_MODE 0x0c45
995
996#define HCI_MAX_EIR_LENGTH 240
997
998#define HCI_OP_WRITE_EIR 0x0c52
999struct hci_cp_write_eir {
1000 __u8 fec;
1001 __u8 data[HCI_MAX_EIR_LENGTH];
1002} __packed;
1003
1004#define HCI_OP_READ_SSP_MODE 0x0c55
1005struct hci_rp_read_ssp_mode {
1006 __u8 status;
1007 __u8 mode;
1008} __packed;
1009
1010#define HCI_OP_WRITE_SSP_MODE 0x0c56
1011struct hci_cp_write_ssp_mode {
1012 __u8 mode;
1013} __packed;
1014
1015#define HCI_OP_READ_LOCAL_OOB_DATA 0x0c57
1016struct hci_rp_read_local_oob_data {
1017 __u8 status;
1018 __u8 hash[16];
1019 __u8 rand[16];
1020} __packed;
1021
1022#define HCI_OP_READ_INQ_RSP_TX_POWER 0x0c58
1023struct hci_rp_read_inq_rsp_tx_power {
1024 __u8 status;
1025 __s8 tx_power;
1026} __packed;
1027
1028#define HCI_OP_SET_EVENT_MASK_PAGE_2 0x0c63
1029
1030#define HCI_OP_READ_LOCATION_DATA 0x0c64
1031
1032#define HCI_OP_READ_FLOW_CONTROL_MODE 0x0c66
1033struct hci_rp_read_flow_control_mode {
1034 __u8 status;
1035 __u8 mode;
1036} __packed;
1037
1038#define HCI_OP_WRITE_LE_HOST_SUPPORTED 0x0c6d
1039struct hci_cp_write_le_host_supported {
1040 __u8 le;
1041 __u8 simul;
1042} __packed;
1043
1044#define HCI_OP_SET_RESERVED_LT_ADDR 0x0c74
1045struct hci_cp_set_reserved_lt_addr {
1046 __u8 lt_addr;
1047} __packed;
1048struct hci_rp_set_reserved_lt_addr {
1049 __u8 status;
1050 __u8 lt_addr;
1051} __packed;
1052
1053#define HCI_OP_DELETE_RESERVED_LT_ADDR 0x0c75
1054struct hci_cp_delete_reserved_lt_addr {
1055 __u8 lt_addr;
1056} __packed;
1057struct hci_rp_delete_reserved_lt_addr {
1058 __u8 status;
1059 __u8 lt_addr;
1060} __packed;
1061
1062#define HCI_OP_SET_CSB_DATA 0x0c76
1063struct hci_cp_set_csb_data {
1064 __u8 lt_addr;
1065 __u8 fragment;
1066 __u8 data_length;
1067 __u8 data[HCI_MAX_CSB_DATA_SIZE];
1068} __packed;
1069struct hci_rp_set_csb_data {
1070 __u8 status;
1071 __u8 lt_addr;
1072} __packed;
1073
1074#define HCI_OP_READ_SYNC_TRAIN_PARAMS 0x0c77
1075
1076#define HCI_OP_WRITE_SYNC_TRAIN_PARAMS 0x0c78
1077struct hci_cp_write_sync_train_params {
1078 __le16 interval_min;
1079 __le16 interval_max;
1080 __le32 sync_train_tout;
1081 __u8 service_data;
1082} __packed;
1083struct hci_rp_write_sync_train_params {
1084 __u8 status;
1085 __le16 sync_train_int;
1086} __packed;
1087
1088#define HCI_OP_READ_SC_SUPPORT 0x0c79
1089struct hci_rp_read_sc_support {
1090 __u8 status;
1091 __u8 support;
1092} __packed;
1093
1094#define HCI_OP_WRITE_SC_SUPPORT 0x0c7a
1095struct hci_cp_write_sc_support {
1096 __u8 support;
1097} __packed;
1098
1099#define HCI_OP_READ_LOCAL_OOB_EXT_DATA 0x0c7d
1100struct hci_rp_read_local_oob_ext_data {
1101 __u8 status;
1102 __u8 hash192[16];
1103 __u8 rand192[16];
1104 __u8 hash256[16];
1105 __u8 rand256[16];
1106} __packed;
1107
1108#define HCI_OP_READ_LOCAL_VERSION 0x1001
1109struct hci_rp_read_local_version {
1110 __u8 status;
1111 __u8 hci_ver;
1112 __le16 hci_rev;
1113 __u8 lmp_ver;
1114 __le16 manufacturer;
1115 __le16 lmp_subver;
1116} __packed;
1117
1118#define HCI_OP_READ_LOCAL_COMMANDS 0x1002
1119struct hci_rp_read_local_commands {
1120 __u8 status;
1121 __u8 commands[64];
1122} __packed;
1123
1124#define HCI_OP_READ_LOCAL_FEATURES 0x1003
1125struct hci_rp_read_local_features {
1126 __u8 status;
1127 __u8 features[8];
1128} __packed;
1129
1130#define HCI_OP_READ_LOCAL_EXT_FEATURES 0x1004
1131struct hci_cp_read_local_ext_features {
1132 __u8 page;
1133} __packed;
1134struct hci_rp_read_local_ext_features {
1135 __u8 status;
1136 __u8 page;
1137 __u8 max_page;
1138 __u8 features[8];
1139} __packed;
1140
1141#define HCI_OP_READ_BUFFER_SIZE 0x1005
1142struct hci_rp_read_buffer_size {
1143 __u8 status;
1144 __le16 acl_mtu;
1145 __u8 sco_mtu;
1146 __le16 acl_max_pkt;
1147 __le16 sco_max_pkt;
1148} __packed;
1149
1150#define HCI_OP_READ_BD_ADDR 0x1009
1151struct hci_rp_read_bd_addr {
1152 __u8 status;
1153 bdaddr_t bdaddr;
1154} __packed;
1155
1156#define HCI_OP_READ_DATA_BLOCK_SIZE 0x100a
1157struct hci_rp_read_data_block_size {
1158 __u8 status;
1159 __le16 max_acl_len;
1160 __le16 block_len;
1161 __le16 num_blocks;
1162} __packed;
1163
1164#define HCI_OP_READ_LOCAL_CODECS 0x100b
1165
1166#define HCI_OP_READ_PAGE_SCAN_ACTIVITY 0x0c1b
1167struct hci_rp_read_page_scan_activity {
1168 __u8 status;
1169 __le16 interval;
1170 __le16 window;
1171} __packed;
1172
1173#define HCI_OP_WRITE_PAGE_SCAN_ACTIVITY 0x0c1c
1174struct hci_cp_write_page_scan_activity {
1175 __le16 interval;
1176 __le16 window;
1177} __packed;
1178
1179#define HCI_OP_READ_TX_POWER 0x0c2d
1180struct hci_cp_read_tx_power {
1181 __le16 handle;
1182 __u8 type;
1183} __packed;
1184struct hci_rp_read_tx_power {
1185 __u8 status;
1186 __le16 handle;
1187 __s8 tx_power;
1188} __packed;
1189
1190#define HCI_OP_READ_PAGE_SCAN_TYPE 0x0c46
1191struct hci_rp_read_page_scan_type {
1192 __u8 status;
1193 __u8 type;
1194} __packed;
1195
1196#define HCI_OP_WRITE_PAGE_SCAN_TYPE 0x0c47
1197 #define PAGE_SCAN_TYPE_STANDARD 0x00
1198 #define PAGE_SCAN_TYPE_INTERLACED 0x01
1199
1200#define HCI_OP_READ_RSSI 0x1405
1201struct hci_cp_read_rssi {
1202 __le16 handle;
1203} __packed;
1204struct hci_rp_read_rssi {
1205 __u8 status;
1206 __le16 handle;
1207 __s8 rssi;
1208} __packed;
1209
1210#define HCI_OP_READ_CLOCK 0x1407
1211struct hci_cp_read_clock {
1212 __le16 handle;
1213 __u8 which;
1214} __packed;
1215struct hci_rp_read_clock {
1216 __u8 status;
1217 __le16 handle;
1218 __le32 clock;
1219 __le16 accuracy;
1220} __packed;
1221
1222#define HCI_OP_READ_ENC_KEY_SIZE 0x1408
1223struct hci_cp_read_enc_key_size {
1224 __le16 handle;
1225} __packed;
1226struct hci_rp_read_enc_key_size {
1227 __u8 status;
1228 __le16 handle;
1229 __u8 key_size;
1230} __packed;
1231
1232#define HCI_OP_READ_LOCAL_AMP_INFO 0x1409
1233struct hci_rp_read_local_amp_info {
1234 __u8 status;
1235 __u8 amp_status;
1236 __le32 total_bw;
1237 __le32 max_bw;
1238 __le32 min_latency;
1239 __le32 max_pdu;
1240 __u8 amp_type;
1241 __le16 pal_cap;
1242 __le16 max_assoc_size;
1243 __le32 max_flush_to;
1244 __le32 be_flush_to;
1245} __packed;
1246
1247#define HCI_OP_READ_LOCAL_AMP_ASSOC 0x140a
1248struct hci_cp_read_local_amp_assoc {
1249 __u8 phy_handle;
1250 __le16 len_so_far;
1251 __le16 max_len;
1252} __packed;
1253struct hci_rp_read_local_amp_assoc {
1254 __u8 status;
1255 __u8 phy_handle;
1256 __le16 rem_len;
1257 __u8 frag[0];
1258} __packed;
1259
1260#define HCI_OP_WRITE_REMOTE_AMP_ASSOC 0x140b
1261struct hci_cp_write_remote_amp_assoc {
1262 __u8 phy_handle;
1263 __le16 len_so_far;
1264 __le16 rem_len;
1265 __u8 frag[0];
1266} __packed;
1267struct hci_rp_write_remote_amp_assoc {
1268 __u8 status;
1269 __u8 phy_handle;
1270} __packed;
1271
1272#define HCI_OP_GET_MWS_TRANSPORT_CONFIG 0x140c
1273
1274#define HCI_OP_ENABLE_DUT_MODE 0x1803
1275
1276#define HCI_OP_WRITE_SSP_DEBUG_MODE 0x1804
1277
1278#define HCI_OP_LE_SET_EVENT_MASK 0x2001
1279struct hci_cp_le_set_event_mask {
1280 __u8 mask[8];
1281} __packed;
1282
1283#define HCI_OP_LE_READ_BUFFER_SIZE 0x2002
1284struct hci_rp_le_read_buffer_size {
1285 __u8 status;
1286 __le16 le_mtu;
1287 __u8 le_max_pkt;
1288} __packed;
1289
1290#define HCI_OP_LE_READ_LOCAL_FEATURES 0x2003
1291struct hci_rp_le_read_local_features {
1292 __u8 status;
1293 __u8 features[8];
1294} __packed;
1295
1296#define HCI_OP_LE_SET_RANDOM_ADDR 0x2005
1297
1298#define HCI_OP_LE_SET_ADV_PARAM 0x2006
1299struct hci_cp_le_set_adv_param {
1300 __le16 min_interval;
1301 __le16 max_interval;
1302 __u8 type;
1303 __u8 own_address_type;
1304 __u8 direct_addr_type;
1305 bdaddr_t direct_addr;
1306 __u8 channel_map;
1307 __u8 filter_policy;
1308} __packed;
1309
1310#define HCI_OP_LE_READ_ADV_TX_POWER 0x2007
1311struct hci_rp_le_read_adv_tx_power {
1312 __u8 status;
1313 __s8 tx_power;
1314} __packed;
1315
1316#define HCI_MAX_AD_LENGTH 31
1317
1318#define HCI_OP_LE_SET_ADV_DATA 0x2008
1319struct hci_cp_le_set_adv_data {
1320 __u8 length;
1321 __u8 data[HCI_MAX_AD_LENGTH];
1322} __packed;
1323
1324#define HCI_OP_LE_SET_SCAN_RSP_DATA 0x2009
1325struct hci_cp_le_set_scan_rsp_data {
1326 __u8 length;
1327 __u8 data[HCI_MAX_AD_LENGTH];
1328} __packed;
1329
1330#define HCI_OP_LE_SET_ADV_ENABLE 0x200a
1331
1332#define LE_SCAN_PASSIVE 0x00
1333#define LE_SCAN_ACTIVE 0x01
1334
1335#define HCI_OP_LE_SET_SCAN_PARAM 0x200b
1336struct hci_cp_le_set_scan_param {
1337 __u8 type;
1338 __le16 interval;
1339 __le16 window;
1340 __u8 own_address_type;
1341 __u8 filter_policy;
1342} __packed;
1343
1344#define LE_SCAN_DISABLE 0x00
1345#define LE_SCAN_ENABLE 0x01
1346#define LE_SCAN_FILTER_DUP_DISABLE 0x00
1347#define LE_SCAN_FILTER_DUP_ENABLE 0x01
1348
1349#define HCI_OP_LE_SET_SCAN_ENABLE 0x200c
1350struct hci_cp_le_set_scan_enable {
1351 __u8 enable;
1352 __u8 filter_dup;
1353} __packed;
1354
1355#define HCI_LE_USE_PEER_ADDR 0x00
1356#define HCI_LE_USE_WHITELIST 0x01
1357
1358#define HCI_OP_LE_CREATE_CONN 0x200d
1359struct hci_cp_le_create_conn {
1360 __le16 scan_interval;
1361 __le16 scan_window;
1362 __u8 filter_policy;
1363 __u8 peer_addr_type;
1364 bdaddr_t peer_addr;
1365 __u8 own_address_type;
1366 __le16 conn_interval_min;
1367 __le16 conn_interval_max;
1368 __le16 conn_latency;
1369 __le16 supervision_timeout;
1370 __le16 min_ce_len;
1371 __le16 max_ce_len;
1372} __packed;
1373
1374#define HCI_OP_LE_CREATE_CONN_CANCEL 0x200e
1375
1376#define HCI_OP_LE_READ_WHITE_LIST_SIZE 0x200f
1377struct hci_rp_le_read_white_list_size {
1378 __u8 status;
1379 __u8 size;
1380} __packed;
1381
1382#define HCI_OP_LE_CLEAR_WHITE_LIST 0x2010
1383
1384#define HCI_OP_LE_ADD_TO_WHITE_LIST 0x2011
1385struct hci_cp_le_add_to_white_list {
1386 __u8 bdaddr_type;
1387 bdaddr_t bdaddr;
1388} __packed;
1389
1390#define HCI_OP_LE_DEL_FROM_WHITE_LIST 0x2012
1391struct hci_cp_le_del_from_white_list {
1392 __u8 bdaddr_type;
1393 bdaddr_t bdaddr;
1394} __packed;
1395
1396#define HCI_OP_LE_CONN_UPDATE 0x2013
1397struct hci_cp_le_conn_update {
1398 __le16 handle;
1399 __le16 conn_interval_min;
1400 __le16 conn_interval_max;
1401 __le16 conn_latency;
1402 __le16 supervision_timeout;
1403 __le16 min_ce_len;
1404 __le16 max_ce_len;
1405} __packed;
1406
1407#define HCI_OP_LE_READ_REMOTE_FEATURES 0x2016
1408struct hci_cp_le_read_remote_features {
1409 __le16 handle;
1410} __packed;
1411
1412#define HCI_OP_LE_START_ENC 0x2019
1413struct hci_cp_le_start_enc {
1414 __le16 handle;
1415 __le64 rand;
1416 __le16 ediv;
1417 __u8 ltk[16];
1418} __packed;
1419
1420#define HCI_OP_LE_LTK_REPLY 0x201a
1421struct hci_cp_le_ltk_reply {
1422 __le16 handle;
1423 __u8 ltk[16];
1424} __packed;
1425struct hci_rp_le_ltk_reply {
1426 __u8 status;
1427 __le16 handle;
1428} __packed;
1429
1430#define HCI_OP_LE_LTK_NEG_REPLY 0x201b
1431struct hci_cp_le_ltk_neg_reply {
1432 __le16 handle;
1433} __packed;
1434struct hci_rp_le_ltk_neg_reply {
1435 __u8 status;
1436 __le16 handle;
1437} __packed;
1438
1439#define HCI_OP_LE_READ_SUPPORTED_STATES 0x201c
1440struct hci_rp_le_read_supported_states {
1441 __u8 status;
1442 __u8 le_states[8];
1443} __packed;
1444
1445#define HCI_OP_LE_CONN_PARAM_REQ_REPLY 0x2020
1446struct hci_cp_le_conn_param_req_reply {
1447 __le16 handle;
1448 __le16 interval_min;
1449 __le16 interval_max;
1450 __le16 latency;
1451 __le16 timeout;
1452 __le16 min_ce_len;
1453 __le16 max_ce_len;
1454} __packed;
1455
1456#define HCI_OP_LE_CONN_PARAM_REQ_NEG_REPLY 0x2021
1457struct hci_cp_le_conn_param_req_neg_reply {
1458 __le16 handle;
1459 __u8 reason;
1460} __packed;
1461
1462#define HCI_OP_LE_SET_DATA_LEN 0x2022
1463struct hci_cp_le_set_data_len {
1464 __le16 handle;
1465 __le16 tx_len;
1466 __le16 tx_time;
1467} __packed;
1468struct hci_rp_le_set_data_len {
1469 __u8 status;
1470 __le16 handle;
1471} __packed;
1472
1473#define HCI_OP_LE_READ_DEF_DATA_LEN 0x2023
1474struct hci_rp_le_read_def_data_len {
1475 __u8 status;
1476 __le16 tx_len;
1477 __le16 tx_time;
1478} __packed;
1479
1480#define HCI_OP_LE_WRITE_DEF_DATA_LEN 0x2024
1481struct hci_cp_le_write_def_data_len {
1482 __le16 tx_len;
1483 __le16 tx_time;
1484} __packed;
1485
1486#define HCI_OP_LE_READ_MAX_DATA_LEN 0x202f
1487struct hci_rp_le_read_max_data_len {
1488 __u8 status;
1489 __le16 tx_len;
1490 __le16 tx_time;
1491 __le16 rx_len;
1492 __le16 rx_time;
1493} __packed;
1494
1495
1496#define HCI_EV_INQUIRY_COMPLETE 0x01
1497
1498#define HCI_EV_INQUIRY_RESULT 0x02
1499struct inquiry_info {
1500 bdaddr_t bdaddr;
1501 __u8 pscan_rep_mode;
1502 __u8 pscan_period_mode;
1503 __u8 pscan_mode;
1504 __u8 dev_class[3];
1505 __le16 clock_offset;
1506} __packed;
1507
1508#define HCI_EV_CONN_COMPLETE 0x03
1509struct hci_ev_conn_complete {
1510 __u8 status;
1511 __le16 handle;
1512 bdaddr_t bdaddr;
1513 __u8 link_type;
1514 __u8 encr_mode;
1515} __packed;
1516
1517#define HCI_EV_CONN_REQUEST 0x04
1518struct hci_ev_conn_request {
1519 bdaddr_t bdaddr;
1520 __u8 dev_class[3];
1521 __u8 link_type;
1522} __packed;
1523
1524#define HCI_EV_DISCONN_COMPLETE 0x05
1525struct hci_ev_disconn_complete {
1526 __u8 status;
1527 __le16 handle;
1528 __u8 reason;
1529} __packed;
1530
1531#define HCI_EV_AUTH_COMPLETE 0x06
1532struct hci_ev_auth_complete {
1533 __u8 status;
1534 __le16 handle;
1535} __packed;
1536
1537#define HCI_EV_REMOTE_NAME 0x07
1538struct hci_ev_remote_name {
1539 __u8 status;
1540 bdaddr_t bdaddr;
1541 __u8 name[HCI_MAX_NAME_LENGTH];
1542} __packed;
1543
1544#define HCI_EV_ENCRYPT_CHANGE 0x08
1545struct hci_ev_encrypt_change {
1546 __u8 status;
1547 __le16 handle;
1548 __u8 encrypt;
1549} __packed;
1550
1551#define HCI_EV_CHANGE_LINK_KEY_COMPLETE 0x09
1552struct hci_ev_change_link_key_complete {
1553 __u8 status;
1554 __le16 handle;
1555} __packed;
1556
1557#define HCI_EV_REMOTE_FEATURES 0x0b
1558struct hci_ev_remote_features {
1559 __u8 status;
1560 __le16 handle;
1561 __u8 features[8];
1562} __packed;
1563
1564#define HCI_EV_REMOTE_VERSION 0x0c
1565struct hci_ev_remote_version {
1566 __u8 status;
1567 __le16 handle;
1568 __u8 lmp_ver;
1569 __le16 manufacturer;
1570 __le16 lmp_subver;
1571} __packed;
1572
1573#define HCI_EV_QOS_SETUP_COMPLETE 0x0d
1574struct hci_qos {
1575 __u8 service_type;
1576 __u32 token_rate;
1577 __u32 peak_bandwidth;
1578 __u32 latency;
1579 __u32 delay_variation;
1580} __packed;
1581struct hci_ev_qos_setup_complete {
1582 __u8 status;
1583 __le16 handle;
1584 struct hci_qos qos;
1585} __packed;
1586
1587#define HCI_EV_CMD_COMPLETE 0x0e
1588struct hci_ev_cmd_complete {
1589 __u8 ncmd;
1590 __le16 opcode;
1591} __packed;
1592
1593#define HCI_EV_CMD_STATUS 0x0f
1594struct hci_ev_cmd_status {
1595 __u8 status;
1596 __u8 ncmd;
1597 __le16 opcode;
1598} __packed;
1599
1600#define HCI_EV_HARDWARE_ERROR 0x10
1601struct hci_ev_hardware_error {
1602 __u8 code;
1603} __packed;
1604
1605#define HCI_EV_ROLE_CHANGE 0x12
1606struct hci_ev_role_change {
1607 __u8 status;
1608 bdaddr_t bdaddr;
1609 __u8 role;
1610} __packed;
1611
1612#define HCI_EV_NUM_COMP_PKTS 0x13
1613struct hci_comp_pkts_info {
1614 __le16 handle;
1615 __le16 count;
1616} __packed;
1617
1618struct hci_ev_num_comp_pkts {
1619 __u8 num_hndl;
1620 struct hci_comp_pkts_info handles[0];
1621} __packed;
1622
1623#define HCI_EV_MODE_CHANGE 0x14
1624struct hci_ev_mode_change {
1625 __u8 status;
1626 __le16 handle;
1627 __u8 mode;
1628 __le16 interval;
1629} __packed;
1630
1631#define HCI_EV_PIN_CODE_REQ 0x16
1632struct hci_ev_pin_code_req {
1633 bdaddr_t bdaddr;
1634} __packed;
1635
1636#define HCI_EV_LINK_KEY_REQ 0x17
1637struct hci_ev_link_key_req {
1638 bdaddr_t bdaddr;
1639} __packed;
1640
1641#define HCI_EV_LINK_KEY_NOTIFY 0x18
1642struct hci_ev_link_key_notify {
1643 bdaddr_t bdaddr;
1644 __u8 link_key[HCI_LINK_KEY_SIZE];
1645 __u8 key_type;
1646} __packed;
1647
1648#define HCI_EV_CLOCK_OFFSET 0x1c
1649struct hci_ev_clock_offset {
1650 __u8 status;
1651 __le16 handle;
1652 __le16 clock_offset;
1653} __packed;
1654
1655#define HCI_EV_PKT_TYPE_CHANGE 0x1d
1656struct hci_ev_pkt_type_change {
1657 __u8 status;
1658 __le16 handle;
1659 __le16 pkt_type;
1660} __packed;
1661
1662#define HCI_EV_PSCAN_REP_MODE 0x20
1663struct hci_ev_pscan_rep_mode {
1664 bdaddr_t bdaddr;
1665 __u8 pscan_rep_mode;
1666} __packed;
1667
1668#define HCI_EV_INQUIRY_RESULT_WITH_RSSI 0x22
1669struct inquiry_info_with_rssi {
1670 bdaddr_t bdaddr;
1671 __u8 pscan_rep_mode;
1672 __u8 pscan_period_mode;
1673 __u8 dev_class[3];
1674 __le16 clock_offset;
1675 __s8 rssi;
1676} __packed;
1677struct inquiry_info_with_rssi_and_pscan_mode {
1678 bdaddr_t bdaddr;
1679 __u8 pscan_rep_mode;
1680 __u8 pscan_period_mode;
1681 __u8 pscan_mode;
1682 __u8 dev_class[3];
1683 __le16 clock_offset;
1684 __s8 rssi;
1685} __packed;
1686
1687#define HCI_EV_REMOTE_EXT_FEATURES 0x23
1688struct hci_ev_remote_ext_features {
1689 __u8 status;
1690 __le16 handle;
1691 __u8 page;
1692 __u8 max_page;
1693 __u8 features[8];
1694} __packed;
1695
1696#define HCI_EV_SYNC_CONN_COMPLETE 0x2c
1697struct hci_ev_sync_conn_complete {
1698 __u8 status;
1699 __le16 handle;
1700 bdaddr_t bdaddr;
1701 __u8 link_type;
1702 __u8 tx_interval;
1703 __u8 retrans_window;
1704 __le16 rx_pkt_len;
1705 __le16 tx_pkt_len;
1706 __u8 air_mode;
1707} __packed;
1708
1709#define HCI_EV_SYNC_CONN_CHANGED 0x2d
1710struct hci_ev_sync_conn_changed {
1711 __u8 status;
1712 __le16 handle;
1713 __u8 tx_interval;
1714 __u8 retrans_window;
1715 __le16 rx_pkt_len;
1716 __le16 tx_pkt_len;
1717} __packed;
1718
1719#define HCI_EV_SNIFF_SUBRATE 0x2e
1720struct hci_ev_sniff_subrate {
1721 __u8 status;
1722 __le16 handle;
1723 __le16 max_tx_latency;
1724 __le16 max_rx_latency;
1725 __le16 max_remote_timeout;
1726 __le16 max_local_timeout;
1727} __packed;
1728
1729#define HCI_EV_EXTENDED_INQUIRY_RESULT 0x2f
1730struct extended_inquiry_info {
1731 bdaddr_t bdaddr;
1732 __u8 pscan_rep_mode;
1733 __u8 pscan_period_mode;
1734 __u8 dev_class[3];
1735 __le16 clock_offset;
1736 __s8 rssi;
1737 __u8 data[240];
1738} __packed;
1739
1740#define HCI_EV_KEY_REFRESH_COMPLETE 0x30
1741struct hci_ev_key_refresh_complete {
1742 __u8 status;
1743 __le16 handle;
1744} __packed;
1745
1746#define HCI_EV_IO_CAPA_REQUEST 0x31
1747struct hci_ev_io_capa_request {
1748 bdaddr_t bdaddr;
1749} __packed;
1750
1751#define HCI_EV_IO_CAPA_REPLY 0x32
1752struct hci_ev_io_capa_reply {
1753 bdaddr_t bdaddr;
1754 __u8 capability;
1755 __u8 oob_data;
1756 __u8 authentication;
1757} __packed;
1758
1759#define HCI_EV_USER_CONFIRM_REQUEST 0x33
1760struct hci_ev_user_confirm_req {
1761 bdaddr_t bdaddr;
1762 __le32 passkey;
1763} __packed;
1764
1765#define HCI_EV_USER_PASSKEY_REQUEST 0x34
1766struct hci_ev_user_passkey_req {
1767 bdaddr_t bdaddr;
1768} __packed;
1769
1770#define HCI_EV_REMOTE_OOB_DATA_REQUEST 0x35
1771struct hci_ev_remote_oob_data_request {
1772 bdaddr_t bdaddr;
1773} __packed;
1774
1775#define HCI_EV_SIMPLE_PAIR_COMPLETE 0x36
1776struct hci_ev_simple_pair_complete {
1777 __u8 status;
1778 bdaddr_t bdaddr;
1779} __packed;
1780
1781#define HCI_EV_USER_PASSKEY_NOTIFY 0x3b
1782struct hci_ev_user_passkey_notify {
1783 bdaddr_t bdaddr;
1784 __le32 passkey;
1785} __packed;
1786
1787#define HCI_KEYPRESS_STARTED 0
1788#define HCI_KEYPRESS_ENTERED 1
1789#define HCI_KEYPRESS_ERASED 2
1790#define HCI_KEYPRESS_CLEARED 3
1791#define HCI_KEYPRESS_COMPLETED 4
1792
1793#define HCI_EV_KEYPRESS_NOTIFY 0x3c
1794struct hci_ev_keypress_notify {
1795 bdaddr_t bdaddr;
1796 __u8 type;
1797} __packed;
1798
1799#define HCI_EV_REMOTE_HOST_FEATURES 0x3d
1800struct hci_ev_remote_host_features {
1801 bdaddr_t bdaddr;
1802 __u8 features[8];
1803} __packed;
1804
1805#define HCI_EV_LE_META 0x3e
1806struct hci_ev_le_meta {
1807 __u8 subevent;
1808} __packed;
1809
1810#define HCI_EV_PHY_LINK_COMPLETE 0x40
1811struct hci_ev_phy_link_complete {
1812 __u8 status;
1813 __u8 phy_handle;
1814} __packed;
1815
1816#define HCI_EV_CHANNEL_SELECTED 0x41
1817struct hci_ev_channel_selected {
1818 __u8 phy_handle;
1819} __packed;
1820
1821#define HCI_EV_DISCONN_PHY_LINK_COMPLETE 0x42
1822struct hci_ev_disconn_phy_link_complete {
1823 __u8 status;
1824 __u8 phy_handle;
1825 __u8 reason;
1826} __packed;
1827
1828#define HCI_EV_LOGICAL_LINK_COMPLETE 0x45
1829struct hci_ev_logical_link_complete {
1830 __u8 status;
1831 __le16 handle;
1832 __u8 phy_handle;
1833 __u8 flow_spec_id;
1834} __packed;
1835
1836#define HCI_EV_DISCONN_LOGICAL_LINK_COMPLETE 0x46
1837struct hci_ev_disconn_logical_link_complete {
1838 __u8 status;
1839 __le16 handle;
1840 __u8 reason;
1841} __packed;
1842
1843#define HCI_EV_NUM_COMP_BLOCKS 0x48
1844struct hci_comp_blocks_info {
1845 __le16 handle;
1846 __le16 pkts;
1847 __le16 blocks;
1848} __packed;
1849
1850struct hci_ev_num_comp_blocks {
1851 __le16 num_blocks;
1852 __u8 num_hndl;
1853 struct hci_comp_blocks_info handles[0];
1854} __packed;
1855
1856#define HCI_EV_SYNC_TRAIN_COMPLETE 0x4F
1857struct hci_ev_sync_train_complete {
1858 __u8 status;
1859} __packed;
1860
1861#define HCI_EV_SLAVE_PAGE_RESP_TIMEOUT 0x54
1862
1863#define HCI_EV_LE_CONN_COMPLETE 0x01
1864struct hci_ev_le_conn_complete {
1865 __u8 status;
1866 __le16 handle;
1867 __u8 role;
1868 __u8 bdaddr_type;
1869 bdaddr_t bdaddr;
1870 __le16 interval;
1871 __le16 latency;
1872 __le16 supervision_timeout;
1873 __u8 clk_accurancy;
1874} __packed;
1875
1876
1877#define LE_ADV_IND 0x00
1878#define LE_ADV_DIRECT_IND 0x01
1879#define LE_ADV_SCAN_IND 0x02
1880#define LE_ADV_NONCONN_IND 0x03
1881#define LE_ADV_SCAN_RSP 0x04
1882
1883#define ADDR_LE_DEV_PUBLIC 0x00
1884#define ADDR_LE_DEV_RANDOM 0x01
1885
1886#define HCI_EV_LE_ADVERTISING_REPORT 0x02
1887struct hci_ev_le_advertising_info {
1888 __u8 evt_type;
1889 __u8 bdaddr_type;
1890 bdaddr_t bdaddr;
1891 __u8 length;
1892 __u8 data[0];
1893} __packed;
1894
1895#define HCI_EV_LE_CONN_UPDATE_COMPLETE 0x03
1896struct hci_ev_le_conn_update_complete {
1897 __u8 status;
1898 __le16 handle;
1899 __le16 interval;
1900 __le16 latency;
1901 __le16 supervision_timeout;
1902} __packed;
1903
1904#define HCI_EV_LE_REMOTE_FEAT_COMPLETE 0x04
1905struct hci_ev_le_remote_feat_complete {
1906 __u8 status;
1907 __le16 handle;
1908 __u8 features[8];
1909} __packed;
1910
1911#define HCI_EV_LE_LTK_REQ 0x05
1912struct hci_ev_le_ltk_req {
1913 __le16 handle;
1914 __le64 rand;
1915 __le16 ediv;
1916} __packed;
1917
1918#define HCI_EV_LE_REMOTE_CONN_PARAM_REQ 0x06
1919struct hci_ev_le_remote_conn_param_req {
1920 __le16 handle;
1921 __le16 interval_min;
1922 __le16 interval_max;
1923 __le16 latency;
1924 __le16 timeout;
1925} __packed;
1926
1927#define HCI_EV_LE_DATA_LEN_CHANGE 0x07
1928struct hci_ev_le_data_len_change {
1929 __le16 handle;
1930 __le16 tx_len;
1931 __le16 tx_time;
1932 __le16 rx_len;
1933 __le16 rx_time;
1934} __packed;
1935
1936#define HCI_EV_LE_DIRECT_ADV_REPORT 0x0B
1937struct hci_ev_le_direct_adv_info {
1938 __u8 evt_type;
1939 __u8 bdaddr_type;
1940 bdaddr_t bdaddr;
1941 __u8 direct_addr_type;
1942 bdaddr_t direct_addr;
1943 __s8 rssi;
1944} __packed;
1945
1946
1947#define HCI_EV_STACK_INTERNAL 0xfd
1948struct hci_ev_stack_internal {
1949 __u16 type;
1950 __u8 data[0];
1951} __packed;
1952
1953#define HCI_EV_SI_DEVICE 0x01
1954struct hci_ev_si_device {
1955 __u16 event;
1956 __u16 dev_id;
1957} __packed;
1958
1959#define HCI_EV_SI_SECURITY 0x02
1960struct hci_ev_si_security {
1961 __u16 event;
1962 __u16 proto;
1963 __u16 subproto;
1964 __u8 incoming;
1965} __packed;
1966
1967
1968#define HCI_COMMAND_HDR_SIZE 3
1969#define HCI_EVENT_HDR_SIZE 2
1970#define HCI_ACL_HDR_SIZE 4
1971#define HCI_SCO_HDR_SIZE 3
1972
1973struct hci_command_hdr {
1974 __le16 opcode;
1975 __u8 plen;
1976} __packed;
1977
1978struct hci_event_hdr {
1979 __u8 evt;
1980 __u8 plen;
1981} __packed;
1982
1983struct hci_acl_hdr {
1984 __le16 handle;
1985 __le16 dlen;
1986} __packed;
1987
1988struct hci_sco_hdr {
1989 __le16 handle;
1990 __u8 dlen;
1991} __packed;
1992
1993static inline struct hci_event_hdr *hci_event_hdr(const struct sk_buff *skb)
1994{
1995 return (struct hci_event_hdr *) skb->data;
1996}
1997
1998static inline struct hci_acl_hdr *hci_acl_hdr(const struct sk_buff *skb)
1999{
2000 return (struct hci_acl_hdr *) skb->data;
2001}
2002
2003static inline struct hci_sco_hdr *hci_sco_hdr(const struct sk_buff *skb)
2004{
2005 return (struct hci_sco_hdr *) skb->data;
2006}
2007
2008
2009#define hci_opcode_pack(ogf, ocf) ((__u16) ((ocf & 0x03ff)|(ogf << 10)))
2010#define hci_opcode_ogf(op) (op >> 10)
2011#define hci_opcode_ocf(op) (op & 0x03ff)
2012
2013
2014#define hci_handle_pack(h, f) ((__u16) ((h & 0x0fff)|(f << 12)))
2015#define hci_handle(h) (h & 0x0fff)
2016#define hci_flags(h) (h >> 12)
2017
2018#endif
2019