xref: /openbmc/linux/net/bluetooth/rfcomm/core.c (revision 87c2ce3b)
1 /*
2    RFCOMM implementation for Linux Bluetooth stack (BlueZ).
3    Copyright (C) 2002 Maxim Krasnyansky <maxk@qualcomm.com>
4    Copyright (C) 2002 Marcel Holtmann <marcel@holtmann.org>
5 
6    This program is free software; you can redistribute it and/or modify
7    it under the terms of the GNU General Public License version 2 as
8    published by the Free Software Foundation;
9 
10    THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
11    OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
12    FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT OF THIRD PARTY RIGHTS.
13    IN NO EVENT SHALL THE COPYRIGHT HOLDER(S) AND AUTHOR(S) BE LIABLE FOR ANY
14    CLAIM, OR ANY SPECIAL INDIRECT OR CONSEQUENTIAL DAMAGES, OR ANY DAMAGES
15    WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
16    ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
17    OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
18 
19    ALL LIABILITY, INCLUDING LIABILITY FOR INFRINGEMENT OF ANY PATENTS,
20    COPYRIGHTS, TRADEMARKS OR OTHER RIGHTS, RELATING TO USE OF THIS
21    SOFTWARE IS DISCLAIMED.
22 */
23 
24 /*
25  * Bluetooth RFCOMM core.
26  *
27  * $Id: core.c,v 1.42 2002/10/01 23:26:25 maxk Exp $
28  */
29 
30 #include <linux/config.h>
31 #include <linux/module.h>
32 #include <linux/errno.h>
33 #include <linux/kernel.h>
34 #include <linux/sched.h>
35 #include <linux/signal.h>
36 #include <linux/init.h>
37 #include <linux/wait.h>
38 #include <linux/device.h>
39 #include <linux/net.h>
40 #include <net/sock.h>
41 #include <asm/uaccess.h>
42 #include <asm/unaligned.h>
43 
44 #include <net/bluetooth/bluetooth.h>
45 #include <net/bluetooth/hci_core.h>
46 #include <net/bluetooth/l2cap.h>
47 #include <net/bluetooth/rfcomm.h>
48 
49 #define VERSION "1.6"
50 
51 #ifndef CONFIG_BT_RFCOMM_DEBUG
52 #undef  BT_DBG
53 #define BT_DBG(D...)
54 #endif
55 
56 static struct task_struct *rfcomm_thread;
57 
58 static DECLARE_MUTEX(rfcomm_sem);
59 #define rfcomm_lock()	down(&rfcomm_sem);
60 #define rfcomm_unlock()	up(&rfcomm_sem);
61 
62 static unsigned long rfcomm_event;
63 
64 static LIST_HEAD(session_list);
65 static atomic_t terminate, running;
66 
67 static int rfcomm_send_frame(struct rfcomm_session *s, u8 *data, int len);
68 static int rfcomm_send_sabm(struct rfcomm_session *s, u8 dlci);
69 static int rfcomm_send_disc(struct rfcomm_session *s, u8 dlci);
70 static int rfcomm_queue_disc(struct rfcomm_dlc *d);
71 static int rfcomm_send_nsc(struct rfcomm_session *s, int cr, u8 type);
72 static int rfcomm_send_pn(struct rfcomm_session *s, int cr, struct rfcomm_dlc *d);
73 static int rfcomm_send_msc(struct rfcomm_session *s, int cr, u8 dlci, u8 v24_sig);
74 static int rfcomm_send_test(struct rfcomm_session *s, int cr, u8 *pattern, int len);
75 static int rfcomm_send_credits(struct rfcomm_session *s, u8 addr, u8 credits);
76 static void rfcomm_make_uih(struct sk_buff *skb, u8 addr);
77 
78 static void rfcomm_process_connect(struct rfcomm_session *s);
79 
80 static struct rfcomm_session *rfcomm_session_create(bdaddr_t *src, bdaddr_t *dst, int *err);
81 static struct rfcomm_session *rfcomm_session_get(bdaddr_t *src, bdaddr_t *dst);
82 static void rfcomm_session_del(struct rfcomm_session *s);
83 
84 /* ---- RFCOMM frame parsing macros ---- */
85 #define __get_dlci(b)     ((b & 0xfc) >> 2)
86 #define __get_channel(b)  ((b & 0xf8) >> 3)
87 #define __get_dir(b)      ((b & 0x04) >> 2)
88 #define __get_type(b)     ((b & 0xef))
89 
90 #define __test_ea(b)      ((b & 0x01))
91 #define __test_cr(b)      ((b & 0x02))
92 #define __test_pf(b)      ((b & 0x10))
93 
94 #define __addr(cr, dlci)       (((dlci & 0x3f) << 2) | (cr << 1) | 0x01)
95 #define __ctrl(type, pf)       (((type & 0xef) | (pf << 4)))
96 #define __dlci(dir, chn)       (((chn & 0x1f) << 1) | dir)
97 #define __srv_channel(dlci)    (dlci >> 1)
98 #define __dir(dlci)            (dlci & 0x01)
99 
100 #define __len8(len)       (((len) << 1) | 1)
101 #define __len16(len)      ((len) << 1)
102 
103 /* MCC macros */
104 #define __mcc_type(cr, type)   (((type << 2) | (cr << 1) | 0x01))
105 #define __get_mcc_type(b) ((b & 0xfc) >> 2)
106 #define __get_mcc_len(b)  ((b & 0xfe) >> 1)
107 
108 /* RPN macros */
109 #define __rpn_line_settings(data, stop, parity)  ((data & 0x3) | ((stop & 0x1) << 2) | ((parity & 0x7) << 3))
110 #define __get_rpn_data_bits(line) ((line) & 0x3)
111 #define __get_rpn_stop_bits(line) (((line) >> 2) & 0x1)
112 #define __get_rpn_parity(line)    (((line) >> 3) & 0x7)
113 
114 static inline void rfcomm_schedule(uint event)
115 {
116 	if (!rfcomm_thread)
117 		return;
118 	//set_bit(event, &rfcomm_event);
119 	set_bit(RFCOMM_SCHED_WAKEUP, &rfcomm_event);
120 	wake_up_process(rfcomm_thread);
121 }
122 
123 static inline void rfcomm_session_put(struct rfcomm_session *s)
124 {
125 	if (atomic_dec_and_test(&s->refcnt))
126 		rfcomm_session_del(s);
127 }
128 
129 /* ---- RFCOMM FCS computation ---- */
130 
131 /* reversed, 8-bit, poly=0x07 */
132 static unsigned char rfcomm_crc_table[256] = {
133 	0x00, 0x91, 0xe3, 0x72, 0x07, 0x96, 0xe4, 0x75,
134 	0x0e, 0x9f, 0xed, 0x7c, 0x09, 0x98, 0xea, 0x7b,
135 	0x1c, 0x8d, 0xff, 0x6e, 0x1b, 0x8a, 0xf8, 0x69,
136 	0x12, 0x83, 0xf1, 0x60, 0x15, 0x84, 0xf6, 0x67,
137 
138 	0x38, 0xa9, 0xdb, 0x4a, 0x3f, 0xae, 0xdc, 0x4d,
139 	0x36, 0xa7, 0xd5, 0x44, 0x31, 0xa0, 0xd2, 0x43,
140 	0x24, 0xb5, 0xc7, 0x56, 0x23, 0xb2, 0xc0, 0x51,
141 	0x2a, 0xbb, 0xc9, 0x58, 0x2d, 0xbc, 0xce, 0x5f,
142 
143 	0x70, 0xe1, 0x93, 0x02, 0x77, 0xe6, 0x94, 0x05,
144 	0x7e, 0xef, 0x9d, 0x0c, 0x79, 0xe8, 0x9a, 0x0b,
145 	0x6c, 0xfd, 0x8f, 0x1e, 0x6b, 0xfa, 0x88, 0x19,
146 	0x62, 0xf3, 0x81, 0x10, 0x65, 0xf4, 0x86, 0x17,
147 
148 	0x48, 0xd9, 0xab, 0x3a, 0x4f, 0xde, 0xac, 0x3d,
149 	0x46, 0xd7, 0xa5, 0x34, 0x41, 0xd0, 0xa2, 0x33,
150 	0x54, 0xc5, 0xb7, 0x26, 0x53, 0xc2, 0xb0, 0x21,
151 	0x5a, 0xcb, 0xb9, 0x28, 0x5d, 0xcc, 0xbe, 0x2f,
152 
153 	0xe0, 0x71, 0x03, 0x92, 0xe7, 0x76, 0x04, 0x95,
154 	0xee, 0x7f, 0x0d, 0x9c, 0xe9, 0x78, 0x0a, 0x9b,
155 	0xfc, 0x6d, 0x1f, 0x8e, 0xfb, 0x6a, 0x18, 0x89,
156 	0xf2, 0x63, 0x11, 0x80, 0xf5, 0x64, 0x16, 0x87,
157 
158 	0xd8, 0x49, 0x3b, 0xaa, 0xdf, 0x4e, 0x3c, 0xad,
159 	0xd6, 0x47, 0x35, 0xa4, 0xd1, 0x40, 0x32, 0xa3,
160 	0xc4, 0x55, 0x27, 0xb6, 0xc3, 0x52, 0x20, 0xb1,
161 	0xca, 0x5b, 0x29, 0xb8, 0xcd, 0x5c, 0x2e, 0xbf,
162 
163 	0x90, 0x01, 0x73, 0xe2, 0x97, 0x06, 0x74, 0xe5,
164 	0x9e, 0x0f, 0x7d, 0xec, 0x99, 0x08, 0x7a, 0xeb,
165 	0x8c, 0x1d, 0x6f, 0xfe, 0x8b, 0x1a, 0x68, 0xf9,
166 	0x82, 0x13, 0x61, 0xf0, 0x85, 0x14, 0x66, 0xf7,
167 
168 	0xa8, 0x39, 0x4b, 0xda, 0xaf, 0x3e, 0x4c, 0xdd,
169 	0xa6, 0x37, 0x45, 0xd4, 0xa1, 0x30, 0x42, 0xd3,
170 	0xb4, 0x25, 0x57, 0xc6, 0xb3, 0x22, 0x50, 0xc1,
171 	0xba, 0x2b, 0x59, 0xc8, 0xbd, 0x2c, 0x5e, 0xcf
172 };
173 
174 /* CRC on 2 bytes */
175 #define __crc(data) (rfcomm_crc_table[rfcomm_crc_table[0xff ^ data[0]] ^ data[1]])
176 
177 /* FCS on 2 bytes */
178 static inline u8 __fcs(u8 *data)
179 {
180 	return (0xff - __crc(data));
181 }
182 
183 /* FCS on 3 bytes */
184 static inline u8 __fcs2(u8 *data)
185 {
186 	return (0xff - rfcomm_crc_table[__crc(data) ^ data[2]]);
187 }
188 
189 /* Check FCS */
190 static inline int __check_fcs(u8 *data, int type, u8 fcs)
191 {
192 	u8 f = __crc(data);
193 
194 	if (type != RFCOMM_UIH)
195 		f = rfcomm_crc_table[f ^ data[2]];
196 
197 	return rfcomm_crc_table[f ^ fcs] != 0xcf;
198 }
199 
200 /* ---- L2CAP callbacks ---- */
201 static void rfcomm_l2state_change(struct sock *sk)
202 {
203 	BT_DBG("%p state %d", sk, sk->sk_state);
204 	rfcomm_schedule(RFCOMM_SCHED_STATE);
205 }
206 
207 static void rfcomm_l2data_ready(struct sock *sk, int bytes)
208 {
209 	BT_DBG("%p bytes %d", sk, bytes);
210 	rfcomm_schedule(RFCOMM_SCHED_RX);
211 }
212 
213 static int rfcomm_l2sock_create(struct socket **sock)
214 {
215 	int err;
216 
217 	BT_DBG("");
218 
219 	err = sock_create_kern(PF_BLUETOOTH, SOCK_SEQPACKET, BTPROTO_L2CAP, sock);
220 	if (!err) {
221 		struct sock *sk = (*sock)->sk;
222 		sk->sk_data_ready   = rfcomm_l2data_ready;
223 		sk->sk_state_change = rfcomm_l2state_change;
224 	}
225 	return err;
226 }
227 
228 /* ---- RFCOMM DLCs ---- */
229 static void rfcomm_dlc_timeout(unsigned long arg)
230 {
231 	struct rfcomm_dlc *d = (void *) arg;
232 
233 	BT_DBG("dlc %p state %ld", d, d->state);
234 
235 	set_bit(RFCOMM_TIMED_OUT, &d->flags);
236 	rfcomm_dlc_put(d);
237 	rfcomm_schedule(RFCOMM_SCHED_TIMEO);
238 }
239 
240 static void rfcomm_dlc_set_timer(struct rfcomm_dlc *d, long timeout)
241 {
242 	BT_DBG("dlc %p state %ld timeout %ld", d, d->state, timeout);
243 
244 	if (!mod_timer(&d->timer, jiffies + timeout))
245 		rfcomm_dlc_hold(d);
246 }
247 
248 static void rfcomm_dlc_clear_timer(struct rfcomm_dlc *d)
249 {
250 	BT_DBG("dlc %p state %ld", d, d->state);
251 
252 	if (timer_pending(&d->timer) && del_timer(&d->timer))
253 		rfcomm_dlc_put(d);
254 }
255 
256 static void rfcomm_dlc_clear_state(struct rfcomm_dlc *d)
257 {
258 	BT_DBG("%p", d);
259 
260 	d->state      = BT_OPEN;
261 	d->flags      = 0;
262 	d->mscex      = 0;
263 	d->mtu        = RFCOMM_DEFAULT_MTU;
264 	d->v24_sig    = RFCOMM_V24_RTC | RFCOMM_V24_RTR | RFCOMM_V24_DV;
265 
266 	d->cfc        = RFCOMM_CFC_DISABLED;
267 	d->rx_credits = RFCOMM_DEFAULT_CREDITS;
268 }
269 
270 struct rfcomm_dlc *rfcomm_dlc_alloc(gfp_t prio)
271 {
272 	struct rfcomm_dlc *d = kmalloc(sizeof(*d), prio);
273 	if (!d)
274 		return NULL;
275 	memset(d, 0, sizeof(*d));
276 
277 	init_timer(&d->timer);
278 	d->timer.function = rfcomm_dlc_timeout;
279 	d->timer.data = (unsigned long) d;
280 
281 	skb_queue_head_init(&d->tx_queue);
282 	spin_lock_init(&d->lock);
283 	atomic_set(&d->refcnt, 1);
284 
285 	rfcomm_dlc_clear_state(d);
286 
287 	BT_DBG("%p", d);
288 	return d;
289 }
290 
291 void rfcomm_dlc_free(struct rfcomm_dlc *d)
292 {
293 	BT_DBG("%p", d);
294 
295 	skb_queue_purge(&d->tx_queue);
296 	kfree(d);
297 }
298 
299 static void rfcomm_dlc_link(struct rfcomm_session *s, struct rfcomm_dlc *d)
300 {
301 	BT_DBG("dlc %p session %p", d, s);
302 
303 	rfcomm_session_hold(s);
304 
305 	rfcomm_dlc_hold(d);
306 	list_add(&d->list, &s->dlcs);
307 	d->session = s;
308 }
309 
310 static void rfcomm_dlc_unlink(struct rfcomm_dlc *d)
311 {
312 	struct rfcomm_session *s = d->session;
313 
314 	BT_DBG("dlc %p refcnt %d session %p", d, atomic_read(&d->refcnt), s);
315 
316 	list_del(&d->list);
317 	d->session = NULL;
318 	rfcomm_dlc_put(d);
319 
320 	rfcomm_session_put(s);
321 }
322 
323 static struct rfcomm_dlc *rfcomm_dlc_get(struct rfcomm_session *s, u8 dlci)
324 {
325 	struct rfcomm_dlc *d;
326 	struct list_head *p;
327 
328 	list_for_each(p, &s->dlcs) {
329 		d = list_entry(p, struct rfcomm_dlc, list);
330 		if (d->dlci == dlci)
331 			return d;
332 	}
333 	return NULL;
334 }
335 
336 static int __rfcomm_dlc_open(struct rfcomm_dlc *d, bdaddr_t *src, bdaddr_t *dst, u8 channel)
337 {
338 	struct rfcomm_session *s;
339 	int err = 0;
340 	u8 dlci;
341 
342 	BT_DBG("dlc %p state %ld %s %s channel %d",
343 			d, d->state, batostr(src), batostr(dst), channel);
344 
345 	if (channel < 1 || channel > 30)
346 		return -EINVAL;
347 
348 	if (d->state != BT_OPEN && d->state != BT_CLOSED)
349 		return 0;
350 
351 	s = rfcomm_session_get(src, dst);
352 	if (!s) {
353 		s = rfcomm_session_create(src, dst, &err);
354 		if (!s)
355 			return err;
356 	}
357 
358 	dlci = __dlci(!s->initiator, channel);
359 
360 	/* Check if DLCI already exists */
361 	if (rfcomm_dlc_get(s, dlci))
362 		return -EBUSY;
363 
364 	rfcomm_dlc_clear_state(d);
365 
366 	d->dlci     = dlci;
367 	d->addr     = __addr(s->initiator, dlci);
368 	d->priority = 7;
369 
370 	d->state    = BT_CONFIG;
371 	rfcomm_dlc_link(s, d);
372 
373 	d->mtu = s->mtu;
374 	d->cfc = (s->cfc == RFCOMM_CFC_UNKNOWN) ? 0 : s->cfc;
375 
376 	if (s->state == BT_CONNECTED)
377 		rfcomm_send_pn(s, 1, d);
378 	rfcomm_dlc_set_timer(d, RFCOMM_CONN_TIMEOUT);
379 	return 0;
380 }
381 
382 int rfcomm_dlc_open(struct rfcomm_dlc *d, bdaddr_t *src, bdaddr_t *dst, u8 channel)
383 {
384 	int r;
385 
386 	rfcomm_lock();
387 
388 	r = __rfcomm_dlc_open(d, src, dst, channel);
389 
390 	rfcomm_unlock();
391 	return r;
392 }
393 
394 static int __rfcomm_dlc_close(struct rfcomm_dlc *d, int err)
395 {
396 	struct rfcomm_session *s = d->session;
397 	if (!s)
398 		return 0;
399 
400 	BT_DBG("dlc %p state %ld dlci %d err %d session %p",
401 			d, d->state, d->dlci, err, s);
402 
403 	switch (d->state) {
404 	case BT_CONNECTED:
405 	case BT_CONFIG:
406 	case BT_CONNECT:
407 		d->state = BT_DISCONN;
408 		if (skb_queue_empty(&d->tx_queue)) {
409 			rfcomm_send_disc(s, d->dlci);
410 			rfcomm_dlc_set_timer(d, RFCOMM_DISC_TIMEOUT);
411 		} else {
412 			rfcomm_queue_disc(d);
413 			rfcomm_dlc_set_timer(d, RFCOMM_DISC_TIMEOUT * 2);
414 		}
415 		break;
416 
417 	default:
418 		rfcomm_dlc_clear_timer(d);
419 
420 		rfcomm_dlc_lock(d);
421 		d->state = BT_CLOSED;
422 		d->state_change(d, err);
423 		rfcomm_dlc_unlock(d);
424 
425 		skb_queue_purge(&d->tx_queue);
426 		rfcomm_dlc_unlink(d);
427 	}
428 
429 	return 0;
430 }
431 
432 int rfcomm_dlc_close(struct rfcomm_dlc *d, int err)
433 {
434 	int r;
435 
436 	rfcomm_lock();
437 
438 	r = __rfcomm_dlc_close(d, err);
439 
440 	rfcomm_unlock();
441 	return r;
442 }
443 
444 int rfcomm_dlc_send(struct rfcomm_dlc *d, struct sk_buff *skb)
445 {
446 	int len = skb->len;
447 
448 	if (d->state != BT_CONNECTED)
449 		return -ENOTCONN;
450 
451 	BT_DBG("dlc %p mtu %d len %d", d, d->mtu, len);
452 
453 	if (len > d->mtu)
454 		return -EINVAL;
455 
456 	rfcomm_make_uih(skb, d->addr);
457 	skb_queue_tail(&d->tx_queue, skb);
458 
459 	if (!test_bit(RFCOMM_TX_THROTTLED, &d->flags))
460 		rfcomm_schedule(RFCOMM_SCHED_TX);
461 	return len;
462 }
463 
464 void fastcall __rfcomm_dlc_throttle(struct rfcomm_dlc *d)
465 {
466 	BT_DBG("dlc %p state %ld", d, d->state);
467 
468 	if (!d->cfc) {
469 		d->v24_sig |= RFCOMM_V24_FC;
470 		set_bit(RFCOMM_MSC_PENDING, &d->flags);
471 	}
472 	rfcomm_schedule(RFCOMM_SCHED_TX);
473 }
474 
475 void fastcall __rfcomm_dlc_unthrottle(struct rfcomm_dlc *d)
476 {
477 	BT_DBG("dlc %p state %ld", d, d->state);
478 
479 	if (!d->cfc) {
480 		d->v24_sig &= ~RFCOMM_V24_FC;
481 		set_bit(RFCOMM_MSC_PENDING, &d->flags);
482 	}
483 	rfcomm_schedule(RFCOMM_SCHED_TX);
484 }
485 
486 /*
487    Set/get modem status functions use _local_ status i.e. what we report
488    to the other side.
489    Remote status is provided by dlc->modem_status() callback.
490  */
491 int rfcomm_dlc_set_modem_status(struct rfcomm_dlc *d, u8 v24_sig)
492 {
493 	BT_DBG("dlc %p state %ld v24_sig 0x%x",
494 			d, d->state, v24_sig);
495 
496 	if (test_bit(RFCOMM_RX_THROTTLED, &d->flags))
497 		v24_sig |= RFCOMM_V24_FC;
498 	else
499 		v24_sig &= ~RFCOMM_V24_FC;
500 
501 	d->v24_sig = v24_sig;
502 
503 	if (!test_and_set_bit(RFCOMM_MSC_PENDING, &d->flags))
504 		rfcomm_schedule(RFCOMM_SCHED_TX);
505 
506 	return 0;
507 }
508 
509 int rfcomm_dlc_get_modem_status(struct rfcomm_dlc *d, u8 *v24_sig)
510 {
511 	BT_DBG("dlc %p state %ld v24_sig 0x%x",
512 			d, d->state, d->v24_sig);
513 
514 	*v24_sig = d->v24_sig;
515 	return 0;
516 }
517 
518 /* ---- RFCOMM sessions ---- */
519 static struct rfcomm_session *rfcomm_session_add(struct socket *sock, int state)
520 {
521 	struct rfcomm_session *s = kmalloc(sizeof(*s), GFP_KERNEL);
522 	if (!s)
523 		return NULL;
524 	memset(s, 0, sizeof(*s));
525 
526 	BT_DBG("session %p sock %p", s, sock);
527 
528 	INIT_LIST_HEAD(&s->dlcs);
529 	s->state = state;
530 	s->sock  = sock;
531 
532 	s->mtu = RFCOMM_DEFAULT_MTU;
533 	s->cfc = RFCOMM_CFC_UNKNOWN;
534 
535 	/* Do not increment module usage count for listening sessions.
536 	 * Otherwise we won't be able to unload the module. */
537 	if (state != BT_LISTEN)
538 		if (!try_module_get(THIS_MODULE)) {
539 			kfree(s);
540 			return NULL;
541 		}
542 
543 	list_add(&s->list, &session_list);
544 
545 	return s;
546 }
547 
548 static void rfcomm_session_del(struct rfcomm_session *s)
549 {
550 	int state = s->state;
551 
552 	BT_DBG("session %p state %ld", s, s->state);
553 
554 	list_del(&s->list);
555 
556 	if (state == BT_CONNECTED)
557 		rfcomm_send_disc(s, 0);
558 
559 	sock_release(s->sock);
560 	kfree(s);
561 
562 	if (state != BT_LISTEN)
563 		module_put(THIS_MODULE);
564 }
565 
566 static struct rfcomm_session *rfcomm_session_get(bdaddr_t *src, bdaddr_t *dst)
567 {
568 	struct rfcomm_session *s;
569 	struct list_head *p, *n;
570 	struct bt_sock *sk;
571 	list_for_each_safe(p, n, &session_list) {
572 		s = list_entry(p, struct rfcomm_session, list);
573 		sk = bt_sk(s->sock->sk);
574 
575 		if ((!bacmp(src, BDADDR_ANY) || !bacmp(&sk->src, src)) &&
576 				!bacmp(&sk->dst, dst))
577 			return s;
578 	}
579 	return NULL;
580 }
581 
582 static void rfcomm_session_close(struct rfcomm_session *s, int err)
583 {
584 	struct rfcomm_dlc *d;
585 	struct list_head *p, *n;
586 
587 	BT_DBG("session %p state %ld err %d", s, s->state, err);
588 
589 	rfcomm_session_hold(s);
590 
591 	s->state = BT_CLOSED;
592 
593 	/* Close all dlcs */
594 	list_for_each_safe(p, n, &s->dlcs) {
595 		d = list_entry(p, struct rfcomm_dlc, list);
596 		d->state = BT_CLOSED;
597 		__rfcomm_dlc_close(d, err);
598 	}
599 
600 	rfcomm_session_put(s);
601 }
602 
603 static struct rfcomm_session *rfcomm_session_create(bdaddr_t *src, bdaddr_t *dst, int *err)
604 {
605 	struct rfcomm_session *s = NULL;
606 	struct sockaddr_l2 addr;
607 	struct socket *sock;
608 	struct sock *sk;
609 
610 	BT_DBG("%s %s", batostr(src), batostr(dst));
611 
612 	*err = rfcomm_l2sock_create(&sock);
613 	if (*err < 0)
614 		return NULL;
615 
616 	bacpy(&addr.l2_bdaddr, src);
617 	addr.l2_family = AF_BLUETOOTH;
618 	addr.l2_psm    = 0;
619 	*err = sock->ops->bind(sock, (struct sockaddr *) &addr, sizeof(addr));
620 	if (*err < 0)
621 		goto failed;
622 
623 	/* Set L2CAP options */
624 	sk = sock->sk;
625 	lock_sock(sk);
626 	l2cap_pi(sk)->imtu = RFCOMM_MAX_L2CAP_MTU;
627 	release_sock(sk);
628 
629 	s = rfcomm_session_add(sock, BT_BOUND);
630 	if (!s) {
631 		*err = -ENOMEM;
632 		goto failed;
633 	}
634 
635 	s->initiator = 1;
636 
637 	bacpy(&addr.l2_bdaddr, dst);
638 	addr.l2_family = AF_BLUETOOTH;
639 	addr.l2_psm    = htobs(RFCOMM_PSM);
640 	*err = sock->ops->connect(sock, (struct sockaddr *) &addr, sizeof(addr), O_NONBLOCK);
641 	if (*err == 0 || *err == -EAGAIN)
642 		return s;
643 
644 	rfcomm_session_del(s);
645 	return NULL;
646 
647 failed:
648 	sock_release(sock);
649 	return NULL;
650 }
651 
652 void rfcomm_session_getaddr(struct rfcomm_session *s, bdaddr_t *src, bdaddr_t *dst)
653 {
654 	struct sock *sk = s->sock->sk;
655 	if (src)
656 		bacpy(src, &bt_sk(sk)->src);
657 	if (dst)
658 		bacpy(dst, &bt_sk(sk)->dst);
659 }
660 
661 /* ---- RFCOMM frame sending ---- */
662 static int rfcomm_send_frame(struct rfcomm_session *s, u8 *data, int len)
663 {
664 	struct socket *sock = s->sock;
665 	struct kvec iv = { data, len };
666 	struct msghdr msg;
667 
668 	BT_DBG("session %p len %d", s, len);
669 
670 	memset(&msg, 0, sizeof(msg));
671 
672 	return kernel_sendmsg(sock, &msg, &iv, 1, len);
673 }
674 
675 static int rfcomm_send_sabm(struct rfcomm_session *s, u8 dlci)
676 {
677 	struct rfcomm_cmd cmd;
678 
679 	BT_DBG("%p dlci %d", s, dlci);
680 
681 	cmd.addr = __addr(s->initiator, dlci);
682 	cmd.ctrl = __ctrl(RFCOMM_SABM, 1);
683 	cmd.len  = __len8(0);
684 	cmd.fcs  = __fcs2((u8 *) &cmd);
685 
686 	return rfcomm_send_frame(s, (void *) &cmd, sizeof(cmd));
687 }
688 
689 static int rfcomm_send_ua(struct rfcomm_session *s, u8 dlci)
690 {
691 	struct rfcomm_cmd cmd;
692 
693 	BT_DBG("%p dlci %d", s, dlci);
694 
695 	cmd.addr = __addr(!s->initiator, dlci);
696 	cmd.ctrl = __ctrl(RFCOMM_UA, 1);
697 	cmd.len  = __len8(0);
698 	cmd.fcs  = __fcs2((u8 *) &cmd);
699 
700 	return rfcomm_send_frame(s, (void *) &cmd, sizeof(cmd));
701 }
702 
703 static int rfcomm_send_disc(struct rfcomm_session *s, u8 dlci)
704 {
705 	struct rfcomm_cmd cmd;
706 
707 	BT_DBG("%p dlci %d", s, dlci);
708 
709 	cmd.addr = __addr(s->initiator, dlci);
710 	cmd.ctrl = __ctrl(RFCOMM_DISC, 1);
711 	cmd.len  = __len8(0);
712 	cmd.fcs  = __fcs2((u8 *) &cmd);
713 
714 	return rfcomm_send_frame(s, (void *) &cmd, sizeof(cmd));
715 }
716 
717 static int rfcomm_queue_disc(struct rfcomm_dlc *d)
718 {
719 	struct rfcomm_cmd *cmd;
720 	struct sk_buff *skb;
721 
722 	BT_DBG("dlc %p dlci %d", d, d->dlci);
723 
724 	skb = alloc_skb(sizeof(*cmd), GFP_KERNEL);
725 	if (!skb)
726 		return -ENOMEM;
727 
728 	cmd = (void *) __skb_put(skb, sizeof(*cmd));
729 	cmd->addr = d->addr;
730 	cmd->ctrl = __ctrl(RFCOMM_DISC, 1);
731 	cmd->len  = __len8(0);
732 	cmd->fcs  = __fcs2((u8 *) cmd);
733 
734 	skb_queue_tail(&d->tx_queue, skb);
735 	rfcomm_schedule(RFCOMM_SCHED_TX);
736 	return 0;
737 }
738 
739 static int rfcomm_send_dm(struct rfcomm_session *s, u8 dlci)
740 {
741 	struct rfcomm_cmd cmd;
742 
743 	BT_DBG("%p dlci %d", s, dlci);
744 
745 	cmd.addr = __addr(!s->initiator, dlci);
746 	cmd.ctrl = __ctrl(RFCOMM_DM, 1);
747 	cmd.len  = __len8(0);
748 	cmd.fcs  = __fcs2((u8 *) &cmd);
749 
750 	return rfcomm_send_frame(s, (void *) &cmd, sizeof(cmd));
751 }
752 
753 static int rfcomm_send_nsc(struct rfcomm_session *s, int cr, u8 type)
754 {
755 	struct rfcomm_hdr *hdr;
756 	struct rfcomm_mcc *mcc;
757 	u8 buf[16], *ptr = buf;
758 
759 	BT_DBG("%p cr %d type %d", s, cr, type);
760 
761 	hdr = (void *) ptr; ptr += sizeof(*hdr);
762 	hdr->addr = __addr(s->initiator, 0);
763 	hdr->ctrl = __ctrl(RFCOMM_UIH, 0);
764 	hdr->len  = __len8(sizeof(*mcc) + 1);
765 
766 	mcc = (void *) ptr; ptr += sizeof(*mcc);
767 	mcc->type = __mcc_type(cr, RFCOMM_NSC);
768 	mcc->len  = __len8(1);
769 
770 	/* Type that we didn't like */
771 	*ptr = __mcc_type(cr, type); ptr++;
772 
773 	*ptr = __fcs(buf); ptr++;
774 
775 	return rfcomm_send_frame(s, buf, ptr - buf);
776 }
777 
778 static int rfcomm_send_pn(struct rfcomm_session *s, int cr, struct rfcomm_dlc *d)
779 {
780 	struct rfcomm_hdr *hdr;
781 	struct rfcomm_mcc *mcc;
782 	struct rfcomm_pn  *pn;
783 	u8 buf[16], *ptr = buf;
784 
785 	BT_DBG("%p cr %d dlci %d mtu %d", s, cr, d->dlci, d->mtu);
786 
787 	hdr = (void *) ptr; ptr += sizeof(*hdr);
788 	hdr->addr = __addr(s->initiator, 0);
789 	hdr->ctrl = __ctrl(RFCOMM_UIH, 0);
790 	hdr->len  = __len8(sizeof(*mcc) + sizeof(*pn));
791 
792 	mcc = (void *) ptr; ptr += sizeof(*mcc);
793 	mcc->type = __mcc_type(cr, RFCOMM_PN);
794 	mcc->len  = __len8(sizeof(*pn));
795 
796 	pn = (void *) ptr; ptr += sizeof(*pn);
797 	pn->dlci        = d->dlci;
798 	pn->priority    = d->priority;
799 	pn->ack_timer   = 0;
800 	pn->max_retrans = 0;
801 
802 	if (s->cfc) {
803 		pn->flow_ctrl = cr ? 0xf0 : 0xe0;
804 		pn->credits = RFCOMM_DEFAULT_CREDITS;
805 	} else {
806 		pn->flow_ctrl = 0;
807 		pn->credits   = 0;
808 	}
809 
810 	pn->mtu = htobs(d->mtu);
811 
812 	*ptr = __fcs(buf); ptr++;
813 
814 	return rfcomm_send_frame(s, buf, ptr - buf);
815 }
816 
817 int rfcomm_send_rpn(struct rfcomm_session *s, int cr, u8 dlci,
818 			u8 bit_rate, u8 data_bits, u8 stop_bits,
819 			u8 parity, u8 flow_ctrl_settings,
820 			u8 xon_char, u8 xoff_char, u16 param_mask)
821 {
822 	struct rfcomm_hdr *hdr;
823 	struct rfcomm_mcc *mcc;
824 	struct rfcomm_rpn *rpn;
825 	u8 buf[16], *ptr = buf;
826 
827 	BT_DBG("%p cr %d dlci %d bit_r 0x%x data_b 0x%x stop_b 0x%x parity 0x%x"
828 			" flwc_s 0x%x xon_c 0x%x xoff_c 0x%x p_mask 0x%x",
829 		s, cr, dlci, bit_rate, data_bits, stop_bits, parity,
830 		flow_ctrl_settings, xon_char, xoff_char, param_mask);
831 
832 	hdr = (void *) ptr; ptr += sizeof(*hdr);
833 	hdr->addr = __addr(s->initiator, 0);
834 	hdr->ctrl = __ctrl(RFCOMM_UIH, 0);
835 	hdr->len  = __len8(sizeof(*mcc) + sizeof(*rpn));
836 
837 	mcc = (void *) ptr; ptr += sizeof(*mcc);
838 	mcc->type = __mcc_type(cr, RFCOMM_RPN);
839 	mcc->len  = __len8(sizeof(*rpn));
840 
841 	rpn = (void *) ptr; ptr += sizeof(*rpn);
842 	rpn->dlci          = __addr(1, dlci);
843 	rpn->bit_rate      = bit_rate;
844 	rpn->line_settings = __rpn_line_settings(data_bits, stop_bits, parity);
845 	rpn->flow_ctrl     = flow_ctrl_settings;
846 	rpn->xon_char      = xon_char;
847 	rpn->xoff_char     = xoff_char;
848 	rpn->param_mask    = param_mask;
849 
850 	*ptr = __fcs(buf); ptr++;
851 
852 	return rfcomm_send_frame(s, buf, ptr - buf);
853 }
854 
855 static int rfcomm_send_rls(struct rfcomm_session *s, int cr, u8 dlci, u8 status)
856 {
857 	struct rfcomm_hdr *hdr;
858 	struct rfcomm_mcc *mcc;
859 	struct rfcomm_rls *rls;
860 	u8 buf[16], *ptr = buf;
861 
862 	BT_DBG("%p cr %d status 0x%x", s, cr, status);
863 
864 	hdr = (void *) ptr; ptr += sizeof(*hdr);
865 	hdr->addr = __addr(s->initiator, 0);
866 	hdr->ctrl = __ctrl(RFCOMM_UIH, 0);
867 	hdr->len  = __len8(sizeof(*mcc) + sizeof(*rls));
868 
869 	mcc = (void *) ptr; ptr += sizeof(*mcc);
870 	mcc->type = __mcc_type(cr, RFCOMM_RLS);
871 	mcc->len  = __len8(sizeof(*rls));
872 
873 	rls = (void *) ptr; ptr += sizeof(*rls);
874 	rls->dlci   = __addr(1, dlci);
875 	rls->status = status;
876 
877 	*ptr = __fcs(buf); ptr++;
878 
879 	return rfcomm_send_frame(s, buf, ptr - buf);
880 }
881 
882 static int rfcomm_send_msc(struct rfcomm_session *s, int cr, u8 dlci, u8 v24_sig)
883 {
884 	struct rfcomm_hdr *hdr;
885 	struct rfcomm_mcc *mcc;
886 	struct rfcomm_msc *msc;
887 	u8 buf[16], *ptr = buf;
888 
889 	BT_DBG("%p cr %d v24 0x%x", s, cr, v24_sig);
890 
891 	hdr = (void *) ptr; ptr += sizeof(*hdr);
892 	hdr->addr = __addr(s->initiator, 0);
893 	hdr->ctrl = __ctrl(RFCOMM_UIH, 0);
894 	hdr->len  = __len8(sizeof(*mcc) + sizeof(*msc));
895 
896 	mcc = (void *) ptr; ptr += sizeof(*mcc);
897 	mcc->type = __mcc_type(cr, RFCOMM_MSC);
898 	mcc->len  = __len8(sizeof(*msc));
899 
900 	msc = (void *) ptr; ptr += sizeof(*msc);
901 	msc->dlci    = __addr(1, dlci);
902 	msc->v24_sig = v24_sig | 0x01;
903 
904 	*ptr = __fcs(buf); ptr++;
905 
906 	return rfcomm_send_frame(s, buf, ptr - buf);
907 }
908 
909 static int rfcomm_send_fcoff(struct rfcomm_session *s, int cr)
910 {
911 	struct rfcomm_hdr *hdr;
912 	struct rfcomm_mcc *mcc;
913 	u8 buf[16], *ptr = buf;
914 
915 	BT_DBG("%p cr %d", s, cr);
916 
917 	hdr = (void *) ptr; ptr += sizeof(*hdr);
918 	hdr->addr = __addr(s->initiator, 0);
919 	hdr->ctrl = __ctrl(RFCOMM_UIH, 0);
920 	hdr->len  = __len8(sizeof(*mcc));
921 
922 	mcc = (void *) ptr; ptr += sizeof(*mcc);
923 	mcc->type = __mcc_type(cr, RFCOMM_FCOFF);
924 	mcc->len  = __len8(0);
925 
926 	*ptr = __fcs(buf); ptr++;
927 
928 	return rfcomm_send_frame(s, buf, ptr - buf);
929 }
930 
931 static int rfcomm_send_fcon(struct rfcomm_session *s, int cr)
932 {
933 	struct rfcomm_hdr *hdr;
934 	struct rfcomm_mcc *mcc;
935 	u8 buf[16], *ptr = buf;
936 
937 	BT_DBG("%p cr %d", s, cr);
938 
939 	hdr = (void *) ptr; ptr += sizeof(*hdr);
940 	hdr->addr = __addr(s->initiator, 0);
941 	hdr->ctrl = __ctrl(RFCOMM_UIH, 0);
942 	hdr->len  = __len8(sizeof(*mcc));
943 
944 	mcc = (void *) ptr; ptr += sizeof(*mcc);
945 	mcc->type = __mcc_type(cr, RFCOMM_FCON);
946 	mcc->len  = __len8(0);
947 
948 	*ptr = __fcs(buf); ptr++;
949 
950 	return rfcomm_send_frame(s, buf, ptr - buf);
951 }
952 
953 static int rfcomm_send_test(struct rfcomm_session *s, int cr, u8 *pattern, int len)
954 {
955 	struct socket *sock = s->sock;
956 	struct kvec iv[3];
957 	struct msghdr msg;
958 	unsigned char hdr[5], crc[1];
959 
960 	if (len > 125)
961 		return -EINVAL;
962 
963 	BT_DBG("%p cr %d", s, cr);
964 
965 	hdr[0] = __addr(s->initiator, 0);
966 	hdr[1] = __ctrl(RFCOMM_UIH, 0);
967 	hdr[2] = 0x01 | ((len + 2) << 1);
968 	hdr[3] = 0x01 | ((cr & 0x01) << 1) | (RFCOMM_TEST << 2);
969 	hdr[4] = 0x01 | (len << 1);
970 
971 	crc[0] = __fcs(hdr);
972 
973 	iv[0].iov_base = hdr;
974 	iv[0].iov_len  = 5;
975 	iv[1].iov_base = pattern;
976 	iv[1].iov_len  = len;
977 	iv[2].iov_base = crc;
978 	iv[2].iov_len  = 1;
979 
980 	memset(&msg, 0, sizeof(msg));
981 
982 	return kernel_sendmsg(sock, &msg, iv, 3, 6 + len);
983 }
984 
985 static int rfcomm_send_credits(struct rfcomm_session *s, u8 addr, u8 credits)
986 {
987 	struct rfcomm_hdr *hdr;
988 	u8 buf[16], *ptr = buf;
989 
990 	BT_DBG("%p addr %d credits %d", s, addr, credits);
991 
992 	hdr = (void *) ptr; ptr += sizeof(*hdr);
993 	hdr->addr = addr;
994 	hdr->ctrl = __ctrl(RFCOMM_UIH, 1);
995 	hdr->len  = __len8(0);
996 
997 	*ptr = credits; ptr++;
998 
999 	*ptr = __fcs(buf); ptr++;
1000 
1001 	return rfcomm_send_frame(s, buf, ptr - buf);
1002 }
1003 
1004 static void rfcomm_make_uih(struct sk_buff *skb, u8 addr)
1005 {
1006 	struct rfcomm_hdr *hdr;
1007 	int len = skb->len;
1008 	u8 *crc;
1009 
1010 	if (len > 127) {
1011 		hdr = (void *) skb_push(skb, 4);
1012 		put_unaligned(htobs(__len16(len)), (u16 *) &hdr->len);
1013 	} else {
1014 		hdr = (void *) skb_push(skb, 3);
1015 		hdr->len = __len8(len);
1016 	}
1017 	hdr->addr = addr;
1018 	hdr->ctrl = __ctrl(RFCOMM_UIH, 0);
1019 
1020 	crc = skb_put(skb, 1);
1021 	*crc = __fcs((void *) hdr);
1022 }
1023 
1024 /* ---- RFCOMM frame reception ---- */
1025 static int rfcomm_recv_ua(struct rfcomm_session *s, u8 dlci)
1026 {
1027 	BT_DBG("session %p state %ld dlci %d", s, s->state, dlci);
1028 
1029 	if (dlci) {
1030 		/* Data channel */
1031 		struct rfcomm_dlc *d = rfcomm_dlc_get(s, dlci);
1032 		if (!d) {
1033 			rfcomm_send_dm(s, dlci);
1034 			return 0;
1035 		}
1036 
1037 		switch (d->state) {
1038 		case BT_CONNECT:
1039 			rfcomm_dlc_clear_timer(d);
1040 
1041 			rfcomm_dlc_lock(d);
1042 			d->state = BT_CONNECTED;
1043 			d->state_change(d, 0);
1044 			rfcomm_dlc_unlock(d);
1045 
1046 			rfcomm_send_msc(s, 1, dlci, d->v24_sig);
1047 			break;
1048 
1049 		case BT_DISCONN:
1050 			d->state = BT_CLOSED;
1051 			__rfcomm_dlc_close(d, 0);
1052 			break;
1053 		}
1054 	} else {
1055 		/* Control channel */
1056 		switch (s->state) {
1057 		case BT_CONNECT:
1058 			s->state = BT_CONNECTED;
1059 			rfcomm_process_connect(s);
1060 			break;
1061 		}
1062 	}
1063 	return 0;
1064 }
1065 
1066 static int rfcomm_recv_dm(struct rfcomm_session *s, u8 dlci)
1067 {
1068 	int err = 0;
1069 
1070 	BT_DBG("session %p state %ld dlci %d", s, s->state, dlci);
1071 
1072 	if (dlci) {
1073 		/* Data DLC */
1074 		struct rfcomm_dlc *d = rfcomm_dlc_get(s, dlci);
1075 		if (d) {
1076 			if (d->state == BT_CONNECT || d->state == BT_CONFIG)
1077 				err = ECONNREFUSED;
1078 			else
1079 				err = ECONNRESET;
1080 
1081 			d->state = BT_CLOSED;
1082 			__rfcomm_dlc_close(d, err);
1083 		}
1084 	} else {
1085 		if (s->state == BT_CONNECT)
1086 			err = ECONNREFUSED;
1087 		else
1088 			err = ECONNRESET;
1089 
1090 		s->state = BT_CLOSED;
1091 		rfcomm_session_close(s, err);
1092 	}
1093 	return 0;
1094 }
1095 
1096 static int rfcomm_recv_disc(struct rfcomm_session *s, u8 dlci)
1097 {
1098 	int err = 0;
1099 
1100 	BT_DBG("session %p state %ld dlci %d", s, s->state, dlci);
1101 
1102 	if (dlci) {
1103 		struct rfcomm_dlc *d = rfcomm_dlc_get(s, dlci);
1104 		if (d) {
1105 			rfcomm_send_ua(s, dlci);
1106 
1107 			if (d->state == BT_CONNECT || d->state == BT_CONFIG)
1108 				err = ECONNREFUSED;
1109 			else
1110 				err = ECONNRESET;
1111 
1112 			d->state = BT_CLOSED;
1113 			__rfcomm_dlc_close(d, err);
1114 		} else
1115 			rfcomm_send_dm(s, dlci);
1116 
1117 	} else {
1118 		rfcomm_send_ua(s, 0);
1119 
1120 		if (s->state == BT_CONNECT)
1121 			err = ECONNREFUSED;
1122 		else
1123 			err = ECONNRESET;
1124 
1125 		s->state = BT_CLOSED;
1126 		rfcomm_session_close(s, err);
1127 	}
1128 
1129 	return 0;
1130 }
1131 
1132 static inline int rfcomm_check_link_mode(struct rfcomm_dlc *d)
1133 {
1134 	struct sock *sk = d->session->sock->sk;
1135 
1136 	if (d->link_mode & (RFCOMM_LM_ENCRYPT | RFCOMM_LM_SECURE)) {
1137 		if (!hci_conn_encrypt(l2cap_pi(sk)->conn->hcon))
1138 			return 1;
1139 	} else if (d->link_mode & RFCOMM_LM_AUTH) {
1140 		if (!hci_conn_auth(l2cap_pi(sk)->conn->hcon))
1141 			return 1;
1142 	}
1143 
1144 	return 0;
1145 }
1146 
1147 static void rfcomm_dlc_accept(struct rfcomm_dlc *d)
1148 {
1149 	BT_DBG("dlc %p", d);
1150 
1151 	rfcomm_send_ua(d->session, d->dlci);
1152 
1153 	rfcomm_dlc_lock(d);
1154 	d->state = BT_CONNECTED;
1155 	d->state_change(d, 0);
1156 	rfcomm_dlc_unlock(d);
1157 
1158 	rfcomm_send_msc(d->session, 1, d->dlci, d->v24_sig);
1159 }
1160 
1161 static int rfcomm_recv_sabm(struct rfcomm_session *s, u8 dlci)
1162 {
1163 	struct rfcomm_dlc *d;
1164 	u8 channel;
1165 
1166 	BT_DBG("session %p state %ld dlci %d", s, s->state, dlci);
1167 
1168 	if (!dlci) {
1169 		rfcomm_send_ua(s, 0);
1170 
1171 		if (s->state == BT_OPEN) {
1172 			s->state = BT_CONNECTED;
1173 			rfcomm_process_connect(s);
1174 		}
1175 		return 0;
1176 	}
1177 
1178 	/* Check if DLC exists */
1179 	d = rfcomm_dlc_get(s, dlci);
1180 	if (d) {
1181 		if (d->state == BT_OPEN) {
1182 			/* DLC was previously opened by PN request */
1183 			if (rfcomm_check_link_mode(d)) {
1184 				set_bit(RFCOMM_AUTH_PENDING, &d->flags);
1185 				rfcomm_dlc_set_timer(d, RFCOMM_AUTH_TIMEOUT);
1186 				return 0;
1187 			}
1188 
1189 			rfcomm_dlc_accept(d);
1190 		}
1191 		return 0;
1192 	}
1193 
1194 	/* Notify socket layer about incoming connection */
1195 	channel = __srv_channel(dlci);
1196 	if (rfcomm_connect_ind(s, channel, &d)) {
1197 		d->dlci = dlci;
1198 		d->addr = __addr(s->initiator, dlci);
1199 		rfcomm_dlc_link(s, d);
1200 
1201 		if (rfcomm_check_link_mode(d)) {
1202 			set_bit(RFCOMM_AUTH_PENDING, &d->flags);
1203 			rfcomm_dlc_set_timer(d, RFCOMM_AUTH_TIMEOUT);
1204 			return 0;
1205 		}
1206 
1207 		rfcomm_dlc_accept(d);
1208 	} else {
1209 		rfcomm_send_dm(s, dlci);
1210 	}
1211 
1212 	return 0;
1213 }
1214 
1215 static int rfcomm_apply_pn(struct rfcomm_dlc *d, int cr, struct rfcomm_pn *pn)
1216 {
1217 	struct rfcomm_session *s = d->session;
1218 
1219 	BT_DBG("dlc %p state %ld dlci %d mtu %d fc 0x%x credits %d",
1220 			d, d->state, d->dlci, pn->mtu, pn->flow_ctrl, pn->credits);
1221 
1222 	if (pn->flow_ctrl == 0xf0 || pn->flow_ctrl == 0xe0) {
1223 		d->cfc = s->cfc = RFCOMM_CFC_ENABLED;
1224 		d->tx_credits = pn->credits;
1225 	} else {
1226 		d->cfc = s->cfc = RFCOMM_CFC_DISABLED;
1227 		set_bit(RFCOMM_TX_THROTTLED, &d->flags);
1228 	}
1229 
1230 	d->priority = pn->priority;
1231 
1232 	d->mtu = s->mtu = btohs(pn->mtu);
1233 
1234 	return 0;
1235 }
1236 
1237 static int rfcomm_recv_pn(struct rfcomm_session *s, int cr, struct sk_buff *skb)
1238 {
1239 	struct rfcomm_pn *pn = (void *) skb->data;
1240 	struct rfcomm_dlc *d;
1241 	u8 dlci = pn->dlci;
1242 
1243 	BT_DBG("session %p state %ld dlci %d", s, s->state, dlci);
1244 
1245 	if (!dlci)
1246 		return 0;
1247 
1248 	d = rfcomm_dlc_get(s, dlci);
1249 	if (d) {
1250 		if (cr) {
1251 			/* PN request */
1252 			rfcomm_apply_pn(d, cr, pn);
1253 			rfcomm_send_pn(s, 0, d);
1254 		} else {
1255 			/* PN response */
1256 			switch (d->state) {
1257 			case BT_CONFIG:
1258 				rfcomm_apply_pn(d, cr, pn);
1259 
1260 				d->state = BT_CONNECT;
1261 				rfcomm_send_sabm(s, d->dlci);
1262 				break;
1263 			}
1264 		}
1265 	} else {
1266 		u8 channel = __srv_channel(dlci);
1267 
1268 		if (!cr)
1269 			return 0;
1270 
1271 		/* PN request for non existing DLC.
1272 		 * Assume incoming connection. */
1273 		if (rfcomm_connect_ind(s, channel, &d)) {
1274 			d->dlci = dlci;
1275 			d->addr = __addr(s->initiator, dlci);
1276 			rfcomm_dlc_link(s, d);
1277 
1278 			rfcomm_apply_pn(d, cr, pn);
1279 
1280 			d->state = BT_OPEN;
1281 			rfcomm_send_pn(s, 0, d);
1282 		} else {
1283 			rfcomm_send_dm(s, dlci);
1284 		}
1285 	}
1286 	return 0;
1287 }
1288 
1289 static int rfcomm_recv_rpn(struct rfcomm_session *s, int cr, int len, struct sk_buff *skb)
1290 {
1291 	struct rfcomm_rpn *rpn = (void *) skb->data;
1292 	u8 dlci = __get_dlci(rpn->dlci);
1293 
1294 	u8 bit_rate  = 0;
1295 	u8 data_bits = 0;
1296 	u8 stop_bits = 0;
1297 	u8 parity    = 0;
1298 	u8 flow_ctrl = 0;
1299 	u8 xon_char  = 0;
1300 	u8 xoff_char = 0;
1301 	u16 rpn_mask = RFCOMM_RPN_PM_ALL;
1302 
1303 	BT_DBG("dlci %d cr %d len 0x%x bitr 0x%x line 0x%x flow 0x%x xonc 0x%x xoffc 0x%x pm 0x%x",
1304 		dlci, cr, len, rpn->bit_rate, rpn->line_settings, rpn->flow_ctrl,
1305 		rpn->xon_char, rpn->xoff_char, rpn->param_mask);
1306 
1307 	if (!cr)
1308 		return 0;
1309 
1310 	if (len == 1) {
1311 		/* This is a request, return default settings */
1312 		bit_rate  = RFCOMM_RPN_BR_115200;
1313 		data_bits = RFCOMM_RPN_DATA_8;
1314 		stop_bits = RFCOMM_RPN_STOP_1;
1315 		parity    = RFCOMM_RPN_PARITY_NONE;
1316 		flow_ctrl = RFCOMM_RPN_FLOW_NONE;
1317 		xon_char  = RFCOMM_RPN_XON_CHAR;
1318 		xoff_char = RFCOMM_RPN_XOFF_CHAR;
1319 		goto rpn_out;
1320 	}
1321 
1322 	/* Check for sane values, ignore/accept bit_rate, 8 bits, 1 stop bit,
1323 	 * no parity, no flow control lines, normal XON/XOFF chars */
1324 
1325 	if (rpn->param_mask & RFCOMM_RPN_PM_BITRATE) {
1326 		bit_rate = rpn->bit_rate;
1327 		if (bit_rate != RFCOMM_RPN_BR_115200) {
1328 			BT_DBG("RPN bit rate mismatch 0x%x", bit_rate);
1329 			bit_rate = RFCOMM_RPN_BR_115200;
1330 			rpn_mask ^= RFCOMM_RPN_PM_BITRATE;
1331 		}
1332 	}
1333 
1334 	if (rpn->param_mask & RFCOMM_RPN_PM_DATA) {
1335 		data_bits = __get_rpn_data_bits(rpn->line_settings);
1336 		if (data_bits != RFCOMM_RPN_DATA_8) {
1337 			BT_DBG("RPN data bits mismatch 0x%x", data_bits);
1338 			data_bits = RFCOMM_RPN_DATA_8;
1339 			rpn_mask ^= RFCOMM_RPN_PM_DATA;
1340 		}
1341 	}
1342 
1343 	if (rpn->param_mask & RFCOMM_RPN_PM_STOP) {
1344 		stop_bits = __get_rpn_stop_bits(rpn->line_settings);
1345 		if (stop_bits != RFCOMM_RPN_STOP_1) {
1346 			BT_DBG("RPN stop bits mismatch 0x%x", stop_bits);
1347 			stop_bits = RFCOMM_RPN_STOP_1;
1348 			rpn_mask ^= RFCOMM_RPN_PM_STOP;
1349 		}
1350 	}
1351 
1352 	if (rpn->param_mask & RFCOMM_RPN_PM_PARITY) {
1353 		parity = __get_rpn_parity(rpn->line_settings);
1354 		if (parity != RFCOMM_RPN_PARITY_NONE) {
1355 			BT_DBG("RPN parity mismatch 0x%x", parity);
1356 			parity = RFCOMM_RPN_PARITY_NONE;
1357 			rpn_mask ^= RFCOMM_RPN_PM_PARITY;
1358 		}
1359 	}
1360 
1361 	if (rpn->param_mask & RFCOMM_RPN_PM_FLOW) {
1362 		flow_ctrl = rpn->flow_ctrl;
1363 		if (flow_ctrl != RFCOMM_RPN_FLOW_NONE) {
1364 			BT_DBG("RPN flow ctrl mismatch 0x%x", flow_ctrl);
1365 			flow_ctrl = RFCOMM_RPN_FLOW_NONE;
1366 			rpn_mask ^= RFCOMM_RPN_PM_FLOW;
1367 		}
1368 	}
1369 
1370 	if (rpn->param_mask & RFCOMM_RPN_PM_XON) {
1371 		xon_char = rpn->xon_char;
1372 		if (xon_char != RFCOMM_RPN_XON_CHAR) {
1373 			BT_DBG("RPN XON char mismatch 0x%x", xon_char);
1374 			xon_char = RFCOMM_RPN_XON_CHAR;
1375 			rpn_mask ^= RFCOMM_RPN_PM_XON;
1376 		}
1377 	}
1378 
1379 	if (rpn->param_mask & RFCOMM_RPN_PM_XOFF) {
1380 		xoff_char = rpn->xoff_char;
1381 		if (xoff_char != RFCOMM_RPN_XOFF_CHAR) {
1382 			BT_DBG("RPN XOFF char mismatch 0x%x", xoff_char);
1383 			xoff_char = RFCOMM_RPN_XOFF_CHAR;
1384 			rpn_mask ^= RFCOMM_RPN_PM_XOFF;
1385 		}
1386 	}
1387 
1388 rpn_out:
1389 	rfcomm_send_rpn(s, 0, dlci, bit_rate, data_bits, stop_bits,
1390 			parity, flow_ctrl, xon_char, xoff_char, rpn_mask);
1391 
1392 	return 0;
1393 }
1394 
1395 static int rfcomm_recv_rls(struct rfcomm_session *s, int cr, struct sk_buff *skb)
1396 {
1397 	struct rfcomm_rls *rls = (void *) skb->data;
1398 	u8 dlci = __get_dlci(rls->dlci);
1399 
1400 	BT_DBG("dlci %d cr %d status 0x%x", dlci, cr, rls->status);
1401 
1402 	if (!cr)
1403 		return 0;
1404 
1405 	/* We should probably do something with this information here. But
1406 	 * for now it's sufficient just to reply -- Bluetooth 1.1 says it's
1407 	 * mandatory to recognise and respond to RLS */
1408 
1409 	rfcomm_send_rls(s, 0, dlci, rls->status);
1410 
1411 	return 0;
1412 }
1413 
1414 static int rfcomm_recv_msc(struct rfcomm_session *s, int cr, struct sk_buff *skb)
1415 {
1416 	struct rfcomm_msc *msc = (void *) skb->data;
1417 	struct rfcomm_dlc *d;
1418 	u8 dlci = __get_dlci(msc->dlci);
1419 
1420 	BT_DBG("dlci %d cr %d v24 0x%x", dlci, cr, msc->v24_sig);
1421 
1422 	d = rfcomm_dlc_get(s, dlci);
1423 	if (!d)
1424 		return 0;
1425 
1426 	if (cr) {
1427 		if (msc->v24_sig & RFCOMM_V24_FC && !d->cfc)
1428 			set_bit(RFCOMM_TX_THROTTLED, &d->flags);
1429 		else
1430 			clear_bit(RFCOMM_TX_THROTTLED, &d->flags);
1431 
1432 		rfcomm_dlc_lock(d);
1433 		if (d->modem_status)
1434 			d->modem_status(d, msc->v24_sig);
1435 		rfcomm_dlc_unlock(d);
1436 
1437 		rfcomm_send_msc(s, 0, dlci, msc->v24_sig);
1438 
1439 		d->mscex |= RFCOMM_MSCEX_RX;
1440 	} else
1441 		d->mscex |= RFCOMM_MSCEX_TX;
1442 
1443 	return 0;
1444 }
1445 
1446 static int rfcomm_recv_mcc(struct rfcomm_session *s, struct sk_buff *skb)
1447 {
1448 	struct rfcomm_mcc *mcc = (void *) skb->data;
1449 	u8 type, cr, len;
1450 
1451 	cr   = __test_cr(mcc->type);
1452 	type = __get_mcc_type(mcc->type);
1453 	len  = __get_mcc_len(mcc->len);
1454 
1455 	BT_DBG("%p type 0x%x cr %d", s, type, cr);
1456 
1457 	skb_pull(skb, 2);
1458 
1459 	switch (type) {
1460 	case RFCOMM_PN:
1461 		rfcomm_recv_pn(s, cr, skb);
1462 		break;
1463 
1464 	case RFCOMM_RPN:
1465 		rfcomm_recv_rpn(s, cr, len, skb);
1466 		break;
1467 
1468 	case RFCOMM_RLS:
1469 		rfcomm_recv_rls(s, cr, skb);
1470 		break;
1471 
1472 	case RFCOMM_MSC:
1473 		rfcomm_recv_msc(s, cr, skb);
1474 		break;
1475 
1476 	case RFCOMM_FCOFF:
1477 		if (cr) {
1478 			set_bit(RFCOMM_TX_THROTTLED, &s->flags);
1479 			rfcomm_send_fcoff(s, 0);
1480 		}
1481 		break;
1482 
1483 	case RFCOMM_FCON:
1484 		if (cr) {
1485 			clear_bit(RFCOMM_TX_THROTTLED, &s->flags);
1486 			rfcomm_send_fcon(s, 0);
1487 		}
1488 		break;
1489 
1490 	case RFCOMM_TEST:
1491 		if (cr)
1492 			rfcomm_send_test(s, 0, skb->data, skb->len);
1493 		break;
1494 
1495 	case RFCOMM_NSC:
1496 		break;
1497 
1498 	default:
1499 		BT_ERR("Unknown control type 0x%02x", type);
1500 		rfcomm_send_nsc(s, cr, type);
1501 		break;
1502 	}
1503 	return 0;
1504 }
1505 
1506 static int rfcomm_recv_data(struct rfcomm_session *s, u8 dlci, int pf, struct sk_buff *skb)
1507 {
1508 	struct rfcomm_dlc *d;
1509 
1510 	BT_DBG("session %p state %ld dlci %d pf %d", s, s->state, dlci, pf);
1511 
1512 	d = rfcomm_dlc_get(s, dlci);
1513 	if (!d) {
1514 		rfcomm_send_dm(s, dlci);
1515 		goto drop;
1516 	}
1517 
1518 	if (pf && d->cfc) {
1519 		u8 credits = *(u8 *) skb->data; skb_pull(skb, 1);
1520 
1521 		d->tx_credits += credits;
1522 		if (d->tx_credits)
1523 			clear_bit(RFCOMM_TX_THROTTLED, &d->flags);
1524 	}
1525 
1526 	if (skb->len && d->state == BT_CONNECTED) {
1527 		rfcomm_dlc_lock(d);
1528 		d->rx_credits--;
1529 		d->data_ready(d, skb);
1530 		rfcomm_dlc_unlock(d);
1531 		return 0;
1532 	}
1533 
1534 drop:
1535 	kfree_skb(skb);
1536 	return 0;
1537 }
1538 
1539 static int rfcomm_recv_frame(struct rfcomm_session *s, struct sk_buff *skb)
1540 {
1541 	struct rfcomm_hdr *hdr = (void *) skb->data;
1542 	u8 type, dlci, fcs;
1543 
1544 	dlci = __get_dlci(hdr->addr);
1545 	type = __get_type(hdr->ctrl);
1546 
1547 	/* Trim FCS */
1548 	skb->len--; skb->tail--;
1549 	fcs = *(u8 *) skb->tail;
1550 
1551 	if (__check_fcs(skb->data, type, fcs)) {
1552 		BT_ERR("bad checksum in packet");
1553 		kfree_skb(skb);
1554 		return -EILSEQ;
1555 	}
1556 
1557 	if (__test_ea(hdr->len))
1558 		skb_pull(skb, 3);
1559 	else
1560 		skb_pull(skb, 4);
1561 
1562 	switch (type) {
1563 	case RFCOMM_SABM:
1564 		if (__test_pf(hdr->ctrl))
1565 			rfcomm_recv_sabm(s, dlci);
1566 		break;
1567 
1568 	case RFCOMM_DISC:
1569 		if (__test_pf(hdr->ctrl))
1570 			rfcomm_recv_disc(s, dlci);
1571 		break;
1572 
1573 	case RFCOMM_UA:
1574 		if (__test_pf(hdr->ctrl))
1575 			rfcomm_recv_ua(s, dlci);
1576 		break;
1577 
1578 	case RFCOMM_DM:
1579 		rfcomm_recv_dm(s, dlci);
1580 		break;
1581 
1582 	case RFCOMM_UIH:
1583 		if (dlci)
1584 			return rfcomm_recv_data(s, dlci, __test_pf(hdr->ctrl), skb);
1585 
1586 		rfcomm_recv_mcc(s, skb);
1587 		break;
1588 
1589 	default:
1590 		BT_ERR("Unknown packet type 0x%02x\n", type);
1591 		break;
1592 	}
1593 	kfree_skb(skb);
1594 	return 0;
1595 }
1596 
1597 /* ---- Connection and data processing ---- */
1598 
1599 static void rfcomm_process_connect(struct rfcomm_session *s)
1600 {
1601 	struct rfcomm_dlc *d;
1602 	struct list_head *p, *n;
1603 
1604 	BT_DBG("session %p state %ld", s, s->state);
1605 
1606 	list_for_each_safe(p, n, &s->dlcs) {
1607 		d = list_entry(p, struct rfcomm_dlc, list);
1608 		if (d->state == BT_CONFIG) {
1609 			d->mtu = s->mtu;
1610 			rfcomm_send_pn(s, 1, d);
1611 		}
1612 	}
1613 }
1614 
1615 /* Send data queued for the DLC.
1616  * Return number of frames left in the queue.
1617  */
1618 static inline int rfcomm_process_tx(struct rfcomm_dlc *d)
1619 {
1620 	struct sk_buff *skb;
1621 	int err;
1622 
1623 	BT_DBG("dlc %p state %ld cfc %d rx_credits %d tx_credits %d",
1624 			d, d->state, d->cfc, d->rx_credits, d->tx_credits);
1625 
1626 	/* Send pending MSC */
1627 	if (test_and_clear_bit(RFCOMM_MSC_PENDING, &d->flags))
1628 		rfcomm_send_msc(d->session, 1, d->dlci, d->v24_sig);
1629 
1630 	if (d->cfc) {
1631 		/* CFC enabled.
1632 		 * Give them some credits */
1633 		if (!test_bit(RFCOMM_RX_THROTTLED, &d->flags) &&
1634 			       	d->rx_credits <= (d->cfc >> 2)) {
1635 			rfcomm_send_credits(d->session, d->addr, d->cfc - d->rx_credits);
1636 			d->rx_credits = d->cfc;
1637 		}
1638 	} else {
1639 		/* CFC disabled.
1640 		 * Give ourselves some credits */
1641 		d->tx_credits = 5;
1642 	}
1643 
1644 	if (test_bit(RFCOMM_TX_THROTTLED, &d->flags))
1645 		return skb_queue_len(&d->tx_queue);
1646 
1647 	while (d->tx_credits && (skb = skb_dequeue(&d->tx_queue))) {
1648 		err = rfcomm_send_frame(d->session, skb->data, skb->len);
1649 		if (err < 0) {
1650 			skb_queue_head(&d->tx_queue, skb);
1651 			break;
1652 		}
1653 		kfree_skb(skb);
1654 		d->tx_credits--;
1655 	}
1656 
1657 	if (d->cfc && !d->tx_credits) {
1658 		/* We're out of TX credits.
1659 		 * Set TX_THROTTLED flag to avoid unnesary wakeups by dlc_send. */
1660 		set_bit(RFCOMM_TX_THROTTLED, &d->flags);
1661 	}
1662 
1663 	return skb_queue_len(&d->tx_queue);
1664 }
1665 
1666 static inline void rfcomm_process_dlcs(struct rfcomm_session *s)
1667 {
1668 	struct rfcomm_dlc *d;
1669 	struct list_head *p, *n;
1670 
1671 	BT_DBG("session %p state %ld", s, s->state);
1672 
1673 	list_for_each_safe(p, n, &s->dlcs) {
1674 		d = list_entry(p, struct rfcomm_dlc, list);
1675 
1676 		if (test_bit(RFCOMM_TIMED_OUT, &d->flags)) {
1677 			__rfcomm_dlc_close(d, ETIMEDOUT);
1678 			continue;
1679 		}
1680 
1681 		if (test_and_clear_bit(RFCOMM_AUTH_ACCEPT, &d->flags)) {
1682 			rfcomm_dlc_clear_timer(d);
1683 			rfcomm_dlc_accept(d);
1684 			if (d->link_mode & RFCOMM_LM_SECURE) {
1685 				struct sock *sk = s->sock->sk;
1686 				hci_conn_change_link_key(l2cap_pi(sk)->conn->hcon);
1687 			}
1688 			continue;
1689 		} else if (test_and_clear_bit(RFCOMM_AUTH_REJECT, &d->flags)) {
1690 			rfcomm_dlc_clear_timer(d);
1691 			rfcomm_send_dm(s, d->dlci);
1692 			__rfcomm_dlc_close(d, ECONNREFUSED);
1693 			continue;
1694 		}
1695 
1696 		if (test_bit(RFCOMM_TX_THROTTLED, &s->flags))
1697 			continue;
1698 
1699 		if ((d->state == BT_CONNECTED || d->state == BT_DISCONN) &&
1700 				d->mscex == RFCOMM_MSCEX_OK)
1701 			rfcomm_process_tx(d);
1702 	}
1703 }
1704 
1705 static inline void rfcomm_process_rx(struct rfcomm_session *s)
1706 {
1707 	struct socket *sock = s->sock;
1708 	struct sock *sk = sock->sk;
1709 	struct sk_buff *skb;
1710 
1711 	BT_DBG("session %p state %ld qlen %d", s, s->state, skb_queue_len(&sk->sk_receive_queue));
1712 
1713 	/* Get data directly from socket receive queue without copying it. */
1714 	while ((skb = skb_dequeue(&sk->sk_receive_queue))) {
1715 		skb_orphan(skb);
1716 		rfcomm_recv_frame(s, skb);
1717 	}
1718 
1719 	if (sk->sk_state == BT_CLOSED) {
1720 		if (!s->initiator)
1721 			rfcomm_session_put(s);
1722 
1723 		rfcomm_session_close(s, sk->sk_err);
1724 	}
1725 }
1726 
1727 static inline void rfcomm_accept_connection(struct rfcomm_session *s)
1728 {
1729 	struct socket *sock = s->sock, *nsock;
1730 	int err;
1731 
1732 	/* Fast check for a new connection.
1733 	 * Avoids unnesesary socket allocations. */
1734 	if (list_empty(&bt_sk(sock->sk)->accept_q))
1735 		return;
1736 
1737 	BT_DBG("session %p", s);
1738 
1739 	if (sock_create_lite(PF_BLUETOOTH, sock->type, BTPROTO_L2CAP, &nsock))
1740 		return;
1741 
1742 	nsock->ops  = sock->ops;
1743 
1744 	__module_get(nsock->ops->owner);
1745 
1746 	err = sock->ops->accept(sock, nsock, O_NONBLOCK);
1747 	if (err < 0) {
1748 		sock_release(nsock);
1749 		return;
1750 	}
1751 
1752 	/* Set our callbacks */
1753 	nsock->sk->sk_data_ready   = rfcomm_l2data_ready;
1754 	nsock->sk->sk_state_change = rfcomm_l2state_change;
1755 
1756 	s = rfcomm_session_add(nsock, BT_OPEN);
1757 	if (s) {
1758 		rfcomm_session_hold(s);
1759 		rfcomm_schedule(RFCOMM_SCHED_RX);
1760 	} else
1761 		sock_release(nsock);
1762 }
1763 
1764 static inline void rfcomm_check_connection(struct rfcomm_session *s)
1765 {
1766 	struct sock *sk = s->sock->sk;
1767 
1768 	BT_DBG("%p state %ld", s, s->state);
1769 
1770 	switch(sk->sk_state) {
1771 	case BT_CONNECTED:
1772 		s->state = BT_CONNECT;
1773 
1774 		/* We can adjust MTU on outgoing sessions.
1775 		 * L2CAP MTU minus UIH header and FCS. */
1776 		s->mtu = min(l2cap_pi(sk)->omtu, l2cap_pi(sk)->imtu) - 5;
1777 
1778 		rfcomm_send_sabm(s, 0);
1779 		break;
1780 
1781 	case BT_CLOSED:
1782 		s->state = BT_CLOSED;
1783 		rfcomm_session_close(s, sk->sk_err);
1784 		break;
1785 	}
1786 }
1787 
1788 static inline void rfcomm_process_sessions(void)
1789 {
1790 	struct list_head *p, *n;
1791 
1792 	rfcomm_lock();
1793 
1794 	list_for_each_safe(p, n, &session_list) {
1795 		struct rfcomm_session *s;
1796 		s = list_entry(p, struct rfcomm_session, list);
1797 
1798 		if (s->state == BT_LISTEN) {
1799 			rfcomm_accept_connection(s);
1800 			continue;
1801 		}
1802 
1803 		rfcomm_session_hold(s);
1804 
1805 		switch (s->state) {
1806 		case BT_BOUND:
1807 			rfcomm_check_connection(s);
1808 			break;
1809 
1810 		default:
1811 			rfcomm_process_rx(s);
1812 			break;
1813 		}
1814 
1815 		rfcomm_process_dlcs(s);
1816 
1817 		rfcomm_session_put(s);
1818 	}
1819 
1820 	rfcomm_unlock();
1821 }
1822 
1823 static void rfcomm_worker(void)
1824 {
1825 	BT_DBG("");
1826 
1827 	while (!atomic_read(&terminate)) {
1828 		if (!test_bit(RFCOMM_SCHED_WAKEUP, &rfcomm_event)) {
1829 			/* No pending events. Let's sleep.
1830 			 * Incoming connections and data will wake us up. */
1831 			set_current_state(TASK_INTERRUPTIBLE);
1832 			schedule();
1833 		}
1834 
1835 		/* Process stuff */
1836 		clear_bit(RFCOMM_SCHED_WAKEUP, &rfcomm_event);
1837 		rfcomm_process_sessions();
1838 	}
1839 	set_current_state(TASK_RUNNING);
1840 	return;
1841 }
1842 
1843 static int rfcomm_add_listener(bdaddr_t *ba)
1844 {
1845 	struct sockaddr_l2 addr;
1846 	struct socket *sock;
1847 	struct sock *sk;
1848 	struct rfcomm_session *s;
1849 	int    err = 0;
1850 
1851 	/* Create socket */
1852 	err = rfcomm_l2sock_create(&sock);
1853 	if (err < 0) {
1854 		BT_ERR("Create socket failed %d", err);
1855 		return err;
1856 	}
1857 
1858 	/* Bind socket */
1859 	bacpy(&addr.l2_bdaddr, ba);
1860 	addr.l2_family = AF_BLUETOOTH;
1861 	addr.l2_psm    = htobs(RFCOMM_PSM);
1862 	err = sock->ops->bind(sock, (struct sockaddr *) &addr, sizeof(addr));
1863 	if (err < 0) {
1864 		BT_ERR("Bind failed %d", err);
1865 		goto failed;
1866 	}
1867 
1868 	/* Set L2CAP options */
1869 	sk = sock->sk;
1870 	lock_sock(sk);
1871 	l2cap_pi(sk)->imtu = RFCOMM_MAX_L2CAP_MTU;
1872 	release_sock(sk);
1873 
1874 	/* Start listening on the socket */
1875 	err = sock->ops->listen(sock, 10);
1876 	if (err) {
1877 		BT_ERR("Listen failed %d", err);
1878 		goto failed;
1879 	}
1880 
1881 	/* Add listening session */
1882 	s = rfcomm_session_add(sock, BT_LISTEN);
1883 	if (!s)
1884 		goto failed;
1885 
1886 	rfcomm_session_hold(s);
1887 	return 0;
1888 failed:
1889 	sock_release(sock);
1890 	return err;
1891 }
1892 
1893 static void rfcomm_kill_listener(void)
1894 {
1895 	struct rfcomm_session *s;
1896 	struct list_head *p, *n;
1897 
1898 	BT_DBG("");
1899 
1900 	list_for_each_safe(p, n, &session_list) {
1901 		s = list_entry(p, struct rfcomm_session, list);
1902 		rfcomm_session_del(s);
1903 	}
1904 }
1905 
1906 static int rfcomm_run(void *unused)
1907 {
1908 	rfcomm_thread = current;
1909 
1910 	atomic_inc(&running);
1911 
1912 	daemonize("krfcommd");
1913 	set_user_nice(current, -10);
1914 	current->flags |= PF_NOFREEZE;
1915 
1916 	BT_DBG("");
1917 
1918 	rfcomm_add_listener(BDADDR_ANY);
1919 
1920 	rfcomm_worker();
1921 
1922 	rfcomm_kill_listener();
1923 
1924 	atomic_dec(&running);
1925 	return 0;
1926 }
1927 
1928 static void rfcomm_auth_cfm(struct hci_conn *conn, u8 status)
1929 {
1930 	struct rfcomm_session *s;
1931 	struct rfcomm_dlc *d;
1932 	struct list_head *p, *n;
1933 
1934 	BT_DBG("conn %p status 0x%02x", conn, status);
1935 
1936 	s = rfcomm_session_get(&conn->hdev->bdaddr, &conn->dst);
1937 	if (!s)
1938 		return;
1939 
1940 	rfcomm_session_hold(s);
1941 
1942 	list_for_each_safe(p, n, &s->dlcs) {
1943 		d = list_entry(p, struct rfcomm_dlc, list);
1944 
1945 		if (d->link_mode & (RFCOMM_LM_ENCRYPT | RFCOMM_LM_SECURE))
1946 			continue;
1947 
1948 		if (!test_and_clear_bit(RFCOMM_AUTH_PENDING, &d->flags))
1949 			continue;
1950 
1951 		if (!status)
1952 			set_bit(RFCOMM_AUTH_ACCEPT, &d->flags);
1953 		else
1954 			set_bit(RFCOMM_AUTH_REJECT, &d->flags);
1955 	}
1956 
1957 	rfcomm_session_put(s);
1958 
1959 	rfcomm_schedule(RFCOMM_SCHED_AUTH);
1960 }
1961 
1962 static void rfcomm_encrypt_cfm(struct hci_conn *conn, u8 status, u8 encrypt)
1963 {
1964 	struct rfcomm_session *s;
1965 	struct rfcomm_dlc *d;
1966 	struct list_head *p, *n;
1967 
1968 	BT_DBG("conn %p status 0x%02x encrypt 0x%02x", conn, status, encrypt);
1969 
1970 	s = rfcomm_session_get(&conn->hdev->bdaddr, &conn->dst);
1971 	if (!s)
1972 		return;
1973 
1974 	rfcomm_session_hold(s);
1975 
1976 	list_for_each_safe(p, n, &s->dlcs) {
1977 		d = list_entry(p, struct rfcomm_dlc, list);
1978 
1979 		if (!test_and_clear_bit(RFCOMM_AUTH_PENDING, &d->flags))
1980 			continue;
1981 
1982 		if (!status && encrypt)
1983 			set_bit(RFCOMM_AUTH_ACCEPT, &d->flags);
1984 		else
1985 			set_bit(RFCOMM_AUTH_REJECT, &d->flags);
1986 	}
1987 
1988 	rfcomm_session_put(s);
1989 
1990 	rfcomm_schedule(RFCOMM_SCHED_AUTH);
1991 }
1992 
1993 static struct hci_cb rfcomm_cb = {
1994 	.name		= "RFCOMM",
1995 	.auth_cfm	= rfcomm_auth_cfm,
1996 	.encrypt_cfm	= rfcomm_encrypt_cfm
1997 };
1998 
1999 static ssize_t rfcomm_dlc_sysfs_show(struct class *dev, char *buf)
2000 {
2001 	struct rfcomm_session *s;
2002 	struct list_head *pp, *p;
2003 	char *str = buf;
2004 
2005 	rfcomm_lock();
2006 
2007 	list_for_each(p, &session_list) {
2008 		s = list_entry(p, struct rfcomm_session, list);
2009 		list_for_each(pp, &s->dlcs) {
2010 			struct sock *sk = s->sock->sk;
2011 			struct rfcomm_dlc *d = list_entry(pp, struct rfcomm_dlc, list);
2012 
2013 			str += sprintf(str, "%s %s %ld %d %d %d %d\n",
2014 					batostr(&bt_sk(sk)->src), batostr(&bt_sk(sk)->dst),
2015 					d->state, d->dlci, d->mtu, d->rx_credits, d->tx_credits);
2016 		}
2017 	}
2018 
2019 	rfcomm_unlock();
2020 
2021 	return (str - buf);
2022 }
2023 
2024 static CLASS_ATTR(rfcomm_dlc, S_IRUGO, rfcomm_dlc_sysfs_show, NULL);
2025 
2026 /* ---- Initialization ---- */
2027 static int __init rfcomm_init(void)
2028 {
2029 	l2cap_load();
2030 
2031 	hci_register_cb(&rfcomm_cb);
2032 
2033 	kernel_thread(rfcomm_run, NULL, CLONE_KERNEL);
2034 
2035 	class_create_file(&bt_class, &class_attr_rfcomm_dlc);
2036 
2037 	rfcomm_init_sockets();
2038 
2039 #ifdef CONFIG_BT_RFCOMM_TTY
2040 	rfcomm_init_ttys();
2041 #endif
2042 
2043 	BT_INFO("RFCOMM ver %s", VERSION);
2044 
2045 	return 0;
2046 }
2047 
2048 static void __exit rfcomm_exit(void)
2049 {
2050 	class_remove_file(&bt_class, &class_attr_rfcomm_dlc);
2051 
2052 	hci_unregister_cb(&rfcomm_cb);
2053 
2054 	/* Terminate working thread.
2055 	 * ie. Set terminate flag and wake it up */
2056 	atomic_inc(&terminate);
2057 	rfcomm_schedule(RFCOMM_SCHED_STATE);
2058 
2059 	/* Wait until thread is running */
2060 	while (atomic_read(&running))
2061 		schedule();
2062 
2063 #ifdef CONFIG_BT_RFCOMM_TTY
2064 	rfcomm_cleanup_ttys();
2065 #endif
2066 
2067 	rfcomm_cleanup_sockets();
2068 }
2069 
2070 module_init(rfcomm_init);
2071 module_exit(rfcomm_exit);
2072 
2073 MODULE_AUTHOR("Maxim Krasnyansky <maxk@qualcomm.com>, Marcel Holtmann <marcel@holtmann.org>");
2074 MODULE_DESCRIPTION("Bluetooth RFCOMM ver " VERSION);
2075 MODULE_VERSION(VERSION);
2076 MODULE_LICENSE("GPL");
2077 MODULE_ALIAS("bt-proto-3");
2078