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