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#define HCI_LINK_KEY_SIZE	16
34#define HCI_AMP_LINK_KEY_SIZE	(2 * HCI_LINK_KEY_SIZE)
35
36#define HCI_MAX_AMP_ASSOC_SIZE	672
37
38#define HCI_MAX_CSB_DATA_SIZE	252
39
40/* HCI dev events */
41#define HCI_DEV_REG			1
42#define HCI_DEV_UNREG			2
43#define HCI_DEV_UP			3
44#define HCI_DEV_DOWN			4
45#define HCI_DEV_SUSPEND			5
46#define HCI_DEV_RESUME			6
47
48/* HCI notify events */
49#define HCI_NOTIFY_CONN_ADD		1
50#define HCI_NOTIFY_CONN_DEL		2
51#define HCI_NOTIFY_VOICE_SETTING	3
52
53/* HCI bus types */
54#define HCI_VIRTUAL	0
55#define HCI_USB		1
56#define HCI_PCCARD	2
57#define HCI_UART	3
58#define HCI_RS232	4
59#define HCI_PCI		5
60#define HCI_SDIO	6
61
62/* HCI controller types */
63#define HCI_BREDR	0x00
64#define HCI_AMP		0x01
65
66/* First BR/EDR Controller shall have ID = 0 */
67#define AMP_ID_BREDR	0x00
68
69/* AMP controller types */
70#define AMP_TYPE_BREDR	0x00
71#define AMP_TYPE_80211	0x01
72
73/* AMP controller status */
74#define AMP_STATUS_POWERED_DOWN			0x00
75#define AMP_STATUS_BLUETOOTH_ONLY		0x01
76#define AMP_STATUS_NO_CAPACITY			0x02
77#define AMP_STATUS_LOW_CAPACITY			0x03
78#define AMP_STATUS_MEDIUM_CAPACITY		0x04
79#define AMP_STATUS_HIGH_CAPACITY		0x05
80#define AMP_STATUS_FULL_CAPACITY		0x06
81
82/* HCI device quirks */
83enum {
84	/* When this quirk is set, the HCI Reset command is send when
85	 * closing the transport instead of when opening it.
86	 *
87	 * This quirk must be set before hci_register_dev is called.
88	 */
89	HCI_QUIRK_RESET_ON_CLOSE,
90
91	/* When this quirk is set, the device is turned into a raw-only
92	 * device and it will stay in unconfigured state.
93	 *
94	 * This quirk must be set before hci_register_dev is called.
95	 */
96	HCI_QUIRK_RAW_DEVICE,
97
98	/* When this quirk is set, the buffer sizes reported by
99	 * HCI Read Buffer Size command are corrected if invalid.
100	 *
101	 * This quirk must be set before hci_register_dev is called.
102	 */
103	HCI_QUIRK_FIXUP_BUFFER_SIZE,
104
105	/* When this quirk is set, then a controller that does not
106	 * indicate support for Inquiry Result with RSSI is assumed to
107	 * support it anyway. Some early Bluetooth 1.2 controllers had
108	 * wrongly configured local features that will require forcing
109	 * them to enable this mode. Getting RSSI information with the
110	 * inquiry responses is preferred since it allows for a better
111	 * user expierence.
112	 *
113	 * This quirk must be set before hci_register_dev is called.
114	 */
115	HCI_QUIRK_FIXUP_INQUIRY_MODE,
116
117	/* When this quirk is set, then the HCI Read Local Supported
118	 * Commands command is not supported. In general Bluetooth 1.2
119	 * and later controllers should support this command. However
120	 * some controllers indicate Bluetooth 1.2 support, but do
121	 * not support this command.
122	 *
123	 * This quirk must be set before hci_register_dev is called.
124	 */
125	HCI_QUIRK_BROKEN_LOCAL_COMMANDS,
126
127	/* When this quirk is set, then no stored link key handling
128	 * is performed. This is mainly due to the fact that the
129	 * HCI Delete Stored Link Key command is advertised, but
130	 * not supported.
131	 *
132	 * This quirk must be set before hci_register_dev is called.
133	 */
134	HCI_QUIRK_BROKEN_STORED_LINK_KEY,
135
136	/* When this quirk is set, an external configuration step
137	 * is required and will be indicated with the controller
138	 * configuation.
139	 *
140	 * This quirk can be set before hci_register_dev is called or
141	 * during the hdev->setup vendor callback.
142	 */
143	HCI_QUIRK_EXTERNAL_CONFIG,
144
145	/* When this quirk is set, the public Bluetooth address
146	 * initially reported by HCI Read BD Address command
147	 * is considered invalid. Controller configuration is
148	 * required before this device can be used.
149	 *
150	 * This quirk can be set before hci_register_dev is called or
151	 * during the hdev->setup vendor callback.
152	 */
153	HCI_QUIRK_INVALID_BDADDR,
154
155	/* When this quirk is set, the duplicate filtering during
156	 * scanning is based on Bluetooth devices addresses. To allow
157	 * RSSI based updates, restart scanning if needed.
158	 *
159	 * This quirk can be set before hci_register_dev is called or
160	 * during the hdev->setup vendor callback.
161	 */
162	HCI_QUIRK_STRICT_DUPLICATE_FILTER,
163
164	/* When this quirk is set, LE scan and BR/EDR inquiry is done
165	 * simultaneously, otherwise it's interleaved.
166	 *
167	 * This quirk can be set before hci_register_dev is called or
168	 * during the hdev->setup vendor callback.
169	 */
170	HCI_QUIRK_SIMULTANEOUS_DISCOVERY,
171};
172
173/* HCI device flags */
174enum {
175	HCI_UP,
176	HCI_INIT,
177	HCI_RUNNING,
178
179	HCI_PSCAN,
180	HCI_ISCAN,
181	HCI_AUTH,
182	HCI_ENCRYPT,
183	HCI_INQUIRY,
184
185	HCI_RAW,
186
187	HCI_RESET,
188};
189
190/* HCI socket flags */
191enum {
192	HCI_SOCK_TRUSTED,
193	HCI_MGMT_INDEX_EVENTS,
194	HCI_MGMT_UNCONF_INDEX_EVENTS,
195	HCI_MGMT_EXT_INDEX_EVENTS,
196	HCI_MGMT_GENERIC_EVENTS,
197	HCI_MGMT_OOB_DATA_EVENTS,
198};
199
200/*
201 * BR/EDR and/or LE controller flags: the flags defined here should represent
202 * states from the controller.
203 */
204enum {
205	HCI_SETUP,
206	HCI_CONFIG,
207	HCI_AUTO_OFF,
208	HCI_RFKILLED,
209	HCI_MGMT,
210	HCI_BONDABLE,
211	HCI_SERVICE_CACHE,
212	HCI_KEEP_DEBUG_KEYS,
213	HCI_USE_DEBUG_KEYS,
214	HCI_UNREGISTER,
215	HCI_UNCONFIGURED,
216	HCI_USER_CHANNEL,
217	HCI_EXT_CONFIGURED,
218	HCI_LE_ADV,
219	HCI_LE_SCAN,
220	HCI_SSP_ENABLED,
221	HCI_SC_ENABLED,
222	HCI_SC_ONLY,
223	HCI_PRIVACY,
224	HCI_RPA_EXPIRED,
225	HCI_RPA_RESOLVING,
226	HCI_HS_ENABLED,
227	HCI_LE_ENABLED,
228	HCI_ADVERTISING,
229	HCI_ADVERTISING_CONNECTABLE,
230	HCI_ADVERTISING_INSTANCE,
231	HCI_CONNECTABLE,
232	HCI_DISCOVERABLE,
233	HCI_LIMITED_DISCOVERABLE,
234	HCI_LINK_SECURITY,
235	HCI_PERIODIC_INQ,
236	HCI_FAST_CONNECTABLE,
237	HCI_BREDR_ENABLED,
238	HCI_LE_SCAN_INTERRUPTED,
239
240	HCI_DUT_MODE,
241	HCI_FORCE_BREDR_SMP,
242	HCI_FORCE_STATIC_ADDR,
243
244	__HCI_NUM_FLAGS,
245};
246
247/* HCI timeouts */
248#define HCI_DISCONN_TIMEOUT	msecs_to_jiffies(2000)	/* 2 seconds */
249#define HCI_PAIRING_TIMEOUT	msecs_to_jiffies(60000)	/* 60 seconds */
250#define HCI_INIT_TIMEOUT	msecs_to_jiffies(10000)	/* 10 seconds */
251#define HCI_CMD_TIMEOUT		msecs_to_jiffies(2000)	/* 2 seconds */
252#define HCI_ACL_TX_TIMEOUT	msecs_to_jiffies(45000)	/* 45 seconds */
253#define HCI_AUTO_OFF_TIMEOUT	msecs_to_jiffies(2000)	/* 2 seconds */
254#define HCI_POWER_OFF_TIMEOUT	msecs_to_jiffies(5000)	/* 5 seconds */
255#define HCI_LE_CONN_TIMEOUT	msecs_to_jiffies(20000)	/* 20 seconds */
256#define HCI_LE_AUTOCONN_TIMEOUT	msecs_to_jiffies(2000)	/* 2 seconds */
257
258/* HCI data types */
259#define HCI_COMMAND_PKT		0x01
260#define HCI_ACLDATA_PKT		0x02
261#define HCI_SCODATA_PKT		0x03
262#define HCI_EVENT_PKT		0x04
263#define HCI_VENDOR_PKT		0xff
264
265/* HCI packet types */
266#define HCI_DM1		0x0008
267#define HCI_DM3		0x0400
268#define HCI_DM5		0x4000
269#define HCI_DH1		0x0010
270#define HCI_DH3		0x0800
271#define HCI_DH5		0x8000
272
273#define HCI_HV1		0x0020
274#define HCI_HV2		0x0040
275#define HCI_HV3		0x0080
276
277#define SCO_PTYPE_MASK	(HCI_HV1 | HCI_HV2 | HCI_HV3)
278#define ACL_PTYPE_MASK	(~SCO_PTYPE_MASK)
279
280/* eSCO packet types */
281#define ESCO_HV1	0x0001
282#define ESCO_HV2	0x0002
283#define ESCO_HV3	0x0004
284#define ESCO_EV3	0x0008
285#define ESCO_EV4	0x0010
286#define ESCO_EV5	0x0020
287#define ESCO_2EV3	0x0040
288#define ESCO_3EV3	0x0080
289#define ESCO_2EV5	0x0100
290#define ESCO_3EV5	0x0200
291
292#define SCO_ESCO_MASK  (ESCO_HV1 | ESCO_HV2 | ESCO_HV3)
293#define EDR_ESCO_MASK  (ESCO_2EV3 | ESCO_3EV3 | ESCO_2EV5 | ESCO_3EV5)
294
295/* ACL flags */
296#define ACL_START_NO_FLUSH	0x00
297#define ACL_CONT		0x01
298#define ACL_START		0x02
299#define ACL_COMPLETE		0x03
300#define ACL_ACTIVE_BCAST	0x04
301#define ACL_PICO_BCAST		0x08
302
303/* Baseband links */
304#define SCO_LINK	0x00
305#define ACL_LINK	0x01
306#define ESCO_LINK	0x02
307/* Low Energy links do not have defined link type. Use invented one */
308#define LE_LINK		0x80
309#define AMP_LINK	0x81
310#define INVALID_LINK	0xff
311
312/* LMP features */
313#define LMP_3SLOT	0x01
314#define LMP_5SLOT	0x02
315#define LMP_ENCRYPT	0x04
316#define LMP_SOFFSET	0x08
317#define LMP_TACCURACY	0x10
318#define LMP_RSWITCH	0x20
319#define LMP_HOLD	0x40
320#define LMP_SNIFF	0x80
321
322#define LMP_PARK	0x01
323#define LMP_RSSI	0x02
324#define LMP_QUALITY	0x04
325#define LMP_SCO		0x08
326#define LMP_HV2		0x10
327#define LMP_HV3		0x20
328#define LMP_ULAW	0x40
329#define LMP_ALAW	0x80
330
331#define LMP_CVSD	0x01
332#define LMP_PSCHEME	0x02
333#define LMP_PCONTROL	0x04
334#define LMP_TRANSPARENT	0x08
335
336#define LMP_RSSI_INQ	0x40
337#define LMP_ESCO	0x80
338
339#define LMP_EV4		0x01
340#define LMP_EV5		0x02
341#define LMP_NO_BREDR	0x20
342#define LMP_LE		0x40
343
344#define LMP_SNIFF_SUBR	0x02
345#define LMP_PAUSE_ENC	0x04
346#define LMP_EDR_ESCO_2M	0x20
347#define LMP_EDR_ESCO_3M	0x40
348#define LMP_EDR_3S_ESCO	0x80
349
350#define LMP_EXT_INQ	0x01
351#define LMP_SIMUL_LE_BR	0x02
352#define LMP_SIMPLE_PAIR	0x08
353#define LMP_NO_FLUSH	0x40
354
355#define LMP_LSTO	0x01
356#define LMP_INQ_TX_PWR	0x02
357#define LMP_EXTFEATURES	0x80
358
359/* Extended LMP features */
360#define LMP_CSB_MASTER	0x01
361#define LMP_CSB_SLAVE	0x02
362#define LMP_SYNC_TRAIN	0x04
363#define LMP_SYNC_SCAN	0x08
364
365#define LMP_SC		0x01
366#define LMP_PING	0x02
367
368/* Host features */
369#define LMP_HOST_SSP		0x01
370#define LMP_HOST_LE		0x02
371#define LMP_HOST_LE_BREDR	0x04
372#define LMP_HOST_SC		0x08
373
374/* LE features */
375#define HCI_LE_ENCRYPTION		0x01
376#define HCI_LE_CONN_PARAM_REQ_PROC	0x02
377#define HCI_LE_SLAVE_FEATURES		0x08
378#define HCI_LE_PING			0x10
379#define HCI_LE_DATA_LEN_EXT		0x20
380#define HCI_LE_EXT_SCAN_POLICY		0x80
381
382/* Connection modes */
383#define HCI_CM_ACTIVE	0x0000
384#define HCI_CM_HOLD	0x0001
385#define HCI_CM_SNIFF	0x0002
386#define HCI_CM_PARK	0x0003
387
388/* Link policies */
389#define HCI_LP_RSWITCH	0x0001
390#define HCI_LP_HOLD	0x0002
391#define HCI_LP_SNIFF	0x0004
392#define HCI_LP_PARK	0x0008
393
394/* Link modes */
395#define HCI_LM_ACCEPT	0x8000
396#define HCI_LM_MASTER	0x0001
397#define HCI_LM_AUTH	0x0002
398#define HCI_LM_ENCRYPT	0x0004
399#define HCI_LM_TRUSTED	0x0008
400#define HCI_LM_RELIABLE	0x0010
401#define HCI_LM_SECURE	0x0020
402#define HCI_LM_FIPS	0x0040
403
404/* Authentication types */
405#define HCI_AT_NO_BONDING		0x00
406#define HCI_AT_NO_BONDING_MITM		0x01
407#define HCI_AT_DEDICATED_BONDING	0x02
408#define HCI_AT_DEDICATED_BONDING_MITM	0x03
409#define HCI_AT_GENERAL_BONDING		0x04
410#define HCI_AT_GENERAL_BONDING_MITM	0x05
411
412/* I/O capabilities */
413#define HCI_IO_DISPLAY_ONLY	0x00
414#define HCI_IO_DISPLAY_YESNO	0x01
415#define HCI_IO_KEYBOARD_ONLY	0x02
416#define HCI_IO_NO_INPUT_OUTPUT	0x03
417
418/* Link Key types */
419#define HCI_LK_COMBINATION		0x00
420#define HCI_LK_LOCAL_UNIT		0x01
421#define HCI_LK_REMOTE_UNIT		0x02
422#define HCI_LK_DEBUG_COMBINATION	0x03
423#define HCI_LK_UNAUTH_COMBINATION_P192	0x04
424#define HCI_LK_AUTH_COMBINATION_P192	0x05
425#define HCI_LK_CHANGED_COMBINATION	0x06
426#define HCI_LK_UNAUTH_COMBINATION_P256	0x07
427#define HCI_LK_AUTH_COMBINATION_P256	0x08
428
429/* ---- HCI Error Codes ---- */
430#define HCI_ERROR_UNKNOWN_CONN_ID	0x02
431#define HCI_ERROR_AUTH_FAILURE		0x05
432#define HCI_ERROR_MEMORY_EXCEEDED	0x07
433#define HCI_ERROR_CONNECTION_TIMEOUT	0x08
434#define HCI_ERROR_REJ_LIMITED_RESOURCES	0x0d
435#define HCI_ERROR_REJ_BAD_ADDR		0x0f
436#define HCI_ERROR_REMOTE_USER_TERM	0x13
437#define HCI_ERROR_REMOTE_LOW_RESOURCES	0x14
438#define HCI_ERROR_REMOTE_POWER_OFF	0x15
439#define HCI_ERROR_LOCAL_HOST_TERM	0x16
440#define HCI_ERROR_PAIRING_NOT_ALLOWED	0x18
441#define HCI_ERROR_INVALID_LL_PARAMS	0x1E
442#define HCI_ERROR_ADVERTISING_TIMEOUT	0x3c
443
444/* Flow control modes */
445#define HCI_FLOW_CTL_MODE_PACKET_BASED	0x00
446#define HCI_FLOW_CTL_MODE_BLOCK_BASED	0x01
447
448/* The core spec defines 127 as the "not available" value */
449#define HCI_TX_POWER_INVALID	127
450#define HCI_RSSI_INVALID	127
451
452#define HCI_ROLE_MASTER		0x00
453#define HCI_ROLE_SLAVE		0x01
454
455/* Extended Inquiry Response field types */
456#define EIR_FLAGS		0x01 /* flags */
457#define EIR_UUID16_SOME		0x02 /* 16-bit UUID, more available */
458#define EIR_UUID16_ALL		0x03 /* 16-bit UUID, all listed */
459#define EIR_UUID32_SOME		0x04 /* 32-bit UUID, more available */
460#define EIR_UUID32_ALL		0x05 /* 32-bit UUID, all listed */
461#define EIR_UUID128_SOME	0x06 /* 128-bit UUID, more available */
462#define EIR_UUID128_ALL		0x07 /* 128-bit UUID, all listed */
463#define EIR_NAME_SHORT		0x08 /* shortened local name */
464#define EIR_NAME_COMPLETE	0x09 /* complete local name */
465#define EIR_TX_POWER		0x0A /* transmit power level */
466#define EIR_CLASS_OF_DEV	0x0D /* Class of Device */
467#define EIR_SSP_HASH_C192	0x0E /* Simple Pairing Hash C-192 */
468#define EIR_SSP_RAND_R192	0x0F /* Simple Pairing Randomizer R-192 */
469#define EIR_DEVICE_ID		0x10 /* device ID */
470#define EIR_APPEARANCE		0x19 /* Device appearance */
471#define EIR_LE_BDADDR		0x1B /* LE Bluetooth device address */
472#define EIR_LE_ROLE		0x1C /* LE role */
473#define EIR_SSP_HASH_C256	0x1D /* Simple Pairing Hash C-256 */
474#define EIR_SSP_RAND_R256	0x1E /* Simple Pairing Rand R-256 */
475#define EIR_LE_SC_CONFIRM	0x22 /* LE SC Confirmation Value */
476#define EIR_LE_SC_RANDOM	0x23 /* LE SC Random Value */
477
478/* Low Energy Advertising Flags */
479#define LE_AD_LIMITED		0x01 /* Limited Discoverable */
480#define LE_AD_GENERAL		0x02 /* General Discoverable */
481#define LE_AD_NO_BREDR		0x04 /* BR/EDR not supported */
482#define LE_AD_SIM_LE_BREDR_CTRL	0x08 /* Simultaneous LE & BR/EDR Controller */
483#define LE_AD_SIM_LE_BREDR_HOST	0x10 /* Simultaneous LE & BR/EDR Host */
484
485/* -----  HCI Commands ---- */
486#define HCI_OP_NOP			0x0000
487
488#define HCI_OP_INQUIRY			0x0401
489struct hci_cp_inquiry {
490	__u8     lap[3];
491	__u8     length;
492	__u8     num_rsp;
493} __packed;
494
495#define HCI_OP_INQUIRY_CANCEL		0x0402
496
497#define HCI_OP_PERIODIC_INQ		0x0403
498
499#define HCI_OP_EXIT_PERIODIC_INQ	0x0404
500
501#define HCI_OP_CREATE_CONN		0x0405
502struct hci_cp_create_conn {
503	bdaddr_t bdaddr;
504	__le16   pkt_type;
505	__u8     pscan_rep_mode;
506	__u8     pscan_mode;
507	__le16   clock_offset;
508	__u8     role_switch;
509} __packed;
510
511#define HCI_OP_DISCONNECT		0x0406
512struct hci_cp_disconnect {
513	__le16   handle;
514	__u8     reason;
515} __packed;
516
517#define HCI_OP_ADD_SCO			0x0407
518struct hci_cp_add_sco {
519	__le16   handle;
520	__le16   pkt_type;
521} __packed;
522
523#define HCI_OP_CREATE_CONN_CANCEL	0x0408
524struct hci_cp_create_conn_cancel {
525	bdaddr_t bdaddr;
526} __packed;
527
528#define HCI_OP_ACCEPT_CONN_REQ		0x0409
529struct hci_cp_accept_conn_req {
530	bdaddr_t bdaddr;
531	__u8     role;
532} __packed;
533
534#define HCI_OP_REJECT_CONN_REQ		0x040a
535struct hci_cp_reject_conn_req {
536	bdaddr_t bdaddr;
537	__u8     reason;
538} __packed;
539
540#define HCI_OP_LINK_KEY_REPLY		0x040b
541struct hci_cp_link_key_reply {
542	bdaddr_t bdaddr;
543	__u8     link_key[HCI_LINK_KEY_SIZE];
544} __packed;
545
546#define HCI_OP_LINK_KEY_NEG_REPLY	0x040c
547struct hci_cp_link_key_neg_reply {
548	bdaddr_t bdaddr;
549} __packed;
550
551#define HCI_OP_PIN_CODE_REPLY		0x040d
552struct hci_cp_pin_code_reply {
553	bdaddr_t bdaddr;
554	__u8     pin_len;
555	__u8     pin_code[16];
556} __packed;
557struct hci_rp_pin_code_reply {
558	__u8     status;
559	bdaddr_t bdaddr;
560} __packed;
561
562#define HCI_OP_PIN_CODE_NEG_REPLY	0x040e
563struct hci_cp_pin_code_neg_reply {
564	bdaddr_t bdaddr;
565} __packed;
566struct hci_rp_pin_code_neg_reply {
567	__u8     status;
568	bdaddr_t bdaddr;
569} __packed;
570
571#define HCI_OP_CHANGE_CONN_PTYPE	0x040f
572struct hci_cp_change_conn_ptype {
573	__le16   handle;
574	__le16   pkt_type;
575} __packed;
576
577#define HCI_OP_AUTH_REQUESTED		0x0411
578struct hci_cp_auth_requested {
579	__le16   handle;
580} __packed;
581
582#define HCI_OP_SET_CONN_ENCRYPT		0x0413
583struct hci_cp_set_conn_encrypt {
584	__le16   handle;
585	__u8     encrypt;
586} __packed;
587
588#define HCI_OP_CHANGE_CONN_LINK_KEY	0x0415
589struct hci_cp_change_conn_link_key {
590	__le16   handle;
591} __packed;
592
593#define HCI_OP_REMOTE_NAME_REQ		0x0419
594struct hci_cp_remote_name_req {
595	bdaddr_t bdaddr;
596	__u8     pscan_rep_mode;
597	__u8     pscan_mode;
598	__le16   clock_offset;
599} __packed;
600
601#define HCI_OP_REMOTE_NAME_REQ_CANCEL	0x041a
602struct hci_cp_remote_name_req_cancel {
603	bdaddr_t bdaddr;
604} __packed;
605
606#define HCI_OP_READ_REMOTE_FEATURES	0x041b
607struct hci_cp_read_remote_features {
608	__le16   handle;
609} __packed;
610
611#define HCI_OP_READ_REMOTE_EXT_FEATURES	0x041c
612struct hci_cp_read_remote_ext_features {
613	__le16   handle;
614	__u8     page;
615} __packed;
616
617#define HCI_OP_READ_REMOTE_VERSION	0x041d
618struct hci_cp_read_remote_version {
619	__le16   handle;
620} __packed;
621
622#define HCI_OP_READ_CLOCK_OFFSET	0x041f
623struct hci_cp_read_clock_offset {
624	__le16   handle;
625} __packed;
626
627#define HCI_OP_SETUP_SYNC_CONN		0x0428
628struct hci_cp_setup_sync_conn {
629	__le16   handle;
630	__le32   tx_bandwidth;
631	__le32   rx_bandwidth;
632	__le16   max_latency;
633	__le16   voice_setting;
634	__u8     retrans_effort;
635	__le16   pkt_type;
636} __packed;
637
638#define HCI_OP_ACCEPT_SYNC_CONN_REQ	0x0429
639struct hci_cp_accept_sync_conn_req {
640	bdaddr_t bdaddr;
641	__le32   tx_bandwidth;
642	__le32   rx_bandwidth;
643	__le16   max_latency;
644	__le16   content_format;
645	__u8     retrans_effort;
646	__le16   pkt_type;
647} __packed;
648
649#define HCI_OP_REJECT_SYNC_CONN_REQ	0x042a
650struct hci_cp_reject_sync_conn_req {
651	bdaddr_t bdaddr;
652	__u8     reason;
653} __packed;
654
655#define HCI_OP_IO_CAPABILITY_REPLY	0x042b
656struct hci_cp_io_capability_reply {
657	bdaddr_t bdaddr;
658	__u8     capability;
659	__u8     oob_data;
660	__u8     authentication;
661} __packed;
662
663#define HCI_OP_USER_CONFIRM_REPLY		0x042c
664struct hci_cp_user_confirm_reply {
665	bdaddr_t bdaddr;
666} __packed;
667struct hci_rp_user_confirm_reply {
668	__u8     status;
669	bdaddr_t bdaddr;
670} __packed;
671
672#define HCI_OP_USER_CONFIRM_NEG_REPLY	0x042d
673
674#define HCI_OP_USER_PASSKEY_REPLY		0x042e
675struct hci_cp_user_passkey_reply {
676	bdaddr_t bdaddr;
677	__le32	passkey;
678} __packed;
679
680#define HCI_OP_USER_PASSKEY_NEG_REPLY	0x042f
681
682#define HCI_OP_REMOTE_OOB_DATA_REPLY	0x0430
683struct hci_cp_remote_oob_data_reply {
684	bdaddr_t bdaddr;
685	__u8     hash[16];
686	__u8     rand[16];
687} __packed;
688
689#define HCI_OP_REMOTE_OOB_DATA_NEG_REPLY	0x0433
690struct hci_cp_remote_oob_data_neg_reply {
691	bdaddr_t bdaddr;
692} __packed;
693
694#define HCI_OP_IO_CAPABILITY_NEG_REPLY	0x0434
695struct hci_cp_io_capability_neg_reply {
696	bdaddr_t bdaddr;
697	__u8     reason;
698} __packed;
699
700#define HCI_OP_CREATE_PHY_LINK		0x0435
701struct hci_cp_create_phy_link {
702	__u8     phy_handle;
703	__u8     key_len;
704	__u8     key_type;
705	__u8     key[HCI_AMP_LINK_KEY_SIZE];
706} __packed;
707
708#define HCI_OP_ACCEPT_PHY_LINK		0x0436
709struct hci_cp_accept_phy_link {
710	__u8     phy_handle;
711	__u8     key_len;
712	__u8     key_type;
713	__u8     key[HCI_AMP_LINK_KEY_SIZE];
714} __packed;
715
716#define HCI_OP_DISCONN_PHY_LINK		0x0437
717struct hci_cp_disconn_phy_link {
718	__u8     phy_handle;
719	__u8     reason;
720} __packed;
721
722struct ext_flow_spec {
723	__u8       id;
724	__u8       stype;
725	__le16     msdu;
726	__le32     sdu_itime;
727	__le32     acc_lat;
728	__le32     flush_to;
729} __packed;
730
731#define HCI_OP_CREATE_LOGICAL_LINK	0x0438
732#define HCI_OP_ACCEPT_LOGICAL_LINK	0x0439
733struct hci_cp_create_accept_logical_link {
734	__u8                  phy_handle;
735	struct ext_flow_spec  tx_flow_spec;
736	struct ext_flow_spec  rx_flow_spec;
737} __packed;
738
739#define HCI_OP_DISCONN_LOGICAL_LINK	0x043a
740struct hci_cp_disconn_logical_link {
741	__le16   log_handle;
742} __packed;
743
744#define HCI_OP_LOGICAL_LINK_CANCEL	0x043b
745struct hci_cp_logical_link_cancel {
746	__u8     phy_handle;
747	__u8     flow_spec_id;
748} __packed;
749
750struct hci_rp_logical_link_cancel {
751	__u8     status;
752	__u8     phy_handle;
753	__u8     flow_spec_id;
754} __packed;
755
756#define HCI_OP_SET_CSB			0x0441
757struct hci_cp_set_csb {
758	__u8	enable;
759	__u8	lt_addr;
760	__u8	lpo_allowed;
761	__le16	packet_type;
762	__le16	interval_min;
763	__le16	interval_max;
764	__le16	csb_sv_tout;
765} __packed;
766struct hci_rp_set_csb {
767	__u8	status;
768	__u8	lt_addr;
769	__le16	interval;
770} __packed;
771
772#define HCI_OP_START_SYNC_TRAIN		0x0443
773
774#define HCI_OP_REMOTE_OOB_EXT_DATA_REPLY	0x0445
775struct hci_cp_remote_oob_ext_data_reply {
776	bdaddr_t bdaddr;
777	__u8     hash192[16];
778	__u8     rand192[16];
779	__u8     hash256[16];
780	__u8     rand256[16];
781} __packed;
782
783#define HCI_OP_SNIFF_MODE		0x0803
784struct hci_cp_sniff_mode {
785	__le16   handle;
786	__le16   max_interval;
787	__le16   min_interval;
788	__le16   attempt;
789	__le16   timeout;
790} __packed;
791
792#define HCI_OP_EXIT_SNIFF_MODE		0x0804
793struct hci_cp_exit_sniff_mode {
794	__le16   handle;
795} __packed;
796
797#define HCI_OP_ROLE_DISCOVERY		0x0809
798struct hci_cp_role_discovery {
799	__le16   handle;
800} __packed;
801struct hci_rp_role_discovery {
802	__u8     status;
803	__le16   handle;
804	__u8     role;
805} __packed;
806
807#define HCI_OP_SWITCH_ROLE		0x080b
808struct hci_cp_switch_role {
809	bdaddr_t bdaddr;
810	__u8     role;
811} __packed;
812
813#define HCI_OP_READ_LINK_POLICY		0x080c
814struct hci_cp_read_link_policy {
815	__le16   handle;
816} __packed;
817struct hci_rp_read_link_policy {
818	__u8     status;
819	__le16   handle;
820	__le16   policy;
821} __packed;
822
823#define HCI_OP_WRITE_LINK_POLICY	0x080d
824struct hci_cp_write_link_policy {
825	__le16   handle;
826	__le16   policy;
827} __packed;
828struct hci_rp_write_link_policy {
829	__u8     status;
830	__le16   handle;
831} __packed;
832
833#define HCI_OP_READ_DEF_LINK_POLICY	0x080e
834struct hci_rp_read_def_link_policy {
835	__u8     status;
836	__le16   policy;
837} __packed;
838
839#define HCI_OP_WRITE_DEF_LINK_POLICY	0x080f
840struct hci_cp_write_def_link_policy {
841	__le16   policy;
842} __packed;
843
844#define HCI_OP_SNIFF_SUBRATE		0x0811
845struct hci_cp_sniff_subrate {
846	__le16   handle;
847	__le16   max_latency;
848	__le16   min_remote_timeout;
849	__le16   min_local_timeout;
850} __packed;
851
852#define HCI_OP_SET_EVENT_MASK		0x0c01
853
854#define HCI_OP_RESET			0x0c03
855
856#define HCI_OP_SET_EVENT_FLT		0x0c05
857struct hci_cp_set_event_flt {
858	__u8     flt_type;
859	__u8     cond_type;
860	__u8     condition[0];
861} __packed;
862
863/* Filter types */
864#define HCI_FLT_CLEAR_ALL	0x00
865#define HCI_FLT_INQ_RESULT	0x01
866#define HCI_FLT_CONN_SETUP	0x02
867
868/* CONN_SETUP Condition types */
869#define HCI_CONN_SETUP_ALLOW_ALL	0x00
870#define HCI_CONN_SETUP_ALLOW_CLASS	0x01
871#define HCI_CONN_SETUP_ALLOW_BDADDR	0x02
872
873/* CONN_SETUP Conditions */
874#define HCI_CONN_SETUP_AUTO_OFF	0x01
875#define HCI_CONN_SETUP_AUTO_ON	0x02
876
877#define HCI_OP_READ_STORED_LINK_KEY	0x0c0d
878struct hci_cp_read_stored_link_key {
879	bdaddr_t bdaddr;
880	__u8     read_all;
881} __packed;
882struct hci_rp_read_stored_link_key {
883	__u8     status;
884	__u8     max_keys;
885	__u8     num_keys;
886} __packed;
887
888#define HCI_OP_DELETE_STORED_LINK_KEY	0x0c12
889struct hci_cp_delete_stored_link_key {
890	bdaddr_t bdaddr;
891	__u8     delete_all;
892} __packed;
893struct hci_rp_delete_stored_link_key {
894	__u8     status;
895	__u8     num_keys;
896} __packed;
897
898#define HCI_MAX_NAME_LENGTH		248
899
900#define HCI_OP_WRITE_LOCAL_NAME		0x0c13
901struct hci_cp_write_local_name {
902	__u8     name[HCI_MAX_NAME_LENGTH];
903} __packed;
904
905#define HCI_OP_READ_LOCAL_NAME		0x0c14
906struct hci_rp_read_local_name {
907	__u8     status;
908	__u8     name[HCI_MAX_NAME_LENGTH];
909} __packed;
910
911#define HCI_OP_WRITE_CA_TIMEOUT		0x0c16
912
913#define HCI_OP_WRITE_PG_TIMEOUT		0x0c18
914
915#define HCI_OP_WRITE_SCAN_ENABLE	0x0c1a
916	#define SCAN_DISABLED		0x00
917	#define SCAN_INQUIRY		0x01
918	#define SCAN_PAGE		0x02
919
920#define HCI_OP_READ_AUTH_ENABLE		0x0c1f
921
922#define HCI_OP_WRITE_AUTH_ENABLE	0x0c20
923	#define AUTH_DISABLED		0x00
924	#define AUTH_ENABLED		0x01
925
926#define HCI_OP_READ_ENCRYPT_MODE	0x0c21
927
928#define HCI_OP_WRITE_ENCRYPT_MODE	0x0c22
929	#define ENCRYPT_DISABLED	0x00
930	#define ENCRYPT_P2P		0x01
931	#define ENCRYPT_BOTH		0x02
932
933#define HCI_OP_READ_CLASS_OF_DEV	0x0c23
934struct hci_rp_read_class_of_dev {
935	__u8     status;
936	__u8     dev_class[3];
937} __packed;
938
939#define HCI_OP_WRITE_CLASS_OF_DEV	0x0c24
940struct hci_cp_write_class_of_dev {
941	__u8     dev_class[3];
942} __packed;
943
944#define HCI_OP_READ_VOICE_SETTING	0x0c25
945struct hci_rp_read_voice_setting {
946	__u8     status;
947	__le16   voice_setting;
948} __packed;
949
950#define HCI_OP_WRITE_VOICE_SETTING	0x0c26
951struct hci_cp_write_voice_setting {
952	__le16   voice_setting;
953} __packed;
954
955#define HCI_OP_HOST_BUFFER_SIZE		0x0c33
956struct hci_cp_host_buffer_size {
957	__le16   acl_mtu;
958	__u8     sco_mtu;
959	__le16   acl_max_pkt;
960	__le16   sco_max_pkt;
961} __packed;
962
963#define HCI_OP_READ_NUM_SUPPORTED_IAC	0x0c38
964struct hci_rp_read_num_supported_iac {
965	__u8	status;
966	__u8	num_iac;
967} __packed;
968
969#define HCI_OP_READ_CURRENT_IAC_LAP	0x0c39
970
971#define HCI_OP_WRITE_CURRENT_IAC_LAP	0x0c3a
972struct hci_cp_write_current_iac_lap {
973	__u8	num_iac;
974	__u8	iac_lap[6];
975} __packed;
976
977#define HCI_OP_WRITE_INQUIRY_MODE	0x0c45
978
979#define HCI_MAX_EIR_LENGTH		240
980
981#define HCI_OP_WRITE_EIR		0x0c52
982struct hci_cp_write_eir {
983	__u8	fec;
984	__u8	data[HCI_MAX_EIR_LENGTH];
985} __packed;
986
987#define HCI_OP_READ_SSP_MODE		0x0c55
988struct hci_rp_read_ssp_mode {
989	__u8     status;
990	__u8     mode;
991} __packed;
992
993#define HCI_OP_WRITE_SSP_MODE		0x0c56
994struct hci_cp_write_ssp_mode {
995	__u8     mode;
996} __packed;
997
998#define HCI_OP_READ_LOCAL_OOB_DATA		0x0c57
999struct hci_rp_read_local_oob_data {
1000	__u8     status;
1001	__u8     hash[16];
1002	__u8     rand[16];
1003} __packed;
1004
1005#define HCI_OP_READ_INQ_RSP_TX_POWER	0x0c58
1006struct hci_rp_read_inq_rsp_tx_power {
1007	__u8     status;
1008	__s8     tx_power;
1009} __packed;
1010
1011#define HCI_OP_SET_EVENT_MASK_PAGE_2	0x0c63
1012
1013#define HCI_OP_READ_LOCATION_DATA	0x0c64
1014
1015#define HCI_OP_READ_FLOW_CONTROL_MODE	0x0c66
1016struct hci_rp_read_flow_control_mode {
1017	__u8     status;
1018	__u8     mode;
1019} __packed;
1020
1021#define HCI_OP_WRITE_LE_HOST_SUPPORTED	0x0c6d
1022struct hci_cp_write_le_host_supported {
1023	__u8	le;
1024	__u8	simul;
1025} __packed;
1026
1027#define HCI_OP_SET_RESERVED_LT_ADDR	0x0c74
1028struct hci_cp_set_reserved_lt_addr {
1029	__u8	lt_addr;
1030} __packed;
1031struct hci_rp_set_reserved_lt_addr {
1032	__u8	status;
1033	__u8	lt_addr;
1034} __packed;
1035
1036#define HCI_OP_DELETE_RESERVED_LT_ADDR	0x0c75
1037struct hci_cp_delete_reserved_lt_addr {
1038	__u8	lt_addr;
1039} __packed;
1040struct hci_rp_delete_reserved_lt_addr {
1041	__u8	status;
1042	__u8	lt_addr;
1043} __packed;
1044
1045#define HCI_OP_SET_CSB_DATA		0x0c76
1046struct hci_cp_set_csb_data {
1047	__u8	lt_addr;
1048	__u8	fragment;
1049	__u8	data_length;
1050	__u8	data[HCI_MAX_CSB_DATA_SIZE];
1051} __packed;
1052struct hci_rp_set_csb_data {
1053	__u8	status;
1054	__u8	lt_addr;
1055} __packed;
1056
1057#define HCI_OP_READ_SYNC_TRAIN_PARAMS	0x0c77
1058
1059#define HCI_OP_WRITE_SYNC_TRAIN_PARAMS	0x0c78
1060struct hci_cp_write_sync_train_params {
1061	__le16	interval_min;
1062	__le16	interval_max;
1063	__le32	sync_train_tout;
1064	__u8	service_data;
1065} __packed;
1066struct hci_rp_write_sync_train_params {
1067	__u8	status;
1068	__le16	sync_train_int;
1069} __packed;
1070
1071#define HCI_OP_READ_SC_SUPPORT		0x0c79
1072struct hci_rp_read_sc_support {
1073	__u8	status;
1074	__u8	support;
1075} __packed;
1076
1077#define HCI_OP_WRITE_SC_SUPPORT		0x0c7a
1078struct hci_cp_write_sc_support {
1079	__u8	support;
1080} __packed;
1081
1082#define HCI_OP_READ_LOCAL_OOB_EXT_DATA	0x0c7d
1083struct hci_rp_read_local_oob_ext_data {
1084	__u8     status;
1085	__u8     hash192[16];
1086	__u8     rand192[16];
1087	__u8     hash256[16];
1088	__u8     rand256[16];
1089} __packed;
1090
1091#define HCI_OP_READ_LOCAL_VERSION	0x1001
1092struct hci_rp_read_local_version {
1093	__u8     status;
1094	__u8     hci_ver;
1095	__le16   hci_rev;
1096	__u8     lmp_ver;
1097	__le16   manufacturer;
1098	__le16   lmp_subver;
1099} __packed;
1100
1101#define HCI_OP_READ_LOCAL_COMMANDS	0x1002
1102struct hci_rp_read_local_commands {
1103	__u8     status;
1104	__u8     commands[64];
1105} __packed;
1106
1107#define HCI_OP_READ_LOCAL_FEATURES	0x1003
1108struct hci_rp_read_local_features {
1109	__u8     status;
1110	__u8     features[8];
1111} __packed;
1112
1113#define HCI_OP_READ_LOCAL_EXT_FEATURES	0x1004
1114struct hci_cp_read_local_ext_features {
1115	__u8     page;
1116} __packed;
1117struct hci_rp_read_local_ext_features {
1118	__u8     status;
1119	__u8     page;
1120	__u8     max_page;
1121	__u8     features[8];
1122} __packed;
1123
1124#define HCI_OP_READ_BUFFER_SIZE		0x1005
1125struct hci_rp_read_buffer_size {
1126	__u8     status;
1127	__le16   acl_mtu;
1128	__u8     sco_mtu;
1129	__le16   acl_max_pkt;
1130	__le16   sco_max_pkt;
1131} __packed;
1132
1133#define HCI_OP_READ_BD_ADDR		0x1009
1134struct hci_rp_read_bd_addr {
1135	__u8     status;
1136	bdaddr_t bdaddr;
1137} __packed;
1138
1139#define HCI_OP_READ_DATA_BLOCK_SIZE	0x100a
1140struct hci_rp_read_data_block_size {
1141	__u8     status;
1142	__le16   max_acl_len;
1143	__le16   block_len;
1144	__le16   num_blocks;
1145} __packed;
1146
1147#define HCI_OP_READ_LOCAL_CODECS	0x100b
1148
1149#define HCI_OP_READ_PAGE_SCAN_ACTIVITY	0x0c1b
1150struct hci_rp_read_page_scan_activity {
1151	__u8     status;
1152	__le16   interval;
1153	__le16   window;
1154} __packed;
1155
1156#define HCI_OP_WRITE_PAGE_SCAN_ACTIVITY	0x0c1c
1157struct hci_cp_write_page_scan_activity {
1158	__le16   interval;
1159	__le16   window;
1160} __packed;
1161
1162#define HCI_OP_READ_TX_POWER		0x0c2d
1163struct hci_cp_read_tx_power {
1164	__le16   handle;
1165	__u8     type;
1166} __packed;
1167struct hci_rp_read_tx_power {
1168	__u8     status;
1169	__le16   handle;
1170	__s8     tx_power;
1171} __packed;
1172
1173#define HCI_OP_READ_PAGE_SCAN_TYPE	0x0c46
1174struct hci_rp_read_page_scan_type {
1175	__u8     status;
1176	__u8     type;
1177} __packed;
1178
1179#define HCI_OP_WRITE_PAGE_SCAN_TYPE	0x0c47
1180	#define PAGE_SCAN_TYPE_STANDARD		0x00
1181	#define PAGE_SCAN_TYPE_INTERLACED	0x01
1182
1183#define HCI_OP_READ_RSSI		0x1405
1184struct hci_cp_read_rssi {
1185	__le16   handle;
1186} __packed;
1187struct hci_rp_read_rssi {
1188	__u8     status;
1189	__le16   handle;
1190	__s8     rssi;
1191} __packed;
1192
1193#define HCI_OP_READ_CLOCK		0x1407
1194struct hci_cp_read_clock {
1195	__le16   handle;
1196	__u8     which;
1197} __packed;
1198struct hci_rp_read_clock {
1199	__u8     status;
1200	__le16   handle;
1201	__le32   clock;
1202	__le16   accuracy;
1203} __packed;
1204
1205#define HCI_OP_READ_LOCAL_AMP_INFO	0x1409
1206struct hci_rp_read_local_amp_info {
1207	__u8     status;
1208	__u8     amp_status;
1209	__le32   total_bw;
1210	__le32   max_bw;
1211	__le32   min_latency;
1212	__le32   max_pdu;
1213	__u8     amp_type;
1214	__le16   pal_cap;
1215	__le16   max_assoc_size;
1216	__le32   max_flush_to;
1217	__le32   be_flush_to;
1218} __packed;
1219
1220#define HCI_OP_READ_LOCAL_AMP_ASSOC	0x140a
1221struct hci_cp_read_local_amp_assoc {
1222	__u8     phy_handle;
1223	__le16   len_so_far;
1224	__le16   max_len;
1225} __packed;
1226struct hci_rp_read_local_amp_assoc {
1227	__u8     status;
1228	__u8     phy_handle;
1229	__le16   rem_len;
1230	__u8     frag[0];
1231} __packed;
1232
1233#define HCI_OP_WRITE_REMOTE_AMP_ASSOC	0x140b
1234struct hci_cp_write_remote_amp_assoc {
1235	__u8     phy_handle;
1236	__le16   len_so_far;
1237	__le16   rem_len;
1238	__u8     frag[0];
1239} __packed;
1240struct hci_rp_write_remote_amp_assoc {
1241	__u8     status;
1242	__u8     phy_handle;
1243} __packed;
1244
1245#define HCI_OP_GET_MWS_TRANSPORT_CONFIG	0x140c
1246
1247#define HCI_OP_ENABLE_DUT_MODE		0x1803
1248
1249#define HCI_OP_WRITE_SSP_DEBUG_MODE	0x1804
1250
1251#define HCI_OP_LE_SET_EVENT_MASK	0x2001
1252struct hci_cp_le_set_event_mask {
1253	__u8     mask[8];
1254} __packed;
1255
1256#define HCI_OP_LE_READ_BUFFER_SIZE	0x2002
1257struct hci_rp_le_read_buffer_size {
1258	__u8     status;
1259	__le16   le_mtu;
1260	__u8     le_max_pkt;
1261} __packed;
1262
1263#define HCI_OP_LE_READ_LOCAL_FEATURES	0x2003
1264struct hci_rp_le_read_local_features {
1265	__u8     status;
1266	__u8     features[8];
1267} __packed;
1268
1269#define HCI_OP_LE_SET_RANDOM_ADDR	0x2005
1270
1271#define HCI_OP_LE_SET_ADV_PARAM		0x2006
1272struct hci_cp_le_set_adv_param {
1273	__le16   min_interval;
1274	__le16   max_interval;
1275	__u8     type;
1276	__u8     own_address_type;
1277	__u8     direct_addr_type;
1278	bdaddr_t direct_addr;
1279	__u8     channel_map;
1280	__u8     filter_policy;
1281} __packed;
1282
1283#define HCI_OP_LE_READ_ADV_TX_POWER	0x2007
1284struct hci_rp_le_read_adv_tx_power {
1285	__u8	status;
1286	__s8	tx_power;
1287} __packed;
1288
1289#define HCI_MAX_AD_LENGTH		31
1290
1291#define HCI_OP_LE_SET_ADV_DATA		0x2008
1292struct hci_cp_le_set_adv_data {
1293	__u8	length;
1294	__u8	data[HCI_MAX_AD_LENGTH];
1295} __packed;
1296
1297#define HCI_OP_LE_SET_SCAN_RSP_DATA	0x2009
1298struct hci_cp_le_set_scan_rsp_data {
1299	__u8	length;
1300	__u8	data[HCI_MAX_AD_LENGTH];
1301} __packed;
1302
1303#define HCI_OP_LE_SET_ADV_ENABLE	0x200a
1304
1305#define LE_SCAN_PASSIVE			0x00
1306#define LE_SCAN_ACTIVE			0x01
1307
1308#define HCI_OP_LE_SET_SCAN_PARAM	0x200b
1309struct hci_cp_le_set_scan_param {
1310	__u8    type;
1311	__le16  interval;
1312	__le16  window;
1313	__u8    own_address_type;
1314	__u8    filter_policy;
1315} __packed;
1316
1317#define LE_SCAN_DISABLE			0x00
1318#define LE_SCAN_ENABLE			0x01
1319#define LE_SCAN_FILTER_DUP_DISABLE	0x00
1320#define LE_SCAN_FILTER_DUP_ENABLE	0x01
1321
1322#define HCI_OP_LE_SET_SCAN_ENABLE	0x200c
1323struct hci_cp_le_set_scan_enable {
1324	__u8     enable;
1325	__u8     filter_dup;
1326} __packed;
1327
1328#define HCI_LE_USE_PEER_ADDR		0x00
1329#define HCI_LE_USE_WHITELIST		0x01
1330
1331#define HCI_OP_LE_CREATE_CONN		0x200d
1332struct hci_cp_le_create_conn {
1333	__le16   scan_interval;
1334	__le16   scan_window;
1335	__u8     filter_policy;
1336	__u8     peer_addr_type;
1337	bdaddr_t peer_addr;
1338	__u8     own_address_type;
1339	__le16   conn_interval_min;
1340	__le16   conn_interval_max;
1341	__le16   conn_latency;
1342	__le16   supervision_timeout;
1343	__le16   min_ce_len;
1344	__le16   max_ce_len;
1345} __packed;
1346
1347#define HCI_OP_LE_CREATE_CONN_CANCEL	0x200e
1348
1349#define HCI_OP_LE_READ_WHITE_LIST_SIZE	0x200f
1350struct hci_rp_le_read_white_list_size {
1351	__u8	status;
1352	__u8	size;
1353} __packed;
1354
1355#define HCI_OP_LE_CLEAR_WHITE_LIST	0x2010
1356
1357#define HCI_OP_LE_ADD_TO_WHITE_LIST	0x2011
1358struct hci_cp_le_add_to_white_list {
1359	__u8     bdaddr_type;
1360	bdaddr_t bdaddr;
1361} __packed;
1362
1363#define HCI_OP_LE_DEL_FROM_WHITE_LIST	0x2012
1364struct hci_cp_le_del_from_white_list {
1365	__u8     bdaddr_type;
1366	bdaddr_t bdaddr;
1367} __packed;
1368
1369#define HCI_OP_LE_CONN_UPDATE		0x2013
1370struct hci_cp_le_conn_update {
1371	__le16   handle;
1372	__le16   conn_interval_min;
1373	__le16   conn_interval_max;
1374	__le16   conn_latency;
1375	__le16   supervision_timeout;
1376	__le16   min_ce_len;
1377	__le16   max_ce_len;
1378} __packed;
1379
1380#define HCI_OP_LE_READ_REMOTE_FEATURES	0x2016
1381struct hci_cp_le_read_remote_features {
1382	__le16	 handle;
1383} __packed;
1384
1385#define HCI_OP_LE_START_ENC		0x2019
1386struct hci_cp_le_start_enc {
1387	__le16	handle;
1388	__le64	rand;
1389	__le16	ediv;
1390	__u8	ltk[16];
1391} __packed;
1392
1393#define HCI_OP_LE_LTK_REPLY		0x201a
1394struct hci_cp_le_ltk_reply {
1395	__le16	handle;
1396	__u8	ltk[16];
1397} __packed;
1398struct hci_rp_le_ltk_reply {
1399	__u8	status;
1400	__le16	handle;
1401} __packed;
1402
1403#define HCI_OP_LE_LTK_NEG_REPLY		0x201b
1404struct hci_cp_le_ltk_neg_reply {
1405	__le16	handle;
1406} __packed;
1407struct hci_rp_le_ltk_neg_reply {
1408	__u8	status;
1409	__le16	handle;
1410} __packed;
1411
1412#define HCI_OP_LE_READ_SUPPORTED_STATES	0x201c
1413struct hci_rp_le_read_supported_states {
1414	__u8	status;
1415	__u8	le_states[8];
1416} __packed;
1417
1418#define HCI_OP_LE_CONN_PARAM_REQ_REPLY	0x2020
1419struct hci_cp_le_conn_param_req_reply {
1420	__le16	handle;
1421	__le16	interval_min;
1422	__le16	interval_max;
1423	__le16	latency;
1424	__le16	timeout;
1425	__le16	min_ce_len;
1426	__le16	max_ce_len;
1427} __packed;
1428
1429#define HCI_OP_LE_CONN_PARAM_REQ_NEG_REPLY	0x2021
1430struct hci_cp_le_conn_param_req_neg_reply {
1431	__le16	handle;
1432	__u8	reason;
1433} __packed;
1434
1435#define HCI_OP_LE_SET_DATA_LEN		0x2022
1436struct hci_cp_le_set_data_len {
1437	__le16	handle;
1438	__le16	tx_len;
1439	__le16	tx_time;
1440} __packed;
1441struct hci_rp_le_set_data_len {
1442	__u8	status;
1443	__le16	handle;
1444} __packed;
1445
1446#define HCI_OP_LE_READ_DEF_DATA_LEN	0x2023
1447struct hci_rp_le_read_def_data_len {
1448	__u8	status;
1449	__le16	tx_len;
1450	__le16	tx_time;
1451} __packed;
1452
1453#define HCI_OP_LE_WRITE_DEF_DATA_LEN	0x2024
1454struct hci_cp_le_write_def_data_len {
1455	__le16	tx_len;
1456	__le16	tx_time;
1457} __packed;
1458
1459#define HCI_OP_LE_READ_MAX_DATA_LEN	0x202f
1460struct hci_rp_le_read_max_data_len {
1461	__u8	status;
1462	__le16	tx_len;
1463	__le16	tx_time;
1464	__le16	rx_len;
1465	__le16	rx_time;
1466} __packed;
1467
1468/* ---- HCI Events ---- */
1469#define HCI_EV_INQUIRY_COMPLETE		0x01
1470
1471#define HCI_EV_INQUIRY_RESULT		0x02
1472struct inquiry_info {
1473	bdaddr_t bdaddr;
1474	__u8     pscan_rep_mode;
1475	__u8     pscan_period_mode;
1476	__u8     pscan_mode;
1477	__u8     dev_class[3];
1478	__le16   clock_offset;
1479} __packed;
1480
1481#define HCI_EV_CONN_COMPLETE		0x03
1482struct hci_ev_conn_complete {
1483	__u8     status;
1484	__le16   handle;
1485	bdaddr_t bdaddr;
1486	__u8     link_type;
1487	__u8     encr_mode;
1488} __packed;
1489
1490#define HCI_EV_CONN_REQUEST		0x04
1491struct hci_ev_conn_request {
1492	bdaddr_t bdaddr;
1493	__u8     dev_class[3];
1494	__u8     link_type;
1495} __packed;
1496
1497#define HCI_EV_DISCONN_COMPLETE		0x05
1498struct hci_ev_disconn_complete {
1499	__u8     status;
1500	__le16   handle;
1501	__u8     reason;
1502} __packed;
1503
1504#define HCI_EV_AUTH_COMPLETE		0x06
1505struct hci_ev_auth_complete {
1506	__u8     status;
1507	__le16   handle;
1508} __packed;
1509
1510#define HCI_EV_REMOTE_NAME		0x07
1511struct hci_ev_remote_name {
1512	__u8     status;
1513	bdaddr_t bdaddr;
1514	__u8     name[HCI_MAX_NAME_LENGTH];
1515} __packed;
1516
1517#define HCI_EV_ENCRYPT_CHANGE		0x08
1518struct hci_ev_encrypt_change {
1519	__u8     status;
1520	__le16   handle;
1521	__u8     encrypt;
1522} __packed;
1523
1524#define HCI_EV_CHANGE_LINK_KEY_COMPLETE	0x09
1525struct hci_ev_change_link_key_complete {
1526	__u8     status;
1527	__le16   handle;
1528} __packed;
1529
1530#define HCI_EV_REMOTE_FEATURES		0x0b
1531struct hci_ev_remote_features {
1532	__u8     status;
1533	__le16   handle;
1534	__u8     features[8];
1535} __packed;
1536
1537#define HCI_EV_REMOTE_VERSION		0x0c
1538struct hci_ev_remote_version {
1539	__u8     status;
1540	__le16   handle;
1541	__u8     lmp_ver;
1542	__le16   manufacturer;
1543	__le16   lmp_subver;
1544} __packed;
1545
1546#define HCI_EV_QOS_SETUP_COMPLETE	0x0d
1547struct hci_qos {
1548	__u8     service_type;
1549	__u32    token_rate;
1550	__u32    peak_bandwidth;
1551	__u32    latency;
1552	__u32    delay_variation;
1553} __packed;
1554struct hci_ev_qos_setup_complete {
1555	__u8     status;
1556	__le16   handle;
1557	struct   hci_qos qos;
1558} __packed;
1559
1560#define HCI_EV_CMD_COMPLETE		0x0e
1561struct hci_ev_cmd_complete {
1562	__u8     ncmd;
1563	__le16   opcode;
1564} __packed;
1565
1566#define HCI_EV_CMD_STATUS		0x0f
1567struct hci_ev_cmd_status {
1568	__u8     status;
1569	__u8     ncmd;
1570	__le16   opcode;
1571} __packed;
1572
1573#define HCI_EV_HARDWARE_ERROR		0x10
1574struct hci_ev_hardware_error {
1575	__u8     code;
1576} __packed;
1577
1578#define HCI_EV_ROLE_CHANGE		0x12
1579struct hci_ev_role_change {
1580	__u8     status;
1581	bdaddr_t bdaddr;
1582	__u8     role;
1583} __packed;
1584
1585#define HCI_EV_NUM_COMP_PKTS		0x13
1586struct hci_comp_pkts_info {
1587	__le16   handle;
1588	__le16   count;
1589} __packed;
1590
1591struct hci_ev_num_comp_pkts {
1592	__u8     num_hndl;
1593	struct hci_comp_pkts_info handles[0];
1594} __packed;
1595
1596#define HCI_EV_MODE_CHANGE		0x14
1597struct hci_ev_mode_change {
1598	__u8     status;
1599	__le16   handle;
1600	__u8     mode;
1601	__le16   interval;
1602} __packed;
1603
1604#define HCI_EV_PIN_CODE_REQ		0x16
1605struct hci_ev_pin_code_req {
1606	bdaddr_t bdaddr;
1607} __packed;
1608
1609#define HCI_EV_LINK_KEY_REQ		0x17
1610struct hci_ev_link_key_req {
1611	bdaddr_t bdaddr;
1612} __packed;
1613
1614#define HCI_EV_LINK_KEY_NOTIFY		0x18
1615struct hci_ev_link_key_notify {
1616	bdaddr_t bdaddr;
1617	__u8     link_key[HCI_LINK_KEY_SIZE];
1618	__u8     key_type;
1619} __packed;
1620
1621#define HCI_EV_CLOCK_OFFSET		0x1c
1622struct hci_ev_clock_offset {
1623	__u8     status;
1624	__le16   handle;
1625	__le16   clock_offset;
1626} __packed;
1627
1628#define HCI_EV_PKT_TYPE_CHANGE		0x1d
1629struct hci_ev_pkt_type_change {
1630	__u8     status;
1631	__le16   handle;
1632	__le16   pkt_type;
1633} __packed;
1634
1635#define HCI_EV_PSCAN_REP_MODE		0x20
1636struct hci_ev_pscan_rep_mode {
1637	bdaddr_t bdaddr;
1638	__u8     pscan_rep_mode;
1639} __packed;
1640
1641#define HCI_EV_INQUIRY_RESULT_WITH_RSSI	0x22
1642struct inquiry_info_with_rssi {
1643	bdaddr_t bdaddr;
1644	__u8     pscan_rep_mode;
1645	__u8     pscan_period_mode;
1646	__u8     dev_class[3];
1647	__le16   clock_offset;
1648	__s8     rssi;
1649} __packed;
1650struct inquiry_info_with_rssi_and_pscan_mode {
1651	bdaddr_t bdaddr;
1652	__u8     pscan_rep_mode;
1653	__u8     pscan_period_mode;
1654	__u8     pscan_mode;
1655	__u8     dev_class[3];
1656	__le16   clock_offset;
1657	__s8     rssi;
1658} __packed;
1659
1660#define HCI_EV_REMOTE_EXT_FEATURES	0x23
1661struct hci_ev_remote_ext_features {
1662	__u8     status;
1663	__le16   handle;
1664	__u8     page;
1665	__u8     max_page;
1666	__u8     features[8];
1667} __packed;
1668
1669#define HCI_EV_SYNC_CONN_COMPLETE	0x2c
1670struct hci_ev_sync_conn_complete {
1671	__u8     status;
1672	__le16   handle;
1673	bdaddr_t bdaddr;
1674	__u8     link_type;
1675	__u8     tx_interval;
1676	__u8     retrans_window;
1677	__le16   rx_pkt_len;
1678	__le16   tx_pkt_len;
1679	__u8     air_mode;
1680} __packed;
1681
1682#define HCI_EV_SYNC_CONN_CHANGED	0x2d
1683struct hci_ev_sync_conn_changed {
1684	__u8     status;
1685	__le16   handle;
1686	__u8     tx_interval;
1687	__u8     retrans_window;
1688	__le16   rx_pkt_len;
1689	__le16   tx_pkt_len;
1690} __packed;
1691
1692#define HCI_EV_SNIFF_SUBRATE		0x2e
1693struct hci_ev_sniff_subrate {
1694	__u8     status;
1695	__le16   handle;
1696	__le16   max_tx_latency;
1697	__le16   max_rx_latency;
1698	__le16   max_remote_timeout;
1699	__le16   max_local_timeout;
1700} __packed;
1701
1702#define HCI_EV_EXTENDED_INQUIRY_RESULT	0x2f
1703struct extended_inquiry_info {
1704	bdaddr_t bdaddr;
1705	__u8     pscan_rep_mode;
1706	__u8     pscan_period_mode;
1707	__u8     dev_class[3];
1708	__le16   clock_offset;
1709	__s8     rssi;
1710	__u8     data[240];
1711} __packed;
1712
1713#define HCI_EV_KEY_REFRESH_COMPLETE	0x30
1714struct hci_ev_key_refresh_complete {
1715	__u8	status;
1716	__le16	handle;
1717} __packed;
1718
1719#define HCI_EV_IO_CAPA_REQUEST		0x31
1720struct hci_ev_io_capa_request {
1721	bdaddr_t bdaddr;
1722} __packed;
1723
1724#define HCI_EV_IO_CAPA_REPLY		0x32
1725struct hci_ev_io_capa_reply {
1726	bdaddr_t bdaddr;
1727	__u8     capability;
1728	__u8     oob_data;
1729	__u8     authentication;
1730} __packed;
1731
1732#define HCI_EV_USER_CONFIRM_REQUEST	0x33
1733struct hci_ev_user_confirm_req {
1734	bdaddr_t	bdaddr;
1735	__le32		passkey;
1736} __packed;
1737
1738#define HCI_EV_USER_PASSKEY_REQUEST	0x34
1739struct hci_ev_user_passkey_req {
1740	bdaddr_t	bdaddr;
1741} __packed;
1742
1743#define HCI_EV_REMOTE_OOB_DATA_REQUEST	0x35
1744struct hci_ev_remote_oob_data_request {
1745	bdaddr_t bdaddr;
1746} __packed;
1747
1748#define HCI_EV_SIMPLE_PAIR_COMPLETE	0x36
1749struct hci_ev_simple_pair_complete {
1750	__u8     status;
1751	bdaddr_t bdaddr;
1752} __packed;
1753
1754#define HCI_EV_USER_PASSKEY_NOTIFY	0x3b
1755struct hci_ev_user_passkey_notify {
1756	bdaddr_t	bdaddr;
1757	__le32		passkey;
1758} __packed;
1759
1760#define HCI_KEYPRESS_STARTED		0
1761#define HCI_KEYPRESS_ENTERED		1
1762#define HCI_KEYPRESS_ERASED		2
1763#define HCI_KEYPRESS_CLEARED		3
1764#define HCI_KEYPRESS_COMPLETED		4
1765
1766#define HCI_EV_KEYPRESS_NOTIFY		0x3c
1767struct hci_ev_keypress_notify {
1768	bdaddr_t	bdaddr;
1769	__u8		type;
1770} __packed;
1771
1772#define HCI_EV_REMOTE_HOST_FEATURES	0x3d
1773struct hci_ev_remote_host_features {
1774	bdaddr_t bdaddr;
1775	__u8     features[8];
1776} __packed;
1777
1778#define HCI_EV_LE_META			0x3e
1779struct hci_ev_le_meta {
1780	__u8     subevent;
1781} __packed;
1782
1783#define HCI_EV_PHY_LINK_COMPLETE	0x40
1784struct hci_ev_phy_link_complete {
1785	__u8     status;
1786	__u8     phy_handle;
1787} __packed;
1788
1789#define HCI_EV_CHANNEL_SELECTED		0x41
1790struct hci_ev_channel_selected {
1791	__u8     phy_handle;
1792} __packed;
1793
1794#define HCI_EV_DISCONN_PHY_LINK_COMPLETE	0x42
1795struct hci_ev_disconn_phy_link_complete {
1796	__u8     status;
1797	__u8     phy_handle;
1798	__u8     reason;
1799} __packed;
1800
1801#define HCI_EV_LOGICAL_LINK_COMPLETE		0x45
1802struct hci_ev_logical_link_complete {
1803	__u8     status;
1804	__le16   handle;
1805	__u8     phy_handle;
1806	__u8     flow_spec_id;
1807} __packed;
1808
1809#define HCI_EV_DISCONN_LOGICAL_LINK_COMPLETE	0x46
1810struct hci_ev_disconn_logical_link_complete {
1811	__u8     status;
1812	__le16   handle;
1813	__u8     reason;
1814} __packed;
1815
1816#define HCI_EV_NUM_COMP_BLOCKS		0x48
1817struct hci_comp_blocks_info {
1818	__le16   handle;
1819	__le16   pkts;
1820	__le16   blocks;
1821} __packed;
1822
1823struct hci_ev_num_comp_blocks {
1824	__le16   num_blocks;
1825	__u8     num_hndl;
1826	struct hci_comp_blocks_info handles[0];
1827} __packed;
1828
1829#define HCI_EV_SYNC_TRAIN_COMPLETE	0x4F
1830struct hci_ev_sync_train_complete {
1831	__u8	status;
1832} __packed;
1833
1834#define HCI_EV_SLAVE_PAGE_RESP_TIMEOUT	0x54
1835
1836#define HCI_EV_LE_CONN_COMPLETE		0x01
1837struct hci_ev_le_conn_complete {
1838	__u8     status;
1839	__le16   handle;
1840	__u8     role;
1841	__u8     bdaddr_type;
1842	bdaddr_t bdaddr;
1843	__le16   interval;
1844	__le16   latency;
1845	__le16   supervision_timeout;
1846	__u8     clk_accurancy;
1847} __packed;
1848
1849/* Advertising report event types */
1850#define LE_ADV_IND		0x00
1851#define LE_ADV_DIRECT_IND	0x01
1852#define LE_ADV_SCAN_IND		0x02
1853#define LE_ADV_NONCONN_IND	0x03
1854#define LE_ADV_SCAN_RSP		0x04
1855
1856#define ADDR_LE_DEV_PUBLIC	0x00
1857#define ADDR_LE_DEV_RANDOM	0x01
1858
1859#define HCI_EV_LE_ADVERTISING_REPORT	0x02
1860struct hci_ev_le_advertising_info {
1861	__u8	 evt_type;
1862	__u8	 bdaddr_type;
1863	bdaddr_t bdaddr;
1864	__u8	 length;
1865	__u8	 data[0];
1866} __packed;
1867
1868#define HCI_EV_LE_CONN_UPDATE_COMPLETE	0x03
1869struct hci_ev_le_conn_update_complete {
1870	__u8     status;
1871	__le16   handle;
1872	__le16   interval;
1873	__le16   latency;
1874	__le16   supervision_timeout;
1875} __packed;
1876
1877#define HCI_EV_LE_REMOTE_FEAT_COMPLETE	0x04
1878struct hci_ev_le_remote_feat_complete {
1879	__u8     status;
1880	__le16   handle;
1881	__u8     features[8];
1882} __packed;
1883
1884#define HCI_EV_LE_LTK_REQ		0x05
1885struct hci_ev_le_ltk_req {
1886	__le16	handle;
1887	__le64	rand;
1888	__le16	ediv;
1889} __packed;
1890
1891#define HCI_EV_LE_REMOTE_CONN_PARAM_REQ	0x06
1892struct hci_ev_le_remote_conn_param_req {
1893	__le16 handle;
1894	__le16 interval_min;
1895	__le16 interval_max;
1896	__le16 latency;
1897	__le16 timeout;
1898} __packed;
1899
1900#define HCI_EV_LE_DATA_LEN_CHANGE	0x07
1901struct hci_ev_le_data_len_change {
1902	__le16	handle;
1903	__le16	tx_len;
1904	__le16	tx_time;
1905	__le16	rx_len;
1906	__le16	rx_time;
1907} __packed;
1908
1909#define HCI_EV_LE_DIRECT_ADV_REPORT	0x0B
1910struct hci_ev_le_direct_adv_info {
1911	__u8	 evt_type;
1912	__u8	 bdaddr_type;
1913	bdaddr_t bdaddr;
1914	__u8	 direct_addr_type;
1915	bdaddr_t direct_addr;
1916	__s8	 rssi;
1917} __packed;
1918
1919/* Internal events generated by Bluetooth stack */
1920#define HCI_EV_STACK_INTERNAL	0xfd
1921struct hci_ev_stack_internal {
1922	__u16    type;
1923	__u8     data[0];
1924} __packed;
1925
1926#define HCI_EV_SI_DEVICE	0x01
1927struct hci_ev_si_device {
1928	__u16    event;
1929	__u16    dev_id;
1930} __packed;
1931
1932#define HCI_EV_SI_SECURITY	0x02
1933struct hci_ev_si_security {
1934	__u16    event;
1935	__u16    proto;
1936	__u16    subproto;
1937	__u8     incoming;
1938} __packed;
1939
1940/* ---- HCI Packet structures ---- */
1941#define HCI_COMMAND_HDR_SIZE 3
1942#define HCI_EVENT_HDR_SIZE   2
1943#define HCI_ACL_HDR_SIZE     4
1944#define HCI_SCO_HDR_SIZE     3
1945
1946struct hci_command_hdr {
1947	__le16	opcode;		/* OCF & OGF */
1948	__u8	plen;
1949} __packed;
1950
1951struct hci_event_hdr {
1952	__u8	evt;
1953	__u8	plen;
1954} __packed;
1955
1956struct hci_acl_hdr {
1957	__le16	handle;		/* Handle & Flags(PB, BC) */
1958	__le16	dlen;
1959} __packed;
1960
1961struct hci_sco_hdr {
1962	__le16	handle;
1963	__u8	dlen;
1964} __packed;
1965
1966static inline struct hci_event_hdr *hci_event_hdr(const struct sk_buff *skb)
1967{
1968	return (struct hci_event_hdr *) skb->data;
1969}
1970
1971static inline struct hci_acl_hdr *hci_acl_hdr(const struct sk_buff *skb)
1972{
1973	return (struct hci_acl_hdr *) skb->data;
1974}
1975
1976static inline struct hci_sco_hdr *hci_sco_hdr(const struct sk_buff *skb)
1977{
1978	return (struct hci_sco_hdr *) skb->data;
1979}
1980
1981/* Command opcode pack/unpack */
1982#define hci_opcode_pack(ogf, ocf)	((__u16) ((ocf & 0x03ff)|(ogf << 10)))
1983#define hci_opcode_ogf(op)		(op >> 10)
1984#define hci_opcode_ocf(op)		(op & 0x03ff)
1985
1986/* ACL handle and flags pack/unpack */
1987#define hci_handle_pack(h, f)	((__u16) ((h & 0x0fff)|(f << 12)))
1988#define hci_handle(h)		(h & 0x0fff)
1989#define hci_flags(h)		(h >> 12)
1990
1991#endif /* __HCI_H */
1992