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