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
34#define HCI_DEV_REG 1
35#define HCI_DEV_UNREG 2
36#define HCI_DEV_UP 3
37#define HCI_DEV_DOWN 4
38#define HCI_DEV_SUSPEND 5
39#define HCI_DEV_RESUME 6
40
41
42#define HCI_NOTIFY_CONN_ADD 1
43#define HCI_NOTIFY_CONN_DEL 2
44#define HCI_NOTIFY_VOICE_SETTING 3
45
46
47#define HCI_VIRTUAL 0
48#define HCI_USB 1
49#define HCI_PCCARD 2
50#define HCI_UART 3
51#define HCI_RS232 4
52#define HCI_PCI 5
53#define HCI_SDIO 6
54
55
56#define HCI_BREDR 0x00
57#define HCI_AMP 0x01
58
59
60enum {
61 HCI_QUIRK_NO_RESET,
62 HCI_QUIRK_RAW_DEVICE,
63 HCI_QUIRK_FIXUP_BUFFER_SIZE
64};
65
66
67enum {
68 HCI_UP,
69 HCI_INIT,
70 HCI_RUNNING,
71
72 HCI_PSCAN,
73 HCI_ISCAN,
74 HCI_AUTH,
75 HCI_ENCRYPT,
76 HCI_INQUIRY,
77
78 HCI_RAW,
79
80 HCI_SETUP,
81 HCI_AUTO_OFF,
82 HCI_MGMT,
83 HCI_PAIRABLE,
84 HCI_SERVICE_CACHE,
85 HCI_LINK_KEYS,
86 HCI_DEBUG_KEYS,
87
88 HCI_RESET,
89};
90
91
92#define HCIDEVUP _IOW('H', 201, int)
93#define HCIDEVDOWN _IOW('H', 202, int)
94#define HCIDEVRESET _IOW('H', 203, int)
95#define HCIDEVRESTAT _IOW('H', 204, int)
96
97#define HCIGETDEVLIST _IOR('H', 210, int)
98#define HCIGETDEVINFO _IOR('H', 211, int)
99#define HCIGETCONNLIST _IOR('H', 212, int)
100#define HCIGETCONNINFO _IOR('H', 213, int)
101#define HCIGETAUTHINFO _IOR('H', 215, int)
102
103#define HCISETRAW _IOW('H', 220, int)
104#define HCISETSCAN _IOW('H', 221, int)
105#define HCISETAUTH _IOW('H', 222, int)
106#define HCISETENCRYPT _IOW('H', 223, int)
107#define HCISETPTYPE _IOW('H', 224, int)
108#define HCISETLINKPOL _IOW('H', 225, int)
109#define HCISETLINKMODE _IOW('H', 226, int)
110#define HCISETACLMTU _IOW('H', 227, int)
111#define HCISETSCOMTU _IOW('H', 228, int)
112
113#define HCIBLOCKADDR _IOW('H', 230, int)
114#define HCIUNBLOCKADDR _IOW('H', 231, int)
115
116#define HCIINQUIRY _IOR('H', 240, int)
117
118
119#define HCI_CONNECT_TIMEOUT (40000)
120#define HCI_DISCONN_TIMEOUT (2000)
121#define HCI_PAIRING_TIMEOUT (60000)
122#define HCI_IDLE_TIMEOUT (6000)
123#define HCI_INIT_TIMEOUT (10000)
124#define HCI_CMD_TIMEOUT (1000)
125
126
127#define HCI_COMMAND_PKT 0x01
128#define HCI_ACLDATA_PKT 0x02
129#define HCI_SCODATA_PKT 0x03
130#define HCI_EVENT_PKT 0x04
131#define HCI_VENDOR_PKT 0xff
132
133
134#define HCI_DM1 0x0008
135#define HCI_DM3 0x0400
136#define HCI_DM5 0x4000
137#define HCI_DH1 0x0010
138#define HCI_DH3 0x0800
139#define HCI_DH5 0x8000
140
141#define HCI_HV1 0x0020
142#define HCI_HV2 0x0040
143#define HCI_HV3 0x0080
144
145#define SCO_PTYPE_MASK (HCI_HV1 | HCI_HV2 | HCI_HV3)
146#define ACL_PTYPE_MASK (~SCO_PTYPE_MASK)
147
148
149#define ESCO_HV1 0x0001
150#define ESCO_HV2 0x0002
151#define ESCO_HV3 0x0004
152#define ESCO_EV3 0x0008
153#define ESCO_EV4 0x0010
154#define ESCO_EV5 0x0020
155#define ESCO_2EV3 0x0040
156#define ESCO_3EV3 0x0080
157#define ESCO_2EV5 0x0100
158#define ESCO_3EV5 0x0200
159
160#define SCO_ESCO_MASK (ESCO_HV1 | ESCO_HV2 | ESCO_HV3)
161#define EDR_ESCO_MASK (ESCO_2EV3 | ESCO_3EV3 | ESCO_2EV5 | ESCO_3EV5)
162
163
164#define ACL_START_NO_FLUSH 0x00
165#define ACL_CONT 0x01
166#define ACL_START 0x02
167#define ACL_ACTIVE_BCAST 0x04
168#define ACL_PICO_BCAST 0x08
169
170
171#define SCO_LINK 0x00
172#define ACL_LINK 0x01
173#define ESCO_LINK 0x02
174
175#define LE_LINK 0x80
176
177
178#define LMP_3SLOT 0x01
179#define LMP_5SLOT 0x02
180#define LMP_ENCRYPT 0x04
181#define LMP_SOFFSET 0x08
182#define LMP_TACCURACY 0x10
183#define LMP_RSWITCH 0x20
184#define LMP_HOLD 0x40
185#define LMP_SNIFF 0x80
186
187#define LMP_PARK 0x01
188#define LMP_RSSI 0x02
189#define LMP_QUALITY 0x04
190#define LMP_SCO 0x08
191#define LMP_HV2 0x10
192#define LMP_HV3 0x20
193#define LMP_ULAW 0x40
194#define LMP_ALAW 0x80
195
196#define LMP_CVSD 0x01
197#define LMP_PSCHEME 0x02
198#define LMP_PCONTROL 0x04
199
200#define LMP_RSSI_INQ 0x40
201#define LMP_ESCO 0x80
202
203#define LMP_EV4 0x01
204#define LMP_EV5 0x02
205#define LMP_LE 0x40
206
207#define LMP_SNIFF_SUBR 0x02
208#define LMP_PAUSE_ENC 0x04
209#define LMP_EDR_ESCO_2M 0x20
210#define LMP_EDR_ESCO_3M 0x40
211#define LMP_EDR_3S_ESCO 0x80
212
213#define LMP_EXT_INQ 0x01
214#define LMP_SIMUL_LE_BR 0x02
215#define LMP_SIMPLE_PAIR 0x08
216#define LMP_NO_FLUSH 0x40
217
218#define LMP_LSTO 0x01
219#define LMP_INQ_TX_PWR 0x02
220#define LMP_EXTFEATURES 0x80
221
222
223#define LMP_HOST_LE 0x02
224
225
226#define HCI_CM_ACTIVE 0x0000
227#define HCI_CM_HOLD 0x0001
228#define HCI_CM_SNIFF 0x0002
229#define HCI_CM_PARK 0x0003
230
231
232#define HCI_LP_RSWITCH 0x0001
233#define HCI_LP_HOLD 0x0002
234#define HCI_LP_SNIFF 0x0004
235#define HCI_LP_PARK 0x0008
236
237
238#define HCI_LM_ACCEPT 0x8000
239#define HCI_LM_MASTER 0x0001
240#define HCI_LM_AUTH 0x0002
241#define HCI_LM_ENCRYPT 0x0004
242#define HCI_LM_TRUSTED 0x0008
243#define HCI_LM_RELIABLE 0x0010
244#define HCI_LM_SECURE 0x0020
245
246
247#define HCI_AT_NO_BONDING 0x00
248#define HCI_AT_NO_BONDING_MITM 0x01
249#define HCI_AT_DEDICATED_BONDING 0x02
250#define HCI_AT_DEDICATED_BONDING_MITM 0x03
251#define HCI_AT_GENERAL_BONDING 0x04
252#define HCI_AT_GENERAL_BONDING_MITM 0x05
253
254
255#define HCI_LK_COMBINATION 0x00
256#define HCI_LK_LOCAL_UNIT 0x01
257#define HCI_LK_REMOTE_UNIT 0x02
258#define HCI_LK_DEBUG_COMBINATION 0x03
259#define HCI_LK_UNAUTH_COMBINATION 0x04
260#define HCI_LK_AUTH_COMBINATION 0x05
261#define HCI_LK_CHANGED_COMBINATION 0x06
262
263#define HCI_LK_SMP_LTK 0x81
264#define HCI_LK_SMP_IRK 0x82
265#define HCI_LK_SMP_CSRK 0x83
266
267
268#define HCI_OP_NOP 0x0000
269
270#define HCI_OP_INQUIRY 0x0401
271struct hci_cp_inquiry {
272 __u8 lap[3];
273 __u8 length;
274 __u8 num_rsp;
275} __packed;
276
277#define HCI_OP_INQUIRY_CANCEL 0x0402
278
279#define HCI_OP_EXIT_PERIODIC_INQ 0x0404
280
281#define HCI_OP_CREATE_CONN 0x0405
282struct hci_cp_create_conn {
283 bdaddr_t bdaddr;
284 __le16 pkt_type;
285 __u8 pscan_rep_mode;
286 __u8 pscan_mode;
287 __le16 clock_offset;
288 __u8 role_switch;
289} __packed;
290
291#define HCI_OP_DISCONNECT 0x0406
292struct hci_cp_disconnect {
293 __le16 handle;
294 __u8 reason;
295} __packed;
296
297#define HCI_OP_ADD_SCO 0x0407
298struct hci_cp_add_sco {
299 __le16 handle;
300 __le16 pkt_type;
301} __packed;
302
303#define HCI_OP_CREATE_CONN_CANCEL 0x0408
304struct hci_cp_create_conn_cancel {
305 bdaddr_t bdaddr;
306} __packed;
307
308#define HCI_OP_ACCEPT_CONN_REQ 0x0409
309struct hci_cp_accept_conn_req {
310 bdaddr_t bdaddr;
311 __u8 role;
312} __packed;
313
314#define HCI_OP_REJECT_CONN_REQ 0x040a
315struct hci_cp_reject_conn_req {
316 bdaddr_t bdaddr;
317 __u8 reason;
318} __packed;
319
320#define HCI_OP_LINK_KEY_REPLY 0x040b
321struct hci_cp_link_key_reply {
322 bdaddr_t bdaddr;
323 __u8 link_key[16];
324} __packed;
325
326#define HCI_OP_LINK_KEY_NEG_REPLY 0x040c
327struct hci_cp_link_key_neg_reply {
328 bdaddr_t bdaddr;
329} __packed;
330
331#define HCI_OP_PIN_CODE_REPLY 0x040d
332struct hci_cp_pin_code_reply {
333 bdaddr_t bdaddr;
334 __u8 pin_len;
335 __u8 pin_code[16];
336} __packed;
337struct hci_rp_pin_code_reply {
338 __u8 status;
339 bdaddr_t bdaddr;
340} __packed;
341
342#define HCI_OP_PIN_CODE_NEG_REPLY 0x040e
343struct hci_cp_pin_code_neg_reply {
344 bdaddr_t bdaddr;
345} __packed;
346struct hci_rp_pin_code_neg_reply {
347 __u8 status;
348 bdaddr_t bdaddr;
349} __packed;
350
351#define HCI_OP_CHANGE_CONN_PTYPE 0x040f
352struct hci_cp_change_conn_ptype {
353 __le16 handle;
354 __le16 pkt_type;
355} __packed;
356
357#define HCI_OP_AUTH_REQUESTED 0x0411
358struct hci_cp_auth_requested {
359 __le16 handle;
360} __packed;
361
362#define HCI_OP_SET_CONN_ENCRYPT 0x0413
363struct hci_cp_set_conn_encrypt {
364 __le16 handle;
365 __u8 encrypt;
366} __packed;
367
368#define HCI_OP_CHANGE_CONN_LINK_KEY 0x0415
369struct hci_cp_change_conn_link_key {
370 __le16 handle;
371} __packed;
372
373#define HCI_OP_REMOTE_NAME_REQ 0x0419
374struct hci_cp_remote_name_req {
375 bdaddr_t bdaddr;
376 __u8 pscan_rep_mode;
377 __u8 pscan_mode;
378 __le16 clock_offset;
379} __packed;
380
381#define HCI_OP_REMOTE_NAME_REQ_CANCEL 0x041a
382struct hci_cp_remote_name_req_cancel {
383 bdaddr_t bdaddr;
384} __packed;
385
386#define HCI_OP_READ_REMOTE_FEATURES 0x041b
387struct hci_cp_read_remote_features {
388 __le16 handle;
389} __packed;
390
391#define HCI_OP_READ_REMOTE_EXT_FEATURES 0x041c
392struct hci_cp_read_remote_ext_features {
393 __le16 handle;
394 __u8 page;
395} __packed;
396
397#define HCI_OP_READ_REMOTE_VERSION 0x041d
398struct hci_cp_read_remote_version {
399 __le16 handle;
400} __packed;
401
402#define HCI_OP_SETUP_SYNC_CONN 0x0428
403struct hci_cp_setup_sync_conn {
404 __le16 handle;
405 __le32 tx_bandwidth;
406 __le32 rx_bandwidth;
407 __le16 max_latency;
408 __le16 voice_setting;
409 __u8 retrans_effort;
410 __le16 pkt_type;
411} __packed;
412
413#define HCI_OP_ACCEPT_SYNC_CONN_REQ 0x0429
414struct hci_cp_accept_sync_conn_req {
415 bdaddr_t bdaddr;
416 __le32 tx_bandwidth;
417 __le32 rx_bandwidth;
418 __le16 max_latency;
419 __le16 content_format;
420 __u8 retrans_effort;
421 __le16 pkt_type;
422} __packed;
423
424#define HCI_OP_REJECT_SYNC_CONN_REQ 0x042a
425struct hci_cp_reject_sync_conn_req {
426 bdaddr_t bdaddr;
427 __u8 reason;
428} __packed;
429
430#define HCI_OP_IO_CAPABILITY_REPLY 0x042b
431struct hci_cp_io_capability_reply {
432 bdaddr_t bdaddr;
433 __u8 capability;
434 __u8 oob_data;
435 __u8 authentication;
436} __packed;
437
438#define HCI_OP_USER_CONFIRM_REPLY 0x042c
439struct hci_cp_user_confirm_reply {
440 bdaddr_t bdaddr;
441} __packed;
442struct hci_rp_user_confirm_reply {
443 __u8 status;
444 bdaddr_t bdaddr;
445} __packed;
446
447#define HCI_OP_USER_CONFIRM_NEG_REPLY 0x042d
448
449#define HCI_OP_REMOTE_OOB_DATA_REPLY 0x0430
450struct hci_cp_remote_oob_data_reply {
451 bdaddr_t bdaddr;
452 __u8 hash[16];
453 __u8 randomizer[16];
454} __packed;
455
456#define HCI_OP_REMOTE_OOB_DATA_NEG_REPLY 0x0433
457struct hci_cp_remote_oob_data_neg_reply {
458 bdaddr_t bdaddr;
459} __packed;
460
461#define HCI_OP_IO_CAPABILITY_NEG_REPLY 0x0434
462struct hci_cp_io_capability_neg_reply {
463 bdaddr_t bdaddr;
464 __u8 reason;
465} __packed;
466
467#define HCI_OP_SNIFF_MODE 0x0803
468struct hci_cp_sniff_mode {
469 __le16 handle;
470 __le16 max_interval;
471 __le16 min_interval;
472 __le16 attempt;
473 __le16 timeout;
474} __packed;
475
476#define HCI_OP_EXIT_SNIFF_MODE 0x0804
477struct hci_cp_exit_sniff_mode {
478 __le16 handle;
479} __packed;
480
481#define HCI_OP_ROLE_DISCOVERY 0x0809
482struct hci_cp_role_discovery {
483 __le16 handle;
484} __packed;
485struct hci_rp_role_discovery {
486 __u8 status;
487 __le16 handle;
488 __u8 role;
489} __packed;
490
491#define HCI_OP_SWITCH_ROLE 0x080b
492struct hci_cp_switch_role {
493 bdaddr_t bdaddr;
494 __u8 role;
495} __packed;
496
497#define HCI_OP_READ_LINK_POLICY 0x080c
498struct hci_cp_read_link_policy {
499 __le16 handle;
500} __packed;
501struct hci_rp_read_link_policy {
502 __u8 status;
503 __le16 handle;
504 __le16 policy;
505} __packed;
506
507#define HCI_OP_WRITE_LINK_POLICY 0x080d
508struct hci_cp_write_link_policy {
509 __le16 handle;
510 __le16 policy;
511} __packed;
512struct hci_rp_write_link_policy {
513 __u8 status;
514 __le16 handle;
515} __packed;
516
517#define HCI_OP_READ_DEF_LINK_POLICY 0x080e
518struct hci_rp_read_def_link_policy {
519 __u8 status;
520 __le16 policy;
521} __packed;
522
523#define HCI_OP_WRITE_DEF_LINK_POLICY 0x080f
524struct hci_cp_write_def_link_policy {
525 __le16 policy;
526} __packed;
527
528#define HCI_OP_SNIFF_SUBRATE 0x0811
529struct hci_cp_sniff_subrate {
530 __le16 handle;
531 __le16 max_latency;
532 __le16 min_remote_timeout;
533 __le16 min_local_timeout;
534} __packed;
535
536#define HCI_OP_SET_EVENT_MASK 0x0c01
537struct hci_cp_set_event_mask {
538 __u8 mask[8];
539} __packed;
540
541#define HCI_OP_RESET 0x0c03
542
543#define HCI_OP_SET_EVENT_FLT 0x0c05
544struct hci_cp_set_event_flt {
545 __u8 flt_type;
546 __u8 cond_type;
547 __u8 condition[0];
548} __packed;
549
550
551#define HCI_FLT_CLEAR_ALL 0x00
552#define HCI_FLT_INQ_RESULT 0x01
553#define HCI_FLT_CONN_SETUP 0x02
554
555
556#define HCI_CONN_SETUP_ALLOW_ALL 0x00
557#define HCI_CONN_SETUP_ALLOW_CLASS 0x01
558#define HCI_CONN_SETUP_ALLOW_BDADDR 0x02
559
560
561#define HCI_CONN_SETUP_AUTO_OFF 0x01
562#define HCI_CONN_SETUP_AUTO_ON 0x02
563
564#define HCI_OP_DELETE_STORED_LINK_KEY 0x0c12
565struct hci_cp_delete_stored_link_key {
566 bdaddr_t bdaddr;
567 __u8 delete_all;
568} __packed;
569
570#define HCI_MAX_NAME_LENGTH 248
571
572#define HCI_OP_WRITE_LOCAL_NAME 0x0c13
573struct hci_cp_write_local_name {
574 __u8 name[HCI_MAX_NAME_LENGTH];
575} __packed;
576
577#define HCI_OP_READ_LOCAL_NAME 0x0c14
578struct hci_rp_read_local_name {
579 __u8 status;
580 __u8 name[HCI_MAX_NAME_LENGTH];
581} __packed;
582
583#define HCI_OP_WRITE_CA_TIMEOUT 0x0c16
584
585#define HCI_OP_WRITE_PG_TIMEOUT 0x0c18
586
587#define HCI_OP_WRITE_SCAN_ENABLE 0x0c1a
588 #define SCAN_DISABLED 0x00
589 #define SCAN_INQUIRY 0x01
590 #define SCAN_PAGE 0x02
591
592#define HCI_OP_READ_AUTH_ENABLE 0x0c1f
593
594#define HCI_OP_WRITE_AUTH_ENABLE 0x0c20
595 #define AUTH_DISABLED 0x00
596 #define AUTH_ENABLED 0x01
597
598#define HCI_OP_READ_ENCRYPT_MODE 0x0c21
599
600#define HCI_OP_WRITE_ENCRYPT_MODE 0x0c22
601 #define ENCRYPT_DISABLED 0x00
602 #define ENCRYPT_P2P 0x01
603 #define ENCRYPT_BOTH 0x02
604
605#define HCI_OP_READ_CLASS_OF_DEV 0x0c23
606struct hci_rp_read_class_of_dev {
607 __u8 status;
608 __u8 dev_class[3];
609} __packed;
610
611#define HCI_OP_WRITE_CLASS_OF_DEV 0x0c24
612struct hci_cp_write_class_of_dev {
613 __u8 dev_class[3];
614} __packed;
615
616#define HCI_OP_READ_VOICE_SETTING 0x0c25
617struct hci_rp_read_voice_setting {
618 __u8 status;
619 __le16 voice_setting;
620} __packed;
621
622#define HCI_OP_WRITE_VOICE_SETTING 0x0c26
623struct hci_cp_write_voice_setting {
624 __le16 voice_setting;
625} __packed;
626
627#define HCI_OP_HOST_BUFFER_SIZE 0x0c33
628struct hci_cp_host_buffer_size {
629 __le16 acl_mtu;
630 __u8 sco_mtu;
631 __le16 acl_max_pkt;
632 __le16 sco_max_pkt;
633} __packed;
634
635#define HCI_OP_WRITE_INQUIRY_MODE 0x0c45
636
637#define HCI_MAX_EIR_LENGTH 240
638
639#define HCI_OP_WRITE_EIR 0x0c52
640struct hci_cp_write_eir {
641 uint8_t fec;
642 uint8_t data[HCI_MAX_EIR_LENGTH];
643} __packed;
644
645#define HCI_OP_READ_SSP_MODE 0x0c55
646struct hci_rp_read_ssp_mode {
647 __u8 status;
648 __u8 mode;
649} __packed;
650
651#define HCI_OP_WRITE_SSP_MODE 0x0c56
652struct hci_cp_write_ssp_mode {
653 __u8 mode;
654} __packed;
655
656#define HCI_OP_READ_LOCAL_OOB_DATA 0x0c57
657struct hci_rp_read_local_oob_data {
658 __u8 status;
659 __u8 hash[16];
660 __u8 randomizer[16];
661} __packed;
662
663#define HCI_OP_READ_INQ_RSP_TX_POWER 0x0c58
664
665#define HCI_OP_WRITE_LE_HOST_SUPPORTED 0x0c6d
666struct hci_cp_write_le_host_supported {
667 __u8 le;
668 __u8 simul;
669} __packed;
670
671#define HCI_OP_READ_LOCAL_VERSION 0x1001
672struct hci_rp_read_local_version {
673 __u8 status;
674 __u8 hci_ver;
675 __le16 hci_rev;
676 __u8 lmp_ver;
677 __le16 manufacturer;
678 __le16 lmp_subver;
679} __packed;
680
681#define HCI_OP_READ_LOCAL_COMMANDS 0x1002
682struct hci_rp_read_local_commands {
683 __u8 status;
684 __u8 commands[64];
685} __packed;
686
687#define HCI_OP_READ_LOCAL_FEATURES 0x1003
688struct hci_rp_read_local_features {
689 __u8 status;
690 __u8 features[8];
691} __packed;
692
693#define HCI_OP_READ_LOCAL_EXT_FEATURES 0x1004
694struct hci_cp_read_local_ext_features {
695 __u8 page;
696} __packed;
697struct hci_rp_read_local_ext_features {
698 __u8 status;
699 __u8 page;
700 __u8 max_page;
701 __u8 features[8];
702} __packed;
703
704#define HCI_OP_READ_BUFFER_SIZE 0x1005
705struct hci_rp_read_buffer_size {
706 __u8 status;
707 __le16 acl_mtu;
708 __u8 sco_mtu;
709 __le16 acl_max_pkt;
710 __le16 sco_max_pkt;
711} __packed;
712
713#define HCI_OP_READ_BD_ADDR 0x1009
714struct hci_rp_read_bd_addr {
715 __u8 status;
716 bdaddr_t bdaddr;
717} __packed;
718
719#define HCI_OP_WRITE_PAGE_SCAN_ACTIVITY 0x0c1c
720struct hci_cp_write_page_scan_activity {
721 __le16 interval;
722 __le16 window;
723} __packed;
724
725#define HCI_OP_WRITE_PAGE_SCAN_TYPE 0x0c47
726 #define PAGE_SCAN_TYPE_STANDARD 0x00
727 #define PAGE_SCAN_TYPE_INTERLACED 0x01
728
729#define HCI_OP_LE_SET_EVENT_MASK 0x2001
730struct hci_cp_le_set_event_mask {
731 __u8 mask[8];
732} __packed;
733
734#define HCI_OP_LE_READ_BUFFER_SIZE 0x2002
735struct hci_rp_le_read_buffer_size {
736 __u8 status;
737 __le16 le_mtu;
738 __u8 le_max_pkt;
739} __packed;
740
741#define HCI_OP_LE_SET_SCAN_ENABLE 0x200c
742struct hci_cp_le_set_scan_enable {
743 __u8 enable;
744 __u8 filter_dup;
745} __packed;
746
747#define HCI_OP_LE_CREATE_CONN 0x200d
748struct hci_cp_le_create_conn {
749 __le16 scan_interval;
750 __le16 scan_window;
751 __u8 filter_policy;
752 __u8 peer_addr_type;
753 bdaddr_t peer_addr;
754 __u8 own_address_type;
755 __le16 conn_interval_min;
756 __le16 conn_interval_max;
757 __le16 conn_latency;
758 __le16 supervision_timeout;
759 __le16 min_ce_len;
760 __le16 max_ce_len;
761} __packed;
762
763#define HCI_OP_LE_CREATE_CONN_CANCEL 0x200e
764
765#define HCI_OP_LE_CONN_UPDATE 0x2013
766struct hci_cp_le_conn_update {
767 __le16 handle;
768 __le16 conn_interval_min;
769 __le16 conn_interval_max;
770 __le16 conn_latency;
771 __le16 supervision_timeout;
772 __le16 min_ce_len;
773 __le16 max_ce_len;
774} __packed;
775
776#define HCI_OP_LE_START_ENC 0x2019
777struct hci_cp_le_start_enc {
778 __le16 handle;
779 __u8 rand[8];
780 __le16 ediv;
781 __u8 ltk[16];
782} __packed;
783
784#define HCI_OP_LE_LTK_REPLY 0x201a
785struct hci_cp_le_ltk_reply {
786 __le16 handle;
787 __u8 ltk[16];
788} __packed;
789struct hci_rp_le_ltk_reply {
790 __u8 status;
791 __le16 handle;
792} __packed;
793
794#define HCI_OP_LE_LTK_NEG_REPLY 0x201b
795struct hci_cp_le_ltk_neg_reply {
796 __le16 handle;
797} __packed;
798struct hci_rp_le_ltk_neg_reply {
799 __u8 status;
800 __le16 handle;
801} __packed;
802
803
804#define HCI_EV_INQUIRY_COMPLETE 0x01
805
806#define HCI_EV_INQUIRY_RESULT 0x02
807struct inquiry_info {
808 bdaddr_t bdaddr;
809 __u8 pscan_rep_mode;
810 __u8 pscan_period_mode;
811 __u8 pscan_mode;
812 __u8 dev_class[3];
813 __le16 clock_offset;
814} __packed;
815
816#define HCI_EV_CONN_COMPLETE 0x03
817struct hci_ev_conn_complete {
818 __u8 status;
819 __le16 handle;
820 bdaddr_t bdaddr;
821 __u8 link_type;
822 __u8 encr_mode;
823} __packed;
824
825#define HCI_EV_CONN_REQUEST 0x04
826struct hci_ev_conn_request {
827 bdaddr_t bdaddr;
828 __u8 dev_class[3];
829 __u8 link_type;
830} __packed;
831
832#define HCI_EV_DISCONN_COMPLETE 0x05
833struct hci_ev_disconn_complete {
834 __u8 status;
835 __le16 handle;
836 __u8 reason;
837} __packed;
838
839#define HCI_EV_AUTH_COMPLETE 0x06
840struct hci_ev_auth_complete {
841 __u8 status;
842 __le16 handle;
843} __packed;
844
845#define HCI_EV_REMOTE_NAME 0x07
846struct hci_ev_remote_name {
847 __u8 status;
848 bdaddr_t bdaddr;
849 __u8 name[HCI_MAX_NAME_LENGTH];
850} __packed;
851
852#define HCI_EV_ENCRYPT_CHANGE 0x08
853struct hci_ev_encrypt_change {
854 __u8 status;
855 __le16 handle;
856 __u8 encrypt;
857} __packed;
858
859#define HCI_EV_CHANGE_LINK_KEY_COMPLETE 0x09
860struct hci_ev_change_link_key_complete {
861 __u8 status;
862 __le16 handle;
863} __packed;
864
865#define HCI_EV_REMOTE_FEATURES 0x0b
866struct hci_ev_remote_features {
867 __u8 status;
868 __le16 handle;
869 __u8 features[8];
870} __packed;
871
872#define HCI_EV_REMOTE_VERSION 0x0c
873struct hci_ev_remote_version {
874 __u8 status;
875 __le16 handle;
876 __u8 lmp_ver;
877 __le16 manufacturer;
878 __le16 lmp_subver;
879} __packed;
880
881#define HCI_EV_QOS_SETUP_COMPLETE 0x0d
882struct hci_qos {
883 __u8 service_type;
884 __u32 token_rate;
885 __u32 peak_bandwidth;
886 __u32 latency;
887 __u32 delay_variation;
888} __packed;
889struct hci_ev_qos_setup_complete {
890 __u8 status;
891 __le16 handle;
892 struct hci_qos qos;
893} __packed;
894
895#define HCI_EV_CMD_COMPLETE 0x0e
896struct hci_ev_cmd_complete {
897 __u8 ncmd;
898 __le16 opcode;
899} __packed;
900
901#define HCI_EV_CMD_STATUS 0x0f
902struct hci_ev_cmd_status {
903 __u8 status;
904 __u8 ncmd;
905 __le16 opcode;
906} __packed;
907
908#define HCI_EV_ROLE_CHANGE 0x12
909struct hci_ev_role_change {
910 __u8 status;
911 bdaddr_t bdaddr;
912 __u8 role;
913} __packed;
914
915#define HCI_EV_NUM_COMP_PKTS 0x13
916struct hci_ev_num_comp_pkts {
917 __u8 num_hndl;
918
919} __packed;
920
921#define HCI_EV_MODE_CHANGE 0x14
922struct hci_ev_mode_change {
923 __u8 status;
924 __le16 handle;
925 __u8 mode;
926 __le16 interval;
927} __packed;
928
929#define HCI_EV_PIN_CODE_REQ 0x16
930struct hci_ev_pin_code_req {
931 bdaddr_t bdaddr;
932} __packed;
933
934#define HCI_EV_LINK_KEY_REQ 0x17
935struct hci_ev_link_key_req {
936 bdaddr_t bdaddr;
937} __packed;
938
939#define HCI_EV_LINK_KEY_NOTIFY 0x18
940struct hci_ev_link_key_notify {
941 bdaddr_t bdaddr;
942 __u8 link_key[16];
943 __u8 key_type;
944} __packed;
945
946#define HCI_EV_CLOCK_OFFSET 0x1c
947struct hci_ev_clock_offset {
948 __u8 status;
949 __le16 handle;
950 __le16 clock_offset;
951} __packed;
952
953#define HCI_EV_PKT_TYPE_CHANGE 0x1d
954struct hci_ev_pkt_type_change {
955 __u8 status;
956 __le16 handle;
957 __le16 pkt_type;
958} __packed;
959
960#define HCI_EV_PSCAN_REP_MODE 0x20
961struct hci_ev_pscan_rep_mode {
962 bdaddr_t bdaddr;
963 __u8 pscan_rep_mode;
964} __packed;
965
966#define HCI_EV_INQUIRY_RESULT_WITH_RSSI 0x22
967struct inquiry_info_with_rssi {
968 bdaddr_t bdaddr;
969 __u8 pscan_rep_mode;
970 __u8 pscan_period_mode;
971 __u8 dev_class[3];
972 __le16 clock_offset;
973 __s8 rssi;
974} __packed;
975struct inquiry_info_with_rssi_and_pscan_mode {
976 bdaddr_t bdaddr;
977 __u8 pscan_rep_mode;
978 __u8 pscan_period_mode;
979 __u8 pscan_mode;
980 __u8 dev_class[3];
981 __le16 clock_offset;
982 __s8 rssi;
983} __packed;
984
985#define HCI_EV_REMOTE_EXT_FEATURES 0x23
986struct hci_ev_remote_ext_features {
987 __u8 status;
988 __le16 handle;
989 __u8 page;
990 __u8 max_page;
991 __u8 features[8];
992} __packed;
993
994#define HCI_EV_SYNC_CONN_COMPLETE 0x2c
995struct hci_ev_sync_conn_complete {
996 __u8 status;
997 __le16 handle;
998 bdaddr_t bdaddr;
999 __u8 link_type;
1000 __u8 tx_interval;
1001 __u8 retrans_window;
1002 __le16 rx_pkt_len;
1003 __le16 tx_pkt_len;
1004 __u8 air_mode;
1005} __packed;
1006
1007#define HCI_EV_SYNC_CONN_CHANGED 0x2d
1008struct hci_ev_sync_conn_changed {
1009 __u8 status;
1010 __le16 handle;
1011 __u8 tx_interval;
1012 __u8 retrans_window;
1013 __le16 rx_pkt_len;
1014 __le16 tx_pkt_len;
1015} __packed;
1016
1017#define HCI_EV_SNIFF_SUBRATE 0x2e
1018struct hci_ev_sniff_subrate {
1019 __u8 status;
1020 __le16 handle;
1021 __le16 max_tx_latency;
1022 __le16 max_rx_latency;
1023 __le16 max_remote_timeout;
1024 __le16 max_local_timeout;
1025} __packed;
1026
1027#define HCI_EV_EXTENDED_INQUIRY_RESULT 0x2f
1028struct extended_inquiry_info {
1029 bdaddr_t bdaddr;
1030 __u8 pscan_rep_mode;
1031 __u8 pscan_period_mode;
1032 __u8 dev_class[3];
1033 __le16 clock_offset;
1034 __s8 rssi;
1035 __u8 data[240];
1036} __packed;
1037
1038#define HCI_EV_IO_CAPA_REQUEST 0x31
1039struct hci_ev_io_capa_request {
1040 bdaddr_t bdaddr;
1041} __packed;
1042
1043#define HCI_EV_IO_CAPA_REPLY 0x32
1044struct hci_ev_io_capa_reply {
1045 bdaddr_t bdaddr;
1046 __u8 capability;
1047 __u8 oob_data;
1048 __u8 authentication;
1049} __packed;
1050
1051#define HCI_EV_USER_CONFIRM_REQUEST 0x33
1052struct hci_ev_user_confirm_req {
1053 bdaddr_t bdaddr;
1054 __le32 passkey;
1055} __packed;
1056
1057#define HCI_EV_REMOTE_OOB_DATA_REQUEST 0x35
1058struct hci_ev_remote_oob_data_request {
1059 bdaddr_t bdaddr;
1060} __packed;
1061
1062#define HCI_EV_SIMPLE_PAIR_COMPLETE 0x36
1063struct hci_ev_simple_pair_complete {
1064 __u8 status;
1065 bdaddr_t bdaddr;
1066} __packed;
1067
1068#define HCI_EV_REMOTE_HOST_FEATURES 0x3d
1069struct hci_ev_remote_host_features {
1070 bdaddr_t bdaddr;
1071 __u8 features[8];
1072} __packed;
1073
1074#define HCI_EV_LE_META 0x3e
1075struct hci_ev_le_meta {
1076 __u8 subevent;
1077} __packed;
1078
1079
1080#define HCI_EV_LE_CONN_COMPLETE 0x01
1081struct hci_ev_le_conn_complete {
1082 __u8 status;
1083 __le16 handle;
1084 __u8 role;
1085 __u8 bdaddr_type;
1086 bdaddr_t bdaddr;
1087 __le16 interval;
1088 __le16 latency;
1089 __le16 supervision_timeout;
1090 __u8 clk_accurancy;
1091} __packed;
1092
1093#define HCI_EV_LE_LTK_REQ 0x05
1094struct hci_ev_le_ltk_req {
1095 __le16 handle;
1096 __u8 random[8];
1097 __le16 ediv;
1098} __packed;
1099
1100
1101#define ADV_IND 0x00
1102#define ADV_DIRECT_IND 0x01
1103#define ADV_SCAN_IND 0x02
1104#define ADV_NONCONN_IND 0x03
1105#define ADV_SCAN_RSP 0x04
1106
1107#define ADDR_LE_DEV_PUBLIC 0x00
1108#define ADDR_LE_DEV_RANDOM 0x01
1109
1110#define HCI_EV_LE_ADVERTISING_REPORT 0x02
1111struct hci_ev_le_advertising_info {
1112 __u8 evt_type;
1113 __u8 bdaddr_type;
1114 bdaddr_t bdaddr;
1115 __u8 length;
1116 __u8 data[0];
1117} __packed;
1118
1119
1120#define HCI_EV_STACK_INTERNAL 0xfd
1121struct hci_ev_stack_internal {
1122 __u16 type;
1123 __u8 data[0];
1124} __packed;
1125
1126#define HCI_EV_SI_DEVICE 0x01
1127struct hci_ev_si_device {
1128 __u16 event;
1129 __u16 dev_id;
1130} __packed;
1131
1132#define HCI_EV_SI_SECURITY 0x02
1133struct hci_ev_si_security {
1134 __u16 event;
1135 __u16 proto;
1136 __u16 subproto;
1137 __u8 incoming;
1138} __packed;
1139
1140
1141#define HCI_COMMAND_HDR_SIZE 3
1142#define HCI_EVENT_HDR_SIZE 2
1143#define HCI_ACL_HDR_SIZE 4
1144#define HCI_SCO_HDR_SIZE 3
1145
1146struct hci_command_hdr {
1147 __le16 opcode;
1148 __u8 plen;
1149} __packed;
1150
1151struct hci_event_hdr {
1152 __u8 evt;
1153 __u8 plen;
1154} __packed;
1155
1156struct hci_acl_hdr {
1157 __le16 handle;
1158 __le16 dlen;
1159} __packed;
1160
1161struct hci_sco_hdr {
1162 __le16 handle;
1163 __u8 dlen;
1164} __packed;
1165
1166#include <linux/skbuff.h>
1167static inline struct hci_event_hdr *hci_event_hdr(const struct sk_buff *skb)
1168{
1169 return (struct hci_event_hdr *) skb->data;
1170}
1171
1172static inline struct hci_acl_hdr *hci_acl_hdr(const struct sk_buff *skb)
1173{
1174 return (struct hci_acl_hdr *) skb->data;
1175}
1176
1177static inline struct hci_sco_hdr *hci_sco_hdr(const struct sk_buff *skb)
1178{
1179 return (struct hci_sco_hdr *) skb->data;
1180}
1181
1182
1183#define hci_opcode_pack(ogf, ocf) (__u16) ((ocf & 0x03ff)|(ogf << 10))
1184#define hci_opcode_ogf(op) (op >> 10)
1185#define hci_opcode_ocf(op) (op & 0x03ff)
1186
1187
1188#define hci_handle_pack(h, f) (__u16) ((h & 0x0fff)|(f << 12))
1189#define hci_handle(h) (h & 0x0fff)
1190#define hci_flags(h) (h >> 12)
1191
1192
1193
1194
1195#define HCI_DATA_DIR 1
1196#define HCI_FILTER 2
1197#define HCI_TIME_STAMP 3
1198
1199
1200#define HCI_CMSG_DIR 0x0001
1201#define HCI_CMSG_TSTAMP 0x0002
1202
1203struct sockaddr_hci {
1204 sa_family_t hci_family;
1205 unsigned short hci_dev;
1206 unsigned short hci_channel;
1207};
1208#define HCI_DEV_NONE 0xffff
1209
1210#define HCI_CHANNEL_RAW 0
1211#define HCI_CHANNEL_CONTROL 1
1212
1213struct hci_filter {
1214 unsigned long type_mask;
1215 unsigned long event_mask[2];
1216 __le16 opcode;
1217};
1218
1219struct hci_ufilter {
1220 __u32 type_mask;
1221 __u32 event_mask[2];
1222 __le16 opcode;
1223};
1224
1225#define HCI_FLT_TYPE_BITS 31
1226#define HCI_FLT_EVENT_BITS 63
1227#define HCI_FLT_OGF_BITS 63
1228#define HCI_FLT_OCF_BITS 127
1229
1230
1231struct hci_dev_stats {
1232 __u32 err_rx;
1233 __u32 err_tx;
1234 __u32 cmd_tx;
1235 __u32 evt_rx;
1236 __u32 acl_tx;
1237 __u32 acl_rx;
1238 __u32 sco_tx;
1239 __u32 sco_rx;
1240 __u32 byte_rx;
1241 __u32 byte_tx;
1242};
1243
1244struct hci_dev_info {
1245 __u16 dev_id;
1246 char name[8];
1247
1248 bdaddr_t bdaddr;
1249
1250 __u32 flags;
1251 __u8 type;
1252
1253 __u8 features[8];
1254
1255 __u32 pkt_type;
1256 __u32 link_policy;
1257 __u32 link_mode;
1258
1259 __u16 acl_mtu;
1260 __u16 acl_pkts;
1261 __u16 sco_mtu;
1262 __u16 sco_pkts;
1263
1264 struct hci_dev_stats stat;
1265};
1266
1267struct hci_conn_info {
1268 __u16 handle;
1269 bdaddr_t bdaddr;
1270 __u8 type;
1271 __u8 out;
1272 __u16 state;
1273 __u32 link_mode;
1274};
1275
1276struct hci_dev_req {
1277 __u16 dev_id;
1278 __u32 dev_opt;
1279};
1280
1281struct hci_dev_list_req {
1282 __u16 dev_num;
1283 struct hci_dev_req dev_req[0];
1284};
1285
1286struct hci_conn_list_req {
1287 __u16 dev_id;
1288 __u16 conn_num;
1289 struct hci_conn_info conn_info[0];
1290};
1291
1292struct hci_conn_info_req {
1293 bdaddr_t bdaddr;
1294 __u8 type;
1295 struct hci_conn_info conn_info[0];
1296};
1297
1298struct hci_auth_info_req {
1299 bdaddr_t bdaddr;
1300 __u8 type;
1301};
1302
1303struct hci_inquiry_req {
1304 __u16 dev_id;
1305 __u16 flags;
1306 __u8 lap[3];
1307 __u8 length;
1308 __u8 num_rsp;
1309};
1310#define IREQ_CACHE_FLUSH 0x0001
1311
1312#endif
1313