1*4882a593Smuzhiyun /* 2*4882a593Smuzhiyun BlueZ - Bluetooth protocol stack for Linux 3*4882a593Smuzhiyun Copyright (C) 2000-2001 Qualcomm Incorporated 4*4882a593Smuzhiyun 5*4882a593Smuzhiyun Written 2000,2001 by Maxim Krasnyansky <maxk@qualcomm.com> 6*4882a593Smuzhiyun 7*4882a593Smuzhiyun This program is free software; you can redistribute it and/or modify 8*4882a593Smuzhiyun it under the terms of the GNU General Public License version 2 as 9*4882a593Smuzhiyun published by the Free Software Foundation; 10*4882a593Smuzhiyun 11*4882a593Smuzhiyun THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS 12*4882a593Smuzhiyun OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 13*4882a593Smuzhiyun FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT OF THIRD PARTY RIGHTS. 14*4882a593Smuzhiyun IN NO EVENT SHALL THE COPYRIGHT HOLDER(S) AND AUTHOR(S) BE LIABLE FOR ANY 15*4882a593Smuzhiyun CLAIM, OR ANY SPECIAL INDIRECT OR CONSEQUENTIAL DAMAGES, OR ANY DAMAGES 16*4882a593Smuzhiyun WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN 17*4882a593Smuzhiyun ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF 18*4882a593Smuzhiyun OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. 19*4882a593Smuzhiyun 20*4882a593Smuzhiyun ALL LIABILITY, INCLUDING LIABILITY FOR INFRINGEMENT OF ANY PATENTS, 21*4882a593Smuzhiyun COPYRIGHTS, TRADEMARKS OR OTHER RIGHTS, RELATING TO USE OF THIS 22*4882a593Smuzhiyun SOFTWARE IS DISCLAIMED. 23*4882a593Smuzhiyun */ 24*4882a593Smuzhiyun 25*4882a593Smuzhiyun #ifndef __HCI_SOCK_H 26*4882a593Smuzhiyun #define __HCI_SOCK_H 27*4882a593Smuzhiyun 28*4882a593Smuzhiyun /* Socket options */ 29*4882a593Smuzhiyun #define HCI_DATA_DIR 1 30*4882a593Smuzhiyun #define HCI_FILTER 2 31*4882a593Smuzhiyun #define HCI_TIME_STAMP 3 32*4882a593Smuzhiyun 33*4882a593Smuzhiyun /* CMSG flags */ 34*4882a593Smuzhiyun #define HCI_CMSG_DIR 0x01 35*4882a593Smuzhiyun #define HCI_CMSG_TSTAMP 0x02 36*4882a593Smuzhiyun 37*4882a593Smuzhiyun struct sockaddr_hci { 38*4882a593Smuzhiyun sa_family_t hci_family; 39*4882a593Smuzhiyun unsigned short hci_dev; 40*4882a593Smuzhiyun unsigned short hci_channel; 41*4882a593Smuzhiyun }; 42*4882a593Smuzhiyun #define HCI_DEV_NONE 0xffff 43*4882a593Smuzhiyun 44*4882a593Smuzhiyun #define HCI_CHANNEL_RAW 0 45*4882a593Smuzhiyun #define HCI_CHANNEL_USER 1 46*4882a593Smuzhiyun #define HCI_CHANNEL_MONITOR 2 47*4882a593Smuzhiyun #define HCI_CHANNEL_CONTROL 3 48*4882a593Smuzhiyun #define HCI_CHANNEL_LOGGING 4 49*4882a593Smuzhiyun 50*4882a593Smuzhiyun struct hci_filter { 51*4882a593Smuzhiyun unsigned long type_mask; 52*4882a593Smuzhiyun unsigned long event_mask[2]; 53*4882a593Smuzhiyun __le16 opcode; 54*4882a593Smuzhiyun }; 55*4882a593Smuzhiyun 56*4882a593Smuzhiyun struct hci_ufilter { 57*4882a593Smuzhiyun __u32 type_mask; 58*4882a593Smuzhiyun __u32 event_mask[2]; 59*4882a593Smuzhiyun __le16 opcode; 60*4882a593Smuzhiyun }; 61*4882a593Smuzhiyun 62*4882a593Smuzhiyun #define HCI_FLT_TYPE_BITS 31 63*4882a593Smuzhiyun #define HCI_FLT_EVENT_BITS 63 64*4882a593Smuzhiyun #define HCI_FLT_OGF_BITS 63 65*4882a593Smuzhiyun #define HCI_FLT_OCF_BITS 127 66*4882a593Smuzhiyun 67*4882a593Smuzhiyun /* Ioctl defines */ 68*4882a593Smuzhiyun #define HCIDEVUP _IOW('H', 201, int) 69*4882a593Smuzhiyun #define HCIDEVDOWN _IOW('H', 202, int) 70*4882a593Smuzhiyun #define HCIDEVRESET _IOW('H', 203, int) 71*4882a593Smuzhiyun #define HCIDEVRESTAT _IOW('H', 204, int) 72*4882a593Smuzhiyun 73*4882a593Smuzhiyun #define HCIGETDEVLIST _IOR('H', 210, int) 74*4882a593Smuzhiyun #define HCIGETDEVINFO _IOR('H', 211, int) 75*4882a593Smuzhiyun #define HCIGETCONNLIST _IOR('H', 212, int) 76*4882a593Smuzhiyun #define HCIGETCONNINFO _IOR('H', 213, int) 77*4882a593Smuzhiyun #define HCIGETAUTHINFO _IOR('H', 215, int) 78*4882a593Smuzhiyun 79*4882a593Smuzhiyun #define HCISETRAW _IOW('H', 220, int) 80*4882a593Smuzhiyun #define HCISETSCAN _IOW('H', 221, int) 81*4882a593Smuzhiyun #define HCISETAUTH _IOW('H', 222, int) 82*4882a593Smuzhiyun #define HCISETENCRYPT _IOW('H', 223, int) 83*4882a593Smuzhiyun #define HCISETPTYPE _IOW('H', 224, int) 84*4882a593Smuzhiyun #define HCISETLINKPOL _IOW('H', 225, int) 85*4882a593Smuzhiyun #define HCISETLINKMODE _IOW('H', 226, int) 86*4882a593Smuzhiyun #define HCISETACLMTU _IOW('H', 227, int) 87*4882a593Smuzhiyun #define HCISETSCOMTU _IOW('H', 228, int) 88*4882a593Smuzhiyun 89*4882a593Smuzhiyun #define HCIBLOCKADDR _IOW('H', 230, int) 90*4882a593Smuzhiyun #define HCIUNBLOCKADDR _IOW('H', 231, int) 91*4882a593Smuzhiyun 92*4882a593Smuzhiyun #define HCIINQUIRY _IOR('H', 240, int) 93*4882a593Smuzhiyun 94*4882a593Smuzhiyun /* Ioctl requests structures */ 95*4882a593Smuzhiyun struct hci_dev_stats { 96*4882a593Smuzhiyun __u32 err_rx; 97*4882a593Smuzhiyun __u32 err_tx; 98*4882a593Smuzhiyun __u32 cmd_tx; 99*4882a593Smuzhiyun __u32 evt_rx; 100*4882a593Smuzhiyun __u32 acl_tx; 101*4882a593Smuzhiyun __u32 acl_rx; 102*4882a593Smuzhiyun __u32 sco_tx; 103*4882a593Smuzhiyun __u32 sco_rx; 104*4882a593Smuzhiyun __u32 byte_rx; 105*4882a593Smuzhiyun __u32 byte_tx; 106*4882a593Smuzhiyun }; 107*4882a593Smuzhiyun 108*4882a593Smuzhiyun struct hci_dev_info { 109*4882a593Smuzhiyun __u16 dev_id; 110*4882a593Smuzhiyun char name[8]; 111*4882a593Smuzhiyun 112*4882a593Smuzhiyun bdaddr_t bdaddr; 113*4882a593Smuzhiyun 114*4882a593Smuzhiyun __u32 flags; 115*4882a593Smuzhiyun __u8 type; 116*4882a593Smuzhiyun 117*4882a593Smuzhiyun __u8 features[8]; 118*4882a593Smuzhiyun 119*4882a593Smuzhiyun __u32 pkt_type; 120*4882a593Smuzhiyun __u32 link_policy; 121*4882a593Smuzhiyun __u32 link_mode; 122*4882a593Smuzhiyun 123*4882a593Smuzhiyun __u16 acl_mtu; 124*4882a593Smuzhiyun __u16 acl_pkts; 125*4882a593Smuzhiyun __u16 sco_mtu; 126*4882a593Smuzhiyun __u16 sco_pkts; 127*4882a593Smuzhiyun 128*4882a593Smuzhiyun struct hci_dev_stats stat; 129*4882a593Smuzhiyun }; 130*4882a593Smuzhiyun 131*4882a593Smuzhiyun struct hci_conn_info { 132*4882a593Smuzhiyun __u16 handle; 133*4882a593Smuzhiyun bdaddr_t bdaddr; 134*4882a593Smuzhiyun __u8 type; 135*4882a593Smuzhiyun __u8 out; 136*4882a593Smuzhiyun __u16 state; 137*4882a593Smuzhiyun __u32 link_mode; 138*4882a593Smuzhiyun }; 139*4882a593Smuzhiyun 140*4882a593Smuzhiyun struct hci_dev_req { 141*4882a593Smuzhiyun __u16 dev_id; 142*4882a593Smuzhiyun __u32 dev_opt; 143*4882a593Smuzhiyun }; 144*4882a593Smuzhiyun 145*4882a593Smuzhiyun struct hci_dev_list_req { 146*4882a593Smuzhiyun __u16 dev_num; 147*4882a593Smuzhiyun struct hci_dev_req dev_req[]; /* hci_dev_req structures */ 148*4882a593Smuzhiyun }; 149*4882a593Smuzhiyun 150*4882a593Smuzhiyun struct hci_conn_list_req { 151*4882a593Smuzhiyun __u16 dev_id; 152*4882a593Smuzhiyun __u16 conn_num; 153*4882a593Smuzhiyun struct hci_conn_info conn_info[]; 154*4882a593Smuzhiyun }; 155*4882a593Smuzhiyun 156*4882a593Smuzhiyun struct hci_conn_info_req { 157*4882a593Smuzhiyun bdaddr_t bdaddr; 158*4882a593Smuzhiyun __u8 type; 159*4882a593Smuzhiyun struct hci_conn_info conn_info[]; 160*4882a593Smuzhiyun }; 161*4882a593Smuzhiyun 162*4882a593Smuzhiyun struct hci_auth_info_req { 163*4882a593Smuzhiyun bdaddr_t bdaddr; 164*4882a593Smuzhiyun __u8 type; 165*4882a593Smuzhiyun }; 166*4882a593Smuzhiyun 167*4882a593Smuzhiyun struct hci_inquiry_req { 168*4882a593Smuzhiyun __u16 dev_id; 169*4882a593Smuzhiyun __u16 flags; 170*4882a593Smuzhiyun __u8 lap[3]; 171*4882a593Smuzhiyun __u8 length; 172*4882a593Smuzhiyun __u8 num_rsp; 173*4882a593Smuzhiyun }; 174*4882a593Smuzhiyun #define IREQ_CACHE_FLUSH 0x0001 175*4882a593Smuzhiyun 176*4882a593Smuzhiyun #endif /* __HCI_SOCK_H */ 177