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