Home | History | Annotate | Download | only in hw
      1 /*
      2  * QEMU Bluetooth HCI helpers.
      3  *
      4  * Copyright (C) 2007 OpenMoko, Inc.
      5  * Written by Andrzej Zaborowski <andrew (at) openedhand.com>
      6  *
      7  * Useful definitions taken from BlueZ project's headers.
      8  * Copyright (C) 2000-2001  Qualcomm Incorporated
      9  * Copyright (C) 2002-2003  Maxim Krasnyansky <maxk (at) qualcomm.com>
     10  * Copyright (C) 2002-2006  Marcel Holtmann <marcel (at) holtmann.org>
     11  *
     12  * This program is free software; you can redistribute it and/or
     13  * modify it under the terms of the GNU General Public License as
     14  * published by the Free Software Foundation; either version 2 of
     15  * the License, or (at your option) any later version.
     16  *
     17  * This program is distributed in the hope that it will be useful,
     18  * but WITHOUT ANY WARRANTY; without even the implied warranty of
     19  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
     20  * GNU General Public License for more details.
     21  *
     22  * You should have received a copy of the GNU General Public License
     23  * along with this program; if not, see <http://www.gnu.org/licenses/>.
     24  */
     25 
     26 /* BD Address */
     27 typedef struct {
     28     uint8_t b[6];
     29 } __attribute__((packed)) bdaddr_t;
     30 
     31 #define BDADDR_ANY	(&(bdaddr_t) {{0, 0, 0, 0, 0, 0}})
     32 #define BDADDR_ALL	(&(bdaddr_t) {{0xff, 0xff, 0xff, 0xff, 0xff, 0xff}})
     33 #define BDADDR_LOCAL	(&(bdaddr_t) {{0, 0, 0, 0xff, 0xff, 0xff}})
     34 
     35 /* Copy, swap, convert BD Address */
     36 static inline int bacmp(const bdaddr_t *ba1, const bdaddr_t *ba2)
     37 {
     38     return memcmp(ba1, ba2, sizeof(bdaddr_t));
     39 }
     40 static inline void bacpy(bdaddr_t *dst, const bdaddr_t *src)
     41 {
     42     memcpy(dst, src, sizeof(bdaddr_t));
     43 }
     44 
     45 #define BAINIT(orig)	{ .b = {		\
     46     (orig)->b[0], (orig)->b[1], (orig)->b[2],	\
     47     (orig)->b[3], (orig)->b[4], (orig)->b[5],	\
     48 }, }
     49 
     50 /* The twisted structures of a bluetooth environment */
     51 struct bt_device_s;
     52 struct bt_scatternet_s;
     53 struct bt_piconet_s;
     54 struct bt_link_s;
     55 
     56 struct bt_scatternet_s {
     57     struct bt_device_s *slave;
     58 };
     59 
     60 struct bt_link_s {
     61     struct bt_device_s *slave, *host;
     62     uint16_t handle;		/* Master (host) side handle */
     63     uint16_t acl_interval;
     64     enum {
     65         acl_active,
     66         acl_hold,
     67         acl_sniff,
     68         acl_parked,
     69     } acl_mode;
     70 };
     71 
     72 struct bt_device_s {
     73     int lt_addr;
     74     bdaddr_t bd_addr;
     75     int mtu;
     76     int setup;
     77     struct bt_scatternet_s *net;
     78 
     79     uint8_t key[16];
     80     int key_present;
     81     uint8_t class[3];
     82 
     83     uint8_t reject_reason;
     84 
     85     uint64_t lmp_caps;
     86     const char *lmp_name;
     87     void (*lmp_connection_request)(struct bt_link_s *link);
     88     void (*lmp_connection_complete)(struct bt_link_s *link);
     89     void (*lmp_disconnect_master)(struct bt_link_s *link);
     90     void (*lmp_disconnect_slave)(struct bt_link_s *link);
     91     void (*lmp_acl_data)(struct bt_link_s *link, const uint8_t *data,
     92                     int start, int len);
     93     void (*lmp_acl_resp)(struct bt_link_s *link, const uint8_t *data,
     94                     int start, int len);
     95     void (*lmp_mode_change)(struct bt_link_s *link);
     96 
     97     void (*handle_destroy)(struct bt_device_s *device);
     98     struct bt_device_s *next;	/* Next in the piconet/scatternet */
     99 
    100     int inquiry_scan;
    101     int page_scan;
    102 
    103     uint16_t clkoff;	/* Note: Always little-endian */
    104 };
    105 
    106 /* bt.c */
    107 void bt_device_init(struct bt_device_s *dev, struct bt_scatternet_s *net);
    108 void bt_device_done(struct bt_device_s *dev);
    109 
    110 /* bt-hci.c */
    111 struct HCIInfo *bt_new_hci(struct bt_scatternet_s *net);
    112 
    113 /* bt-vhci.c */
    114 void bt_vhci_init(struct HCIInfo *info);
    115 
    116 /* bt-hci-csr.c */
    117 enum {
    118     csrhci_pin_reset,
    119     csrhci_pin_wakeup,
    120     __csrhci_pins,
    121 };
    122 qemu_irq *csrhci_pins_get(CharDriverState *chr);
    123 CharDriverState *uart_hci_init(qemu_irq wakeup);
    124 
    125 /* bt-l2cap.c */
    126 struct bt_l2cap_device_s;
    127 struct bt_l2cap_conn_params_s;
    128 struct bt_l2cap_psm_s;
    129 void bt_l2cap_device_init(struct bt_l2cap_device_s *dev,
    130                 struct bt_scatternet_s *net);
    131 void bt_l2cap_device_done(struct bt_l2cap_device_s *dev);
    132 void bt_l2cap_psm_register(struct bt_l2cap_device_s *dev, int psm,
    133                 int min_mtu, int (*new_channel)(struct bt_l2cap_device_s *dev,
    134                         struct bt_l2cap_conn_params_s *params));
    135 
    136 struct bt_l2cap_device_s {
    137     struct bt_device_s device;
    138     struct bt_l2cap_psm_s *first_psm;
    139 };
    140 
    141 struct bt_l2cap_conn_params_s {
    142     /* Input */
    143     uint8_t *(*sdu_out)(struct bt_l2cap_conn_params_s *chan, int len);
    144     void (*sdu_submit)(struct bt_l2cap_conn_params_s *chan);
    145     int remote_mtu;
    146     /* Output */
    147     void *opaque;
    148     void (*sdu_in)(void *opaque, const uint8_t *data, int len);
    149     void (*close)(void *opaque);
    150 };
    151 
    152 enum bt_l2cap_psm_predef {
    153     BT_PSM_SDP		= 0x0001,
    154     BT_PSM_RFCOMM	= 0x0003,
    155     BT_PSM_TELEPHONY	= 0x0005,
    156     BT_PSM_TCS		= 0x0007,
    157     BT_PSM_BNEP		= 0x000f,
    158     BT_PSM_HID_CTRL	= 0x0011,
    159     BT_PSM_HID_INTR	= 0x0013,
    160     BT_PSM_UPNP		= 0x0015,
    161     BT_PSM_AVCTP	= 0x0017,
    162     BT_PSM_AVDTP	= 0x0019,
    163 };
    164 
    165 /* bt-sdp.c */
    166 void bt_l2cap_sdp_init(struct bt_l2cap_device_s *dev);
    167 
    168 /* bt-hid.c */
    169 struct bt_device_s *bt_mouse_init(struct bt_scatternet_s *net);
    170 struct bt_device_s *bt_tablet_init(struct bt_scatternet_s *net);
    171 struct bt_device_s *bt_keyboard_init(struct bt_scatternet_s *net);
    172 
    173 /* Link Management Protocol layer defines */
    174 
    175 #define LLID_ACLU_CONT		0x1
    176 #define LLID_ACLU_START		0x2
    177 #define LLID_ACLC		0x3
    178 
    179 enum lmp_pdu_type {
    180     LMP_NAME_REQ		= 0x0001,
    181     LMP_NAME_RES		= 0x0002,
    182     LMP_ACCEPTED		= 0x0003,
    183     LMP_NOT_ACCEPTED		= 0x0004,
    184     LMP_CLKOFFSET_REQ		= 0x0005,
    185     LMP_CLKOFFSET_RES		= 0x0006,
    186     LMP_DETACH			= 0x0007,
    187     LMP_IN_RAND			= 0x0008,
    188     LMP_COMB_KEY		= 0x0009,
    189     LMP_UNIT_KEY		= 0x000a,
    190     LMP_AU_RAND			= 0x000b,
    191     LMP_SRES			= 0x000c,
    192     LMP_TEMP_RAND		= 0x000d,
    193     LMP_TEMP_KEY		= 0x000e,
    194     LMP_CRYPT_MODE_REQ		= 0x000f,
    195     LMP_CRYPT_KEY_SIZE_REQ	= 0x0010,
    196     LMP_START_ENCRYPT_REQ	= 0x0011,
    197     LMP_STOP_ENCRYPT_REQ	= 0x0012,
    198     LMP_SWITCH_REQ		= 0x0013,
    199     LMP_HOLD			= 0x0014,
    200     LMP_HOLD_REQ		= 0x0015,
    201     LMP_SNIFF_REQ		= 0x0017,
    202     LMP_UNSNIFF_REQ		= 0x0018,
    203     LMP_LMP_PARK_REQ		= 0x0019,
    204     LMP_SET_BCAST_SCAN_WND	= 0x001b,
    205     LMP_MODIFY_BEACON		= 0x001c,
    206     LMP_UNPARK_BD_ADDR_REQ	= 0x001d,
    207     LMP_UNPARK_PM_ADDR_REQ	= 0x001e,
    208     LMP_INCR_POWER_REQ		= 0x001f,
    209     LMP_DECR_POWER_REQ		= 0x0020,
    210     LMP_MAX_POWER		= 0x0021,
    211     LMP_MIN_POWER		= 0x0022,
    212     LMP_AUTO_RATE		= 0x0023,
    213     LMP_PREFERRED_RATE		= 0x0024,
    214     LMP_VERSION_REQ		= 0x0025,
    215     LMP_VERSION_RES		= 0x0026,
    216     LMP_FEATURES_REQ		= 0x0027,
    217     LMP_FEATURES_RES		= 0x0028,
    218     LMP_QUALITY_OF_SERVICE	= 0x0029,
    219     LMP_QOS_REQ			= 0x002a,
    220     LMP_RM_SCO_LINK_REQ		= 0x002b,
    221     LMP_SCO_LINK_REQ		= 0x002c,
    222     LMP_MAX_SLOT		= 0x002d,
    223     LMP_MAX_SLOT_REQ		= 0x002e,
    224     LMP_TIMING_ACCURACY_REQ	= 0x002f,
    225     LMP_TIMING_ACCURACY_RES	= 0x0030,
    226     LMP_SETUP_COMPLETE		= 0x0031,
    227     LMP_USE_SEMIPERM_KEY	= 0x0032,
    228     LMP_HOST_CONNECTION_REQ	= 0x0033,
    229     LMP_SLOT_OFFSET		= 0x0034,
    230     LMP_PAGE_MODE_REQ		= 0x0035,
    231     LMP_PAGE_SCAN_MODE_REQ	= 0x0036,
    232     LMP_SUPERVISION_TIMEOUT	= 0x0037,
    233     LMP_TEST_ACTIVATE		= 0x0038,
    234     LMP_TEST_CONTROL		= 0x0039,
    235     LMP_CRYPT_KEY_MASK_REQ	= 0x003a,
    236     LMP_CRYPT_KEY_MASK_RES	= 0x003b,
    237     LMP_SET_AFH			= 0x003c,
    238     LMP_ACCEPTED_EXT		= 0x7f01,
    239     LMP_NOT_ACCEPTED_EXT	= 0x7f02,
    240     LMP_FEATURES_REQ_EXT	= 0x7f03,
    241     LMP_FEATURES_RES_EXT	= 0x7f04,
    242     LMP_PACKET_TYPE_TBL_REQ	= 0x7f0b,
    243     LMP_ESCO_LINK_REQ		= 0x7f0c,
    244     LMP_RM_ESCO_LINK_REQ	= 0x7f0d,
    245     LMP_CHANNEL_CLASS_REQ	= 0x7f10,
    246     LMP_CHANNEL_CLASS		= 0x7f11,
    247 };
    248 
    249 /* Host Controller Interface layer defines */
    250 
    251 enum hci_packet_type {
    252     HCI_COMMAND_PKT		= 0x01,
    253     HCI_ACLDATA_PKT		= 0x02,
    254     HCI_SCODATA_PKT		= 0x03,
    255     HCI_EVENT_PKT		= 0x04,
    256     HCI_VENDOR_PKT		= 0xff,
    257 };
    258 
    259 enum bt_packet_type {
    260     HCI_2DH1	= 1 << 1,
    261     HCI_3DH1	= 1 << 2,
    262     HCI_DM1	= 1 << 3,
    263     HCI_DH1	= 1 << 4,
    264     HCI_2DH3	= 1 << 8,
    265     HCI_3DH3	= 1 << 9,
    266     HCI_DM3	= 1 << 10,
    267     HCI_DH3	= 1 << 11,
    268     HCI_2DH5	= 1 << 12,
    269     HCI_3DH5	= 1 << 13,
    270     HCI_DM5	= 1 << 14,
    271     HCI_DH5	= 1 << 15,
    272 };
    273 
    274 enum sco_packet_type {
    275     HCI_HV1	= 1 << 5,
    276     HCI_HV2	= 1 << 6,
    277     HCI_HV3	= 1 << 7,
    278 };
    279 
    280 enum ev_packet_type {
    281     HCI_EV3	= 1 << 3,
    282     HCI_EV4	= 1 << 4,
    283     HCI_EV5	= 1 << 5,
    284     HCI_2EV3	= 1 << 6,
    285     HCI_3EV3	= 1 << 7,
    286     HCI_2EV5	= 1 << 8,
    287     HCI_3EV5	= 1 << 9,
    288 };
    289 
    290 enum hci_error_code {
    291     HCI_SUCCESS				= 0x00,
    292     HCI_UNKNOWN_COMMAND			= 0x01,
    293     HCI_NO_CONNECTION			= 0x02,
    294     HCI_HARDWARE_FAILURE		= 0x03,
    295     HCI_PAGE_TIMEOUT			= 0x04,
    296     HCI_AUTHENTICATION_FAILURE		= 0x05,
    297     HCI_PIN_OR_KEY_MISSING		= 0x06,
    298     HCI_MEMORY_FULL			= 0x07,
    299     HCI_CONNECTION_TIMEOUT		= 0x08,
    300     HCI_MAX_NUMBER_OF_CONNECTIONS	= 0x09,
    301     HCI_MAX_NUMBER_OF_SCO_CONNECTIONS	= 0x0a,
    302     HCI_ACL_CONNECTION_EXISTS		= 0x0b,
    303     HCI_COMMAND_DISALLOWED		= 0x0c,
    304     HCI_REJECTED_LIMITED_RESOURCES	= 0x0d,
    305     HCI_REJECTED_SECURITY		= 0x0e,
    306     HCI_REJECTED_PERSONAL		= 0x0f,
    307     HCI_HOST_TIMEOUT			= 0x10,
    308     HCI_UNSUPPORTED_FEATURE		= 0x11,
    309     HCI_INVALID_PARAMETERS		= 0x12,
    310     HCI_OE_USER_ENDED_CONNECTION	= 0x13,
    311     HCI_OE_LOW_RESOURCES		= 0x14,
    312     HCI_OE_POWER_OFF			= 0x15,
    313     HCI_CONNECTION_TERMINATED		= 0x16,
    314     HCI_REPEATED_ATTEMPTS		= 0x17,
    315     HCI_PAIRING_NOT_ALLOWED		= 0x18,
    316     HCI_UNKNOWN_LMP_PDU			= 0x19,
    317     HCI_UNSUPPORTED_REMOTE_FEATURE	= 0x1a,
    318     HCI_SCO_OFFSET_REJECTED		= 0x1b,
    319     HCI_SCO_INTERVAL_REJECTED		= 0x1c,
    320     HCI_AIR_MODE_REJECTED		= 0x1d,
    321     HCI_INVALID_LMP_PARAMETERS		= 0x1e,
    322     HCI_UNSPECIFIED_ERROR		= 0x1f,
    323     HCI_UNSUPPORTED_LMP_PARAMETER_VALUE	= 0x20,
    324     HCI_ROLE_CHANGE_NOT_ALLOWED		= 0x21,
    325     HCI_LMP_RESPONSE_TIMEOUT		= 0x22,
    326     HCI_LMP_ERROR_TRANSACTION_COLLISION	= 0x23,
    327     HCI_LMP_PDU_NOT_ALLOWED		= 0x24,
    328     HCI_ENCRYPTION_MODE_NOT_ACCEPTED	= 0x25,
    329     HCI_UNIT_LINK_KEY_USED		= 0x26,
    330     HCI_QOS_NOT_SUPPORTED		= 0x27,
    331     HCI_INSTANT_PASSED			= 0x28,
    332     HCI_PAIRING_NOT_SUPPORTED		= 0x29,
    333     HCI_TRANSACTION_COLLISION		= 0x2a,
    334     HCI_QOS_UNACCEPTABLE_PARAMETER	= 0x2c,
    335     HCI_QOS_REJECTED			= 0x2d,
    336     HCI_CLASSIFICATION_NOT_SUPPORTED	= 0x2e,
    337     HCI_INSUFFICIENT_SECURITY		= 0x2f,
    338     HCI_PARAMETER_OUT_OF_RANGE		= 0x30,
    339     HCI_ROLE_SWITCH_PENDING		= 0x32,
    340     HCI_SLOT_VIOLATION			= 0x34,
    341     HCI_ROLE_SWITCH_FAILED		= 0x35,
    342 };
    343 
    344 enum acl_flag_bits {
    345     ACL_CONT		= 1 << 0,
    346     ACL_START		= 1 << 1,
    347     ACL_ACTIVE_BCAST	= 1 << 2,
    348     ACL_PICO_BCAST	= 1 << 3,
    349 };
    350 
    351 enum baseband_link_type {
    352     SCO_LINK		= 0x00,
    353     ACL_LINK		= 0x01,
    354 };
    355 
    356 enum lmp_feature_bits0 {
    357     LMP_3SLOT		= 1 << 0,
    358     LMP_5SLOT		= 1 << 1,
    359     LMP_ENCRYPT		= 1 << 2,
    360     LMP_SOFFSET		= 1 << 3,
    361     LMP_TACCURACY	= 1 << 4,
    362     LMP_RSWITCH		= 1 << 5,
    363     LMP_HOLD_MODE	= 1 << 6,
    364     LMP_SNIFF_MODE	= 1 << 7,
    365 };
    366 
    367 enum lmp_feature_bits1 {
    368     LMP_PARK		= 1 << 0,
    369     LMP_RSSI		= 1 << 1,
    370     LMP_QUALITY		= 1 << 2,
    371     LMP_SCO		= 1 << 3,
    372     LMP_HV2		= 1 << 4,
    373     LMP_HV3		= 1 << 5,
    374     LMP_ULAW		= 1 << 6,
    375     LMP_ALAW		= 1 << 7,
    376 };
    377 
    378 enum lmp_feature_bits2 {
    379     LMP_CVSD		= 1 << 0,
    380     LMP_PSCHEME		= 1 << 1,
    381     LMP_PCONTROL	= 1 << 2,
    382     LMP_TRSP_SCO	= 1 << 3,
    383     LMP_BCAST_ENC	= 1 << 7,
    384 };
    385 
    386 enum lmp_feature_bits3 {
    387     LMP_EDR_ACL_2M	= 1 << 1,
    388     LMP_EDR_ACL_3M	= 1 << 2,
    389     LMP_ENH_ISCAN	= 1 << 3,
    390     LMP_ILACE_ISCAN	= 1 << 4,
    391     LMP_ILACE_PSCAN	= 1 << 5,
    392     LMP_RSSI_INQ	= 1 << 6,
    393     LMP_ESCO		= 1 << 7,
    394 };
    395 
    396 enum lmp_feature_bits4 {
    397     LMP_EV4		= 1 << 0,
    398     LMP_EV5		= 1 << 1,
    399     LMP_AFH_CAP_SLV	= 1 << 3,
    400     LMP_AFH_CLS_SLV	= 1 << 4,
    401     LMP_EDR_3SLOT	= 1 << 7,
    402 };
    403 
    404 enum lmp_feature_bits5 {
    405     LMP_EDR_5SLOT	= 1 << 0,
    406     LMP_SNIFF_SUBR	= 1 << 1,
    407     LMP_AFH_CAP_MST	= 1 << 3,
    408     LMP_AFH_CLS_MST	= 1 << 4,
    409     LMP_EDR_ESCO_2M	= 1 << 5,
    410     LMP_EDR_ESCO_3M	= 1 << 6,
    411     LMP_EDR_3S_ESCO	= 1 << 7,
    412 };
    413 
    414 enum lmp_feature_bits6 {
    415     LMP_EXT_INQ		= 1 << 0,
    416 };
    417 
    418 enum lmp_feature_bits7 {
    419     LMP_EXT_FEAT	= 1 << 7,
    420 };
    421 
    422 enum hci_link_policy {
    423     HCI_LP_RSWITCH	= 1 << 0,
    424     HCI_LP_HOLD		= 1 << 1,
    425     HCI_LP_SNIFF	= 1 << 2,
    426     HCI_LP_PARK		= 1 << 3,
    427 };
    428 
    429 enum hci_link_mode {
    430     HCI_LM_ACCEPT	= 1 << 15,
    431     HCI_LM_MASTER	= 1 << 0,
    432     HCI_LM_AUTH		= 1 << 1,
    433     HCI_LM_ENCRYPT	= 1 << 2,
    434     HCI_LM_TRUSTED	= 1 << 3,
    435     HCI_LM_RELIABLE	= 1 << 4,
    436     HCI_LM_SECURE	= 1 << 5,
    437 };
    438 
    439 /* HCI Commands */
    440 
    441 /* Link Control */
    442 #define OGF_LINK_CTL		0x01
    443 
    444 #define OCF_INQUIRY			0x0001
    445 typedef struct {
    446     uint8_t	lap[3];
    447     uint8_t	length;		/* 1.28s units */
    448     uint8_t	num_rsp;
    449 } __attribute__ ((packed)) inquiry_cp;
    450 #define INQUIRY_CP_SIZE 5
    451 
    452 typedef struct {
    453     uint8_t		status;
    454     bdaddr_t	bdaddr;
    455 } __attribute__ ((packed)) status_bdaddr_rp;
    456 #define STATUS_BDADDR_RP_SIZE 7
    457 
    458 #define OCF_INQUIRY_CANCEL		0x0002
    459 
    460 #define OCF_PERIODIC_INQUIRY		0x0003
    461 typedef struct {
    462     uint16_t	max_period;	/* 1.28s units */
    463     uint16_t	min_period;	/* 1.28s units */
    464     uint8_t	lap[3];
    465     uint8_t	length;		/* 1.28s units */
    466     uint8_t	num_rsp;
    467 } __attribute__ ((packed)) periodic_inquiry_cp;
    468 #define PERIODIC_INQUIRY_CP_SIZE 9
    469 
    470 #define OCF_EXIT_PERIODIC_INQUIRY	0x0004
    471 
    472 #define OCF_CREATE_CONN			0x0005
    473 typedef struct {
    474     bdaddr_t	bdaddr;
    475     uint16_t	pkt_type;
    476     uint8_t	pscan_rep_mode;
    477     uint8_t	pscan_mode;
    478     uint16_t	clock_offset;
    479     uint8_t	role_switch;
    480 } __attribute__ ((packed)) create_conn_cp;
    481 #define CREATE_CONN_CP_SIZE 13
    482 
    483 #define OCF_DISCONNECT			0x0006
    484 typedef struct {
    485     uint16_t	handle;
    486     uint8_t	reason;
    487 } __attribute__ ((packed)) disconnect_cp;
    488 #define DISCONNECT_CP_SIZE 3
    489 
    490 #define OCF_ADD_SCO			0x0007
    491 typedef struct {
    492     uint16_t	handle;
    493     uint16_t	pkt_type;
    494 } __attribute__ ((packed)) add_sco_cp;
    495 #define ADD_SCO_CP_SIZE 4
    496 
    497 #define OCF_CREATE_CONN_CANCEL		0x0008
    498 typedef struct {
    499     uint8_t	status;
    500     bdaddr_t	bdaddr;
    501 } __attribute__ ((packed)) create_conn_cancel_cp;
    502 #define CREATE_CONN_CANCEL_CP_SIZE 6
    503 
    504 typedef struct {
    505     uint8_t	status;
    506     bdaddr_t	bdaddr;
    507 } __attribute__ ((packed)) create_conn_cancel_rp;
    508 #define CREATE_CONN_CANCEL_RP_SIZE 7
    509 
    510 #define OCF_ACCEPT_CONN_REQ		0x0009
    511 typedef struct {
    512     bdaddr_t	bdaddr;
    513     uint8_t	role;
    514 } __attribute__ ((packed)) accept_conn_req_cp;
    515 #define ACCEPT_CONN_REQ_CP_SIZE	7
    516 
    517 #define OCF_REJECT_CONN_REQ		0x000A
    518 typedef struct {
    519     bdaddr_t	bdaddr;
    520     uint8_t	reason;
    521 } __attribute__ ((packed)) reject_conn_req_cp;
    522 #define REJECT_CONN_REQ_CP_SIZE	7
    523 
    524 #define OCF_LINK_KEY_REPLY		0x000B
    525 typedef struct {
    526     bdaddr_t	bdaddr;
    527     uint8_t	link_key[16];
    528 } __attribute__ ((packed)) link_key_reply_cp;
    529 #define LINK_KEY_REPLY_CP_SIZE 22
    530 
    531 #define OCF_LINK_KEY_NEG_REPLY		0x000C
    532 
    533 #define OCF_PIN_CODE_REPLY		0x000D
    534 typedef struct {
    535     bdaddr_t	bdaddr;
    536     uint8_t	pin_len;
    537     uint8_t	pin_code[16];
    538 } __attribute__ ((packed)) pin_code_reply_cp;
    539 #define PIN_CODE_REPLY_CP_SIZE 23
    540 
    541 #define OCF_PIN_CODE_NEG_REPLY		0x000E
    542 
    543 #define OCF_SET_CONN_PTYPE		0x000F
    544 typedef struct {
    545     uint16_t	 handle;
    546     uint16_t	 pkt_type;
    547 } __attribute__ ((packed)) set_conn_ptype_cp;
    548 #define SET_CONN_PTYPE_CP_SIZE 4
    549 
    550 #define OCF_AUTH_REQUESTED		0x0011
    551 typedef struct {
    552     uint16_t	 handle;
    553 } __attribute__ ((packed)) auth_requested_cp;
    554 #define AUTH_REQUESTED_CP_SIZE 2
    555 
    556 #define OCF_SET_CONN_ENCRYPT		0x0013
    557 typedef struct {
    558     uint16_t	handle;
    559     uint8_t	encrypt;
    560 } __attribute__ ((packed)) set_conn_encrypt_cp;
    561 #define SET_CONN_ENCRYPT_CP_SIZE 3
    562 
    563 #define OCF_CHANGE_CONN_LINK_KEY	0x0015
    564 typedef struct {
    565     uint16_t	handle;
    566 } __attribute__ ((packed)) change_conn_link_key_cp;
    567 #define CHANGE_CONN_LINK_KEY_CP_SIZE 2
    568 
    569 #define OCF_MASTER_LINK_KEY		0x0017
    570 typedef struct {
    571     uint8_t	key_flag;
    572 } __attribute__ ((packed)) master_link_key_cp;
    573 #define MASTER_LINK_KEY_CP_SIZE 1
    574 
    575 #define OCF_REMOTE_NAME_REQ		0x0019
    576 typedef struct {
    577     bdaddr_t	bdaddr;
    578     uint8_t	pscan_rep_mode;
    579     uint8_t	pscan_mode;
    580     uint16_t	clock_offset;
    581 } __attribute__ ((packed)) remote_name_req_cp;
    582 #define REMOTE_NAME_REQ_CP_SIZE 10
    583 
    584 #define OCF_REMOTE_NAME_REQ_CANCEL	0x001A
    585 typedef struct {
    586     bdaddr_t	bdaddr;
    587 } __attribute__ ((packed)) remote_name_req_cancel_cp;
    588 #define REMOTE_NAME_REQ_CANCEL_CP_SIZE 6
    589 
    590 typedef struct {
    591     uint8_t		status;
    592     bdaddr_t	bdaddr;
    593 } __attribute__ ((packed)) remote_name_req_cancel_rp;
    594 #define REMOTE_NAME_REQ_CANCEL_RP_SIZE 7
    595 
    596 #define OCF_READ_REMOTE_FEATURES	0x001B
    597 typedef struct {
    598     uint16_t	handle;
    599 } __attribute__ ((packed)) read_remote_features_cp;
    600 #define READ_REMOTE_FEATURES_CP_SIZE 2
    601 
    602 #define OCF_READ_REMOTE_EXT_FEATURES	0x001C
    603 typedef struct {
    604     uint16_t	handle;
    605     uint8_t	page_num;
    606 } __attribute__ ((packed)) read_remote_ext_features_cp;
    607 #define READ_REMOTE_EXT_FEATURES_CP_SIZE 3
    608 
    609 #define OCF_READ_REMOTE_VERSION		0x001D
    610 typedef struct {
    611     uint16_t	handle;
    612 } __attribute__ ((packed)) read_remote_version_cp;
    613 #define READ_REMOTE_VERSION_CP_SIZE 2
    614 
    615 #define OCF_READ_CLOCK_OFFSET		0x001F
    616 typedef struct {
    617     uint16_t	handle;
    618 } __attribute__ ((packed)) read_clock_offset_cp;
    619 #define READ_CLOCK_OFFSET_CP_SIZE 2
    620 
    621 #define OCF_READ_LMP_HANDLE		0x0020
    622 typedef struct {
    623     uint16_t	handle;
    624 } __attribute__ ((packed)) read_lmp_handle_cp;
    625 #define READ_LMP_HANDLE_CP_SIZE 2
    626 
    627 typedef struct {
    628     uint8_t	status;
    629     uint16_t	handle;
    630     uint8_t	lmp_handle;
    631     uint32_t	reserved;
    632 } __attribute__ ((packed)) read_lmp_handle_rp;
    633 #define READ_LMP_HANDLE_RP_SIZE 8
    634 
    635 #define OCF_SETUP_SYNC_CONN		0x0028
    636 typedef struct {
    637     uint16_t	handle;
    638     uint32_t	tx_bandwith;
    639     uint32_t	rx_bandwith;
    640     uint16_t	max_latency;
    641     uint16_t	voice_setting;
    642     uint8_t	retrans_effort;
    643     uint16_t	pkt_type;
    644 } __attribute__ ((packed)) setup_sync_conn_cp;
    645 #define SETUP_SYNC_CONN_CP_SIZE 17
    646 
    647 #define OCF_ACCEPT_SYNC_CONN_REQ	0x0029
    648 typedef struct {
    649     bdaddr_t	bdaddr;
    650     uint32_t	tx_bandwith;
    651     uint32_t	rx_bandwith;
    652     uint16_t	max_latency;
    653     uint16_t	voice_setting;
    654     uint8_t	retrans_effort;
    655     uint16_t	pkt_type;
    656 } __attribute__ ((packed)) accept_sync_conn_req_cp;
    657 #define ACCEPT_SYNC_CONN_REQ_CP_SIZE 21
    658 
    659 #define OCF_REJECT_SYNC_CONN_REQ	0x002A
    660 typedef struct {
    661     bdaddr_t	bdaddr;
    662     uint8_t	reason;
    663 } __attribute__ ((packed)) reject_sync_conn_req_cp;
    664 #define REJECT_SYNC_CONN_REQ_CP_SIZE 7
    665 
    666 /* Link Policy */
    667 #define OGF_LINK_POLICY		0x02
    668 
    669 #define OCF_HOLD_MODE			0x0001
    670 typedef struct {
    671     uint16_t	handle;
    672     uint16_t	max_interval;
    673     uint16_t	min_interval;
    674 } __attribute__ ((packed)) hold_mode_cp;
    675 #define HOLD_MODE_CP_SIZE 6
    676 
    677 #define OCF_SNIFF_MODE			0x0003
    678 typedef struct {
    679     uint16_t	handle;
    680     uint16_t	max_interval;
    681     uint16_t	min_interval;
    682     uint16_t	attempt;
    683     uint16_t	timeout;
    684 } __attribute__ ((packed)) sniff_mode_cp;
    685 #define SNIFF_MODE_CP_SIZE 10
    686 
    687 #define OCF_EXIT_SNIFF_MODE		0x0004
    688 typedef struct {
    689     uint16_t	handle;
    690 } __attribute__ ((packed)) exit_sniff_mode_cp;
    691 #define EXIT_SNIFF_MODE_CP_SIZE 2
    692 
    693 #define OCF_PARK_MODE			0x0005
    694 typedef struct {
    695     uint16_t	handle;
    696     uint16_t	max_interval;
    697     uint16_t	min_interval;
    698 } __attribute__ ((packed)) park_mode_cp;
    699 #define PARK_MODE_CP_SIZE 6
    700 
    701 #define OCF_EXIT_PARK_MODE		0x0006
    702 typedef struct {
    703     uint16_t	handle;
    704 } __attribute__ ((packed)) exit_park_mode_cp;
    705 #define EXIT_PARK_MODE_CP_SIZE 2
    706 
    707 #define OCF_QOS_SETUP			0x0007
    708 typedef struct {
    709     uint8_t	service_type;		/* 1 = best effort */
    710     uint32_t	token_rate;		/* Byte per seconds */
    711     uint32_t	peak_bandwidth;		/* Byte per seconds */
    712     uint32_t	latency;		/* Microseconds */
    713     uint32_t	delay_variation;	/* Microseconds */
    714 } __attribute__ ((packed)) hci_qos;
    715 #define HCI_QOS_CP_SIZE 17
    716 typedef struct {
    717     uint16_t 	handle;
    718     uint8_t 	flags;			/* Reserved */
    719     hci_qos 	qos;
    720 } __attribute__ ((packed)) qos_setup_cp;
    721 #define QOS_SETUP_CP_SIZE (3 + HCI_QOS_CP_SIZE)
    722 
    723 #define OCF_ROLE_DISCOVERY		0x0009
    724 typedef struct {
    725     uint16_t	handle;
    726 } __attribute__ ((packed)) role_discovery_cp;
    727 #define ROLE_DISCOVERY_CP_SIZE 2
    728 typedef struct {
    729     uint8_t	status;
    730     uint16_t	handle;
    731     uint8_t	role;
    732 } __attribute__ ((packed)) role_discovery_rp;
    733 #define ROLE_DISCOVERY_RP_SIZE 4
    734 
    735 #define OCF_SWITCH_ROLE			0x000B
    736 typedef struct {
    737     bdaddr_t	bdaddr;
    738     uint8_t	role;
    739 } __attribute__ ((packed)) switch_role_cp;
    740 #define SWITCH_ROLE_CP_SIZE 7
    741 
    742 #define OCF_READ_LINK_POLICY		0x000C
    743 typedef struct {
    744     uint16_t	handle;
    745 } __attribute__ ((packed)) read_link_policy_cp;
    746 #define READ_LINK_POLICY_CP_SIZE 2
    747 typedef struct {
    748     uint8_t 	status;
    749     uint16_t	handle;
    750     uint16_t	policy;
    751 } __attribute__ ((packed)) read_link_policy_rp;
    752 #define READ_LINK_POLICY_RP_SIZE 5
    753 
    754 #define OCF_WRITE_LINK_POLICY		0x000D
    755 typedef struct {
    756     uint16_t	handle;
    757     uint16_t	policy;
    758 } __attribute__ ((packed)) write_link_policy_cp;
    759 #define WRITE_LINK_POLICY_CP_SIZE 4
    760 typedef struct {
    761     uint8_t 	status;
    762     uint16_t	handle;
    763 } __attribute__ ((packed)) write_link_policy_rp;
    764 #define WRITE_LINK_POLICY_RP_SIZE 3
    765 
    766 #define OCF_READ_DEFAULT_LINK_POLICY	0x000E
    767 
    768 #define OCF_WRITE_DEFAULT_LINK_POLICY	0x000F
    769 
    770 #define OCF_FLOW_SPECIFICATION		0x0010
    771 
    772 #define OCF_SNIFF_SUBRATE		0x0011
    773 typedef struct {
    774     uint16_t	handle;
    775     uint16_t	max_remote_latency;
    776     uint16_t	max_local_latency;
    777     uint16_t	min_remote_timeout;
    778     uint16_t	min_local_timeout;
    779 } __attribute__ ((packed)) sniff_subrate_cp;
    780 #define SNIFF_SUBRATE_CP_SIZE 10
    781 
    782 /* Host Controller and Baseband */
    783 #define OGF_HOST_CTL		0x03
    784 
    785 #define OCF_SET_EVENT_MASK		0x0001
    786 typedef struct {
    787     uint8_t	mask[8];
    788 } __attribute__ ((packed)) set_event_mask_cp;
    789 #define SET_EVENT_MASK_CP_SIZE 8
    790 
    791 #define OCF_RESET			0x0003
    792 
    793 #define OCF_SET_EVENT_FLT		0x0005
    794 typedef struct {
    795     uint8_t	flt_type;
    796     uint8_t	cond_type;
    797     uint8_t	condition[0];
    798 } __attribute__ ((packed)) set_event_flt_cp;
    799 #define SET_EVENT_FLT_CP_SIZE 2
    800 
    801 enum bt_filter_type {
    802     FLT_CLEAR_ALL		= 0x00,
    803     FLT_INQ_RESULT		= 0x01,
    804     FLT_CONN_SETUP		= 0x02,
    805 };
    806 enum inq_result_cond_type {
    807     INQ_RESULT_RETURN_ALL	= 0x00,
    808     INQ_RESULT_RETURN_CLASS	= 0x01,
    809     INQ_RESULT_RETURN_BDADDR	= 0x02,
    810 };
    811 enum conn_setup_cond_type {
    812     CONN_SETUP_ALLOW_ALL	= 0x00,
    813     CONN_SETUP_ALLOW_CLASS	= 0x01,
    814     CONN_SETUP_ALLOW_BDADDR	= 0x02,
    815 };
    816 enum conn_setup_cond {
    817     CONN_SETUP_AUTO_OFF		= 0x01,
    818     CONN_SETUP_AUTO_ON		= 0x02,
    819 };
    820 
    821 #define OCF_FLUSH			0x0008
    822 typedef struct {
    823     uint16_t	handle;
    824 } __attribute__ ((packed)) flush_cp;
    825 #define FLUSH_CP_SIZE 2
    826 
    827 typedef struct {
    828     uint8_t	status;
    829     uint16_t	handle;
    830 } __attribute__ ((packed)) flush_rp;
    831 #define FLUSH_RP_SIZE 3
    832 
    833 #define OCF_READ_PIN_TYPE		0x0009
    834 typedef struct {
    835     uint8_t	status;
    836     uint8_t	pin_type;
    837 } __attribute__ ((packed)) read_pin_type_rp;
    838 #define READ_PIN_TYPE_RP_SIZE 2
    839 
    840 #define OCF_WRITE_PIN_TYPE		0x000A
    841 typedef struct {
    842     uint8_t	pin_type;
    843 } __attribute__ ((packed)) write_pin_type_cp;
    844 #define WRITE_PIN_TYPE_CP_SIZE 1
    845 
    846 #define OCF_CREATE_NEW_UNIT_KEY		0x000B
    847 
    848 #define OCF_READ_STORED_LINK_KEY	0x000D
    849 typedef struct {
    850     bdaddr_t	bdaddr;
    851     uint8_t	read_all;
    852 } __attribute__ ((packed)) read_stored_link_key_cp;
    853 #define READ_STORED_LINK_KEY_CP_SIZE 7
    854 typedef struct {
    855     uint8_t	status;
    856     uint16_t	max_keys;
    857     uint16_t	num_keys;
    858 } __attribute__ ((packed)) read_stored_link_key_rp;
    859 #define READ_STORED_LINK_KEY_RP_SIZE 5
    860 
    861 #define OCF_WRITE_STORED_LINK_KEY	0x0011
    862 typedef struct {
    863     uint8_t	num_keys;
    864     /* variable length part */
    865 } __attribute__ ((packed)) write_stored_link_key_cp;
    866 #define WRITE_STORED_LINK_KEY_CP_SIZE 1
    867 typedef struct {
    868     uint8_t	status;
    869     uint8_t	num_keys;
    870 } __attribute__ ((packed)) write_stored_link_key_rp;
    871 #define READ_WRITE_LINK_KEY_RP_SIZE 2
    872 
    873 #define OCF_DELETE_STORED_LINK_KEY	0x0012
    874 typedef struct {
    875     bdaddr_t	bdaddr;
    876     uint8_t	delete_all;
    877 } __attribute__ ((packed)) delete_stored_link_key_cp;
    878 #define DELETE_STORED_LINK_KEY_CP_SIZE 7
    879 typedef struct {
    880     uint8_t	status;
    881     uint16_t	num_keys;
    882 } __attribute__ ((packed)) delete_stored_link_key_rp;
    883 #define DELETE_STORED_LINK_KEY_RP_SIZE 3
    884 
    885 #define OCF_CHANGE_LOCAL_NAME		0x0013
    886 typedef struct {
    887     char	name[248];
    888 } __attribute__ ((packed)) change_local_name_cp;
    889 #define CHANGE_LOCAL_NAME_CP_SIZE 248
    890 
    891 #define OCF_READ_LOCAL_NAME		0x0014
    892 typedef struct {
    893     uint8_t	status;
    894     char	name[248];
    895 } __attribute__ ((packed)) read_local_name_rp;
    896 #define READ_LOCAL_NAME_RP_SIZE 249
    897 
    898 #define OCF_READ_CONN_ACCEPT_TIMEOUT	0x0015
    899 typedef struct {
    900     uint8_t	status;
    901     uint16_t	timeout;
    902 } __attribute__ ((packed)) read_conn_accept_timeout_rp;
    903 #define READ_CONN_ACCEPT_TIMEOUT_RP_SIZE 3
    904 
    905 #define OCF_WRITE_CONN_ACCEPT_TIMEOUT	0x0016
    906 typedef struct {
    907     uint16_t	timeout;
    908 } __attribute__ ((packed)) write_conn_accept_timeout_cp;
    909 #define WRITE_CONN_ACCEPT_TIMEOUT_CP_SIZE 2
    910 
    911 #define OCF_READ_PAGE_TIMEOUT		0x0017
    912 typedef struct {
    913     uint8_t	status;
    914     uint16_t	timeout;
    915 } __attribute__ ((packed)) read_page_timeout_rp;
    916 #define READ_PAGE_TIMEOUT_RP_SIZE 3
    917 
    918 #define OCF_WRITE_PAGE_TIMEOUT		0x0018
    919 typedef struct {
    920     uint16_t	timeout;
    921 } __attribute__ ((packed)) write_page_timeout_cp;
    922 #define WRITE_PAGE_TIMEOUT_CP_SIZE 2
    923 
    924 #define OCF_READ_SCAN_ENABLE		0x0019
    925 typedef struct {
    926     uint8_t	status;
    927     uint8_t	enable;
    928 } __attribute__ ((packed)) read_scan_enable_rp;
    929 #define READ_SCAN_ENABLE_RP_SIZE 2
    930 
    931 #define OCF_WRITE_SCAN_ENABLE		0x001A
    932 typedef struct {
    933     uint8_t	scan_enable;
    934 } __attribute__ ((packed)) write_scan_enable_cp;
    935 #define WRITE_SCAN_ENABLE_CP_SIZE 1
    936 
    937 enum scan_enable_bits {
    938     SCAN_DISABLED		= 0,
    939     SCAN_INQUIRY		= 1 << 0,
    940     SCAN_PAGE			= 1 << 1,
    941 };
    942 
    943 #define OCF_READ_PAGE_ACTIVITY		0x001B
    944 typedef struct {
    945     uint8_t	status;
    946     uint16_t	interval;
    947     uint16_t	window;
    948 } __attribute__ ((packed)) read_page_activity_rp;
    949 #define READ_PAGE_ACTIVITY_RP_SIZE 5
    950 
    951 #define OCF_WRITE_PAGE_ACTIVITY		0x001C
    952 typedef struct {
    953     uint16_t	interval;
    954     uint16_t	window;
    955 } __attribute__ ((packed)) write_page_activity_cp;
    956 #define WRITE_PAGE_ACTIVITY_CP_SIZE 4
    957 
    958 #define OCF_READ_INQ_ACTIVITY		0x001D
    959 typedef struct {
    960     uint8_t	status;
    961     uint16_t	interval;
    962     uint16_t	window;
    963 } __attribute__ ((packed)) read_inq_activity_rp;
    964 #define READ_INQ_ACTIVITY_RP_SIZE 5
    965 
    966 #define OCF_WRITE_INQ_ACTIVITY		0x001E
    967 typedef struct {
    968     uint16_t	interval;
    969     uint16_t	window;
    970 } __attribute__ ((packed)) write_inq_activity_cp;
    971 #define WRITE_INQ_ACTIVITY_CP_SIZE 4
    972 
    973 #define OCF_READ_AUTH_ENABLE		0x001F
    974 
    975 #define OCF_WRITE_AUTH_ENABLE		0x0020
    976 
    977 #define AUTH_DISABLED		0x00
    978 #define AUTH_ENABLED		0x01
    979 
    980 #define OCF_READ_ENCRYPT_MODE		0x0021
    981 
    982 #define OCF_WRITE_ENCRYPT_MODE		0x0022
    983 
    984 #define ENCRYPT_DISABLED	0x00
    985 #define ENCRYPT_P2P		0x01
    986 #define ENCRYPT_BOTH		0x02
    987 
    988 #define OCF_READ_CLASS_OF_DEV		0x0023
    989 typedef struct {
    990     uint8_t	status;
    991     uint8_t	dev_class[3];
    992 } __attribute__ ((packed)) read_class_of_dev_rp;
    993 #define READ_CLASS_OF_DEV_RP_SIZE 4
    994 
    995 #define OCF_WRITE_CLASS_OF_DEV		0x0024
    996 typedef struct {
    997     uint8_t	dev_class[3];
    998 } __attribute__ ((packed)) write_class_of_dev_cp;
    999 #define WRITE_CLASS_OF_DEV_CP_SIZE 3
   1000 
   1001 #define OCF_READ_VOICE_SETTING		0x0025
   1002 typedef struct {
   1003     uint8_t	status;
   1004     uint16_t	voice_setting;
   1005 } __attribute__ ((packed)) read_voice_setting_rp;
   1006 #define READ_VOICE_SETTING_RP_SIZE 3
   1007 
   1008 #define OCF_WRITE_VOICE_SETTING		0x0026
   1009 typedef struct {
   1010     uint16_t	voice_setting;
   1011 } __attribute__ ((packed)) write_voice_setting_cp;
   1012 #define WRITE_VOICE_SETTING_CP_SIZE 2
   1013 
   1014 #define OCF_READ_AUTOMATIC_FLUSH_TIMEOUT	0x0027
   1015 
   1016 #define OCF_WRITE_AUTOMATIC_FLUSH_TIMEOUT	0x0028
   1017 
   1018 #define OCF_READ_NUM_BROADCAST_RETRANS	0x0029
   1019 
   1020 #define OCF_WRITE_NUM_BROADCAST_RETRANS	0x002A
   1021 
   1022 #define OCF_READ_HOLD_MODE_ACTIVITY	0x002B
   1023 
   1024 #define OCF_WRITE_HOLD_MODE_ACTIVITY	0x002C
   1025 
   1026 #define OCF_READ_TRANSMIT_POWER_LEVEL	0x002D
   1027 typedef struct {
   1028     uint16_t	handle;
   1029     uint8_t	type;
   1030 } __attribute__ ((packed)) read_transmit_power_level_cp;
   1031 #define READ_TRANSMIT_POWER_LEVEL_CP_SIZE 3
   1032 typedef struct {
   1033     uint8_t	status;
   1034     uint16_t	handle;
   1035     int8_t	level;
   1036 } __attribute__ ((packed)) read_transmit_power_level_rp;
   1037 #define READ_TRANSMIT_POWER_LEVEL_RP_SIZE 4
   1038 
   1039 #define OCF_HOST_BUFFER_SIZE		0x0033
   1040 typedef struct {
   1041     uint16_t	acl_mtu;
   1042     uint8_t	sco_mtu;
   1043     uint16_t	acl_max_pkt;
   1044     uint16_t	sco_max_pkt;
   1045 } __attribute__ ((packed)) host_buffer_size_cp;
   1046 #define HOST_BUFFER_SIZE_CP_SIZE 7
   1047 
   1048 #define OCF_HOST_NUMBER_OF_COMPLETED_PACKETS	0x0035
   1049 
   1050 #define OCF_READ_LINK_SUPERVISION_TIMEOUT	0x0036
   1051 typedef struct {
   1052     uint8_t	status;
   1053     uint16_t	handle;
   1054     uint16_t	link_sup_to;
   1055 } __attribute__ ((packed)) read_link_supervision_timeout_rp;
   1056 #define READ_LINK_SUPERVISION_TIMEOUT_RP_SIZE 5
   1057 
   1058 #define OCF_WRITE_LINK_SUPERVISION_TIMEOUT	0x0037
   1059 typedef struct {
   1060     uint16_t	handle;
   1061     uint16_t	link_sup_to;
   1062 } __attribute__ ((packed)) write_link_supervision_timeout_cp;
   1063 #define WRITE_LINK_SUPERVISION_TIMEOUT_CP_SIZE 4
   1064 typedef struct {
   1065     uint8_t	status;
   1066     uint16_t	handle;
   1067 } __attribute__ ((packed)) write_link_supervision_timeout_rp;
   1068 #define WRITE_LINK_SUPERVISION_TIMEOUT_RP_SIZE 3
   1069 
   1070 #define OCF_READ_NUM_SUPPORTED_IAC	0x0038
   1071 
   1072 #define MAX_IAC_LAP 0x40
   1073 #define OCF_READ_CURRENT_IAC_LAP	0x0039
   1074 typedef struct {
   1075     uint8_t	status;
   1076     uint8_t	num_current_iac;
   1077     uint8_t	lap[MAX_IAC_LAP][3];
   1078 } __attribute__ ((packed)) read_current_iac_lap_rp;
   1079 #define READ_CURRENT_IAC_LAP_RP_SIZE 2+3*MAX_IAC_LAP
   1080 
   1081 #define OCF_WRITE_CURRENT_IAC_LAP	0x003A
   1082 typedef struct {
   1083     uint8_t	num_current_iac;
   1084     uint8_t	lap[MAX_IAC_LAP][3];
   1085 } __attribute__ ((packed)) write_current_iac_lap_cp;
   1086 #define WRITE_CURRENT_IAC_LAP_CP_SIZE 1+3*MAX_IAC_LAP
   1087 
   1088 #define OCF_READ_PAGE_SCAN_PERIOD_MODE	0x003B
   1089 
   1090 #define OCF_WRITE_PAGE_SCAN_PERIOD_MODE	0x003C
   1091 
   1092 #define OCF_READ_PAGE_SCAN_MODE		0x003D
   1093 
   1094 #define OCF_WRITE_PAGE_SCAN_MODE	0x003E
   1095 
   1096 #define OCF_SET_AFH_CLASSIFICATION	0x003F
   1097 typedef struct {
   1098     uint8_t	map[10];
   1099 } __attribute__ ((packed)) set_afh_classification_cp;
   1100 #define SET_AFH_CLASSIFICATION_CP_SIZE 10
   1101 typedef struct {
   1102     uint8_t	status;
   1103 } __attribute__ ((packed)) set_afh_classification_rp;
   1104 #define SET_AFH_CLASSIFICATION_RP_SIZE 1
   1105 
   1106 #define OCF_READ_INQUIRY_SCAN_TYPE	0x0042
   1107 typedef struct {
   1108     uint8_t	status;
   1109     uint8_t	type;
   1110 } __attribute__ ((packed)) read_inquiry_scan_type_rp;
   1111 #define READ_INQUIRY_SCAN_TYPE_RP_SIZE 2
   1112 
   1113 #define OCF_WRITE_INQUIRY_SCAN_TYPE	0x0043
   1114 typedef struct {
   1115     uint8_t	type;
   1116 } __attribute__ ((packed)) write_inquiry_scan_type_cp;
   1117 #define WRITE_INQUIRY_SCAN_TYPE_CP_SIZE 1
   1118 typedef struct {
   1119     uint8_t	status;
   1120 } __attribute__ ((packed)) write_inquiry_scan_type_rp;
   1121 #define WRITE_INQUIRY_SCAN_TYPE_RP_SIZE 1
   1122 
   1123 #define OCF_READ_INQUIRY_MODE		0x0044
   1124 typedef struct {
   1125     uint8_t	status;
   1126     uint8_t	mode;
   1127 } __attribute__ ((packed)) read_inquiry_mode_rp;
   1128 #define READ_INQUIRY_MODE_RP_SIZE 2
   1129 
   1130 #define OCF_WRITE_INQUIRY_MODE		0x0045
   1131 typedef struct {
   1132     uint8_t	mode;
   1133 } __attribute__ ((packed)) write_inquiry_mode_cp;
   1134 #define WRITE_INQUIRY_MODE_CP_SIZE 1
   1135 typedef struct {
   1136     uint8_t	status;
   1137 } __attribute__ ((packed)) write_inquiry_mode_rp;
   1138 #define WRITE_INQUIRY_MODE_RP_SIZE 1
   1139 
   1140 #define OCF_READ_PAGE_SCAN_TYPE		0x0046
   1141 
   1142 #define OCF_WRITE_PAGE_SCAN_TYPE	0x0047
   1143 
   1144 #define OCF_READ_AFH_MODE		0x0048
   1145 typedef struct {
   1146     uint8_t	status;
   1147     uint8_t	mode;
   1148 } __attribute__ ((packed)) read_afh_mode_rp;
   1149 #define READ_AFH_MODE_RP_SIZE 2
   1150 
   1151 #define OCF_WRITE_AFH_MODE		0x0049
   1152 typedef struct {
   1153     uint8_t	mode;
   1154 } __attribute__ ((packed)) write_afh_mode_cp;
   1155 #define WRITE_AFH_MODE_CP_SIZE 1
   1156 typedef struct {
   1157     uint8_t	status;
   1158 } __attribute__ ((packed)) write_afh_mode_rp;
   1159 #define WRITE_AFH_MODE_RP_SIZE 1
   1160 
   1161 #define OCF_READ_EXT_INQUIRY_RESPONSE	0x0051
   1162 typedef struct {
   1163     uint8_t	status;
   1164     uint8_t	fec;
   1165     uint8_t	data[240];
   1166 } __attribute__ ((packed)) read_ext_inquiry_response_rp;
   1167 #define READ_EXT_INQUIRY_RESPONSE_RP_SIZE 242
   1168 
   1169 #define OCF_WRITE_EXT_INQUIRY_RESPONSE	0x0052
   1170 typedef struct {
   1171     uint8_t	fec;
   1172     uint8_t	data[240];
   1173 } __attribute__ ((packed)) write_ext_inquiry_response_cp;
   1174 #define WRITE_EXT_INQUIRY_RESPONSE_CP_SIZE 241
   1175 typedef struct {
   1176     uint8_t	status;
   1177 } __attribute__ ((packed)) write_ext_inquiry_response_rp;
   1178 #define WRITE_EXT_INQUIRY_RESPONSE_RP_SIZE 1
   1179 
   1180 /* Informational Parameters */
   1181 #define OGF_INFO_PARAM		0x04
   1182 
   1183 #define OCF_READ_LOCAL_VERSION		0x0001
   1184 typedef struct {
   1185     uint8_t	status;
   1186     uint8_t	hci_ver;
   1187     uint16_t	hci_rev;
   1188     uint8_t	lmp_ver;
   1189     uint16_t	manufacturer;
   1190     uint16_t	lmp_subver;
   1191 } __attribute__ ((packed)) read_local_version_rp;
   1192 #define READ_LOCAL_VERSION_RP_SIZE 9
   1193 
   1194 #define OCF_READ_LOCAL_COMMANDS		0x0002
   1195 typedef struct {
   1196     uint8_t	status;
   1197     uint8_t	commands[64];
   1198 } __attribute__ ((packed)) read_local_commands_rp;
   1199 #define READ_LOCAL_COMMANDS_RP_SIZE 65
   1200 
   1201 #define OCF_READ_LOCAL_FEATURES		0x0003
   1202 typedef struct {
   1203     uint8_t	status;
   1204     uint8_t	features[8];
   1205 } __attribute__ ((packed)) read_local_features_rp;
   1206 #define READ_LOCAL_FEATURES_RP_SIZE 9
   1207 
   1208 #define OCF_READ_LOCAL_EXT_FEATURES	0x0004
   1209 typedef struct {
   1210     uint8_t	page_num;
   1211 } __attribute__ ((packed)) read_local_ext_features_cp;
   1212 #define READ_LOCAL_EXT_FEATURES_CP_SIZE 1
   1213 typedef struct {
   1214     uint8_t	status;
   1215     uint8_t	page_num;
   1216     uint8_t	max_page_num;
   1217     uint8_t	features[8];
   1218 } __attribute__ ((packed)) read_local_ext_features_rp;
   1219 #define READ_LOCAL_EXT_FEATURES_RP_SIZE 11
   1220 
   1221 #define OCF_READ_BUFFER_SIZE		0x0005
   1222 typedef struct {
   1223     uint8_t	status;
   1224     uint16_t	acl_mtu;
   1225     uint8_t	sco_mtu;
   1226     uint16_t	acl_max_pkt;
   1227     uint16_t	sco_max_pkt;
   1228 } __attribute__ ((packed)) read_buffer_size_rp;
   1229 #define READ_BUFFER_SIZE_RP_SIZE 8
   1230 
   1231 #define OCF_READ_COUNTRY_CODE		0x0007
   1232 typedef struct {
   1233     uint8_t	status;
   1234     uint8_t	country_code;
   1235 } __attribute__ ((packed)) read_country_code_rp;
   1236 #define READ_COUNTRY_CODE_RP_SIZE 2
   1237 
   1238 #define OCF_READ_BD_ADDR		0x0009
   1239 typedef struct {
   1240     uint8_t	status;
   1241     bdaddr_t	bdaddr;
   1242 } __attribute__ ((packed)) read_bd_addr_rp;
   1243 #define READ_BD_ADDR_RP_SIZE 7
   1244 
   1245 /* Status params */
   1246 #define OGF_STATUS_PARAM	0x05
   1247 
   1248 #define OCF_READ_FAILED_CONTACT_COUNTER		0x0001
   1249 typedef struct {
   1250     uint8_t	status;
   1251     uint16_t	handle;
   1252     uint8_t	counter;
   1253 } __attribute__ ((packed)) read_failed_contact_counter_rp;
   1254 #define READ_FAILED_CONTACT_COUNTER_RP_SIZE 4
   1255 
   1256 #define OCF_RESET_FAILED_CONTACT_COUNTER	0x0002
   1257 typedef struct {
   1258     uint8_t	status;
   1259     uint16_t	handle;
   1260 } __attribute__ ((packed)) reset_failed_contact_counter_rp;
   1261 #define RESET_FAILED_CONTACT_COUNTER_RP_SIZE 4
   1262 
   1263 #define OCF_READ_LINK_QUALITY		0x0003
   1264 typedef struct {
   1265     uint16_t	handle;
   1266 } __attribute__ ((packed)) read_link_quality_cp;
   1267 #define READ_LINK_QUALITY_CP_SIZE 4
   1268 
   1269 typedef struct {
   1270     uint8_t	status;
   1271     uint16_t	handle;
   1272     uint8_t	link_quality;
   1273 } __attribute__ ((packed)) read_link_quality_rp;
   1274 #define READ_LINK_QUALITY_RP_SIZE 4
   1275 
   1276 #define OCF_READ_RSSI			0x0005
   1277 typedef struct {
   1278     uint8_t	status;
   1279     uint16_t	handle;
   1280     int8_t	rssi;
   1281 } __attribute__ ((packed)) read_rssi_rp;
   1282 #define READ_RSSI_RP_SIZE 4
   1283 
   1284 #define OCF_READ_AFH_MAP		0x0006
   1285 typedef struct {
   1286     uint8_t	status;
   1287     uint16_t	handle;
   1288     uint8_t	mode;
   1289     uint8_t	map[10];
   1290 } __attribute__ ((packed)) read_afh_map_rp;
   1291 #define READ_AFH_MAP_RP_SIZE 14
   1292 
   1293 #define OCF_READ_CLOCK			0x0007
   1294 typedef struct {
   1295     uint16_t	handle;
   1296     uint8_t	which_clock;
   1297 } __attribute__ ((packed)) read_clock_cp;
   1298 #define READ_CLOCK_CP_SIZE 3
   1299 typedef struct {
   1300     uint8_t	status;
   1301     uint16_t	handle;
   1302     uint32_t	clock;
   1303     uint16_t	accuracy;
   1304 } __attribute__ ((packed)) read_clock_rp;
   1305 #define READ_CLOCK_RP_SIZE 9
   1306 
   1307 /* Testing commands */
   1308 #define OGF_TESTING_CMD		0x3e
   1309 
   1310 /* Vendor specific commands */
   1311 #define OGF_VENDOR_CMD		0x3f
   1312 
   1313 /* HCI Events */
   1314 
   1315 #define EVT_INQUIRY_COMPLETE		0x01
   1316 
   1317 #define EVT_INQUIRY_RESULT		0x02
   1318 typedef struct {
   1319     uint8_t	num_responses;
   1320     bdaddr_t	bdaddr;
   1321     uint8_t	pscan_rep_mode;
   1322     uint8_t	pscan_period_mode;
   1323     uint8_t	pscan_mode;
   1324     uint8_t	dev_class[3];
   1325     uint16_t	clock_offset;
   1326 } __attribute__ ((packed)) inquiry_info;
   1327 #define INQUIRY_INFO_SIZE 14
   1328 
   1329 #define EVT_CONN_COMPLETE		0x03
   1330 typedef struct {
   1331     uint8_t	status;
   1332     uint16_t	handle;
   1333     bdaddr_t	bdaddr;
   1334     uint8_t	link_type;
   1335     uint8_t	encr_mode;
   1336 } __attribute__ ((packed)) evt_conn_complete;
   1337 #define EVT_CONN_COMPLETE_SIZE 11
   1338 
   1339 #define EVT_CONN_REQUEST		0x04
   1340 typedef struct {
   1341     bdaddr_t	bdaddr;
   1342     uint8_t	dev_class[3];
   1343     uint8_t	link_type;
   1344 } __attribute__ ((packed)) evt_conn_request;
   1345 #define EVT_CONN_REQUEST_SIZE 10
   1346 
   1347 #define EVT_DISCONN_COMPLETE		0x05
   1348 typedef struct {
   1349     uint8_t	status;
   1350     uint16_t	handle;
   1351     uint8_t	reason;
   1352 } __attribute__ ((packed)) evt_disconn_complete;
   1353 #define EVT_DISCONN_COMPLETE_SIZE 4
   1354 
   1355 #define EVT_AUTH_COMPLETE		0x06
   1356 typedef struct {
   1357     uint8_t	status;
   1358     uint16_t	handle;
   1359 } __attribute__ ((packed)) evt_auth_complete;
   1360 #define EVT_AUTH_COMPLETE_SIZE 3
   1361 
   1362 #define EVT_REMOTE_NAME_REQ_COMPLETE	0x07
   1363 typedef struct {
   1364     uint8_t	status;
   1365     bdaddr_t	bdaddr;
   1366     char	name[248];
   1367 } __attribute__ ((packed)) evt_remote_name_req_complete;
   1368 #define EVT_REMOTE_NAME_REQ_COMPLETE_SIZE 255
   1369 
   1370 #define EVT_ENCRYPT_CHANGE		0x08
   1371 typedef struct {
   1372     uint8_t	status;
   1373     uint16_t	handle;
   1374     uint8_t	encrypt;
   1375 } __attribute__ ((packed)) evt_encrypt_change;
   1376 #define EVT_ENCRYPT_CHANGE_SIZE 5
   1377 
   1378 #define EVT_CHANGE_CONN_LINK_KEY_COMPLETE	0x09
   1379 typedef struct {
   1380     uint8_t	status;
   1381     uint16_t	handle;
   1382 }  __attribute__ ((packed)) evt_change_conn_link_key_complete;
   1383 #define EVT_CHANGE_CONN_LINK_KEY_COMPLETE_SIZE 3
   1384 
   1385 #define EVT_MASTER_LINK_KEY_COMPLETE		0x0A
   1386 typedef struct {
   1387     uint8_t	status;
   1388     uint16_t	handle;
   1389     uint8_t	key_flag;
   1390 } __attribute__ ((packed)) evt_master_link_key_complete;
   1391 #define EVT_MASTER_LINK_KEY_COMPLETE_SIZE 4
   1392 
   1393 #define EVT_READ_REMOTE_FEATURES_COMPLETE	0x0B
   1394 typedef struct {
   1395     uint8_t	status;
   1396     uint16_t	handle;
   1397     uint8_t	features[8];
   1398 } __attribute__ ((packed)) evt_read_remote_features_complete;
   1399 #define EVT_READ_REMOTE_FEATURES_COMPLETE_SIZE 11
   1400 
   1401 #define EVT_READ_REMOTE_VERSION_COMPLETE	0x0C
   1402 typedef struct {
   1403     uint8_t	status;
   1404     uint16_t	handle;
   1405     uint8_t	lmp_ver;
   1406     uint16_t	manufacturer;
   1407     uint16_t	lmp_subver;
   1408 } __attribute__ ((packed)) evt_read_remote_version_complete;
   1409 #define EVT_READ_REMOTE_VERSION_COMPLETE_SIZE 8
   1410 
   1411 #define EVT_QOS_SETUP_COMPLETE		0x0D
   1412 typedef struct {
   1413     uint8_t	status;
   1414     uint16_t	handle;
   1415     uint8_t	flags;			/* Reserved */
   1416     hci_qos	qos;
   1417 } __attribute__ ((packed)) evt_qos_setup_complete;
   1418 #define EVT_QOS_SETUP_COMPLETE_SIZE (4 + HCI_QOS_CP_SIZE)
   1419 
   1420 #define EVT_CMD_COMPLETE 		0x0E
   1421 typedef struct {
   1422     uint8_t	ncmd;
   1423     uint16_t	opcode;
   1424 } __attribute__ ((packed)) evt_cmd_complete;
   1425 #define EVT_CMD_COMPLETE_SIZE 3
   1426 
   1427 #define EVT_CMD_STATUS 			0x0F
   1428 typedef struct {
   1429     uint8_t	status;
   1430     uint8_t	ncmd;
   1431     uint16_t	opcode;
   1432 } __attribute__ ((packed)) evt_cmd_status;
   1433 #define EVT_CMD_STATUS_SIZE 4
   1434 
   1435 #define EVT_HARDWARE_ERROR		0x10
   1436 typedef struct {
   1437     uint8_t	code;
   1438 } __attribute__ ((packed)) evt_hardware_error;
   1439 #define EVT_HARDWARE_ERROR_SIZE 1
   1440 
   1441 #define EVT_FLUSH_OCCURRED		0x11
   1442 typedef struct {
   1443     uint16_t	handle;
   1444 } __attribute__ ((packed)) evt_flush_occured;
   1445 #define EVT_FLUSH_OCCURRED_SIZE 2
   1446 
   1447 #define EVT_ROLE_CHANGE			0x12
   1448 typedef struct {
   1449     uint8_t	status;
   1450     bdaddr_t	bdaddr;
   1451     uint8_t	role;
   1452 } __attribute__ ((packed)) evt_role_change;
   1453 #define EVT_ROLE_CHANGE_SIZE 8
   1454 
   1455 #define EVT_NUM_COMP_PKTS		0x13
   1456 typedef struct {
   1457     uint8_t	num_hndl;
   1458     struct {
   1459         uint16_t handle;
   1460         uint16_t num_packets;
   1461     } connection[0];
   1462 } __attribute__ ((packed)) evt_num_comp_pkts;
   1463 #define EVT_NUM_COMP_PKTS_SIZE(num_hndl) (1 + 4 * (num_hndl))
   1464 
   1465 #define EVT_MODE_CHANGE			0x14
   1466 typedef struct {
   1467     uint8_t	status;
   1468     uint16_t	handle;
   1469     uint8_t	mode;
   1470     uint16_t	interval;
   1471 } __attribute__ ((packed)) evt_mode_change;
   1472 #define EVT_MODE_CHANGE_SIZE 6
   1473 
   1474 #define EVT_RETURN_LINK_KEYS		0x15
   1475 typedef struct {
   1476     uint8_t	num_keys;
   1477     /* variable length part */
   1478 } __attribute__ ((packed)) evt_return_link_keys;
   1479 #define EVT_RETURN_LINK_KEYS_SIZE 1
   1480 
   1481 #define EVT_PIN_CODE_REQ		0x16
   1482 typedef struct {
   1483     bdaddr_t	bdaddr;
   1484 } __attribute__ ((packed)) evt_pin_code_req;
   1485 #define EVT_PIN_CODE_REQ_SIZE 6
   1486 
   1487 #define EVT_LINK_KEY_REQ		0x17
   1488 typedef struct {
   1489     bdaddr_t	bdaddr;
   1490 } __attribute__ ((packed)) evt_link_key_req;
   1491 #define EVT_LINK_KEY_REQ_SIZE 6
   1492 
   1493 #define EVT_LINK_KEY_NOTIFY		0x18
   1494 typedef struct {
   1495     bdaddr_t	bdaddr;
   1496     uint8_t	link_key[16];
   1497     uint8_t	key_type;
   1498 } __attribute__ ((packed)) evt_link_key_notify;
   1499 #define EVT_LINK_KEY_NOTIFY_SIZE 23
   1500 
   1501 #define EVT_LOOPBACK_COMMAND		0x19
   1502 
   1503 #define EVT_DATA_BUFFER_OVERFLOW	0x1A
   1504 typedef struct {
   1505     uint8_t	link_type;
   1506 } __attribute__ ((packed)) evt_data_buffer_overflow;
   1507 #define EVT_DATA_BUFFER_OVERFLOW_SIZE 1
   1508 
   1509 #define EVT_MAX_SLOTS_CHANGE		0x1B
   1510 typedef struct {
   1511     uint16_t	handle;
   1512     uint8_t	max_slots;
   1513 } __attribute__ ((packed)) evt_max_slots_change;
   1514 #define EVT_MAX_SLOTS_CHANGE_SIZE 3
   1515 
   1516 #define EVT_READ_CLOCK_OFFSET_COMPLETE	0x1C
   1517 typedef struct {
   1518     uint8_t	status;
   1519     uint16_t	handle;
   1520     uint16_t	clock_offset;
   1521 } __attribute__ ((packed)) evt_read_clock_offset_complete;
   1522 #define EVT_READ_CLOCK_OFFSET_COMPLETE_SIZE 5
   1523 
   1524 #define EVT_CONN_PTYPE_CHANGED		0x1D
   1525 typedef struct {
   1526     uint8_t	status;
   1527     uint16_t	handle;
   1528     uint16_t	ptype;
   1529 } __attribute__ ((packed)) evt_conn_ptype_changed;
   1530 #define EVT_CONN_PTYPE_CHANGED_SIZE 5
   1531 
   1532 #define EVT_QOS_VIOLATION		0x1E
   1533 typedef struct {
   1534     uint16_t	handle;
   1535 } __attribute__ ((packed)) evt_qos_violation;
   1536 #define EVT_QOS_VIOLATION_SIZE 2
   1537 
   1538 #define EVT_PSCAN_REP_MODE_CHANGE	0x20
   1539 typedef struct {
   1540     bdaddr_t	bdaddr;
   1541     uint8_t	pscan_rep_mode;
   1542 } __attribute__ ((packed)) evt_pscan_rep_mode_change;
   1543 #define EVT_PSCAN_REP_MODE_CHANGE_SIZE 7
   1544 
   1545 #define EVT_FLOW_SPEC_COMPLETE		0x21
   1546 typedef struct {
   1547     uint8_t	status;
   1548     uint16_t	handle;
   1549     uint8_t	flags;
   1550     uint8_t	direction;
   1551     hci_qos	qos;
   1552 } __attribute__ ((packed)) evt_flow_spec_complete;
   1553 #define EVT_FLOW_SPEC_COMPLETE_SIZE (5 + HCI_QOS_CP_SIZE)
   1554 
   1555 #define EVT_INQUIRY_RESULT_WITH_RSSI	0x22
   1556 typedef struct {
   1557     uint8_t	num_responses;
   1558     bdaddr_t	bdaddr;
   1559     uint8_t	pscan_rep_mode;
   1560     uint8_t	pscan_period_mode;
   1561     uint8_t	dev_class[3];
   1562     uint16_t	clock_offset;
   1563     int8_t	rssi;
   1564 } __attribute__ ((packed)) inquiry_info_with_rssi;
   1565 #define INQUIRY_INFO_WITH_RSSI_SIZE 15
   1566 typedef struct {
   1567     uint8_t	num_responses;
   1568     bdaddr_t	bdaddr;
   1569     uint8_t	pscan_rep_mode;
   1570     uint8_t	pscan_period_mode;
   1571     uint8_t	pscan_mode;
   1572     uint8_t	dev_class[3];
   1573     uint16_t	clock_offset;
   1574     int8_t	rssi;
   1575 } __attribute__ ((packed)) inquiry_info_with_rssi_and_pscan_mode;
   1576 #define INQUIRY_INFO_WITH_RSSI_AND_PSCAN_MODE_SIZE 16
   1577 
   1578 #define EVT_READ_REMOTE_EXT_FEATURES_COMPLETE	0x23
   1579 typedef struct {
   1580     uint8_t	status;
   1581     uint16_t	handle;
   1582     uint8_t	page_num;
   1583     uint8_t	max_page_num;
   1584     uint8_t	features[8];
   1585 } __attribute__ ((packed)) evt_read_remote_ext_features_complete;
   1586 #define EVT_READ_REMOTE_EXT_FEATURES_COMPLETE_SIZE 13
   1587 
   1588 #define EVT_SYNC_CONN_COMPLETE		0x2C
   1589 typedef struct {
   1590     uint8_t	status;
   1591     uint16_t	handle;
   1592     bdaddr_t	bdaddr;
   1593     uint8_t	link_type;
   1594     uint8_t	trans_interval;
   1595     uint8_t	retrans_window;
   1596     uint16_t	rx_pkt_len;
   1597     uint16_t	tx_pkt_len;
   1598     uint8_t	air_mode;
   1599 } __attribute__ ((packed)) evt_sync_conn_complete;
   1600 #define EVT_SYNC_CONN_COMPLETE_SIZE 17
   1601 
   1602 #define EVT_SYNC_CONN_CHANGED		0x2D
   1603 typedef struct {
   1604     uint8_t	status;
   1605     uint16_t	handle;
   1606     uint8_t	trans_interval;
   1607     uint8_t	retrans_window;
   1608     uint16_t	rx_pkt_len;
   1609     uint16_t	tx_pkt_len;
   1610 } __attribute__ ((packed)) evt_sync_conn_changed;
   1611 #define EVT_SYNC_CONN_CHANGED_SIZE 9
   1612 
   1613 #define EVT_SNIFF_SUBRATE		0x2E
   1614 typedef struct {
   1615     uint8_t	status;
   1616     uint16_t	handle;
   1617     uint16_t	max_remote_latency;
   1618     uint16_t	max_local_latency;
   1619     uint16_t	min_remote_timeout;
   1620     uint16_t	min_local_timeout;
   1621 } __attribute__ ((packed)) evt_sniff_subrate;
   1622 #define EVT_SNIFF_SUBRATE_SIZE 11
   1623 
   1624 #define EVT_EXTENDED_INQUIRY_RESULT	0x2F
   1625 typedef struct {
   1626     bdaddr_t	bdaddr;
   1627     uint8_t	pscan_rep_mode;
   1628     uint8_t	pscan_period_mode;
   1629     uint8_t	dev_class[3];
   1630     uint16_t	clock_offset;
   1631     int8_t	rssi;
   1632     uint8_t	data[240];
   1633 } __attribute__ ((packed)) extended_inquiry_info;
   1634 #define EXTENDED_INQUIRY_INFO_SIZE 254
   1635 
   1636 #define EVT_TESTING			0xFE
   1637 
   1638 #define EVT_VENDOR			0xFF
   1639 
   1640 /* Command opcode pack/unpack */
   1641 #define cmd_opcode_pack(ogf, ocf)	(uint16_t)((ocf & 0x03ff)|(ogf << 10))
   1642 #define cmd_opcode_ogf(op)		(op >> 10)
   1643 #define cmd_opcode_ocf(op)		(op & 0x03ff)
   1644 
   1645 /* ACL handle and flags pack/unpack */
   1646 #define acl_handle_pack(h, f)	(uint16_t)(((h) & 0x0fff)|((f) << 12))
   1647 #define acl_handle(h)		((h) & 0x0fff)
   1648 #define acl_flags(h)		((h) >> 12)
   1649 
   1650 /* HCI Packet structures */
   1651 #define HCI_COMMAND_HDR_SIZE	3
   1652 #define HCI_EVENT_HDR_SIZE	2
   1653 #define HCI_ACL_HDR_SIZE	4
   1654 #define HCI_SCO_HDR_SIZE	3
   1655 
   1656 struct hci_command_hdr {
   1657     uint16_t 	opcode;		/* OCF & OGF */
   1658     uint8_t	plen;
   1659 } __attribute__ ((packed));
   1660 
   1661 struct hci_event_hdr {
   1662     uint8_t	evt;
   1663     uint8_t	plen;
   1664 } __attribute__ ((packed));
   1665 
   1666 struct hci_acl_hdr {
   1667     uint16_t	handle;		/* Handle & Flags(PB, BC) */
   1668     uint16_t	dlen;
   1669 } __attribute__ ((packed));
   1670 
   1671 struct hci_sco_hdr {
   1672     uint16_t	handle;
   1673     uint8_t	dlen;
   1674 } __attribute__ ((packed));
   1675 
   1676 /* L2CAP layer defines */
   1677 
   1678 enum bt_l2cap_lm_bits {
   1679     L2CAP_LM_MASTER	= 1 << 0,
   1680     L2CAP_LM_AUTH	= 1 << 1,
   1681     L2CAP_LM_ENCRYPT	= 1 << 2,
   1682     L2CAP_LM_TRUSTED	= 1 << 3,
   1683     L2CAP_LM_RELIABLE	= 1 << 4,
   1684     L2CAP_LM_SECURE	= 1 << 5,
   1685 };
   1686 
   1687 enum bt_l2cap_cid_predef {
   1688     L2CAP_CID_INVALID	= 0x0000,
   1689     L2CAP_CID_SIGNALLING= 0x0001,
   1690     L2CAP_CID_GROUP	= 0x0002,
   1691     L2CAP_CID_ALLOC	= 0x0040,
   1692 };
   1693 
   1694 /* L2CAP command codes */
   1695 enum bt_l2cap_cmd {
   1696     L2CAP_COMMAND_REJ	= 1,
   1697     L2CAP_CONN_REQ,
   1698     L2CAP_CONN_RSP,
   1699     L2CAP_CONF_REQ,
   1700     L2CAP_CONF_RSP,
   1701     L2CAP_DISCONN_REQ,
   1702     L2CAP_DISCONN_RSP,
   1703     L2CAP_ECHO_REQ,
   1704     L2CAP_ECHO_RSP,
   1705     L2CAP_INFO_REQ,
   1706     L2CAP_INFO_RSP,
   1707 };
   1708 
   1709 enum bt_l2cap_sar_bits {
   1710     L2CAP_SAR_NO_SEG	= 0,
   1711     L2CAP_SAR_START,
   1712     L2CAP_SAR_END,
   1713     L2CAP_SAR_CONT,
   1714 };
   1715 
   1716 /* L2CAP structures */
   1717 typedef struct {
   1718     uint16_t	len;
   1719     uint16_t	cid;
   1720     uint8_t	data[0];
   1721 } __attribute__ ((packed)) l2cap_hdr;
   1722 #define L2CAP_HDR_SIZE 4
   1723 
   1724 typedef struct {
   1725     uint8_t	code;
   1726     uint8_t	ident;
   1727     uint16_t	len;
   1728 } __attribute__ ((packed)) l2cap_cmd_hdr;
   1729 #define L2CAP_CMD_HDR_SIZE 4
   1730 
   1731 typedef struct {
   1732     uint16_t	reason;
   1733 } __attribute__ ((packed)) l2cap_cmd_rej;
   1734 #define L2CAP_CMD_REJ_SIZE 2
   1735 
   1736 typedef struct {
   1737     uint16_t	dcid;
   1738     uint16_t	scid;
   1739 } __attribute__ ((packed)) l2cap_cmd_rej_cid;
   1740 #define L2CAP_CMD_REJ_CID_SIZE 4
   1741 
   1742 /* reject reason */
   1743 enum bt_l2cap_rej_reason {
   1744     L2CAP_REJ_CMD_NOT_UNDERSTOOD = 0,
   1745     L2CAP_REJ_SIG_TOOBIG,
   1746     L2CAP_REJ_CID_INVAL,
   1747 };
   1748 
   1749 typedef struct {
   1750     uint16_t	psm;
   1751     uint16_t	scid;
   1752 } __attribute__ ((packed)) l2cap_conn_req;
   1753 #define L2CAP_CONN_REQ_SIZE 4
   1754 
   1755 typedef struct {
   1756     uint16_t	dcid;
   1757     uint16_t	scid;
   1758     uint16_t	result;
   1759     uint16_t	status;
   1760 } __attribute__ ((packed)) l2cap_conn_rsp;
   1761 #define L2CAP_CONN_RSP_SIZE 8
   1762 
   1763 /* connect result */
   1764 enum bt_l2cap_conn_res {
   1765     L2CAP_CR_SUCCESS	= 0,
   1766     L2CAP_CR_PEND,
   1767     L2CAP_CR_BAD_PSM,
   1768     L2CAP_CR_SEC_BLOCK,
   1769     L2CAP_CR_NO_MEM,
   1770 };
   1771 
   1772 /* connect status */
   1773 enum bt_l2cap_conn_stat {
   1774     L2CAP_CS_NO_INFO	= 0,
   1775     L2CAP_CS_AUTHEN_PEND,
   1776     L2CAP_CS_AUTHOR_PEND,
   1777 };
   1778 
   1779 typedef struct {
   1780     uint16_t	dcid;
   1781     uint16_t	flags;
   1782     uint8_t	data[0];
   1783 } __attribute__ ((packed)) l2cap_conf_req;
   1784 #define L2CAP_CONF_REQ_SIZE(datalen) (4 + (datalen))
   1785 
   1786 typedef struct {
   1787     uint16_t	scid;
   1788     uint16_t	flags;
   1789     uint16_t	result;
   1790     uint8_t	data[0];
   1791 } __attribute__ ((packed)) l2cap_conf_rsp;
   1792 #define L2CAP_CONF_RSP_SIZE(datalen) (6 + datalen)
   1793 
   1794 enum bt_l2cap_conf_res {
   1795     L2CAP_CONF_SUCCESS	= 0,
   1796     L2CAP_CONF_UNACCEPT,
   1797     L2CAP_CONF_REJECT,
   1798     L2CAP_CONF_UNKNOWN,
   1799 };
   1800 
   1801 typedef struct {
   1802     uint8_t	type;
   1803     uint8_t	len;
   1804     uint8_t	val[0];
   1805 } __attribute__ ((packed)) l2cap_conf_opt;
   1806 #define L2CAP_CONF_OPT_SIZE 2
   1807 
   1808 enum bt_l2cap_conf_val {
   1809     L2CAP_CONF_MTU	= 1,
   1810     L2CAP_CONF_FLUSH_TO,
   1811     L2CAP_CONF_QOS,
   1812     L2CAP_CONF_RFC,
   1813     L2CAP_CONF_RFC_MODE	= L2CAP_CONF_RFC,
   1814 };
   1815 
   1816 typedef struct {
   1817     uint8_t	flags;
   1818     uint8_t	service_type;
   1819     uint32_t	token_rate;
   1820     uint32_t	token_bucket_size;
   1821     uint32_t	peak_bandwidth;
   1822     uint32_t	latency;
   1823     uint32_t	delay_variation;
   1824 } __attribute__ ((packed)) l2cap_conf_opt_qos;
   1825 #define L2CAP_CONF_OPT_QOS_SIZE 22
   1826 
   1827 enum bt_l2cap_conf_opt_qos_st {
   1828     L2CAP_CONF_QOS_NO_TRAFFIC = 0x00,
   1829     L2CAP_CONF_QOS_BEST_EFFORT,
   1830     L2CAP_CONF_QOS_GUARANTEED,
   1831 };
   1832 
   1833 #define L2CAP_CONF_QOS_WILDCARD	0xffffffff
   1834 
   1835 enum bt_l2cap_mode {
   1836     L2CAP_MODE_BASIC	= 0,
   1837     L2CAP_MODE_RETRANS	= 1,
   1838     L2CAP_MODE_FLOWCTL	= 2,
   1839 };
   1840 
   1841 typedef struct {
   1842     uint16_t	dcid;
   1843     uint16_t	scid;
   1844 } __attribute__ ((packed)) l2cap_disconn_req;
   1845 #define L2CAP_DISCONN_REQ_SIZE 4
   1846 
   1847 typedef struct {
   1848     uint16_t	dcid;
   1849     uint16_t	scid;
   1850 } __attribute__ ((packed)) l2cap_disconn_rsp;
   1851 #define L2CAP_DISCONN_RSP_SIZE 4
   1852 
   1853 typedef struct {
   1854     uint16_t	type;
   1855 } __attribute__ ((packed)) l2cap_info_req;
   1856 #define L2CAP_INFO_REQ_SIZE 2
   1857 
   1858 typedef struct {
   1859     uint16_t	type;
   1860     uint16_t	result;
   1861     uint8_t	data[0];
   1862 } __attribute__ ((packed)) l2cap_info_rsp;
   1863 #define L2CAP_INFO_RSP_SIZE 4
   1864 
   1865 /* info type */
   1866 enum bt_l2cap_info_type {
   1867     L2CAP_IT_CL_MTU	= 1,
   1868     L2CAP_IT_FEAT_MASK,
   1869 };
   1870 
   1871 /* info result */
   1872 enum bt_l2cap_info_result {
   1873     L2CAP_IR_SUCCESS	= 0,
   1874     L2CAP_IR_NOTSUPP,
   1875 };
   1876 
   1877 /* Service Discovery Protocol defines */
   1878 /* Note that all multibyte values in lower layer protocols (above in this file)
   1879  * are little-endian while SDP is big-endian.  */
   1880 
   1881 /* Protocol UUIDs */
   1882 enum sdp_proto_uuid {
   1883     SDP_UUID		= 0x0001,
   1884     UDP_UUID		= 0x0002,
   1885     RFCOMM_UUID		= 0x0003,
   1886     TCP_UUID		= 0x0004,
   1887     TCS_BIN_UUID	= 0x0005,
   1888     TCS_AT_UUID		= 0x0006,
   1889     OBEX_UUID		= 0x0008,
   1890     IP_UUID		= 0x0009,
   1891     FTP_UUID		= 0x000a,
   1892     HTTP_UUID		= 0x000c,
   1893     WSP_UUID		= 0x000e,
   1894     BNEP_UUID		= 0x000f,
   1895     UPNP_UUID		= 0x0010,
   1896     HIDP_UUID		= 0x0011,
   1897     HCRP_CTRL_UUID	= 0x0012,
   1898     HCRP_DATA_UUID	= 0x0014,
   1899     HCRP_NOTE_UUID	= 0x0016,
   1900     AVCTP_UUID		= 0x0017,
   1901     AVDTP_UUID		= 0x0019,
   1902     CMTP_UUID		= 0x001b,
   1903     UDI_UUID		= 0x001d,
   1904     MCAP_CTRL_UUID	= 0x001e,
   1905     MCAP_DATA_UUID	= 0x001f,
   1906     L2CAP_UUID		= 0x0100,
   1907 };
   1908 
   1909 /*
   1910  * Service class identifiers of standard services and service groups
   1911  */
   1912 enum service_class_id {
   1913     SDP_SERVER_SVCLASS_ID		= 0x1000,
   1914     BROWSE_GRP_DESC_SVCLASS_ID		= 0x1001,
   1915     PUBLIC_BROWSE_GROUP			= 0x1002,
   1916     SERIAL_PORT_SVCLASS_ID		= 0x1101,
   1917     LAN_ACCESS_SVCLASS_ID		= 0x1102,
   1918     DIALUP_NET_SVCLASS_ID		= 0x1103,
   1919     IRMC_SYNC_SVCLASS_ID		= 0x1104,
   1920     OBEX_OBJPUSH_SVCLASS_ID		= 0x1105,
   1921     OBEX_FILETRANS_SVCLASS_ID		= 0x1106,
   1922     IRMC_SYNC_CMD_SVCLASS_ID		= 0x1107,
   1923     HEADSET_SVCLASS_ID			= 0x1108,
   1924     CORDLESS_TELEPHONY_SVCLASS_ID	= 0x1109,
   1925     AUDIO_SOURCE_SVCLASS_ID		= 0x110a,
   1926     AUDIO_SINK_SVCLASS_ID		= 0x110b,
   1927     AV_REMOTE_TARGET_SVCLASS_ID		= 0x110c,
   1928     ADVANCED_AUDIO_SVCLASS_ID		= 0x110d,
   1929     AV_REMOTE_SVCLASS_ID		= 0x110e,
   1930     VIDEO_CONF_SVCLASS_ID		= 0x110f,
   1931     INTERCOM_SVCLASS_ID			= 0x1110,
   1932     FAX_SVCLASS_ID			= 0x1111,
   1933     HEADSET_AGW_SVCLASS_ID		= 0x1112,
   1934     WAP_SVCLASS_ID			= 0x1113,
   1935     WAP_CLIENT_SVCLASS_ID		= 0x1114,
   1936     PANU_SVCLASS_ID			= 0x1115,
   1937     NAP_SVCLASS_ID			= 0x1116,
   1938     GN_SVCLASS_ID			= 0x1117,
   1939     DIRECT_PRINTING_SVCLASS_ID		= 0x1118,
   1940     REFERENCE_PRINTING_SVCLASS_ID	= 0x1119,
   1941     IMAGING_SVCLASS_ID			= 0x111a,
   1942     IMAGING_RESPONDER_SVCLASS_ID	= 0x111b,
   1943     IMAGING_ARCHIVE_SVCLASS_ID		= 0x111c,
   1944     IMAGING_REFOBJS_SVCLASS_ID		= 0x111d,
   1945     HANDSFREE_SVCLASS_ID		= 0x111e,
   1946     HANDSFREE_AGW_SVCLASS_ID		= 0x111f,
   1947     DIRECT_PRT_REFOBJS_SVCLASS_ID	= 0x1120,
   1948     REFLECTED_UI_SVCLASS_ID		= 0x1121,
   1949     BASIC_PRINTING_SVCLASS_ID		= 0x1122,
   1950     PRINTING_STATUS_SVCLASS_ID		= 0x1123,
   1951     HID_SVCLASS_ID			= 0x1124,
   1952     HCR_SVCLASS_ID			= 0x1125,
   1953     HCR_PRINT_SVCLASS_ID		= 0x1126,
   1954     HCR_SCAN_SVCLASS_ID			= 0x1127,
   1955     CIP_SVCLASS_ID			= 0x1128,
   1956     VIDEO_CONF_GW_SVCLASS_ID		= 0x1129,
   1957     UDI_MT_SVCLASS_ID			= 0x112a,
   1958     UDI_TA_SVCLASS_ID			= 0x112b,
   1959     AV_SVCLASS_ID			= 0x112c,
   1960     SAP_SVCLASS_ID			= 0x112d,
   1961     PBAP_PCE_SVCLASS_ID			= 0x112e,
   1962     PBAP_PSE_SVCLASS_ID			= 0x112f,
   1963     PBAP_SVCLASS_ID			= 0x1130,
   1964     PNP_INFO_SVCLASS_ID			= 0x1200,
   1965     GENERIC_NETWORKING_SVCLASS_ID	= 0x1201,
   1966     GENERIC_FILETRANS_SVCLASS_ID	= 0x1202,
   1967     GENERIC_AUDIO_SVCLASS_ID		= 0x1203,
   1968     GENERIC_TELEPHONY_SVCLASS_ID	= 0x1204,
   1969     UPNP_SVCLASS_ID			= 0x1205,
   1970     UPNP_IP_SVCLASS_ID			= 0x1206,
   1971     UPNP_PAN_SVCLASS_ID			= 0x1300,
   1972     UPNP_LAP_SVCLASS_ID			= 0x1301,
   1973     UPNP_L2CAP_SVCLASS_ID		= 0x1302,
   1974     VIDEO_SOURCE_SVCLASS_ID		= 0x1303,
   1975     VIDEO_SINK_SVCLASS_ID		= 0x1304,
   1976     VIDEO_DISTRIBUTION_SVCLASS_ID	= 0x1305,
   1977     MDP_SVCLASS_ID			= 0x1400,
   1978     MDP_SOURCE_SVCLASS_ID		= 0x1401,
   1979     MDP_SINK_SVCLASS_ID			= 0x1402,
   1980     APPLE_AGENT_SVCLASS_ID		= 0x2112,
   1981 };
   1982 
   1983 /*
   1984  * Standard profile descriptor identifiers; note these
   1985  * may be identical to some of the service classes defined above
   1986  */
   1987 #define SDP_SERVER_PROFILE_ID		SDP_SERVER_SVCLASS_ID
   1988 #define BROWSE_GRP_DESC_PROFILE_ID	BROWSE_GRP_DESC_SVCLASS_ID
   1989 #define SERIAL_PORT_PROFILE_ID		SERIAL_PORT_SVCLASS_ID
   1990 #define LAN_ACCESS_PROFILE_ID		LAN_ACCESS_SVCLASS_ID
   1991 #define DIALUP_NET_PROFILE_ID		DIALUP_NET_SVCLASS_ID
   1992 #define IRMC_SYNC_PROFILE_ID		IRMC_SYNC_SVCLASS_ID
   1993 #define OBEX_OBJPUSH_PROFILE_ID		OBEX_OBJPUSH_SVCLASS_ID
   1994 #define OBEX_FILETRANS_PROFILE_ID	OBEX_FILETRANS_SVCLASS_ID
   1995 #define IRMC_SYNC_CMD_PROFILE_ID	IRMC_SYNC_CMD_SVCLASS_ID
   1996 #define HEADSET_PROFILE_ID		HEADSET_SVCLASS_ID
   1997 #define CORDLESS_TELEPHONY_PROFILE_ID	CORDLESS_TELEPHONY_SVCLASS_ID
   1998 #define AUDIO_SOURCE_PROFILE_ID		AUDIO_SOURCE_SVCLASS_ID
   1999 #define AUDIO_SINK_PROFILE_ID		AUDIO_SINK_SVCLASS_ID
   2000 #define AV_REMOTE_TARGET_PROFILE_ID	AV_REMOTE_TARGET_SVCLASS_ID
   2001 #define ADVANCED_AUDIO_PROFILE_ID	ADVANCED_AUDIO_SVCLASS_ID
   2002 #define AV_REMOTE_PROFILE_ID		AV_REMOTE_SVCLASS_ID
   2003 #define VIDEO_CONF_PROFILE_ID		VIDEO_CONF_SVCLASS_ID
   2004 #define INTERCOM_PROFILE_ID		INTERCOM_SVCLASS_ID
   2005 #define FAX_PROFILE_ID			FAX_SVCLASS_ID
   2006 #define HEADSET_AGW_PROFILE_ID		HEADSET_AGW_SVCLASS_ID
   2007 #define WAP_PROFILE_ID			WAP_SVCLASS_ID
   2008 #define WAP_CLIENT_PROFILE_ID		WAP_CLIENT_SVCLASS_ID
   2009 #define PANU_PROFILE_ID			PANU_SVCLASS_ID
   2010 #define NAP_PROFILE_ID			NAP_SVCLASS_ID
   2011 #define GN_PROFILE_ID			GN_SVCLASS_ID
   2012 #define DIRECT_PRINTING_PROFILE_ID	DIRECT_PRINTING_SVCLASS_ID
   2013 #define REFERENCE_PRINTING_PROFILE_ID	REFERENCE_PRINTING_SVCLASS_ID
   2014 #define IMAGING_PROFILE_ID		IMAGING_SVCLASS_ID
   2015 #define IMAGING_RESPONDER_PROFILE_ID	IMAGING_RESPONDER_SVCLASS_ID
   2016 #define IMAGING_ARCHIVE_PROFILE_ID	IMAGING_ARCHIVE_SVCLASS_ID
   2017 #define IMAGING_REFOBJS_PROFILE_ID	IMAGING_REFOBJS_SVCLASS_ID
   2018 #define HANDSFREE_PROFILE_ID		HANDSFREE_SVCLASS_ID
   2019 #define HANDSFREE_AGW_PROFILE_ID	HANDSFREE_AGW_SVCLASS_ID
   2020 #define DIRECT_PRT_REFOBJS_PROFILE_ID	DIRECT_PRT_REFOBJS_SVCLASS_ID
   2021 #define REFLECTED_UI_PROFILE_ID		REFLECTED_UI_SVCLASS_ID
   2022 #define BASIC_PRINTING_PROFILE_ID	BASIC_PRINTING_SVCLASS_ID
   2023 #define PRINTING_STATUS_PROFILE_ID	PRINTING_STATUS_SVCLASS_ID
   2024 #define HID_PROFILE_ID			HID_SVCLASS_ID
   2025 #define HCR_PROFILE_ID			HCR_SCAN_SVCLASS_ID
   2026 #define HCR_PRINT_PROFILE_ID		HCR_PRINT_SVCLASS_ID
   2027 #define HCR_SCAN_PROFILE_ID		HCR_SCAN_SVCLASS_ID
   2028 #define CIP_PROFILE_ID			CIP_SVCLASS_ID
   2029 #define VIDEO_CONF_GW_PROFILE_ID	VIDEO_CONF_GW_SVCLASS_ID
   2030 #define UDI_MT_PROFILE_ID		UDI_MT_SVCLASS_ID
   2031 #define UDI_TA_PROFILE_ID		UDI_TA_SVCLASS_ID
   2032 #define AV_PROFILE_ID			AV_SVCLASS_ID
   2033 #define SAP_PROFILE_ID			SAP_SVCLASS_ID
   2034 #define PBAP_PCE_PROFILE_ID		PBAP_PCE_SVCLASS_ID
   2035 #define PBAP_PSE_PROFILE_ID		PBAP_PSE_SVCLASS_ID
   2036 #define PBAP_PROFILE_ID			PBAP_SVCLASS_ID
   2037 #define PNP_INFO_PROFILE_ID		PNP_INFO_SVCLASS_ID
   2038 #define GENERIC_NETWORKING_PROFILE_ID	GENERIC_NETWORKING_SVCLASS_ID
   2039 #define GENERIC_FILETRANS_PROFILE_ID	GENERIC_FILETRANS_SVCLASS_ID
   2040 #define GENERIC_AUDIO_PROFILE_ID	GENERIC_AUDIO_SVCLASS_ID
   2041 #define GENERIC_TELEPHONY_PROFILE_ID	GENERIC_TELEPHONY_SVCLASS_ID
   2042 #define UPNP_PROFILE_ID			UPNP_SVCLASS_ID
   2043 #define UPNP_IP_PROFILE_ID		UPNP_IP_SVCLASS_ID
   2044 #define UPNP_PAN_PROFILE_ID		UPNP_PAN_SVCLASS_ID
   2045 #define UPNP_LAP_PROFILE_ID		UPNP_LAP_SVCLASS_ID
   2046 #define UPNP_L2CAP_PROFILE_ID		UPNP_L2CAP_SVCLASS_ID
   2047 #define VIDEO_SOURCE_PROFILE_ID		VIDEO_SOURCE_SVCLASS_ID
   2048 #define VIDEO_SINK_PROFILE_ID		VIDEO_SINK_SVCLASS_ID
   2049 #define VIDEO_DISTRIBUTION_PROFILE_ID	VIDEO_DISTRIBUTION_SVCLASS_ID
   2050 #define MDP_PROFILE_ID			MDP_SVCLASS_ID
   2051 #define MDP_SOURCE_PROFILE_ID		MDP_SROUCE_SVCLASS_ID
   2052 #define MDP_SINK_PROFILE_ID		MDP_SINK_SVCLASS_ID
   2053 #define APPLE_AGENT_PROFILE_ID		APPLE_AGENT_SVCLASS_ID
   2054 
   2055 /* Data Representation */
   2056 enum bt_sdp_data_type {
   2057     SDP_DTYPE_NIL	= 0 << 3,
   2058     SDP_DTYPE_UINT	= 1 << 3,
   2059     SDP_DTYPE_SINT	= 2 << 3,
   2060     SDP_DTYPE_UUID	= 3 << 3,
   2061     SDP_DTYPE_STRING	= 4 << 3,
   2062     SDP_DTYPE_BOOL	= 5 << 3,
   2063     SDP_DTYPE_SEQ	= 6 << 3,
   2064     SDP_DTYPE_ALT	= 7 << 3,
   2065     SDP_DTYPE_URL	= 8 << 3,
   2066 };
   2067 
   2068 enum bt_sdp_data_size {
   2069     SDP_DSIZE_1		= 0,
   2070     SDP_DSIZE_2,
   2071     SDP_DSIZE_4,
   2072     SDP_DSIZE_8,
   2073     SDP_DSIZE_16,
   2074     SDP_DSIZE_NEXT1,
   2075     SDP_DSIZE_NEXT2,
   2076     SDP_DSIZE_NEXT4,
   2077     SDP_DSIZE_MASK = SDP_DSIZE_NEXT4,
   2078 };
   2079 
   2080 enum bt_sdp_cmd {
   2081     SDP_ERROR_RSP		= 0x01,
   2082     SDP_SVC_SEARCH_REQ		= 0x02,
   2083     SDP_SVC_SEARCH_RSP		= 0x03,
   2084     SDP_SVC_ATTR_REQ		= 0x04,
   2085     SDP_SVC_ATTR_RSP		= 0x05,
   2086     SDP_SVC_SEARCH_ATTR_REQ	= 0x06,
   2087     SDP_SVC_SEARCH_ATTR_RSP	= 0x07,
   2088 };
   2089 
   2090 enum bt_sdp_errorcode {
   2091     SDP_INVALID_VERSION		= 0x0001,
   2092     SDP_INVALID_RECORD_HANDLE	= 0x0002,
   2093     SDP_INVALID_SYNTAX		= 0x0003,
   2094     SDP_INVALID_PDU_SIZE	= 0x0004,
   2095     SDP_INVALID_CSTATE		= 0x0005,
   2096 };
   2097 
   2098 /*
   2099  * String identifiers are based on the SDP spec stating that
   2100  * "base attribute id of the primary (universal) language must be 0x0100"
   2101  *
   2102  * Other languages should have their own offset; e.g.:
   2103  * #define XXXLangBase yyyy
   2104  * #define AttrServiceName_XXX	0x0000+XXXLangBase
   2105  */
   2106 #define SDP_PRIMARY_LANG_BASE 		0x0100
   2107 
   2108 enum bt_sdp_attribute_id {
   2109     SDP_ATTR_RECORD_HANDLE			= 0x0000,
   2110     SDP_ATTR_SVCLASS_ID_LIST			= 0x0001,
   2111     SDP_ATTR_RECORD_STATE			= 0x0002,
   2112     SDP_ATTR_SERVICE_ID				= 0x0003,
   2113     SDP_ATTR_PROTO_DESC_LIST			= 0x0004,
   2114     SDP_ATTR_BROWSE_GRP_LIST			= 0x0005,
   2115     SDP_ATTR_LANG_BASE_ATTR_ID_LIST		= 0x0006,
   2116     SDP_ATTR_SVCINFO_TTL			= 0x0007,
   2117     SDP_ATTR_SERVICE_AVAILABILITY		= 0x0008,
   2118     SDP_ATTR_PFILE_DESC_LIST			= 0x0009,
   2119     SDP_ATTR_DOC_URL				= 0x000a,
   2120     SDP_ATTR_CLNT_EXEC_URL			= 0x000b,
   2121     SDP_ATTR_ICON_URL				= 0x000c,
   2122     SDP_ATTR_ADD_PROTO_DESC_LIST		= 0x000d,
   2123 
   2124     SDP_ATTR_SVCNAME_PRIMARY			= SDP_PRIMARY_LANG_BASE + 0,
   2125     SDP_ATTR_SVCDESC_PRIMARY			= SDP_PRIMARY_LANG_BASE + 1,
   2126     SDP_ATTR_SVCPROV_PRIMARY			= SDP_PRIMARY_LANG_BASE + 2,
   2127 
   2128     SDP_ATTR_GROUP_ID				= 0x0200,
   2129     SDP_ATTR_IP_SUBNET				= 0x0200,
   2130 
   2131     /* SDP */
   2132     SDP_ATTR_VERSION_NUM_LIST			= 0x0200,
   2133     SDP_ATTR_SVCDB_STATE			= 0x0201,
   2134 
   2135     SDP_ATTR_SERVICE_VERSION			= 0x0300,
   2136     SDP_ATTR_EXTERNAL_NETWORK			= 0x0301,
   2137     SDP_ATTR_SUPPORTED_DATA_STORES_LIST		= 0x0301,
   2138     SDP_ATTR_FAX_CLASS1_SUPPORT			= 0x0302,
   2139     SDP_ATTR_REMOTE_AUDIO_VOLUME_CONTROL	= 0x0302,
   2140     SDP_ATTR_FAX_CLASS20_SUPPORT		= 0x0303,
   2141     SDP_ATTR_SUPPORTED_FORMATS_LIST		= 0x0303,
   2142     SDP_ATTR_FAX_CLASS2_SUPPORT			= 0x0304,
   2143     SDP_ATTR_AUDIO_FEEDBACK_SUPPORT		= 0x0305,
   2144     SDP_ATTR_NETWORK_ADDRESS			= 0x0306,
   2145     SDP_ATTR_WAP_GATEWAY			= 0x0307,
   2146     SDP_ATTR_HOMEPAGE_URL			= 0x0308,
   2147     SDP_ATTR_WAP_STACK_TYPE			= 0x0309,
   2148     SDP_ATTR_SECURITY_DESC			= 0x030a,
   2149     SDP_ATTR_NET_ACCESS_TYPE			= 0x030b,
   2150     SDP_ATTR_MAX_NET_ACCESSRATE			= 0x030c,
   2151     SDP_ATTR_IP4_SUBNET				= 0x030d,
   2152     SDP_ATTR_IP6_SUBNET				= 0x030e,
   2153     SDP_ATTR_SUPPORTED_CAPABILITIES		= 0x0310,
   2154     SDP_ATTR_SUPPORTED_FEATURES			= 0x0311,
   2155     SDP_ATTR_SUPPORTED_FUNCTIONS		= 0x0312,
   2156     SDP_ATTR_TOTAL_IMAGING_DATA_CAPACITY	= 0x0313,
   2157     SDP_ATTR_SUPPORTED_REPOSITORIES		= 0x0314,
   2158 
   2159     /* PnP Information */
   2160     SDP_ATTR_SPECIFICATION_ID			= 0x0200,
   2161     SDP_ATTR_VENDOR_ID				= 0x0201,
   2162     SDP_ATTR_PRODUCT_ID				= 0x0202,
   2163     SDP_ATTR_VERSION				= 0x0203,
   2164     SDP_ATTR_PRIMARY_RECORD			= 0x0204,
   2165     SDP_ATTR_VENDOR_ID_SOURCE			= 0x0205,
   2166 
   2167     /* BT HID */
   2168     SDP_ATTR_DEVICE_RELEASE_NUMBER		= 0x0200,
   2169     SDP_ATTR_PARSER_VERSION			= 0x0201,
   2170     SDP_ATTR_DEVICE_SUBCLASS			= 0x0202,
   2171     SDP_ATTR_COUNTRY_CODE			= 0x0203,
   2172     SDP_ATTR_VIRTUAL_CABLE			= 0x0204,
   2173     SDP_ATTR_RECONNECT_INITIATE			= 0x0205,
   2174     SDP_ATTR_DESCRIPTOR_LIST			= 0x0206,
   2175     SDP_ATTR_LANG_ID_BASE_LIST			= 0x0207,
   2176     SDP_ATTR_SDP_DISABLE			= 0x0208,
   2177     SDP_ATTR_BATTERY_POWER			= 0x0209,
   2178     SDP_ATTR_REMOTE_WAKEUP			= 0x020a,
   2179     SDP_ATTR_PROFILE_VERSION			= 0x020b,
   2180     SDP_ATTR_SUPERVISION_TIMEOUT		= 0x020c,
   2181     SDP_ATTR_NORMALLY_CONNECTABLE		= 0x020d,
   2182     SDP_ATTR_BOOT_DEVICE			= 0x020e,
   2183 };
   2184