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