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