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