• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 /*
2  *
3  *  BlueZ - Bluetooth protocol stack for Linux
4  *
5  *  Copyright (C) 2000-2001  Qualcomm Incorporated
6  *  Copyright (C) 2002-2003  Maxim Krasnyansky <maxk@qualcomm.com>
7  *  Copyright (C) 2002-2010  Marcel Holtmann <marcel@holtmann.org>
8  *
9  *
10  *  This program is free software; you can redistribute it and/or modify
11  *  it under the terms of the GNU General Public License as published by
12  *  the Free Software Foundation; either version 2 of the License, or
13  *  (at your option) any later version.
14  *
15  *  This program is distributed in the hope that it will be useful,
16  *  but WITHOUT ANY WARRANTY; without even the implied warranty of
17  *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
18  *  GNU General Public License for more details.
19  *
20  *  You should have received a copy of the GNU General Public License
21  *  along with this program; if not, write to the Free Software
22  *  Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
23  *
24  */
25 
26 #ifndef __HCI_H
27 #define __HCI_H
28 
29 #ifdef __cplusplus
30 extern "C" {
31 #endif
32 
33 #include <sys/socket.h>
34 
35 #define HCI_MAX_DEV	16
36 
37 #define HCI_MAX_ACL_SIZE	1024
38 #define HCI_MAX_SCO_SIZE	255
39 #define HCI_MAX_EVENT_SIZE	260
40 #define HCI_MAX_FRAME_SIZE	(HCI_MAX_ACL_SIZE + 4)
41 
42 /* HCI dev events */
43 #define HCI_DEV_REG	1
44 #define HCI_DEV_UNREG	2
45 #define HCI_DEV_UP	3
46 #define HCI_DEV_DOWN	4
47 #define HCI_DEV_SUSPEND	5
48 #define HCI_DEV_RESUME	6
49 
50 /* HCI bus types */
51 #define HCI_VIRTUAL	0
52 #define HCI_USB		1
53 #define HCI_PCCARD	2
54 #define HCI_UART	3
55 #define HCI_RS232	4
56 #define HCI_PCI		5
57 #define HCI_SDIO	6
58 
59 /* HCI controller types */
60 #define HCI_BREDR	0x00
61 #define HCI_80211	0x01
62 
63 /* HCI device flags */
64 enum {
65 	HCI_UP,
66 	HCI_INIT,
67 	HCI_RUNNING,
68 
69 	HCI_PSCAN,
70 	HCI_ISCAN,
71 	HCI_AUTH,
72 	HCI_ENCRYPT,
73 	HCI_INQUIRY,
74 
75 	HCI_RAW,
76 };
77 
78 /* HCI ioctl defines */
79 #define HCIDEVUP	_IOW('H', 201, int)
80 #define HCIDEVDOWN	_IOW('H', 202, int)
81 #define HCIDEVRESET	_IOW('H', 203, int)
82 #define HCIDEVRESTAT	_IOW('H', 204, int)
83 
84 #define HCIGETDEVLIST	_IOR('H', 210, int)
85 #define HCIGETDEVINFO	_IOR('H', 211, int)
86 #define HCIGETCONNLIST	_IOR('H', 212, int)
87 #define HCIGETCONNINFO	_IOR('H', 213, int)
88 #define HCIGETAUTHINFO	_IOR('H', 215, 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 HCIBLOCKADDR	_IOW('H', 230, int)
101 #define HCIUNBLOCKADDR	_IOW('H', 231, int)
102 
103 #define HCIINQUIRY	_IOR('H', 240, int)
104 
105 #ifndef __NO_HCI_DEFS
106 
107 /* HCI Packet types */
108 #define HCI_COMMAND_PKT		0x01
109 #define HCI_ACLDATA_PKT		0x02
110 #define HCI_SCODATA_PKT		0x03
111 #define HCI_EVENT_PKT		0x04
112 #define HCI_VENDOR_PKT		0xff
113 
114 /* HCI Packet types */
115 #define HCI_2DH1	0x0002
116 #define HCI_3DH1	0x0004
117 #define HCI_DM1		0x0008
118 #define HCI_DH1		0x0010
119 #define HCI_2DH3	0x0100
120 #define HCI_3DH3	0x0200
121 #define HCI_DM3		0x0400
122 #define HCI_DH3		0x0800
123 #define HCI_2DH5	0x1000
124 #define HCI_3DH5	0x2000
125 #define HCI_DM5		0x4000
126 #define HCI_DH5		0x8000
127 
128 #define HCI_HV1		0x0020
129 #define HCI_HV2		0x0040
130 #define HCI_HV3		0x0080
131 
132 #define HCI_EV3		0x0008
133 #define HCI_EV4		0x0010
134 #define HCI_EV5		0x0020
135 #define HCI_2EV3	0x0040
136 #define HCI_3EV3	0x0080
137 #define HCI_2EV5	0x0100
138 #define HCI_3EV5	0x0200
139 
140 #define SCO_PTYPE_MASK	(HCI_HV1 | HCI_HV2 | HCI_HV3)
141 #define ACL_PTYPE_MASK	(HCI_DM1 | HCI_DH1 | HCI_DM3 | HCI_DH3 | HCI_DM5 | HCI_DH5)
142 
143 /* eSCO packet types */
144 #define ESCO_HV1	0x0001
145 #define ESCO_HV2	0x0002
146 #define ESCO_HV3	0x0004
147 #define ESCO_EV3	0x0008
148 #define ESCO_EV4	0x0010
149 #define ESCO_EV5	0x0020
150 #define ESCO_2EV3	0x0040
151 #define ESCO_3EV3	0x0080
152 #define ESCO_2EV5	0x0100
153 #define ESCO_3EV5	0x0200
154 
155 #define SCO_ESCO_MASK	(ESCO_HV1 | ESCO_HV2 | ESCO_HV3)
156 #define EDR_ESCO_MASK	(ESCO_2EV3 | ESCO_3EV3 | ESCO_2EV5 | ESCO_3EV5)
157 #define ALL_ESCO_MASK	(SCO_ESCO_MASK | ESCO_EV3 | ESCO_EV4 | ESCO_EV5 | \
158 			EDR_ESCO_MASK)
159 
160 /* HCI Error codes */
161 #define HCI_UNKNOWN_COMMAND			0x01
162 #define HCI_NO_CONNECTION			0x02
163 #define HCI_HARDWARE_FAILURE			0x03
164 #define HCI_PAGE_TIMEOUT			0x04
165 #define HCI_AUTHENTICATION_FAILURE		0x05
166 #define HCI_PIN_OR_KEY_MISSING			0x06
167 #define HCI_MEMORY_FULL				0x07
168 #define HCI_CONNECTION_TIMEOUT			0x08
169 #define HCI_MAX_NUMBER_OF_CONNECTIONS		0x09
170 #define HCI_MAX_NUMBER_OF_SCO_CONNECTIONS	0x0a
171 #define HCI_ACL_CONNECTION_EXISTS		0x0b
172 #define HCI_COMMAND_DISALLOWED			0x0c
173 #define HCI_REJECTED_LIMITED_RESOURCES		0x0d
174 #define HCI_REJECTED_SECURITY			0x0e
175 #define HCI_REJECTED_PERSONAL			0x0f
176 #define HCI_HOST_TIMEOUT			0x10
177 #define HCI_UNSUPPORTED_FEATURE			0x11
178 #define HCI_INVALID_PARAMETERS			0x12
179 #define HCI_OE_USER_ENDED_CONNECTION		0x13
180 #define HCI_OE_LOW_RESOURCES			0x14
181 #define HCI_OE_POWER_OFF			0x15
182 #define HCI_CONNECTION_TERMINATED		0x16
183 #define HCI_REPEATED_ATTEMPTS			0x17
184 #define HCI_PAIRING_NOT_ALLOWED			0x18
185 #define HCI_UNKNOWN_LMP_PDU			0x19
186 #define HCI_UNSUPPORTED_REMOTE_FEATURE		0x1a
187 #define HCI_SCO_OFFSET_REJECTED			0x1b
188 #define HCI_SCO_INTERVAL_REJECTED		0x1c
189 #define HCI_AIR_MODE_REJECTED			0x1d
190 #define HCI_INVALID_LMP_PARAMETERS		0x1e
191 #define HCI_UNSPECIFIED_ERROR			0x1f
192 #define HCI_UNSUPPORTED_LMP_PARAMETER_VALUE	0x20
193 #define HCI_ROLE_CHANGE_NOT_ALLOWED		0x21
194 #define HCI_LMP_RESPONSE_TIMEOUT		0x22
195 #define HCI_LMP_ERROR_TRANSACTION_COLLISION	0x23
196 #define HCI_LMP_PDU_NOT_ALLOWED			0x24
197 #define HCI_ENCRYPTION_MODE_NOT_ACCEPTED	0x25
198 #define HCI_UNIT_LINK_KEY_USED			0x26
199 #define HCI_QOS_NOT_SUPPORTED			0x27
200 #define HCI_INSTANT_PASSED			0x28
201 #define HCI_PAIRING_NOT_SUPPORTED		0x29
202 #define HCI_TRANSACTION_COLLISION		0x2a
203 #define HCI_QOS_UNACCEPTABLE_PARAMETER		0x2c
204 #define HCI_QOS_REJECTED			0x2d
205 #define HCI_CLASSIFICATION_NOT_SUPPORTED	0x2e
206 #define HCI_INSUFFICIENT_SECURITY		0x2f
207 #define HCI_PARAMETER_OUT_OF_RANGE		0x30
208 #define HCI_ROLE_SWITCH_PENDING			0x32
209 #define HCI_SLOT_VIOLATION			0x34
210 #define HCI_ROLE_SWITCH_FAILED			0x35
211 #define HCI_EIR_TOO_LARGE			0x36
212 #define HCI_SIMPLE_PAIRING_NOT_SUPPORTED	0x37
213 #define HCI_HOST_BUSY_PAIRING			0x38
214 
215 /* ACL flags */
216 #define ACL_CONT		0x01
217 #define ACL_START		0x02
218 #define ACL_ACTIVE_BCAST	0x04
219 #define ACL_PICO_BCAST		0x08
220 
221 /* Baseband links */
222 #define SCO_LINK	0x00
223 #define ACL_LINK	0x01
224 #define ESCO_LINK	0x02
225 
226 /* LMP features */
227 #define LMP_3SLOT	0x01
228 #define LMP_5SLOT	0x02
229 #define LMP_ENCRYPT	0x04
230 #define LMP_SOFFSET	0x08
231 #define LMP_TACCURACY	0x10
232 #define LMP_RSWITCH	0x20
233 #define LMP_HOLD	0x40
234 #define LMP_SNIFF	0x80
235 
236 #define LMP_PARK	0x01
237 #define LMP_RSSI	0x02
238 #define LMP_QUALITY	0x04
239 #define LMP_SCO		0x08
240 #define LMP_HV2		0x10
241 #define LMP_HV3		0x20
242 #define LMP_ULAW	0x40
243 #define LMP_ALAW	0x80
244 
245 #define LMP_CVSD	0x01
246 #define LMP_PSCHEME	0x02
247 #define LMP_PCONTROL	0x04
248 #define LMP_TRSP_SCO	0x08
249 #define LMP_BCAST_ENC	0x80
250 
251 #define LMP_EDR_ACL_2M	0x02
252 #define LMP_EDR_ACL_3M	0x04
253 #define LMP_ENH_ISCAN	0x08
254 #define LMP_ILACE_ISCAN	0x10
255 #define LMP_ILACE_PSCAN	0x20
256 #define LMP_RSSI_INQ	0x40
257 #define LMP_ESCO	0x80
258 
259 #define LMP_EV4		0x01
260 #define LMP_EV5		0x02
261 #define LMP_AFH_CAP_SLV	0x08
262 #define LMP_AFH_CLS_SLV	0x10
263 #define LMP_NO_BREDR	0x20
264 #define LMP_LE		0x40
265 #define LMP_EDR_3SLOT	0x80
266 
267 #define LMP_EDR_5SLOT	0x01
268 #define LMP_SNIFF_SUBR	0x02
269 #define LMP_PAUSE_ENC	0x04
270 #define LMP_AFH_CAP_MST	0x08
271 #define LMP_AFH_CLS_MST	0x10
272 #define LMP_EDR_ESCO_2M	0x20
273 #define LMP_EDR_ESCO_3M	0x40
274 #define LMP_EDR_3S_ESCO	0x80
275 
276 #define LMP_EXT_INQ	0x01
277 #define LMP_LE_BREDR	0x02
278 #define LMP_SIMPLE_PAIR	0x08
279 #define LMP_ENCAPS_PDU	0x10
280 #define LMP_ERR_DAT_REP	0x20
281 #define LMP_NFLUSH_PKTS	0x40
282 
283 #define LMP_LSTO	0x01
284 #define LMP_INQ_TX_PWR	0x02
285 #define LMP_EPC		0x04
286 #define LMP_EXT_FEAT	0x80
287 
288 /* Link policies */
289 #define HCI_LP_RSWITCH	0x0001
290 #define HCI_LP_HOLD	0x0002
291 #define HCI_LP_SNIFF	0x0004
292 #define HCI_LP_PARK	0x0008
293 
294 /* Link mode */
295 #define HCI_LM_ACCEPT	0x8000
296 #define HCI_LM_MASTER	0x0001
297 #define HCI_LM_AUTH	0x0002
298 #define HCI_LM_ENCRYPT	0x0004
299 #define HCI_LM_TRUSTED	0x0008
300 #define HCI_LM_RELIABLE	0x0010
301 #define HCI_LM_SECURE	0x0020
302 
303 /* -----  HCI Commands ----- */
304 
305 /* Link Control */
306 #define OGF_LINK_CTL		0x01
307 
308 #define OCF_INQUIRY			0x0001
309 typedef struct {
310 	uint8_t		lap[3];
311 	uint8_t		length;		/* 1.28s units */
312 	uint8_t		num_rsp;
313 } __attribute__ ((packed)) inquiry_cp;
314 #define INQUIRY_CP_SIZE 5
315 
316 typedef struct {
317 	uint8_t		status;
318 	bdaddr_t	bdaddr;
319 } __attribute__ ((packed)) status_bdaddr_rp;
320 #define STATUS_BDADDR_RP_SIZE 7
321 
322 #define OCF_INQUIRY_CANCEL		0x0002
323 
324 #define OCF_PERIODIC_INQUIRY		0x0003
325 typedef struct {
326 	uint16_t	max_period;	/* 1.28s units */
327 	uint16_t	min_period;	/* 1.28s units */
328 	uint8_t		lap[3];
329 	uint8_t		length;		/* 1.28s units */
330 	uint8_t		num_rsp;
331 } __attribute__ ((packed)) periodic_inquiry_cp;
332 #define PERIODIC_INQUIRY_CP_SIZE 9
333 
334 #define OCF_EXIT_PERIODIC_INQUIRY	0x0004
335 
336 #define OCF_CREATE_CONN			0x0005
337 typedef struct {
338 	bdaddr_t	bdaddr;
339 	uint16_t	pkt_type;
340 	uint8_t		pscan_rep_mode;
341 	uint8_t		pscan_mode;
342 	uint16_t	clock_offset;
343 	uint8_t		role_switch;
344 } __attribute__ ((packed)) create_conn_cp;
345 #define CREATE_CONN_CP_SIZE 13
346 
347 #define OCF_DISCONNECT			0x0006
348 typedef struct {
349 	uint16_t	handle;
350 	uint8_t		reason;
351 } __attribute__ ((packed)) disconnect_cp;
352 #define DISCONNECT_CP_SIZE 3
353 
354 #define OCF_ADD_SCO			0x0007
355 typedef struct {
356 	uint16_t	handle;
357 	uint16_t	pkt_type;
358 } __attribute__ ((packed)) add_sco_cp;
359 #define ADD_SCO_CP_SIZE 4
360 
361 #define OCF_CREATE_CONN_CANCEL		0x0008
362 typedef struct {
363 	bdaddr_t	bdaddr;
364 } __attribute__ ((packed)) create_conn_cancel_cp;
365 #define CREATE_CONN_CANCEL_CP_SIZE 6
366 
367 #define OCF_ACCEPT_CONN_REQ		0x0009
368 typedef struct {
369 	bdaddr_t	bdaddr;
370 	uint8_t		role;
371 } __attribute__ ((packed)) accept_conn_req_cp;
372 #define ACCEPT_CONN_REQ_CP_SIZE	7
373 
374 #define OCF_REJECT_CONN_REQ		0x000A
375 typedef struct {
376 	bdaddr_t	bdaddr;
377 	uint8_t		reason;
378 } __attribute__ ((packed)) reject_conn_req_cp;
379 #define REJECT_CONN_REQ_CP_SIZE	7
380 
381 #define OCF_LINK_KEY_REPLY		0x000B
382 typedef struct {
383 	bdaddr_t	bdaddr;
384 	uint8_t		link_key[16];
385 } __attribute__ ((packed)) link_key_reply_cp;
386 #define LINK_KEY_REPLY_CP_SIZE 22
387 
388 #define OCF_LINK_KEY_NEG_REPLY		0x000C
389 
390 #define OCF_PIN_CODE_REPLY		0x000D
391 typedef struct {
392 	bdaddr_t	bdaddr;
393 	uint8_t		pin_len;
394 	uint8_t		pin_code[16];
395 } __attribute__ ((packed)) pin_code_reply_cp;
396 #define PIN_CODE_REPLY_CP_SIZE 23
397 
398 #define OCF_PIN_CODE_NEG_REPLY		0x000E
399 
400 #define OCF_SET_CONN_PTYPE		0x000F
401 typedef struct {
402 	uint16_t	 handle;
403 	uint16_t	 pkt_type;
404 } __attribute__ ((packed)) set_conn_ptype_cp;
405 #define SET_CONN_PTYPE_CP_SIZE 4
406 
407 #define OCF_AUTH_REQUESTED		0x0011
408 typedef struct {
409 	uint16_t	 handle;
410 } __attribute__ ((packed)) auth_requested_cp;
411 #define AUTH_REQUESTED_CP_SIZE 2
412 
413 #define OCF_SET_CONN_ENCRYPT		0x0013
414 typedef struct {
415 	uint16_t	handle;
416 	uint8_t		encrypt;
417 } __attribute__ ((packed)) set_conn_encrypt_cp;
418 #define SET_CONN_ENCRYPT_CP_SIZE 3
419 
420 #define OCF_CHANGE_CONN_LINK_KEY	0x0015
421 typedef struct {
422 	uint16_t	handle;
423 } __attribute__ ((packed)) change_conn_link_key_cp;
424 #define CHANGE_CONN_LINK_KEY_CP_SIZE 2
425 
426 #define OCF_MASTER_LINK_KEY		0x0017
427 typedef struct {
428 	uint8_t		key_flag;
429 } __attribute__ ((packed)) master_link_key_cp;
430 #define MASTER_LINK_KEY_CP_SIZE 1
431 
432 #define OCF_REMOTE_NAME_REQ		0x0019
433 typedef struct {
434 	bdaddr_t	bdaddr;
435 	uint8_t		pscan_rep_mode;
436 	uint8_t		pscan_mode;
437 	uint16_t	clock_offset;
438 } __attribute__ ((packed)) remote_name_req_cp;
439 #define REMOTE_NAME_REQ_CP_SIZE 10
440 
441 #define OCF_REMOTE_NAME_REQ_CANCEL	0x001A
442 typedef struct {
443 	bdaddr_t	bdaddr;
444 } __attribute__ ((packed)) remote_name_req_cancel_cp;
445 #define REMOTE_NAME_REQ_CANCEL_CP_SIZE 6
446 
447 #define OCF_READ_REMOTE_FEATURES	0x001B
448 typedef struct {
449 	uint16_t	handle;
450 } __attribute__ ((packed)) read_remote_features_cp;
451 #define READ_REMOTE_FEATURES_CP_SIZE 2
452 
453 #define OCF_READ_REMOTE_EXT_FEATURES	0x001C
454 typedef struct {
455 	uint16_t	handle;
456 	uint8_t		page_num;
457 } __attribute__ ((packed)) read_remote_ext_features_cp;
458 #define READ_REMOTE_EXT_FEATURES_CP_SIZE 3
459 
460 #define OCF_READ_REMOTE_VERSION		0x001D
461 typedef struct {
462 	uint16_t	handle;
463 } __attribute__ ((packed)) read_remote_version_cp;
464 #define READ_REMOTE_VERSION_CP_SIZE 2
465 
466 #define OCF_READ_CLOCK_OFFSET		0x001F
467 typedef struct {
468 	uint16_t	handle;
469 } __attribute__ ((packed)) read_clock_offset_cp;
470 #define READ_CLOCK_OFFSET_CP_SIZE 2
471 
472 #define OCF_READ_LMP_HANDLE		0x0020
473 
474 #define OCF_SETUP_SYNC_CONN		0x0028
475 typedef struct {
476 	uint16_t	handle;
477 	uint32_t	tx_bandwith;
478 	uint32_t	rx_bandwith;
479 	uint16_t	max_latency;
480 	uint16_t	voice_setting;
481 	uint8_t		retrans_effort;
482 	uint16_t	pkt_type;
483 } __attribute__ ((packed)) setup_sync_conn_cp;
484 #define SETUP_SYNC_CONN_CP_SIZE 17
485 
486 #define OCF_ACCEPT_SYNC_CONN_REQ	0x0029
487 typedef struct {
488 	bdaddr_t	bdaddr;
489 	uint32_t	tx_bandwith;
490 	uint32_t	rx_bandwith;
491 	uint16_t	max_latency;
492 	uint16_t	voice_setting;
493 	uint8_t		retrans_effort;
494 	uint16_t	pkt_type;
495 } __attribute__ ((packed)) accept_sync_conn_req_cp;
496 #define ACCEPT_SYNC_CONN_REQ_CP_SIZE 21
497 
498 #define OCF_REJECT_SYNC_CONN_REQ	0x002A
499 typedef struct {
500 	bdaddr_t	bdaddr;
501 	uint8_t		reason;
502 } __attribute__ ((packed)) reject_sync_conn_req_cp;
503 #define REJECT_SYNC_CONN_REQ_CP_SIZE 7
504 
505 #define OCF_IO_CAPABILITY_REPLY		0x002B
506 typedef struct {
507 	bdaddr_t	bdaddr;
508 	uint8_t		capability;
509 	uint8_t		oob_data;
510 	uint8_t		authentication;
511 } __attribute__ ((packed)) io_capability_reply_cp;
512 #define IO_CAPABILITY_REPLY_CP_SIZE 9
513 
514 #define OCF_USER_CONFIRM_REPLY		0x002C
515 typedef struct {
516 	bdaddr_t	bdaddr;
517 } __attribute__ ((packed)) user_confirm_reply_cp;
518 #define USER_CONFIRM_REPLY_CP_SIZE 6
519 
520 #define OCF_USER_CONFIRM_NEG_REPLY	0x002D
521 
522 #define OCF_USER_PASSKEY_REPLY		0x002E
523 typedef struct {
524 	bdaddr_t	bdaddr;
525 	uint32_t	passkey;
526 } __attribute__ ((packed)) user_passkey_reply_cp;
527 #define USER_PASSKEY_REPLY_CP_SIZE 10
528 
529 #define OCF_USER_PASSKEY_NEG_REPLY	0x002F
530 
531 #define OCF_REMOTE_OOB_DATA_REPLY	0x0030
532 typedef struct {
533 	bdaddr_t	bdaddr;
534 	uint8_t		hash[16];
535 	uint8_t		randomizer[16];
536 } __attribute__ ((packed)) remote_oob_data_reply_cp;
537 #define REMOTE_OOB_DATA_REPLY_CP_SIZE 38
538 
539 #define OCF_REMOTE_OOB_DATA_NEG_REPLY	0x0033
540 
541 #define OCF_IO_CAPABILITY_NEG_REPLY	0x0034
542 typedef struct {
543 	bdaddr_t	bdaddr;
544 	uint8_t		reason;
545 } __attribute__ ((packed)) io_capability_neg_reply_cp;
546 #define IO_CAPABILITY_NEG_REPLY_CP_SIZE 7
547 
548 /* Link Policy */
549 #define OGF_LINK_POLICY		0x02
550 
551 #define OCF_HOLD_MODE			0x0001
552 typedef struct {
553 	uint16_t	handle;
554 	uint16_t	max_interval;
555 	uint16_t	min_interval;
556 } __attribute__ ((packed)) hold_mode_cp;
557 #define HOLD_MODE_CP_SIZE 6
558 
559 #define OCF_SNIFF_MODE			0x0003
560 typedef struct {
561 	uint16_t	handle;
562 	uint16_t	max_interval;
563 	uint16_t	min_interval;
564 	uint16_t	attempt;
565 	uint16_t	timeout;
566 } __attribute__ ((packed)) sniff_mode_cp;
567 #define SNIFF_MODE_CP_SIZE 10
568 
569 #define OCF_EXIT_SNIFF_MODE		0x0004
570 typedef struct {
571 	uint16_t	handle;
572 } __attribute__ ((packed)) exit_sniff_mode_cp;
573 #define EXIT_SNIFF_MODE_CP_SIZE 2
574 
575 #define OCF_PARK_MODE			0x0005
576 typedef struct {
577 	uint16_t	handle;
578 	uint16_t	max_interval;
579 	uint16_t	min_interval;
580 } __attribute__ ((packed)) park_mode_cp;
581 #define PARK_MODE_CP_SIZE 6
582 
583 #define OCF_EXIT_PARK_MODE		0x0006
584 typedef struct {
585 	uint16_t	handle;
586 } __attribute__ ((packed)) exit_park_mode_cp;
587 #define EXIT_PARK_MODE_CP_SIZE 2
588 
589 #define OCF_QOS_SETUP			0x0007
590 typedef struct {
591 	uint8_t		service_type;		/* 1 = best effort */
592 	uint32_t	token_rate;		/* Byte per seconds */
593 	uint32_t	peak_bandwidth;		/* Byte per seconds */
594 	uint32_t	latency;		/* Microseconds */
595 	uint32_t	delay_variation;	/* Microseconds */
596 } __attribute__ ((packed)) hci_qos;
597 #define HCI_QOS_CP_SIZE 17
598 typedef struct {
599 	uint16_t 	handle;
600 	uint8_t 	flags;			/* Reserved */
601 	hci_qos 	qos;
602 } __attribute__ ((packed)) qos_setup_cp;
603 #define QOS_SETUP_CP_SIZE (3 + HCI_QOS_CP_SIZE)
604 
605 #define OCF_ROLE_DISCOVERY		0x0009
606 typedef struct {
607 	uint16_t	handle;
608 } __attribute__ ((packed)) role_discovery_cp;
609 #define ROLE_DISCOVERY_CP_SIZE 2
610 typedef struct {
611 	uint8_t		status;
612 	uint16_t	handle;
613 	uint8_t		role;
614 } __attribute__ ((packed)) role_discovery_rp;
615 #define ROLE_DISCOVERY_RP_SIZE 4
616 
617 #define OCF_SWITCH_ROLE			0x000B
618 typedef struct {
619 	bdaddr_t	bdaddr;
620 	uint8_t		role;
621 } __attribute__ ((packed)) switch_role_cp;
622 #define SWITCH_ROLE_CP_SIZE 7
623 
624 #define OCF_READ_LINK_POLICY		0x000C
625 typedef struct {
626 	uint16_t	handle;
627 } __attribute__ ((packed)) read_link_policy_cp;
628 #define READ_LINK_POLICY_CP_SIZE 2
629 typedef struct {
630 	uint8_t 	status;
631 	uint16_t	handle;
632 	uint16_t	policy;
633 } __attribute__ ((packed)) read_link_policy_rp;
634 #define READ_LINK_POLICY_RP_SIZE 5
635 
636 #define OCF_WRITE_LINK_POLICY		0x000D
637 typedef struct {
638 	uint16_t	handle;
639 	uint16_t	policy;
640 } __attribute__ ((packed)) write_link_policy_cp;
641 #define WRITE_LINK_POLICY_CP_SIZE 4
642 typedef struct {
643 	uint8_t 	status;
644 	uint16_t	handle;
645 } __attribute__ ((packed)) write_link_policy_rp;
646 #define WRITE_LINK_POLICY_RP_SIZE 3
647 
648 #define OCF_READ_DEFAULT_LINK_POLICY	0x000E
649 
650 #define OCF_WRITE_DEFAULT_LINK_POLICY	0x000F
651 
652 #define OCF_FLOW_SPECIFICATION		0x0010
653 
654 #define OCF_SNIFF_SUBRATING		0x0011
655 typedef struct {
656 	uint16_t	handle;
657 	uint16_t	max_latency;
658 	uint16_t	min_remote_timeout;
659 	uint16_t	min_local_timeout;
660 } __attribute__ ((packed)) sniff_subrating_cp;
661 #define SNIFF_SUBRATING_CP_SIZE 8
662 
663 /* Host Controller and Baseband */
664 #define OGF_HOST_CTL		0x03
665 
666 #define OCF_SET_EVENT_MASK		0x0001
667 typedef struct {
668 	uint8_t		mask[8];
669 } __attribute__ ((packed)) set_event_mask_cp;
670 #define SET_EVENT_MASK_CP_SIZE 8
671 
672 #define OCF_RESET			0x0003
673 
674 #define OCF_SET_EVENT_FLT		0x0005
675 typedef struct {
676 	uint8_t		flt_type;
677 	uint8_t		cond_type;
678 	uint8_t		condition[0];
679 } __attribute__ ((packed)) set_event_flt_cp;
680 #define SET_EVENT_FLT_CP_SIZE 2
681 
682 /* Filter types */
683 #define FLT_CLEAR_ALL			0x00
684 #define FLT_INQ_RESULT			0x01
685 #define FLT_CONN_SETUP			0x02
686 /* INQ_RESULT Condition types */
687 #define INQ_RESULT_RETURN_ALL		0x00
688 #define INQ_RESULT_RETURN_CLASS		0x01
689 #define INQ_RESULT_RETURN_BDADDR	0x02
690 /* CONN_SETUP Condition types */
691 #define CONN_SETUP_ALLOW_ALL		0x00
692 #define CONN_SETUP_ALLOW_CLASS		0x01
693 #define CONN_SETUP_ALLOW_BDADDR		0x02
694 /* CONN_SETUP Conditions */
695 #define CONN_SETUP_AUTO_OFF		0x01
696 #define CONN_SETUP_AUTO_ON		0x02
697 
698 #define OCF_FLUSH			0x0008
699 
700 #define OCF_READ_PIN_TYPE		0x0009
701 typedef struct {
702 	uint8_t		status;
703 	uint8_t		pin_type;
704 } __attribute__ ((packed)) read_pin_type_rp;
705 #define READ_PIN_TYPE_RP_SIZE 2
706 
707 #define OCF_WRITE_PIN_TYPE		0x000A
708 typedef struct {
709 	uint8_t		pin_type;
710 } __attribute__ ((packed)) write_pin_type_cp;
711 #define WRITE_PIN_TYPE_CP_SIZE 1
712 
713 #define OCF_CREATE_NEW_UNIT_KEY		0x000B
714 
715 #define OCF_READ_STORED_LINK_KEY	0x000D
716 typedef struct {
717 	bdaddr_t	bdaddr;
718 	uint8_t		read_all;
719 } __attribute__ ((packed)) read_stored_link_key_cp;
720 #define READ_STORED_LINK_KEY_CP_SIZE 7
721 typedef struct {
722 	uint8_t		status;
723 	uint16_t	max_keys;
724 	uint16_t	num_keys;
725 } __attribute__ ((packed)) read_stored_link_key_rp;
726 #define READ_STORED_LINK_KEY_RP_SIZE 5
727 
728 #define OCF_WRITE_STORED_LINK_KEY	0x0011
729 typedef struct {
730 	uint8_t		num_keys;
731 	/* variable length part */
732 } __attribute__ ((packed)) write_stored_link_key_cp;
733 #define WRITE_STORED_LINK_KEY_CP_SIZE 1
734 typedef struct {
735 	uint8_t		status;
736 	uint8_t		num_keys;
737 } __attribute__ ((packed)) write_stored_link_key_rp;
738 #define READ_WRITE_LINK_KEY_RP_SIZE 2
739 
740 #define OCF_DELETE_STORED_LINK_KEY	0x0012
741 typedef struct {
742 	bdaddr_t	bdaddr;
743 	uint8_t		delete_all;
744 } __attribute__ ((packed)) delete_stored_link_key_cp;
745 #define DELETE_STORED_LINK_KEY_CP_SIZE 7
746 typedef struct {
747 	uint8_t		status;
748 	uint16_t	num_keys;
749 } __attribute__ ((packed)) delete_stored_link_key_rp;
750 #define DELETE_STORED_LINK_KEY_RP_SIZE 3
751 
752 #define OCF_CHANGE_LOCAL_NAME		0x0013
753 typedef struct {
754 	uint8_t		name[248];
755 } __attribute__ ((packed)) change_local_name_cp;
756 #define CHANGE_LOCAL_NAME_CP_SIZE 248
757 
758 #define OCF_READ_LOCAL_NAME		0x0014
759 typedef struct {
760 	uint8_t		status;
761 	uint8_t		name[248];
762 } __attribute__ ((packed)) read_local_name_rp;
763 #define READ_LOCAL_NAME_RP_SIZE 249
764 
765 #define OCF_READ_CONN_ACCEPT_TIMEOUT	0x0015
766 typedef struct {
767 	uint8_t		status;
768 	uint16_t	timeout;
769 } __attribute__ ((packed)) read_conn_accept_timeout_rp;
770 #define READ_CONN_ACCEPT_TIMEOUT_RP_SIZE 3
771 
772 #define OCF_WRITE_CONN_ACCEPT_TIMEOUT	0x0016
773 typedef struct {
774 	uint16_t	timeout;
775 } __attribute__ ((packed)) write_conn_accept_timeout_cp;
776 #define WRITE_CONN_ACCEPT_TIMEOUT_CP_SIZE 2
777 
778 #define OCF_READ_PAGE_TIMEOUT		0x0017
779 typedef struct {
780 	uint8_t		status;
781 	uint16_t	timeout;
782 } __attribute__ ((packed)) read_page_timeout_rp;
783 #define READ_PAGE_TIMEOUT_RP_SIZE 3
784 
785 #define OCF_WRITE_PAGE_TIMEOUT		0x0018
786 typedef struct {
787 	uint16_t	timeout;
788 } __attribute__ ((packed)) write_page_timeout_cp;
789 #define WRITE_PAGE_TIMEOUT_CP_SIZE 2
790 
791 #define OCF_READ_SCAN_ENABLE		0x0019
792 typedef struct {
793 	uint8_t		status;
794 	uint8_t		enable;
795 } __attribute__ ((packed)) read_scan_enable_rp;
796 #define READ_SCAN_ENABLE_RP_SIZE 2
797 
798 #define OCF_WRITE_SCAN_ENABLE		0x001A
799 	#define SCAN_DISABLED		0x00
800 	#define SCAN_INQUIRY		0x01
801 	#define SCAN_PAGE		0x02
802 
803 #define OCF_READ_PAGE_ACTIVITY		0x001B
804 typedef struct {
805 	uint8_t		status;
806 	uint16_t	interval;
807 	uint16_t	window;
808 } __attribute__ ((packed)) read_page_activity_rp;
809 #define READ_PAGE_ACTIVITY_RP_SIZE 5
810 
811 #define OCF_WRITE_PAGE_ACTIVITY		0x001C
812 typedef struct {
813 	uint16_t	interval;
814 	uint16_t	window;
815 } __attribute__ ((packed)) write_page_activity_cp;
816 #define WRITE_PAGE_ACTIVITY_CP_SIZE 4
817 
818 #define OCF_READ_INQ_ACTIVITY		0x001D
819 typedef struct {
820 	uint8_t		status;
821 	uint16_t	interval;
822 	uint16_t	window;
823 } __attribute__ ((packed)) read_inq_activity_rp;
824 #define READ_INQ_ACTIVITY_RP_SIZE 5
825 
826 #define OCF_WRITE_INQ_ACTIVITY		0x001E
827 typedef struct {
828 	uint16_t	interval;
829 	uint16_t	window;
830 } __attribute__ ((packed)) write_inq_activity_cp;
831 #define WRITE_INQ_ACTIVITY_CP_SIZE 4
832 
833 #define OCF_READ_AUTH_ENABLE		0x001F
834 
835 #define OCF_WRITE_AUTH_ENABLE		0x0020
836 	#define AUTH_DISABLED		0x00
837 	#define AUTH_ENABLED		0x01
838 
839 #define OCF_READ_ENCRYPT_MODE		0x0021
840 
841 #define OCF_WRITE_ENCRYPT_MODE		0x0022
842 	#define ENCRYPT_DISABLED	0x00
843 	#define ENCRYPT_P2P		0x01
844 	#define ENCRYPT_BOTH		0x02
845 
846 #define OCF_READ_CLASS_OF_DEV		0x0023
847 typedef struct {
848 	uint8_t		status;
849 	uint8_t		dev_class[3];
850 } __attribute__ ((packed)) read_class_of_dev_rp;
851 #define READ_CLASS_OF_DEV_RP_SIZE 4
852 
853 #define OCF_WRITE_CLASS_OF_DEV		0x0024
854 typedef struct {
855 	uint8_t		dev_class[3];
856 } __attribute__ ((packed)) write_class_of_dev_cp;
857 #define WRITE_CLASS_OF_DEV_CP_SIZE 3
858 
859 #define OCF_READ_VOICE_SETTING		0x0025
860 typedef struct {
861 	uint8_t		status;
862 	uint16_t	voice_setting;
863 } __attribute__ ((packed)) read_voice_setting_rp;
864 #define READ_VOICE_SETTING_RP_SIZE 3
865 
866 #define OCF_WRITE_VOICE_SETTING		0x0026
867 typedef struct {
868 	uint16_t	voice_setting;
869 } __attribute__ ((packed)) write_voice_setting_cp;
870 #define WRITE_VOICE_SETTING_CP_SIZE 2
871 
872 #define OCF_READ_AUTOMATIC_FLUSH_TIMEOUT	0x0027
873 
874 #define OCF_WRITE_AUTOMATIC_FLUSH_TIMEOUT	0x0028
875 
876 #define OCF_READ_NUM_BROADCAST_RETRANS	0x0029
877 
878 #define OCF_WRITE_NUM_BROADCAST_RETRANS	0x002A
879 
880 #define OCF_READ_HOLD_MODE_ACTIVITY	0x002B
881 
882 #define OCF_WRITE_HOLD_MODE_ACTIVITY	0x002C
883 
884 #define OCF_READ_TRANSMIT_POWER_LEVEL	0x002D
885 typedef struct {
886 	uint16_t	handle;
887 	uint8_t		type;
888 } __attribute__ ((packed)) read_transmit_power_level_cp;
889 #define READ_TRANSMIT_POWER_LEVEL_CP_SIZE 3
890 typedef struct {
891 	uint8_t		status;
892 	uint16_t	handle;
893 	int8_t		level;
894 } __attribute__ ((packed)) read_transmit_power_level_rp;
895 #define READ_TRANSMIT_POWER_LEVEL_RP_SIZE 4
896 
897 #define OCF_READ_SYNC_FLOW_ENABLE	0x002E
898 
899 #define OCF_WRITE_SYNC_FLOW_ENABLE	0x002F
900 
901 #define OCF_SET_CONTROLLER_TO_HOST_FC	0x0031
902 
903 #define OCF_HOST_BUFFER_SIZE		0x0033
904 typedef struct {
905 	uint16_t	acl_mtu;
906 	uint8_t		sco_mtu;
907 	uint16_t	acl_max_pkt;
908 	uint16_t	sco_max_pkt;
909 } __attribute__ ((packed)) host_buffer_size_cp;
910 #define HOST_BUFFER_SIZE_CP_SIZE 7
911 
912 #define OCF_HOST_NUM_COMP_PKTS		0x0035
913 typedef struct {
914 	uint8_t		num_hndl;
915 	/* variable length part */
916 } __attribute__ ((packed)) host_num_comp_pkts_cp;
917 #define HOST_NUM_COMP_PKTS_CP_SIZE 1
918 
919 #define OCF_READ_LINK_SUPERVISION_TIMEOUT	0x0036
920 typedef struct {
921 	uint8_t		status;
922 	uint16_t	handle;
923 	uint16_t	timeout;
924 } __attribute__ ((packed)) read_link_supervision_timeout_rp;
925 #define READ_LINK_SUPERVISION_TIMEOUT_RP_SIZE 5
926 
927 #define OCF_WRITE_LINK_SUPERVISION_TIMEOUT	0x0037
928 typedef struct {
929 	uint16_t	handle;
930 	uint16_t	timeout;
931 } __attribute__ ((packed)) write_link_supervision_timeout_cp;
932 #define WRITE_LINK_SUPERVISION_TIMEOUT_CP_SIZE 4
933 typedef struct {
934 	uint8_t		status;
935 	uint16_t	handle;
936 } __attribute__ ((packed)) write_link_supervision_timeout_rp;
937 #define WRITE_LINK_SUPERVISION_TIMEOUT_RP_SIZE 3
938 
939 #define OCF_READ_NUM_SUPPORTED_IAC	0x0038
940 
941 #define MAX_IAC_LAP 0x40
942 #define OCF_READ_CURRENT_IAC_LAP	0x0039
943 typedef struct {
944 	uint8_t		status;
945 	uint8_t		num_current_iac;
946 	uint8_t		lap[MAX_IAC_LAP][3];
947 } __attribute__ ((packed)) read_current_iac_lap_rp;
948 #define READ_CURRENT_IAC_LAP_RP_SIZE 2+3*MAX_IAC_LAP
949 
950 #define OCF_WRITE_CURRENT_IAC_LAP	0x003A
951 typedef struct {
952 	uint8_t		num_current_iac;
953 	uint8_t		lap[MAX_IAC_LAP][3];
954 } __attribute__ ((packed)) write_current_iac_lap_cp;
955 #define WRITE_CURRENT_IAC_LAP_CP_SIZE 1+3*MAX_IAC_LAP
956 
957 #define OCF_READ_PAGE_SCAN_PERIOD_MODE	0x003B
958 
959 #define OCF_WRITE_PAGE_SCAN_PERIOD_MODE	0x003C
960 
961 #define OCF_READ_PAGE_SCAN_MODE		0x003D
962 
963 #define OCF_WRITE_PAGE_SCAN_MODE	0x003E
964 
965 #define OCF_SET_AFH_CLASSIFICATION	0x003F
966 typedef struct {
967 	uint8_t		map[10];
968 } __attribute__ ((packed)) set_afh_classification_cp;
969 #define SET_AFH_CLASSIFICATION_CP_SIZE 10
970 typedef struct {
971 	uint8_t		status;
972 } __attribute__ ((packed)) set_afh_classification_rp;
973 #define SET_AFH_CLASSIFICATION_RP_SIZE 1
974 
975 #define OCF_READ_INQUIRY_SCAN_TYPE	0x0042
976 typedef struct {
977 	uint8_t		status;
978 	uint8_t		type;
979 } __attribute__ ((packed)) read_inquiry_scan_type_rp;
980 #define READ_INQUIRY_SCAN_TYPE_RP_SIZE 2
981 
982 #define OCF_WRITE_INQUIRY_SCAN_TYPE	0x0043
983 typedef struct {
984 	uint8_t		type;
985 } __attribute__ ((packed)) write_inquiry_scan_type_cp;
986 #define WRITE_INQUIRY_SCAN_TYPE_CP_SIZE 1
987 typedef struct {
988 	uint8_t		status;
989 } __attribute__ ((packed)) write_inquiry_scan_type_rp;
990 #define WRITE_INQUIRY_SCAN_TYPE_RP_SIZE 1
991 
992 #define OCF_READ_INQUIRY_MODE		0x0044
993 typedef struct {
994 	uint8_t		status;
995 	uint8_t		mode;
996 } __attribute__ ((packed)) read_inquiry_mode_rp;
997 #define READ_INQUIRY_MODE_RP_SIZE 2
998 
999 #define OCF_WRITE_INQUIRY_MODE		0x0045
1000 typedef struct {
1001 	uint8_t		mode;
1002 } __attribute__ ((packed)) write_inquiry_mode_cp;
1003 #define WRITE_INQUIRY_MODE_CP_SIZE 1
1004 typedef struct {
1005 	uint8_t		status;
1006 } __attribute__ ((packed)) write_inquiry_mode_rp;
1007 #define WRITE_INQUIRY_MODE_RP_SIZE 1
1008 
1009 #define OCF_READ_PAGE_SCAN_TYPE		0x0046
1010 
1011 #define OCF_WRITE_PAGE_SCAN_TYPE	0x0047
1012 
1013 #define OCF_READ_AFH_MODE		0x0048
1014 typedef struct {
1015 	uint8_t		status;
1016 	uint8_t		mode;
1017 } __attribute__ ((packed)) read_afh_mode_rp;
1018 #define READ_AFH_MODE_RP_SIZE 2
1019 
1020 #define OCF_WRITE_AFH_MODE		0x0049
1021 typedef struct {
1022 	uint8_t		mode;
1023 } __attribute__ ((packed)) write_afh_mode_cp;
1024 #define WRITE_AFH_MODE_CP_SIZE 1
1025 typedef struct {
1026 	uint8_t		status;
1027 } __attribute__ ((packed)) write_afh_mode_rp;
1028 #define WRITE_AFH_MODE_RP_SIZE 1
1029 
1030 #define OCF_READ_EXT_INQUIRY_RESPONSE	0x0051
1031 typedef struct {
1032 	uint8_t		status;
1033 	uint8_t		fec;
1034 	uint8_t		data[240];
1035 } __attribute__ ((packed)) read_ext_inquiry_response_rp;
1036 #define READ_EXT_INQUIRY_RESPONSE_RP_SIZE 242
1037 
1038 #define OCF_WRITE_EXT_INQUIRY_RESPONSE	0x0052
1039 typedef struct {
1040 	uint8_t		fec;
1041 	uint8_t		data[240];
1042 } __attribute__ ((packed)) write_ext_inquiry_response_cp;
1043 #define WRITE_EXT_INQUIRY_RESPONSE_CP_SIZE 241
1044 typedef struct {
1045 	uint8_t		status;
1046 } __attribute__ ((packed)) write_ext_inquiry_response_rp;
1047 #define WRITE_EXT_INQUIRY_RESPONSE_RP_SIZE 1
1048 
1049 #define OCF_REFRESH_ENCRYPTION_KEY	0x0053
1050 typedef struct {
1051 	uint16_t	handle;
1052 } __attribute__ ((packed)) refresh_encryption_key_cp;
1053 #define REFRESH_ENCRYPTION_KEY_CP_SIZE 2
1054 typedef struct {
1055 	uint8_t		status;
1056 } __attribute__ ((packed)) refresh_encryption_key_rp;
1057 #define REFRESH_ENCRYPTION_KEY_RP_SIZE 1
1058 
1059 #define OCF_READ_SIMPLE_PAIRING_MODE	0x0055
1060 typedef struct {
1061 	uint8_t		status;
1062 	uint8_t		mode;
1063 } __attribute__ ((packed)) read_simple_pairing_mode_rp;
1064 #define READ_SIMPLE_PAIRING_MODE_RP_SIZE 2
1065 
1066 #define OCF_WRITE_SIMPLE_PAIRING_MODE	0x0056
1067 typedef struct {
1068 	uint8_t		mode;
1069 } __attribute__ ((packed)) write_simple_pairing_mode_cp;
1070 #define WRITE_SIMPLE_PAIRING_MODE_CP_SIZE 1
1071 typedef struct {
1072 	uint8_t		status;
1073 } __attribute__ ((packed)) write_simple_pairing_mode_rp;
1074 #define WRITE_SIMPLE_PAIRING_MODE_RP_SIZE 1
1075 
1076 #define OCF_READ_LOCAL_OOB_DATA		0x0057
1077 typedef struct {
1078 	uint8_t		status;
1079 	uint8_t		hash[16];
1080 	uint8_t		randomizer[16];
1081 } __attribute__ ((packed)) read_local_oob_data_rp;
1082 #define READ_LOCAL_OOB_DATA_RP_SIZE 33
1083 
1084 #define OCF_READ_INQ_RESPONSE_TX_POWER_LEVEL	0x0058
1085 typedef struct {
1086 	uint8_t		status;
1087 	int8_t		level;
1088 } __attribute__ ((packed)) read_inq_response_tx_power_level_rp;
1089 #define READ_INQ_RESPONSE_TX_POWER_LEVEL_RP_SIZE 2
1090 
1091 #define OCF_READ_INQUIRY_TRANSMIT_POWER_LEVEL	0x0058
1092 typedef struct {
1093 	uint8_t		status;
1094 	int8_t		level;
1095 } __attribute__ ((packed)) read_inquiry_transmit_power_level_rp;
1096 #define READ_INQUIRY_TRANSMIT_POWER_LEVEL_RP_SIZE 2
1097 
1098 #define OCF_WRITE_INQUIRY_TRANSMIT_POWER_LEVEL	0x0059
1099 typedef struct {
1100 	int8_t		level;
1101 } __attribute__ ((packed)) write_inquiry_transmit_power_level_cp;
1102 #define WRITE_INQUIRY_TRANSMIT_POWER_LEVEL_CP_SIZE 1
1103 typedef struct {
1104 	uint8_t		status;
1105 } __attribute__ ((packed)) write_inquiry_transmit_power_level_rp;
1106 #define WRITE_INQUIRY_TRANSMIT_POWER_LEVEL_RP_SIZE 1
1107 
1108 #define OCF_READ_DEFAULT_ERROR_DATA_REPORTING	0x005A
1109 typedef struct {
1110 	uint8_t		status;
1111 	uint8_t		reporting;
1112 } __attribute__ ((packed)) read_default_error_data_reporting_rp;
1113 #define READ_DEFAULT_ERROR_DATA_REPORTING_RP_SIZE 2
1114 
1115 #define OCF_WRITE_DEFAULT_ERROR_DATA_REPORTING	0x005B
1116 typedef struct {
1117 	uint8_t		reporting;
1118 } __attribute__ ((packed)) write_default_error_data_reporting_cp;
1119 #define WRITE_DEFAULT_ERROR_DATA_REPORTING_CP_SIZE 1
1120 typedef struct {
1121 	uint8_t		status;
1122 } __attribute__ ((packed)) write_default_error_data_reporting_rp;
1123 #define WRITE_DEFAULT_ERROR_DATA_REPORTING_RP_SIZE 1
1124 
1125 #define OCF_ENHANCED_FLUSH		0x005F
1126 typedef struct {
1127 	uint16_t	handle;
1128 	uint8_t		type;
1129 } __attribute__ ((packed)) enhanced_flush_cp;
1130 #define ENHANCED_FLUSH_CP_SIZE 3
1131 
1132 #define OCF_SEND_KEYPRESS_NOTIFY	0x0060
1133 typedef struct {
1134 	bdaddr_t	bdaddr;
1135 	uint8_t		type;
1136 } __attribute__ ((packed)) send_keypress_notify_cp;
1137 #define SEND_KEYPRESS_NOTIFY_CP_SIZE 7
1138 typedef struct {
1139 	uint8_t		status;
1140 } __attribute__ ((packed)) send_keypress_notify_rp;
1141 #define SEND_KEYPRESS_NOTIFY_RP_SIZE 1
1142 
1143 /* Informational Parameters */
1144 #define OGF_INFO_PARAM		0x04
1145 
1146 #define OCF_READ_LOCAL_VERSION		0x0001
1147 typedef struct {
1148 	uint8_t		status;
1149 	uint8_t		hci_ver;
1150 	uint16_t	hci_rev;
1151 	uint8_t		lmp_ver;
1152 	uint16_t	manufacturer;
1153 	uint16_t	lmp_subver;
1154 } __attribute__ ((packed)) read_local_version_rp;
1155 #define READ_LOCAL_VERSION_RP_SIZE 9
1156 
1157 #define OCF_READ_LOCAL_COMMANDS		0x0002
1158 typedef struct {
1159 	uint8_t		status;
1160 	uint8_t		commands[64];
1161 } __attribute__ ((packed)) read_local_commands_rp;
1162 #define READ_LOCAL_COMMANDS_RP_SIZE 65
1163 
1164 #define OCF_READ_LOCAL_FEATURES		0x0003
1165 typedef struct {
1166 	uint8_t		status;
1167 	uint8_t		features[8];
1168 } __attribute__ ((packed)) read_local_features_rp;
1169 #define READ_LOCAL_FEATURES_RP_SIZE 9
1170 
1171 #define OCF_READ_LOCAL_EXT_FEATURES	0x0004
1172 typedef struct {
1173 	uint8_t		page_num;
1174 } __attribute__ ((packed)) read_local_ext_features_cp;
1175 #define READ_LOCAL_EXT_FEATURES_CP_SIZE 1
1176 typedef struct {
1177 	uint8_t		status;
1178 	uint8_t		page_num;
1179 	uint8_t		max_page_num;
1180 	uint8_t		features[8];
1181 } __attribute__ ((packed)) read_local_ext_features_rp;
1182 #define READ_LOCAL_EXT_FEATURES_RP_SIZE 11
1183 
1184 #define OCF_READ_BUFFER_SIZE		0x0005
1185 typedef struct {
1186 	uint8_t		status;
1187 	uint16_t	acl_mtu;
1188 	uint8_t		sco_mtu;
1189 	uint16_t	acl_max_pkt;
1190 	uint16_t	sco_max_pkt;
1191 } __attribute__ ((packed)) read_buffer_size_rp;
1192 #define READ_BUFFER_SIZE_RP_SIZE 8
1193 
1194 #define OCF_READ_COUNTRY_CODE		0x0007
1195 
1196 #define OCF_READ_BD_ADDR		0x0009
1197 typedef struct {
1198 	uint8_t		status;
1199 	bdaddr_t	bdaddr;
1200 } __attribute__ ((packed)) read_bd_addr_rp;
1201 #define READ_BD_ADDR_RP_SIZE 7
1202 
1203 /* Status params */
1204 #define OGF_STATUS_PARAM	0x05
1205 
1206 #define OCF_READ_FAILED_CONTACT_COUNTER		0x0001
1207 typedef struct {
1208 	uint8_t		status;
1209 	uint16_t	handle;
1210 	uint8_t		counter;
1211 } __attribute__ ((packed)) read_failed_contact_counter_rp;
1212 #define READ_FAILED_CONTACT_COUNTER_RP_SIZE 4
1213 
1214 #define OCF_RESET_FAILED_CONTACT_COUNTER	0x0002
1215 typedef struct {
1216 	uint8_t		status;
1217 	uint16_t	handle;
1218 } __attribute__ ((packed)) reset_failed_contact_counter_rp;
1219 #define RESET_FAILED_CONTACT_COUNTER_RP_SIZE 4
1220 
1221 #define OCF_READ_LINK_QUALITY		0x0003
1222 typedef struct {
1223 	uint8_t		status;
1224 	uint16_t	handle;
1225 	uint8_t		link_quality;
1226 } __attribute__ ((packed)) read_link_quality_rp;
1227 #define READ_LINK_QUALITY_RP_SIZE 4
1228 
1229 #define OCF_READ_RSSI			0x0005
1230 typedef struct {
1231 	uint8_t		status;
1232 	uint16_t	handle;
1233 	int8_t		rssi;
1234 } __attribute__ ((packed)) read_rssi_rp;
1235 #define READ_RSSI_RP_SIZE 4
1236 
1237 #define OCF_READ_AFH_MAP		0x0006
1238 typedef struct {
1239 	uint8_t		status;
1240 	uint16_t	handle;
1241 	uint8_t		mode;
1242 	uint8_t		map[10];
1243 } __attribute__ ((packed)) read_afh_map_rp;
1244 #define READ_AFH_MAP_RP_SIZE 14
1245 
1246 #define OCF_READ_CLOCK			0x0007
1247 typedef struct {
1248 	uint16_t	handle;
1249 	uint8_t		which_clock;
1250 } __attribute__ ((packed)) read_clock_cp;
1251 #define READ_CLOCK_CP_SIZE 3
1252 typedef struct {
1253 	uint8_t		status;
1254 	uint16_t	handle;
1255 	uint32_t	clock;
1256 	uint16_t	accuracy;
1257 } __attribute__ ((packed)) read_clock_rp;
1258 #define READ_CLOCK_RP_SIZE 9
1259 
1260 /* Testing commands */
1261 #define OGF_TESTING_CMD		0x3e
1262 
1263 #define OCF_READ_LOOPBACK_MODE			0x0001
1264 
1265 #define OCF_WRITE_LOOPBACK_MODE			0x0002
1266 
1267 #define OCF_ENABLE_DEVICE_UNDER_TEST_MODE	0x0003
1268 
1269 #define OCF_WRITE_SIMPLE_PAIRING_DEBUG_MODE	0x0004
1270 typedef struct {
1271 	uint8_t		mode;
1272 } __attribute__ ((packed)) write_simple_pairing_debug_mode_cp;
1273 #define WRITE_SIMPLE_PAIRING_DEBUG_MODE_CP_SIZE 1
1274 typedef struct {
1275 	uint8_t		status;
1276 } __attribute__ ((packed)) write_simple_pairing_debug_mode_rp;
1277 #define WRITE_SIMPLE_PAIRING_DEBUG_MODE_RP_SIZE 1
1278 
1279 /* LE commands */
1280 #define OGF_LE_CTL		0x08
1281 
1282 #define OCF_LE_SET_EVENT_MASK			0x0001
1283 typedef struct {
1284 	uint8_t		mask[8];
1285 } __attribute__ ((packed)) le_set_event_mask_cp;
1286 #define LE_SET_EVENT_MASK_CP_SIZE 8
1287 
1288 #define OCF_LE_READ_BUFFER_SIZE			0x0002
1289 typedef struct {
1290 	uint8_t		status;
1291 	uint16_t	pkt_len;
1292 	uint8_t		max_pkt;
1293 } __attribute__ ((packed)) le_read_buffer_size_rp;
1294 #define LE_READ_BUFFER_SIZE_RP_SIZE 4
1295 
1296 #define OCF_LE_READ_LOCAL_SUPPORTED_FEATURES	0x0003
1297 typedef struct {
1298 	uint8_t		status;
1299 	uint8_t		features[8];
1300 } __attribute__ ((packed)) le_read_local_supported_features_rp;
1301 #define LE_READ_LOCAL_SUPPORTED_FEATURES_RP_SIZE 9
1302 
1303 #define OCF_LE_SET_RANDOM_ADDRESS		0x0005
1304 typedef struct {
1305 	bdaddr_t	bdaddr;
1306 } __attribute__ ((packed)) le_set_random_address_cp;
1307 #define LE_SET_RANDOM_ADDRESS_CP_SIZE 6
1308 
1309 #define OCF_LE_SET_ADVERTISING_PARAMETERS	0x0006
1310 typedef struct {
1311 	uint16_t	min_interval;
1312 	uint16_t	max_interval;
1313 	uint8_t		advtype;
1314 	uint8_t		own_bdaddr_type;
1315 	uint8_t		direct_bdaddr_type;
1316 	bdaddr_t	direct_bdaddr;
1317 	uint8_t		chan_map;
1318 	uint8_t		filter;
1319 } __attribute__ ((packed)) le_set_advertising_parameters_cp;
1320 #define LE_SET_ADVERTISING_PARAMETERS_CP_SIZE 15
1321 
1322 #define OCF_LE_READ_ADVERTISING_CHANNEL_TX_POWER	0x0007
1323 typedef struct {
1324 	uint8_t		status;
1325 	uint8_t		level;
1326 } __attribute__ ((packed)) le_read_advertising_channel_tx_power_rp;
1327 #define LE_READ_ADVERTISING_CHANNEL_TX_POWER_RP_SIZE 2
1328 
1329 #define OCF_LE_SET_ADVERTISING_DATA		0x0008
1330 typedef struct {
1331 	uint8_t		length;
1332 	uint8_t		data[31];
1333 } __attribute__ ((packed)) le_set_advertising_data_cp;
1334 #define LE_SET_ADVERTISING_DATA_CP_SIZE 32
1335 
1336 #define OCF_LE_SET_SCAN_RESPONSE_DATA		0x0009
1337 typedef struct {
1338 	uint8_t		length;
1339 	uint8_t		data[31];
1340 } __attribute__ ((packed)) le_set_scan_response_data_cp;
1341 #define LE_SET_SCAN_RESPONSE_DATA_CP_SIZE 32
1342 
1343 #define OCF_LE_SET_ADVERTISE_ENABLE		0x000A
1344 typedef struct {
1345 	uint8_t		enable;
1346 } __attribute__ ((packed)) le_set_advertise_enable_cp;
1347 #define LE_SET_ADVERTISE_ENABLE_CP_SIZE 1
1348 
1349 #define OCF_LE_SET_SCAN_PARAMETERS		0x000B
1350 typedef struct {
1351 	uint8_t		type;
1352 	uint16_t	interval;
1353 	uint16_t	window;
1354 	uint8_t		own_bdaddr_type;
1355 	uint8_t		filter;
1356 } __attribute__ ((packed)) le_set_scan_parameters_cp;
1357 #define LE_SET_SCAN_PARAMETERS_CP_SIZE 7
1358 
1359 #define OCF_LE_SET_SCAN_ENABLE			0x000C
1360 typedef struct {
1361 	uint8_t		enable;
1362 	uint8_t		filter_dup;
1363 } __attribute__ ((packed)) le_set_scan_enable_cp;
1364 #define LE_SET_SCAN_ENABLE_CP_SIZE 2
1365 
1366 #define OCF_LE_CREATE_CONN			0x000D
1367 typedef struct {
1368 	uint16_t	interval;
1369 	uint16_t	window;
1370 	uint8_t		initiator_filter;
1371 	uint8_t		peer_bdaddr_type;
1372 	bdaddr_t	peer_bdaddr;
1373 	uint8_t		own_bdaddr_type;
1374 	uint16_t	min_interval;
1375 	uint16_t	max_interval;
1376 	uint16_t	latency;
1377 	uint16_t	supervision_timeout;
1378 	uint16_t	min_ce_length;
1379 	uint16_t	max_ce_length;
1380 } __attribute__ ((packed)) le_create_connection_cp;
1381 #define LE_CREATE_CONN_CP_SIZE 25
1382 
1383 #define OCF_LE_CREATE_CONN_CANCEL		0x000E
1384 
1385 #define OCF_LE_READ_WHITE_LIST_SIZE		0x000F
1386 typedef struct {
1387 	uint8_t		status;
1388 	uint8_t		size;
1389 } __attribute__ ((packed)) le_read_white_list_size_rp;
1390 #define LE_READ_WHITE_LIST_SIZE_RP_SIZE 2
1391 
1392 #define OCF_LE_CLEAR_WHITE_LIST			0x0010
1393 
1394 #define OCF_LE_ADD_DEVICE_TO_WHITE_LIST		0x0011
1395 typedef struct {
1396 	uint8_t		bdaddr_type;
1397 	bdaddr_t	bdaddr;
1398 } __attribute__ ((packed)) le_add_device_to_white_list_cp;
1399 #define LE_ADD_DEVICE_TO_WHITE_LIST_CP_SIZE 7
1400 
1401 #define OCF_LE_REMOVE_DEVICE_FROM_WHITE_LIST	0x0012
1402 typedef struct {
1403 	uint8_t		bdaddr_type;
1404 	bdaddr_t	bdaddr;
1405 } __attribute__ ((packed)) le_remove_device_from_white_list_cp;
1406 #define LE_REMOVE_DEVICE_FROM_WHITE_LIST_CP_SIZE 7
1407 
1408 #define OCF_LE_CONN_UPDATE			0x0013
1409 typedef struct {
1410 	uint16_t	handle;
1411 	uint16_t	min_interval;
1412 	uint16_t	max_interval;
1413 	uint16_t	latency;
1414 	uint16_t	supervision_timeout;
1415 	uint16_t	min_ce_length;
1416 	uint16_t	max_ce_length;
1417 } __attribute__ ((packed)) le_connection_update_cp;
1418 #define LE_CONN_UPDATE_CP_SIZE 14
1419 
1420 #define OCF_LE_SET_HOST_CHANNEL_CLASSIFICATION	0x0014
1421 typedef struct {
1422 	uint8_t		map[5];
1423 } __attribute__ ((packed)) le_set_host_channel_classification_cp;
1424 #define LE_SET_HOST_CHANNEL_CLASSIFICATION_CP_SIZE 5
1425 
1426 #define OCF_LE_READ_CHANNEL_MAP			0x0015
1427 typedef struct {
1428 	uint16_t	handle;
1429 } __attribute__ ((packed)) le_read_channel_map_cp;
1430 #define LE_READ_CHANNEL_MAP_CP_SIZE 2
1431 typedef struct {
1432 	uint8_t		status;
1433 	uint16_t	handle;
1434 	uint8_t		map[5];
1435 } __attribute__ ((packed)) le_read_channel_map_rp;
1436 #define LE_READ_CHANNEL_MAP_RP_SIZE 8
1437 
1438 #define OCF_LE_READ_REMOTE_USED_FEATURES	0x0016
1439 typedef struct {
1440 	uint16_t	handle;
1441 } __attribute__ ((packed)) le_read_remote_used_features_cp;
1442 #define LE_READ_REMOTE_USED_FEATURES_CP_SIZE 2
1443 
1444 #define OCF_LE_ENCRYPT				0x0017
1445 typedef struct {
1446 	uint8_t		key[16];
1447 	uint8_t		plaintext[16];
1448 } __attribute__ ((packed)) le_encrypt_cp;
1449 #define LE_ENCRYPT_CP_SIZE 32
1450 typedef struct {
1451 	uint8_t		status;
1452 	uint8_t		data[16];
1453 } __attribute__ ((packed)) le_encrypt_rp;
1454 #define LE_ENCRYPT_RP_SIZE 17
1455 
1456 #define OCF_LE_RAND				0x0018
1457 typedef struct {
1458 	uint8_t		status;
1459 	uint64_t	random;
1460 } __attribute__ ((packed)) le_rand_rp;
1461 #define LE_RAND_RP_SIZE 9
1462 
1463 #define OCF_LE_START_ENCRYPTION			0x0019
1464 typedef struct {
1465 	uint16_t	handle;
1466 	uint64_t	random;
1467 	uint16_t	diversifier;
1468 	uint8_t		key[16];
1469 } __attribute__ ((packed)) le_start_encryption_cp;
1470 #define LE_START_ENCRYPTION_CP_SIZE 28
1471 
1472 #define OCF_LE_LTK_REPLY			0x001A
1473 typedef struct {
1474 	uint16_t	handle;
1475 	uint8_t		key[16];
1476 } __attribute__ ((packed)) le_ltk_reply_cp;
1477 #define LE_LTK_REPLY_CP_SIZE 18
1478 typedef struct {
1479 	uint8_t		status;
1480 	uint16_t	handle;
1481 } __attribute__ ((packed)) le_ltk_reply_rp;
1482 #define LE_LTK_REPLY_RP_SIZE 3
1483 
1484 #define OCF_LE_LTK_NEG_REPLY			0x001B
1485 typedef struct {
1486 	uint16_t	handle;
1487 } __attribute__ ((packed)) le_ltk_neg_reply_cp;
1488 #define LE_LTK_NEG_REPLY_CP_SIZE 2
1489 typedef struct {
1490 	uint8_t		status;
1491 	uint16_t	handle;
1492 } __attribute__ ((packed)) le_ltk_neg_reply_rp;
1493 #define LE_LTK_NEG_REPLY_RP_SIZE 3
1494 
1495 #define OCF_LE_READ_SUPPORTED_STATES		0x001C
1496 typedef struct {
1497 	uint8_t		status;
1498 	uint64_t	states;
1499 } __attribute__ ((packed)) le_read_supported_states_rp;
1500 #define LE_READ_SUPPORTED_STATES_RP_SIZE 9
1501 
1502 #define OCF_LE_RECEIVER_TEST			0x001D
1503 typedef struct {
1504 	uint8_t		frequency;
1505 } __attribute__ ((packed)) le_receiver_test_cp;
1506 #define LE_RECEIVER_TEST_CP_SIZE 1
1507 
1508 #define OCF_LE_TRANSMITTER_TEST			0x001E
1509 typedef struct {
1510 	uint8_t		frequency;
1511 	uint8_t		length;
1512 	uint8_t		payload;
1513 } __attribute__ ((packed)) le_transmitter_test_cp;
1514 #define LE_TRANSMITTER_TEST_CP_SIZE 3
1515 
1516 #define OCF_LE_TEST_END				0x001F
1517 typedef struct {
1518 	uint8_t		status;
1519 	uint16_t	num_pkts;
1520 } __attribute__ ((packed)) le_test_end_rp;
1521 #define LE_TEST_END_RP_SIZE 3
1522 
1523 /* Vendor specific commands */
1524 #define OGF_VENDOR_CMD		0x3f
1525 
1526 /* ---- HCI Events ---- */
1527 
1528 #define EVT_INQUIRY_COMPLETE		0x01
1529 
1530 #define EVT_INQUIRY_RESULT		0x02
1531 typedef struct {
1532 	bdaddr_t	bdaddr;
1533 	uint8_t		pscan_rep_mode;
1534 	uint8_t		pscan_period_mode;
1535 	uint8_t		pscan_mode;
1536 	uint8_t		dev_class[3];
1537 	uint16_t	clock_offset;
1538 } __attribute__ ((packed)) inquiry_info;
1539 #define INQUIRY_INFO_SIZE 14
1540 
1541 #define EVT_CONN_COMPLETE		0x03
1542 typedef struct {
1543 	uint8_t		status;
1544 	uint16_t	handle;
1545 	bdaddr_t	bdaddr;
1546 	uint8_t		link_type;
1547 	uint8_t		encr_mode;
1548 } __attribute__ ((packed)) evt_conn_complete;
1549 #define EVT_CONN_COMPLETE_SIZE 13
1550 
1551 #define EVT_CONN_REQUEST		0x04
1552 typedef struct {
1553 	bdaddr_t	bdaddr;
1554 	uint8_t		dev_class[3];
1555 	uint8_t		link_type;
1556 } __attribute__ ((packed)) evt_conn_request;
1557 #define EVT_CONN_REQUEST_SIZE 10
1558 
1559 #define EVT_DISCONN_COMPLETE		0x05
1560 typedef struct {
1561 	uint8_t		status;
1562 	uint16_t	handle;
1563 	uint8_t		reason;
1564 } __attribute__ ((packed)) evt_disconn_complete;
1565 #define EVT_DISCONN_COMPLETE_SIZE 4
1566 
1567 #define EVT_AUTH_COMPLETE		0x06
1568 typedef struct {
1569 	uint8_t		status;
1570 	uint16_t	handle;
1571 } __attribute__ ((packed)) evt_auth_complete;
1572 #define EVT_AUTH_COMPLETE_SIZE 3
1573 
1574 #define EVT_REMOTE_NAME_REQ_COMPLETE	0x07
1575 typedef struct {
1576 	uint8_t		status;
1577 	bdaddr_t	bdaddr;
1578 	uint8_t		name[248];
1579 } __attribute__ ((packed)) evt_remote_name_req_complete;
1580 #define EVT_REMOTE_NAME_REQ_COMPLETE_SIZE 255
1581 
1582 #define EVT_ENCRYPT_CHANGE		0x08
1583 typedef struct {
1584 	uint8_t		status;
1585 	uint16_t	handle;
1586 	uint8_t		encrypt;
1587 } __attribute__ ((packed)) evt_encrypt_change;
1588 #define EVT_ENCRYPT_CHANGE_SIZE 5
1589 
1590 #define EVT_CHANGE_CONN_LINK_KEY_COMPLETE	0x09
1591 typedef struct {
1592 	uint8_t		status;
1593 	uint16_t	handle;
1594 }  __attribute__ ((packed)) evt_change_conn_link_key_complete;
1595 #define EVT_CHANGE_CONN_LINK_KEY_COMPLETE_SIZE 3
1596 
1597 #define EVT_MASTER_LINK_KEY_COMPLETE		0x0A
1598 typedef struct {
1599 	uint8_t		status;
1600 	uint16_t	handle;
1601 	uint8_t		key_flag;
1602 } __attribute__ ((packed)) evt_master_link_key_complete;
1603 #define EVT_MASTER_LINK_KEY_COMPLETE_SIZE 4
1604 
1605 #define EVT_READ_REMOTE_FEATURES_COMPLETE	0x0B
1606 typedef struct {
1607 	uint8_t		status;
1608 	uint16_t	handle;
1609 	uint8_t		features[8];
1610 } __attribute__ ((packed)) evt_read_remote_features_complete;
1611 #define EVT_READ_REMOTE_FEATURES_COMPLETE_SIZE 11
1612 
1613 #define EVT_READ_REMOTE_VERSION_COMPLETE	0x0C
1614 typedef struct {
1615 	uint8_t		status;
1616 	uint16_t	handle;
1617 	uint8_t		lmp_ver;
1618 	uint16_t	manufacturer;
1619 	uint16_t	lmp_subver;
1620 } __attribute__ ((packed)) evt_read_remote_version_complete;
1621 #define EVT_READ_REMOTE_VERSION_COMPLETE_SIZE 8
1622 
1623 #define EVT_QOS_SETUP_COMPLETE		0x0D
1624 typedef struct {
1625 	uint8_t		status;
1626 	uint16_t	handle;
1627 	uint8_t		flags;			/* Reserved */
1628 	hci_qos		qos;
1629 } __attribute__ ((packed)) evt_qos_setup_complete;
1630 #define EVT_QOS_SETUP_COMPLETE_SIZE (4 + HCI_QOS_CP_SIZE)
1631 
1632 #define EVT_CMD_COMPLETE 		0x0E
1633 typedef struct {
1634 	uint8_t		ncmd;
1635 	uint16_t	opcode;
1636 } __attribute__ ((packed)) evt_cmd_complete;
1637 #define EVT_CMD_COMPLETE_SIZE 3
1638 
1639 #define EVT_CMD_STATUS 			0x0F
1640 typedef struct {
1641 	uint8_t		status;
1642 	uint8_t		ncmd;
1643 	uint16_t	opcode;
1644 } __attribute__ ((packed)) evt_cmd_status;
1645 #define EVT_CMD_STATUS_SIZE 4
1646 
1647 #define EVT_HARDWARE_ERROR		0x10
1648 typedef struct {
1649 	uint8_t		code;
1650 } __attribute__ ((packed)) evt_hardware_error;
1651 #define EVT_HARDWARE_ERROR_SIZE 1
1652 
1653 #define EVT_FLUSH_OCCURRED		0x11
1654 typedef struct {
1655 	uint16_t	handle;
1656 } __attribute__ ((packed)) evt_flush_occured;
1657 #define EVT_FLUSH_OCCURRED_SIZE 2
1658 
1659 #define EVT_ROLE_CHANGE			0x12
1660 typedef struct {
1661 	uint8_t		status;
1662 	bdaddr_t	bdaddr;
1663 	uint8_t		role;
1664 } __attribute__ ((packed)) evt_role_change;
1665 #define EVT_ROLE_CHANGE_SIZE 8
1666 
1667 #define EVT_NUM_COMP_PKTS		0x13
1668 typedef struct {
1669 	uint8_t		num_hndl;
1670 	/* variable length part */
1671 } __attribute__ ((packed)) evt_num_comp_pkts;
1672 #define EVT_NUM_COMP_PKTS_SIZE 1
1673 
1674 #define EVT_MODE_CHANGE			0x14
1675 typedef struct {
1676 	uint8_t		status;
1677 	uint16_t	handle;
1678 	uint8_t		mode;
1679 	uint16_t	interval;
1680 } __attribute__ ((packed)) evt_mode_change;
1681 #define EVT_MODE_CHANGE_SIZE 6
1682 
1683 #define EVT_RETURN_LINK_KEYS		0x15
1684 typedef struct {
1685 	uint8_t		num_keys;
1686 	/* variable length part */
1687 } __attribute__ ((packed)) evt_return_link_keys;
1688 #define EVT_RETURN_LINK_KEYS_SIZE 1
1689 
1690 #define EVT_PIN_CODE_REQ		0x16
1691 typedef struct {
1692 	bdaddr_t	bdaddr;
1693 } __attribute__ ((packed)) evt_pin_code_req;
1694 #define EVT_PIN_CODE_REQ_SIZE 6
1695 
1696 #define EVT_LINK_KEY_REQ		0x17
1697 typedef struct {
1698 	bdaddr_t	bdaddr;
1699 } __attribute__ ((packed)) evt_link_key_req;
1700 #define EVT_LINK_KEY_REQ_SIZE 6
1701 
1702 #define EVT_LINK_KEY_NOTIFY		0x18
1703 typedef struct {
1704 	bdaddr_t	bdaddr;
1705 	uint8_t		link_key[16];
1706 	uint8_t		key_type;
1707 } __attribute__ ((packed)) evt_link_key_notify;
1708 #define EVT_LINK_KEY_NOTIFY_SIZE 23
1709 
1710 #define EVT_LOOPBACK_COMMAND		0x19
1711 
1712 #define EVT_DATA_BUFFER_OVERFLOW	0x1A
1713 typedef struct {
1714 	uint8_t		link_type;
1715 } __attribute__ ((packed)) evt_data_buffer_overflow;
1716 #define EVT_DATA_BUFFER_OVERFLOW_SIZE 1
1717 
1718 #define EVT_MAX_SLOTS_CHANGE		0x1B
1719 typedef struct {
1720 	uint16_t	handle;
1721 	uint8_t		max_slots;
1722 } __attribute__ ((packed)) evt_max_slots_change;
1723 #define EVT_MAX_SLOTS_CHANGE_SIZE 3
1724 
1725 #define EVT_READ_CLOCK_OFFSET_COMPLETE	0x1C
1726 typedef struct {
1727 	uint8_t		status;
1728 	uint16_t	handle;
1729 	uint16_t	clock_offset;
1730 } __attribute__ ((packed)) evt_read_clock_offset_complete;
1731 #define EVT_READ_CLOCK_OFFSET_COMPLETE_SIZE 5
1732 
1733 #define EVT_CONN_PTYPE_CHANGED		0x1D
1734 typedef struct {
1735 	uint8_t		status;
1736 	uint16_t	handle;
1737 	uint16_t	ptype;
1738 } __attribute__ ((packed)) evt_conn_ptype_changed;
1739 #define EVT_CONN_PTYPE_CHANGED_SIZE 5
1740 
1741 #define EVT_QOS_VIOLATION		0x1E
1742 typedef struct {
1743 	uint16_t	handle;
1744 } __attribute__ ((packed)) evt_qos_violation;
1745 #define EVT_QOS_VIOLATION_SIZE 2
1746 
1747 #define EVT_PSCAN_REP_MODE_CHANGE	0x20
1748 typedef struct {
1749 	bdaddr_t	bdaddr;
1750 	uint8_t		pscan_rep_mode;
1751 } __attribute__ ((packed)) evt_pscan_rep_mode_change;
1752 #define EVT_PSCAN_REP_MODE_CHANGE_SIZE 7
1753 
1754 #define EVT_FLOW_SPEC_COMPLETE		0x21
1755 typedef struct {
1756 	uint8_t		status;
1757 	uint16_t	handle;
1758 	uint8_t		flags;
1759 	uint8_t		direction;
1760 	hci_qos		qos;
1761 } __attribute__ ((packed)) evt_flow_spec_complete;
1762 #define EVT_FLOW_SPEC_COMPLETE_SIZE (5 + HCI_QOS_CP_SIZE)
1763 
1764 #define EVT_INQUIRY_RESULT_WITH_RSSI	0x22
1765 typedef struct {
1766 	bdaddr_t	bdaddr;
1767 	uint8_t		pscan_rep_mode;
1768 	uint8_t		pscan_period_mode;
1769 	uint8_t		dev_class[3];
1770 	uint16_t	clock_offset;
1771 	int8_t		rssi;
1772 } __attribute__ ((packed)) inquiry_info_with_rssi;
1773 #define INQUIRY_INFO_WITH_RSSI_SIZE 14
1774 typedef struct {
1775 	bdaddr_t	bdaddr;
1776 	uint8_t		pscan_rep_mode;
1777 	uint8_t		pscan_period_mode;
1778 	uint8_t		pscan_mode;
1779 	uint8_t		dev_class[3];
1780 	uint16_t	clock_offset;
1781 	int8_t		rssi;
1782 } __attribute__ ((packed)) inquiry_info_with_rssi_and_pscan_mode;
1783 #define INQUIRY_INFO_WITH_RSSI_AND_PSCAN_MODE_SIZE 15
1784 
1785 #define EVT_READ_REMOTE_EXT_FEATURES_COMPLETE	0x23
1786 typedef struct {
1787 	uint8_t		status;
1788 	uint16_t	handle;
1789 	uint8_t		page_num;
1790 	uint8_t		max_page_num;
1791 	uint8_t		features[8];
1792 } __attribute__ ((packed)) evt_read_remote_ext_features_complete;
1793 #define EVT_READ_REMOTE_EXT_FEATURES_COMPLETE_SIZE 13
1794 
1795 #define EVT_SYNC_CONN_COMPLETE		0x2C
1796 typedef struct {
1797 	uint8_t		status;
1798 	uint16_t	handle;
1799 	bdaddr_t	bdaddr;
1800 	uint8_t		link_type;
1801 	uint8_t		trans_interval;
1802 	uint8_t		retrans_window;
1803 	uint16_t	rx_pkt_len;
1804 	uint16_t	tx_pkt_len;
1805 	uint8_t		air_mode;
1806 } __attribute__ ((packed)) evt_sync_conn_complete;
1807 #define EVT_SYNC_CONN_COMPLETE_SIZE 17
1808 
1809 #define EVT_SYNC_CONN_CHANGED		0x2D
1810 typedef struct {
1811 	uint8_t		status;
1812 	uint16_t	handle;
1813 	uint8_t		trans_interval;
1814 	uint8_t		retrans_window;
1815 	uint16_t	rx_pkt_len;
1816 	uint16_t	tx_pkt_len;
1817 } __attribute__ ((packed)) evt_sync_conn_changed;
1818 #define EVT_SYNC_CONN_CHANGED_SIZE 9
1819 
1820 #define EVT_SNIFF_SUBRATING		0x2E
1821 typedef struct {
1822 	uint8_t		status;
1823 	uint16_t	handle;
1824 	uint16_t	max_tx_latency;
1825 	uint16_t	max_rx_latency;
1826 	uint16_t	min_remote_timeout;
1827 	uint16_t	min_local_timeout;
1828 } __attribute__ ((packed)) evt_sniff_subrating;
1829 #define EVT_SNIFF_SUBRATING_SIZE 11
1830 
1831 #define EVT_EXTENDED_INQUIRY_RESULT	0x2F
1832 typedef struct {
1833 	bdaddr_t	bdaddr;
1834 	uint8_t		pscan_rep_mode;
1835 	uint8_t		pscan_period_mode;
1836 	uint8_t		dev_class[3];
1837 	uint16_t	clock_offset;
1838 	int8_t		rssi;
1839 	uint8_t		data[240];
1840 } __attribute__ ((packed)) extended_inquiry_info;
1841 #define EXTENDED_INQUIRY_INFO_SIZE 254
1842 
1843 #define EVT_ENCRYPTION_KEY_REFRESH_COMPLETE	0x30
1844 typedef struct {
1845 	uint8_t		status;
1846 	uint16_t	handle;
1847 } __attribute__ ((packed)) evt_encryption_key_refresh_complete;
1848 #define EVT_ENCRYPTION_KEY_REFRESH_COMPLETE_SIZE 3
1849 
1850 #define EVT_IO_CAPABILITY_REQUEST	0x31
1851 typedef struct {
1852 	bdaddr_t	bdaddr;
1853 } __attribute__ ((packed)) evt_io_capability_request;
1854 #define EVT_IO_CAPABILITY_REQUEST_SIZE 6
1855 
1856 #define EVT_IO_CAPABILITY_RESPONSE	0x32
1857 typedef struct {
1858 	bdaddr_t	bdaddr;
1859 	uint8_t		capability;
1860 	uint8_t		oob_data;
1861 	uint8_t		authentication;
1862 } __attribute__ ((packed)) evt_io_capability_response;
1863 #define EVT_IO_CAPABILITY_RESPONSE_SIZE 9
1864 
1865 #define EVT_USER_CONFIRM_REQUEST	0x33
1866 typedef struct {
1867 	bdaddr_t	bdaddr;
1868 	uint32_t	passkey;
1869 } __attribute__ ((packed)) evt_user_confirm_request;
1870 #define EVT_USER_CONFIRM_REQUEST_SIZE 10
1871 
1872 #define EVT_USER_PASSKEY_REQUEST	0x34
1873 typedef struct {
1874 	bdaddr_t	bdaddr;
1875 } __attribute__ ((packed)) evt_user_passkey_request;
1876 #define EVT_USER_PASSKEY_REQUEST_SIZE 6
1877 
1878 #define EVT_REMOTE_OOB_DATA_REQUEST	0x35
1879 typedef struct {
1880 	bdaddr_t	bdaddr;
1881 } __attribute__ ((packed)) evt_remote_oob_data_request;
1882 #define EVT_REMOTE_OOB_DATA_REQUEST_SIZE 6
1883 
1884 #define EVT_SIMPLE_PAIRING_COMPLETE	0x36
1885 typedef struct {
1886 	uint8_t		status;
1887 	bdaddr_t	bdaddr;
1888 } __attribute__ ((packed)) evt_simple_pairing_complete;
1889 #define EVT_SIMPLE_PAIRING_COMPLETE_SIZE 7
1890 
1891 #define EVT_LINK_SUPERVISION_TIMEOUT_CHANGED	0x38
1892 typedef struct {
1893 	uint16_t	handle;
1894 	uint16_t	timeout;
1895 } __attribute__ ((packed)) evt_link_supervision_timeout_changed;
1896 #define EVT_LINK_SUPERVISION_TIMEOUT_CHANGED_SIZE 4
1897 
1898 #define EVT_ENHANCED_FLUSH_COMPLETE	0x39
1899 typedef struct {
1900 	uint16_t	handle;
1901 } __attribute__ ((packed)) evt_enhanced_flush_complete;
1902 #define EVT_ENHANCED_FLUSH_COMPLETE_SIZE 2
1903 
1904 #define EVT_USER_PASSKEY_NOTIFY		0x3B
1905 typedef struct {
1906 	bdaddr_t	bdaddr;
1907 	uint32_t	passkey;
1908 } __attribute__ ((packed)) evt_user_passkey_notify;
1909 #define EVT_USER_PASSKEY_NOTIFY_SIZE 10
1910 
1911 #define EVT_KEYPRESS_NOTIFY		0x3C
1912 typedef struct {
1913 	bdaddr_t	bdaddr;
1914 	uint8_t		type;
1915 } __attribute__ ((packed)) evt_keypress_notify;
1916 #define EVT_KEYPRESS_NOTIFY_SIZE 7
1917 
1918 #define EVT_REMOTE_HOST_FEATURES_NOTIFY	0x3D
1919 typedef struct {
1920 	bdaddr_t	bdaddr;
1921 	uint8_t		features[8];
1922 } __attribute__ ((packed)) evt_remote_host_features_notify;
1923 #define EVT_REMOTE_HOST_FEATURES_NOTIFY_SIZE 14
1924 
1925 #define EVT_LE_META_EVENT	0x3E
1926 typedef struct {
1927 	uint8_t		subevent;
1928 	uint8_t		data[0];
1929 } __attribute__ ((packed)) evt_le_meta_event;
1930 #define EVT_LE_META_EVENT_SIZE 1
1931 
1932 #define EVT_LE_CONN_COMPLETE	0x01
1933 typedef struct {
1934 	uint8_t		status;
1935 	uint16_t	handle;
1936 	uint8_t		role;
1937 	uint8_t		peer_bdaddr_type;
1938 	bdaddr_t	peer_bdaddr;
1939 	uint16_t	interval;
1940 	uint16_t	latency;
1941 	uint16_t	supervision_timeout;
1942 	uint8_t		master_clock_accuracy;
1943 } __attribute__ ((packed)) evt_le_connection_complete;
1944 #define EVT_LE_CONN_COMPLETE_SIZE 18
1945 
1946 #define EVT_LE_ADVERTISING_REPORT	0x02
1947 typedef struct {
1948 	uint8_t		evt_type;
1949 	uint8_t		bdaddr_type;
1950 	bdaddr_t	bdaddr;
1951 	uint8_t		length;
1952 	uint8_t		data[31];
1953 	uint8_t		rssi;
1954 } __attribute__ ((packed)) le_advertising_info;
1955 #define LE_ADVERTISING_INFO_SIZE 41
1956 
1957 #define EVT_LE_CONN_UPDATE_COMPLETE	0x03
1958 typedef struct {
1959 	uint8_t		status;
1960 	uint16_t	handle;
1961 	uint16_t	interval;
1962 	uint16_t	latency;
1963 	uint16_t	supervision_timeout;
1964 } __attribute__ ((packed)) evt_le_connection_update_complete;
1965 #define EVT_LE_CONN_UPDATE_COMPLETE_SIZE 9
1966 
1967 #define EVT_LE_READ_REMOTE_USED_FEATURES_COMPLETE	0x04
1968 typedef struct {
1969 	uint8_t		status;
1970 	uint16_t	handle;
1971 	uint8_t		features[8];
1972 } __attribute__ ((packed)) evt_le_read_remote_used_features_complete;
1973 #define EVT_LE_READ_REMOTE_USED_FEATURES_COMPLETE_SIZE 11
1974 
1975 #define EVT_LE_LTK_REQUEST	0x05
1976 typedef struct {
1977 	uint16_t	handle;
1978 	uint64_t	random;
1979 	uint16_t	diversifier;
1980 } __attribute__ ((packed)) evt_le_long_term_key_request;
1981 #define EVT_LE_LTK_REQUEST_SIZE 12
1982 
1983 #define EVT_TESTING			0xFE
1984 
1985 #define EVT_VENDOR			0xFF
1986 
1987 /* Internal events generated by BlueZ stack */
1988 #define EVT_STACK_INTERNAL		0xFD
1989 typedef struct {
1990 	uint16_t	type;
1991 	uint8_t		data[0];
1992 } __attribute__ ((packed)) evt_stack_internal;
1993 #define EVT_STACK_INTERNAL_SIZE 2
1994 
1995 #define EVT_SI_DEVICE	0x01
1996 typedef struct {
1997 	uint16_t	event;
1998 	uint16_t	dev_id;
1999 } __attribute__ ((packed)) evt_si_device;
2000 #define EVT_SI_DEVICE_SIZE 4
2001 
2002 /* --------  HCI Packet structures  -------- */
2003 #define HCI_TYPE_LEN	1
2004 
2005 typedef struct {
2006 	uint16_t	opcode;		/* OCF & OGF */
2007 	uint8_t		plen;
2008 } __attribute__ ((packed))	hci_command_hdr;
2009 #define HCI_COMMAND_HDR_SIZE 	3
2010 
2011 typedef struct {
2012 	uint8_t		evt;
2013 	uint8_t		plen;
2014 } __attribute__ ((packed))	hci_event_hdr;
2015 #define HCI_EVENT_HDR_SIZE 	2
2016 
2017 typedef struct {
2018 	uint16_t	handle;		/* Handle & Flags(PB, BC) */
2019 	uint16_t	dlen;
2020 } __attribute__ ((packed))	hci_acl_hdr;
2021 #define HCI_ACL_HDR_SIZE 	4
2022 
2023 typedef struct {
2024 	uint16_t	handle;
2025 	uint8_t		dlen;
2026 } __attribute__ ((packed))	hci_sco_hdr;
2027 #define HCI_SCO_HDR_SIZE 	3
2028 
2029 typedef struct {
2030 	uint16_t	device;
2031 	uint16_t	type;
2032 	uint16_t	plen;
2033 } __attribute__ ((packed))	hci_msg_hdr;
2034 #define HCI_MSG_HDR_SIZE	6
2035 
2036 /* Command opcode pack/unpack */
2037 #define cmd_opcode_pack(ogf, ocf)	(uint16_t)((ocf & 0x03ff)|(ogf << 10))
2038 #define cmd_opcode_ogf(op)		(op >> 10)
2039 #define cmd_opcode_ocf(op)		(op & 0x03ff)
2040 
2041 /* ACL handle and flags pack/unpack */
2042 #define acl_handle_pack(h, f)	(uint16_t)((h & 0x0fff)|(f << 12))
2043 #define acl_handle(h)		(h & 0x0fff)
2044 #define acl_flags(h)		(h >> 12)
2045 
2046 #endif /* _NO_HCI_DEFS */
2047 
2048 /* HCI Socket options */
2049 #define HCI_DATA_DIR	1
2050 #define HCI_FILTER	2
2051 #define HCI_TIME_STAMP	3
2052 
2053 /* HCI CMSG flags */
2054 #define HCI_CMSG_DIR	0x0001
2055 #define HCI_CMSG_TSTAMP	0x0002
2056 
2057 struct sockaddr_hci {
2058 	sa_family_t	hci_family;
2059 	unsigned short	hci_dev;
2060 };
2061 #define HCI_DEV_NONE	0xffff
2062 
2063 struct hci_filter {
2064 	uint32_t type_mask;
2065 	uint32_t event_mask[2];
2066 	uint16_t opcode;
2067 };
2068 
2069 #define HCI_FLT_TYPE_BITS	31
2070 #define HCI_FLT_EVENT_BITS	63
2071 #define HCI_FLT_OGF_BITS	63
2072 #define HCI_FLT_OCF_BITS	127
2073 
2074 /* Ioctl requests structures */
2075 struct hci_dev_stats {
2076 	uint32_t err_rx;
2077 	uint32_t err_tx;
2078 	uint32_t cmd_tx;
2079 	uint32_t evt_rx;
2080 	uint32_t acl_tx;
2081 	uint32_t acl_rx;
2082 	uint32_t sco_tx;
2083 	uint32_t sco_rx;
2084 	uint32_t byte_rx;
2085 	uint32_t byte_tx;
2086 };
2087 
2088 struct hci_dev_info {
2089 	uint16_t dev_id;
2090 	char     name[8];
2091 
2092 	bdaddr_t bdaddr;
2093 
2094 	uint32_t flags;
2095 	uint8_t  type;
2096 
2097 	uint8_t  features[8];
2098 
2099 	uint32_t pkt_type;
2100 	uint32_t link_policy;
2101 	uint32_t link_mode;
2102 
2103 	uint16_t acl_mtu;
2104 	uint16_t acl_pkts;
2105 	uint16_t sco_mtu;
2106 	uint16_t sco_pkts;
2107 
2108 	struct   hci_dev_stats stat;
2109 };
2110 
2111 struct hci_conn_info {
2112 	uint16_t handle;
2113 	bdaddr_t bdaddr;
2114 	uint8_t  type;
2115 	uint8_t	 out;
2116 	uint16_t state;
2117 	uint32_t link_mode;
2118 	uint32_t mtu;
2119 	uint32_t cnt;
2120 	uint32_t pkts;
2121 };
2122 
2123 struct hci_dev_req {
2124 	uint16_t dev_id;
2125 	uint32_t dev_opt;
2126 };
2127 
2128 struct hci_dev_list_req {
2129 	uint16_t dev_num;
2130 	struct hci_dev_req dev_req[0];	/* hci_dev_req structures */
2131 };
2132 
2133 struct hci_conn_list_req {
2134 	uint16_t dev_id;
2135 	uint16_t conn_num;
2136 	struct hci_conn_info conn_info[0];
2137 };
2138 
2139 struct hci_conn_info_req {
2140 	bdaddr_t bdaddr;
2141 	uint8_t  type;
2142 	struct hci_conn_info conn_info[0];
2143 };
2144 
2145 struct hci_auth_info_req {
2146 	bdaddr_t bdaddr;
2147 	uint8_t  type;
2148 };
2149 
2150 struct hci_inquiry_req {
2151 	uint16_t dev_id;
2152 	uint16_t flags;
2153 	uint8_t  lap[3];
2154 	uint8_t  length;
2155 	uint8_t  num_rsp;
2156 };
2157 #define IREQ_CACHE_FLUSH 0x0001
2158 
2159 #ifdef __cplusplus
2160 }
2161 #endif
2162 
2163 #endif /* __HCI_H */
2164