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