1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24#ifndef __RFCOMM_H
25#define __RFCOMM_H
26
27#define RFCOMM_CONN_TIMEOUT (HZ * 30)
28#define RFCOMM_DISC_TIMEOUT (HZ * 20)
29#define RFCOMM_AUTH_TIMEOUT (HZ * 25)
30#define RFCOMM_IDLE_TIMEOUT (HZ * 2)
31
32#define RFCOMM_DEFAULT_MTU 127
33#define RFCOMM_DEFAULT_CREDITS 7
34
35#define RFCOMM_MAX_L2CAP_MTU 1013
36#define RFCOMM_MAX_CREDITS 40
37
38#define RFCOMM_SKB_HEAD_RESERVE 8
39#define RFCOMM_SKB_TAIL_RESERVE 2
40#define RFCOMM_SKB_RESERVE (RFCOMM_SKB_HEAD_RESERVE + RFCOMM_SKB_TAIL_RESERVE)
41
42#define RFCOMM_SABM 0x2f
43#define RFCOMM_DISC 0x43
44#define RFCOMM_UA 0x63
45#define RFCOMM_DM 0x0f
46#define RFCOMM_UIH 0xef
47
48#define RFCOMM_TEST 0x08
49#define RFCOMM_FCON 0x28
50#define RFCOMM_FCOFF 0x18
51#define RFCOMM_MSC 0x38
52#define RFCOMM_RPN 0x24
53#define RFCOMM_RLS 0x14
54#define RFCOMM_PN 0x20
55#define RFCOMM_NSC 0x04
56
57#define RFCOMM_V24_FC 0x02
58#define RFCOMM_V24_RTC 0x04
59#define RFCOMM_V24_RTR 0x08
60#define RFCOMM_V24_IC 0x40
61#define RFCOMM_V24_DV 0x80
62
63#define RFCOMM_RPN_BR_2400 0x0
64#define RFCOMM_RPN_BR_4800 0x1
65#define RFCOMM_RPN_BR_7200 0x2
66#define RFCOMM_RPN_BR_9600 0x3
67#define RFCOMM_RPN_BR_19200 0x4
68#define RFCOMM_RPN_BR_38400 0x5
69#define RFCOMM_RPN_BR_57600 0x6
70#define RFCOMM_RPN_BR_115200 0x7
71#define RFCOMM_RPN_BR_230400 0x8
72
73#define RFCOMM_RPN_DATA_5 0x0
74#define RFCOMM_RPN_DATA_6 0x1
75#define RFCOMM_RPN_DATA_7 0x2
76#define RFCOMM_RPN_DATA_8 0x3
77
78#define RFCOMM_RPN_STOP_1 0
79#define RFCOMM_RPN_STOP_15 1
80
81#define RFCOMM_RPN_PARITY_NONE 0x0
82#define RFCOMM_RPN_PARITY_ODD 0x1
83#define RFCOMM_RPN_PARITY_EVEN 0x3
84#define RFCOMM_RPN_PARITY_MARK 0x5
85#define RFCOMM_RPN_PARITY_SPACE 0x7
86
87#define RFCOMM_RPN_FLOW_NONE 0x00
88
89#define RFCOMM_RPN_XON_CHAR 0x11
90#define RFCOMM_RPN_XOFF_CHAR 0x13
91
92#define RFCOMM_RPN_PM_BITRATE 0x0001
93#define RFCOMM_RPN_PM_DATA 0x0002
94#define RFCOMM_RPN_PM_STOP 0x0004
95#define RFCOMM_RPN_PM_PARITY 0x0008
96#define RFCOMM_RPN_PM_PARITY_TYPE 0x0010
97#define RFCOMM_RPN_PM_XON 0x0020
98#define RFCOMM_RPN_PM_XOFF 0x0040
99#define RFCOMM_RPN_PM_FLOW 0x3F00
100
101#define RFCOMM_RPN_PM_ALL 0x3F7F
102
103struct rfcomm_hdr {
104 u8 addr;
105 u8 ctrl;
106 u8 len;
107} __packed;
108
109struct rfcomm_cmd {
110 u8 addr;
111 u8 ctrl;
112 u8 len;
113 u8 fcs;
114} __packed;
115
116struct rfcomm_mcc {
117 u8 type;
118 u8 len;
119} __packed;
120
121struct rfcomm_pn {
122 u8 dlci;
123 u8 flow_ctrl;
124 u8 priority;
125 u8 ack_timer;
126 __le16 mtu;
127 u8 max_retrans;
128 u8 credits;
129} __packed;
130
131struct rfcomm_rpn {
132 u8 dlci;
133 u8 bit_rate;
134 u8 line_settings;
135 u8 flow_ctrl;
136 u8 xon_char;
137 u8 xoff_char;
138 __le16 param_mask;
139} __packed;
140
141struct rfcomm_rls {
142 u8 dlci;
143 u8 status;
144} __packed;
145
146struct rfcomm_msc {
147 u8 dlci;
148 u8 v24_sig;
149} __packed;
150
151
152
153struct rfcomm_session {
154 struct list_head list;
155 struct socket *sock;
156 struct timer_list timer;
157 unsigned long state;
158 unsigned long flags;
159 int initiator;
160
161
162 int cfc;
163 uint mtu;
164
165 struct list_head dlcs;
166};
167
168struct rfcomm_dlc {
169 struct list_head list;
170 struct rfcomm_session *session;
171 struct sk_buff_head tx_queue;
172 struct timer_list timer;
173
174 struct mutex lock;
175 unsigned long state;
176 unsigned long flags;
177 atomic_t refcnt;
178 u8 dlci;
179 u8 addr;
180 u8 priority;
181 u8 v24_sig;
182 u8 remote_v24_sig;
183 u8 mscex;
184 u8 out;
185 u8 sec_level;
186 u8 role_switch;
187 u32 defer_setup;
188
189 uint mtu;
190 uint cfc;
191 uint rx_credits;
192 uint tx_credits;
193
194 void *owner;
195
196 void (*data_ready)(struct rfcomm_dlc *d, struct sk_buff *skb);
197 void (*state_change)(struct rfcomm_dlc *d, int err);
198 void (*modem_status)(struct rfcomm_dlc *d, u8 v24_sig);
199};
200
201
202#define RFCOMM_RX_THROTTLED 0
203#define RFCOMM_TX_THROTTLED 1
204#define RFCOMM_TIMED_OUT 2
205#define RFCOMM_MSC_PENDING 3
206#define RFCOMM_SEC_PENDING 4
207#define RFCOMM_AUTH_PENDING 5
208#define RFCOMM_AUTH_ACCEPT 6
209#define RFCOMM_AUTH_REJECT 7
210#define RFCOMM_DEFER_SETUP 8
211#define RFCOMM_ENC_DROP 9
212
213
214#define RFCOMM_SCHED_WAKEUP 31
215
216
217#define RFCOMM_MSCEX_TX 1
218#define RFCOMM_MSCEX_RX 2
219#define RFCOMM_MSCEX_OK (RFCOMM_MSCEX_TX + RFCOMM_MSCEX_RX)
220
221
222#define RFCOMM_CFC_UNKNOWN -1
223#define RFCOMM_CFC_DISABLED 0
224#define RFCOMM_CFC_ENABLED RFCOMM_MAX_CREDITS
225
226
227int rfcomm_send_rpn(struct rfcomm_session *s, int cr, u8 dlci,
228 u8 bit_rate, u8 data_bits, u8 stop_bits,
229 u8 parity, u8 flow_ctrl_settings,
230 u8 xon_char, u8 xoff_char, u16 param_mask);
231
232
233struct rfcomm_dlc *rfcomm_dlc_alloc(gfp_t prio);
234void rfcomm_dlc_free(struct rfcomm_dlc *d);
235int rfcomm_dlc_open(struct rfcomm_dlc *d, bdaddr_t *src, bdaddr_t *dst,
236 u8 channel);
237int rfcomm_dlc_close(struct rfcomm_dlc *d, int reason);
238int rfcomm_dlc_send(struct rfcomm_dlc *d, struct sk_buff *skb);
239void rfcomm_dlc_send_noerror(struct rfcomm_dlc *d, struct sk_buff *skb);
240int rfcomm_dlc_set_modem_status(struct rfcomm_dlc *d, u8 v24_sig);
241int rfcomm_dlc_get_modem_status(struct rfcomm_dlc *d, u8 *v24_sig);
242void rfcomm_dlc_accept(struct rfcomm_dlc *d);
243struct rfcomm_dlc *rfcomm_dlc_exists(bdaddr_t *src, bdaddr_t *dst, u8 channel);
244
245#define rfcomm_dlc_lock(d) mutex_lock(&d->lock)
246#define rfcomm_dlc_unlock(d) mutex_unlock(&d->lock)
247
248static inline void rfcomm_dlc_hold(struct rfcomm_dlc *d)
249{
250 atomic_inc(&d->refcnt);
251}
252
253static inline void rfcomm_dlc_put(struct rfcomm_dlc *d)
254{
255 if (atomic_dec_and_test(&d->refcnt))
256 rfcomm_dlc_free(d);
257}
258
259void __rfcomm_dlc_throttle(struct rfcomm_dlc *d);
260void __rfcomm_dlc_unthrottle(struct rfcomm_dlc *d);
261
262static inline void rfcomm_dlc_throttle(struct rfcomm_dlc *d)
263{
264 if (!test_and_set_bit(RFCOMM_RX_THROTTLED, &d->flags))
265 __rfcomm_dlc_throttle(d);
266}
267
268static inline void rfcomm_dlc_unthrottle(struct rfcomm_dlc *d)
269{
270 if (test_and_clear_bit(RFCOMM_RX_THROTTLED, &d->flags))
271 __rfcomm_dlc_unthrottle(d);
272}
273
274
275void rfcomm_session_getaddr(struct rfcomm_session *s, bdaddr_t *src,
276 bdaddr_t *dst);
277
278
279struct sockaddr_rc {
280 sa_family_t rc_family;
281 bdaddr_t rc_bdaddr;
282 u8 rc_channel;
283};
284
285#define RFCOMM_CONNINFO 0x02
286struct rfcomm_conninfo {
287 __u16 hci_handle;
288 __u8 dev_class[3];
289};
290
291#define RFCOMM_LM 0x03
292#define RFCOMM_LM_MASTER 0x0001
293#define RFCOMM_LM_AUTH 0x0002
294#define RFCOMM_LM_ENCRYPT 0x0004
295#define RFCOMM_LM_TRUSTED 0x0008
296#define RFCOMM_LM_RELIABLE 0x0010
297#define RFCOMM_LM_SECURE 0x0020
298#define RFCOMM_LM_FIPS 0x0040
299
300#define rfcomm_pi(sk) ((struct rfcomm_pinfo *) sk)
301
302struct rfcomm_pinfo {
303 struct bt_sock bt;
304 bdaddr_t src;
305 bdaddr_t dst;
306 struct rfcomm_dlc *dlc;
307 u8 channel;
308 u8 sec_level;
309 u8 role_switch;
310};
311
312int rfcomm_init_sockets(void);
313void rfcomm_cleanup_sockets(void);
314
315int rfcomm_connect_ind(struct rfcomm_session *s, u8 channel,
316 struct rfcomm_dlc **d);
317
318
319#define RFCOMM_MAX_DEV 256
320
321#define RFCOMMCREATEDEV _IOW('R', 200, int)
322#define RFCOMMRELEASEDEV _IOW('R', 201, int)
323#define RFCOMMGETDEVLIST _IOR('R', 210, int)
324#define RFCOMMGETDEVINFO _IOR('R', 211, int)
325#define RFCOMMSTEALDLC _IOW('R', 220, int)
326
327
328#define RFCOMM_REUSE_DLC 0
329#define RFCOMM_RELEASE_ONHUP 1
330#define RFCOMM_HANGUP_NOW 2
331#define RFCOMM_TTY_ATTACHED 3
332#define RFCOMM_DEFUNCT_BIT4 4
333
334
335#define RFCOMM_DEV_RELEASED 0
336#define RFCOMM_TTY_OWNED 1
337
338struct rfcomm_dev_req {
339 s16 dev_id;
340 u32 flags;
341 bdaddr_t src;
342 bdaddr_t dst;
343 u8 channel;
344};
345
346struct rfcomm_dev_info {
347 s16 id;
348 u32 flags;
349 u16 state;
350 bdaddr_t src;
351 bdaddr_t dst;
352 u8 channel;
353};
354
355struct rfcomm_dev_list_req {
356 u16 dev_num;
357 struct rfcomm_dev_info dev_info[0];
358};
359
360int rfcomm_dev_ioctl(struct sock *sk, unsigned int cmd, void __user *arg);
361
362#ifdef CONFIG_BT_RFCOMM_TTY
363int rfcomm_init_ttys(void);
364void rfcomm_cleanup_ttys(void);
365#else
366static inline int rfcomm_init_ttys(void)
367{
368 return 0;
369}
370static inline void rfcomm_cleanup_ttys(void)
371{
372}
373#endif
374#endif
375