Home | History | Annotate | Line # | Download | only in netbt
hci.h revision 1.21
      1 /*	$NetBSD: hci.h,v 1.21 2007/12/30 18:26:42 plunky Exp $	*/
      2 
      3 /*-
      4  * Copyright (c) 2005 Iain Hibbert.
      5  * Copyright (c) 2006 Itronix Inc.
      6  * All rights reserved.
      7  *
      8  * Redistribution and use in source and binary forms, with or without
      9  * modification, are permitted provided that the following conditions
     10  * are met:
     11  * 1. Redistributions of source code must retain the above copyright
     12  *    notice, this list of conditions and the following disclaimer.
     13  * 2. Redistributions in binary form must reproduce the above copyright
     14  *    notice, this list of conditions and the following disclaimer in the
     15  *    documentation and/or other materials provided with the distribution.
     16  * 3. The name of Itronix Inc. may not be used to endorse
     17  *    or promote products derived from this software without specific
     18  *    prior written permission.
     19  *
     20  * THIS SOFTWARE IS PROVIDED BY ITRONIX INC. ``AS IS'' AND
     21  * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED
     22  * TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
     23  * PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL ITRONIX INC. BE LIABLE FOR ANY
     24  * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
     25  * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
     26  * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
     27  * ON ANY THEORY OF LIABILITY, WHETHER IN
     28  * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
     29  * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
     30  * POSSIBILITY OF SUCH DAMAGE.
     31  */
     32 /*-
     33  * Copyright (c) 2001 Maksim Yevmenkin <m_evmenkin (at) yahoo.com>
     34  * All rights reserved.
     35  *
     36  * Redistribution and use in source and binary forms, with or without
     37  * modification, are permitted provided that the following conditions
     38  * are met:
     39  * 1. Redistributions of source code must retain the above copyright
     40  *    notice, this list of conditions and the following disclaimer.
     41  * 2. Redistributions in binary form must reproduce the above copyright
     42  *    notice, this list of conditions and the following disclaimer in the
     43  *    documentation and/or other materials provided with the distribution.
     44  *
     45  * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND
     46  * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
     47  * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
     48  * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE
     49  * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
     50  * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
     51  * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
     52  * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
     53  * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
     54  * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
     55  * SUCH DAMAGE.
     56  *
     57  * $Id: hci.h,v 1.21 2007/12/30 18:26:42 plunky Exp $
     58  * $FreeBSD: src/sys/netgraph/bluetooth/include/ng_hci.h,v 1.6 2005/01/07 01:45:43 imp Exp $
     59  */
     60 
     61 /*
     62  * This file contains everything that applications need to know from
     63  * Host Controller Interface (HCI). Information taken from Bluetooth
     64  * Core Specifications (v1.1 and v2.0)
     65  *
     66  * This file can be included by both kernel and userland applications.
     67  *
     68  * NOTE: Here and after Bluetooth device is called a "unit". Bluetooth
     69  *       specification refers to both devices and units. They are the
     70  *       same thing (I think), so to be consistent word "unit" will be
     71  *       used.
     72  */
     73 
     74 #ifndef _NETBT_HCI_H_
     75 #define _NETBT_HCI_H_
     76 
     77 #include <netbt/bluetooth.h>
     78 
     79 /**************************************************************************
     80  **************************************************************************
     81  **                   Common defines and types (HCI)
     82  **************************************************************************
     83  **************************************************************************/
     84 
     85 #define HCI_LAP_SIZE			3   /* unit LAP */
     86 #define HCI_KEY_SIZE			16  /* link key */
     87 #define HCI_PIN_SIZE			16  /* link PIN */
     88 #define HCI_EVENT_MASK_SIZE		8   /* event mask */
     89 #define HCI_CLASS_SIZE			3   /* unit class */
     90 #define HCI_FEATURES_SIZE		8   /* LMP features */
     91 #define HCI_UNIT_NAME_SIZE		248 /* unit name size */
     92 #define HCI_DEVNAME_SIZE		16  /* same as dv_xname */
     93 #define HCI_COMMANDS_SIZE		64  /* supported commands mask */
     94 
     95 /* HCI specification */
     96 #define HCI_SPEC_V10			0x00 /* v1.0 */
     97 #define HCI_SPEC_V11			0x01 /* v1.1 */
     98 #define HCI_SPEC_V12			0x02 /* v1.2 */
     99 #define HCI_SPEC_V20			0x03 /* v2.0 */
    100 /* 0x02 - 0xFF - reserved for future use */
    101 
    102 /* LMP features (and page 0 of extended features) */
    103 /* ------------------- byte 0 --------------------*/
    104 #define HCI_LMP_3SLOT			0x01
    105 #define HCI_LMP_5SLOT			0x02
    106 #define HCI_LMP_ENCRYPTION		0x04
    107 #define HCI_LMP_SLOT_OFFSET		0x08
    108 #define HCI_LMP_TIMIACCURACY		0x10
    109 #define HCI_LMP_ROLE_SWITCH		0x20
    110 #define HCI_LMP_HOLD_MODE		0x40
    111 #define HCI_LMP_SNIFF_MODE		0x80
    112 /* ------------------- byte 1 --------------------*/
    113 #define HCI_LMP_PARK_MODE		0x01
    114 #define HCI_LMP_RSSI			0x02
    115 #define HCI_LMP_CHANNEL_QUALITY		0x04
    116 #define HCI_LMP_SCO_LINK		0x08
    117 #define HCI_LMP_HV2_PKT			0x10
    118 #define HCI_LMP_HV3_PKT			0x20
    119 #define HCI_LMP_ULAW_LOG		0x40
    120 #define HCI_LMP_ALAW_LOG		0x80
    121 /* ------------------- byte 2 --------------------*/
    122 #define HCI_LMP_CVSD			0x01
    123 #define HCI_LMP_PAGISCHEME		0x02
    124 #define HCI_LMP_POWER_CONTROL		0x04
    125 #define HCI_LMP_TRANSPARENT_SCO		0x08
    126 #define HCI_LMP_FLOW_CONTROL_LAG0	0x10
    127 #define HCI_LMP_FLOW_CONTROL_LAG1	0x20
    128 #define HCI_LMP_FLOW_CONTROL_LAG2	0x40
    129 #define HCI_LMP_BC_ENCRYPTION		0x80
    130 /* ------------------- byte 3 --------------------*/
    131 /* reserved				0x01 */
    132 #define HCI_LMP_EDR_ACL_2MBPS		0x02
    133 #define HCI_LMP_EDR_ACL_3MBPS		0x04
    134 #define HCI_LMP_ENHANCED_ISCAN		0x08
    135 #define HCI_LMP_INTERLACED_ISCAN	0x10
    136 #define HCI_LMP_INTERLACED_PSCAN	0x20
    137 #define HCI_LMP_RSSI_INQUIRY		0x40
    138 #define HCI_LMP_EV3_PKT			0x80
    139 /* ------------------- byte 4 --------------------*/
    140 #define HCI_LMP_EV4_PKT			0x01
    141 #define HCI_LMP_EV5_PKT			0x02
    142 /* reserved				0x04 */
    143 #define HCI_LMP_AFH_CAPABLE_SLAVE	0x08
    144 #define HCI_LMP_AFH_CLASS_SLAVE		0x10
    145 /* reserved				0x20 */
    146 /* reserved				0x40 */
    147 #define HCI_LMP_3SLOT_EDR_ACL		0x80
    148 /* ------------------- byte 5 --------------------*/
    149 #define HCI_LMP_5SLOT_EDR_ACL		0x01
    150 /* reserved				0x02 */
    151 /* reserved				0x04 */
    152 #define HCI_LMP_AFH_CAPABLE_MASTER	0x08
    153 #define HCI_LMP_AFH_CLASS_MASTER	0x10
    154 #define HCI_LMP_EDR_eSCO_2MBPS		0x20
    155 #define HCI_LMP_EDR_eSCO_3MBPS		0x40
    156 #define HCI_LMP_3SLOT_EDR_eSCO		0x80
    157 /* ------------------- byte 6 --------------------*/
    158 /* reserved					  */
    159 /* ------------------- byte 7 --------------------*/
    160 #define HCI_LMP_EXTENDED_FEATURES	0x80
    161 
    162 /* Link types */
    163 #define HCI_LINK_SCO			0x00 /* Voice */
    164 #define HCI_LINK_ACL			0x01 /* Data */
    165 #define HCI_LINK_eSCO			0x02 /* eSCO */
    166 /* 0x03 - 0xFF - reserved for future use */
    167 
    168 /*
    169  * ACL/SCO packet type bits are set to enable the
    170  * packet type, except for 2MBPS and 3MBPS when they
    171  * are unset to enable the packet type.
    172  */
    173 /* ACL Packet types for "Create Connection" */
    174 #define HCI_PKT_2MBPS_DH1	0x0002
    175 #define HCI_PKT_3MBPS_DH1	0x0004
    176 #define HCI_PKT_DM1		0x0008
    177 #define HCI_PKT_DH1		0x0010
    178 #define HCI_PKT_2MBPS_DH3	0x0100
    179 #define HCI_PKT_3MBPS_DH3	0x0200
    180 #define HCI_PKT_DM3		0x0400
    181 #define HCI_PKT_DH3		0x0800
    182 #define HCI_PKT_2MBPS_DH5	0x1000
    183 #define HCI_PKT_3MBPS_DH5	0x2000
    184 #define HCI_PKT_DM5		0x4000
    185 #define HCI_PKT_DH5		0x8000
    186 
    187 /* SCO Packet types for "Setup Synchronous Connection" */
    188 #define HCI_PKT_HV1		0x0001
    189 #define HCI_PKT_HV2		0x0002
    190 #define HCI_PKT_HV3		0x0004
    191 #define HCI_PKT_EV3		0x0008
    192 #define HCI_PKT_EV4		0x0010
    193 #define HCI_PKT_EV5		0x0020
    194 #define HCI_PKT_2MBPS_EV3	0x0040
    195 #define HCI_PKT_3MBPS_EV3	0x0080
    196 #define HCI_PKT_2MBPS_EV5	0x0100
    197 #define HCI_PKT_3MBPS_EV5	0x0200
    198 
    199 /*
    200  * Connection modes/Unit modes
    201  *
    202  * This is confusing. It means that one of the units change its mode
    203  * for the specific connection. For example one connection was put on
    204  * hold (but i could be wrong :)
    205  */
    206 
    207 /* Page scan modes (are deprecated) */
    208 #define HCI_MANDATORY_PAGE_SCAN_MODE		0x00
    209 #define HCI_OPTIONAL_PAGE_SCAN_MODE1		0x01
    210 #define HCI_OPTIONAL_PAGE_SCAN_MODE2		0x02
    211 #define HCI_OPTIONAL_PAGE_SCAN_MODE3		0x03
    212 /* 0x04 - 0xFF - reserved for future use */
    213 
    214 /* Page scan repetition modes */
    215 #define HCI_SCAN_REP_MODE0			0x00
    216 #define HCI_SCAN_REP_MODE1			0x01
    217 #define HCI_SCAN_REP_MODE2			0x02
    218 /* 0x03 - 0xFF - reserved for future use */
    219 
    220 /* Page scan period modes */
    221 #define HCI_PAGE_SCAN_PERIOD_MODE0		0x00
    222 #define HCI_PAGE_SCAN_PERIOD_MODE1		0x01
    223 #define HCI_PAGE_SCAN_PERIOD_MODE2		0x02
    224 /* 0x03 - 0xFF - reserved for future use */
    225 
    226 /* Scan enable */
    227 #define HCI_NO_SCAN_ENABLE			0x00
    228 #define HCI_INQUIRY_SCAN_ENABLE			0x01
    229 #define HCI_PAGE_SCAN_ENABLE			0x02
    230 /* 0x04 - 0xFF - reserved for future use */
    231 
    232 /* Hold mode activities */
    233 #define HCI_HOLD_MODE_NO_CHANGE			0x00
    234 #define HCI_HOLD_MODE_SUSPEND_PAGE_SCAN		0x01
    235 #define HCI_HOLD_MODE_SUSPEND_INQUIRY_SCAN	0x02
    236 #define HCI_HOLD_MODE_SUSPEND_PERIOD_INQUIRY	0x04
    237 /* 0x08 - 0x80 - reserved for future use */
    238 
    239 /* Connection roles */
    240 #define HCI_ROLE_MASTER				0x00
    241 #define HCI_ROLE_SLAVE				0x01
    242 /* 0x02 - 0xFF - reserved for future use */
    243 
    244 /* Key flags */
    245 #define HCI_USE_SEMI_PERMANENT_LINK_KEYS	0x00
    246 #define HCI_USE_TEMPORARY_LINK_KEY		0x01
    247 /* 0x02 - 0xFF - reserved for future use */
    248 
    249 /* Pin types */
    250 #define HCI_PIN_TYPE_VARIABLE			0x00
    251 #define HCI_PIN_TYPE_FIXED			0x01
    252 
    253 /* Link key types */
    254 #define HCI_LINK_KEY_TYPE_COMBINATION_KEY	0x00
    255 #define HCI_LINK_KEY_TYPE_LOCAL_UNIT_KEY	0x01
    256 #define HCI_LINK_KEY_TYPE_REMOTE_UNIT_KEY	0x02
    257 /* 0x03 - 0xFF - reserved for future use */
    258 
    259 /* Encryption modes */
    260 #define HCI_ENCRYPTION_MODE_NONE		0x00
    261 #define HCI_ENCRYPTION_MODE_P2P			0x01
    262 #define HCI_ENCRYPTION_MODE_ALL			0x02
    263 /* 0x03 - 0xFF - reserved for future use */
    264 
    265 /* Quality of service types */
    266 #define HCI_SERVICE_TYPE_NO_TRAFFIC		0x00
    267 #define HCI_SERVICE_TYPE_BEST_EFFORT		0x01
    268 #define HCI_SERVICE_TYPE_GUARANTEED		0x02
    269 /* 0x03 - 0xFF - reserved for future use */
    270 
    271 /* Link policy settings */
    272 #define HCI_LINK_POLICY_DISABLE_ALL_LM_MODES	0x0000
    273 #define HCI_LINK_POLICY_ENABLE_ROLE_SWITCH	0x0001 /* Master/Slave switch */
    274 #define HCI_LINK_POLICY_ENABLE_HOLD_MODE	0x0002
    275 #define HCI_LINK_POLICY_ENABLE_SNIFF_MODE	0x0004
    276 #define HCI_LINK_POLICY_ENABLE_PARK_MODE	0x0008
    277 /* 0x0010 - 0x8000 - reserved for future use */
    278 
    279 /* Event masks */
    280 #define HCI_EVMSK_ALL				0x00000000ffffffff
    281 #define HCI_EVMSK_NONE				0x0000000000000000
    282 #define HCI_EVMSK_INQUIRY_COMPL			0x0000000000000001
    283 #define HCI_EVMSK_INQUIRY_RESULT		0x0000000000000002
    284 #define HCI_EVMSK_CON_COMPL			0x0000000000000004
    285 #define HCI_EVMSK_CON_REQ			0x0000000000000008
    286 #define HCI_EVMSK_DISCON_COMPL			0x0000000000000010
    287 #define HCI_EVMSK_AUTH_COMPL			0x0000000000000020
    288 #define HCI_EVMSK_REMOTE_NAME_REQ_COMPL		0x0000000000000040
    289 #define HCI_EVMSK_ENCRYPTION_CHANGE		0x0000000000000080
    290 #define HCI_EVMSK_CHANGE_CON_LINK_KEY_COMPL	0x0000000000000100
    291 #define HCI_EVMSK_MASTER_LINK_KEY_COMPL		0x0000000000000200
    292 #define HCI_EVMSK_READ_REMOTE_FEATURES_COMPL	0x0000000000000400
    293 #define HCI_EVMSK_READ_REMOTE_VER_INFO_COMPL	0x0000000000000800
    294 #define HCI_EVMSK_QOS_SETUP_COMPL		0x0000000000001000
    295 #define HCI_EVMSK_COMMAND_COMPL			0x0000000000002000
    296 #define HCI_EVMSK_COMMAND_STATUS		0x0000000000004000
    297 #define HCI_EVMSK_HARDWARE_ERROR		0x0000000000008000
    298 #define HCI_EVMSK_FLUSH_OCCUR			0x0000000000010000
    299 #define HCI_EVMSK_ROLE_CHANGE			0x0000000000020000
    300 #define HCI_EVMSK_NUM_COMPL_PKTS		0x0000000000040000
    301 #define HCI_EVMSK_MODE_CHANGE			0x0000000000080000
    302 #define HCI_EVMSK_RETURN_LINK_KEYS		0x0000000000100000
    303 #define HCI_EVMSK_PIN_CODE_REQ			0x0000000000200000
    304 #define HCI_EVMSK_LINK_KEY_REQ			0x0000000000400000
    305 #define HCI_EVMSK_LINK_KEY_NOTIFICATION		0x0000000000800000
    306 #define HCI_EVMSK_LOOPBACK_COMMAND		0x0000000001000000
    307 #define HCI_EVMSK_DATA_BUFFER_OVERFLOW		0x0000000002000000
    308 #define HCI_EVMSK_MAX_SLOT_CHANGE		0x0000000004000000
    309 #define HCI_EVMSK_READ_CLOCK_OFFSET_COMLETE	0x0000000008000000
    310 #define HCI_EVMSK_CON_PKT_TYPE_CHANGED		0x0000000010000000
    311 #define HCI_EVMSK_QOS_VIOLATION			0x0000000020000000
    312 #define HCI_EVMSK_PAGE_SCAN_MODE_CHANGE		0x0000000040000000
    313 #define HCI_EVMSK_PAGE_SCAN_REP_MODE_CHANGE	0x0000000080000000
    314 /* 0x0000000100000000 - 0x8000000000000000 - reserved for future use */
    315 
    316 /* Filter types */
    317 #define HCI_FILTER_TYPE_NONE			0x00
    318 #define HCI_FILTER_TYPE_INQUIRY_RESULT		0x01
    319 #define HCI_FILTER_TYPE_CON_SETUP		0x02
    320 /* 0x03 - 0xFF - reserved for future use */
    321 
    322 /* Filter condition types for HCI_FILTER_TYPE_INQUIRY_RESULT */
    323 #define HCI_FILTER_COND_INQUIRY_NEW_UNIT	0x00
    324 #define HCI_FILTER_COND_INQUIRY_UNIT_CLASS	0x01
    325 #define HCI_FILTER_COND_INQUIRY_BDADDR		0x02
    326 /* 0x03 - 0xFF - reserved for future use */
    327 
    328 /* Filter condition types for HCI_FILTER_TYPE_CON_SETUP */
    329 #define HCI_FILTER_COND_CON_ANY_UNIT		0x00
    330 #define HCI_FILTER_COND_CON_UNIT_CLASS		0x01
    331 #define HCI_FILTER_COND_CON_BDADDR		0x02
    332 /* 0x03 - 0xFF - reserved for future use */
    333 
    334 /* Xmit level types */
    335 #define HCI_XMIT_LEVEL_CURRENT			0x00
    336 #define HCI_XMIT_LEVEL_MAXIMUM			0x01
    337 /* 0x02 - 0xFF - reserved for future use */
    338 
    339 /* Host Controller to Host flow control */
    340 #define HCI_HC2H_FLOW_CONTROL_NONE		0x00
    341 #define HCI_HC2H_FLOW_CONTROL_ACL		0x01
    342 #define HCI_HC2H_FLOW_CONTROL_SCO		0x02
    343 #define HCI_HC2H_FLOW_CONTROL_BOTH		0x03
    344 /* 0x04 - 0xFF - reserved future use */
    345 
    346 /* Loopback modes */
    347 #define HCI_LOOPBACK_NONE			0x00
    348 #define HCI_LOOPBACK_LOCAL			0x01
    349 #define HCI_LOOPBACK_REMOTE			0x02
    350 /* 0x03 - 0xFF - reserved future use */
    351 
    352 /**************************************************************************
    353  **************************************************************************
    354  **                 Link level defines, headers and types
    355  **************************************************************************
    356  **************************************************************************/
    357 
    358 /*
    359  * Macro(s) to combine OpCode and extract OGF (OpCode Group Field)
    360  * and OCF (OpCode Command Field) from OpCode.
    361  */
    362 
    363 #define HCI_OPCODE(gf,cf)		((((gf) & 0x3f) << 10) | ((cf) & 0x3ff))
    364 #define HCI_OCF(op)			((op) & 0x3ff)
    365 #define HCI_OGF(op)			(((op) >> 10) & 0x3f)
    366 
    367 /*
    368  * Macro(s) to extract/combine connection handle, BC (Broadcast) and
    369  * PB (Packet boundary) flags.
    370  */
    371 
    372 #define HCI_CON_HANDLE(h)		((h) & 0x0fff)
    373 #define HCI_PB_FLAG(h)			(((h) & 0x3000) >> 12)
    374 #define HCI_BC_FLAG(h)			(((h) & 0xc000) >> 14)
    375 #define HCI_MK_CON_HANDLE(h, pb, bc) \
    376 	(((h) & 0x0fff) | (((pb) & 3) << 12) | (((bc) & 3) << 14))
    377 
    378 /* PB flag values */
    379 					/* 00 - reserved for future use */
    380 #define	HCI_PACKET_FRAGMENT		0x1
    381 #define	HCI_PACKET_START		0x2
    382 					/* 11 - reserved for future use */
    383 
    384 /* BC flag values */
    385 #define HCI_POINT2POINT			0x0 /* only Host controller to Host */
    386 #define HCI_BROADCAST_ACTIVE		0x1 /* both directions */
    387 #define HCI_BROADCAST_PICONET		0x2 /* both directions */
    388 					/* 11 - reserved for future use */
    389 
    390 /* HCI command packet header */
    391 typedef struct {
    392 	uint8_t		type;	/* MUST be 0x01 */
    393 	uint16_t	opcode; /* OpCode */
    394 	uint8_t		length; /* parameter(s) length in bytes */
    395 } __attribute__ ((__packed__)) hci_cmd_hdr_t;
    396 
    397 #define HCI_CMD_PKT			0x01
    398 #define HCI_CMD_PKT_SIZE		(sizeof(hci_cmd_hdr_t) + 0xff)
    399 
    400 /* ACL data packet header */
    401 typedef struct {
    402 	uint8_t		type;	     /* MUST be 0x02 */
    403 	uint16_t	con_handle;  /* connection handle + PB + BC flags */
    404 	uint16_t	length;      /* payload length in bytes */
    405 } __attribute__ ((__packed__)) hci_acldata_hdr_t;
    406 
    407 #define HCI_ACL_DATA_PKT		0x02
    408 #define HCI_ACL_PKT_SIZE		(sizeof(hci_acldata_hdr_t) + 0xffff)
    409 
    410 /* SCO data packet header */
    411 typedef struct {
    412 	uint8_t		type;	    /* MUST be 0x03 */
    413 	uint16_t	con_handle; /* connection handle + reserved bits */
    414 	uint8_t		length;     /* payload length in bytes */
    415 } __attribute__ ((__packed__)) hci_scodata_hdr_t;
    416 
    417 #define HCI_SCO_DATA_PKT		0x03
    418 #define HCI_SCO_PKT_SIZE		(sizeof(hci_scodata_hdr_t) + 0xff)
    419 
    420 /* HCI event packet header */
    421 typedef struct {
    422 	uint8_t		type;	/* MUST be 0x04 */
    423 	uint8_t		event;  /* event */
    424 	uint8_t		length; /* parameter(s) length in bytes */
    425 } __attribute__ ((__packed__)) hci_event_hdr_t;
    426 
    427 #define HCI_EVENT_PKT			0x04
    428 #define HCI_EVENT_PKT_SIZE		(sizeof(hci_event_hdr_t) + 0xff)
    429 
    430 /* HCI status return parameter */
    431 typedef struct {
    432 	uint8_t		status; /* 0x00 - success */
    433 } __attribute__ ((__packed__)) hci_status_rp;
    434 
    435 /**************************************************************************
    436  **************************************************************************
    437  ** OGF 0x01	Link control commands and return parameters
    438  **************************************************************************
    439  **************************************************************************/
    440 
    441 #define HCI_OGF_LINK_CONTROL			0x01
    442 
    443 #define HCI_OCF_INQUIRY					0x0001
    444 #define HCI_CMD_INQUIRY					0x0401
    445 typedef struct {
    446 	uint8_t		lap[HCI_LAP_SIZE]; /* LAP */
    447 	uint8_t		inquiry_length;    /* (N x 1.28) sec */
    448 	uint8_t		num_responses;     /* Max. # of responses */
    449 } __attribute__ ((__packed__)) hci_inquiry_cp;
    450 /* No return parameter(s) */
    451 
    452 #define HCI_OCF_INQUIRY_CANCEL				0x0002
    453 #define HCI_CMD_INQUIRY_CANCEL				0x0402
    454 /* No command parameter(s) */
    455 typedef hci_status_rp	hci_inquiry_cancel_rp;
    456 
    457 #define HCI_OCF_PERIODIC_INQUIRY			0x0003
    458 #define HCI_CMD_PERIODIC_INQUIRY			0x0403
    459 typedef struct {
    460 	uint16_t	max_period_length; /* Max. and min. amount of time */
    461 	uint16_t	min_period_length; /* between consecutive inquiries */
    462 	uint8_t		lap[HCI_LAP_SIZE]; /* LAP */
    463 	uint8_t		inquiry_length;    /* (inquiry_length * 1.28) sec */
    464 	uint8_t		num_responses;     /* Max. # of responses */
    465 } __attribute__ ((__packed__)) hci_periodic_inquiry_cp;
    466 
    467 typedef hci_status_rp	hci_periodic_inquiry_rp;
    468 
    469 #define HCI_OCF_EXIT_PERIODIC_INQUIRY			0x0004
    470 #define HCI_CMD_EXIT_PERIODIC_INQUIRY			0x0404
    471 /* No command parameter(s) */
    472 typedef hci_status_rp	hci_exit_periodic_inquiry_rp;
    473 
    474 #define HCI_OCF_CREATE_CON				0x0005
    475 #define HCI_CMD_CREATE_CON				0x0405
    476 typedef struct {
    477 	bdaddr_t	bdaddr;             /* destination address */
    478 	uint16_t	pkt_type;           /* packet type */
    479 	uint8_t		page_scan_rep_mode; /* page scan repetition mode */
    480 	uint8_t		page_scan_mode;     /* reserved - set to 0x00 */
    481 	uint16_t	clock_offset;       /* clock offset */
    482 	uint8_t		accept_role_switch; /* accept role switch? 0x00 == No */
    483 } __attribute__ ((__packed__)) hci_create_con_cp;
    484 /* No return parameter(s) */
    485 
    486 #define HCI_OCF_DISCONNECT				0x0006
    487 #define HCI_CMD_DISCONNECT				0x0406
    488 typedef struct {
    489 	uint16_t	con_handle; /* connection handle */
    490 	uint8_t		reason;     /* reason to disconnect */
    491 } __attribute__ ((__packed__)) hci_discon_cp;
    492 /* No return parameter(s) */
    493 
    494 /* Add SCO Connection is deprecated */
    495 #define HCI_OCF_ADD_SCO_CON				0x0007
    496 #define HCI_CMD_ADD_SCO_CON				0x0407
    497 typedef struct {
    498 	uint16_t	con_handle; /* connection handle */
    499 	uint16_t	pkt_type;   /* packet type */
    500 } __attribute__ ((__packed__)) hci_add_sco_con_cp;
    501 /* No return parameter(s) */
    502 
    503 #define HCI_OCF_CREATE_CON_CANCEL			0x0008
    504 #define HCI_CMD_CREATE_CON_CANCEL			0x0408
    505 typedef struct {
    506 	bdaddr_t	bdaddr;		/* destination address */
    507 } __attribute__ ((__packed__)) hci_create_con_cancel_cp;
    508 
    509 typedef struct {
    510 	uint8_t		status;		/* 0x00 - success */
    511 	bdaddr_t	bdaddr;		/* destination address */
    512 } __attribute__ ((__packed__)) hci_create_con_cancel_rp;
    513 
    514 #define HCI_OCF_ACCEPT_CON				0x0009
    515 #define HCI_CMD_ACCEPT_CON				0x0409
    516 typedef struct {
    517 	bdaddr_t	bdaddr; /* address of unit to be connected */
    518 	uint8_t		role;   /* connection role */
    519 } __attribute__ ((__packed__)) hci_accept_con_cp;
    520 /* No return parameter(s) */
    521 
    522 #define HCI_OCF_REJECT_CON				0x000a
    523 #define HCI_CMD_REJECT_CON				0x040A
    524 typedef struct {
    525 	bdaddr_t	bdaddr; /* remote address */
    526 	uint8_t		reason; /* reason to reject */
    527 } __attribute__ ((__packed__)) hci_reject_con_cp;
    528 /* No return parameter(s) */
    529 
    530 #define HCI_OCF_LINK_KEY_REP				0x000b
    531 #define HCI_CMD_LINK_KEY_REP				0x040B
    532 typedef struct {
    533 	bdaddr_t	bdaddr;            /* remote address */
    534 	uint8_t		key[HCI_KEY_SIZE]; /* key */
    535 } __attribute__ ((__packed__)) hci_link_key_rep_cp;
    536 
    537 typedef struct {
    538 	uint8_t		status; /* 0x00 - success */
    539 	bdaddr_t	bdaddr; /* unit address */
    540 } __attribute__ ((__packed__)) hci_link_key_rep_rp;
    541 
    542 #define HCI_OCF_LINK_KEY_NEG_REP			0x000c
    543 #define HCI_CMD_LINK_KEY_NEG_REP			0x040C
    544 typedef struct {
    545 	bdaddr_t	bdaddr; /* remote address */
    546 } __attribute__ ((__packed__)) hci_link_key_neg_rep_cp;
    547 
    548 typedef struct {
    549 	uint8_t		status; /* 0x00 - success */
    550 	bdaddr_t	bdaddr; /* unit address */
    551 } __attribute__ ((__packed__)) hci_link_key_neg_rep_rp;
    552 
    553 #define HCI_OCF_PIN_CODE_REP				0x000d
    554 #define HCI_CMD_PIN_CODE_REP				0x040D
    555 typedef struct {
    556 	bdaddr_t	bdaddr;               /* remote address */
    557 	uint8_t		pin_size;             /* pin code length (in bytes) */
    558 	uint8_t		pin[HCI_PIN_SIZE];    /* pin code */
    559 } __attribute__ ((__packed__)) hci_pin_code_rep_cp;
    560 
    561 typedef struct {
    562 	uint8_t		status; /* 0x00 - success */
    563 	bdaddr_t	bdaddr; /* unit address */
    564 } __attribute__ ((__packed__)) hci_pin_code_rep_rp;
    565 
    566 #define HCI_OCF_PIN_CODE_NEG_REP			0x000e
    567 #define HCI_CMD_PIN_CODE_NEG_REP			0x040E
    568 typedef struct {
    569 	bdaddr_t	bdaddr; /* remote address */
    570 } __attribute__ ((__packed__)) hci_pin_code_neg_rep_cp;
    571 
    572 typedef struct {
    573 	uint8_t		status; /* 0x00 - success */
    574 	bdaddr_t	bdaddr; /* unit address */
    575 } __attribute__ ((__packed__)) hci_pin_code_neg_rep_rp;
    576 
    577 #define HCI_OCF_CHANGE_CON_PACKET_TYPE			0x000f
    578 #define HCI_CMD_CHANGE_CON_PACKET_TYPE			0x040F
    579 typedef struct {
    580 	uint16_t	con_handle; /* connection handle */
    581 	uint16_t	pkt_type;   /* packet type */
    582 } __attribute__ ((__packed__)) hci_change_con_pkt_type_cp;
    583 /* No return parameter(s) */
    584 
    585 #define HCI_OCF_AUTH_REQ				0x0011
    586 #define HCI_CMD_AUTH_REQ				0x0411
    587 typedef struct {
    588 	uint16_t	con_handle; /* connection handle */
    589 } __attribute__ ((__packed__)) hci_auth_req_cp;
    590 /* No return parameter(s) */
    591 
    592 #define HCI_OCF_SET_CON_ENCRYPTION			0x0013
    593 #define HCI_CMD_SET_CON_ENCRYPTION			0x0413
    594 typedef struct {
    595 	uint16_t	con_handle;        /* connection handle */
    596 	uint8_t		encryption_enable; /* 0x00 - disable, 0x01 - enable */
    597 } __attribute__ ((__packed__)) hci_set_con_encryption_cp;
    598 /* No return parameter(s) */
    599 
    600 #define HCI_OCF_CHANGE_CON_LINK_KEY			0x0015
    601 #define HCI_CMD_CHANGE_CON_LINK_KEY			0x0415
    602 typedef struct {
    603 	uint16_t	con_handle; /* connection handle */
    604 } __attribute__ ((__packed__)) hci_change_con_link_key_cp;
    605 /* No return parameter(s) */
    606 
    607 #define HCI_OCF_MASTER_LINK_KEY				0x0017
    608 #define HCI_CMD_MASTER_LINK_KEY				0x0417
    609 typedef struct {
    610 	uint8_t		key_flag; /* key flag */
    611 } __attribute__ ((__packed__)) hci_master_link_key_cp;
    612 /* No return parameter(s) */
    613 
    614 #define HCI_OCF_REMOTE_NAME_REQ				0x0019
    615 #define HCI_CMD_REMOTE_NAME_REQ				0x0419
    616 typedef struct {
    617 	bdaddr_t	bdaddr;             /* remote address */
    618 	uint8_t		page_scan_rep_mode; /* page scan repetition mode */
    619 	uint8_t		page_scan_mode;     /* page scan mode */
    620 	uint16_t	clock_offset;       /* clock offset */
    621 } __attribute__ ((__packed__)) hci_remote_name_req_cp;
    622 /* No return parameter(s) */
    623 
    624 #define HCI_OCF_REMOTE_NAME_REQ_CANCEL			0x001a
    625 #define HCI_CMD_REMOTE_NAME_REQ_CANCEL			0x041A
    626 typedef struct {
    627 	bdaddr_t	bdaddr;             /* remote address */
    628 } __attribute__ ((__packed__)) hci_remote_name_req_cancel_cp;
    629 
    630 typedef struct {
    631 	uint8_t		status;		/* 0x00 - success */
    632 	bdaddr_t	bdaddr;         /* remote address */
    633 } __attribute__ ((__packed__)) hci_remote_name_req_cancel_rp;
    634 
    635 #define HCI_OCF_READ_REMOTE_FEATURES			0x001b
    636 #define HCI_CMD_READ_REMOTE_FEATURES			0x041B
    637 typedef struct {
    638 	uint16_t	con_handle; /* connection handle */
    639 } __attribute__ ((__packed__)) hci_read_remote_features_cp;
    640 /* No return parameter(s) */
    641 
    642 #define HCI_OCF_READ_REMOTE_EXTENDED_FEATURES		0x001c
    643 #define HCI_CMD_READ_REMOTE_EXTENDED_FEATURES		0x041C
    644 typedef struct {
    645 	uint16_t	con_handle;	/* connection handle */
    646 	uint8_t		page;		/* page number */
    647 } __attribute__ ((__packed__)) hci_read_remote_extended_features_cp;
    648 /* No return parameter(s) */
    649 
    650 #define HCI_OCF_READ_REMOTE_VER_INFO			0x001d
    651 #define HCI_CMD_READ_REMOTE_VER_INFO			0x041D
    652 typedef struct {
    653 	uint16_t	con_handle; /* connection handle */
    654 } __attribute__ ((__packed__)) hci_read_remote_ver_info_cp;
    655 /* No return parameter(s) */
    656 
    657 #define HCI_OCF_READ_CLOCK_OFFSET			0x001f
    658 #define HCI_CMD_READ_CLOCK_OFFSET			0x041F
    659 typedef struct {
    660 	uint16_t	con_handle; /* connection handle */
    661 } __attribute__ ((__packed__)) hci_read_clock_offset_cp;
    662 /* No return parameter(s) */
    663 
    664 #define HCI_OCF_READ_LMP_HANDLE				0x0020
    665 #define HCI_CMD_READ_LMP_HANDLE				0x0420
    666 typedef struct {
    667 	uint16_t	con_handle; /* connection handle */
    668 } __attribute__ ((__packed__)) hci_read_lmp_handle_cp;
    669 
    670 typedef struct {
    671 	uint8_t		status;	    /* 0x00 - success */
    672 	uint16_t	con_handle; /* connection handle */
    673 	uint8_t		lmp_handle; /* LMP handle */
    674 	uint32_t	reserved;   /* reserved */
    675 } __attribute__ ((__packed__)) hci_read_lmp_handle_rp;
    676 
    677 #define HCI_OCF_SETUP_SCO_CON				0x0028
    678 #define HCI_CMD_SETUP_SCO_CON				0x0428
    679 typedef struct {
    680 	uint16_t	con_handle;	/* connection handle */
    681 	uint32_t	tx_bandwidth;	/* transmit bandwidth */
    682 	uint32_t	rx_bandwidth;	/* receive bandwidth */
    683 	uint16_t	latency;	/* maximum latency */
    684 	uint16_t	voice;		/* voice setting */
    685 	uint8_t		rt_effort;	/* retransmission effort */
    686 	uint16_t	pkt_type;	/* packet types */
    687 } __attribute__ ((__packed__)) hci_setup_sco_con_cp;
    688 /* No return parameter(s) */
    689 
    690 #define HCI_OCF_ACCEPT_SCO_CON_REQ			0x0029
    691 #define HCI_CMD_ACCEPT_SCO_CON_REQ			0x0429
    692 typedef struct {
    693 	bdaddr_t	bdaddr;		/* remote address */
    694 	uint32_t	tx_bandwidth;	/* transmit bandwidth */
    695 	uint32_t	rx_bandwidth;	/* receive bandwidth */
    696 	uint16_t	latency;	/* maximum latency */
    697 	uint16_t	content;	/* voice setting */
    698 	uint8_t		rt_effort;	/* retransmission effort */
    699 	uint16_t	pkt_type;	/* packet types */
    700 } __attribute__ ((__packed__)) hci_accept_sco_con_req_cp;
    701 /* No return parameter(s) */
    702 
    703 #define HCI_OCF_REJECT_SCO_CON_REQ			0x002a
    704 #define HCI_CMD_REJECT_SCO_CON_REQ			0x042a
    705 typedef struct {
    706 	bdaddr_t	bdaddr;		/* remote address */
    707 	uint8_t		reason;		/* reject error code */
    708 } __attribute__ ((__packed__)) hci_reject_sco_con_req_cp;
    709 /* No return parameter(s) */
    710 
    711 /**************************************************************************
    712  **************************************************************************
    713  ** OGF 0x02	Link policy commands and return parameters
    714  **************************************************************************
    715  **************************************************************************/
    716 
    717 #define HCI_OGF_LINK_POLICY			0x02
    718 
    719 #define HCI_OCF_HOLD_MODE				0x0001
    720 #define HCI_CMD_HOLD_MODE				0x0801
    721 typedef struct {
    722 	uint16_t	con_handle;   /* connection handle */
    723 	uint16_t	max_interval; /* (max_interval * 0.625) msec */
    724 	uint16_t	min_interval; /* (max_interval * 0.625) msec */
    725 } __attribute__ ((__packed__)) hci_hold_mode_cp;
    726 /* No return parameter(s) */
    727 
    728 #define HCI_OCF_SNIFF_MODE				0x0003
    729 #define HCI_CMD_SNIFF_MODE				0x0803
    730 typedef struct {
    731 	uint16_t	con_handle;   /* connection handle */
    732 	uint16_t	max_interval; /* (max_interval * 0.625) msec */
    733 	uint16_t	min_interval; /* (max_interval * 0.625) msec */
    734 	uint16_t	attempt;      /* (2 * attempt - 1) * 0.625 msec */
    735 	uint16_t	timeout;      /* (2 * attempt - 1) * 0.625 msec */
    736 } __attribute__ ((__packed__)) hci_sniff_mode_cp;
    737 /* No return parameter(s) */
    738 
    739 #define HCI_OCF_EXIT_SNIFF_MODE				0x0004
    740 #define HCI_CMD_EXIT_SNIFF_MODE				0x0804
    741 typedef struct {
    742 	uint16_t	con_handle; /* connection handle */
    743 } __attribute__ ((__packed__)) hci_exit_sniff_mode_cp;
    744 /* No return parameter(s) */
    745 
    746 #define HCI_OCF_PARK_MODE				0x0005
    747 #define HCI_CMD_PARK_MODE				0x0805
    748 typedef struct {
    749 	uint16_t	con_handle;   /* connection handle */
    750 	uint16_t	max_interval; /* (max_interval * 0.625) msec */
    751 	uint16_t	min_interval; /* (max_interval * 0.625) msec */
    752 } __attribute__ ((__packed__)) hci_park_mode_cp;
    753 /* No return parameter(s) */
    754 
    755 #define HCI_OCF_EXIT_PARK_MODE				0x0006
    756 #define HCI_CMD_EXIT_PARK_MODE				0x0806
    757 typedef struct {
    758 	uint16_t	con_handle; /* connection handle */
    759 } __attribute__ ((__packed__)) hci_exit_park_mode_cp;
    760 /* No return parameter(s) */
    761 
    762 #define HCI_OCF_QOS_SETUP				0x0007
    763 #define HCI_CMD_QOS_SETUP				0x0807
    764 typedef struct {
    765 	uint16_t	con_handle;      /* connection handle */
    766 	uint8_t		flags;           /* reserved for future use */
    767 	uint8_t		service_type;    /* service type */
    768 	uint32_t	token_rate;      /* bytes per second */
    769 	uint32_t	peak_bandwidth;  /* bytes per second */
    770 	uint32_t	latency;         /* microseconds */
    771 	uint32_t	delay_variation; /* microseconds */
    772 } __attribute__ ((__packed__)) hci_qos_setup_cp;
    773 /* No return parameter(s) */
    774 
    775 #define HCI_OCF_ROLE_DISCOVERY				0x0009
    776 #define HCI_CMD_ROLE_DISCOVERY				0x0809
    777 typedef struct {
    778 	uint16_t	con_handle; /* connection handle */
    779 } __attribute__ ((__packed__)) hci_role_discovery_cp;
    780 
    781 typedef struct {
    782 	uint8_t		status;     /* 0x00 - success */
    783 	uint16_t	con_handle; /* connection handle */
    784 	uint8_t		role;       /* role for the connection handle */
    785 } __attribute__ ((__packed__)) hci_role_discovery_rp;
    786 
    787 #define HCI_OCF_SWITCH_ROLE				0x000b
    788 #define HCI_CMD_SWITCH_ROLE				0x080B
    789 typedef struct {
    790 	bdaddr_t	bdaddr; /* remote address */
    791 	uint8_t		role;   /* new local role */
    792 } __attribute__ ((__packed__)) hci_switch_role_cp;
    793 /* No return parameter(s) */
    794 
    795 #define HCI_OCF_READ_LINK_POLICY_SETTINGS		0x000c
    796 #define HCI_CMD_READ_LINK_POLICY_SETTINGS		0x080C
    797 typedef struct {
    798 	uint16_t	con_handle; /* connection handle */
    799 } __attribute__ ((__packed__)) hci_read_link_policy_settings_cp;
    800 
    801 typedef struct {
    802 	uint8_t		status;     /* 0x00 - success */
    803 	uint16_t	con_handle; /* connection handle */
    804 	uint16_t	settings;   /* link policy settings */
    805 } __attribute__ ((__packed__)) hci_read_link_policy_settings_rp;
    806 
    807 #define HCI_OCF_WRITE_LINK_POLICY_SETTINGS		0x000d
    808 #define HCI_CMD_WRITE_LINK_POLICY_SETTINGS		0x080D
    809 typedef struct {
    810 	uint16_t	con_handle; /* connection handle */
    811 	uint16_t	settings;   /* link policy settings */
    812 } __attribute__ ((__packed__)) hci_write_link_policy_settings_cp;
    813 
    814 typedef struct {
    815 	uint8_t		status;     /* 0x00 - success */
    816 	uint16_t	con_handle; /* connection handle */
    817 } __attribute__ ((__packed__)) hci_write_link_policy_settings_rp;
    818 
    819 #define HCI_OCF_READ_DEFAULT_LINK_POLICY_SETTINGS	0x000e
    820 #define HCI_CMD_READ_DEFAULT_LINK_POLICY_SETTINGS	0x080E
    821 /* No command parameter(s) */
    822 typedef struct {
    823 	uint8_t		status;     /* 0x00 - success */
    824 	uint16_t	settings;   /* link policy settings */
    825 } __attribute__ ((__packed__)) hci_read_default_link_policy_settings_rp;
    826 
    827 #define HCI_OCF_WRITE_DEFAULT_LINK_POLICY_SETTINGS	0x000f
    828 #define HCI_CMD_WRITE_DEFAULT_LINK_POLICY_SETTINGS	0x080F
    829 typedef struct {
    830 	uint16_t	settings;   /* link policy settings */
    831 } __attribute__ ((__packed__)) hci_write_default_link_policy_settings_cp;
    832 
    833 typedef hci_status_rp	hci_write_default_link_policy_settings_rp;
    834 
    835 #define HCI_OCF_FLOW_SPECIFICATION			0x0010
    836 #define HCI_CMD_FLOW_SPECIFICATION			0x0810
    837 typedef struct {
    838 	uint16_t	con_handle;	/* connection handle */
    839 	uint8_t		flags;		/* reserved */
    840 	uint8_t		flow_direction;
    841 	uint8_t		service_type;
    842 	uint32_t	token_rate;
    843 	uint32_t	token_bucket;
    844 	uint32_t	peak_bandwidth;
    845 	uint32_t	latency;
    846 } __attribute__ ((__packed__)) hci_flow_specification_cp;
    847 /* No return parameter(s) */
    848 
    849 /**************************************************************************
    850  **************************************************************************
    851  ** OGF 0x03	Host Controller and Baseband commands and return parameters
    852  **************************************************************************
    853  **************************************************************************/
    854 
    855 #define HCI_OGF_HC_BASEBAND			0x03
    856 
    857 #define HCI_OCF_SET_EVENT_MASK				0x0001
    858 #define HCI_CMD_SET_EVENT_MASK				0x0C01
    859 typedef struct {
    860 	uint8_t		event_mask[HCI_EVENT_MASK_SIZE]; /* event_mask */
    861 } __attribute__ ((__packed__)) hci_set_event_mask_cp;
    862 
    863 typedef hci_status_rp	hci_set_event_mask_rp;
    864 
    865 #define HCI_OCF_RESET					0x0003
    866 #define HCI_CMD_RESET					0x0C03
    867 /* No command parameter(s) */
    868 typedef hci_status_rp	hci_reset_rp;
    869 
    870 #define HCI_OCF_SET_EVENT_FILTER			0x0005
    871 #define HCI_CMD_SET_EVENT_FILTER			0x0C05
    872 typedef struct {
    873 	uint8_t		filter_type;           /* filter type */
    874 	uint8_t		filter_condition_type; /* filter condition type */
    875 /* variable size condition
    876 	uint8_t		condition[]; -- conditions */
    877 } __attribute__ ((__packed__)) hci_set_event_filter_cp;
    878 
    879 typedef hci_status_rp	hci_set_event_filter_rp;
    880 
    881 #define HCI_OCF_FLUSH					0x0008
    882 #define HCI_CMD_FLUSH					0x0C08
    883 typedef struct {
    884 	uint16_t	con_handle; /* connection handle */
    885 } __attribute__ ((__packed__)) hci_flush_cp;
    886 
    887 typedef struct {
    888 	uint8_t		status;     /* 0x00 - success */
    889 	uint16_t	con_handle; /* connection handle */
    890 } __attribute__ ((__packed__)) hci_flush_rp;
    891 
    892 #define HCI_OCF_READ_PIN_TYPE				0x0009
    893 #define HCI_CMD_READ_PIN_TYPE				0x0C09
    894 /* No command parameter(s) */
    895 typedef struct {
    896 	uint8_t		status;   /* 0x00 - success */
    897 	uint8_t		pin_type; /* PIN type */
    898 } __attribute__ ((__packed__)) hci_read_pin_type_rp;
    899 
    900 #define HCI_OCF_WRITE_PIN_TYPE				0x000a
    901 #define HCI_CMD_WRITE_PIN_TYPE				0x0C0A
    902 typedef struct {
    903 	uint8_t		pin_type; /* PIN type */
    904 } __attribute__ ((__packed__)) hci_write_pin_type_cp;
    905 
    906 typedef hci_status_rp	hci_write_pin_type_rp;
    907 
    908 #define HCI_OCF_CREATE_NEW_UNIT_KEY			0x000b
    909 #define HCI_CMD_CREATE_NEW_UNIT_KEY			0x0C0B
    910 /* No command parameter(s) */
    911 typedef hci_status_rp	hci_create_new_unit_key_rp;
    912 
    913 #define HCI_OCF_READ_STORED_LINK_KEY			0x000d
    914 #define HCI_CMD_READ_STORED_LINK_KEY			0x0C0D
    915 typedef struct {
    916 	bdaddr_t	bdaddr;   /* address */
    917 	uint8_t		read_all; /* read all keys? 0x01 - yes */
    918 } __attribute__ ((__packed__)) hci_read_stored_link_key_cp;
    919 
    920 typedef struct {
    921 	uint8_t		status;        /* 0x00 - success */
    922 	uint16_t	max_num_keys;  /* Max. number of keys */
    923 	uint16_t	num_keys_read; /* Number of stored keys */
    924 } __attribute__ ((__packed__)) hci_read_stored_link_key_rp;
    925 
    926 #define HCI_OCF_WRITE_STORED_LINK_KEY			0x0011
    927 #define HCI_CMD_WRITE_STORED_LINK_KEY			0x0C11
    928 typedef struct {
    929 	uint8_t		num_keys_write; /* # of keys to write */
    930 /* these are repeated "num_keys_write" times
    931 	bdaddr_t	bdaddr;             --- remote address(es)
    932 	uint8_t		key[HCI_KEY_SIZE];  --- key(s) */
    933 } __attribute__ ((__packed__)) hci_write_stored_link_key_cp;
    934 
    935 typedef struct {
    936 	uint8_t		status;           /* 0x00 - success */
    937 	uint8_t		num_keys_written; /* # of keys successfully written */
    938 } __attribute__ ((__packed__)) hci_write_stored_link_key_rp;
    939 
    940 #define HCI_OCF_DELETE_STORED_LINK_KEY			0x0012
    941 #define HCI_CMD_DELETE_STORED_LINK_KEY			0x0C12
    942 typedef struct {
    943 	bdaddr_t	bdaddr;     /* address */
    944 	uint8_t		delete_all; /* delete all keys? 0x01 - yes */
    945 } __attribute__ ((__packed__)) hci_delete_stored_link_key_cp;
    946 
    947 typedef struct {
    948 	uint8_t		status;           /* 0x00 - success */
    949 	uint16_t	num_keys_deleted; /* Number of keys deleted */
    950 } __attribute__ ((__packed__)) hci_delete_stored_link_key_rp;
    951 
    952 #define HCI_OCF_WRITE_LOCAL_NAME			0x0013
    953 #define HCI_CMD_WRITE_LOCAL_NAME			0x0C13
    954 typedef struct {
    955 	char		name[HCI_UNIT_NAME_SIZE]; /* new unit name */
    956 } __attribute__ ((__packed__)) hci_write_local_name_cp;
    957 
    958 typedef hci_status_rp	hci_write_local_name_rp;
    959 
    960 #define HCI_OCF_READ_LOCAL_NAME				0x0014
    961 #define HCI_CMD_READ_LOCAL_NAME				0x0C14
    962 /* No command parameter(s) */
    963 typedef struct {
    964 	uint8_t		status;                   /* 0x00 - success */
    965 	char		name[HCI_UNIT_NAME_SIZE]; /* unit name */
    966 } __attribute__ ((__packed__)) hci_read_local_name_rp;
    967 
    968 #define HCI_OCF_READ_CON_ACCEPT_TIMEOUT			0x0015
    969 #define HCI_CMD_READ_CON_ACCEPT_TIMEOUT			0x0C15
    970 /* No command parameter(s) */
    971 typedef struct {
    972 	uint8_t		status;  /* 0x00 - success */
    973 	uint16_t	timeout; /* (timeout * 0.625) msec */
    974 } __attribute__ ((__packed__)) hci_read_con_accept_timeout_rp;
    975 
    976 #define HCI_OCF_WRITE_CON_ACCEPT_TIMEOUT		0x0016
    977 #define HCI_CMD_WRITE_CON_ACCEPT_TIMEOUT		0x0C16
    978 typedef struct {
    979 	uint16_t	timeout; /* (timeout * 0.625) msec */
    980 } __attribute__ ((__packed__)) hci_write_con_accept_timeout_cp;
    981 
    982 typedef hci_status_rp	hci_write_con_accept_timeout_rp;
    983 
    984 #define HCI_OCF_READ_PAGE_TIMEOUT			0x0017
    985 #define HCI_CMD_READ_PAGE_TIMEOUT			0x0C17
    986 /* No command parameter(s) */
    987 typedef struct {
    988 	uint8_t		status;  /* 0x00 - success */
    989 	uint16_t	timeout; /* (timeout * 0.625) msec */
    990 } __attribute__ ((__packed__)) hci_read_page_timeout_rp;
    991 
    992 #define HCI_OCF_WRITE_PAGE_TIMEOUT			0x0018
    993 #define HCI_CMD_WRITE_PAGE_TIMEOUT			0x0C18
    994 typedef struct {
    995 	uint16_t	timeout; /* (timeout * 0.625) msec */
    996 } __attribute__ ((__packed__)) hci_write_page_timeout_cp;
    997 
    998 typedef hci_status_rp	hci_write_page_timeout_rp;
    999 
   1000 #define HCI_OCF_READ_SCAN_ENABLE			0x0019
   1001 #define HCI_CMD_READ_SCAN_ENABLE			0x0C19
   1002 /* No command parameter(s) */
   1003 typedef struct {
   1004 	uint8_t		status;      /* 0x00 - success */
   1005 	uint8_t		scan_enable; /* Scan enable */
   1006 } __attribute__ ((__packed__)) hci_read_scan_enable_rp;
   1007 
   1008 #define HCI_OCF_WRITE_SCAN_ENABLE			0x001a
   1009 #define HCI_CMD_WRITE_SCAN_ENABLE			0x0C1A
   1010 typedef struct {
   1011 	uint8_t		scan_enable; /* Scan enable */
   1012 } __attribute__ ((__packed__)) hci_write_scan_enable_cp;
   1013 
   1014 typedef hci_status_rp	hci_write_scan_enable_rp;
   1015 
   1016 #define HCI_OCF_READ_PAGE_SCAN_ACTIVITY			0x001b
   1017 #define HCI_CMD_READ_PAGE_SCAN_ACTIVITY			0x0C1B
   1018 /* No command parameter(s) */
   1019 typedef struct {
   1020 	uint8_t		status;             /* 0x00 - success */
   1021 	uint16_t	page_scan_interval; /* interval * 0.625 msec */
   1022 	uint16_t	page_scan_window;   /* window * 0.625 msec */
   1023 } __attribute__ ((__packed__)) hci_read_page_scan_activity_rp;
   1024 
   1025 #define HCI_OCF_WRITE_PAGE_SCAN_ACTIVITY		0x001c
   1026 #define HCI_CMD_WRITE_PAGE_SCAN_ACTIVITY		0x0C1C
   1027 typedef struct {
   1028 	uint16_t	page_scan_interval; /* interval * 0.625 msec */
   1029 	uint16_t	page_scan_window;   /* window * 0.625 msec */
   1030 } __attribute__ ((__packed__)) hci_write_page_scan_activity_cp;
   1031 
   1032 typedef hci_status_rp	hci_write_page_scan_activity_rp;
   1033 
   1034 #define HCI_OCF_READ_INQUIRY_SCAN_ACTIVITY		0x001d
   1035 #define HCI_CMD_READ_INQUIRY_SCAN_ACTIVITY		0x0C1D
   1036 /* No command parameter(s) */
   1037 typedef struct {
   1038 	uint8_t		status;                /* 0x00 - success */
   1039 	uint16_t	inquiry_scan_interval; /* interval * 0.625 msec */
   1040 	uint16_t	inquiry_scan_window;   /* window * 0.625 msec */
   1041 } __attribute__ ((__packed__)) hci_read_inquiry_scan_activity_rp;
   1042 
   1043 #define HCI_OCF_WRITE_INQUIRY_SCAN_ACTIVITY		0x001e
   1044 #define HCI_CMD_WRITE_INQUIRY_SCAN_ACTIVITY		0x0C1E
   1045 typedef struct {
   1046 	uint16_t	inquiry_scan_interval; /* interval * 0.625 msec */
   1047 	uint16_t	inquiry_scan_window;   /* window * 0.625 msec */
   1048 } __attribute__ ((__packed__)) hci_write_inquiry_scan_activity_cp;
   1049 
   1050 typedef hci_status_rp	hci_write_inquiry_scan_activity_rp;
   1051 
   1052 #define HCI_OCF_READ_AUTH_ENABLE			0x001f
   1053 #define HCI_CMD_READ_AUTH_ENABLE			0x0C1F
   1054 /* No command parameter(s) */
   1055 typedef struct {
   1056 	uint8_t		status;      /* 0x00 - success */
   1057 	uint8_t		auth_enable; /* 0x01 - enabled */
   1058 } __attribute__ ((__packed__)) hci_read_auth_enable_rp;
   1059 
   1060 #define HCI_OCF_WRITE_AUTH_ENABLE			0x0020
   1061 #define HCI_CMD_WRITE_AUTH_ENABLE			0x0C20
   1062 typedef struct {
   1063 	uint8_t		auth_enable; /* 0x01 - enabled */
   1064 } __attribute__ ((__packed__)) hci_write_auth_enable_cp;
   1065 
   1066 typedef hci_status_rp	hci_write_auth_enable_rp;
   1067 
   1068 #define HCI_OCF_READ_ENCRYPTION_MODE			0x0021
   1069 #define HCI_CMD_READ_ENCRYPTION_MODE			0x0C21
   1070 /* No command parameter(s) */
   1071 typedef struct {
   1072 	uint8_t		status;          /* 0x00 - success */
   1073 	uint8_t		encryption_mode; /* encryption mode */
   1074 } __attribute__ ((__packed__)) hci_read_encryption_mode_rp;
   1075 
   1076 #define HCI_OCF_WRITE_ENCRYPTION_MODE			0x0022
   1077 #define HCI_CMD_WRITE_ENCRYPTION_MODE			0x0C22
   1078 typedef struct {
   1079 	uint8_t		encryption_mode; /* encryption mode */
   1080 } __attribute__ ((__packed__)) hci_write_encryption_mode_cp;
   1081 
   1082 typedef hci_status_rp	hci_write_encryption_mode_rp;
   1083 
   1084 #define HCI_OCF_READ_UNIT_CLASS				0x0023
   1085 #define HCI_CMD_READ_UNIT_CLASS				0x0C23
   1086 /* No command parameter(s) */
   1087 typedef struct {
   1088 	uint8_t		status;                 /* 0x00 - success */
   1089 	uint8_t		uclass[HCI_CLASS_SIZE]; /* unit class */
   1090 } __attribute__ ((__packed__)) hci_read_unit_class_rp;
   1091 
   1092 #define HCI_OCF_WRITE_UNIT_CLASS			0x0024
   1093 #define HCI_CMD_WRITE_UNIT_CLASS			0x0C24
   1094 typedef struct {
   1095 	uint8_t		uclass[HCI_CLASS_SIZE]; /* unit class */
   1096 } __attribute__ ((__packed__)) hci_write_unit_class_cp;
   1097 
   1098 typedef hci_status_rp	hci_write_unit_class_rp;
   1099 
   1100 #define HCI_OCF_READ_VOICE_SETTING			0x0025
   1101 #define HCI_CMD_READ_VOICE_SETTING			0x0C25
   1102 /* No command parameter(s) */
   1103 typedef struct {
   1104 	uint8_t		status;   /* 0x00 - success */
   1105 	uint16_t	settings; /* voice settings */
   1106 } __attribute__ ((__packed__)) hci_read_voice_setting_rp;
   1107 
   1108 #define HCI_OCF_WRITE_VOICE_SETTING			0x0026
   1109 #define HCI_CMD_WRITE_VOICE_SETTING			0x0C26
   1110 typedef struct {
   1111 	uint16_t	settings; /* voice settings */
   1112 } __attribute__ ((__packed__)) hci_write_voice_setting_cp;
   1113 
   1114 typedef hci_status_rp	hci_write_voice_setting_rp;
   1115 
   1116 #define HCI_OCF_READ_AUTO_FLUSH_TIMEOUT			0x0027
   1117 #define HCI_CMD_READ_AUTO_FLUSH_TIMEOUT			0x0C27
   1118 typedef struct {
   1119 	uint16_t	con_handle; /* connection handle */
   1120 } __attribute__ ((__packed__)) hci_read_auto_flush_timeout_cp;
   1121 
   1122 typedef struct {
   1123 	uint8_t		status;     /* 0x00 - success */
   1124 	uint16_t	con_handle; /* connection handle */
   1125 	uint16_t	timeout;    /* 0x00 - no flush, timeout * 0.625 msec */
   1126 } __attribute__ ((__packed__)) hci_read_auto_flush_timeout_rp;
   1127 
   1128 #define HCI_OCF_WRITE_AUTO_FLUSH_TIMEOUT		0x0028
   1129 #define HCI_CMD_WRITE_AUTO_FLUSH_TIMEOUT		0x0C28
   1130 typedef struct {
   1131 	uint16_t	con_handle; /* connection handle */
   1132 	uint16_t	timeout;    /* 0x00 - no flush, timeout * 0.625 msec */
   1133 } __attribute__ ((__packed__)) hci_write_auto_flush_timeout_cp;
   1134 
   1135 typedef struct {
   1136 	uint8_t		status;     /* 0x00 - success */
   1137 	uint16_t	con_handle; /* connection handle */
   1138 } __attribute__ ((__packed__)) hci_write_auto_flush_timeout_rp;
   1139 
   1140 #define HCI_OCF_READ_NUM_BROADCAST_RETRANS		0x0029
   1141 #define HCI_CMD_READ_NUM_BROADCAST_RETRANS		0x0C29
   1142 /* No command parameter(s) */
   1143 typedef struct {
   1144 	uint8_t		status;  /* 0x00 - success */
   1145 	uint8_t		counter; /* number of broadcast retransmissions */
   1146 } __attribute__ ((__packed__)) hci_read_num_broadcast_retrans_rp;
   1147 
   1148 #define HCI_OCF_WRITE_NUM_BROADCAST_RETRANS		0x002a
   1149 #define HCI_CMD_WRITE_NUM_BROADCAST_RETRANS		0x0C2A
   1150 typedef struct {
   1151 	uint8_t		counter; /* number of broadcast retransmissions */
   1152 } __attribute__ ((__packed__)) hci_write_num_broadcast_retrans_cp;
   1153 
   1154 typedef hci_status_rp	hci_write_num_broadcast_retrans_rp;
   1155 
   1156 #define HCI_OCF_READ_HOLD_MODE_ACTIVITY			0x002b
   1157 #define HCI_CMD_READ_HOLD_MODE_ACTIVITY			0x0C2B
   1158 /* No command parameter(s) */
   1159 typedef struct {
   1160 	uint8_t		status;             /* 0x00 - success */
   1161 	uint8_t		hold_mode_activity; /* Hold mode activities */
   1162 } __attribute__ ((__packed__)) hci_read_hold_mode_activity_rp;
   1163 
   1164 #define HCI_OCF_WRITE_HOLD_MODE_ACTIVITY		0x002c
   1165 #define HCI_CMD_WRITE_HOLD_MODE_ACTIVITY		0x0C2C
   1166 typedef struct {
   1167 	uint8_t		hold_mode_activity; /* Hold mode activities */
   1168 } __attribute__ ((__packed__)) hci_write_hold_mode_activity_cp;
   1169 
   1170 typedef hci_status_rp	hci_write_hold_mode_activity_rp;
   1171 
   1172 #define HCI_OCF_READ_XMIT_LEVEL				0x002d
   1173 #define HCI_CMD_READ_XMIT_LEVEL				0x0C2D
   1174 typedef struct {
   1175 	uint16_t	con_handle; /* connection handle */
   1176 	uint8_t		type;       /* Xmit level type */
   1177 } __attribute__ ((__packed__)) hci_read_xmit_level_cp;
   1178 
   1179 typedef struct {
   1180 	uint8_t		status;     /* 0x00 - success */
   1181 	uint16_t	con_handle; /* connection handle */
   1182 	char		level;      /* -30 <= level <= 30 dBm */
   1183 } __attribute__ ((__packed__)) hci_read_xmit_level_rp;
   1184 
   1185 #define HCI_OCF_READ_SCO_FLOW_CONTROL			0x002e
   1186 #define HCI_CMD_READ_SCO_FLOW_CONTROL			0x0C2E
   1187 /* No command parameter(s) */
   1188 typedef struct {
   1189 	uint8_t		status;       /* 0x00 - success */
   1190 	uint8_t		flow_control; /* 0x00 - disabled */
   1191 } __attribute__ ((__packed__)) hci_read_sco_flow_control_rp;
   1192 
   1193 #define HCI_OCF_WRITE_SCO_FLOW_CONTROL			0x002f
   1194 #define HCI_CMD_WRITE_SCO_FLOW_CONTROL			0x0C2F
   1195 typedef struct {
   1196 	uint8_t		flow_control; /* 0x00 - disabled */
   1197 } __attribute__ ((__packed__)) hci_write_sco_flow_control_cp;
   1198 
   1199 typedef hci_status_rp	hci_write_sco_flow_control_rp;
   1200 
   1201 #define HCI_OCF_HC2H_FLOW_CONTROL			0x0031
   1202 #define HCI_CMD_HC2H_FLOW_CONTROL			0x0C31
   1203 typedef struct {
   1204 	uint8_t		hc2h_flow; /* Host Controller to Host flow control */
   1205 } __attribute__ ((__packed__)) hci_hc2h_flow_control_cp;
   1206 
   1207 typedef hci_status_rp	hci_h2hc_flow_control_rp;
   1208 
   1209 #define HCI_OCF_HOST_BUFFER_SIZE			0x0033
   1210 #define HCI_CMD_HOST_BUFFER_SIZE			0x0C33
   1211 typedef struct {
   1212 	uint16_t	max_acl_size; /* Max. size of ACL packet (bytes) */
   1213 	uint8_t		max_sco_size; /* Max. size of SCO packet (bytes) */
   1214 	uint16_t	num_acl_pkts;  /* Max. number of ACL packets */
   1215 	uint16_t	num_sco_pkts;  /* Max. number of SCO packets */
   1216 } __attribute__ ((__packed__)) hci_host_buffer_size_cp;
   1217 
   1218 typedef hci_status_rp	hci_host_buffer_size_rp;
   1219 
   1220 #define HCI_OCF_HOST_NUM_COMPL_PKTS			0x0035
   1221 #define HCI_CMD_HOST_NUM_COMPL_PKTS			0x0C35
   1222 typedef struct {
   1223 	uint8_t		nu_con_handles; /* # of connection handles */
   1224 /* these are repeated "num_con_handles" times
   1225 	uint16_t	con_handle;    --- connection handle(s)
   1226 	uint16_t	compl_pkts;    --- # of completed packets */
   1227 } __attribute__ ((__packed__)) hci_host_num_compl_pkts_cp;
   1228 /* No return parameter(s) */
   1229 
   1230 #define HCI_OCF_READ_LINK_SUPERVISION_TIMEOUT		0x0036
   1231 #define HCI_CMD_READ_LINK_SUPERVISION_TIMEOUT		0x0C36
   1232 typedef struct {
   1233 	uint16_t	con_handle; /* connection handle */
   1234 } __attribute__ ((__packed__)) hci_read_link_supervision_timeout_cp;
   1235 
   1236 typedef struct {
   1237 	uint8_t		status;     /* 0x00 - success */
   1238 	uint16_t	con_handle; /* connection handle */
   1239 	uint16_t	timeout;    /* Link supervision timeout * 0.625 msec */
   1240 } __attribute__ ((__packed__)) hci_read_link_supervision_timeout_rp;
   1241 
   1242 #define HCI_OCF_WRITE_LINK_SUPERVISION_TIMEOUT		0x0037
   1243 #define HCI_CMD_WRITE_LINK_SUPERVISION_TIMEOUT		0x0C37
   1244 typedef struct {
   1245 	uint16_t	con_handle; /* connection handle */
   1246 	uint16_t	timeout;    /* Link supervision timeout * 0.625 msec */
   1247 } __attribute__ ((__packed__)) hci_write_link_supervision_timeout_cp;
   1248 
   1249 typedef struct {
   1250 	uint8_t		status;     /* 0x00 - success */
   1251 	uint16_t	con_handle; /* connection handle */
   1252 } __attribute__ ((__packed__)) hci_write_link_supervision_timeout_rp;
   1253 
   1254 #define HCI_OCF_READ_NUM_SUPPORTED_IAC			0x0038
   1255 #define HCI_CMD_READ_NUM_SUPPORTED_IAC			0x0C38
   1256 /* No command parameter(s) */
   1257 typedef struct {
   1258 	uint8_t		status;  /* 0x00 - success */
   1259 	uint8_t		num_iac; /* # of supported IAC during scan */
   1260 } __attribute__ ((__packed__)) hci_read_num_supported_iac_rp;
   1261 
   1262 #define HCI_OCF_READ_IAC_LAP				0x0039
   1263 #define HCI_CMD_READ_IAC_LAP				0x0C39
   1264 /* No command parameter(s) */
   1265 typedef struct {
   1266 	uint8_t		status;  /* 0x00 - success */
   1267 	uint8_t		num_iac; /* # of IAC */
   1268 /* these are repeated "num_iac" times
   1269 	uint8_t		laps[HCI_LAP_SIZE]; --- LAPs */
   1270 } __attribute__ ((__packed__)) hci_read_iac_lap_rp;
   1271 
   1272 #define HCI_OCF_WRITE_IAC_LAP				0x003a
   1273 #define HCI_CMD_WRITE_IAC_LAP				0x0C3A
   1274 typedef struct {
   1275 	uint8_t		num_iac; /* # of IAC */
   1276 /* these are repeated "num_iac" times
   1277 	uint8_t		laps[HCI_LAP_SIZE]; --- LAPs */
   1278 } __attribute__ ((__packed__)) hci_write_iac_lap_cp;
   1279 
   1280 typedef hci_status_rp	hci_write_iac_lap_rp;
   1281 
   1282 #define HCI_OCF_READ_PAGE_SCAN_PERIOD			0x003b
   1283 #define HCI_CMD_READ_PAGE_SCAN_PERIOD			0x0C3B
   1284 /* No command parameter(s) */
   1285 typedef struct {
   1286 	uint8_t		status;                /* 0x00 - success */
   1287 	uint8_t		page_scan_period_mode; /* Page scan period mode */
   1288 } __attribute__ ((__packed__)) hci_read_page_scan_period_rp;
   1289 
   1290 #define HCI_OCF_WRITE_PAGE_SCAN_PERIOD			0x003c
   1291 #define HCI_CMD_WRITE_PAGE_SCAN_PERIOD			0x0C3C
   1292 typedef struct {
   1293 	uint8_t		page_scan_period_mode; /* Page scan period mode */
   1294 } __attribute__ ((__packed__)) hci_write_page_scan_period_cp;
   1295 
   1296 typedef hci_status_rp	hci_write_page_scan_period_rp;
   1297 
   1298 /* Read Page Scan Mode is deprecated */
   1299 #define HCI_OCF_READ_PAGE_SCAN				0x003d
   1300 #define HCI_CMD_READ_PAGE_SCAN				0x0C3D
   1301 /* No command parameter(s) */
   1302 typedef struct {
   1303 	uint8_t		status;         /* 0x00 - success */
   1304 	uint8_t		page_scan_mode; /* Page scan mode */
   1305 } __attribute__ ((__packed__)) hci_read_page_scan_rp;
   1306 
   1307 /* Write Page Scan Mode is deprecated */
   1308 #define HCI_OCF_WRITE_PAGE_SCAN				0x003e
   1309 #define HCI_CMD_WRITE_PAGE_SCAN				0x0C3E
   1310 typedef struct {
   1311 	uint8_t		page_scan_mode; /* Page scan mode */
   1312 } __attribute__ ((__packed__)) hci_write_page_scan_cp;
   1313 
   1314 typedef hci_status_rp	hci_write_page_scan_rp;
   1315 
   1316 #define HCI_OCF_SET_AFH_CLASSIFICATION			0x003f
   1317 #define HCI_CMD_SET_AFH_CLASSIFICATION			0x0C3F
   1318 typedef struct {
   1319 	uint8_t		classification[10];
   1320 } __attribute__ ((__packed__)) hci_set_afh_classification_cp;
   1321 
   1322 typedef hci_status_rp	hci_set_afh_classification_rp;
   1323 
   1324 #define HCI_OCF_READ_INQUIRY_SCAN_TYPE			0x0042
   1325 #define HCI_CMD_READ_INQUIRY_SCAN_TYPE			0x0C42
   1326 /* No command parameter(s) */
   1327 
   1328 typedef struct {
   1329 	uint8_t		status;		/* 0x00 - success */
   1330 	uint8_t		type;		/* inquiry scan type */
   1331 } __attribute__ ((__packed__)) hci_read_inquiry_scan_type_rp;
   1332 
   1333 #define HCI_OCF_WRITE_INQUIRY_SCAN_TYPE			0x0043
   1334 #define HCI_CMD_WRITE_INQUIRY_SCAN_TYPE			0x0C43
   1335 typedef struct {
   1336 	uint8_t		type;		/* inquiry scan type */
   1337 } __attribute__ ((__packed__)) hci_write_inquiry_scan_type_cp;
   1338 
   1339 typedef hci_status_rp	hci_write_inquiry_scan_type_rp;
   1340 
   1341 #define HCI_OCF_READ_INQUIRY_MODE			0x0044
   1342 #define HCI_CMD_READ_INQUIRY_MODE			0x0C44
   1343 /* No command parameter(s) */
   1344 
   1345 typedef struct {
   1346 	uint8_t		status;		/* 0x00 - success */
   1347 	uint8_t		mode;		/* inquiry mode */
   1348 } __attribute__ ((__packed__)) hci_read_inquiry_mode_rp;
   1349 
   1350 #define HCI_OCF_WRITE_INQUIRY_MODE			0x0045
   1351 #define HCI_CMD_WRITE_INQUIRY_MODE			0x0C45
   1352 typedef struct {
   1353 	uint8_t		mode;		/* inquiry mode */
   1354 } __attribute__ ((__packed__)) hci_write_inquiry_mode_cp;
   1355 
   1356 typedef hci_status_rp	hci_write_inquiry_mode_rp;
   1357 
   1358 #define HCI_OCF_READ_PAGE_SCAN_TYPE			0x0046
   1359 #define HCI_CMD_READ_PAGE_SCAN_TYPE			0x0C46
   1360 /* No command parameter(s) */
   1361 
   1362 typedef struct {
   1363 	uint8_t		status;		/* 0x00 - success */
   1364 	uint8_t		type;		/* page scan type */
   1365 } __attribute__ ((__packed__)) hci_read_page_scan_type_rp;
   1366 
   1367 #define HCI_OCF_WRITE_PAGE_SCAN_TYPE			0x0047
   1368 #define HCI_CMD_WRITE_PAGE_SCAN_TYPE			0x0C47
   1369 typedef struct {
   1370 	uint8_t		type;		/* page scan type */
   1371 } __attribute__ ((__packed__)) hci_write_page_scan_type_cp;
   1372 
   1373 typedef hci_status_rp	hci_write_page_scan_type_rp;
   1374 
   1375 #define HCI_OCF_READ_AFH_ASSESSMENT			0x0048
   1376 #define HCI_CMD_READ_AFH_ASSESSMENT			0x0C48
   1377 /* No command parameter(s) */
   1378 
   1379 typedef struct {
   1380 	uint8_t		status;		/* 0x00 - success */
   1381 	uint8_t		mode;		/* assessment mode */
   1382 } __attribute__ ((__packed__)) hci_read_afh_assessment_rp;
   1383 
   1384 #define HCI_OCF_WRITE_AFH_ASSESSMENT			0x0049
   1385 #define HCI_CMD_WRITE_AFH_ASSESSMENT			0x0C49
   1386 typedef struct {
   1387 	uint8_t		mode;		/* assessment mode */
   1388 } __attribute__ ((__packed__)) hci_write_afh_assessment_cp;
   1389 
   1390 typedef hci_status_rp	hci_write_afh_assessment_rp;
   1391 
   1392 /**************************************************************************
   1393  **************************************************************************
   1394  ** OGF 0x04	Informational commands and return parameters
   1395  **************************************************************************
   1396  **************************************************************************/
   1397 
   1398 #define HCI_OGF_INFO				0x04
   1399 
   1400 #define HCI_OCF_READ_LOCAL_VER				0x0001
   1401 #define HCI_CMD_READ_LOCAL_VER				0x1001
   1402 /* No command parameter(s) */
   1403 typedef struct {
   1404 	uint8_t		status;         /* 0x00 - success */
   1405 	uint8_t		hci_version;    /* HCI version */
   1406 	uint16_t	hci_revision;   /* HCI revision */
   1407 	uint8_t		lmp_version;    /* LMP version */
   1408 	uint16_t	manufacturer;   /* Hardware manufacturer name */
   1409 	uint16_t	lmp_subversion; /* LMP sub-version */
   1410 } __attribute__ ((__packed__)) hci_read_local_ver_rp;
   1411 
   1412 #define HCI_OCF_READ_LOCAL_COMMANDS			0x0002
   1413 #define HCI_CMD_READ_LOCAL_COMMANDS			0x1002
   1414 /* No command parameter(s) */
   1415 typedef struct {
   1416 	uint8_t		status;		/* 0x00 - success */
   1417 	uint8_t		commands[HCI_COMMANDS_SIZE];	/* opcode bitmask */
   1418 } __attribute__ ((__packed__)) hci_read_local_commands_rp;
   1419 
   1420 #define HCI_OCF_READ_LOCAL_FEATURES			0x0003
   1421 #define HCI_CMD_READ_LOCAL_FEATURES			0x1003
   1422 /* No command parameter(s) */
   1423 typedef struct {
   1424 	uint8_t		status;                      /* 0x00 - success */
   1425 	uint8_t		features[HCI_FEATURES_SIZE]; /* LMP features bitmsk*/
   1426 } __attribute__ ((__packed__)) hci_read_local_features_rp;
   1427 
   1428 #define HCI_OCF_READ_LOCAL_EXTENDED_FEATURES		0x0004
   1429 #define HCI_CMD_READ_LOCAL_EXTENDED_FEATURES		0x1004
   1430 typedef struct {
   1431 	uint8_t		page;		/* page number */
   1432 } __attribute__ ((__packed__)) hci_read_local_extended_features_cp;
   1433 
   1434 typedef struct {
   1435 	uint8_t		status;		/* 0x00 - success */
   1436 	uint8_t		page;		/* page number */
   1437 	uint8_t		max_page;	/* maximum page number */
   1438 	uint8_t		features[HCI_FEATURES_SIZE];	/* LMP features */
   1439 } __attribute__ ((__packed__)) hci_read_local_extended_features_rp;
   1440 
   1441 #define HCI_OCF_READ_BUFFER_SIZE			0x0005
   1442 #define HCI_CMD_READ_BUFFER_SIZE			0x1005
   1443 /* No command parameter(s) */
   1444 typedef struct {
   1445 	uint8_t		status;       /* 0x00 - success */
   1446 	uint16_t	max_acl_size; /* Max. size of ACL packet (bytes) */
   1447 	uint8_t		max_sco_size; /* Max. size of SCO packet (bytes) */
   1448 	uint16_t	num_acl_pkts;  /* Max. number of ACL packets */
   1449 	uint16_t	num_sco_pkts;  /* Max. number of SCO packets */
   1450 } __attribute__ ((__packed__)) hci_read_buffer_size_rp;
   1451 
   1452 /* Read Country Code is deprecated */
   1453 #define HCI_OCF_READ_COUNTRY_CODE			0x0007
   1454 #define HCI_CMD_READ_COUNTRY_CODE			0x1007
   1455 /* No command parameter(s) */
   1456 typedef struct {
   1457 	uint8_t		status;       /* 0x00 - success */
   1458 	uint8_t		country_code; /* 0x00 - NAM, EUR, JP; 0x01 - France */
   1459 } __attribute__ ((__packed__)) hci_read_country_code_rp;
   1460 
   1461 #define HCI_OCF_READ_BDADDR				0x0009
   1462 #define HCI_CMD_READ_BDADDR				0x1009
   1463 /* No command parameter(s) */
   1464 typedef struct {
   1465 	uint8_t		status; /* 0x00 - success */
   1466 	bdaddr_t	bdaddr; /* unit address */
   1467 } __attribute__ ((__packed__)) hci_read_bdaddr_rp;
   1468 
   1469 /**************************************************************************
   1470  **************************************************************************
   1471  ** OGF 0x05	Status commands and return parameters
   1472  **************************************************************************
   1473  **************************************************************************/
   1474 
   1475 #define HCI_OGF_STATUS				0x05
   1476 
   1477 #define HCI_OCF_READ_FAILED_CONTACT_CNTR		0x0001
   1478 #define HCI_CMD_READ_FAILED_CONTACT_CNTR		0x1401
   1479 typedef struct {
   1480 	uint16_t	con_handle; /* connection handle */
   1481 } __attribute__ ((__packed__)) hci_read_failed_contact_cntr_cp;
   1482 
   1483 typedef struct {
   1484 	uint8_t		status;     /* 0x00 - success */
   1485 	uint16_t	con_handle; /* connection handle */
   1486 	uint16_t	counter;    /* number of consecutive failed contacts */
   1487 } __attribute__ ((__packed__)) hci_read_failed_contact_cntr_rp;
   1488 
   1489 #define HCI_OCF_RESET_FAILED_CONTACT_CNTR		0x0002
   1490 #define HCI_CMD_RESET_FAILED_CONTACT_CNTR		0x1402
   1491 typedef struct {
   1492 	uint16_t	con_handle; /* connection handle */
   1493 } __attribute__ ((__packed__)) hci_reset_failed_contact_cntr_cp;
   1494 
   1495 typedef struct {
   1496 	uint8_t		status;     /* 0x00 - success */
   1497 	uint16_t	con_handle; /* connection handle */
   1498 } __attribute__ ((__packed__)) hci_reset_failed_contact_cntr_rp;
   1499 
   1500 #define HCI_OCF_READ_LINK_QUALITY			0x0003
   1501 #define HCI_CMD_READ_LINK_QUALITY			0x1403
   1502 typedef struct {
   1503 	uint16_t	con_handle; /* connection handle */
   1504 } __attribute__ ((__packed__)) hci_read_link_quality_cp;
   1505 
   1506 typedef struct {
   1507 	uint8_t		status;     /* 0x00 - success */
   1508 	uint16_t	con_handle; /* connection handle */
   1509 	uint8_t		quality;    /* higher value means better quality */
   1510 } __attribute__ ((__packed__)) hci_read_link_quality_rp;
   1511 
   1512 #define HCI_OCF_READ_RSSI				0x0005
   1513 #define HCI_CMD_READ_RSSI				0x1405
   1514 typedef struct {
   1515 	uint16_t	con_handle; /* connection handle */
   1516 } __attribute__ ((__packed__)) hci_read_rssi_cp;
   1517 
   1518 typedef struct {
   1519 	uint8_t		status;     /* 0x00 - success */
   1520 	uint16_t	con_handle; /* connection handle */
   1521 	char		rssi;       /* -127 <= rssi <= 127 dB */
   1522 } __attribute__ ((__packed__)) hci_read_rssi_rp;
   1523 
   1524 #define HCI_OCF_READ_AFH_CHANNEL_MAP			0x0006
   1525 #define HCI_CMD_READ_AFH_CHANNEL_MAP			0x1406
   1526 typedef struct {
   1527 	uint16_t	con_handle; /* connection handle */
   1528 } __attribute__ ((__packed__)) hci_read_afh_channel_map_cp;
   1529 
   1530 typedef struct {
   1531 	uint8_t		status;     /* 0x00 - success */
   1532 	uint16_t	con_handle; /* connection handle */
   1533 	uint8_t		mode;       /* AFH mode */
   1534 	uint8_t		map[10];    /* AFH Channel Map */
   1535 } __attribute__ ((__packed__)) hci_read_afh_channel_map_rp;
   1536 
   1537 #define HCI_OCF_READ_CLOCK				0x0007
   1538 #define HCI_CMD_READ_CLOCK				0x1407
   1539 typedef struct {
   1540 	uint16_t	con_handle;	/* connection handle */
   1541 	uint8_t		clock;		/* which clock */
   1542 } __attribute__ ((__packed__)) hci_read_clock_cp;
   1543 
   1544 typedef struct {
   1545 	uint8_t		status;		/* 0x00 - success */
   1546 	uint16_t	con_handle;	/* connection handle */
   1547 	uint32_t	clock;		/* clock value */
   1548 	uint16_t	accuracy;	/* clock accuracy */
   1549 } __attribute__ ((__packed__)) hci_read_clock_rp;
   1550 
   1551 
   1552 /**************************************************************************
   1553  **************************************************************************
   1554  ** OGF 0x06	Testing commands and return parameters
   1555  **************************************************************************
   1556  **************************************************************************/
   1557 
   1558 #define HCI_OGF_TESTING				0x06
   1559 
   1560 #define HCI_OCF_READ_LOOPBACK_MODE			0x0001
   1561 #define HCI_CMD_READ_LOOPBACK_MODE			0x1801
   1562 /* No command parameter(s) */
   1563 typedef struct {
   1564 	uint8_t		status; /* 0x00 - success */
   1565 	uint8_t		lbmode; /* loopback mode */
   1566 } __attribute__ ((__packed__)) hci_read_loopback_mode_rp;
   1567 
   1568 #define HCI_OCF_WRITE_LOOPBACK_MODE			0x0002
   1569 #define HCI_CMD_WRITE_LOOPBACK_MODE			0x1802
   1570 typedef struct {
   1571 	uint8_t		lbmode; /* loopback mode */
   1572 } __attribute__ ((__packed__)) hci_write_loopback_mode_cp;
   1573 
   1574 typedef hci_status_rp	hci_write_loopback_mode_rp;
   1575 
   1576 #define HCI_OCF_ENABLE_UNIT_UNDER_TEST			0x0003
   1577 #define HCI_CMD_ENABLE_UNIT_UNDER_TEST			0x1803
   1578 /* No command parameter(s) */
   1579 typedef hci_status_rp	hci_enable_unit_under_test_rp;
   1580 
   1581 /**************************************************************************
   1582  **************************************************************************
   1583  ** OGF 0x3e	Bluetooth Logo Testing
   1584  ** OGF 0x3f	Vendor Specific
   1585  **************************************************************************
   1586  **************************************************************************/
   1587 
   1588 #define HCI_OGF_BT_LOGO				0x3e
   1589 #define HCI_OGF_VENDOR				0x3f
   1590 
   1591 /* Ericsson specific FC */
   1592 #define HCI_CMD_ERICSSON_WRITE_PCM_SETTINGS		0xFC07
   1593 #define HCI_CMD_ERICSSON_SET_UART_BAUD_RATE		0xFC09
   1594 #define HCI_CMD_ERICSSON_SET_SCO_DATA_PATH		0xFC1D
   1595 
   1596 /* Cambridge Silicon Radio specific FC */
   1597 #define HCI_CMD_CSR_EXTN				0xFC00
   1598 
   1599 
   1600 /**************************************************************************
   1601  **************************************************************************
   1602  **                         Events and event parameters
   1603  **************************************************************************
   1604  **************************************************************************/
   1605 
   1606 #define HCI_EVENT_INQUIRY_COMPL			0x01
   1607 typedef struct {
   1608 	uint8_t		status; /* 0x00 - success */
   1609 } __attribute__ ((__packed__)) hci_inquiry_compl_ep;
   1610 
   1611 #define HCI_EVENT_INQUIRY_RESULT		0x02
   1612 typedef struct {
   1613 	uint8_t		num_responses;      /* number of responses */
   1614 /*	hci_inquiry_response[num_responses]   -- see below */
   1615 } __attribute__ ((__packed__)) hci_inquiry_result_ep;
   1616 
   1617 typedef struct {
   1618 	bdaddr_t	bdaddr;                   /* unit address */
   1619 	uint8_t		page_scan_rep_mode;       /* page scan rep. mode */
   1620 	uint8_t		page_scan_period_mode;    /* page scan period mode */
   1621 	uint8_t		page_scan_mode;           /* page scan mode */
   1622 	uint8_t		uclass[HCI_CLASS_SIZE];   /* unit class */
   1623 	uint16_t	clock_offset;             /* clock offset */
   1624 } __attribute__ ((__packed__)) hci_inquiry_response;
   1625 
   1626 #define HCI_EVENT_CON_COMPL			0x03
   1627 typedef struct {
   1628 	uint8_t		status;          /* 0x00 - success */
   1629 	uint16_t	con_handle;      /* Connection handle */
   1630 	bdaddr_t	bdaddr;          /* remote unit address */
   1631 	uint8_t		link_type;       /* Link type */
   1632 	uint8_t		encryption_mode; /* Encryption mode */
   1633 } __attribute__ ((__packed__)) hci_con_compl_ep;
   1634 
   1635 #define HCI_EVENT_CON_REQ			0x04
   1636 typedef struct {
   1637 	bdaddr_t	bdaddr;                 /* remote unit address */
   1638 	uint8_t		uclass[HCI_CLASS_SIZE]; /* remote unit class */
   1639 	uint8_t		link_type;              /* link type */
   1640 } __attribute__ ((__packed__)) hci_con_req_ep;
   1641 
   1642 #define HCI_EVENT_DISCON_COMPL			0x05
   1643 typedef struct {
   1644 	uint8_t		status;     /* 0x00 - success */
   1645 	uint16_t	con_handle; /* connection handle */
   1646 	uint8_t		reason;     /* reason to disconnect */
   1647 } __attribute__ ((__packed__)) hci_discon_compl_ep;
   1648 
   1649 #define HCI_EVENT_AUTH_COMPL			0x06
   1650 typedef struct {
   1651 	uint8_t		status;     /* 0x00 - success */
   1652 	uint16_t	con_handle; /* connection handle */
   1653 } __attribute__ ((__packed__)) hci_auth_compl_ep;
   1654 
   1655 #define HCI_EVENT_REMOTE_NAME_REQ_COMPL		0x07
   1656 typedef struct {
   1657 	uint8_t		status;                   /* 0x00 - success */
   1658 	bdaddr_t	bdaddr;                   /* remote unit address */
   1659 	char		name[HCI_UNIT_NAME_SIZE]; /* remote unit name */
   1660 } __attribute__ ((__packed__)) hci_remote_name_req_compl_ep;
   1661 
   1662 #define HCI_EVENT_ENCRYPTION_CHANGE		0x08
   1663 typedef struct {
   1664 	uint8_t		status;            /* 0x00 - success */
   1665 	uint16_t	con_handle;        /* Connection handle */
   1666 	uint8_t		encryption_enable; /* 0x00 - disable */
   1667 } __attribute__ ((__packed__)) hci_encryption_change_ep;
   1668 
   1669 #define HCI_EVENT_CHANGE_CON_LINK_KEY_COMPL	0x09
   1670 typedef struct {
   1671 	uint8_t		status;     /* 0x00 - success */
   1672 	uint16_t	con_handle; /* Connection handle */
   1673 } __attribute__ ((__packed__)) hci_change_con_link_key_compl_ep;
   1674 
   1675 #define HCI_EVENT_MASTER_LINK_KEY_COMPL		0x0a
   1676 typedef struct {
   1677 	uint8_t		status;     /* 0x00 - success */
   1678 	uint16_t	con_handle; /* Connection handle */
   1679 	uint8_t		key_flag;   /* Key flag */
   1680 } __attribute__ ((__packed__)) hci_master_link_key_compl_ep;
   1681 
   1682 #define HCI_EVENT_READ_REMOTE_FEATURES_COMPL	0x0b
   1683 typedef struct {
   1684 	uint8_t		status;                      /* 0x00 - success */
   1685 	uint16_t	con_handle;                  /* Connection handle */
   1686 	uint8_t		features[HCI_FEATURES_SIZE]; /* LMP features bitmsk*/
   1687 } __attribute__ ((__packed__)) hci_read_remote_features_compl_ep;
   1688 
   1689 #define HCI_EVENT_READ_REMOTE_VER_INFO_COMPL	0x0c
   1690 typedef struct {
   1691 	uint8_t		status;         /* 0x00 - success */
   1692 	uint16_t	con_handle;     /* Connection handle */
   1693 	uint8_t		lmp_version;    /* LMP version */
   1694 	uint16_t	manufacturer;   /* Hardware manufacturer name */
   1695 	uint16_t	lmp_subversion; /* LMP sub-version */
   1696 } __attribute__ ((__packed__)) hci_read_remote_ver_info_compl_ep;
   1697 
   1698 #define HCI_EVENT_QOS_SETUP_COMPL		0x0d
   1699 typedef struct {
   1700 	uint8_t		status;          /* 0x00 - success */
   1701 	uint16_t	con_handle;      /* connection handle */
   1702 	uint8_t		flags;           /* reserved for future use */
   1703 	uint8_t		service_type;    /* service type */
   1704 	uint32_t	token_rate;      /* bytes per second */
   1705 	uint32_t	peak_bandwidth;  /* bytes per second */
   1706 	uint32_t	latency;         /* microseconds */
   1707 	uint32_t	delay_variation; /* microseconds */
   1708 } __attribute__ ((__packed__)) hci_qos_setup_compl_ep;
   1709 
   1710 #define HCI_EVENT_COMMAND_COMPL			0x0e
   1711 typedef struct {
   1712 	uint8_t		num_cmd_pkts; /* # of HCI command packets */
   1713 	uint16_t	opcode;       /* command OpCode */
   1714 	/* command return parameters (if any) */
   1715 } __attribute__ ((__packed__)) hci_command_compl_ep;
   1716 
   1717 #define HCI_EVENT_COMMAND_STATUS		0x0f
   1718 typedef struct {
   1719 	uint8_t		status;       /* 0x00 - pending */
   1720 	uint8_t		num_cmd_pkts; /* # of HCI command packets */
   1721 	uint16_t	opcode;       /* command OpCode */
   1722 } __attribute__ ((__packed__)) hci_command_status_ep;
   1723 
   1724 #define HCI_EVENT_HARDWARE_ERROR		0x10
   1725 typedef struct {
   1726 	uint8_t		hardware_code; /* hardware error code */
   1727 } __attribute__ ((__packed__)) hci_hardware_error_ep;
   1728 
   1729 #define HCI_EVENT_FLUSH_OCCUR			0x11
   1730 typedef struct {
   1731 	uint16_t	con_handle; /* connection handle */
   1732 } __attribute__ ((__packed__)) hci_flush_occur_ep;
   1733 
   1734 #define HCI_EVENT_ROLE_CHANGE			0x12
   1735 typedef struct {
   1736 	uint8_t		status; /* 0x00 - success */
   1737 	bdaddr_t	bdaddr; /* address of remote unit */
   1738 	uint8_t		role;   /* new connection role */
   1739 } __attribute__ ((__packed__)) hci_role_change_ep;
   1740 
   1741 #define HCI_EVENT_NUM_COMPL_PKTS		0x13
   1742 typedef struct {
   1743 	uint8_t		num_con_handles; /* # of connection handles */
   1744 /* these are repeated "num_con_handles" times
   1745 	uint16_t	con_handle; --- connection handle(s)
   1746 	uint16_t	compl_pkts; --- # of completed packets */
   1747 } __attribute__ ((__packed__)) hci_num_compl_pkts_ep;
   1748 
   1749 #define HCI_EVENT_MODE_CHANGE			0x14
   1750 typedef struct {
   1751 	uint8_t		status;     /* 0x00 - success */
   1752 	uint16_t	con_handle; /* connection handle */
   1753 	uint8_t		unit_mode;  /* remote unit mode */
   1754 	uint16_t	interval;   /* interval * 0.625 msec */
   1755 } __attribute__ ((__packed__)) hci_mode_change_ep;
   1756 
   1757 #define HCI_EVENT_RETURN_LINK_KEYS		0x15
   1758 typedef struct {
   1759 	uint8_t		num_keys; /* # of keys */
   1760 /* these are repeated "num_keys" times
   1761 	bdaddr_t	bdaddr;               --- remote address(es)
   1762 	uint8_t		key[HCI_KEY_SIZE]; --- key(s) */
   1763 } __attribute__ ((__packed__)) hci_return_link_keys_ep;
   1764 
   1765 #define HCI_EVENT_PIN_CODE_REQ			0x16
   1766 typedef struct {
   1767 	bdaddr_t	bdaddr; /* remote unit address */
   1768 } __attribute__ ((__packed__)) hci_pin_code_req_ep;
   1769 
   1770 #define HCI_EVENT_LINK_KEY_REQ			0x17
   1771 typedef struct {
   1772 	bdaddr_t	bdaddr; /* remote unit address */
   1773 } __attribute__ ((__packed__)) hci_link_key_req_ep;
   1774 
   1775 #define HCI_EVENT_LINK_KEY_NOTIFICATION		0x18
   1776 typedef struct {
   1777 	bdaddr_t	bdaddr;            /* remote unit address */
   1778 	uint8_t		key[HCI_KEY_SIZE]; /* link key */
   1779 	uint8_t		key_type;          /* type of the key */
   1780 } __attribute__ ((__packed__)) hci_link_key_notification_ep;
   1781 
   1782 #define HCI_EVENT_LOOPBACK_COMMAND		0x19
   1783 typedef hci_cmd_hdr_t	hci_loopback_command_ep;
   1784 
   1785 #define HCI_EVENT_DATA_BUFFER_OVERFLOW		0x1a
   1786 typedef struct {
   1787 	uint8_t		link_type; /* Link type */
   1788 } __attribute__ ((__packed__)) hci_data_buffer_overflow_ep;
   1789 
   1790 #define HCI_EVENT_MAX_SLOT_CHANGE		0x1b
   1791 typedef struct {
   1792 	uint16_t	con_handle;    /* connection handle */
   1793 	uint8_t		lmp_max_slots; /* Max. # of slots allowed */
   1794 } __attribute__ ((__packed__)) hci_max_slot_change_ep;
   1795 
   1796 #define HCI_EVENT_READ_CLOCK_OFFSET_COMPL	0x1c
   1797 typedef struct {
   1798 	uint8_t		status;       /* 0x00 - success */
   1799 	uint16_t	con_handle;   /* Connection handle */
   1800 	uint16_t	clock_offset; /* Clock offset */
   1801 } __attribute__ ((__packed__)) hci_read_clock_offset_compl_ep;
   1802 
   1803 #define HCI_EVENT_CON_PKT_TYPE_CHANGED		0x1d
   1804 typedef struct {
   1805 	uint8_t		status;     /* 0x00 - success */
   1806 	uint16_t	con_handle; /* connection handle */
   1807 	uint16_t	pkt_type;   /* packet type */
   1808 } __attribute__ ((__packed__)) hci_con_pkt_type_changed_ep;
   1809 
   1810 #define HCI_EVENT_QOS_VIOLATION			0x1e
   1811 typedef struct {
   1812 	uint16_t	con_handle; /* connection handle */
   1813 } __attribute__ ((__packed__)) hci_qos_violation_ep;
   1814 
   1815 /* Page Scan Mode Change Event is deprecated */
   1816 #define HCI_EVENT_PAGE_SCAN_MODE_CHANGE		0x1f
   1817 typedef struct {
   1818 	bdaddr_t	bdaddr;         /* destination address */
   1819 	uint8_t		page_scan_mode; /* page scan mode */
   1820 } __attribute__ ((__packed__)) hci_page_scan_mode_change_ep;
   1821 
   1822 #define HCI_EVENT_PAGE_SCAN_REP_MODE_CHANGE	0x20
   1823 typedef struct {
   1824 	bdaddr_t	bdaddr;             /* destination address */
   1825 	uint8_t		page_scan_rep_mode; /* page scan repetition mode */
   1826 } __attribute__ ((__packed__)) hci_page_scan_rep_mode_change_ep;
   1827 
   1828 #define HCI_EVENT_FLOW_SPECIFICATION_COMPL	0x21
   1829 typedef struct {
   1830 	uint8_t		status;		/* 0x00 - success */
   1831 	uint16_t	con_handle;	/* connection handle */
   1832 	uint8_t		flags;		/* reserved */
   1833 	uint8_t		direction;	/* flow direction */
   1834 	uint8_t		type;		/* service type */
   1835 	uint32_t	token_rate;	/* token rate */
   1836 	uint32_t	bucket_size;	/* token bucket size */
   1837 	uint32_t	peak_bandwidth;	/* peak bandwidth */
   1838 	uint32_t	latency;	/* access latency */
   1839 } __attribute__ ((__packed__)) hci_flow_specification_compl_ep;
   1840 
   1841 #define HCI_EVENT_RSSI_RESULT			0x22
   1842 typedef struct {
   1843 	uint8_t		num_responses;      /* number of responses */
   1844 /*	hci_rssi_response[num_responses]   -- see below */
   1845 } __attribute__ ((__packed__)) hci_rssi_result_ep;
   1846 
   1847 typedef struct {
   1848 	bdaddr_t	bdaddr;			/* unit address */
   1849 	uint8_t		page_scan_rep_mode;	/* page scan rep. mode */
   1850 	uint8_t		blank;			/* reserved */
   1851 	uint8_t		uclass[HCI_CLASS_SIZE];	/* unit class */
   1852 	uint16_t	clock_offset;		/* clock offset */
   1853 	int8_t		rssi;			/* rssi */
   1854 } __attribute__ ((__packed__)) hci_rssi_response;
   1855 
   1856 #define HCI_EVENT_READ_REMOTE_EXTENDED_FEATURES	0x23
   1857 typedef struct {
   1858 	uint8_t		status;		/* 0x00 - success */
   1859 	uint16_t	con_handle;	/* connection handle */
   1860 	uint8_t		page;		/* page number */
   1861 	uint8_t		max;		/* max page number */
   1862 	uint8_t		features[HCI_FEATURES_SIZE]; /* LMP features bitmsk*/
   1863 } __attribute__ ((__packed__)) hci_read_remote_extended_features_ep;
   1864 
   1865 #define HCI_EVENT_SCO_CON_COMPL			0x2c
   1866 typedef struct {
   1867 	uint8_t		status;		/* 0x00 - success */
   1868 	uint16_t	con_handle;	/* connection handle */
   1869 	bdaddr_t	bdaddr;		/* unit address */
   1870 	uint8_t		link_type;	/* link type */
   1871 	uint8_t		interval;	/* transmission interval */
   1872 	uint8_t		window;		/* retransmission window */
   1873 	uint16_t	rxlen;		/* rx packet length */
   1874 	uint16_t	txlen;		/* tx packet length */
   1875 	uint8_t		mode;		/* air mode */
   1876 } __attribute__ ((__packed__)) hci_sco_con_compl_ep;
   1877 
   1878 #define HCI_EVENT_SCO_CON_CHANGED		0x2d
   1879 typedef struct {
   1880 	uint8_t		status;		/* 0x00 - success */
   1881 	uint16_t	con_handle;	/* connection handle */
   1882 	uint8_t		interval;	/* transmission interval */
   1883 	uint8_t		window;		/* retransmission window */
   1884 	uint16_t	rxlen;		/* rx packet length */
   1885 	uint16_t	txlen;		/* tx packet length */
   1886 } __attribute__ ((__packed__)) hci_sco_con_changed_ep;
   1887 
   1888 #define HCI_EVENT_BT_LOGO			0xfe
   1889 
   1890 #define HCI_EVENT_VENDOR			0xff
   1891 
   1892 /**************************************************************************
   1893  **************************************************************************
   1894  **                 HCI Socket Definitions
   1895  **************************************************************************
   1896  **************************************************************************/
   1897 
   1898 /* HCI socket options */
   1899 #define SO_HCI_EVT_FILTER		1	/* get/set event filter */
   1900 #define SO_HCI_PKT_FILTER		2	/* get/set packet filter */
   1901 #define SO_HCI_DIRECTION		3	/* packet direction indicator */
   1902 
   1903 /* Control Messages */
   1904 #define SCM_HCI_DIRECTION		SO_HCI_DIRECTION
   1905 
   1906 /*
   1907  * HCI socket filter and get/set routines
   1908  *
   1909  * for ease of use, we filter 256 possible events/packets
   1910  */
   1911 struct hci_filter {
   1912 	uint32_t	mask[8];	/* 256 bits */
   1913 };
   1914 
   1915 static __inline void
   1916 hci_filter_set(uint8_t bit, struct hci_filter *filter)
   1917 {
   1918 	uint8_t off = bit - 1;
   1919 
   1920 	off >>= 5;
   1921 	filter->mask[off] |= (1 << ((bit - 1) & 0x1f));
   1922 }
   1923 
   1924 static __inline void
   1925 hci_filter_clr(uint8_t bit, struct hci_filter *filter)
   1926 {
   1927 	uint8_t off = bit - 1;
   1928 
   1929 	off >>= 5;
   1930 	filter->mask[off] &= ~(1 << ((bit - 1) & 0x1f));
   1931 }
   1932 
   1933 static __inline int
   1934 hci_filter_test(uint8_t bit, struct hci_filter *filter)
   1935 {
   1936 	uint8_t off = bit - 1;
   1937 
   1938 	off >>= 5;
   1939 	return (filter->mask[off] & (1 << ((bit - 1) & 0x1f)));
   1940 }
   1941 
   1942 /*
   1943  * HCI socket ioctl's
   1944  *
   1945  * Apart from GBTINFOA, these are all indexed on the unit name
   1946  */
   1947 
   1948 #define SIOCGBTINFO	_IOWR('b',  5, struct btreq) /* get unit info */
   1949 #define SIOCGBTINFOA	_IOWR('b',  6, struct btreq) /* get info by address */
   1950 #define SIOCNBTINFO	_IOWR('b',  7, struct btreq) /* next unit info */
   1951 
   1952 #define SIOCSBTFLAGS	_IOWR('b',  8, struct btreq) /* set unit flags */
   1953 #define SIOCSBTPOLICY	_IOWR('b',  9, struct btreq) /* set unit link policy */
   1954 #define SIOCSBTPTYPE	_IOWR('b', 10, struct btreq) /* set unit packet type */
   1955 
   1956 #define SIOCGBTSTATS	_IOWR('b', 11, struct btreq) /* get unit statistics */
   1957 #define SIOCZBTSTATS	_IOWR('b', 12, struct btreq) /* zero unit statistics */
   1958 
   1959 #define SIOCBTDUMP	 _IOW('b', 13, struct btreq) /* print debug info */
   1960 #define SIOCSBTSCOMTU	_IOWR('b', 17, struct btreq) /* set sco_mtu value */
   1961 
   1962 struct bt_stats {
   1963 	uint32_t	err_tx;
   1964 	uint32_t	err_rx;
   1965 	uint32_t	cmd_tx;
   1966 	uint32_t	evt_rx;
   1967 	uint32_t	acl_tx;
   1968 	uint32_t	acl_rx;
   1969 	uint32_t	sco_tx;
   1970 	uint32_t	sco_rx;
   1971 	uint32_t	byte_tx;
   1972 	uint32_t	byte_rx;
   1973 };
   1974 
   1975 struct btreq {
   1976 	char	btr_name[HCI_DEVNAME_SIZE];	/* device name */
   1977 
   1978 	union {
   1979 	    struct {
   1980 		bdaddr_t btri_bdaddr;		/* device bdaddr */
   1981 		uint16_t btri_flags;		/* flags */
   1982 		uint16_t btri_num_cmd;		/* # of free cmd buffers */
   1983 		uint16_t btri_num_acl;		/* # of free ACL buffers */
   1984 		uint16_t btri_num_sco;		/* # of free SCO buffers */
   1985 		uint16_t btri_acl_mtu;		/* ACL mtu */
   1986 		uint16_t btri_sco_mtu;		/* SCO mtu */
   1987 		uint16_t btri_link_policy;	/* Link Policy */
   1988 		uint16_t btri_packet_type;	/* Packet Type */
   1989 	    } btri;
   1990 	    struct bt_stats btrs;   /* unit stats */
   1991 	} btru;
   1992 };
   1993 
   1994 #define btr_flags	btru.btri.btri_flags
   1995 #define btr_bdaddr	btru.btri.btri_bdaddr
   1996 #define btr_num_cmd	btru.btri.btri_num_cmd
   1997 #define btr_num_acl	btru.btri.btri_num_acl
   1998 #define btr_num_sco	btru.btri.btri_num_sco
   1999 #define btr_acl_mtu	btru.btri.btri_acl_mtu
   2000 #define btr_sco_mtu	btru.btri.btri_sco_mtu
   2001 #define btr_link_policy btru.btri.btri_link_policy
   2002 #define btr_packet_type btru.btri.btri_packet_type
   2003 #define btr_stats	btru.btrs
   2004 
   2005 /* hci_unit & btr_flags */
   2006 #define BTF_UP			(1<<0)	/* unit is up */
   2007 #define BTF_RUNNING		(1<<1)	/* unit is running */
   2008 #define BTF_XMIT_CMD		(1<<2)	/* unit is transmitting CMD packets */
   2009 #define BTF_XMIT_ACL		(1<<3)	/* unit is transmitting ACL packets */
   2010 #define BTF_XMIT_SCO		(1<<4)	/* unit is transmitting SCO packets */
   2011 #define BTF_XMIT		(BTF_XMIT_CMD | BTF_XMIT_ACL | BTF_XMIT_SCO)
   2012 #define BTF_INIT_BDADDR		(1<<5)	/* waiting for bdaddr */
   2013 #define BTF_INIT_BUFFER_SIZE	(1<<6)	/* waiting for buffer size */
   2014 #define BTF_INIT_FEATURES	(1<<7)	/* waiting for features */
   2015 #define BTF_POWER_UP_NOOP	(1<<8)	/* should wait for No-op on power up */
   2016 #define BTF_INIT_COMMANDS	(1<<9)	/* waiting for supported commands */
   2017 
   2018 #define BTF_INIT		(BTF_INIT_BDADDR	\
   2019 				| BTF_INIT_BUFFER_SIZE	\
   2020 				| BTF_INIT_FEATURES	\
   2021 				| BTF_INIT_COMMANDS)
   2022 
   2023 /**************************************************************************
   2024  **************************************************************************
   2025  **                 HCI Kernel Definitions
   2026  **************************************************************************
   2027  **************************************************************************/
   2028 
   2029 #ifdef _KERNEL
   2030 
   2031 #include <sys/device.h>
   2032 
   2033 struct l2cap_channel;
   2034 struct mbuf;
   2035 struct sco_pcb;
   2036 struct socket;
   2037 
   2038 /* global HCI kernel variables */
   2039 
   2040 /* sysctl variables */
   2041 extern int hci_memo_expiry;
   2042 extern int hci_acl_expiry;
   2043 extern int hci_sendspace, hci_recvspace;
   2044 extern int hci_eventq_max, hci_aclrxq_max, hci_scorxq_max;
   2045 
   2046 /*
   2047  * HCI Connection Information
   2048  */
   2049 struct hci_link {
   2050 	struct hci_unit		*hl_unit;	/* our unit */
   2051 	TAILQ_ENTRY(hci_link)	 hl_next;	/* next link on unit */
   2052 
   2053 	/* common info */
   2054 	uint16_t		 hl_state;	/* connection state */
   2055 	uint16_t		 hl_flags;	/* link flags */
   2056 	bdaddr_t		 hl_bdaddr;	/* dest address */
   2057 	uint16_t		 hl_handle;	/* connection handle */
   2058 	uint8_t			 hl_type;	/* link type */
   2059 
   2060 	/* ACL link info */
   2061 	uint8_t			 hl_lastid;	/* last id used */
   2062 	uint16_t		 hl_refcnt;	/* reference count */
   2063 	uint16_t		 hl_mtu;	/* signalling mtu for link */
   2064 	uint16_t		 hl_flush;	/* flush timeout */
   2065 	uint16_t		 hl_clock;	/* remote clock offset */
   2066 
   2067 	TAILQ_HEAD(,l2cap_pdu)	 hl_txq;	/* queue of outgoing PDUs */
   2068 	int			 hl_txqlen;	/* number of fragments */
   2069 	struct mbuf		*hl_rxp;	/* incoming PDU (accumulating)*/
   2070 	callout_t		 hl_expire;	/* connection expiry timer */
   2071 	TAILQ_HEAD(,l2cap_req)	 hl_reqs;	/* pending requests */
   2072 
   2073 	/* SCO link info */
   2074 	struct hci_link		*hl_link;	/* SCO ACL link */
   2075 	struct sco_pcb		*hl_sco;	/* SCO pcb */
   2076 	MBUFQ_HEAD()		 hl_data;	/* SCO outgoing data */
   2077 };
   2078 
   2079 /* hci_link state */
   2080 #define HCI_LINK_CLOSED		0  /* closed */
   2081 #define HCI_LINK_WAIT_CONNECT	1  /* waiting to connect */
   2082 #define HCI_LINK_WAIT_AUTH	2  /* waiting for auth */
   2083 #define HCI_LINK_WAIT_ENCRYPT	3  /* waiting for encrypt */
   2084 #define HCI_LINK_WAIT_SECURE	4  /* waiting for secure */
   2085 #define HCI_LINK_OPEN		5  /* ready and willing */
   2086 #define HCI_LINK_BLOCK		6  /* open but blocking (see hci_acl_start) */
   2087 
   2088 /* hci_link flags */
   2089 #define HCI_LINK_AUTH_REQ	(1<<0)  /* authentication requested */
   2090 #define HCI_LINK_ENCRYPT_REQ	(1<<1)  /* encryption requested */
   2091 #define HCI_LINK_SECURE_REQ	(1<<2)	/* secure link requested */
   2092 #define HCI_LINK_AUTH		(1<<3)	/* link is authenticated */
   2093 #define HCI_LINK_ENCRYPT	(1<<4)	/* link is encrypted */
   2094 #define HCI_LINK_SECURE		(1<<5)	/* link is secured */
   2095 
   2096 /*
   2097  * Bluetooth Memo
   2098  *	cached device information for remote devices that this unit has seen
   2099  */
   2100 struct hci_memo {
   2101 	struct timeval		time;		/* time of last response */
   2102 	bdaddr_t		bdaddr;
   2103 	uint8_t			page_scan_rep_mode;
   2104 	uint8_t			page_scan_mode;
   2105 	uint16_t		clock_offset;
   2106 	LIST_ENTRY(hci_memo)	next;
   2107 };
   2108 
   2109 /*
   2110  * The Bluetooth HCI interface attachment structure
   2111  */
   2112 struct hci_if {
   2113 	int	(*enable)(device_t);
   2114 	void	(*disable)(device_t);
   2115 	void	(*output_cmd)(device_t, struct mbuf *);
   2116 	void	(*output_acl)(device_t, struct mbuf *);
   2117 	void	(*output_sco)(device_t, struct mbuf *);
   2118 	void	(*get_stats)(device_t, struct bt_stats *, int);
   2119 	int	ipl;		/* for locking */
   2120 };
   2121 
   2122 /*
   2123  * The Bluetooth HCI device unit structure
   2124  */
   2125 struct hci_unit {
   2126 	device_t	 hci_dev;		/* bthci handle */
   2127 	device_t	 hci_bthub;		/* bthub(4) handle */
   2128 	const struct hci_if *hci_if;		/* bthci driver interface */
   2129 
   2130 	/* device info */
   2131 	bdaddr_t	 hci_bdaddr;		/* device address */
   2132 	uint16_t	 hci_flags;		/* see BTF_ above */
   2133 
   2134 	uint16_t	 hci_packet_type;	/* packet types */
   2135 	uint16_t	 hci_acl_mask;		/* ACL packet capabilities */
   2136 	uint16_t	 hci_sco_mask;		/* SCO packet capabilities */
   2137 
   2138 	uint16_t	 hci_link_policy;	/* link policy */
   2139 	uint16_t	 hci_lmp_mask;		/* link policy capabilities */
   2140 
   2141 	uint8_t		 hci_cmds[HCI_COMMANDS_SIZE]; /* opcode bitmask */
   2142 
   2143 	/* flow control */
   2144 	uint16_t	 hci_max_acl_size;	/* ACL payload mtu */
   2145 	uint16_t	 hci_num_acl_pkts;	/* free ACL packet buffers */
   2146 	uint8_t		 hci_num_cmd_pkts;	/* free CMD packet buffers */
   2147 	uint8_t		 hci_max_sco_size;	/* SCO payload mtu */
   2148 	uint16_t	 hci_num_sco_pkts;	/* free SCO packet buffers */
   2149 
   2150 	TAILQ_HEAD(,hci_link)	hci_links;	/* list of ACL/SCO links */
   2151 	LIST_HEAD(,hci_memo)	hci_memos;	/* cached memo list */
   2152 
   2153 	/* input queues */
   2154 	void			*hci_rxint;	/* receive interrupt cookie */
   2155 	kmutex_t		 hci_devlock;	/* device queue lock */
   2156 	MBUFQ_HEAD()		 hci_eventq;	/* Event queue */
   2157 	MBUFQ_HEAD()		 hci_aclrxq;	/* ACL rx queue */
   2158 	MBUFQ_HEAD()		 hci_scorxq;	/* SCO rx queue */
   2159 	uint16_t		 hci_eventqlen;	/* Event queue length */
   2160 	uint16_t		 hci_aclrxqlen;	/* ACL rx queue length */
   2161 	uint16_t		 hci_scorxqlen;	/* SCO rx queue length */
   2162 
   2163 	/* output queues */
   2164 	MBUFQ_HEAD()		 hci_cmdwait;	/* pending commands */
   2165 	MBUFQ_HEAD()		 hci_scodone;	/* SCO done queue */
   2166 
   2167 	SIMPLEQ_ENTRY(hci_unit) hci_next;
   2168 };
   2169 
   2170 extern SIMPLEQ_HEAD(hci_unit_list, hci_unit) hci_unit_list;
   2171 
   2172 /*
   2173  * HCI layer function prototypes
   2174  */
   2175 
   2176 /* hci_event.c */
   2177 void hci_event(struct mbuf *, struct hci_unit *);
   2178 
   2179 /* hci_ioctl.c */
   2180 int hci_ioctl(unsigned long, void *, struct lwp *);
   2181 
   2182 /* hci_link.c */
   2183 struct hci_link *hci_acl_open(struct hci_unit *, bdaddr_t *);
   2184 struct hci_link *hci_acl_newconn(struct hci_unit *, bdaddr_t *);
   2185 void hci_acl_close(struct hci_link *, int);
   2186 void hci_acl_timeout(void *);
   2187 int hci_acl_setmode(struct hci_link *);
   2188 void hci_acl_linkmode(struct hci_link *);
   2189 void hci_acl_recv(struct mbuf *, struct hci_unit *);
   2190 int hci_acl_send(struct mbuf *, struct hci_link *, struct l2cap_channel *);
   2191 void hci_acl_start(struct hci_link *);
   2192 void hci_acl_complete(struct hci_link *, int);
   2193 struct hci_link *hci_sco_newconn(struct hci_unit *, bdaddr_t *);
   2194 void hci_sco_recv(struct mbuf *, struct hci_unit *);
   2195 void hci_sco_start(struct hci_link *);
   2196 void hci_sco_complete(struct hci_link *, int);
   2197 struct hci_link *hci_link_alloc(struct hci_unit *);
   2198 void hci_link_free(struct hci_link *, int);
   2199 struct hci_link *hci_link_lookup_bdaddr(struct hci_unit *, bdaddr_t *, uint16_t);
   2200 struct hci_link *hci_link_lookup_handle(struct hci_unit *, uint16_t);
   2201 
   2202 /* hci_misc.c */
   2203 int hci_route_lookup(bdaddr_t *, bdaddr_t *);
   2204 struct hci_memo *hci_memo_find(struct hci_unit *, bdaddr_t *);
   2205 struct hci_memo *hci_memo_new(struct hci_unit *, bdaddr_t *);
   2206 void hci_memo_free(struct hci_memo *);
   2207 
   2208 /* hci_socket.c */
   2209 void hci_drop(void *);
   2210 int hci_usrreq(struct socket *, int, struct mbuf *, struct mbuf *, struct mbuf *, struct lwp *);
   2211 int hci_ctloutput(int, struct socket *, int, int, struct mbuf **);
   2212 void hci_mtap(struct mbuf *, struct hci_unit *);
   2213 
   2214 /* hci_unit.c */
   2215 struct hci_unit *hci_attach(const struct hci_if *, device_t, uint16_t);
   2216 void hci_detach(struct hci_unit *);
   2217 int hci_enable(struct hci_unit *);
   2218 void hci_disable(struct hci_unit *);
   2219 struct hci_unit *hci_unit_lookup(bdaddr_t *);
   2220 int hci_send_cmd(struct hci_unit *, uint16_t, void *, uint8_t);
   2221 bool hci_input_event(struct hci_unit *, struct mbuf *);
   2222 bool hci_input_acl(struct hci_unit *, struct mbuf *);
   2223 bool hci_input_sco(struct hci_unit *, struct mbuf *);
   2224 bool hci_complete_sco(struct hci_unit *, struct mbuf *);
   2225 void hci_output_cmd(struct hci_unit *, struct mbuf *);
   2226 void hci_output_acl(struct hci_unit *, struct mbuf *);
   2227 void hci_output_sco(struct hci_unit *, struct mbuf *);
   2228 
   2229 #endif	/* _KERNEL */
   2230 
   2231 #endif /* _NETBT_HCI_H_ */
   2232