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