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