1*1da177e4SLinus Torvalds /* 2*1da177e4SLinus Torvalds BlueZ - Bluetooth protocol stack for Linux 3*1da177e4SLinus Torvalds Copyright (C) 2000-2001 Qualcomm Incorporated 4*1da177e4SLinus Torvalds 5*1da177e4SLinus Torvalds Written 2000,2001 by Maxim Krasnyansky <maxk@qualcomm.com> 6*1da177e4SLinus Torvalds 7*1da177e4SLinus Torvalds This program is free software; you can redistribute it and/or modify 8*1da177e4SLinus Torvalds it under the terms of the GNU General Public License version 2 as 9*1da177e4SLinus Torvalds published by the Free Software Foundation; 10*1da177e4SLinus Torvalds 11*1da177e4SLinus Torvalds THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS 12*1da177e4SLinus Torvalds OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 13*1da177e4SLinus Torvalds FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT OF THIRD PARTY RIGHTS. 14*1da177e4SLinus Torvalds IN NO EVENT SHALL THE COPYRIGHT HOLDER(S) AND AUTHOR(S) BE LIABLE FOR ANY 15*1da177e4SLinus Torvalds CLAIM, OR ANY SPECIAL INDIRECT OR CONSEQUENTIAL DAMAGES, OR ANY DAMAGES 16*1da177e4SLinus Torvalds WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN 17*1da177e4SLinus Torvalds ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF 18*1da177e4SLinus Torvalds OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. 19*1da177e4SLinus Torvalds 20*1da177e4SLinus Torvalds ALL LIABILITY, INCLUDING LIABILITY FOR INFRINGEMENT OF ANY PATENTS, 21*1da177e4SLinus Torvalds COPYRIGHTS, TRADEMARKS OR OTHER RIGHTS, RELATING TO USE OF THIS 22*1da177e4SLinus Torvalds SOFTWARE IS DISCLAIMED. 23*1da177e4SLinus Torvalds */ 24*1da177e4SLinus Torvalds 25*1da177e4SLinus Torvalds #ifndef __HCI_H 26*1da177e4SLinus Torvalds #define __HCI_H 27*1da177e4SLinus Torvalds 28*1da177e4SLinus Torvalds #define HCI_MAX_ACL_SIZE 1024 29*1da177e4SLinus Torvalds #define HCI_MAX_SCO_SIZE 255 30*1da177e4SLinus Torvalds #define HCI_MAX_EVENT_SIZE 260 31*1da177e4SLinus Torvalds #define HCI_MAX_FRAME_SIZE (HCI_MAX_ACL_SIZE + 4) 32*1da177e4SLinus Torvalds 33*1da177e4SLinus Torvalds /* HCI dev events */ 34*1da177e4SLinus Torvalds #define HCI_DEV_REG 1 35*1da177e4SLinus Torvalds #define HCI_DEV_UNREG 2 36*1da177e4SLinus Torvalds #define HCI_DEV_UP 3 37*1da177e4SLinus Torvalds #define HCI_DEV_DOWN 4 38*1da177e4SLinus Torvalds #define HCI_DEV_SUSPEND 5 39*1da177e4SLinus Torvalds #define HCI_DEV_RESUME 6 40*1da177e4SLinus Torvalds 41*1da177e4SLinus Torvalds /* HCI notify events */ 42*1da177e4SLinus Torvalds #define HCI_NOTIFY_CONN_ADD 1 43*1da177e4SLinus Torvalds #define HCI_NOTIFY_CONN_DEL 2 44*1da177e4SLinus Torvalds #define HCI_NOTIFY_VOICE_SETTING 3 45*1da177e4SLinus Torvalds 46*1da177e4SLinus Torvalds /* HCI device types */ 47*1da177e4SLinus Torvalds #define HCI_VHCI 0 48*1da177e4SLinus Torvalds #define HCI_USB 1 49*1da177e4SLinus Torvalds #define HCI_PCCARD 2 50*1da177e4SLinus Torvalds #define HCI_UART 3 51*1da177e4SLinus Torvalds #define HCI_RS232 4 52*1da177e4SLinus Torvalds #define HCI_PCI 5 53*1da177e4SLinus Torvalds 54*1da177e4SLinus Torvalds /* HCI device quirks */ 55*1da177e4SLinus Torvalds enum { 56*1da177e4SLinus Torvalds HCI_QUIRK_RESET_ON_INIT, 57*1da177e4SLinus Torvalds HCI_QUIRK_RAW_DEVICE 58*1da177e4SLinus Torvalds }; 59*1da177e4SLinus Torvalds 60*1da177e4SLinus Torvalds /* HCI device flags */ 61*1da177e4SLinus Torvalds enum { 62*1da177e4SLinus Torvalds HCI_UP, 63*1da177e4SLinus Torvalds HCI_INIT, 64*1da177e4SLinus Torvalds HCI_RUNNING, 65*1da177e4SLinus Torvalds 66*1da177e4SLinus Torvalds HCI_PSCAN, 67*1da177e4SLinus Torvalds HCI_ISCAN, 68*1da177e4SLinus Torvalds HCI_AUTH, 69*1da177e4SLinus Torvalds HCI_ENCRYPT, 70*1da177e4SLinus Torvalds HCI_INQUIRY, 71*1da177e4SLinus Torvalds 72*1da177e4SLinus Torvalds HCI_RAW, 73*1da177e4SLinus Torvalds 74*1da177e4SLinus Torvalds HCI_SECMGR 75*1da177e4SLinus Torvalds }; 76*1da177e4SLinus Torvalds 77*1da177e4SLinus Torvalds /* HCI ioctl defines */ 78*1da177e4SLinus Torvalds #define HCIDEVUP _IOW('H', 201, int) 79*1da177e4SLinus Torvalds #define HCIDEVDOWN _IOW('H', 202, int) 80*1da177e4SLinus Torvalds #define HCIDEVRESET _IOW('H', 203, int) 81*1da177e4SLinus Torvalds #define HCIDEVRESTAT _IOW('H', 204, int) 82*1da177e4SLinus Torvalds 83*1da177e4SLinus Torvalds #define HCIGETDEVLIST _IOR('H', 210, int) 84*1da177e4SLinus Torvalds #define HCIGETDEVINFO _IOR('H', 211, int) 85*1da177e4SLinus Torvalds #define HCIGETCONNLIST _IOR('H', 212, int) 86*1da177e4SLinus Torvalds #define HCIGETCONNINFO _IOR('H', 213, int) 87*1da177e4SLinus Torvalds 88*1da177e4SLinus Torvalds #define HCISETRAW _IOW('H', 220, int) 89*1da177e4SLinus Torvalds #define HCISETSCAN _IOW('H', 221, int) 90*1da177e4SLinus Torvalds #define HCISETAUTH _IOW('H', 222, int) 91*1da177e4SLinus Torvalds #define HCISETENCRYPT _IOW('H', 223, int) 92*1da177e4SLinus Torvalds #define HCISETPTYPE _IOW('H', 224, int) 93*1da177e4SLinus Torvalds #define HCISETLINKPOL _IOW('H', 225, int) 94*1da177e4SLinus Torvalds #define HCISETLINKMODE _IOW('H', 226, int) 95*1da177e4SLinus Torvalds #define HCISETACLMTU _IOW('H', 227, int) 96*1da177e4SLinus Torvalds #define HCISETSCOMTU _IOW('H', 228, int) 97*1da177e4SLinus Torvalds 98*1da177e4SLinus Torvalds #define HCISETSECMGR _IOW('H', 230, int) 99*1da177e4SLinus Torvalds 100*1da177e4SLinus Torvalds #define HCIINQUIRY _IOR('H', 240, int) 101*1da177e4SLinus Torvalds 102*1da177e4SLinus Torvalds /* HCI timeouts */ 103*1da177e4SLinus Torvalds #define HCI_CONN_TIMEOUT (HZ * 40) 104*1da177e4SLinus Torvalds #define HCI_DISCONN_TIMEOUT (HZ * 2) 105*1da177e4SLinus Torvalds #define HCI_CONN_IDLE_TIMEOUT (HZ * 60) 106*1da177e4SLinus Torvalds 107*1da177e4SLinus Torvalds /* HCI Packet types */ 108*1da177e4SLinus Torvalds #define HCI_COMMAND_PKT 0x01 109*1da177e4SLinus Torvalds #define HCI_ACLDATA_PKT 0x02 110*1da177e4SLinus Torvalds #define HCI_SCODATA_PKT 0x03 111*1da177e4SLinus Torvalds #define HCI_EVENT_PKT 0x04 112*1da177e4SLinus Torvalds #define HCI_VENDOR_PKT 0xff 113*1da177e4SLinus Torvalds 114*1da177e4SLinus Torvalds /* HCI Packet types */ 115*1da177e4SLinus Torvalds #define HCI_DM1 0x0008 116*1da177e4SLinus Torvalds #define HCI_DM3 0x0400 117*1da177e4SLinus Torvalds #define HCI_DM5 0x4000 118*1da177e4SLinus Torvalds #define HCI_DH1 0x0010 119*1da177e4SLinus Torvalds #define HCI_DH3 0x0800 120*1da177e4SLinus Torvalds #define HCI_DH5 0x8000 121*1da177e4SLinus Torvalds 122*1da177e4SLinus Torvalds #define HCI_HV1 0x0020 123*1da177e4SLinus Torvalds #define HCI_HV2 0x0040 124*1da177e4SLinus Torvalds #define HCI_HV3 0x0080 125*1da177e4SLinus Torvalds 126*1da177e4SLinus Torvalds #define SCO_PTYPE_MASK (HCI_HV1 | HCI_HV2 | HCI_HV3) 127*1da177e4SLinus Torvalds #define ACL_PTYPE_MASK (~SCO_PTYPE_MASK) 128*1da177e4SLinus Torvalds 129*1da177e4SLinus Torvalds /* ACL flags */ 130*1da177e4SLinus Torvalds #define ACL_CONT 0x01 131*1da177e4SLinus Torvalds #define ACL_START 0x02 132*1da177e4SLinus Torvalds #define ACL_ACTIVE_BCAST 0x04 133*1da177e4SLinus Torvalds #define ACL_PICO_BCAST 0x08 134*1da177e4SLinus Torvalds 135*1da177e4SLinus Torvalds /* Baseband links */ 136*1da177e4SLinus Torvalds #define SCO_LINK 0x00 137*1da177e4SLinus Torvalds #define ACL_LINK 0x01 138*1da177e4SLinus Torvalds 139*1da177e4SLinus Torvalds /* LMP features */ 140*1da177e4SLinus Torvalds #define LMP_3SLOT 0x01 141*1da177e4SLinus Torvalds #define LMP_5SLOT 0x02 142*1da177e4SLinus Torvalds #define LMP_ENCRYPT 0x04 143*1da177e4SLinus Torvalds #define LMP_SOFFSET 0x08 144*1da177e4SLinus Torvalds #define LMP_TACCURACY 0x10 145*1da177e4SLinus Torvalds #define LMP_RSWITCH 0x20 146*1da177e4SLinus Torvalds #define LMP_HOLD 0x40 147*1da177e4SLinus Torvalds #define LMP_SNIF 0x80 148*1da177e4SLinus Torvalds 149*1da177e4SLinus Torvalds #define LMP_PARK 0x01 150*1da177e4SLinus Torvalds #define LMP_RSSI 0x02 151*1da177e4SLinus Torvalds #define LMP_QUALITY 0x04 152*1da177e4SLinus Torvalds #define LMP_SCO 0x08 153*1da177e4SLinus Torvalds #define LMP_HV2 0x10 154*1da177e4SLinus Torvalds #define LMP_HV3 0x20 155*1da177e4SLinus Torvalds #define LMP_ULAW 0x40 156*1da177e4SLinus Torvalds #define LMP_ALAW 0x80 157*1da177e4SLinus Torvalds 158*1da177e4SLinus Torvalds #define LMP_CVSD 0x01 159*1da177e4SLinus Torvalds #define LMP_PSCHEME 0x02 160*1da177e4SLinus Torvalds #define LMP_PCONTROL 0x04 161*1da177e4SLinus Torvalds 162*1da177e4SLinus Torvalds /* Link policies */ 163*1da177e4SLinus Torvalds #define HCI_LP_RSWITCH 0x0001 164*1da177e4SLinus Torvalds #define HCI_LP_HOLD 0x0002 165*1da177e4SLinus Torvalds #define HCI_LP_SNIFF 0x0004 166*1da177e4SLinus Torvalds #define HCI_LP_PARK 0x0008 167*1da177e4SLinus Torvalds 168*1da177e4SLinus Torvalds /* Link mode */ 169*1da177e4SLinus Torvalds #define HCI_LM_ACCEPT 0x8000 170*1da177e4SLinus Torvalds #define HCI_LM_MASTER 0x0001 171*1da177e4SLinus Torvalds #define HCI_LM_AUTH 0x0002 172*1da177e4SLinus Torvalds #define HCI_LM_ENCRYPT 0x0004 173*1da177e4SLinus Torvalds #define HCI_LM_TRUSTED 0x0008 174*1da177e4SLinus Torvalds #define HCI_LM_RELIABLE 0x0010 175*1da177e4SLinus Torvalds #define HCI_LM_SECURE 0x0020 176*1da177e4SLinus Torvalds 177*1da177e4SLinus Torvalds /* ----- HCI Commands ---- */ 178*1da177e4SLinus Torvalds /* OGF & OCF values */ 179*1da177e4SLinus Torvalds 180*1da177e4SLinus Torvalds /* Informational Parameters */ 181*1da177e4SLinus Torvalds #define OGF_INFO_PARAM 0x04 182*1da177e4SLinus Torvalds 183*1da177e4SLinus Torvalds #define OCF_READ_LOCAL_VERSION 0x0001 184*1da177e4SLinus Torvalds struct hci_rp_read_loc_version { 185*1da177e4SLinus Torvalds __u8 status; 186*1da177e4SLinus Torvalds __u8 hci_ver; 187*1da177e4SLinus Torvalds __u16 hci_rev; 188*1da177e4SLinus Torvalds __u8 lmp_ver; 189*1da177e4SLinus Torvalds __u16 manufacturer; 190*1da177e4SLinus Torvalds __u16 lmp_subver; 191*1da177e4SLinus Torvalds } __attribute__ ((packed)); 192*1da177e4SLinus Torvalds 193*1da177e4SLinus Torvalds #define OCF_READ_LOCAL_FEATURES 0x0003 194*1da177e4SLinus Torvalds struct hci_rp_read_loc_features { 195*1da177e4SLinus Torvalds __u8 status; 196*1da177e4SLinus Torvalds __u8 features[8]; 197*1da177e4SLinus Torvalds } __attribute__ ((packed)); 198*1da177e4SLinus Torvalds 199*1da177e4SLinus Torvalds #define OCF_READ_BUFFER_SIZE 0x0005 200*1da177e4SLinus Torvalds struct hci_rp_read_buffer_size { 201*1da177e4SLinus Torvalds __u8 status; 202*1da177e4SLinus Torvalds __u16 acl_mtu; 203*1da177e4SLinus Torvalds __u8 sco_mtu; 204*1da177e4SLinus Torvalds __u16 acl_max_pkt; 205*1da177e4SLinus Torvalds __u16 sco_max_pkt; 206*1da177e4SLinus Torvalds } __attribute__ ((packed)); 207*1da177e4SLinus Torvalds 208*1da177e4SLinus Torvalds #define OCF_READ_BD_ADDR 0x0009 209*1da177e4SLinus Torvalds struct hci_rp_read_bd_addr { 210*1da177e4SLinus Torvalds __u8 status; 211*1da177e4SLinus Torvalds bdaddr_t bdaddr; 212*1da177e4SLinus Torvalds } __attribute__ ((packed)); 213*1da177e4SLinus Torvalds 214*1da177e4SLinus Torvalds /* Host Controller and Baseband */ 215*1da177e4SLinus Torvalds #define OGF_HOST_CTL 0x03 216*1da177e4SLinus Torvalds #define OCF_RESET 0x0003 217*1da177e4SLinus Torvalds #define OCF_READ_AUTH_ENABLE 0x001F 218*1da177e4SLinus Torvalds #define OCF_WRITE_AUTH_ENABLE 0x0020 219*1da177e4SLinus Torvalds #define AUTH_DISABLED 0x00 220*1da177e4SLinus Torvalds #define AUTH_ENABLED 0x01 221*1da177e4SLinus Torvalds 222*1da177e4SLinus Torvalds #define OCF_READ_ENCRYPT_MODE 0x0021 223*1da177e4SLinus Torvalds #define OCF_WRITE_ENCRYPT_MODE 0x0022 224*1da177e4SLinus Torvalds #define ENCRYPT_DISABLED 0x00 225*1da177e4SLinus Torvalds #define ENCRYPT_P2P 0x01 226*1da177e4SLinus Torvalds #define ENCRYPT_BOTH 0x02 227*1da177e4SLinus Torvalds 228*1da177e4SLinus Torvalds #define OCF_WRITE_CA_TIMEOUT 0x0016 229*1da177e4SLinus Torvalds #define OCF_WRITE_PG_TIMEOUT 0x0018 230*1da177e4SLinus Torvalds 231*1da177e4SLinus Torvalds #define OCF_WRITE_SCAN_ENABLE 0x001A 232*1da177e4SLinus Torvalds #define SCAN_DISABLED 0x00 233*1da177e4SLinus Torvalds #define SCAN_INQUIRY 0x01 234*1da177e4SLinus Torvalds #define SCAN_PAGE 0x02 235*1da177e4SLinus Torvalds 236*1da177e4SLinus Torvalds #define OCF_SET_EVENT_FLT 0x0005 237*1da177e4SLinus Torvalds struct hci_cp_set_event_flt { 238*1da177e4SLinus Torvalds __u8 flt_type; 239*1da177e4SLinus Torvalds __u8 cond_type; 240*1da177e4SLinus Torvalds __u8 condition[0]; 241*1da177e4SLinus Torvalds } __attribute__ ((packed)); 242*1da177e4SLinus Torvalds 243*1da177e4SLinus Torvalds /* Filter types */ 244*1da177e4SLinus Torvalds #define HCI_FLT_CLEAR_ALL 0x00 245*1da177e4SLinus Torvalds #define HCI_FLT_INQ_RESULT 0x01 246*1da177e4SLinus Torvalds #define HCI_FLT_CONN_SETUP 0x02 247*1da177e4SLinus Torvalds 248*1da177e4SLinus Torvalds /* CONN_SETUP Condition types */ 249*1da177e4SLinus Torvalds #define HCI_CONN_SETUP_ALLOW_ALL 0x00 250*1da177e4SLinus Torvalds #define HCI_CONN_SETUP_ALLOW_CLASS 0x01 251*1da177e4SLinus Torvalds #define HCI_CONN_SETUP_ALLOW_BDADDR 0x02 252*1da177e4SLinus Torvalds 253*1da177e4SLinus Torvalds /* CONN_SETUP Conditions */ 254*1da177e4SLinus Torvalds #define HCI_CONN_SETUP_AUTO_OFF 0x01 255*1da177e4SLinus Torvalds #define HCI_CONN_SETUP_AUTO_ON 0x02 256*1da177e4SLinus Torvalds 257*1da177e4SLinus Torvalds #define OCF_READ_CLASS_OF_DEV 0x0023 258*1da177e4SLinus Torvalds struct hci_rp_read_dev_class { 259*1da177e4SLinus Torvalds __u8 status; 260*1da177e4SLinus Torvalds __u8 dev_class[3]; 261*1da177e4SLinus Torvalds } __attribute__ ((packed)); 262*1da177e4SLinus Torvalds 263*1da177e4SLinus Torvalds #define OCF_WRITE_CLASS_OF_DEV 0x0024 264*1da177e4SLinus Torvalds struct hci_cp_write_dev_class { 265*1da177e4SLinus Torvalds __u8 dev_class[3]; 266*1da177e4SLinus Torvalds } __attribute__ ((packed)); 267*1da177e4SLinus Torvalds 268*1da177e4SLinus Torvalds #define OCF_READ_VOICE_SETTING 0x0025 269*1da177e4SLinus Torvalds struct hci_rp_read_voice_setting { 270*1da177e4SLinus Torvalds __u8 status; 271*1da177e4SLinus Torvalds __u16 voice_setting; 272*1da177e4SLinus Torvalds } __attribute__ ((packed)); 273*1da177e4SLinus Torvalds 274*1da177e4SLinus Torvalds #define OCF_WRITE_VOICE_SETTING 0x0026 275*1da177e4SLinus Torvalds struct hci_cp_write_voice_setting { 276*1da177e4SLinus Torvalds __u16 voice_setting; 277*1da177e4SLinus Torvalds } __attribute__ ((packed)); 278*1da177e4SLinus Torvalds 279*1da177e4SLinus Torvalds #define OCF_HOST_BUFFER_SIZE 0x0033 280*1da177e4SLinus Torvalds struct hci_cp_host_buffer_size { 281*1da177e4SLinus Torvalds __u16 acl_mtu; 282*1da177e4SLinus Torvalds __u8 sco_mtu; 283*1da177e4SLinus Torvalds __u16 acl_max_pkt; 284*1da177e4SLinus Torvalds __u16 sco_max_pkt; 285*1da177e4SLinus Torvalds } __attribute__ ((packed)); 286*1da177e4SLinus Torvalds 287*1da177e4SLinus Torvalds /* Link Control */ 288*1da177e4SLinus Torvalds #define OGF_LINK_CTL 0x01 289*1da177e4SLinus Torvalds #define OCF_CREATE_CONN 0x0005 290*1da177e4SLinus Torvalds struct hci_cp_create_conn { 291*1da177e4SLinus Torvalds bdaddr_t bdaddr; 292*1da177e4SLinus Torvalds __u16 pkt_type; 293*1da177e4SLinus Torvalds __u8 pscan_rep_mode; 294*1da177e4SLinus Torvalds __u8 pscan_mode; 295*1da177e4SLinus Torvalds __u16 clock_offset; 296*1da177e4SLinus Torvalds __u8 role_switch; 297*1da177e4SLinus Torvalds } __attribute__ ((packed)); 298*1da177e4SLinus Torvalds 299*1da177e4SLinus Torvalds #define OCF_ACCEPT_CONN_REQ 0x0009 300*1da177e4SLinus Torvalds struct hci_cp_accept_conn_req { 301*1da177e4SLinus Torvalds bdaddr_t bdaddr; 302*1da177e4SLinus Torvalds __u8 role; 303*1da177e4SLinus Torvalds } __attribute__ ((packed)); 304*1da177e4SLinus Torvalds 305*1da177e4SLinus Torvalds #define OCF_REJECT_CONN_REQ 0x000a 306*1da177e4SLinus Torvalds struct hci_cp_reject_conn_req { 307*1da177e4SLinus Torvalds bdaddr_t bdaddr; 308*1da177e4SLinus Torvalds __u8 reason; 309*1da177e4SLinus Torvalds } __attribute__ ((packed)); 310*1da177e4SLinus Torvalds 311*1da177e4SLinus Torvalds #define OCF_DISCONNECT 0x0006 312*1da177e4SLinus Torvalds struct hci_cp_disconnect { 313*1da177e4SLinus Torvalds __u16 handle; 314*1da177e4SLinus Torvalds __u8 reason; 315*1da177e4SLinus Torvalds } __attribute__ ((packed)); 316*1da177e4SLinus Torvalds 317*1da177e4SLinus Torvalds #define OCF_ADD_SCO 0x0007 318*1da177e4SLinus Torvalds struct hci_cp_add_sco { 319*1da177e4SLinus Torvalds __u16 handle; 320*1da177e4SLinus Torvalds __u16 pkt_type; 321*1da177e4SLinus Torvalds } __attribute__ ((packed)); 322*1da177e4SLinus Torvalds 323*1da177e4SLinus Torvalds #define OCF_INQUIRY 0x0001 324*1da177e4SLinus Torvalds struct hci_cp_inquiry { 325*1da177e4SLinus Torvalds __u8 lap[3]; 326*1da177e4SLinus Torvalds __u8 length; 327*1da177e4SLinus Torvalds __u8 num_rsp; 328*1da177e4SLinus Torvalds } __attribute__ ((packed)); 329*1da177e4SLinus Torvalds 330*1da177e4SLinus Torvalds #define OCF_INQUIRY_CANCEL 0x0002 331*1da177e4SLinus Torvalds 332*1da177e4SLinus Torvalds #define OCF_LINK_KEY_REPLY 0x000B 333*1da177e4SLinus Torvalds struct hci_cp_link_key_reply { 334*1da177e4SLinus Torvalds bdaddr_t bdaddr; 335*1da177e4SLinus Torvalds __u8 link_key[16]; 336*1da177e4SLinus Torvalds } __attribute__ ((packed)); 337*1da177e4SLinus Torvalds 338*1da177e4SLinus Torvalds #define OCF_LINK_KEY_NEG_REPLY 0x000C 339*1da177e4SLinus Torvalds struct hci_cp_link_key_neg_reply { 340*1da177e4SLinus Torvalds bdaddr_t bdaddr; 341*1da177e4SLinus Torvalds } __attribute__ ((packed)); 342*1da177e4SLinus Torvalds 343*1da177e4SLinus Torvalds #define OCF_PIN_CODE_REPLY 0x000D 344*1da177e4SLinus Torvalds struct hci_cp_pin_code_reply { 345*1da177e4SLinus Torvalds bdaddr_t bdaddr; 346*1da177e4SLinus Torvalds __u8 pin_len; 347*1da177e4SLinus Torvalds __u8 pin_code[16]; 348*1da177e4SLinus Torvalds } __attribute__ ((packed)); 349*1da177e4SLinus Torvalds 350*1da177e4SLinus Torvalds #define OCF_PIN_CODE_NEG_REPLY 0x000E 351*1da177e4SLinus Torvalds struct hci_cp_pin_code_neg_reply { 352*1da177e4SLinus Torvalds bdaddr_t bdaddr; 353*1da177e4SLinus Torvalds } __attribute__ ((packed)); 354*1da177e4SLinus Torvalds 355*1da177e4SLinus Torvalds #define OCF_CHANGE_CONN_PTYPE 0x000F 356*1da177e4SLinus Torvalds struct hci_cp_change_conn_ptype { 357*1da177e4SLinus Torvalds __u16 handle; 358*1da177e4SLinus Torvalds __u16 pkt_type; 359*1da177e4SLinus Torvalds } __attribute__ ((packed)); 360*1da177e4SLinus Torvalds 361*1da177e4SLinus Torvalds #define OCF_AUTH_REQUESTED 0x0011 362*1da177e4SLinus Torvalds struct hci_cp_auth_requested { 363*1da177e4SLinus Torvalds __u16 handle; 364*1da177e4SLinus Torvalds } __attribute__ ((packed)); 365*1da177e4SLinus Torvalds 366*1da177e4SLinus Torvalds #define OCF_SET_CONN_ENCRYPT 0x0013 367*1da177e4SLinus Torvalds struct hci_cp_set_conn_encrypt { 368*1da177e4SLinus Torvalds __u16 handle; 369*1da177e4SLinus Torvalds __u8 encrypt; 370*1da177e4SLinus Torvalds } __attribute__ ((packed)); 371*1da177e4SLinus Torvalds 372*1da177e4SLinus Torvalds #define OCF_CHANGE_CONN_LINK_KEY 0x0015 373*1da177e4SLinus Torvalds struct hci_cp_change_conn_link_key { 374*1da177e4SLinus Torvalds __u16 handle; 375*1da177e4SLinus Torvalds } __attribute__ ((packed)); 376*1da177e4SLinus Torvalds 377*1da177e4SLinus Torvalds #define OCF_READ_REMOTE_FEATURES 0x001B 378*1da177e4SLinus Torvalds struct hci_cp_read_rmt_features { 379*1da177e4SLinus Torvalds __u16 handle; 380*1da177e4SLinus Torvalds } __attribute__ ((packed)); 381*1da177e4SLinus Torvalds 382*1da177e4SLinus Torvalds #define OCF_READ_REMOTE_VERSION 0x001D 383*1da177e4SLinus Torvalds struct hci_cp_read_rmt_version { 384*1da177e4SLinus Torvalds __u16 handle; 385*1da177e4SLinus Torvalds } __attribute__ ((packed)); 386*1da177e4SLinus Torvalds 387*1da177e4SLinus Torvalds /* Link Policy */ 388*1da177e4SLinus Torvalds #define OGF_LINK_POLICY 0x02 389*1da177e4SLinus Torvalds #define OCF_ROLE_DISCOVERY 0x0009 390*1da177e4SLinus Torvalds struct hci_cp_role_discovery { 391*1da177e4SLinus Torvalds __u16 handle; 392*1da177e4SLinus Torvalds } __attribute__ ((packed)); 393*1da177e4SLinus Torvalds struct hci_rp_role_discovery { 394*1da177e4SLinus Torvalds __u8 status; 395*1da177e4SLinus Torvalds __u16 handle; 396*1da177e4SLinus Torvalds __u8 role; 397*1da177e4SLinus Torvalds } __attribute__ ((packed)); 398*1da177e4SLinus Torvalds 399*1da177e4SLinus Torvalds #define OCF_READ_LINK_POLICY 0x000C 400*1da177e4SLinus Torvalds struct hci_cp_read_link_policy { 401*1da177e4SLinus Torvalds __u16 handle; 402*1da177e4SLinus Torvalds } __attribute__ ((packed)); 403*1da177e4SLinus Torvalds struct hci_rp_read_link_policy { 404*1da177e4SLinus Torvalds __u8 status; 405*1da177e4SLinus Torvalds __u16 handle; 406*1da177e4SLinus Torvalds __u16 policy; 407*1da177e4SLinus Torvalds } __attribute__ ((packed)); 408*1da177e4SLinus Torvalds 409*1da177e4SLinus Torvalds #define OCF_SWITCH_ROLE 0x000B 410*1da177e4SLinus Torvalds struct hci_cp_switch_role { 411*1da177e4SLinus Torvalds bdaddr_t bdaddr; 412*1da177e4SLinus Torvalds __u8 role; 413*1da177e4SLinus Torvalds } __attribute__ ((packed)); 414*1da177e4SLinus Torvalds 415*1da177e4SLinus Torvalds #define OCF_WRITE_LINK_POLICY 0x000D 416*1da177e4SLinus Torvalds struct hci_cp_write_link_policy { 417*1da177e4SLinus Torvalds __u16 handle; 418*1da177e4SLinus Torvalds __u16 policy; 419*1da177e4SLinus Torvalds } __attribute__ ((packed)); 420*1da177e4SLinus Torvalds struct hci_rp_write_link_policy { 421*1da177e4SLinus Torvalds __u8 status; 422*1da177e4SLinus Torvalds __u16 handle; 423*1da177e4SLinus Torvalds } __attribute__ ((packed)); 424*1da177e4SLinus Torvalds 425*1da177e4SLinus Torvalds /* Status params */ 426*1da177e4SLinus Torvalds #define OGF_STATUS_PARAM 0x05 427*1da177e4SLinus Torvalds 428*1da177e4SLinus Torvalds /* Testing commands */ 429*1da177e4SLinus Torvalds #define OGF_TESTING_CMD 0x3E 430*1da177e4SLinus Torvalds 431*1da177e4SLinus Torvalds /* Vendor specific commands */ 432*1da177e4SLinus Torvalds #define OGF_VENDOR_CMD 0x3F 433*1da177e4SLinus Torvalds 434*1da177e4SLinus Torvalds /* ---- HCI Events ---- */ 435*1da177e4SLinus Torvalds #define HCI_EV_INQUIRY_COMPLETE 0x01 436*1da177e4SLinus Torvalds 437*1da177e4SLinus Torvalds #define HCI_EV_INQUIRY_RESULT 0x02 438*1da177e4SLinus Torvalds struct inquiry_info { 439*1da177e4SLinus Torvalds bdaddr_t bdaddr; 440*1da177e4SLinus Torvalds __u8 pscan_rep_mode; 441*1da177e4SLinus Torvalds __u8 pscan_period_mode; 442*1da177e4SLinus Torvalds __u8 pscan_mode; 443*1da177e4SLinus Torvalds __u8 dev_class[3]; 444*1da177e4SLinus Torvalds __u16 clock_offset; 445*1da177e4SLinus Torvalds } __attribute__ ((packed)); 446*1da177e4SLinus Torvalds 447*1da177e4SLinus Torvalds #define HCI_EV_INQUIRY_RESULT_WITH_RSSI 0x22 448*1da177e4SLinus Torvalds struct inquiry_info_with_rssi { 449*1da177e4SLinus Torvalds bdaddr_t bdaddr; 450*1da177e4SLinus Torvalds __u8 pscan_rep_mode; 451*1da177e4SLinus Torvalds __u8 pscan_period_mode; 452*1da177e4SLinus Torvalds __u8 dev_class[3]; 453*1da177e4SLinus Torvalds __u16 clock_offset; 454*1da177e4SLinus Torvalds __s8 rssi; 455*1da177e4SLinus Torvalds } __attribute__ ((packed)); 456*1da177e4SLinus Torvalds 457*1da177e4SLinus Torvalds #define HCI_EV_CONN_COMPLETE 0x03 458*1da177e4SLinus Torvalds struct hci_ev_conn_complete { 459*1da177e4SLinus Torvalds __u8 status; 460*1da177e4SLinus Torvalds __u16 handle; 461*1da177e4SLinus Torvalds bdaddr_t bdaddr; 462*1da177e4SLinus Torvalds __u8 link_type; 463*1da177e4SLinus Torvalds __u8 encr_mode; 464*1da177e4SLinus Torvalds } __attribute__ ((packed)); 465*1da177e4SLinus Torvalds 466*1da177e4SLinus Torvalds #define HCI_EV_CONN_REQUEST 0x04 467*1da177e4SLinus Torvalds struct hci_ev_conn_request { 468*1da177e4SLinus Torvalds bdaddr_t bdaddr; 469*1da177e4SLinus Torvalds __u8 dev_class[3]; 470*1da177e4SLinus Torvalds __u8 link_type; 471*1da177e4SLinus Torvalds } __attribute__ ((packed)); 472*1da177e4SLinus Torvalds 473*1da177e4SLinus Torvalds #define HCI_EV_DISCONN_COMPLETE 0x05 474*1da177e4SLinus Torvalds struct hci_ev_disconn_complete { 475*1da177e4SLinus Torvalds __u8 status; 476*1da177e4SLinus Torvalds __u16 handle; 477*1da177e4SLinus Torvalds __u8 reason; 478*1da177e4SLinus Torvalds } __attribute__ ((packed)); 479*1da177e4SLinus Torvalds 480*1da177e4SLinus Torvalds #define HCI_EV_AUTH_COMPLETE 0x06 481*1da177e4SLinus Torvalds struct hci_ev_auth_complete { 482*1da177e4SLinus Torvalds __u8 status; 483*1da177e4SLinus Torvalds __u16 handle; 484*1da177e4SLinus Torvalds } __attribute__ ((packed)); 485*1da177e4SLinus Torvalds 486*1da177e4SLinus Torvalds #define HCI_EV_ENCRYPT_CHANGE 0x08 487*1da177e4SLinus Torvalds struct hci_ev_encrypt_change { 488*1da177e4SLinus Torvalds __u8 status; 489*1da177e4SLinus Torvalds __u16 handle; 490*1da177e4SLinus Torvalds __u8 encrypt; 491*1da177e4SLinus Torvalds } __attribute__ ((packed)); 492*1da177e4SLinus Torvalds 493*1da177e4SLinus Torvalds #define HCI_EV_CHANGE_CONN_LINK_KEY_COMPLETE 0x09 494*1da177e4SLinus Torvalds struct hci_ev_change_conn_link_key_complete { 495*1da177e4SLinus Torvalds __u8 status; 496*1da177e4SLinus Torvalds __u16 handle; 497*1da177e4SLinus Torvalds } __attribute__ ((packed)); 498*1da177e4SLinus Torvalds 499*1da177e4SLinus Torvalds #define HCI_EV_QOS_SETUP_COMPLETE 0x0D 500*1da177e4SLinus Torvalds struct hci_qos { 501*1da177e4SLinus Torvalds __u8 service_type; 502*1da177e4SLinus Torvalds __u32 token_rate; 503*1da177e4SLinus Torvalds __u32 peak_bandwidth; 504*1da177e4SLinus Torvalds __u32 latency; 505*1da177e4SLinus Torvalds __u32 delay_variation; 506*1da177e4SLinus Torvalds } __attribute__ ((packed)); 507*1da177e4SLinus Torvalds struct hci_ev_qos_setup_complete { 508*1da177e4SLinus Torvalds __u8 status; 509*1da177e4SLinus Torvalds __u16 handle; 510*1da177e4SLinus Torvalds struct hci_qos qos; 511*1da177e4SLinus Torvalds } __attribute__ ((packed)); 512*1da177e4SLinus Torvalds 513*1da177e4SLinus Torvalds #define HCI_EV_CMD_COMPLETE 0x0E 514*1da177e4SLinus Torvalds struct hci_ev_cmd_complete { 515*1da177e4SLinus Torvalds __u8 ncmd; 516*1da177e4SLinus Torvalds __u16 opcode; 517*1da177e4SLinus Torvalds } __attribute__ ((packed)); 518*1da177e4SLinus Torvalds 519*1da177e4SLinus Torvalds #define HCI_EV_CMD_STATUS 0x0F 520*1da177e4SLinus Torvalds struct hci_ev_cmd_status { 521*1da177e4SLinus Torvalds __u8 status; 522*1da177e4SLinus Torvalds __u8 ncmd; 523*1da177e4SLinus Torvalds __u16 opcode; 524*1da177e4SLinus Torvalds } __attribute__ ((packed)); 525*1da177e4SLinus Torvalds 526*1da177e4SLinus Torvalds #define HCI_EV_NUM_COMP_PKTS 0x13 527*1da177e4SLinus Torvalds struct hci_ev_num_comp_pkts { 528*1da177e4SLinus Torvalds __u8 num_hndl; 529*1da177e4SLinus Torvalds /* variable length part */ 530*1da177e4SLinus Torvalds } __attribute__ ((packed)); 531*1da177e4SLinus Torvalds 532*1da177e4SLinus Torvalds #define HCI_EV_ROLE_CHANGE 0x12 533*1da177e4SLinus Torvalds struct hci_ev_role_change { 534*1da177e4SLinus Torvalds __u8 status; 535*1da177e4SLinus Torvalds bdaddr_t bdaddr; 536*1da177e4SLinus Torvalds __u8 role; 537*1da177e4SLinus Torvalds } __attribute__ ((packed)); 538*1da177e4SLinus Torvalds 539*1da177e4SLinus Torvalds #define HCI_EV_MODE_CHANGE 0x14 540*1da177e4SLinus Torvalds struct hci_ev_mode_change { 541*1da177e4SLinus Torvalds __u8 status; 542*1da177e4SLinus Torvalds __u16 handle; 543*1da177e4SLinus Torvalds __u8 mode; 544*1da177e4SLinus Torvalds __u16 interval; 545*1da177e4SLinus Torvalds } __attribute__ ((packed)); 546*1da177e4SLinus Torvalds 547*1da177e4SLinus Torvalds #define HCI_EV_PIN_CODE_REQ 0x16 548*1da177e4SLinus Torvalds struct hci_ev_pin_code_req { 549*1da177e4SLinus Torvalds bdaddr_t bdaddr; 550*1da177e4SLinus Torvalds } __attribute__ ((packed)); 551*1da177e4SLinus Torvalds 552*1da177e4SLinus Torvalds #define HCI_EV_LINK_KEY_REQ 0x17 553*1da177e4SLinus Torvalds struct hci_ev_link_key_req { 554*1da177e4SLinus Torvalds bdaddr_t bdaddr; 555*1da177e4SLinus Torvalds } __attribute__ ((packed)); 556*1da177e4SLinus Torvalds 557*1da177e4SLinus Torvalds #define HCI_EV_LINK_KEY_NOTIFY 0x18 558*1da177e4SLinus Torvalds struct hci_ev_link_key_notify { 559*1da177e4SLinus Torvalds bdaddr_t bdaddr; 560*1da177e4SLinus Torvalds __u8 link_key[16]; 561*1da177e4SLinus Torvalds __u8 key_type; 562*1da177e4SLinus Torvalds } __attribute__ ((packed)); 563*1da177e4SLinus Torvalds 564*1da177e4SLinus Torvalds #define HCI_EV_RMT_FEATURES 0x0B 565*1da177e4SLinus Torvalds struct hci_ev_rmt_features { 566*1da177e4SLinus Torvalds __u8 status; 567*1da177e4SLinus Torvalds __u16 handle; 568*1da177e4SLinus Torvalds __u8 features[8]; 569*1da177e4SLinus Torvalds } __attribute__ ((packed)); 570*1da177e4SLinus Torvalds 571*1da177e4SLinus Torvalds #define HCI_EV_RMT_VERSION 0x0C 572*1da177e4SLinus Torvalds struct hci_ev_rmt_version { 573*1da177e4SLinus Torvalds __u8 status; 574*1da177e4SLinus Torvalds __u16 handle; 575*1da177e4SLinus Torvalds __u8 lmp_ver; 576*1da177e4SLinus Torvalds __u16 manufacturer; 577*1da177e4SLinus Torvalds __u16 lmp_subver; 578*1da177e4SLinus Torvalds } __attribute__ ((packed)); 579*1da177e4SLinus Torvalds 580*1da177e4SLinus Torvalds #define HCI_EV_CLOCK_OFFSET 0x01C 581*1da177e4SLinus Torvalds struct hci_ev_clock_offset { 582*1da177e4SLinus Torvalds __u8 status; 583*1da177e4SLinus Torvalds __u16 handle; 584*1da177e4SLinus Torvalds __u16 clock_offset; 585*1da177e4SLinus Torvalds } __attribute__ ((packed)); 586*1da177e4SLinus Torvalds 587*1da177e4SLinus Torvalds /* Internal events generated by Bluetooth stack */ 588*1da177e4SLinus Torvalds #define HCI_EV_STACK_INTERNAL 0xFD 589*1da177e4SLinus Torvalds struct hci_ev_stack_internal { 590*1da177e4SLinus Torvalds __u16 type; 591*1da177e4SLinus Torvalds __u8 data[0]; 592*1da177e4SLinus Torvalds } __attribute__ ((packed)); 593*1da177e4SLinus Torvalds 594*1da177e4SLinus Torvalds #define HCI_EV_SI_DEVICE 0x01 595*1da177e4SLinus Torvalds struct hci_ev_si_device { 596*1da177e4SLinus Torvalds __u16 event; 597*1da177e4SLinus Torvalds __u16 dev_id; 598*1da177e4SLinus Torvalds } __attribute__ ((packed)); 599*1da177e4SLinus Torvalds 600*1da177e4SLinus Torvalds #define HCI_EV_SI_SECURITY 0x02 601*1da177e4SLinus Torvalds struct hci_ev_si_security { 602*1da177e4SLinus Torvalds __u16 event; 603*1da177e4SLinus Torvalds __u16 proto; 604*1da177e4SLinus Torvalds __u16 subproto; 605*1da177e4SLinus Torvalds __u8 incoming; 606*1da177e4SLinus Torvalds } __attribute__ ((packed)); 607*1da177e4SLinus Torvalds 608*1da177e4SLinus Torvalds /* ---- HCI Packet structures ---- */ 609*1da177e4SLinus Torvalds #define HCI_COMMAND_HDR_SIZE 3 610*1da177e4SLinus Torvalds #define HCI_EVENT_HDR_SIZE 2 611*1da177e4SLinus Torvalds #define HCI_ACL_HDR_SIZE 4 612*1da177e4SLinus Torvalds #define HCI_SCO_HDR_SIZE 3 613*1da177e4SLinus Torvalds 614*1da177e4SLinus Torvalds struct hci_command_hdr { 615*1da177e4SLinus Torvalds __u16 opcode; /* OCF & OGF */ 616*1da177e4SLinus Torvalds __u8 plen; 617*1da177e4SLinus Torvalds } __attribute__ ((packed)); 618*1da177e4SLinus Torvalds 619*1da177e4SLinus Torvalds struct hci_event_hdr { 620*1da177e4SLinus Torvalds __u8 evt; 621*1da177e4SLinus Torvalds __u8 plen; 622*1da177e4SLinus Torvalds } __attribute__ ((packed)); 623*1da177e4SLinus Torvalds 624*1da177e4SLinus Torvalds struct hci_acl_hdr { 625*1da177e4SLinus Torvalds __u16 handle; /* Handle & Flags(PB, BC) */ 626*1da177e4SLinus Torvalds __u16 dlen; 627*1da177e4SLinus Torvalds } __attribute__ ((packed)); 628*1da177e4SLinus Torvalds 629*1da177e4SLinus Torvalds struct hci_sco_hdr { 630*1da177e4SLinus Torvalds __u16 handle; 631*1da177e4SLinus Torvalds __u8 dlen; 632*1da177e4SLinus Torvalds } __attribute__ ((packed)); 633*1da177e4SLinus Torvalds 634*1da177e4SLinus Torvalds /* Command opcode pack/unpack */ 635*1da177e4SLinus Torvalds #define hci_opcode_pack(ogf, ocf) (__u16)((ocf & 0x03ff)|(ogf << 10)) 636*1da177e4SLinus Torvalds #define hci_opcode_ogf(op) (op >> 10) 637*1da177e4SLinus Torvalds #define hci_opcode_ocf(op) (op & 0x03ff) 638*1da177e4SLinus Torvalds 639*1da177e4SLinus Torvalds /* ACL handle and flags pack/unpack */ 640*1da177e4SLinus Torvalds #define hci_handle_pack(h, f) (__u16)((h & 0x0fff)|(f << 12)) 641*1da177e4SLinus Torvalds #define hci_handle(h) (h & 0x0fff) 642*1da177e4SLinus Torvalds #define hci_flags(h) (h >> 12) 643*1da177e4SLinus Torvalds 644*1da177e4SLinus Torvalds /* ---- HCI Sockets ---- */ 645*1da177e4SLinus Torvalds 646*1da177e4SLinus Torvalds /* Socket options */ 647*1da177e4SLinus Torvalds #define HCI_DATA_DIR 1 648*1da177e4SLinus Torvalds #define HCI_FILTER 2 649*1da177e4SLinus Torvalds #define HCI_TIME_STAMP 3 650*1da177e4SLinus Torvalds 651*1da177e4SLinus Torvalds /* CMSG flags */ 652*1da177e4SLinus Torvalds #define HCI_CMSG_DIR 0x0001 653*1da177e4SLinus Torvalds #define HCI_CMSG_TSTAMP 0x0002 654*1da177e4SLinus Torvalds 655*1da177e4SLinus Torvalds struct sockaddr_hci { 656*1da177e4SLinus Torvalds sa_family_t hci_family; 657*1da177e4SLinus Torvalds unsigned short hci_dev; 658*1da177e4SLinus Torvalds }; 659*1da177e4SLinus Torvalds #define HCI_DEV_NONE 0xffff 660*1da177e4SLinus Torvalds 661*1da177e4SLinus Torvalds struct hci_filter { 662*1da177e4SLinus Torvalds unsigned long type_mask; 663*1da177e4SLinus Torvalds unsigned long event_mask[2]; 664*1da177e4SLinus Torvalds __u16 opcode; 665*1da177e4SLinus Torvalds }; 666*1da177e4SLinus Torvalds 667*1da177e4SLinus Torvalds struct hci_ufilter { 668*1da177e4SLinus Torvalds __u32 type_mask; 669*1da177e4SLinus Torvalds __u32 event_mask[2]; 670*1da177e4SLinus Torvalds __u16 opcode; 671*1da177e4SLinus Torvalds }; 672*1da177e4SLinus Torvalds 673*1da177e4SLinus Torvalds #define HCI_FLT_TYPE_BITS 31 674*1da177e4SLinus Torvalds #define HCI_FLT_EVENT_BITS 63 675*1da177e4SLinus Torvalds #define HCI_FLT_OGF_BITS 63 676*1da177e4SLinus Torvalds #define HCI_FLT_OCF_BITS 127 677*1da177e4SLinus Torvalds 678*1da177e4SLinus Torvalds /* ---- HCI Ioctl requests structures ---- */ 679*1da177e4SLinus Torvalds struct hci_dev_stats { 680*1da177e4SLinus Torvalds __u32 err_rx; 681*1da177e4SLinus Torvalds __u32 err_tx; 682*1da177e4SLinus Torvalds __u32 cmd_tx; 683*1da177e4SLinus Torvalds __u32 evt_rx; 684*1da177e4SLinus Torvalds __u32 acl_tx; 685*1da177e4SLinus Torvalds __u32 acl_rx; 686*1da177e4SLinus Torvalds __u32 sco_tx; 687*1da177e4SLinus Torvalds __u32 sco_rx; 688*1da177e4SLinus Torvalds __u32 byte_rx; 689*1da177e4SLinus Torvalds __u32 byte_tx; 690*1da177e4SLinus Torvalds }; 691*1da177e4SLinus Torvalds 692*1da177e4SLinus Torvalds struct hci_dev_info { 693*1da177e4SLinus Torvalds __u16 dev_id; 694*1da177e4SLinus Torvalds char name[8]; 695*1da177e4SLinus Torvalds 696*1da177e4SLinus Torvalds bdaddr_t bdaddr; 697*1da177e4SLinus Torvalds 698*1da177e4SLinus Torvalds __u32 flags; 699*1da177e4SLinus Torvalds __u8 type; 700*1da177e4SLinus Torvalds 701*1da177e4SLinus Torvalds __u8 features[8]; 702*1da177e4SLinus Torvalds 703*1da177e4SLinus Torvalds __u32 pkt_type; 704*1da177e4SLinus Torvalds __u32 link_policy; 705*1da177e4SLinus Torvalds __u32 link_mode; 706*1da177e4SLinus Torvalds 707*1da177e4SLinus Torvalds __u16 acl_mtu; 708*1da177e4SLinus Torvalds __u16 acl_pkts; 709*1da177e4SLinus Torvalds __u16 sco_mtu; 710*1da177e4SLinus Torvalds __u16 sco_pkts; 711*1da177e4SLinus Torvalds 712*1da177e4SLinus Torvalds struct hci_dev_stats stat; 713*1da177e4SLinus Torvalds }; 714*1da177e4SLinus Torvalds 715*1da177e4SLinus Torvalds struct hci_conn_info { 716*1da177e4SLinus Torvalds __u16 handle; 717*1da177e4SLinus Torvalds bdaddr_t bdaddr; 718*1da177e4SLinus Torvalds __u8 type; 719*1da177e4SLinus Torvalds __u8 out; 720*1da177e4SLinus Torvalds __u16 state; 721*1da177e4SLinus Torvalds __u32 link_mode; 722*1da177e4SLinus Torvalds }; 723*1da177e4SLinus Torvalds 724*1da177e4SLinus Torvalds struct hci_dev_req { 725*1da177e4SLinus Torvalds __u16 dev_id; 726*1da177e4SLinus Torvalds __u32 dev_opt; 727*1da177e4SLinus Torvalds }; 728*1da177e4SLinus Torvalds 729*1da177e4SLinus Torvalds struct hci_dev_list_req { 730*1da177e4SLinus Torvalds __u16 dev_num; 731*1da177e4SLinus Torvalds struct hci_dev_req dev_req[0]; /* hci_dev_req structures */ 732*1da177e4SLinus Torvalds }; 733*1da177e4SLinus Torvalds 734*1da177e4SLinus Torvalds struct hci_conn_list_req { 735*1da177e4SLinus Torvalds __u16 dev_id; 736*1da177e4SLinus Torvalds __u16 conn_num; 737*1da177e4SLinus Torvalds struct hci_conn_info conn_info[0]; 738*1da177e4SLinus Torvalds }; 739*1da177e4SLinus Torvalds 740*1da177e4SLinus Torvalds struct hci_conn_info_req { 741*1da177e4SLinus Torvalds bdaddr_t bdaddr; 742*1da177e4SLinus Torvalds __u8 type; 743*1da177e4SLinus Torvalds struct hci_conn_info conn_info[0]; 744*1da177e4SLinus Torvalds }; 745*1da177e4SLinus Torvalds 746*1da177e4SLinus Torvalds struct hci_inquiry_req { 747*1da177e4SLinus Torvalds __u16 dev_id; 748*1da177e4SLinus Torvalds __u16 flags; 749*1da177e4SLinus Torvalds __u8 lap[3]; 750*1da177e4SLinus Torvalds __u8 length; 751*1da177e4SLinus Torvalds __u8 num_rsp; 752*1da177e4SLinus Torvalds }; 753*1da177e4SLinus Torvalds #define IREQ_CACHE_FLUSH 0x0001 754*1da177e4SLinus Torvalds 755*1da177e4SLinus Torvalds #endif /* __HCI_H */ 756