Linux Kernel
3.7.1
Main Page
Related Pages
Modules
Namespaces
Data Structures
Files
File List
Globals
All
Data Structures
Namespaces
Files
Functions
Variables
Typedefs
Enumerations
Enumerator
Macros
Groups
Pages
include
net
bluetooth
bluetooth.h
Go to the documentation of this file.
1
/*
2
BlueZ - Bluetooth protocol stack for Linux
3
Copyright (C) 2000-2001 Qualcomm Incorporated
4
5
Written 2000,2001 by Maxim Krasnyansky <
[email protected]
>
6
7
This program is free software; you can redistribute it and/or modify
8
it under the terms of the GNU General Public License version 2 as
9
published by the Free Software Foundation;
10
11
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
12
OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
13
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT OF THIRD PARTY RIGHTS.
14
IN NO EVENT SHALL THE COPYRIGHT HOLDER(S) AND AUTHOR(S) BE LIABLE FOR ANY
15
CLAIM, OR ANY SPECIAL INDIRECT OR CONSEQUENTIAL DAMAGES, OR ANY DAMAGES
16
WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
17
ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
18
OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
19
20
ALL LIABILITY, INCLUDING LIABILITY FOR INFRINGEMENT OF ANY PATENTS,
21
COPYRIGHTS, TRADEMARKS OR OTHER RIGHTS, RELATING TO USE OF THIS
22
SOFTWARE IS DISCLAIMED.
23
*/
24
25
#ifndef __BLUETOOTH_H
26
#define __BLUETOOTH_H
27
28
#include <linux/poll.h>
29
#include <
net/sock.h
>
30
#include <
linux/seq_file.h
>
31
32
#ifndef AF_BLUETOOTH
33
#define AF_BLUETOOTH 31
34
#define PF_BLUETOOTH AF_BLUETOOTH
35
#endif
36
37
/* Bluetooth versions */
38
#define BLUETOOTH_VER_1_1 1
39
#define BLUETOOTH_VER_1_2 2
40
#define BLUETOOTH_VER_2_0 3
41
42
/* Reserv for core and drivers use */
43
#define BT_SKB_RESERVE 8
44
45
#define BTPROTO_L2CAP 0
46
#define BTPROTO_HCI 1
47
#define BTPROTO_SCO 2
48
#define BTPROTO_RFCOMM 3
49
#define BTPROTO_BNEP 4
50
#define BTPROTO_CMTP 5
51
#define BTPROTO_HIDP 6
52
#define BTPROTO_AVDTP 7
53
54
#define SOL_HCI 0
55
#define SOL_L2CAP 6
56
#define SOL_SCO 17
57
#define SOL_RFCOMM 18
58
59
#define BT_SECURITY 4
60
struct
bt_security
{
61
__u8
level
;
62
__u8
key_size
;
63
};
64
#define BT_SECURITY_SDP 0
65
#define BT_SECURITY_LOW 1
66
#define BT_SECURITY_MEDIUM 2
67
#define BT_SECURITY_HIGH 3
68
69
#define BT_DEFER_SETUP 7
70
71
#define BT_FLUSHABLE 8
72
73
#define BT_FLUSHABLE_OFF 0
74
#define BT_FLUSHABLE_ON 1
75
76
#define BT_POWER 9
77
struct
bt_power
{
78
__u8
force_active
;
79
};
80
#define BT_POWER_FORCE_ACTIVE_OFF 0
81
#define BT_POWER_FORCE_ACTIVE_ON 1
82
83
#define BT_CHANNEL_POLICY 10
84
85
/* BR/EDR only (default policy)
86
* AMP controllers cannot be used.
87
* Channel move requests from the remote device are denied.
88
* If the L2CAP channel is currently using AMP, move the channel to BR/EDR.
89
*/
90
#define BT_CHANNEL_POLICY_BREDR_ONLY 0
91
92
/* BR/EDR Preferred
93
* Allow use of AMP controllers.
94
* If the L2CAP channel is currently on AMP, move it to BR/EDR.
95
* Channel move requests from the remote device are allowed.
96
*/
97
#define BT_CHANNEL_POLICY_BREDR_PREFERRED 1
98
99
/* AMP Preferred
100
* Allow use of AMP controllers
101
* If the L2CAP channel is currently on BR/EDR and AMP controller
102
* resources are available, initiate a channel move to AMP.
103
* Channel move requests from the remote device are allowed.
104
* If the L2CAP socket has not been connected yet, try to create
105
* and configure the channel directly on an AMP controller rather
106
* than BR/EDR.
107
*/
108
#define BT_CHANNEL_POLICY_AMP_PREFERRED 2
109
110
__printf
(1, 2)
111
int
bt_info
(
const
char
*
fmt
, ...);
112
__printf
(1, 2)
113
int
bt_err
(
const
char
*fmt, ...);
114
115
#define BT_INFO(fmt, ...) bt_info(fmt "\n", ##__VA_ARGS__)
116
#define BT_ERR(fmt, ...) bt_err(fmt "\n", ##__VA_ARGS__)
117
#define BT_DBG(fmt, ...) pr_debug(fmt "\n", ##__VA_ARGS__)
118
119
/* Connection and socket states */
120
enum
{
121
BT_CONNECTED
= 1,
/* Equal to TCP_ESTABLISHED to make net code happy */
122
BT_OPEN
,
123
BT_BOUND
,
124
BT_LISTEN
,
125
BT_CONNECT
,
126
BT_CONNECT2
,
127
BT_CONFIG
,
128
BT_DISCONN
,
129
BT_CLOSED
130
};
131
132
/* If unused will be removed by compiler */
133
static
inline
const
char
*state_to_string(
int
state
)
134
{
135
switch
(state) {
136
case
BT_CONNECTED
:
137
return
"BT_CONNECTED"
;
138
case
BT_OPEN
:
139
return
"BT_OPEN"
;
140
case
BT_BOUND
:
141
return
"BT_BOUND"
;
142
case
BT_LISTEN
:
143
return
"BT_LISTEN"
;
144
case
BT_CONNECT
:
145
return
"BT_CONNECT"
;
146
case
BT_CONNECT2
:
147
return
"BT_CONNECT2"
;
148
case
BT_CONFIG
:
149
return
"BT_CONFIG"
;
150
case
BT_DISCONN
:
151
return
"BT_DISCONN"
;
152
case
BT_CLOSED
:
153
return
"BT_CLOSED"
;
154
}
155
156
return
"invalid state"
;
157
}
158
159
/* BD Address */
160
typedef
struct
{
161
__u8
b
[6];
162
}
__packed
bdaddr_t;
163
164
/* BD Address type */
165
#define BDADDR_BREDR 0x00
166
#define BDADDR_LE_PUBLIC 0x01
167
#define BDADDR_LE_RANDOM 0x02
168
169
#define BDADDR_ANY (&(bdaddr_t) {{0, 0, 0, 0, 0, 0} })
170
#define BDADDR_LOCAL (&(bdaddr_t) {{0, 0, 0, 0xff, 0xff, 0xff} })
171
172
/* Copy, swap, convert BD Address */
173
static
inline
int
bacmp(bdaddr_t *ba1, bdaddr_t *ba2)
174
{
175
return
memcmp
(ba1, ba2,
sizeof
(bdaddr_t));
176
}
177
static
inline
void
bacpy(bdaddr_t *
dst
, bdaddr_t *
src
)
178
{
179
memcpy
(dst, src,
sizeof
(bdaddr_t));
180
}
181
182
void
baswap
(bdaddr_t *dst, bdaddr_t *src);
183
char
*
batostr
(bdaddr_t *ba);
184
185
/* Common socket structures and functions */
186
187
#define bt_sk(__sk) ((struct bt_sock *) __sk)
188
189
struct
bt_sock
{
190
struct
sock
sk
;
191
bdaddr_t
src
;
192
bdaddr_t
dst
;
193
struct
list_head
accept_q
;
194
struct
sock
*
parent
;
195
unsigned
long
flags
;
196
};
197
198
enum
{
199
BT_SK_DEFER_SETUP
,
200
BT_SK_SUSPEND
,
201
};
202
203
struct
bt_sock_list
{
204
struct
hlist_head
head
;
205
rwlock_t
lock
;
206
#ifdef CONFIG_PROC_FS
207
struct
file_operations
fops
;
208
int
(* custom_seq_show)(
struct
seq_file
*,
void
*);
209
#endif
210
};
211
212
int
bt_sock_register
(
int
proto
,
const
struct
net_proto_family
*ops);
213
int
bt_sock_unregister
(
int
proto
);
214
void
bt_sock_link
(
struct
bt_sock_list
*
l
,
struct
sock
*
s
);
215
void
bt_sock_unlink
(
struct
bt_sock_list
*
l
,
struct
sock
*
s
);
216
int
bt_sock_recvmsg
(
struct
kiocb
*
iocb
,
struct
socket
*
sock
,
217
struct
msghdr
*
msg
,
size_t
len,
int
flags
);
218
int
bt_sock_stream_recvmsg
(
struct
kiocb
*
iocb
,
struct
socket
*
sock
,
219
struct
msghdr
*
msg
,
size_t
len,
int
flags
);
220
uint
bt_sock_poll
(
struct
file
*
file
,
struct
socket
*
sock
,
poll_table
*
wait
);
221
int
bt_sock_ioctl
(
struct
socket
*
sock
,
unsigned
int
cmd
,
unsigned
long
arg
);
222
int
bt_sock_wait_state
(
struct
sock
*
sk
,
int
state
,
unsigned
long
timeo);
223
224
void
bt_accept_enqueue
(
struct
sock
*parent,
struct
sock
*
sk
);
225
void
bt_accept_unlink
(
struct
sock
*
sk
);
226
struct
sock
*
bt_accept_dequeue
(
struct
sock
*parent,
struct
socket
*newsock);
227
228
/* Skb helpers */
229
struct
l2cap_ctrl
{
230
unsigned
int
sframe
:1,
231
poll
:1,
232
final
:1,
233
fcs
:1,
234
sar
:2,
235
super
:2;
236
__u16
reqseq
;
237
__u16
txseq
;
238
__u8
retries
;
239
};
240
241
struct
bt_skb_cb
{
242
__u8
pkt_type
;
243
__u8
incoming
;
244
__u16
expect
;
245
__u8
force_active
;
246
struct
l2cap_ctrl
control
;
247
};
248
#define bt_cb(skb) ((struct bt_skb_cb *)((skb)->cb))
249
250
static
inline
struct
sk_buff
*bt_skb_alloc(
unsigned
int
len
,
gfp_t
how)
251
{
252
struct
sk_buff
*
skb
;
253
254
skb = alloc_skb(len +
BT_SKB_RESERVE
, how);
255
if
(skb) {
256
skb_reserve(skb,
BT_SKB_RESERVE
);
257
bt_cb
(skb)->incoming = 0;
258
}
259
return
skb
;
260
}
261
262
static
inline
struct
sk_buff
*bt_skb_send_alloc(
struct
sock
*
sk
,
263
unsigned
long
len
,
int
nb,
int
*
err
)
264
{
265
struct
sk_buff
*
skb
;
266
267
skb =
sock_alloc_send_skb
(sk, len +
BT_SKB_RESERVE
, nb, err);
268
if
(skb) {
269
skb_reserve(skb,
BT_SKB_RESERVE
);
270
bt_cb
(skb)->incoming = 0;
271
}
272
273
if
(!skb && *err)
274
return
NULL
;
275
276
*err = sock_error(sk);
277
if
(*err)
278
goto
out
;
279
280
if
(sk->
sk_shutdown
) {
281
*err = -
ECONNRESET
;
282
goto
out
;
283
}
284
285
return
skb
;
286
287
out
:
288
kfree_skb
(skb);
289
return
NULL
;
290
}
291
292
int
bt_to_errno
(
__u16
code
);
293
294
extern
int
hci_sock_init
(
void
);
295
extern
void
hci_sock_cleanup
(
void
);
296
297
extern
int
bt_sysfs_init
(
void
);
298
extern
void
bt_sysfs_cleanup
(
void
);
299
300
extern
int
bt_procfs_init
(
struct
module
*
module
,
struct
net
*
net
,
const
char
*
name
,
301
struct
bt_sock_list
* sk_list,
302
int
(* seq_show)(
struct
seq_file
*,
void
*));
303
extern
void
bt_procfs_cleanup
(
struct
net *net,
const
char
*name);
304
305
extern
struct
dentry
*
bt_debugfs
;
306
307
int
l2cap_init
(
void
);
308
void
l2cap_exit
(
void
);
309
310
int
sco_init
(
void
);
311
void
sco_exit
(
void
);
312
313
void
bt_sock_reclassify_lock
(
struct
sock
*sk,
int
proto
);
314
315
#endif
/* __BLUETOOTH_H */
Generated on Thu Jan 10 2013 14:53:00 for Linux Kernel by
1.8.2