xref: /openbmc/linux/include/net/bluetooth/hci.h (revision b0916ea0)
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 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 */
60 enum {
61 	HCI_QUIRK_NO_RESET,
62 	HCI_QUIRK_RAW_DEVICE,
63 	HCI_QUIRK_FIXUP_BUFFER_SIZE
64 };
65 
66 /* HCI device flags */
67 enum {
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 };
85 
86 /* HCI ioctl defines */
87 #define HCIDEVUP	_IOW('H', 201, int)
88 #define HCIDEVDOWN	_IOW('H', 202, int)
89 #define HCIDEVRESET	_IOW('H', 203, int)
90 #define HCIDEVRESTAT	_IOW('H', 204, int)
91 
92 #define HCIGETDEVLIST	_IOR('H', 210, int)
93 #define HCIGETDEVINFO	_IOR('H', 211, int)
94 #define HCIGETCONNLIST	_IOR('H', 212, int)
95 #define HCIGETCONNINFO	_IOR('H', 213, int)
96 #define HCIGETAUTHINFO	_IOR('H', 215, int)
97 
98 #define HCISETRAW	_IOW('H', 220, int)
99 #define HCISETSCAN	_IOW('H', 221, int)
100 #define HCISETAUTH	_IOW('H', 222, int)
101 #define HCISETENCRYPT	_IOW('H', 223, int)
102 #define HCISETPTYPE	_IOW('H', 224, int)
103 #define HCISETLINKPOL	_IOW('H', 225, int)
104 #define HCISETLINKMODE	_IOW('H', 226, int)
105 #define HCISETACLMTU	_IOW('H', 227, int)
106 #define HCISETSCOMTU	_IOW('H', 228, int)
107 
108 #define HCIBLOCKADDR	_IOW('H', 230, int)
109 #define HCIUNBLOCKADDR	_IOW('H', 231, int)
110 
111 #define HCIINQUIRY	_IOR('H', 240, int)
112 
113 /* HCI timeouts */
114 #define HCI_CONNECT_TIMEOUT	(40000)	/* 40 seconds */
115 #define HCI_DISCONN_TIMEOUT	(2000)	/* 2 seconds */
116 #define HCI_PAIRING_TIMEOUT	(60000)	/* 60 seconds */
117 #define HCI_IDLE_TIMEOUT	(6000)	/* 6 seconds */
118 #define HCI_INIT_TIMEOUT	(10000)	/* 10 seconds */
119 
120 /* HCI data types */
121 #define HCI_COMMAND_PKT		0x01
122 #define HCI_ACLDATA_PKT		0x02
123 #define HCI_SCODATA_PKT		0x03
124 #define HCI_EVENT_PKT		0x04
125 #define HCI_VENDOR_PKT		0xff
126 
127 /* HCI packet types */
128 #define HCI_DM1		0x0008
129 #define HCI_DM3		0x0400
130 #define HCI_DM5		0x4000
131 #define HCI_DH1		0x0010
132 #define HCI_DH3		0x0800
133 #define HCI_DH5		0x8000
134 
135 #define HCI_HV1		0x0020
136 #define HCI_HV2		0x0040
137 #define HCI_HV3		0x0080
138 
139 #define SCO_PTYPE_MASK	(HCI_HV1 | HCI_HV2 | HCI_HV3)
140 #define ACL_PTYPE_MASK	(~SCO_PTYPE_MASK)
141 
142 /* eSCO packet types */
143 #define ESCO_HV1	0x0001
144 #define ESCO_HV2	0x0002
145 #define ESCO_HV3	0x0004
146 #define ESCO_EV3	0x0008
147 #define ESCO_EV4	0x0010
148 #define ESCO_EV5	0x0020
149 #define ESCO_2EV3	0x0040
150 #define ESCO_3EV3	0x0080
151 #define ESCO_2EV5	0x0100
152 #define ESCO_3EV5	0x0200
153 
154 #define SCO_ESCO_MASK  (ESCO_HV1 | ESCO_HV2 | ESCO_HV3)
155 #define EDR_ESCO_MASK  (ESCO_2EV3 | ESCO_3EV3 | ESCO_2EV5 | ESCO_3EV5)
156 
157 /* ACL flags */
158 #define ACL_START_NO_FLUSH	0x00
159 #define ACL_CONT		0x01
160 #define ACL_START		0x02
161 #define ACL_ACTIVE_BCAST	0x04
162 #define ACL_PICO_BCAST		0x08
163 
164 /* Baseband links */
165 #define SCO_LINK	0x00
166 #define ACL_LINK	0x01
167 #define ESCO_LINK	0x02
168 
169 /* LMP features */
170 #define LMP_3SLOT	0x01
171 #define LMP_5SLOT	0x02
172 #define LMP_ENCRYPT	0x04
173 #define LMP_SOFFSET	0x08
174 #define LMP_TACCURACY	0x10
175 #define LMP_RSWITCH	0x20
176 #define LMP_HOLD	0x40
177 #define LMP_SNIFF	0x80
178 
179 #define LMP_PARK	0x01
180 #define LMP_RSSI	0x02
181 #define LMP_QUALITY	0x04
182 #define LMP_SCO		0x08
183 #define LMP_HV2		0x10
184 #define LMP_HV3		0x20
185 #define LMP_ULAW	0x40
186 #define LMP_ALAW	0x80
187 
188 #define LMP_CVSD	0x01
189 #define LMP_PSCHEME	0x02
190 #define LMP_PCONTROL	0x04
191 
192 #define LMP_ESCO	0x80
193 
194 #define LMP_EV4		0x01
195 #define LMP_EV5		0x02
196 
197 #define LMP_SNIFF_SUBR	0x02
198 #define LMP_EDR_ESCO_2M	0x20
199 #define LMP_EDR_ESCO_3M	0x40
200 #define LMP_EDR_3S_ESCO	0x80
201 
202 #define LMP_SIMPLE_PAIR	0x08
203 #define LMP_NO_FLUSH	0x40
204 
205 /* Connection modes */
206 #define HCI_CM_ACTIVE	0x0000
207 #define HCI_CM_HOLD	0x0001
208 #define HCI_CM_SNIFF	0x0002
209 #define HCI_CM_PARK	0x0003
210 
211 /* Link policies */
212 #define HCI_LP_RSWITCH	0x0001
213 #define HCI_LP_HOLD	0x0002
214 #define HCI_LP_SNIFF	0x0004
215 #define HCI_LP_PARK	0x0008
216 
217 /* Link modes */
218 #define HCI_LM_ACCEPT	0x8000
219 #define HCI_LM_MASTER	0x0001
220 #define HCI_LM_AUTH	0x0002
221 #define HCI_LM_ENCRYPT	0x0004
222 #define HCI_LM_TRUSTED	0x0008
223 #define HCI_LM_RELIABLE	0x0010
224 #define HCI_LM_SECURE	0x0020
225 
226 /* Authentication types */
227 #define HCI_AT_NO_BONDING		0x00
228 #define HCI_AT_NO_BONDING_MITM		0x01
229 #define HCI_AT_DEDICATED_BONDING	0x02
230 #define HCI_AT_DEDICATED_BONDING_MITM	0x03
231 #define HCI_AT_GENERAL_BONDING		0x04
232 #define HCI_AT_GENERAL_BONDING_MITM	0x05
233 
234 /* -----  HCI Commands ---- */
235 #define HCI_OP_INQUIRY			0x0401
236 struct hci_cp_inquiry {
237 	__u8     lap[3];
238 	__u8     length;
239 	__u8     num_rsp;
240 } __packed;
241 
242 #define HCI_OP_INQUIRY_CANCEL		0x0402
243 
244 #define HCI_OP_EXIT_PERIODIC_INQ	0x0404
245 
246 #define HCI_OP_CREATE_CONN		0x0405
247 struct hci_cp_create_conn {
248 	bdaddr_t bdaddr;
249 	__le16   pkt_type;
250 	__u8     pscan_rep_mode;
251 	__u8     pscan_mode;
252 	__le16   clock_offset;
253 	__u8     role_switch;
254 } __packed;
255 
256 #define HCI_OP_DISCONNECT		0x0406
257 struct hci_cp_disconnect {
258 	__le16   handle;
259 	__u8     reason;
260 } __packed;
261 
262 #define HCI_OP_ADD_SCO			0x0407
263 struct hci_cp_add_sco {
264 	__le16   handle;
265 	__le16   pkt_type;
266 } __packed;
267 
268 #define HCI_OP_CREATE_CONN_CANCEL	0x0408
269 struct hci_cp_create_conn_cancel {
270 	bdaddr_t bdaddr;
271 } __packed;
272 
273 #define HCI_OP_ACCEPT_CONN_REQ		0x0409
274 struct hci_cp_accept_conn_req {
275 	bdaddr_t bdaddr;
276 	__u8     role;
277 } __packed;
278 
279 #define HCI_OP_REJECT_CONN_REQ		0x040a
280 struct hci_cp_reject_conn_req {
281 	bdaddr_t bdaddr;
282 	__u8     reason;
283 } __packed;
284 
285 #define HCI_OP_LINK_KEY_REPLY		0x040b
286 struct hci_cp_link_key_reply {
287 	bdaddr_t bdaddr;
288 	__u8     link_key[16];
289 } __packed;
290 
291 #define HCI_OP_LINK_KEY_NEG_REPLY	0x040c
292 struct hci_cp_link_key_neg_reply {
293 	bdaddr_t bdaddr;
294 } __packed;
295 
296 #define HCI_OP_PIN_CODE_REPLY		0x040d
297 struct hci_cp_pin_code_reply {
298 	bdaddr_t bdaddr;
299 	__u8     pin_len;
300 	__u8     pin_code[16];
301 } __packed;
302 
303 #define HCI_OP_PIN_CODE_NEG_REPLY	0x040e
304 struct hci_cp_pin_code_neg_reply {
305 	bdaddr_t bdaddr;
306 } __packed;
307 
308 #define HCI_OP_CHANGE_CONN_PTYPE	0x040f
309 struct hci_cp_change_conn_ptype {
310 	__le16   handle;
311 	__le16   pkt_type;
312 } __packed;
313 
314 #define HCI_OP_AUTH_REQUESTED		0x0411
315 struct hci_cp_auth_requested {
316 	__le16   handle;
317 } __packed;
318 
319 #define HCI_OP_SET_CONN_ENCRYPT		0x0413
320 struct hci_cp_set_conn_encrypt {
321 	__le16   handle;
322 	__u8     encrypt;
323 } __packed;
324 
325 #define HCI_OP_CHANGE_CONN_LINK_KEY	0x0415
326 struct hci_cp_change_conn_link_key {
327 	__le16   handle;
328 } __packed;
329 
330 #define HCI_OP_REMOTE_NAME_REQ		0x0419
331 struct hci_cp_remote_name_req {
332 	bdaddr_t bdaddr;
333 	__u8     pscan_rep_mode;
334 	__u8     pscan_mode;
335 	__le16   clock_offset;
336 } __packed;
337 
338 #define HCI_OP_REMOTE_NAME_REQ_CANCEL	0x041a
339 struct hci_cp_remote_name_req_cancel {
340 	bdaddr_t bdaddr;
341 } __packed;
342 
343 #define HCI_OP_READ_REMOTE_FEATURES	0x041b
344 struct hci_cp_read_remote_features {
345 	__le16   handle;
346 } __packed;
347 
348 #define HCI_OP_READ_REMOTE_EXT_FEATURES	0x041c
349 struct hci_cp_read_remote_ext_features {
350 	__le16   handle;
351 	__u8     page;
352 } __packed;
353 
354 #define HCI_OP_READ_REMOTE_VERSION	0x041d
355 struct hci_cp_read_remote_version {
356 	__le16   handle;
357 } __packed;
358 
359 #define HCI_OP_SETUP_SYNC_CONN		0x0428
360 struct hci_cp_setup_sync_conn {
361 	__le16   handle;
362 	__le32   tx_bandwidth;
363 	__le32   rx_bandwidth;
364 	__le16   max_latency;
365 	__le16   voice_setting;
366 	__u8     retrans_effort;
367 	__le16   pkt_type;
368 } __packed;
369 
370 #define HCI_OP_ACCEPT_SYNC_CONN_REQ	0x0429
371 struct hci_cp_accept_sync_conn_req {
372 	bdaddr_t bdaddr;
373 	__le32   tx_bandwidth;
374 	__le32   rx_bandwidth;
375 	__le16   max_latency;
376 	__le16   content_format;
377 	__u8     retrans_effort;
378 	__le16   pkt_type;
379 } __packed;
380 
381 #define HCI_OP_REJECT_SYNC_CONN_REQ	0x042a
382 struct hci_cp_reject_sync_conn_req {
383 	bdaddr_t bdaddr;
384 	__u8     reason;
385 } __packed;
386 
387 #define HCI_OP_IO_CAPABILITY_NEG_REPLY	0x0434
388 struct hci_cp_io_capability_neg_reply {
389 	bdaddr_t bdaddr;
390 	__u8     reason;
391 } __packed;
392 
393 #define HCI_OP_SNIFF_MODE		0x0803
394 struct hci_cp_sniff_mode {
395 	__le16   handle;
396 	__le16   max_interval;
397 	__le16   min_interval;
398 	__le16   attempt;
399 	__le16   timeout;
400 } __packed;
401 
402 #define HCI_OP_EXIT_SNIFF_MODE		0x0804
403 struct hci_cp_exit_sniff_mode {
404 	__le16   handle;
405 } __packed;
406 
407 #define HCI_OP_ROLE_DISCOVERY		0x0809
408 struct hci_cp_role_discovery {
409 	__le16   handle;
410 } __packed;
411 struct hci_rp_role_discovery {
412 	__u8     status;
413 	__le16   handle;
414 	__u8     role;
415 } __packed;
416 
417 #define HCI_OP_SWITCH_ROLE		0x080b
418 struct hci_cp_switch_role {
419 	bdaddr_t bdaddr;
420 	__u8     role;
421 } __packed;
422 
423 #define HCI_OP_READ_LINK_POLICY		0x080c
424 struct hci_cp_read_link_policy {
425 	__le16   handle;
426 } __packed;
427 struct hci_rp_read_link_policy {
428 	__u8     status;
429 	__le16   handle;
430 	__le16   policy;
431 } __packed;
432 
433 #define HCI_OP_WRITE_LINK_POLICY	0x080d
434 struct hci_cp_write_link_policy {
435 	__le16   handle;
436 	__le16   policy;
437 } __packed;
438 struct hci_rp_write_link_policy {
439 	__u8     status;
440 	__le16   handle;
441 } __packed;
442 
443 #define HCI_OP_READ_DEF_LINK_POLICY	0x080e
444 struct hci_rp_read_def_link_policy {
445 	__u8     status;
446 	__le16   policy;
447 } __packed;
448 
449 #define HCI_OP_WRITE_DEF_LINK_POLICY	0x080f
450 struct hci_cp_write_def_link_policy {
451 	__le16   policy;
452 } __packed;
453 
454 #define HCI_OP_SNIFF_SUBRATE		0x0811
455 struct hci_cp_sniff_subrate {
456 	__le16   handle;
457 	__le16   max_latency;
458 	__le16   min_remote_timeout;
459 	__le16   min_local_timeout;
460 } __packed;
461 
462 #define HCI_OP_SET_EVENT_MASK		0x0c01
463 struct hci_cp_set_event_mask {
464 	__u8     mask[8];
465 } __packed;
466 
467 #define HCI_OP_RESET			0x0c03
468 
469 #define HCI_OP_SET_EVENT_FLT		0x0c05
470 struct hci_cp_set_event_flt {
471 	__u8     flt_type;
472 	__u8     cond_type;
473 	__u8     condition[0];
474 } __packed;
475 
476 /* Filter types */
477 #define HCI_FLT_CLEAR_ALL	0x00
478 #define HCI_FLT_INQ_RESULT	0x01
479 #define HCI_FLT_CONN_SETUP	0x02
480 
481 /* CONN_SETUP Condition types */
482 #define HCI_CONN_SETUP_ALLOW_ALL	0x00
483 #define HCI_CONN_SETUP_ALLOW_CLASS	0x01
484 #define HCI_CONN_SETUP_ALLOW_BDADDR	0x02
485 
486 /* CONN_SETUP Conditions */
487 #define HCI_CONN_SETUP_AUTO_OFF	0x01
488 #define HCI_CONN_SETUP_AUTO_ON	0x02
489 
490 #define HCI_OP_DELETE_STORED_LINK_KEY	0x0c12
491 struct hci_cp_delete_stored_link_key {
492 	bdaddr_t bdaddr;
493 	__u8     delete_all;
494 } __packed;
495 
496 #define HCI_OP_WRITE_LOCAL_NAME		0x0c13
497 struct hci_cp_write_local_name {
498 	__u8     name[248];
499 } __packed;
500 
501 #define HCI_OP_READ_LOCAL_NAME		0x0c14
502 struct hci_rp_read_local_name {
503 	__u8     status;
504 	__u8     name[248];
505 } __packed;
506 
507 #define HCI_OP_WRITE_CA_TIMEOUT		0x0c16
508 
509 #define HCI_OP_WRITE_PG_TIMEOUT		0x0c18
510 
511 #define HCI_OP_WRITE_SCAN_ENABLE	0x0c1a
512 	#define SCAN_DISABLED		0x00
513 	#define SCAN_INQUIRY		0x01
514 	#define SCAN_PAGE		0x02
515 
516 #define HCI_OP_READ_AUTH_ENABLE		0x0c1f
517 
518 #define HCI_OP_WRITE_AUTH_ENABLE	0x0c20
519 	#define AUTH_DISABLED		0x00
520 	#define AUTH_ENABLED		0x01
521 
522 #define HCI_OP_READ_ENCRYPT_MODE	0x0c21
523 
524 #define HCI_OP_WRITE_ENCRYPT_MODE	0x0c22
525 	#define ENCRYPT_DISABLED	0x00
526 	#define ENCRYPT_P2P		0x01
527 	#define ENCRYPT_BOTH		0x02
528 
529 #define HCI_OP_READ_CLASS_OF_DEV	0x0c23
530 struct hci_rp_read_class_of_dev {
531 	__u8     status;
532 	__u8     dev_class[3];
533 } __packed;
534 
535 #define HCI_OP_WRITE_CLASS_OF_DEV	0x0c24
536 struct hci_cp_write_class_of_dev {
537 	__u8     dev_class[3];
538 } __packed;
539 
540 #define HCI_OP_READ_VOICE_SETTING	0x0c25
541 struct hci_rp_read_voice_setting {
542 	__u8     status;
543 	__le16   voice_setting;
544 } __packed;
545 
546 #define HCI_OP_WRITE_VOICE_SETTING	0x0c26
547 struct hci_cp_write_voice_setting {
548 	__le16   voice_setting;
549 } __packed;
550 
551 #define HCI_OP_HOST_BUFFER_SIZE		0x0c33
552 struct hci_cp_host_buffer_size {
553 	__le16   acl_mtu;
554 	__u8     sco_mtu;
555 	__le16   acl_max_pkt;
556 	__le16   sco_max_pkt;
557 } __packed;
558 
559 #define HCI_OP_READ_SSP_MODE		0x0c55
560 struct hci_rp_read_ssp_mode {
561 	__u8     status;
562 	__u8     mode;
563 } __packed;
564 
565 #define HCI_OP_WRITE_SSP_MODE		0x0c56
566 struct hci_cp_write_ssp_mode {
567 	__u8     mode;
568 } __packed;
569 
570 #define HCI_OP_READ_LOCAL_VERSION	0x1001
571 struct hci_rp_read_local_version {
572 	__u8     status;
573 	__u8     hci_ver;
574 	__le16   hci_rev;
575 	__u8     lmp_ver;
576 	__le16   manufacturer;
577 	__le16   lmp_subver;
578 } __packed;
579 
580 #define HCI_OP_READ_LOCAL_COMMANDS	0x1002
581 struct hci_rp_read_local_commands {
582 	__u8     status;
583 	__u8     commands[64];
584 } __packed;
585 
586 #define HCI_OP_READ_LOCAL_FEATURES	0x1003
587 struct hci_rp_read_local_features {
588 	__u8     status;
589 	__u8     features[8];
590 } __packed;
591 
592 #define HCI_OP_READ_LOCAL_EXT_FEATURES	0x1004
593 struct hci_rp_read_local_ext_features {
594 	__u8     status;
595 	__u8     page;
596 	__u8     max_page;
597 	__u8     features[8];
598 } __packed;
599 
600 #define HCI_OP_READ_BUFFER_SIZE		0x1005
601 struct hci_rp_read_buffer_size {
602 	__u8     status;
603 	__le16   acl_mtu;
604 	__u8     sco_mtu;
605 	__le16   acl_max_pkt;
606 	__le16   sco_max_pkt;
607 } __packed;
608 
609 #define HCI_OP_READ_BD_ADDR		0x1009
610 struct hci_rp_read_bd_addr {
611 	__u8     status;
612 	bdaddr_t bdaddr;
613 } __packed;
614 
615 /* ---- HCI Events ---- */
616 #define HCI_EV_INQUIRY_COMPLETE		0x01
617 
618 #define HCI_EV_INQUIRY_RESULT		0x02
619 struct inquiry_info {
620 	bdaddr_t bdaddr;
621 	__u8     pscan_rep_mode;
622 	__u8     pscan_period_mode;
623 	__u8     pscan_mode;
624 	__u8     dev_class[3];
625 	__le16   clock_offset;
626 } __packed;
627 
628 #define HCI_EV_CONN_COMPLETE		0x03
629 struct hci_ev_conn_complete {
630 	__u8     status;
631 	__le16   handle;
632 	bdaddr_t bdaddr;
633 	__u8     link_type;
634 	__u8     encr_mode;
635 } __packed;
636 
637 #define HCI_EV_CONN_REQUEST		0x04
638 struct hci_ev_conn_request {
639 	bdaddr_t bdaddr;
640 	__u8     dev_class[3];
641 	__u8     link_type;
642 } __packed;
643 
644 #define HCI_EV_DISCONN_COMPLETE		0x05
645 struct hci_ev_disconn_complete {
646 	__u8     status;
647 	__le16   handle;
648 	__u8     reason;
649 } __packed;
650 
651 #define HCI_EV_AUTH_COMPLETE		0x06
652 struct hci_ev_auth_complete {
653 	__u8     status;
654 	__le16   handle;
655 } __packed;
656 
657 #define HCI_EV_REMOTE_NAME		0x07
658 struct hci_ev_remote_name {
659 	__u8     status;
660 	bdaddr_t bdaddr;
661 	__u8     name[248];
662 } __packed;
663 
664 #define HCI_EV_ENCRYPT_CHANGE		0x08
665 struct hci_ev_encrypt_change {
666 	__u8     status;
667 	__le16   handle;
668 	__u8     encrypt;
669 } __packed;
670 
671 #define HCI_EV_CHANGE_LINK_KEY_COMPLETE	0x09
672 struct hci_ev_change_link_key_complete {
673 	__u8     status;
674 	__le16   handle;
675 } __packed;
676 
677 #define HCI_EV_REMOTE_FEATURES		0x0b
678 struct hci_ev_remote_features {
679 	__u8     status;
680 	__le16   handle;
681 	__u8     features[8];
682 } __packed;
683 
684 #define HCI_EV_REMOTE_VERSION		0x0c
685 struct hci_ev_remote_version {
686 	__u8     status;
687 	__le16   handle;
688 	__u8     lmp_ver;
689 	__le16   manufacturer;
690 	__le16   lmp_subver;
691 } __packed;
692 
693 #define HCI_EV_QOS_SETUP_COMPLETE	0x0d
694 struct hci_qos {
695 	__u8     service_type;
696 	__u32    token_rate;
697 	__u32    peak_bandwidth;
698 	__u32    latency;
699 	__u32    delay_variation;
700 } __packed;
701 struct hci_ev_qos_setup_complete {
702 	__u8     status;
703 	__le16   handle;
704 	struct   hci_qos qos;
705 } __packed;
706 
707 #define HCI_EV_CMD_COMPLETE		0x0e
708 struct hci_ev_cmd_complete {
709 	__u8     ncmd;
710 	__le16   opcode;
711 } __packed;
712 
713 #define HCI_EV_CMD_STATUS		0x0f
714 struct hci_ev_cmd_status {
715 	__u8     status;
716 	__u8     ncmd;
717 	__le16   opcode;
718 } __packed;
719 
720 #define HCI_EV_ROLE_CHANGE		0x12
721 struct hci_ev_role_change {
722 	__u8     status;
723 	bdaddr_t bdaddr;
724 	__u8     role;
725 } __packed;
726 
727 #define HCI_EV_NUM_COMP_PKTS		0x13
728 struct hci_ev_num_comp_pkts {
729 	__u8     num_hndl;
730 	/* variable length part */
731 } __packed;
732 
733 #define HCI_EV_MODE_CHANGE		0x14
734 struct hci_ev_mode_change {
735 	__u8     status;
736 	__le16   handle;
737 	__u8     mode;
738 	__le16   interval;
739 } __packed;
740 
741 #define HCI_EV_PIN_CODE_REQ		0x16
742 struct hci_ev_pin_code_req {
743 	bdaddr_t bdaddr;
744 } __packed;
745 
746 #define HCI_EV_LINK_KEY_REQ		0x17
747 struct hci_ev_link_key_req {
748 	bdaddr_t bdaddr;
749 } __packed;
750 
751 #define HCI_EV_LINK_KEY_NOTIFY		0x18
752 struct hci_ev_link_key_notify {
753 	bdaddr_t bdaddr;
754 	__u8     link_key[16];
755 	__u8     key_type;
756 } __packed;
757 
758 #define HCI_EV_CLOCK_OFFSET		0x1c
759 struct hci_ev_clock_offset {
760 	__u8     status;
761 	__le16   handle;
762 	__le16   clock_offset;
763 } __packed;
764 
765 #define HCI_EV_PKT_TYPE_CHANGE		0x1d
766 struct hci_ev_pkt_type_change {
767 	__u8     status;
768 	__le16   handle;
769 	__le16   pkt_type;
770 } __packed;
771 
772 #define HCI_EV_PSCAN_REP_MODE		0x20
773 struct hci_ev_pscan_rep_mode {
774 	bdaddr_t bdaddr;
775 	__u8     pscan_rep_mode;
776 } __packed;
777 
778 #define HCI_EV_INQUIRY_RESULT_WITH_RSSI	0x22
779 struct inquiry_info_with_rssi {
780 	bdaddr_t bdaddr;
781 	__u8     pscan_rep_mode;
782 	__u8     pscan_period_mode;
783 	__u8     dev_class[3];
784 	__le16   clock_offset;
785 	__s8     rssi;
786 } __packed;
787 struct inquiry_info_with_rssi_and_pscan_mode {
788 	bdaddr_t bdaddr;
789 	__u8     pscan_rep_mode;
790 	__u8     pscan_period_mode;
791 	__u8     pscan_mode;
792 	__u8     dev_class[3];
793 	__le16   clock_offset;
794 	__s8     rssi;
795 } __packed;
796 
797 #define HCI_EV_REMOTE_EXT_FEATURES	0x23
798 struct hci_ev_remote_ext_features {
799 	__u8     status;
800 	__le16   handle;
801 	__u8     page;
802 	__u8     max_page;
803 	__u8     features[8];
804 } __packed;
805 
806 #define HCI_EV_SYNC_CONN_COMPLETE	0x2c
807 struct hci_ev_sync_conn_complete {
808 	__u8     status;
809 	__le16   handle;
810 	bdaddr_t bdaddr;
811 	__u8     link_type;
812 	__u8     tx_interval;
813 	__u8     retrans_window;
814 	__le16   rx_pkt_len;
815 	__le16   tx_pkt_len;
816 	__u8     air_mode;
817 } __packed;
818 
819 #define HCI_EV_SYNC_CONN_CHANGED	0x2d
820 struct hci_ev_sync_conn_changed {
821 	__u8     status;
822 	__le16   handle;
823 	__u8     tx_interval;
824 	__u8     retrans_window;
825 	__le16   rx_pkt_len;
826 	__le16   tx_pkt_len;
827 } __packed;
828 
829 #define HCI_EV_SNIFF_SUBRATE		0x2e
830 struct hci_ev_sniff_subrate {
831 	__u8     status;
832 	__le16   handle;
833 	__le16   max_tx_latency;
834 	__le16   max_rx_latency;
835 	__le16   max_remote_timeout;
836 	__le16   max_local_timeout;
837 } __packed;
838 
839 #define HCI_EV_EXTENDED_INQUIRY_RESULT	0x2f
840 struct extended_inquiry_info {
841 	bdaddr_t bdaddr;
842 	__u8     pscan_rep_mode;
843 	__u8     pscan_period_mode;
844 	__u8     dev_class[3];
845 	__le16   clock_offset;
846 	__s8     rssi;
847 	__u8     data[240];
848 } __packed;
849 
850 #define HCI_EV_IO_CAPA_REQUEST		0x31
851 struct hci_ev_io_capa_request {
852 	bdaddr_t bdaddr;
853 } __packed;
854 
855 #define HCI_EV_IO_CAPA_REPLY		0x32
856 struct hci_ev_io_capa_reply {
857 	bdaddr_t bdaddr;
858 	__u8     capability;
859 	__u8     oob_data;
860 	__u8     authentication;
861 } __packed;
862 
863 #define HCI_EV_SIMPLE_PAIR_COMPLETE	0x36
864 struct hci_ev_simple_pair_complete {
865 	__u8     status;
866 	bdaddr_t bdaddr;
867 } __packed;
868 
869 #define HCI_EV_REMOTE_HOST_FEATURES	0x3d
870 struct hci_ev_remote_host_features {
871 	bdaddr_t bdaddr;
872 	__u8     features[8];
873 } __packed;
874 
875 /* Internal events generated by Bluetooth stack */
876 #define HCI_EV_STACK_INTERNAL	0xfd
877 struct hci_ev_stack_internal {
878 	__u16    type;
879 	__u8     data[0];
880 } __packed;
881 
882 #define HCI_EV_SI_DEVICE	0x01
883 struct hci_ev_si_device {
884 	__u16    event;
885 	__u16    dev_id;
886 } __packed;
887 
888 #define HCI_EV_SI_SECURITY	0x02
889 struct hci_ev_si_security {
890 	__u16    event;
891 	__u16    proto;
892 	__u16    subproto;
893 	__u8     incoming;
894 } __packed;
895 
896 /* ---- HCI Packet structures ---- */
897 #define HCI_COMMAND_HDR_SIZE 3
898 #define HCI_EVENT_HDR_SIZE   2
899 #define HCI_ACL_HDR_SIZE     4
900 #define HCI_SCO_HDR_SIZE     3
901 
902 struct hci_command_hdr {
903 	__le16	opcode;		/* OCF & OGF */
904 	__u8	plen;
905 } __packed;
906 
907 struct hci_event_hdr {
908 	__u8	evt;
909 	__u8	plen;
910 } __packed;
911 
912 struct hci_acl_hdr {
913 	__le16	handle;		/* Handle & Flags(PB, BC) */
914 	__le16	dlen;
915 } __packed;
916 
917 struct hci_sco_hdr {
918 	__le16	handle;
919 	__u8	dlen;
920 } __packed;
921 
922 #ifdef __KERNEL__
923 #include <linux/skbuff.h>
924 static inline struct hci_event_hdr *hci_event_hdr(const struct sk_buff *skb)
925 {
926 	return (struct hci_event_hdr *) skb->data;
927 }
928 
929 static inline struct hci_acl_hdr *hci_acl_hdr(const struct sk_buff *skb)
930 {
931 	return (struct hci_acl_hdr *) skb->data;
932 }
933 
934 static inline struct hci_sco_hdr *hci_sco_hdr(const struct sk_buff *skb)
935 {
936 	return (struct hci_sco_hdr *) skb->data;
937 }
938 #endif
939 
940 /* Command opcode pack/unpack */
941 #define hci_opcode_pack(ogf, ocf)	(__u16) ((ocf & 0x03ff)|(ogf << 10))
942 #define hci_opcode_ogf(op)		(op >> 10)
943 #define hci_opcode_ocf(op)		(op & 0x03ff)
944 
945 /* ACL handle and flags pack/unpack */
946 #define hci_handle_pack(h, f)	(__u16) ((h & 0x0fff)|(f << 12))
947 #define hci_handle(h)		(h & 0x0fff)
948 #define hci_flags(h)		(h >> 12)
949 
950 /* ---- HCI Sockets ---- */
951 
952 /* Socket options */
953 #define HCI_DATA_DIR	1
954 #define HCI_FILTER	2
955 #define HCI_TIME_STAMP	3
956 
957 /* CMSG flags */
958 #define HCI_CMSG_DIR	0x0001
959 #define HCI_CMSG_TSTAMP	0x0002
960 
961 struct sockaddr_hci {
962 	sa_family_t    hci_family;
963 	unsigned short hci_dev;
964 	unsigned short hci_channel;
965 };
966 #define HCI_DEV_NONE	0xffff
967 
968 #define HCI_CHANNEL_RAW		0
969 #define HCI_CHANNEL_CONTROL	1
970 
971 struct hci_filter {
972 	unsigned long type_mask;
973 	unsigned long event_mask[2];
974 	__le16 opcode;
975 };
976 
977 struct hci_ufilter {
978 	__u32  type_mask;
979 	__u32  event_mask[2];
980 	__le16 opcode;
981 };
982 
983 #define HCI_FLT_TYPE_BITS	31
984 #define HCI_FLT_EVENT_BITS	63
985 #define HCI_FLT_OGF_BITS	63
986 #define HCI_FLT_OCF_BITS	127
987 
988 /* ---- HCI Ioctl requests structures ---- */
989 struct hci_dev_stats {
990 	__u32 err_rx;
991 	__u32 err_tx;
992 	__u32 cmd_tx;
993 	__u32 evt_rx;
994 	__u32 acl_tx;
995 	__u32 acl_rx;
996 	__u32 sco_tx;
997 	__u32 sco_rx;
998 	__u32 byte_rx;
999 	__u32 byte_tx;
1000 };
1001 
1002 struct hci_dev_info {
1003 	__u16 dev_id;
1004 	char  name[8];
1005 
1006 	bdaddr_t bdaddr;
1007 
1008 	__u32 flags;
1009 	__u8  type;
1010 
1011 	__u8  features[8];
1012 
1013 	__u32 pkt_type;
1014 	__u32 link_policy;
1015 	__u32 link_mode;
1016 
1017 	__u16 acl_mtu;
1018 	__u16 acl_pkts;
1019 	__u16 sco_mtu;
1020 	__u16 sco_pkts;
1021 
1022 	struct hci_dev_stats stat;
1023 };
1024 
1025 struct hci_conn_info {
1026 	__u16    handle;
1027 	bdaddr_t bdaddr;
1028 	__u8     type;
1029 	__u8     out;
1030 	__u16    state;
1031 	__u32    link_mode;
1032 };
1033 
1034 struct hci_dev_req {
1035 	__u16  dev_id;
1036 	__u32  dev_opt;
1037 };
1038 
1039 struct hci_dev_list_req {
1040 	__u16  dev_num;
1041 	struct hci_dev_req dev_req[0];	/* hci_dev_req structures */
1042 };
1043 
1044 struct hci_conn_list_req {
1045 	__u16  dev_id;
1046 	__u16  conn_num;
1047 	struct hci_conn_info conn_info[0];
1048 };
1049 
1050 struct hci_conn_info_req {
1051 	bdaddr_t bdaddr;
1052 	__u8     type;
1053 	struct   hci_conn_info conn_info[0];
1054 };
1055 
1056 struct hci_auth_info_req {
1057 	bdaddr_t bdaddr;
1058 	__u8     type;
1059 };
1060 
1061 struct hci_inquiry_req {
1062 	__u16 dev_id;
1063 	__u16 flags;
1064 	__u8  lap[3];
1065 	__u8  length;
1066 	__u8  num_rsp;
1067 };
1068 #define IREQ_CACHE_FLUSH 0x0001
1069 
1070 #endif /* __HCI_H */
1071