xref: /OK3568_Linux_fs/kernel/include/net/bluetooth/hci_sock.h (revision 4882a59341e53eb6f0b4789bf948001014eff981)
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