xref: /linux/include/net/bluetooth/hci.h (revision c537b994505099b7197e7d3125b942ecbcc51eb6)
1 /*
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 device 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 device quirks */
56 enum {
57 	HCI_QUIRK_RESET_ON_INIT,
58 	HCI_QUIRK_RAW_DEVICE,
59 	HCI_QUIRK_FIXUP_BUFFER_SIZE
60 };
61 
62 /* HCI device flags */
63 enum {
64 	HCI_UP,
65 	HCI_INIT,
66 	HCI_RUNNING,
67 
68 	HCI_PSCAN,
69 	HCI_ISCAN,
70 	HCI_AUTH,
71 	HCI_ENCRYPT,
72 	HCI_INQUIRY,
73 
74 	HCI_RAW,
75 
76 	HCI_SECMGR
77 };
78 
79 /* HCI ioctl defines */
80 #define HCIDEVUP	_IOW('H', 201, int)
81 #define HCIDEVDOWN	_IOW('H', 202, int)
82 #define HCIDEVRESET	_IOW('H', 203, int)
83 #define HCIDEVRESTAT	_IOW('H', 204, int)
84 
85 #define HCIGETDEVLIST	_IOR('H', 210, int)
86 #define HCIGETDEVINFO	_IOR('H', 211, int)
87 #define HCIGETCONNLIST	_IOR('H', 212, int)
88 #define HCIGETCONNINFO	_IOR('H', 213, int)
89 
90 #define HCISETRAW	_IOW('H', 220, int)
91 #define HCISETSCAN	_IOW('H', 221, int)
92 #define HCISETAUTH	_IOW('H', 222, int)
93 #define HCISETENCRYPT	_IOW('H', 223, int)
94 #define HCISETPTYPE	_IOW('H', 224, int)
95 #define HCISETLINKPOL	_IOW('H', 225, int)
96 #define HCISETLINKMODE	_IOW('H', 226, int)
97 #define HCISETACLMTU	_IOW('H', 227, int)
98 #define HCISETSCOMTU	_IOW('H', 228, int)
99 
100 #define HCISETSECMGR	_IOW('H', 230, int)
101 
102 #define HCIINQUIRY	_IOR('H', 240, int)
103 
104 /* HCI timeouts */
105 #define HCI_CONNECT_TIMEOUT	(40000)	/* 40 seconds */
106 #define HCI_DISCONN_TIMEOUT	(2000)	/* 2 seconds */
107 #define HCI_IDLE_TIMEOUT	(6000)	/* 6 seconds */
108 #define HCI_INIT_TIMEOUT	(10000)	/* 10 seconds */
109 
110 /* HCI Packet types */
111 #define HCI_COMMAND_PKT		0x01
112 #define HCI_ACLDATA_PKT		0x02
113 #define HCI_SCODATA_PKT		0x03
114 #define HCI_EVENT_PKT		0x04
115 #define HCI_VENDOR_PKT		0xff
116 
117 /* HCI Packet types */
118 #define HCI_DM1		0x0008
119 #define HCI_DM3		0x0400
120 #define HCI_DM5		0x4000
121 #define HCI_DH1		0x0010
122 #define HCI_DH3		0x0800
123 #define HCI_DH5		0x8000
124 
125 #define HCI_HV1		0x0020
126 #define HCI_HV2		0x0040
127 #define HCI_HV3		0x0080
128 
129 #define SCO_PTYPE_MASK	(HCI_HV1 | HCI_HV2 | HCI_HV3)
130 #define ACL_PTYPE_MASK	(~SCO_PTYPE_MASK)
131 
132 /* ACL flags */
133 #define ACL_CONT		0x01
134 #define ACL_START		0x02
135 #define ACL_ACTIVE_BCAST	0x04
136 #define ACL_PICO_BCAST		0x08
137 
138 /* Baseband links */
139 #define SCO_LINK	0x00
140 #define ACL_LINK	0x01
141 
142 /* LMP features */
143 #define LMP_3SLOT	0x01
144 #define LMP_5SLOT	0x02
145 #define LMP_ENCRYPT	0x04
146 #define LMP_SOFFSET	0x08
147 #define LMP_TACCURACY	0x10
148 #define LMP_RSWITCH	0x20
149 #define LMP_HOLD	0x40
150 #define LMP_SNIFF	0x80
151 
152 #define LMP_PARK	0x01
153 #define LMP_RSSI	0x02
154 #define LMP_QUALITY	0x04
155 #define LMP_SCO		0x08
156 #define LMP_HV2		0x10
157 #define LMP_HV3		0x20
158 #define LMP_ULAW	0x40
159 #define LMP_ALAW	0x80
160 
161 #define LMP_CVSD	0x01
162 #define LMP_PSCHEME	0x02
163 #define LMP_PCONTROL	0x04
164 
165 #define LMP_SNIFF_SUBR	0x02
166 
167 /* Connection modes */
168 #define HCI_CM_ACTIVE	0x0000
169 #define HCI_CM_HOLD	0x0001
170 #define HCI_CM_SNIFF	0x0002
171 #define HCI_CM_PARK	0x0003
172 
173 /* Link policies */
174 #define HCI_LP_RSWITCH	0x0001
175 #define HCI_LP_HOLD	0x0002
176 #define HCI_LP_SNIFF	0x0004
177 #define HCI_LP_PARK	0x0008
178 
179 /* Link modes */
180 #define HCI_LM_ACCEPT	0x8000
181 #define HCI_LM_MASTER	0x0001
182 #define HCI_LM_AUTH	0x0002
183 #define HCI_LM_ENCRYPT	0x0004
184 #define HCI_LM_TRUSTED	0x0008
185 #define HCI_LM_RELIABLE	0x0010
186 #define HCI_LM_SECURE	0x0020
187 
188 /* -----  HCI Commands ---- */
189 /* OGF & OCF values */
190 
191 /* Informational Parameters */
192 #define OGF_INFO_PARAM	0x04
193 
194 #define OCF_READ_LOCAL_VERSION	0x0001
195 struct hci_rp_read_loc_version {
196 	__u8     status;
197 	__u8     hci_ver;
198 	__le16   hci_rev;
199 	__u8     lmp_ver;
200 	__le16   manufacturer;
201 	__le16   lmp_subver;
202 } __attribute__ ((packed));
203 
204 #define OCF_READ_LOCAL_FEATURES	0x0003
205 struct hci_rp_read_local_features {
206 	__u8 status;
207 	__u8 features[8];
208 } __attribute__ ((packed));
209 
210 #define OCF_READ_BUFFER_SIZE	0x0005
211 struct hci_rp_read_buffer_size {
212 	__u8     status;
213 	__le16   acl_mtu;
214 	__u8     sco_mtu;
215 	__le16   acl_max_pkt;
216 	__le16   sco_max_pkt;
217 } __attribute__ ((packed));
218 
219 #define OCF_READ_BD_ADDR	0x0009
220 struct hci_rp_read_bd_addr {
221 	__u8     status;
222 	bdaddr_t bdaddr;
223 } __attribute__ ((packed));
224 
225 /* Host Controller and Baseband */
226 #define OGF_HOST_CTL	0x03
227 #define OCF_RESET		0x0003
228 #define OCF_READ_AUTH_ENABLE	0x001F
229 #define OCF_WRITE_AUTH_ENABLE	0x0020
230 	#define AUTH_DISABLED		0x00
231 	#define AUTH_ENABLED		0x01
232 
233 #define OCF_READ_ENCRYPT_MODE	0x0021
234 #define OCF_WRITE_ENCRYPT_MODE	0x0022
235 	#define ENCRYPT_DISABLED	0x00
236 	#define ENCRYPT_P2P		0x01
237 	#define ENCRYPT_BOTH		0x02
238 
239 #define OCF_WRITE_CA_TIMEOUT  	0x0016
240 #define OCF_WRITE_PG_TIMEOUT  	0x0018
241 
242 #define OCF_WRITE_SCAN_ENABLE 	0x001A
243 	#define SCAN_DISABLED		0x00
244 	#define SCAN_INQUIRY		0x01
245 	#define SCAN_PAGE		0x02
246 
247 #define OCF_SET_EVENT_FLT	0x0005
248 struct hci_cp_set_event_flt {
249 	__u8     flt_type;
250 	__u8     cond_type;
251 	__u8     condition[0];
252 } __attribute__ ((packed));
253 
254 /* Filter types */
255 #define HCI_FLT_CLEAR_ALL	0x00
256 #define HCI_FLT_INQ_RESULT	0x01
257 #define HCI_FLT_CONN_SETUP	0x02
258 
259 /* CONN_SETUP Condition types */
260 #define HCI_CONN_SETUP_ALLOW_ALL	0x00
261 #define HCI_CONN_SETUP_ALLOW_CLASS	0x01
262 #define HCI_CONN_SETUP_ALLOW_BDADDR	0x02
263 
264 /* CONN_SETUP Conditions */
265 #define HCI_CONN_SETUP_AUTO_OFF	0x01
266 #define HCI_CONN_SETUP_AUTO_ON	0x02
267 
268 #define OCF_READ_CLASS_OF_DEV	0x0023
269 struct hci_rp_read_dev_class {
270 	__u8     status;
271 	__u8     dev_class[3];
272 } __attribute__ ((packed));
273 
274 #define OCF_WRITE_CLASS_OF_DEV	0x0024
275 struct hci_cp_write_dev_class {
276 	__u8     dev_class[3];
277 } __attribute__ ((packed));
278 
279 #define OCF_READ_VOICE_SETTING	0x0025
280 struct hci_rp_read_voice_setting {
281 	__u8     status;
282 	__le16   voice_setting;
283 } __attribute__ ((packed));
284 
285 #define OCF_WRITE_VOICE_SETTING	0x0026
286 struct hci_cp_write_voice_setting {
287 	__le16   voice_setting;
288 } __attribute__ ((packed));
289 
290 #define OCF_HOST_BUFFER_SIZE	0x0033
291 struct hci_cp_host_buffer_size {
292 	__le16   acl_mtu;
293 	__u8     sco_mtu;
294 	__le16   acl_max_pkt;
295 	__le16   sco_max_pkt;
296 } __attribute__ ((packed));
297 
298 /* Link Control */
299 #define OGF_LINK_CTL	0x01
300 
301 #define OCF_CREATE_CONN		0x0005
302 struct hci_cp_create_conn {
303 	bdaddr_t bdaddr;
304 	__le16   pkt_type;
305 	__u8     pscan_rep_mode;
306 	__u8     pscan_mode;
307 	__le16   clock_offset;
308 	__u8     role_switch;
309 } __attribute__ ((packed));
310 
311 #define OCF_CREATE_CONN_CANCEL	0x0008
312 struct hci_cp_create_conn_cancel {
313 	bdaddr_t bdaddr;
314 } __attribute__ ((packed));
315 
316 #define OCF_ACCEPT_CONN_REQ	0x0009
317 struct hci_cp_accept_conn_req {
318 	bdaddr_t bdaddr;
319 	__u8     role;
320 } __attribute__ ((packed));
321 
322 #define OCF_REJECT_CONN_REQ	0x000a
323 struct hci_cp_reject_conn_req {
324 	bdaddr_t bdaddr;
325 	__u8     reason;
326 } __attribute__ ((packed));
327 
328 #define OCF_DISCONNECT	0x0006
329 struct hci_cp_disconnect {
330 	__le16   handle;
331 	__u8     reason;
332 } __attribute__ ((packed));
333 
334 #define OCF_ADD_SCO	0x0007
335 struct hci_cp_add_sco {
336 	__le16   handle;
337 	__le16   pkt_type;
338 } __attribute__ ((packed));
339 
340 #define OCF_INQUIRY		0x0001
341 struct hci_cp_inquiry {
342 	__u8     lap[3];
343 	__u8     length;
344 	__u8     num_rsp;
345 } __attribute__ ((packed));
346 
347 #define OCF_INQUIRY_CANCEL	0x0002
348 
349 #define OCF_EXIT_PERIODIC_INQ	0x0004
350 
351 #define OCF_LINK_KEY_REPLY	0x000B
352 struct hci_cp_link_key_reply {
353 	bdaddr_t bdaddr;
354 	__u8     link_key[16];
355 } __attribute__ ((packed));
356 
357 #define OCF_LINK_KEY_NEG_REPLY	0x000C
358 struct hci_cp_link_key_neg_reply {
359 	bdaddr_t bdaddr;
360 } __attribute__ ((packed));
361 
362 #define OCF_PIN_CODE_REPLY	0x000D
363 struct hci_cp_pin_code_reply {
364 	bdaddr_t bdaddr;
365 	__u8     pin_len;
366 	__u8     pin_code[16];
367 } __attribute__ ((packed));
368 
369 #define OCF_PIN_CODE_NEG_REPLY	0x000E
370 struct hci_cp_pin_code_neg_reply {
371 	bdaddr_t bdaddr;
372 } __attribute__ ((packed));
373 
374 #define OCF_CHANGE_CONN_PTYPE	0x000F
375 struct hci_cp_change_conn_ptype {
376 	__le16   handle;
377 	__le16   pkt_type;
378 } __attribute__ ((packed));
379 
380 #define OCF_AUTH_REQUESTED	0x0011
381 struct hci_cp_auth_requested {
382 	__le16   handle;
383 } __attribute__ ((packed));
384 
385 #define OCF_SET_CONN_ENCRYPT	0x0013
386 struct hci_cp_set_conn_encrypt {
387 	__le16   handle;
388 	__u8     encrypt;
389 } __attribute__ ((packed));
390 
391 #define OCF_CHANGE_CONN_LINK_KEY 0x0015
392 struct hci_cp_change_conn_link_key {
393 	__le16   handle;
394 } __attribute__ ((packed));
395 
396 #define OCF_READ_REMOTE_FEATURES 0x001B
397 struct hci_cp_read_remote_features {
398 	__le16   handle;
399 } __attribute__ ((packed));
400 
401 #define OCF_READ_REMOTE_VERSION 0x001D
402 struct hci_cp_read_remote_version {
403 	__le16   handle;
404 } __attribute__ ((packed));
405 
406 /* Link Policy */
407 #define OGF_LINK_POLICY	0x02
408 
409 #define OCF_SNIFF_MODE		0x0003
410 struct hci_cp_sniff_mode {
411 	__le16   handle;
412 	__le16   max_interval;
413 	__le16   min_interval;
414 	__le16   attempt;
415 	__le16   timeout;
416 } __attribute__ ((packed));
417 
418 #define OCF_EXIT_SNIFF_MODE	0x0004
419 struct hci_cp_exit_sniff_mode {
420 	__le16   handle;
421 } __attribute__ ((packed));
422 
423 #define OCF_ROLE_DISCOVERY	0x0009
424 struct hci_cp_role_discovery {
425 	__le16   handle;
426 } __attribute__ ((packed));
427 struct hci_rp_role_discovery {
428 	__u8     status;
429 	__le16   handle;
430 	__u8     role;
431 } __attribute__ ((packed));
432 
433 #define OCF_READ_LINK_POLICY	0x000C
434 struct hci_cp_read_link_policy {
435 	__le16   handle;
436 } __attribute__ ((packed));
437 struct hci_rp_read_link_policy {
438 	__u8     status;
439 	__le16   handle;
440 	__le16   policy;
441 } __attribute__ ((packed));
442 
443 #define OCF_SWITCH_ROLE		0x000B
444 struct hci_cp_switch_role {
445 	bdaddr_t bdaddr;
446 	__u8     role;
447 } __attribute__ ((packed));
448 
449 #define OCF_WRITE_LINK_POLICY	0x000D
450 struct hci_cp_write_link_policy {
451 	__le16   handle;
452 	__le16   policy;
453 } __attribute__ ((packed));
454 struct hci_rp_write_link_policy {
455 	__u8     status;
456 	__le16   handle;
457 } __attribute__ ((packed));
458 
459 #define OCF_SNIFF_SUBRATE	0x0011
460 struct hci_cp_sniff_subrate {
461 	__le16   handle;
462 	__le16   max_latency;
463 	__le16   min_remote_timeout;
464 	__le16   min_local_timeout;
465 } __attribute__ ((packed));
466 
467 /* Status params */
468 #define OGF_STATUS_PARAM	0x05
469 
470 /* Testing commands */
471 #define OGF_TESTING_CMD		0x3E
472 
473 /* Vendor specific commands */
474 #define OGF_VENDOR_CMD		0x3F
475 
476 /* ---- HCI Events ---- */
477 #define HCI_EV_INQUIRY_COMPLETE	0x01
478 
479 #define HCI_EV_INQUIRY_RESULT	0x02
480 struct inquiry_info {
481 	bdaddr_t bdaddr;
482 	__u8     pscan_rep_mode;
483 	__u8     pscan_period_mode;
484 	__u8     pscan_mode;
485 	__u8     dev_class[3];
486 	__le16   clock_offset;
487 } __attribute__ ((packed));
488 
489 #define HCI_EV_INQUIRY_RESULT_WITH_RSSI	0x22
490 struct inquiry_info_with_rssi {
491 	bdaddr_t bdaddr;
492 	__u8     pscan_rep_mode;
493 	__u8     pscan_period_mode;
494 	__u8     dev_class[3];
495 	__le16   clock_offset;
496 	__s8     rssi;
497 } __attribute__ ((packed));
498 struct inquiry_info_with_rssi_and_pscan_mode {
499 	bdaddr_t bdaddr;
500 	__u8     pscan_rep_mode;
501 	__u8     pscan_period_mode;
502 	__u8     pscan_mode;
503 	__u8     dev_class[3];
504 	__le16   clock_offset;
505 	__s8     rssi;
506 } __attribute__ ((packed));
507 
508 #define HCI_EV_EXTENDED_INQUIRY_RESULT	0x2F
509 struct extended_inquiry_info {
510 	bdaddr_t bdaddr;
511 	__u8     pscan_rep_mode;
512 	__u8     pscan_period_mode;
513 	__u8     dev_class[3];
514 	__le16   clock_offset;
515 	__s8     rssi;
516 	__u8     data[240];
517 } __attribute__ ((packed));
518 
519 #define HCI_EV_CONN_COMPLETE 	0x03
520 struct hci_ev_conn_complete {
521 	__u8     status;
522 	__le16   handle;
523 	bdaddr_t bdaddr;
524 	__u8     link_type;
525 	__u8     encr_mode;
526 } __attribute__ ((packed));
527 
528 #define HCI_EV_CONN_REQUEST	0x04
529 struct hci_ev_conn_request {
530 	bdaddr_t bdaddr;
531 	__u8     dev_class[3];
532 	__u8     link_type;
533 } __attribute__ ((packed));
534 
535 #define HCI_EV_DISCONN_COMPLETE	0x05
536 struct hci_ev_disconn_complete {
537 	__u8     status;
538 	__le16   handle;
539 	__u8     reason;
540 } __attribute__ ((packed));
541 
542 #define HCI_EV_AUTH_COMPLETE	0x06
543 struct hci_ev_auth_complete {
544 	__u8     status;
545 	__le16   handle;
546 } __attribute__ ((packed));
547 
548 #define HCI_EV_ENCRYPT_CHANGE	0x08
549 struct hci_ev_encrypt_change {
550 	__u8     status;
551 	__le16   handle;
552 	__u8     encrypt;
553 } __attribute__ ((packed));
554 
555 #define HCI_EV_CHANGE_CONN_LINK_KEY_COMPLETE	0x09
556 struct hci_ev_change_conn_link_key_complete {
557 	__u8     status;
558 	__le16   handle;
559 } __attribute__ ((packed));
560 
561 #define HCI_EV_QOS_SETUP_COMPLETE	0x0D
562 struct hci_qos {
563 	__u8     service_type;
564 	__u32    token_rate;
565 	__u32    peak_bandwidth;
566 	__u32    latency;
567 	__u32    delay_variation;
568 } __attribute__ ((packed));
569 struct hci_ev_qos_setup_complete {
570 	__u8     status;
571 	__le16   handle;
572 	struct   hci_qos qos;
573 } __attribute__ ((packed));
574 
575 #define HCI_EV_CMD_COMPLETE 	0x0E
576 struct hci_ev_cmd_complete {
577 	__u8     ncmd;
578 	__le16   opcode;
579 } __attribute__ ((packed));
580 
581 #define HCI_EV_CMD_STATUS 	0x0F
582 struct hci_ev_cmd_status {
583 	__u8     status;
584 	__u8     ncmd;
585 	__le16   opcode;
586 } __attribute__ ((packed));
587 
588 #define HCI_EV_NUM_COMP_PKTS	0x13
589 struct hci_ev_num_comp_pkts {
590 	__u8     num_hndl;
591 	/* variable length part */
592 } __attribute__ ((packed));
593 
594 #define HCI_EV_ROLE_CHANGE	0x12
595 struct hci_ev_role_change {
596 	__u8     status;
597 	bdaddr_t bdaddr;
598 	__u8     role;
599 } __attribute__ ((packed));
600 
601 #define HCI_EV_MODE_CHANGE	0x14
602 struct hci_ev_mode_change {
603 	__u8     status;
604 	__le16   handle;
605 	__u8     mode;
606 	__le16   interval;
607 } __attribute__ ((packed));
608 
609 #define HCI_EV_PIN_CODE_REQ	0x16
610 struct hci_ev_pin_code_req {
611 	bdaddr_t bdaddr;
612 } __attribute__ ((packed));
613 
614 #define HCI_EV_LINK_KEY_REQ	0x17
615 struct hci_ev_link_key_req {
616 	bdaddr_t bdaddr;
617 } __attribute__ ((packed));
618 
619 #define HCI_EV_LINK_KEY_NOTIFY	0x18
620 struct hci_ev_link_key_notify {
621 	bdaddr_t bdaddr;
622 	__u8	 link_key[16];
623 	__u8	 key_type;
624 } __attribute__ ((packed));
625 
626 #define HCI_EV_REMOTE_FEATURES	0x0B
627 struct hci_ev_remote_features {
628 	__u8     status;
629 	__le16   handle;
630 	__u8     features[8];
631 } __attribute__ ((packed));
632 
633 #define HCI_EV_REMOTE_VERSION	0x0C
634 struct hci_ev_remote_version {
635 	__u8     status;
636 	__le16   handle;
637 	__u8     lmp_ver;
638 	__le16   manufacturer;
639 	__le16   lmp_subver;
640 } __attribute__ ((packed));
641 
642 #define HCI_EV_CLOCK_OFFSET	0x01C
643 struct hci_ev_clock_offset {
644 	__u8     status;
645 	__le16   handle;
646 	__le16   clock_offset;
647 } __attribute__ ((packed));
648 
649 #define HCI_EV_PSCAN_REP_MODE	0x20
650 struct hci_ev_pscan_rep_mode {
651 	bdaddr_t bdaddr;
652 	__u8     pscan_rep_mode;
653 } __attribute__ ((packed));
654 
655 #define HCI_EV_SNIFF_SUBRATE	0x2E
656 struct hci_ev_sniff_subrate {
657 	__u8     status;
658 	__le16   handle;
659 	__le16   max_tx_latency;
660 	__le16   max_rx_latency;
661 	__le16   max_remote_timeout;
662 	__le16   max_local_timeout;
663 } __attribute__ ((packed));
664 
665 /* Internal events generated by Bluetooth stack */
666 #define HCI_EV_STACK_INTERNAL	0xFD
667 struct hci_ev_stack_internal {
668 	__u16    type;
669 	__u8     data[0];
670 } __attribute__ ((packed));
671 
672 #define HCI_EV_SI_DEVICE  	0x01
673 struct hci_ev_si_device {
674 	__u16    event;
675 	__u16    dev_id;
676 } __attribute__ ((packed));
677 
678 #define HCI_EV_SI_SECURITY	0x02
679 struct hci_ev_si_security {
680 	__u16    event;
681 	__u16    proto;
682 	__u16    subproto;
683 	__u8     incoming;
684 } __attribute__ ((packed));
685 
686 /* ---- HCI Packet structures ---- */
687 #define HCI_COMMAND_HDR_SIZE 3
688 #define HCI_EVENT_HDR_SIZE   2
689 #define HCI_ACL_HDR_SIZE     4
690 #define HCI_SCO_HDR_SIZE     3
691 
692 struct hci_command_hdr {
693 	__le16 	opcode;		/* OCF & OGF */
694 	__u8 	plen;
695 } __attribute__ ((packed));
696 
697 struct hci_event_hdr {
698 	__u8 	evt;
699 	__u8 	plen;
700 } __attribute__ ((packed));
701 
702 struct hci_acl_hdr {
703 	__le16 	handle;		/* Handle & Flags(PB, BC) */
704 	__le16 	dlen;
705 } __attribute__ ((packed));
706 
707 struct hci_sco_hdr {
708 	__le16 	handle;
709 	__u8 	dlen;
710 } __attribute__ ((packed));
711 
712 /* Command opcode pack/unpack */
713 #define hci_opcode_pack(ogf, ocf)	(__u16) ((ocf & 0x03ff)|(ogf << 10))
714 #define hci_opcode_ogf(op)		(op >> 10)
715 #define hci_opcode_ocf(op)		(op & 0x03ff)
716 
717 /* ACL handle and flags pack/unpack */
718 #define hci_handle_pack(h, f)	(__u16) ((h & 0x0fff)|(f << 12))
719 #define hci_handle(h)		(h & 0x0fff)
720 #define hci_flags(h)		(h >> 12)
721 
722 /* ---- HCI Sockets ---- */
723 
724 /* Socket options */
725 #define HCI_DATA_DIR	1
726 #define HCI_FILTER	2
727 #define HCI_TIME_STAMP	3
728 
729 /* CMSG flags */
730 #define HCI_CMSG_DIR	0x0001
731 #define HCI_CMSG_TSTAMP	0x0002
732 
733 struct sockaddr_hci {
734 	sa_family_t    hci_family;
735 	unsigned short hci_dev;
736 };
737 #define HCI_DEV_NONE	0xffff
738 
739 struct hci_filter {
740 	unsigned long type_mask;
741 	unsigned long event_mask[2];
742 	__le16   opcode;
743 };
744 
745 struct hci_ufilter {
746 	__u32   type_mask;
747 	__u32   event_mask[2];
748 	__le16   opcode;
749 };
750 
751 #define HCI_FLT_TYPE_BITS	31
752 #define HCI_FLT_EVENT_BITS	63
753 #define HCI_FLT_OGF_BITS	63
754 #define HCI_FLT_OCF_BITS	127
755 
756 /* ---- HCI Ioctl requests structures ---- */
757 struct hci_dev_stats {
758 	__u32 err_rx;
759 	__u32 err_tx;
760 	__u32 cmd_tx;
761 	__u32 evt_rx;
762 	__u32 acl_tx;
763 	__u32 acl_rx;
764 	__u32 sco_tx;
765 	__u32 sco_rx;
766 	__u32 byte_rx;
767 	__u32 byte_tx;
768 };
769 
770 struct hci_dev_info {
771 	__u16 dev_id;
772 	char  name[8];
773 
774 	bdaddr_t bdaddr;
775 
776 	__u32 flags;
777 	__u8  type;
778 
779 	__u8  features[8];
780 
781 	__u32 pkt_type;
782 	__u32 link_policy;
783 	__u32 link_mode;
784 
785 	__u16 acl_mtu;
786 	__u16 acl_pkts;
787 	__u16 sco_mtu;
788 	__u16 sco_pkts;
789 
790 	struct hci_dev_stats stat;
791 };
792 
793 struct hci_conn_info {
794 	__u16    handle;
795 	bdaddr_t bdaddr;
796 	__u8	 type;
797 	__u8	 out;
798 	__u16	 state;
799 	__u32	 link_mode;
800 };
801 
802 struct hci_dev_req {
803 	__u16 dev_id;
804 	__u32 dev_opt;
805 };
806 
807 struct hci_dev_list_req {
808 	__u16  dev_num;
809 	struct hci_dev_req dev_req[0];	/* hci_dev_req structures */
810 };
811 
812 struct hci_conn_list_req {
813 	__u16  dev_id;
814 	__u16  conn_num;
815 	struct hci_conn_info conn_info[0];
816 };
817 
818 struct hci_conn_info_req {
819 	bdaddr_t bdaddr;
820 	__u8     type;
821 	struct   hci_conn_info conn_info[0];
822 };
823 
824 struct hci_inquiry_req {
825 	__u16 dev_id;
826 	__u16 flags;
827 	__u8  lap[3];
828 	__u8  length;
829 	__u8  num_rsp;
830 };
831 #define IREQ_CACHE_FLUSH 0x0001
832 
833 #endif /* __HCI_H */
834