blob: 78132a8af027ab81ddf6b9d5ec150f5799a44950 [file] [log] [blame]
yuezonghe824eb0c2024-06-27 02:32:26 -07001/*
2 BlueZ - Bluetooth protocol stack for Linux
3 Copyright (C) 2000-2001 Qualcomm Incorporated
4
5 Written 2000,2001 by Maxim Krasnyansky <maxk@qualcomm.com>
6
7 This program is free software; you can redistribute it and/or modify
8 it under the terms of the GNU General Public License version 2 as
9 published by the Free Software Foundation;
10
11 THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
12 OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
13 FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT OF THIRD PARTY RIGHTS.
14 IN NO EVENT SHALL THE COPYRIGHT HOLDER(S) AND AUTHOR(S) BE LIABLE FOR ANY
15 CLAIM, OR ANY SPECIAL INDIRECT OR CONSEQUENTIAL DAMAGES, OR ANY DAMAGES
16 WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
17 ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
18 OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
19
20 ALL LIABILITY, INCLUDING LIABILITY FOR INFRINGEMENT OF ANY PATENTS,
21 COPYRIGHTS, TRADEMARKS OR OTHER RIGHTS, RELATING TO USE OF THIS
22 SOFTWARE IS DISCLAIMED.
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/* HCI dev events */
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/* HCI notify events */
42#define HCI_NOTIFY_CONN_ADD 1
43#define HCI_NOTIFY_CONN_DEL 2
44#define HCI_NOTIFY_VOICE_SETTING 3
45
46/* HCI bus types */
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/* HCI controller types */
56#define HCI_BREDR 0x00
57#define HCI_AMP 0x01
58
59/* HCI device quirks */
60enum {
61 HCI_QUIRK_NO_RESET,
62 HCI_QUIRK_RAW_DEVICE,
63 HCI_QUIRK_FIXUP_BUFFER_SIZE
64};
65
66/* HCI device flags */
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_RESET,
81};
82
83/*
84 * BR/EDR and/or LE controller flags: the flags defined here should represent
85 * states from the controller.
86 */
87enum {
88 HCI_SETUP,
89 HCI_AUTO_OFF,
90 HCI_MGMT,
91 HCI_PAIRABLE,
92 HCI_SERVICE_CACHE,
93 HCI_LINK_KEYS,
94 HCI_DEBUG_KEYS,
95 HCI_UNREGISTER,
96
97 HCI_LE_SCAN,
98 HCI_SSP_ENABLED,
99 HCI_HS_ENABLED,
100 HCI_LE_ENABLED,
101 HCI_CONNECTABLE,
102 HCI_DISCOVERABLE,
103 HCI_LINK_SECURITY,
104 HCI_PENDING_CLASS,
105};
106
107/* HCI ioctl defines */
108#define HCIDEVUP _IOW('H', 201, int)
109#define HCIDEVDOWN _IOW('H', 202, int)
110#define HCIDEVRESET _IOW('H', 203, int)
111#define HCIDEVRESTAT _IOW('H', 204, int)
112
113#define HCIGETDEVLIST _IOR('H', 210, int)
114#define HCIGETDEVINFO _IOR('H', 211, int)
115#define HCIGETCONNLIST _IOR('H', 212, int)
116#define HCIGETCONNINFO _IOR('H', 213, int)
117#define HCIGETAUTHINFO _IOR('H', 215, int)
118
119#define HCISETRAW _IOW('H', 220, int)
120#define HCISETSCAN _IOW('H', 221, int)
121#define HCISETAUTH _IOW('H', 222, int)
122#define HCISETENCRYPT _IOW('H', 223, int)
123#define HCISETPTYPE _IOW('H', 224, int)
124#define HCISETLINKPOL _IOW('H', 225, int)
125#define HCISETLINKMODE _IOW('H', 226, int)
126#define HCISETACLMTU _IOW('H', 227, int)
127#define HCISETSCOMTU _IOW('H', 228, int)
128
129#define HCIBLOCKADDR _IOW('H', 230, int)
130#define HCIUNBLOCKADDR _IOW('H', 231, int)
131
132#define HCIINQUIRY _IOR('H', 240, int)
133
134/* HCI timeouts */
135#define HCI_CONNECT_TIMEOUT (40000) /* 40 seconds */
136#define HCI_DISCONN_TIMEOUT (2000) /* 2 seconds */
137#define HCI_PAIRING_TIMEOUT (60000) /* 60 seconds */
138#define HCI_IDLE_TIMEOUT (6000) /* 6 seconds */
139#define HCI_INIT_TIMEOUT (10000) /* 10 seconds */
140#define HCI_CMD_TIMEOUT (1000) /* 1 seconds */
141#define HCI_ACL_TX_TIMEOUT (45000) /* 45 seconds */
142
143/* HCI data types */
144#define HCI_COMMAND_PKT 0x01
145#define HCI_ACLDATA_PKT 0x02
146#define HCI_SCODATA_PKT 0x03
147#define HCI_EVENT_PKT 0x04
148#define HCI_VENDOR_PKT 0xff
149
150/* HCI packet types */
151#define HCI_DM1 0x0008
152#define HCI_DM3 0x0400
153#define HCI_DM5 0x4000
154#define HCI_DH1 0x0010
155#define HCI_DH3 0x0800
156#define HCI_DH5 0x8000
157
158#define HCI_HV1 0x0020
159#define HCI_HV2 0x0040
160#define HCI_HV3 0x0080
161
162#define SCO_PTYPE_MASK (HCI_HV1 | HCI_HV2 | HCI_HV3)
163#define ACL_PTYPE_MASK (~SCO_PTYPE_MASK)
164
165/* eSCO packet types */
166#define ESCO_HV1 0x0001
167#define ESCO_HV2 0x0002
168#define ESCO_HV3 0x0004
169#define ESCO_EV3 0x0008
170#define ESCO_EV4 0x0010
171#define ESCO_EV5 0x0020
172#define ESCO_2EV3 0x0040
173#define ESCO_3EV3 0x0080
174#define ESCO_2EV5 0x0100
175#define ESCO_3EV5 0x0200
176
177#define SCO_ESCO_MASK (ESCO_HV1 | ESCO_HV2 | ESCO_HV3)
178#define EDR_ESCO_MASK (ESCO_2EV3 | ESCO_3EV3 | ESCO_2EV5 | ESCO_3EV5)
179#define ALL_ESCO_MASK (SCO_ESCO_MASK | ESCO_EV3 | ESCO_EV4 | ESCO_EV5 | \
180 EDR_ESCO_MASK)
181
182/* ACL flags */
183#define ACL_START_NO_FLUSH 0x00
184#define ACL_CONT 0x01
185#define ACL_START 0x02
186#define ACL_ACTIVE_BCAST 0x04
187#define ACL_PICO_BCAST 0x08
188
189/* Baseband links */
190#define SCO_LINK 0x00
191#define ACL_LINK 0x01
192#define ESCO_LINK 0x02
193/* Low Energy links do not have defined link type. Use invented one */
194#define LE_LINK 0x80
195
196/* LMP features */
197#define LMP_3SLOT 0x01
198#define LMP_5SLOT 0x02
199#define LMP_ENCRYPT 0x04
200#define LMP_SOFFSET 0x08
201#define LMP_TACCURACY 0x10
202#define LMP_RSWITCH 0x20
203#define LMP_HOLD 0x40
204#define LMP_SNIFF 0x80
205
206#define LMP_PARK 0x01
207#define LMP_RSSI 0x02
208#define LMP_QUALITY 0x04
209#define LMP_SCO 0x08
210#define LMP_HV2 0x10
211#define LMP_HV3 0x20
212#define LMP_ULAW 0x40
213#define LMP_ALAW 0x80
214
215#define LMP_CVSD 0x01
216#define LMP_PSCHEME 0x02
217#define LMP_PCONTROL 0x04
218
219#define LMP_RSSI_INQ 0x40
220#define LMP_ESCO 0x80
221
222#define LMP_EV4 0x01
223#define LMP_EV5 0x02
224#define LMP_NO_BREDR 0x20
225#define LMP_LE 0x40
226
227#define LMP_SNIFF_SUBR 0x02
228#define LMP_PAUSE_ENC 0x04
229#define LMP_EDR_ESCO_2M 0x20
230#define LMP_EDR_ESCO_3M 0x40
231#define LMP_EDR_3S_ESCO 0x80
232
233#define LMP_EXT_INQ 0x01
234#define LMP_SIMUL_LE_BR 0x02
235#define LMP_SIMPLE_PAIR 0x08
236#define LMP_NO_FLUSH 0x40
237
238#define LMP_LSTO 0x01
239#define LMP_INQ_TX_PWR 0x02
240#define LMP_EXTFEATURES 0x80
241
242/* Extended LMP features */
243#define LMP_HOST_SSP 0x01
244#define LMP_HOST_LE 0x02
245#define LMP_HOST_LE_BREDR 0x04
246
247/* Connection modes */
248#define HCI_CM_ACTIVE 0x0000
249#define HCI_CM_HOLD 0x0001
250#define HCI_CM_SNIFF 0x0002
251#define HCI_CM_PARK 0x0003
252
253/* Link policies */
254#define HCI_LP_RSWITCH 0x0001
255#define HCI_LP_HOLD 0x0002
256#define HCI_LP_SNIFF 0x0004
257#define HCI_LP_PARK 0x0008
258
259/* Link modes */
260#define HCI_LM_ACCEPT 0x8000
261#define HCI_LM_MASTER 0x0001
262#define HCI_LM_AUTH 0x0002
263#define HCI_LM_ENCRYPT 0x0004
264#define HCI_LM_TRUSTED 0x0008
265#define HCI_LM_RELIABLE 0x0010
266#define HCI_LM_SECURE 0x0020
267
268/* Authentication types */
269#define HCI_AT_NO_BONDING 0x00
270#define HCI_AT_NO_BONDING_MITM 0x01
271#define HCI_AT_DEDICATED_BONDING 0x02
272#define HCI_AT_DEDICATED_BONDING_MITM 0x03
273#define HCI_AT_GENERAL_BONDING 0x04
274#define HCI_AT_GENERAL_BONDING_MITM 0x05
275
276/* Link Key types */
277#define HCI_LK_COMBINATION 0x00
278#define HCI_LK_LOCAL_UNIT 0x01
279#define HCI_LK_REMOTE_UNIT 0x02
280#define HCI_LK_DEBUG_COMBINATION 0x03
281#define HCI_LK_UNAUTH_COMBINATION 0x04
282#define HCI_LK_AUTH_COMBINATION 0x05
283#define HCI_LK_CHANGED_COMBINATION 0x06
284/* The spec doesn't define types for SMP keys, the _MASTER suffix is implied */
285#define HCI_SMP_STK 0x80
286#define HCI_SMP_STK_SLAVE 0x81
287#define HCI_SMP_LTK 0x82
288#define HCI_SMP_LTK_SLAVE 0x83
289
290/* ---- HCI Error Codes ---- */
291#define HCI_ERROR_AUTH_FAILURE 0x05
292#define HCI_ERROR_REJ_BAD_ADDR 0x0f
293#define HCI_ERROR_REMOTE_USER_TERM 0x13
294#define HCI_ERROR_LOCAL_HOST_TERM 0x16
295#define HCI_ERROR_PAIRING_NOT_ALLOWED 0x18
296
297/* Flow control modes */
298#define HCI_FLOW_CTL_MODE_PACKET_BASED 0x00
299#define HCI_FLOW_CTL_MODE_BLOCK_BASED 0x01
300
301/* Extended Inquiry Response field types */
302#define EIR_FLAGS 0x01 /* flags */
303#define EIR_UUID16_SOME 0x02 /* 16-bit UUID, more available */
304#define EIR_UUID16_ALL 0x03 /* 16-bit UUID, all listed */
305#define EIR_UUID32_SOME 0x04 /* 32-bit UUID, more available */
306#define EIR_UUID32_ALL 0x05 /* 32-bit UUID, all listed */
307#define EIR_UUID128_SOME 0x06 /* 128-bit UUID, more available */
308#define EIR_UUID128_ALL 0x07 /* 128-bit UUID, all listed */
309#define EIR_NAME_SHORT 0x08 /* shortened local name */
310#define EIR_NAME_COMPLETE 0x09 /* complete local name */
311#define EIR_TX_POWER 0x0A /* transmit power level */
312#define EIR_CLASS_OF_DEV 0x0D /* Class of Device */
313#define EIR_SSP_HASH_C 0x0E /* Simple Pairing Hash C */
314#define EIR_SSP_RAND_R 0x0F /* Simple Pairing Randomizer R */
315#define EIR_DEVICE_ID 0x10 /* device ID */
316
317/* ----- HCI Commands ---- */
318#define HCI_OP_NOP 0x0000
319
320#define HCI_OP_INQUIRY 0x0401
321struct hci_cp_inquiry {
322 __u8 lap[3];
323 __u8 length;
324 __u8 num_rsp;
325} __packed;
326
327#define HCI_OP_INQUIRY_CANCEL 0x0402
328
329#define HCI_OP_EXIT_PERIODIC_INQ 0x0404
330
331#define HCI_OP_CREATE_CONN 0x0405
332struct hci_cp_create_conn {
333 bdaddr_t bdaddr;
334 __le16 pkt_type;
335 __u8 pscan_rep_mode;
336 __u8 pscan_mode;
337 __le16 clock_offset;
338 __u8 role_switch;
339} __packed;
340
341#define HCI_OP_DISCONNECT 0x0406
342struct hci_cp_disconnect {
343 __le16 handle;
344 __u8 reason;
345} __packed;
346
347#define HCI_OP_ADD_SCO 0x0407
348struct hci_cp_add_sco {
349 __le16 handle;
350 __le16 pkt_type;
351} __packed;
352
353#define HCI_OP_CREATE_CONN_CANCEL 0x0408
354struct hci_cp_create_conn_cancel {
355 bdaddr_t bdaddr;
356} __packed;
357
358#define HCI_OP_ACCEPT_CONN_REQ 0x0409
359struct hci_cp_accept_conn_req {
360 bdaddr_t bdaddr;
361 __u8 role;
362} __packed;
363
364#define HCI_OP_REJECT_CONN_REQ 0x040a
365struct hci_cp_reject_conn_req {
366 bdaddr_t bdaddr;
367 __u8 reason;
368} __packed;
369
370#define HCI_OP_LINK_KEY_REPLY 0x040b
371struct hci_cp_link_key_reply {
372 bdaddr_t bdaddr;
373 __u8 link_key[16];
374} __packed;
375
376#define HCI_OP_LINK_KEY_NEG_REPLY 0x040c
377struct hci_cp_link_key_neg_reply {
378 bdaddr_t bdaddr;
379} __packed;
380
381#define HCI_OP_PIN_CODE_REPLY 0x040d
382struct hci_cp_pin_code_reply {
383 bdaddr_t bdaddr;
384 __u8 pin_len;
385 __u8 pin_code[16];
386} __packed;
387struct hci_rp_pin_code_reply {
388 __u8 status;
389 bdaddr_t bdaddr;
390} __packed;
391
392#define HCI_OP_PIN_CODE_NEG_REPLY 0x040e
393struct hci_cp_pin_code_neg_reply {
394 bdaddr_t bdaddr;
395} __packed;
396struct hci_rp_pin_code_neg_reply {
397 __u8 status;
398 bdaddr_t bdaddr;
399} __packed;
400
401#define HCI_OP_CHANGE_CONN_PTYPE 0x040f
402struct hci_cp_change_conn_ptype {
403 __le16 handle;
404 __le16 pkt_type;
405} __packed;
406
407#define HCI_OP_AUTH_REQUESTED 0x0411
408struct hci_cp_auth_requested {
409 __le16 handle;
410} __packed;
411
412#define HCI_OP_SET_CONN_ENCRYPT 0x0413
413struct hci_cp_set_conn_encrypt {
414 __le16 handle;
415 __u8 encrypt;
416} __packed;
417
418#define HCI_OP_CHANGE_CONN_LINK_KEY 0x0415
419struct hci_cp_change_conn_link_key {
420 __le16 handle;
421} __packed;
422
423#define HCI_OP_REMOTE_NAME_REQ 0x0419
424struct hci_cp_remote_name_req {
425 bdaddr_t bdaddr;
426 __u8 pscan_rep_mode;
427 __u8 pscan_mode;
428 __le16 clock_offset;
429} __packed;
430
431#define HCI_OP_REMOTE_NAME_REQ_CANCEL 0x041a
432struct hci_cp_remote_name_req_cancel {
433 bdaddr_t bdaddr;
434} __packed;
435
436#define HCI_OP_READ_REMOTE_FEATURES 0x041b
437struct hci_cp_read_remote_features {
438 __le16 handle;
439} __packed;
440
441#define HCI_OP_READ_REMOTE_EXT_FEATURES 0x041c
442struct hci_cp_read_remote_ext_features {
443 __le16 handle;
444 __u8 page;
445} __packed;
446
447#define HCI_OP_READ_REMOTE_VERSION 0x041d
448struct hci_cp_read_remote_version {
449 __le16 handle;
450} __packed;
451
452#define HCI_OP_SETUP_SYNC_CONN 0x0428
453struct hci_cp_setup_sync_conn {
454 __le16 handle;
455 __le32 tx_bandwidth;
456 __le32 rx_bandwidth;
457 __le16 max_latency;
458 __le16 voice_setting;
459 __u8 retrans_effort;
460 __le16 pkt_type;
461} __packed;
462
463#define HCI_OP_ACCEPT_SYNC_CONN_REQ 0x0429
464struct hci_cp_accept_sync_conn_req {
465 bdaddr_t bdaddr;
466 __le32 tx_bandwidth;
467 __le32 rx_bandwidth;
468 __le16 max_latency;
469 __le16 content_format;
470 __u8 retrans_effort;
471 __le16 pkt_type;
472} __packed;
473
474#define HCI_OP_REJECT_SYNC_CONN_REQ 0x042a
475struct hci_cp_reject_sync_conn_req {
476 bdaddr_t bdaddr;
477 __u8 reason;
478} __packed;
479
480#define HCI_OP_IO_CAPABILITY_REPLY 0x042b
481struct hci_cp_io_capability_reply {
482 bdaddr_t bdaddr;
483 __u8 capability;
484 __u8 oob_data;
485 __u8 authentication;
486} __packed;
487
488#define HCI_OP_USER_CONFIRM_REPLY 0x042c
489struct hci_cp_user_confirm_reply {
490 bdaddr_t bdaddr;
491} __packed;
492struct hci_rp_user_confirm_reply {
493 __u8 status;
494 bdaddr_t bdaddr;
495} __packed;
496
497#define HCI_OP_USER_CONFIRM_NEG_REPLY 0x042d
498
499#define HCI_OP_USER_PASSKEY_REPLY 0x042e
500struct hci_cp_user_passkey_reply {
501 bdaddr_t bdaddr;
502 __le32 passkey;
503} __packed;
504
505#define HCI_OP_USER_PASSKEY_NEG_REPLY 0x042f
506
507#define HCI_OP_REMOTE_OOB_DATA_REPLY 0x0430
508struct hci_cp_remote_oob_data_reply {
509 bdaddr_t bdaddr;
510 __u8 hash[16];
511 __u8 randomizer[16];
512} __packed;
513
514#define HCI_OP_REMOTE_OOB_DATA_NEG_REPLY 0x0433
515struct hci_cp_remote_oob_data_neg_reply {
516 bdaddr_t bdaddr;
517} __packed;
518
519#define HCI_OP_IO_CAPABILITY_NEG_REPLY 0x0434
520struct hci_cp_io_capability_neg_reply {
521 bdaddr_t bdaddr;
522 __u8 reason;
523} __packed;
524
525#define HCI_OP_SNIFF_MODE 0x0803
526struct hci_cp_sniff_mode {
527 __le16 handle;
528 __le16 max_interval;
529 __le16 min_interval;
530 __le16 attempt;
531 __le16 timeout;
532} __packed;
533
534#define HCI_OP_EXIT_SNIFF_MODE 0x0804
535struct hci_cp_exit_sniff_mode {
536 __le16 handle;
537} __packed;
538
539#define HCI_OP_ROLE_DISCOVERY 0x0809
540struct hci_cp_role_discovery {
541 __le16 handle;
542} __packed;
543struct hci_rp_role_discovery {
544 __u8 status;
545 __le16 handle;
546 __u8 role;
547} __packed;
548
549#define HCI_OP_SWITCH_ROLE 0x080b
550struct hci_cp_switch_role {
551 bdaddr_t bdaddr;
552 __u8 role;
553} __packed;
554
555#define HCI_OP_READ_LINK_POLICY 0x080c
556struct hci_cp_read_link_policy {
557 __le16 handle;
558} __packed;
559struct hci_rp_read_link_policy {
560 __u8 status;
561 __le16 handle;
562 __le16 policy;
563} __packed;
564
565#define HCI_OP_WRITE_LINK_POLICY 0x080d
566struct hci_cp_write_link_policy {
567 __le16 handle;
568 __le16 policy;
569} __packed;
570struct hci_rp_write_link_policy {
571 __u8 status;
572 __le16 handle;
573} __packed;
574
575#define HCI_OP_READ_DEF_LINK_POLICY 0x080e
576struct hci_rp_read_def_link_policy {
577 __u8 status;
578 __le16 policy;
579} __packed;
580
581#define HCI_OP_WRITE_DEF_LINK_POLICY 0x080f
582struct hci_cp_write_def_link_policy {
583 __le16 policy;
584} __packed;
585
586#define HCI_OP_SNIFF_SUBRATE 0x0811
587struct hci_cp_sniff_subrate {
588 __le16 handle;
589 __le16 max_latency;
590 __le16 min_remote_timeout;
591 __le16 min_local_timeout;
592} __packed;
593
594#define HCI_OP_SET_EVENT_MASK 0x0c01
595struct hci_cp_set_event_mask {
596 __u8 mask[8];
597} __packed;
598
599#define HCI_OP_RESET 0x0c03
600
601#define HCI_OP_SET_EVENT_FLT 0x0c05
602struct hci_cp_set_event_flt {
603 __u8 flt_type;
604 __u8 cond_type;
605 __u8 condition[0];
606} __packed;
607
608/* Filter types */
609#define HCI_FLT_CLEAR_ALL 0x00
610#define HCI_FLT_INQ_RESULT 0x01
611#define HCI_FLT_CONN_SETUP 0x02
612
613/* CONN_SETUP Condition types */
614#define HCI_CONN_SETUP_ALLOW_ALL 0x00
615#define HCI_CONN_SETUP_ALLOW_CLASS 0x01
616#define HCI_CONN_SETUP_ALLOW_BDADDR 0x02
617
618/* CONN_SETUP Conditions */
619#define HCI_CONN_SETUP_AUTO_OFF 0x01
620#define HCI_CONN_SETUP_AUTO_ON 0x02
621
622#define HCI_OP_DELETE_STORED_LINK_KEY 0x0c12
623struct hci_cp_delete_stored_link_key {
624 bdaddr_t bdaddr;
625 __u8 delete_all;
626} __packed;
627
628#define HCI_MAX_NAME_LENGTH 248
629
630#define HCI_OP_WRITE_LOCAL_NAME 0x0c13
631struct hci_cp_write_local_name {
632 __u8 name[HCI_MAX_NAME_LENGTH];
633} __packed;
634
635#define HCI_OP_READ_LOCAL_NAME 0x0c14
636struct hci_rp_read_local_name {
637 __u8 status;
638 __u8 name[HCI_MAX_NAME_LENGTH];
639} __packed;
640
641#define HCI_OP_WRITE_CA_TIMEOUT 0x0c16
642
643#define HCI_OP_WRITE_PG_TIMEOUT 0x0c18
644
645#define HCI_OP_WRITE_SCAN_ENABLE 0x0c1a
646 #define SCAN_DISABLED 0x00
647 #define SCAN_INQUIRY 0x01
648 #define SCAN_PAGE 0x02
649
650#define HCI_OP_READ_AUTH_ENABLE 0x0c1f
651
652#define HCI_OP_WRITE_AUTH_ENABLE 0x0c20
653 #define AUTH_DISABLED 0x00
654 #define AUTH_ENABLED 0x01
655
656#define HCI_OP_READ_ENCRYPT_MODE 0x0c21
657
658#define HCI_OP_WRITE_ENCRYPT_MODE 0x0c22
659 #define ENCRYPT_DISABLED 0x00
660 #define ENCRYPT_P2P 0x01
661 #define ENCRYPT_BOTH 0x02
662
663#define HCI_OP_READ_CLASS_OF_DEV 0x0c23
664struct hci_rp_read_class_of_dev {
665 __u8 status;
666 __u8 dev_class[3];
667} __packed;
668
669#define HCI_OP_WRITE_CLASS_OF_DEV 0x0c24
670struct hci_cp_write_class_of_dev {
671 __u8 dev_class[3];
672} __packed;
673
674#define HCI_OP_READ_VOICE_SETTING 0x0c25
675struct hci_rp_read_voice_setting {
676 __u8 status;
677 __le16 voice_setting;
678} __packed;
679
680#define HCI_OP_WRITE_VOICE_SETTING 0x0c26
681struct hci_cp_write_voice_setting {
682 __le16 voice_setting;
683} __packed;
684
685#define HCI_OP_HOST_BUFFER_SIZE 0x0c33
686struct hci_cp_host_buffer_size {
687 __le16 acl_mtu;
688 __u8 sco_mtu;
689 __le16 acl_max_pkt;
690 __le16 sco_max_pkt;
691} __packed;
692
693#define HCI_OP_WRITE_INQUIRY_MODE 0x0c45
694
695#define HCI_MAX_EIR_LENGTH 240
696
697#define HCI_OP_WRITE_EIR 0x0c52
698struct hci_cp_write_eir {
699 __u8 fec;
700 __u8 data[HCI_MAX_EIR_LENGTH];
701} __packed;
702
703#define HCI_OP_READ_SSP_MODE 0x0c55
704struct hci_rp_read_ssp_mode {
705 __u8 status;
706 __u8 mode;
707} __packed;
708
709#define HCI_OP_WRITE_SSP_MODE 0x0c56
710struct hci_cp_write_ssp_mode {
711 __u8 mode;
712} __packed;
713
714#define HCI_OP_READ_LOCAL_OOB_DATA 0x0c57
715struct hci_rp_read_local_oob_data {
716 __u8 status;
717 __u8 hash[16];
718 __u8 randomizer[16];
719} __packed;
720
721#define HCI_OP_READ_INQ_RSP_TX_POWER 0x0c58
722
723#define HCI_OP_READ_FLOW_CONTROL_MODE 0x0c66
724struct hci_rp_read_flow_control_mode {
725 __u8 status;
726 __u8 mode;
727} __packed;
728
729#define HCI_OP_WRITE_LE_HOST_SUPPORTED 0x0c6d
730struct hci_cp_write_le_host_supported {
731 __u8 le;
732 __u8 simul;
733} __packed;
734
735#define HCI_OP_READ_LOCAL_VERSION 0x1001
736struct hci_rp_read_local_version {
737 __u8 status;
738 __u8 hci_ver;
739 __le16 hci_rev;
740 __u8 lmp_ver;
741 __le16 manufacturer;
742 __le16 lmp_subver;
743} __packed;
744
745#define HCI_OP_READ_LOCAL_COMMANDS 0x1002
746struct hci_rp_read_local_commands {
747 __u8 status;
748 __u8 commands[64];
749} __packed;
750
751#define HCI_OP_READ_LOCAL_FEATURES 0x1003
752struct hci_rp_read_local_features {
753 __u8 status;
754 __u8 features[8];
755} __packed;
756
757#define HCI_OP_READ_LOCAL_EXT_FEATURES 0x1004
758struct hci_cp_read_local_ext_features {
759 __u8 page;
760} __packed;
761struct hci_rp_read_local_ext_features {
762 __u8 status;
763 __u8 page;
764 __u8 max_page;
765 __u8 features[8];
766} __packed;
767
768#define HCI_OP_READ_BUFFER_SIZE 0x1005
769struct hci_rp_read_buffer_size {
770 __u8 status;
771 __le16 acl_mtu;
772 __u8 sco_mtu;
773 __le16 acl_max_pkt;
774 __le16 sco_max_pkt;
775} __packed;
776
777#define HCI_OP_READ_BD_ADDR 0x1009
778struct hci_rp_read_bd_addr {
779 __u8 status;
780 bdaddr_t bdaddr;
781} __packed;
782
783#define HCI_OP_READ_DATA_BLOCK_SIZE 0x100a
784struct hci_rp_read_data_block_size {
785 __u8 status;
786 __le16 max_acl_len;
787 __le16 block_len;
788 __le16 num_blocks;
789} __packed;
790
791#define HCI_OP_WRITE_PAGE_SCAN_ACTIVITY 0x0c1c
792struct hci_cp_write_page_scan_activity {
793 __le16 interval;
794 __le16 window;
795} __packed;
796
797#define HCI_OP_WRITE_PAGE_SCAN_TYPE 0x0c47
798 #define PAGE_SCAN_TYPE_STANDARD 0x00
799 #define PAGE_SCAN_TYPE_INTERLACED 0x01
800
801#define HCI_OP_READ_LOCAL_AMP_INFO 0x1409
802struct hci_rp_read_local_amp_info {
803 __u8 status;
804 __u8 amp_status;
805 __le32 total_bw;
806 __le32 max_bw;
807 __le32 min_latency;
808 __le32 max_pdu;
809 __u8 amp_type;
810 __le16 pal_cap;
811 __le16 max_assoc_size;
812 __le32 max_flush_to;
813 __le32 be_flush_to;
814} __packed;
815
816#define HCI_OP_LE_SET_EVENT_MASK 0x2001
817struct hci_cp_le_set_event_mask {
818 __u8 mask[8];
819} __packed;
820
821#define HCI_OP_LE_READ_BUFFER_SIZE 0x2002
822struct hci_rp_le_read_buffer_size {
823 __u8 status;
824 __le16 le_mtu;
825 __u8 le_max_pkt;
826} __packed;
827
828#define HCI_OP_LE_SET_SCAN_PARAM 0x200b
829struct hci_cp_le_set_scan_param {
830 __u8 type;
831 __le16 interval;
832 __le16 window;
833 __u8 own_address_type;
834 __u8 filter_policy;
835} __packed;
836
837#define LE_SCANNING_DISABLED 0x00
838#define LE_SCANNING_ENABLED 0x01
839
840#define HCI_OP_LE_SET_SCAN_ENABLE 0x200c
841struct hci_cp_le_set_scan_enable {
842 __u8 enable;
843 __u8 filter_dup;
844} __packed;
845
846#define HCI_OP_LE_CREATE_CONN 0x200d
847struct hci_cp_le_create_conn {
848 __le16 scan_interval;
849 __le16 scan_window;
850 __u8 filter_policy;
851 __u8 peer_addr_type;
852 bdaddr_t peer_addr;
853 __u8 own_address_type;
854 __le16 conn_interval_min;
855 __le16 conn_interval_max;
856 __le16 conn_latency;
857 __le16 supervision_timeout;
858 __le16 min_ce_len;
859 __le16 max_ce_len;
860} __packed;
861
862#define HCI_OP_LE_CREATE_CONN_CANCEL 0x200e
863
864#define HCI_OP_LE_CONN_UPDATE 0x2013
865struct hci_cp_le_conn_update {
866 __le16 handle;
867 __le16 conn_interval_min;
868 __le16 conn_interval_max;
869 __le16 conn_latency;
870 __le16 supervision_timeout;
871 __le16 min_ce_len;
872 __le16 max_ce_len;
873} __packed;
874
875#define HCI_OP_LE_START_ENC 0x2019
876struct hci_cp_le_start_enc {
877 __le16 handle;
878 __u8 rand[8];
879 __le16 ediv;
880 __u8 ltk[16];
881} __packed;
882
883#define HCI_OP_LE_LTK_REPLY 0x201a
884struct hci_cp_le_ltk_reply {
885 __le16 handle;
886 __u8 ltk[16];
887} __packed;
888struct hci_rp_le_ltk_reply {
889 __u8 status;
890 __le16 handle;
891} __packed;
892
893#define HCI_OP_LE_LTK_NEG_REPLY 0x201b
894struct hci_cp_le_ltk_neg_reply {
895 __le16 handle;
896} __packed;
897struct hci_rp_le_ltk_neg_reply {
898 __u8 status;
899 __le16 handle;
900} __packed;
901
902/* ---- HCI Events ---- */
903#define HCI_EV_INQUIRY_COMPLETE 0x01
904
905#define HCI_EV_INQUIRY_RESULT 0x02
906struct inquiry_info {
907 bdaddr_t bdaddr;
908 __u8 pscan_rep_mode;
909 __u8 pscan_period_mode;
910 __u8 pscan_mode;
911 __u8 dev_class[3];
912 __le16 clock_offset;
913} __packed;
914
915#define HCI_EV_CONN_COMPLETE 0x03
916struct hci_ev_conn_complete {
917 __u8 status;
918 __le16 handle;
919 bdaddr_t bdaddr;
920 __u8 link_type;
921 __u8 encr_mode;
922} __packed;
923
924#define HCI_EV_CONN_REQUEST 0x04
925struct hci_ev_conn_request {
926 bdaddr_t bdaddr;
927 __u8 dev_class[3];
928 __u8 link_type;
929} __packed;
930
931#define HCI_EV_DISCONN_COMPLETE 0x05
932struct hci_ev_disconn_complete {
933 __u8 status;
934 __le16 handle;
935 __u8 reason;
936} __packed;
937
938#define HCI_EV_AUTH_COMPLETE 0x06
939struct hci_ev_auth_complete {
940 __u8 status;
941 __le16 handle;
942} __packed;
943
944#define HCI_EV_REMOTE_NAME 0x07
945struct hci_ev_remote_name {
946 __u8 status;
947 bdaddr_t bdaddr;
948 __u8 name[HCI_MAX_NAME_LENGTH];
949} __packed;
950
951#define HCI_EV_ENCRYPT_CHANGE 0x08
952struct hci_ev_encrypt_change {
953 __u8 status;
954 __le16 handle;
955 __u8 encrypt;
956} __packed;
957
958#define HCI_EV_CHANGE_LINK_KEY_COMPLETE 0x09
959struct hci_ev_change_link_key_complete {
960 __u8 status;
961 __le16 handle;
962} __packed;
963
964#define HCI_EV_REMOTE_FEATURES 0x0b
965struct hci_ev_remote_features {
966 __u8 status;
967 __le16 handle;
968 __u8 features[8];
969} __packed;
970
971#define HCI_EV_REMOTE_VERSION 0x0c
972struct hci_ev_remote_version {
973 __u8 status;
974 __le16 handle;
975 __u8 lmp_ver;
976 __le16 manufacturer;
977 __le16 lmp_subver;
978} __packed;
979
980#define HCI_EV_QOS_SETUP_COMPLETE 0x0d
981struct hci_qos {
982 __u8 service_type;
983 __u32 token_rate;
984 __u32 peak_bandwidth;
985 __u32 latency;
986 __u32 delay_variation;
987} __packed;
988struct hci_ev_qos_setup_complete {
989 __u8 status;
990 __le16 handle;
991 struct hci_qos qos;
992} __packed;
993
994#define HCI_EV_CMD_COMPLETE 0x0e
995struct hci_ev_cmd_complete {
996 __u8 ncmd;
997 __le16 opcode;
998} __packed;
999
1000#define HCI_EV_CMD_STATUS 0x0f
1001struct hci_ev_cmd_status {
1002 __u8 status;
1003 __u8 ncmd;
1004 __le16 opcode;
1005} __packed;
1006
1007#define HCI_EV_ROLE_CHANGE 0x12
1008struct hci_ev_role_change {
1009 __u8 status;
1010 bdaddr_t bdaddr;
1011 __u8 role;
1012} __packed;
1013
1014#define HCI_EV_NUM_COMP_PKTS 0x13
1015struct hci_comp_pkts_info {
1016 __le16 handle;
1017 __le16 count;
1018} __packed;
1019
1020struct hci_ev_num_comp_pkts {
1021 __u8 num_hndl;
1022 struct hci_comp_pkts_info handles[0];
1023} __packed;
1024
1025#define HCI_EV_MODE_CHANGE 0x14
1026struct hci_ev_mode_change {
1027 __u8 status;
1028 __le16 handle;
1029 __u8 mode;
1030 __le16 interval;
1031} __packed;
1032
1033#define HCI_EV_PIN_CODE_REQ 0x16
1034struct hci_ev_pin_code_req {
1035 bdaddr_t bdaddr;
1036} __packed;
1037
1038#define HCI_EV_LINK_KEY_REQ 0x17
1039struct hci_ev_link_key_req {
1040 bdaddr_t bdaddr;
1041} __packed;
1042
1043#define HCI_EV_LINK_KEY_NOTIFY 0x18
1044struct hci_ev_link_key_notify {
1045 bdaddr_t bdaddr;
1046 __u8 link_key[16];
1047 __u8 key_type;
1048} __packed;
1049
1050#define HCI_EV_CLOCK_OFFSET 0x1c
1051struct hci_ev_clock_offset {
1052 __u8 status;
1053 __le16 handle;
1054 __le16 clock_offset;
1055} __packed;
1056
1057#define HCI_EV_PKT_TYPE_CHANGE 0x1d
1058struct hci_ev_pkt_type_change {
1059 __u8 status;
1060 __le16 handle;
1061 __le16 pkt_type;
1062} __packed;
1063
1064#define HCI_EV_PSCAN_REP_MODE 0x20
1065struct hci_ev_pscan_rep_mode {
1066 bdaddr_t bdaddr;
1067 __u8 pscan_rep_mode;
1068} __packed;
1069
1070#define HCI_EV_INQUIRY_RESULT_WITH_RSSI 0x22
1071struct inquiry_info_with_rssi {
1072 bdaddr_t bdaddr;
1073 __u8 pscan_rep_mode;
1074 __u8 pscan_period_mode;
1075 __u8 dev_class[3];
1076 __le16 clock_offset;
1077 __s8 rssi;
1078} __packed;
1079struct inquiry_info_with_rssi_and_pscan_mode {
1080 bdaddr_t bdaddr;
1081 __u8 pscan_rep_mode;
1082 __u8 pscan_period_mode;
1083 __u8 pscan_mode;
1084 __u8 dev_class[3];
1085 __le16 clock_offset;
1086 __s8 rssi;
1087} __packed;
1088
1089#define HCI_EV_REMOTE_EXT_FEATURES 0x23
1090struct hci_ev_remote_ext_features {
1091 __u8 status;
1092 __le16 handle;
1093 __u8 page;
1094 __u8 max_page;
1095 __u8 features[8];
1096} __packed;
1097
1098#define HCI_EV_SYNC_CONN_COMPLETE 0x2c
1099struct hci_ev_sync_conn_complete {
1100 __u8 status;
1101 __le16 handle;
1102 bdaddr_t bdaddr;
1103 __u8 link_type;
1104 __u8 tx_interval;
1105 __u8 retrans_window;
1106 __le16 rx_pkt_len;
1107 __le16 tx_pkt_len;
1108 __u8 air_mode;
1109} __packed;
1110
1111#define HCI_EV_SYNC_CONN_CHANGED 0x2d
1112struct hci_ev_sync_conn_changed {
1113 __u8 status;
1114 __le16 handle;
1115 __u8 tx_interval;
1116 __u8 retrans_window;
1117 __le16 rx_pkt_len;
1118 __le16 tx_pkt_len;
1119} __packed;
1120
1121#define HCI_EV_SNIFF_SUBRATE 0x2e
1122struct hci_ev_sniff_subrate {
1123 __u8 status;
1124 __le16 handle;
1125 __le16 max_tx_latency;
1126 __le16 max_rx_latency;
1127 __le16 max_remote_timeout;
1128 __le16 max_local_timeout;
1129} __packed;
1130
1131#define HCI_EV_EXTENDED_INQUIRY_RESULT 0x2f
1132struct extended_inquiry_info {
1133 bdaddr_t bdaddr;
1134 __u8 pscan_rep_mode;
1135 __u8 pscan_period_mode;
1136 __u8 dev_class[3];
1137 __le16 clock_offset;
1138 __s8 rssi;
1139 __u8 data[240];
1140} __packed;
1141
1142#define HCI_EV_IO_CAPA_REQUEST 0x31
1143struct hci_ev_io_capa_request {
1144 bdaddr_t bdaddr;
1145} __packed;
1146
1147#define HCI_EV_IO_CAPA_REPLY 0x32
1148struct hci_ev_io_capa_reply {
1149 bdaddr_t bdaddr;
1150 __u8 capability;
1151 __u8 oob_data;
1152 __u8 authentication;
1153} __packed;
1154
1155#define HCI_EV_USER_CONFIRM_REQUEST 0x33
1156struct hci_ev_user_confirm_req {
1157 bdaddr_t bdaddr;
1158 __le32 passkey;
1159} __packed;
1160
1161#define HCI_EV_USER_PASSKEY_REQUEST 0x34
1162struct hci_ev_user_passkey_req {
1163 bdaddr_t bdaddr;
1164} __packed;
1165
1166#define HCI_EV_REMOTE_OOB_DATA_REQUEST 0x35
1167struct hci_ev_remote_oob_data_request {
1168 bdaddr_t bdaddr;
1169} __packed;
1170
1171#define HCI_EV_SIMPLE_PAIR_COMPLETE 0x36
1172struct hci_ev_simple_pair_complete {
1173 __u8 status;
1174 bdaddr_t bdaddr;
1175} __packed;
1176
1177#define HCI_EV_REMOTE_HOST_FEATURES 0x3d
1178struct hci_ev_remote_host_features {
1179 bdaddr_t bdaddr;
1180 __u8 features[8];
1181} __packed;
1182
1183#define HCI_EV_LE_META 0x3e
1184struct hci_ev_le_meta {
1185 __u8 subevent;
1186} __packed;
1187
1188#define HCI_EV_NUM_COMP_BLOCKS 0x48
1189struct hci_comp_blocks_info {
1190 __le16 handle;
1191 __le16 pkts;
1192 __le16 blocks;
1193} __packed;
1194
1195struct hci_ev_num_comp_blocks {
1196 __le16 num_blocks;
1197 __u8 num_hndl;
1198 struct hci_comp_blocks_info handles[0];
1199} __packed;
1200
1201/* Low energy meta events */
1202#define HCI_EV_LE_CONN_COMPLETE 0x01
1203struct hci_ev_le_conn_complete {
1204 __u8 status;
1205 __le16 handle;
1206 __u8 role;
1207 __u8 bdaddr_type;
1208 bdaddr_t bdaddr;
1209 __le16 interval;
1210 __le16 latency;
1211 __le16 supervision_timeout;
1212 __u8 clk_accurancy;
1213} __packed;
1214
1215#define HCI_EV_LE_LTK_REQ 0x05
1216struct hci_ev_le_ltk_req {
1217 __le16 handle;
1218 __u8 random[8];
1219 __le16 ediv;
1220} __packed;
1221
1222/* Advertising report event types */
1223#define ADV_IND 0x00
1224#define ADV_DIRECT_IND 0x01
1225#define ADV_SCAN_IND 0x02
1226#define ADV_NONCONN_IND 0x03
1227#define ADV_SCAN_RSP 0x04
1228
1229#define ADDR_LE_DEV_PUBLIC 0x00
1230#define ADDR_LE_DEV_RANDOM 0x01
1231
1232#define HCI_EV_LE_ADVERTISING_REPORT 0x02
1233struct hci_ev_le_advertising_info {
1234 __u8 evt_type;
1235 __u8 bdaddr_type;
1236 bdaddr_t bdaddr;
1237 __u8 length;
1238 __u8 data[0];
1239} __packed;
1240
1241/* Internal events generated by Bluetooth stack */
1242#define HCI_EV_STACK_INTERNAL 0xfd
1243struct hci_ev_stack_internal {
1244 __u16 type;
1245 __u8 data[0];
1246} __packed;
1247
1248#define HCI_EV_SI_DEVICE 0x01
1249struct hci_ev_si_device {
1250 __u16 event;
1251 __u16 dev_id;
1252} __packed;
1253
1254#define HCI_EV_SI_SECURITY 0x02
1255struct hci_ev_si_security {
1256 __u16 event;
1257 __u16 proto;
1258 __u16 subproto;
1259 __u8 incoming;
1260} __packed;
1261
1262/* ---- HCI Packet structures ---- */
1263#define HCI_COMMAND_HDR_SIZE 3
1264#define HCI_EVENT_HDR_SIZE 2
1265#define HCI_ACL_HDR_SIZE 4
1266#define HCI_SCO_HDR_SIZE 3
1267
1268struct hci_command_hdr {
1269 __le16 opcode; /* OCF & OGF */
1270 __u8 plen;
1271} __packed;
1272
1273struct hci_event_hdr {
1274 __u8 evt;
1275 __u8 plen;
1276} __packed;
1277
1278struct hci_acl_hdr {
1279 __le16 handle; /* Handle & Flags(PB, BC) */
1280 __le16 dlen;
1281} __packed;
1282
1283struct hci_sco_hdr {
1284 __le16 handle;
1285 __u8 dlen;
1286} __packed;
1287
1288#include <linux/skbuff.h>
1289static inline struct hci_event_hdr *hci_event_hdr(const struct sk_buff *skb)
1290{
1291 return (struct hci_event_hdr *) skb->data;
1292}
1293
1294static inline struct hci_acl_hdr *hci_acl_hdr(const struct sk_buff *skb)
1295{
1296 return (struct hci_acl_hdr *) skb->data;
1297}
1298
1299static inline struct hci_sco_hdr *hci_sco_hdr(const struct sk_buff *skb)
1300{
1301 return (struct hci_sco_hdr *) skb->data;
1302}
1303
1304/* Command opcode pack/unpack */
1305#define hci_opcode_pack(ogf, ocf) (__u16) ((ocf & 0x03ff)|(ogf << 10))
1306#define hci_opcode_ogf(op) (op >> 10)
1307#define hci_opcode_ocf(op) (op & 0x03ff)
1308
1309/* ACL handle and flags pack/unpack */
1310#define hci_handle_pack(h, f) (__u16) ((h & 0x0fff)|(f << 12))
1311#define hci_handle(h) (h & 0x0fff)
1312#define hci_flags(h) (h >> 12)
1313
1314/* ---- HCI Sockets ---- */
1315
1316/* Socket options */
1317#define HCI_DATA_DIR 1
1318#define HCI_FILTER 2
1319#define HCI_TIME_STAMP 3
1320
1321/* CMSG flags */
1322#define HCI_CMSG_DIR 0x0001
1323#define HCI_CMSG_TSTAMP 0x0002
1324
1325struct sockaddr_hci {
1326 sa_family_t hci_family;
1327 unsigned short hci_dev;
1328 unsigned short hci_channel;
1329};
1330#define HCI_DEV_NONE 0xffff
1331
1332#define HCI_CHANNEL_RAW 0
1333#define HCI_CHANNEL_MONITOR 2
1334#define HCI_CHANNEL_CONTROL 3
1335
1336struct hci_filter {
1337 unsigned long type_mask;
1338 unsigned long event_mask[2];
1339 __le16 opcode;
1340};
1341
1342struct hci_ufilter {
1343 __u32 type_mask;
1344 __u32 event_mask[2];
1345 __le16 opcode;
1346};
1347
1348#define HCI_FLT_TYPE_BITS 31
1349#define HCI_FLT_EVENT_BITS 63
1350#define HCI_FLT_OGF_BITS 63
1351#define HCI_FLT_OCF_BITS 127
1352
1353/* ---- HCI Ioctl requests structures ---- */
1354struct hci_dev_stats {
1355 __u32 err_rx;
1356 __u32 err_tx;
1357 __u32 cmd_tx;
1358 __u32 evt_rx;
1359 __u32 acl_tx;
1360 __u32 acl_rx;
1361 __u32 sco_tx;
1362 __u32 sco_rx;
1363 __u32 byte_rx;
1364 __u32 byte_tx;
1365};
1366
1367struct hci_dev_info {
1368 __u16 dev_id;
1369 char name[8];
1370
1371 bdaddr_t bdaddr;
1372
1373 __u32 flags;
1374 __u8 type;
1375
1376 __u8 features[8];
1377
1378 __u32 pkt_type;
1379 __u32 link_policy;
1380 __u32 link_mode;
1381
1382 __u16 acl_mtu;
1383 __u16 acl_pkts;
1384 __u16 sco_mtu;
1385 __u16 sco_pkts;
1386
1387 struct hci_dev_stats stat;
1388};
1389
1390struct hci_conn_info {
1391 __u16 handle;
1392 bdaddr_t bdaddr;
1393 __u8 type;
1394 __u8 out;
1395 __u16 state;
1396 __u32 link_mode;
1397 __u32 mtu;
1398 __u32 cnt;
1399 __u32 pkts;
1400};
1401
1402struct hci_dev_req {
1403 __u16 dev_id;
1404 __u32 dev_opt;
1405};
1406
1407struct hci_dev_list_req {
1408 __u16 dev_num;
1409 struct hci_dev_req dev_req[0]; /* hci_dev_req structures */
1410};
1411
1412struct hci_conn_list_req {
1413 __u16 dev_id;
1414 __u16 conn_num;
1415 struct hci_conn_info conn_info[0];
1416};
1417
1418struct hci_conn_info_req {
1419 bdaddr_t bdaddr;
1420 __u8 type;
1421 struct hci_conn_info conn_info[0];
1422};
1423
1424struct hci_auth_info_req {
1425 bdaddr_t bdaddr;
1426 __u8 type;
1427};
1428
1429struct hci_inquiry_req {
1430 __u16 dev_id;
1431 __u16 flags;
1432 __u8 lap[3];
1433 __u8 length;
1434 __u8 num_rsp;
1435};
1436#define IREQ_CACHE_FLUSH 0x0001
1437
1438extern bool enable_hs;
1439extern bool enable_le;
1440
1441#endif /* __HCI_H */