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