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