]> Pileus Git - ~andy/linux/blob - net/bluetooth/l2cap_core.c
Merge branch 'board-specific' of git://github.com/hzhuang1/linux into late/board
[~andy/linux] / net / bluetooth / l2cap_core.c
1 /*
2    BlueZ - Bluetooth protocol stack for Linux
3    Copyright (C) 2000-2001 Qualcomm Incorporated
4    Copyright (C) 2009-2010 Gustavo F. Padovan <gustavo@padovan.org>
5    Copyright (C) 2010 Google Inc.
6    Copyright (C) 2011 ProFUSION Embedded Systems
7    Copyright (c) 2012 Code Aurora Forum.  All rights reserved.
8
9    Written 2000,2001 by Maxim Krasnyansky <maxk@qualcomm.com>
10
11    This program is free software; you can redistribute it and/or modify
12    it under the terms of the GNU General Public License version 2 as
13    published by the Free Software Foundation;
14
15    THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
16    OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17    FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT OF THIRD PARTY RIGHTS.
18    IN NO EVENT SHALL THE COPYRIGHT HOLDER(S) AND AUTHOR(S) BE LIABLE FOR ANY
19    CLAIM, OR ANY SPECIAL INDIRECT OR CONSEQUENTIAL DAMAGES, OR ANY DAMAGES
20    WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
21    ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
22    OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
23
24    ALL LIABILITY, INCLUDING LIABILITY FOR INFRINGEMENT OF ANY PATENTS,
25    COPYRIGHTS, TRADEMARKS OR OTHER RIGHTS, RELATING TO USE OF THIS
26    SOFTWARE IS DISCLAIMED.
27 */
28
29 /* Bluetooth L2CAP core. */
30
31 #include <linux/module.h>
32
33 #include <linux/types.h>
34 #include <linux/capability.h>
35 #include <linux/errno.h>
36 #include <linux/kernel.h>
37 #include <linux/sched.h>
38 #include <linux/slab.h>
39 #include <linux/poll.h>
40 #include <linux/fcntl.h>
41 #include <linux/init.h>
42 #include <linux/interrupt.h>
43 #include <linux/socket.h>
44 #include <linux/skbuff.h>
45 #include <linux/list.h>
46 #include <linux/device.h>
47 #include <linux/debugfs.h>
48 #include <linux/seq_file.h>
49 #include <linux/uaccess.h>
50 #include <linux/crc16.h>
51 #include <net/sock.h>
52
53 #include <asm/unaligned.h>
54
55 #include <net/bluetooth/bluetooth.h>
56 #include <net/bluetooth/hci_core.h>
57 #include <net/bluetooth/l2cap.h>
58 #include <net/bluetooth/smp.h>
59
60 bool disable_ertm;
61
62 static u32 l2cap_feat_mask = L2CAP_FEAT_FIXED_CHAN;
63 static u8 l2cap_fixed_chan[8] = { L2CAP_FC_L2CAP, };
64
65 static LIST_HEAD(chan_list);
66 static DEFINE_RWLOCK(chan_list_lock);
67
68 static struct sk_buff *l2cap_build_cmd(struct l2cap_conn *conn,
69                                 u8 code, u8 ident, u16 dlen, void *data);
70 static void l2cap_send_cmd(struct l2cap_conn *conn, u8 ident, u8 code, u16 len,
71                                                                 void *data);
72 static int l2cap_build_conf_req(struct l2cap_chan *chan, void *data);
73 static void l2cap_send_disconn_req(struct l2cap_conn *conn,
74                                    struct l2cap_chan *chan, int err);
75
76 /* ---- L2CAP channels ---- */
77
78 static struct l2cap_chan *__l2cap_get_chan_by_dcid(struct l2cap_conn *conn, u16 cid)
79 {
80         struct l2cap_chan *c;
81
82         list_for_each_entry(c, &conn->chan_l, list) {
83                 if (c->dcid == cid)
84                         return c;
85         }
86         return NULL;
87 }
88
89 static struct l2cap_chan *__l2cap_get_chan_by_scid(struct l2cap_conn *conn, u16 cid)
90 {
91         struct l2cap_chan *c;
92
93         list_for_each_entry(c, &conn->chan_l, list) {
94                 if (c->scid == cid)
95                         return c;
96         }
97         return NULL;
98 }
99
100 /* Find channel with given SCID.
101  * Returns locked channel. */
102 static struct l2cap_chan *l2cap_get_chan_by_scid(struct l2cap_conn *conn, u16 cid)
103 {
104         struct l2cap_chan *c;
105
106         mutex_lock(&conn->chan_lock);
107         c = __l2cap_get_chan_by_scid(conn, cid);
108         if (c)
109                 l2cap_chan_lock(c);
110         mutex_unlock(&conn->chan_lock);
111
112         return c;
113 }
114
115 static struct l2cap_chan *__l2cap_get_chan_by_ident(struct l2cap_conn *conn, u8 ident)
116 {
117         struct l2cap_chan *c;
118
119         list_for_each_entry(c, &conn->chan_l, list) {
120                 if (c->ident == ident)
121                         return c;
122         }
123         return NULL;
124 }
125
126 static struct l2cap_chan *__l2cap_global_chan_by_addr(__le16 psm, bdaddr_t *src)
127 {
128         struct l2cap_chan *c;
129
130         list_for_each_entry(c, &chan_list, global_l) {
131                 if (c->sport == psm && !bacmp(&bt_sk(c->sk)->src, src))
132                         return c;
133         }
134         return NULL;
135 }
136
137 int l2cap_add_psm(struct l2cap_chan *chan, bdaddr_t *src, __le16 psm)
138 {
139         int err;
140
141         write_lock(&chan_list_lock);
142
143         if (psm && __l2cap_global_chan_by_addr(psm, src)) {
144                 err = -EADDRINUSE;
145                 goto done;
146         }
147
148         if (psm) {
149                 chan->psm = psm;
150                 chan->sport = psm;
151                 err = 0;
152         } else {
153                 u16 p;
154
155                 err = -EINVAL;
156                 for (p = 0x1001; p < 0x1100; p += 2)
157                         if (!__l2cap_global_chan_by_addr(cpu_to_le16(p), src)) {
158                                 chan->psm   = cpu_to_le16(p);
159                                 chan->sport = cpu_to_le16(p);
160                                 err = 0;
161                                 break;
162                         }
163         }
164
165 done:
166         write_unlock(&chan_list_lock);
167         return err;
168 }
169
170 int l2cap_add_scid(struct l2cap_chan *chan,  __u16 scid)
171 {
172         write_lock(&chan_list_lock);
173
174         chan->scid = scid;
175
176         write_unlock(&chan_list_lock);
177
178         return 0;
179 }
180
181 static u16 l2cap_alloc_cid(struct l2cap_conn *conn)
182 {
183         u16 cid = L2CAP_CID_DYN_START;
184
185         for (; cid < L2CAP_CID_DYN_END; cid++) {
186                 if (!__l2cap_get_chan_by_scid(conn, cid))
187                         return cid;
188         }
189
190         return 0;
191 }
192
193 static void __l2cap_state_change(struct l2cap_chan *chan, int state)
194 {
195         BT_DBG("chan %p %s -> %s", chan, state_to_string(chan->state),
196                                                 state_to_string(state));
197
198         chan->state = state;
199         chan->ops->state_change(chan->data, state);
200 }
201
202 static void l2cap_state_change(struct l2cap_chan *chan, int state)
203 {
204         struct sock *sk = chan->sk;
205
206         lock_sock(sk);
207         __l2cap_state_change(chan, state);
208         release_sock(sk);
209 }
210
211 static inline void __l2cap_chan_set_err(struct l2cap_chan *chan, int err)
212 {
213         struct sock *sk = chan->sk;
214
215         sk->sk_err = err;
216 }
217
218 static inline void l2cap_chan_set_err(struct l2cap_chan *chan, int err)
219 {
220         struct sock *sk = chan->sk;
221
222         lock_sock(sk);
223         __l2cap_chan_set_err(chan, err);
224         release_sock(sk);
225 }
226
227 /* ---- L2CAP sequence number lists ---- */
228
229 /* For ERTM, ordered lists of sequence numbers must be tracked for
230  * SREJ requests that are received and for frames that are to be
231  * retransmitted. These seq_list functions implement a singly-linked
232  * list in an array, where membership in the list can also be checked
233  * in constant time. Items can also be added to the tail of the list
234  * and removed from the head in constant time, without further memory
235  * allocs or frees.
236  */
237
238 static int l2cap_seq_list_init(struct l2cap_seq_list *seq_list, u16 size)
239 {
240         size_t alloc_size, i;
241
242         /* Allocated size is a power of 2 to map sequence numbers
243          * (which may be up to 14 bits) in to a smaller array that is
244          * sized for the negotiated ERTM transmit windows.
245          */
246         alloc_size = roundup_pow_of_two(size);
247
248         seq_list->list = kmalloc(sizeof(u16) * alloc_size, GFP_KERNEL);
249         if (!seq_list->list)
250                 return -ENOMEM;
251
252         seq_list->mask = alloc_size - 1;
253         seq_list->head = L2CAP_SEQ_LIST_CLEAR;
254         seq_list->tail = L2CAP_SEQ_LIST_CLEAR;
255         for (i = 0; i < alloc_size; i++)
256                 seq_list->list[i] = L2CAP_SEQ_LIST_CLEAR;
257
258         return 0;
259 }
260
261 static inline void l2cap_seq_list_free(struct l2cap_seq_list *seq_list)
262 {
263         kfree(seq_list->list);
264 }
265
266 static inline bool l2cap_seq_list_contains(struct l2cap_seq_list *seq_list,
267                                            u16 seq)
268 {
269         /* Constant-time check for list membership */
270         return seq_list->list[seq & seq_list->mask] != L2CAP_SEQ_LIST_CLEAR;
271 }
272
273 static u16 l2cap_seq_list_remove(struct l2cap_seq_list *seq_list, u16 seq)
274 {
275         u16 mask = seq_list->mask;
276
277         if (seq_list->head == L2CAP_SEQ_LIST_CLEAR) {
278                 /* In case someone tries to pop the head of an empty list */
279                 return L2CAP_SEQ_LIST_CLEAR;
280         } else if (seq_list->head == seq) {
281                 /* Head can be removed in constant time */
282                 seq_list->head = seq_list->list[seq & mask];
283                 seq_list->list[seq & mask] = L2CAP_SEQ_LIST_CLEAR;
284
285                 if (seq_list->head == L2CAP_SEQ_LIST_TAIL) {
286                         seq_list->head = L2CAP_SEQ_LIST_CLEAR;
287                         seq_list->tail = L2CAP_SEQ_LIST_CLEAR;
288                 }
289         } else {
290                 /* Walk the list to find the sequence number */
291                 u16 prev = seq_list->head;
292                 while (seq_list->list[prev & mask] != seq) {
293                         prev = seq_list->list[prev & mask];
294                         if (prev == L2CAP_SEQ_LIST_TAIL)
295                                 return L2CAP_SEQ_LIST_CLEAR;
296                 }
297
298                 /* Unlink the number from the list and clear it */
299                 seq_list->list[prev & mask] = seq_list->list[seq & mask];
300                 seq_list->list[seq & mask] = L2CAP_SEQ_LIST_CLEAR;
301                 if (seq_list->tail == seq)
302                         seq_list->tail = prev;
303         }
304         return seq;
305 }
306
307 static inline u16 l2cap_seq_list_pop(struct l2cap_seq_list *seq_list)
308 {
309         /* Remove the head in constant time */
310         return l2cap_seq_list_remove(seq_list, seq_list->head);
311 }
312
313 static void l2cap_seq_list_clear(struct l2cap_seq_list *seq_list)
314 {
315         u16 i;
316
317         if (seq_list->head == L2CAP_SEQ_LIST_CLEAR)
318                 return;
319
320         for (i = 0; i <= seq_list->mask; i++)
321                 seq_list->list[i] = L2CAP_SEQ_LIST_CLEAR;
322
323         seq_list->head = L2CAP_SEQ_LIST_CLEAR;
324         seq_list->tail = L2CAP_SEQ_LIST_CLEAR;
325 }
326
327 static void l2cap_seq_list_append(struct l2cap_seq_list *seq_list, u16 seq)
328 {
329         u16 mask = seq_list->mask;
330
331         /* All appends happen in constant time */
332
333         if (seq_list->list[seq & mask] != L2CAP_SEQ_LIST_CLEAR)
334                 return;
335
336         if (seq_list->tail == L2CAP_SEQ_LIST_CLEAR)
337                 seq_list->head = seq;
338         else
339                 seq_list->list[seq_list->tail & mask] = seq;
340
341         seq_list->tail = seq;
342         seq_list->list[seq & mask] = L2CAP_SEQ_LIST_TAIL;
343 }
344
345 static void l2cap_chan_timeout(struct work_struct *work)
346 {
347         struct l2cap_chan *chan = container_of(work, struct l2cap_chan,
348                                                         chan_timer.work);
349         struct l2cap_conn *conn = chan->conn;
350         int reason;
351
352         BT_DBG("chan %p state %s", chan, state_to_string(chan->state));
353
354         mutex_lock(&conn->chan_lock);
355         l2cap_chan_lock(chan);
356
357         if (chan->state == BT_CONNECTED || chan->state == BT_CONFIG)
358                 reason = ECONNREFUSED;
359         else if (chan->state == BT_CONNECT &&
360                                         chan->sec_level != BT_SECURITY_SDP)
361                 reason = ECONNREFUSED;
362         else
363                 reason = ETIMEDOUT;
364
365         l2cap_chan_close(chan, reason);
366
367         l2cap_chan_unlock(chan);
368
369         chan->ops->close(chan->data);
370         mutex_unlock(&conn->chan_lock);
371
372         l2cap_chan_put(chan);
373 }
374
375 struct l2cap_chan *l2cap_chan_create(void)
376 {
377         struct l2cap_chan *chan;
378
379         chan = kzalloc(sizeof(*chan), GFP_ATOMIC);
380         if (!chan)
381                 return NULL;
382
383         mutex_init(&chan->lock);
384
385         write_lock(&chan_list_lock);
386         list_add(&chan->global_l, &chan_list);
387         write_unlock(&chan_list_lock);
388
389         INIT_DELAYED_WORK(&chan->chan_timer, l2cap_chan_timeout);
390
391         chan->state = BT_OPEN;
392
393         atomic_set(&chan->refcnt, 1);
394
395         BT_DBG("chan %p", chan);
396
397         return chan;
398 }
399
400 void l2cap_chan_destroy(struct l2cap_chan *chan)
401 {
402         write_lock(&chan_list_lock);
403         list_del(&chan->global_l);
404         write_unlock(&chan_list_lock);
405
406         l2cap_chan_put(chan);
407 }
408
409 void l2cap_chan_set_defaults(struct l2cap_chan *chan)
410 {
411         chan->fcs  = L2CAP_FCS_CRC16;
412         chan->max_tx = L2CAP_DEFAULT_MAX_TX;
413         chan->tx_win = L2CAP_DEFAULT_TX_WINDOW;
414         chan->tx_win_max = L2CAP_DEFAULT_TX_WINDOW;
415         chan->sec_level = BT_SECURITY_LOW;
416
417         set_bit(FLAG_FORCE_ACTIVE, &chan->flags);
418 }
419
420 static void __l2cap_chan_add(struct l2cap_conn *conn, struct l2cap_chan *chan)
421 {
422         BT_DBG("conn %p, psm 0x%2.2x, dcid 0x%4.4x", conn,
423                __le16_to_cpu(chan->psm), chan->dcid);
424
425         conn->disc_reason = HCI_ERROR_REMOTE_USER_TERM;
426
427         chan->conn = conn;
428
429         switch (chan->chan_type) {
430         case L2CAP_CHAN_CONN_ORIENTED:
431                 if (conn->hcon->type == LE_LINK) {
432                         /* LE connection */
433                         chan->omtu = L2CAP_LE_DEFAULT_MTU;
434                         chan->scid = L2CAP_CID_LE_DATA;
435                         chan->dcid = L2CAP_CID_LE_DATA;
436                 } else {
437                         /* Alloc CID for connection-oriented socket */
438                         chan->scid = l2cap_alloc_cid(conn);
439                         chan->omtu = L2CAP_DEFAULT_MTU;
440                 }
441                 break;
442
443         case L2CAP_CHAN_CONN_LESS:
444                 /* Connectionless socket */
445                 chan->scid = L2CAP_CID_CONN_LESS;
446                 chan->dcid = L2CAP_CID_CONN_LESS;
447                 chan->omtu = L2CAP_DEFAULT_MTU;
448                 break;
449
450         default:
451                 /* Raw socket can send/recv signalling messages only */
452                 chan->scid = L2CAP_CID_SIGNALING;
453                 chan->dcid = L2CAP_CID_SIGNALING;
454                 chan->omtu = L2CAP_DEFAULT_MTU;
455         }
456
457         chan->local_id          = L2CAP_BESTEFFORT_ID;
458         chan->local_stype       = L2CAP_SERV_BESTEFFORT;
459         chan->local_msdu        = L2CAP_DEFAULT_MAX_SDU_SIZE;
460         chan->local_sdu_itime   = L2CAP_DEFAULT_SDU_ITIME;
461         chan->local_acc_lat     = L2CAP_DEFAULT_ACC_LAT;
462         chan->local_flush_to    = L2CAP_DEFAULT_FLUSH_TO;
463
464         l2cap_chan_hold(chan);
465
466         list_add(&chan->list, &conn->chan_l);
467 }
468
469 static void l2cap_chan_add(struct l2cap_conn *conn, struct l2cap_chan *chan)
470 {
471         mutex_lock(&conn->chan_lock);
472         __l2cap_chan_add(conn, chan);
473         mutex_unlock(&conn->chan_lock);
474 }
475
476 static void l2cap_chan_del(struct l2cap_chan *chan, int err)
477 {
478         struct sock *sk = chan->sk;
479         struct l2cap_conn *conn = chan->conn;
480         struct sock *parent = bt_sk(sk)->parent;
481
482         __clear_chan_timer(chan);
483
484         BT_DBG("chan %p, conn %p, err %d", chan, conn, err);
485
486         if (conn) {
487                 /* Delete from channel list */
488                 list_del(&chan->list);
489
490                 l2cap_chan_put(chan);
491
492                 chan->conn = NULL;
493                 hci_conn_put(conn->hcon);
494         }
495
496         lock_sock(sk);
497
498         __l2cap_state_change(chan, BT_CLOSED);
499         sock_set_flag(sk, SOCK_ZAPPED);
500
501         if (err)
502                 __l2cap_chan_set_err(chan, err);
503
504         if (parent) {
505                 bt_accept_unlink(sk);
506                 parent->sk_data_ready(parent, 0);
507         } else
508                 sk->sk_state_change(sk);
509
510         release_sock(sk);
511
512         if (!(test_bit(CONF_OUTPUT_DONE, &chan->conf_state) &&
513                         test_bit(CONF_INPUT_DONE, &chan->conf_state)))
514                 return;
515
516         skb_queue_purge(&chan->tx_q);
517
518         if (chan->mode == L2CAP_MODE_ERTM) {
519                 struct srej_list *l, *tmp;
520
521                 __clear_retrans_timer(chan);
522                 __clear_monitor_timer(chan);
523                 __clear_ack_timer(chan);
524
525                 skb_queue_purge(&chan->srej_q);
526
527                 l2cap_seq_list_free(&chan->srej_list);
528                 l2cap_seq_list_free(&chan->retrans_list);
529                 list_for_each_entry_safe(l, tmp, &chan->srej_l, list) {
530                         list_del(&l->list);
531                         kfree(l);
532                 }
533         }
534 }
535
536 static void l2cap_chan_cleanup_listen(struct sock *parent)
537 {
538         struct sock *sk;
539
540         BT_DBG("parent %p", parent);
541
542         /* Close not yet accepted channels */
543         while ((sk = bt_accept_dequeue(parent, NULL))) {
544                 struct l2cap_chan *chan = l2cap_pi(sk)->chan;
545
546                 l2cap_chan_lock(chan);
547                 __clear_chan_timer(chan);
548                 l2cap_chan_close(chan, ECONNRESET);
549                 l2cap_chan_unlock(chan);
550
551                 chan->ops->close(chan->data);
552         }
553 }
554
555 void l2cap_chan_close(struct l2cap_chan *chan, int reason)
556 {
557         struct l2cap_conn *conn = chan->conn;
558         struct sock *sk = chan->sk;
559
560         BT_DBG("chan %p state %s sk %p", chan,
561                                         state_to_string(chan->state), sk);
562
563         switch (chan->state) {
564         case BT_LISTEN:
565                 lock_sock(sk);
566                 l2cap_chan_cleanup_listen(sk);
567
568                 __l2cap_state_change(chan, BT_CLOSED);
569                 sock_set_flag(sk, SOCK_ZAPPED);
570                 release_sock(sk);
571                 break;
572
573         case BT_CONNECTED:
574         case BT_CONFIG:
575                 if (chan->chan_type == L2CAP_CHAN_CONN_ORIENTED &&
576                                         conn->hcon->type == ACL_LINK) {
577                         __set_chan_timer(chan, sk->sk_sndtimeo);
578                         l2cap_send_disconn_req(conn, chan, reason);
579                 } else
580                         l2cap_chan_del(chan, reason);
581                 break;
582
583         case BT_CONNECT2:
584                 if (chan->chan_type == L2CAP_CHAN_CONN_ORIENTED &&
585                                         conn->hcon->type == ACL_LINK) {
586                         struct l2cap_conn_rsp rsp;
587                         __u16 result;
588
589                         if (test_bit(BT_SK_DEFER_SETUP, &bt_sk(sk)->flags))
590                                 result = L2CAP_CR_SEC_BLOCK;
591                         else
592                                 result = L2CAP_CR_BAD_PSM;
593                         l2cap_state_change(chan, BT_DISCONN);
594
595                         rsp.scid   = cpu_to_le16(chan->dcid);
596                         rsp.dcid   = cpu_to_le16(chan->scid);
597                         rsp.result = cpu_to_le16(result);
598                         rsp.status = cpu_to_le16(L2CAP_CS_NO_INFO);
599                         l2cap_send_cmd(conn, chan->ident, L2CAP_CONN_RSP,
600                                                         sizeof(rsp), &rsp);
601                 }
602
603                 l2cap_chan_del(chan, reason);
604                 break;
605
606         case BT_CONNECT:
607         case BT_DISCONN:
608                 l2cap_chan_del(chan, reason);
609                 break;
610
611         default:
612                 lock_sock(sk);
613                 sock_set_flag(sk, SOCK_ZAPPED);
614                 release_sock(sk);
615                 break;
616         }
617 }
618
619 static inline u8 l2cap_get_auth_type(struct l2cap_chan *chan)
620 {
621         if (chan->chan_type == L2CAP_CHAN_RAW) {
622                 switch (chan->sec_level) {
623                 case BT_SECURITY_HIGH:
624                         return HCI_AT_DEDICATED_BONDING_MITM;
625                 case BT_SECURITY_MEDIUM:
626                         return HCI_AT_DEDICATED_BONDING;
627                 default:
628                         return HCI_AT_NO_BONDING;
629                 }
630         } else if (chan->psm == cpu_to_le16(0x0001)) {
631                 if (chan->sec_level == BT_SECURITY_LOW)
632                         chan->sec_level = BT_SECURITY_SDP;
633
634                 if (chan->sec_level == BT_SECURITY_HIGH)
635                         return HCI_AT_NO_BONDING_MITM;
636                 else
637                         return HCI_AT_NO_BONDING;
638         } else {
639                 switch (chan->sec_level) {
640                 case BT_SECURITY_HIGH:
641                         return HCI_AT_GENERAL_BONDING_MITM;
642                 case BT_SECURITY_MEDIUM:
643                         return HCI_AT_GENERAL_BONDING;
644                 default:
645                         return HCI_AT_NO_BONDING;
646                 }
647         }
648 }
649
650 /* Service level security */
651 int l2cap_chan_check_security(struct l2cap_chan *chan)
652 {
653         struct l2cap_conn *conn = chan->conn;
654         __u8 auth_type;
655
656         auth_type = l2cap_get_auth_type(chan);
657
658         return hci_conn_security(conn->hcon, chan->sec_level, auth_type);
659 }
660
661 static u8 l2cap_get_ident(struct l2cap_conn *conn)
662 {
663         u8 id;
664
665         /* Get next available identificator.
666          *    1 - 128 are used by kernel.
667          *  129 - 199 are reserved.
668          *  200 - 254 are used by utilities like l2ping, etc.
669          */
670
671         spin_lock(&conn->lock);
672
673         if (++conn->tx_ident > 128)
674                 conn->tx_ident = 1;
675
676         id = conn->tx_ident;
677
678         spin_unlock(&conn->lock);
679
680         return id;
681 }
682
683 static void l2cap_send_cmd(struct l2cap_conn *conn, u8 ident, u8 code, u16 len, void *data)
684 {
685         struct sk_buff *skb = l2cap_build_cmd(conn, code, ident, len, data);
686         u8 flags;
687
688         BT_DBG("code 0x%2.2x", code);
689
690         if (!skb)
691                 return;
692
693         if (lmp_no_flush_capable(conn->hcon->hdev))
694                 flags = ACL_START_NO_FLUSH;
695         else
696                 flags = ACL_START;
697
698         bt_cb(skb)->force_active = BT_POWER_FORCE_ACTIVE_ON;
699         skb->priority = HCI_PRIO_MAX;
700
701         hci_send_acl(conn->hchan, skb, flags);
702 }
703
704 static void l2cap_do_send(struct l2cap_chan *chan, struct sk_buff *skb)
705 {
706         struct hci_conn *hcon = chan->conn->hcon;
707         u16 flags;
708
709         BT_DBG("chan %p, skb %p len %d priority %u", chan, skb, skb->len,
710                                                         skb->priority);
711
712         if (!test_bit(FLAG_FLUSHABLE, &chan->flags) &&
713                                         lmp_no_flush_capable(hcon->hdev))
714                 flags = ACL_START_NO_FLUSH;
715         else
716                 flags = ACL_START;
717
718         bt_cb(skb)->force_active = test_bit(FLAG_FORCE_ACTIVE, &chan->flags);
719         hci_send_acl(chan->conn->hchan, skb, flags);
720 }
721
722 static void __unpack_enhanced_control(u16 enh, struct l2cap_ctrl *control)
723 {
724         control->reqseq = (enh & L2CAP_CTRL_REQSEQ) >> L2CAP_CTRL_REQSEQ_SHIFT;
725         control->final = (enh & L2CAP_CTRL_FINAL) >> L2CAP_CTRL_FINAL_SHIFT;
726
727         if (enh & L2CAP_CTRL_FRAME_TYPE) {
728                 /* S-Frame */
729                 control->sframe = 1;
730                 control->poll = (enh & L2CAP_CTRL_POLL) >> L2CAP_CTRL_POLL_SHIFT;
731                 control->super = (enh & L2CAP_CTRL_SUPERVISE) >> L2CAP_CTRL_SUPER_SHIFT;
732
733                 control->sar = 0;
734                 control->txseq = 0;
735         } else {
736                 /* I-Frame */
737                 control->sframe = 0;
738                 control->sar = (enh & L2CAP_CTRL_SAR) >> L2CAP_CTRL_SAR_SHIFT;
739                 control->txseq = (enh & L2CAP_CTRL_TXSEQ) >> L2CAP_CTRL_TXSEQ_SHIFT;
740
741                 control->poll = 0;
742                 control->super = 0;
743         }
744 }
745
746 static void __unpack_extended_control(u32 ext, struct l2cap_ctrl *control)
747 {
748         control->reqseq = (ext & L2CAP_EXT_CTRL_REQSEQ) >> L2CAP_EXT_CTRL_REQSEQ_SHIFT;
749         control->final = (ext & L2CAP_EXT_CTRL_FINAL) >> L2CAP_EXT_CTRL_FINAL_SHIFT;
750
751         if (ext & L2CAP_EXT_CTRL_FRAME_TYPE) {
752                 /* S-Frame */
753                 control->sframe = 1;
754                 control->poll = (ext & L2CAP_EXT_CTRL_POLL) >> L2CAP_EXT_CTRL_POLL_SHIFT;
755                 control->super = (ext & L2CAP_EXT_CTRL_SUPERVISE) >> L2CAP_EXT_CTRL_SUPER_SHIFT;
756
757                 control->sar = 0;
758                 control->txseq = 0;
759         } else {
760                 /* I-Frame */
761                 control->sframe = 0;
762                 control->sar = (ext & L2CAP_EXT_CTRL_SAR) >> L2CAP_EXT_CTRL_SAR_SHIFT;
763                 control->txseq = (ext & L2CAP_EXT_CTRL_TXSEQ) >> L2CAP_EXT_CTRL_TXSEQ_SHIFT;
764
765                 control->poll = 0;
766                 control->super = 0;
767         }
768 }
769
770 static inline void __unpack_control(struct l2cap_chan *chan,
771                                     struct sk_buff *skb)
772 {
773         if (test_bit(FLAG_EXT_CTRL, &chan->flags)) {
774                 __unpack_extended_control(get_unaligned_le32(skb->data),
775                                           &bt_cb(skb)->control);
776         } else {
777                 __unpack_enhanced_control(get_unaligned_le16(skb->data),
778                                           &bt_cb(skb)->control);
779         }
780 }
781
782 static u32 __pack_extended_control(struct l2cap_ctrl *control)
783 {
784         u32 packed;
785
786         packed = control->reqseq << L2CAP_EXT_CTRL_REQSEQ_SHIFT;
787         packed |= control->final << L2CAP_EXT_CTRL_FINAL_SHIFT;
788
789         if (control->sframe) {
790                 packed |= control->poll << L2CAP_EXT_CTRL_POLL_SHIFT;
791                 packed |= control->super << L2CAP_EXT_CTRL_SUPER_SHIFT;
792                 packed |= L2CAP_EXT_CTRL_FRAME_TYPE;
793         } else {
794                 packed |= control->sar << L2CAP_EXT_CTRL_SAR_SHIFT;
795                 packed |= control->txseq << L2CAP_EXT_CTRL_TXSEQ_SHIFT;
796         }
797
798         return packed;
799 }
800
801 static u16 __pack_enhanced_control(struct l2cap_ctrl *control)
802 {
803         u16 packed;
804
805         packed = control->reqseq << L2CAP_CTRL_REQSEQ_SHIFT;
806         packed |= control->final << L2CAP_CTRL_FINAL_SHIFT;
807
808         if (control->sframe) {
809                 packed |= control->poll << L2CAP_CTRL_POLL_SHIFT;
810                 packed |= control->super << L2CAP_CTRL_SUPER_SHIFT;
811                 packed |= L2CAP_CTRL_FRAME_TYPE;
812         } else {
813                 packed |= control->sar << L2CAP_CTRL_SAR_SHIFT;
814                 packed |= control->txseq << L2CAP_CTRL_TXSEQ_SHIFT;
815         }
816
817         return packed;
818 }
819
820 static inline void __pack_control(struct l2cap_chan *chan,
821                                   struct l2cap_ctrl *control,
822                                   struct sk_buff *skb)
823 {
824         if (test_bit(FLAG_EXT_CTRL, &chan->flags)) {
825                 put_unaligned_le32(__pack_extended_control(control),
826                                    skb->data + L2CAP_HDR_SIZE);
827         } else {
828                 put_unaligned_le16(__pack_enhanced_control(control),
829                                    skb->data + L2CAP_HDR_SIZE);
830         }
831 }
832
833 static inline void l2cap_send_sframe(struct l2cap_chan *chan, u32 control)
834 {
835         struct sk_buff *skb;
836         struct l2cap_hdr *lh;
837         struct l2cap_conn *conn = chan->conn;
838         int count, hlen;
839
840         if (chan->state != BT_CONNECTED)
841                 return;
842
843         if (test_bit(FLAG_EXT_CTRL, &chan->flags))
844                 hlen = L2CAP_EXT_HDR_SIZE;
845         else
846                 hlen = L2CAP_ENH_HDR_SIZE;
847
848         if (chan->fcs == L2CAP_FCS_CRC16)
849                 hlen += L2CAP_FCS_SIZE;
850
851         BT_DBG("chan %p, control 0x%8.8x", chan, control);
852
853         count = min_t(unsigned int, conn->mtu, hlen);
854
855         control |= __set_sframe(chan);
856
857         if (test_and_clear_bit(CONN_SEND_FBIT, &chan->conn_state))
858                 control |= __set_ctrl_final(chan);
859
860         if (test_and_clear_bit(CONN_SEND_PBIT, &chan->conn_state))
861                 control |= __set_ctrl_poll(chan);
862
863         skb = bt_skb_alloc(count, GFP_ATOMIC);
864         if (!skb)
865                 return;
866
867         lh = (struct l2cap_hdr *) skb_put(skb, L2CAP_HDR_SIZE);
868         lh->len = cpu_to_le16(hlen - L2CAP_HDR_SIZE);
869         lh->cid = cpu_to_le16(chan->dcid);
870
871         __put_control(chan, control, skb_put(skb, __ctrl_size(chan)));
872
873         if (chan->fcs == L2CAP_FCS_CRC16) {
874                 u16 fcs = crc16(0, (u8 *)lh, count - L2CAP_FCS_SIZE);
875                 put_unaligned_le16(fcs, skb_put(skb, L2CAP_FCS_SIZE));
876         }
877
878         skb->priority = HCI_PRIO_MAX;
879         l2cap_do_send(chan, skb);
880 }
881
882 static inline void l2cap_send_rr_or_rnr(struct l2cap_chan *chan, u32 control)
883 {
884         if (test_bit(CONN_LOCAL_BUSY, &chan->conn_state)) {
885                 control |= __set_ctrl_super(chan, L2CAP_SUPER_RNR);
886                 set_bit(CONN_RNR_SENT, &chan->conn_state);
887         } else
888                 control |= __set_ctrl_super(chan, L2CAP_SUPER_RR);
889
890         control |= __set_reqseq(chan, chan->buffer_seq);
891
892         l2cap_send_sframe(chan, control);
893 }
894
895 static inline int __l2cap_no_conn_pending(struct l2cap_chan *chan)
896 {
897         return !test_bit(CONF_CONNECT_PEND, &chan->conf_state);
898 }
899
900 static void l2cap_send_conn_req(struct l2cap_chan *chan)
901 {
902         struct l2cap_conn *conn = chan->conn;
903         struct l2cap_conn_req req;
904
905         req.scid = cpu_to_le16(chan->scid);
906         req.psm  = chan->psm;
907
908         chan->ident = l2cap_get_ident(conn);
909
910         set_bit(CONF_CONNECT_PEND, &chan->conf_state);
911
912         l2cap_send_cmd(conn, chan->ident, L2CAP_CONN_REQ, sizeof(req), &req);
913 }
914
915 static void l2cap_chan_ready(struct l2cap_chan *chan)
916 {
917         struct sock *sk = chan->sk;
918         struct sock *parent;
919
920         lock_sock(sk);
921
922         parent = bt_sk(sk)->parent;
923
924         BT_DBG("sk %p, parent %p", sk, parent);
925
926         chan->conf_state = 0;
927         __clear_chan_timer(chan);
928
929         __l2cap_state_change(chan, BT_CONNECTED);
930         sk->sk_state_change(sk);
931
932         if (parent)
933                 parent->sk_data_ready(parent, 0);
934
935         release_sock(sk);
936 }
937
938 static void l2cap_do_start(struct l2cap_chan *chan)
939 {
940         struct l2cap_conn *conn = chan->conn;
941
942         if (conn->hcon->type == LE_LINK) {
943                 l2cap_chan_ready(chan);
944                 return;
945         }
946
947         if (conn->info_state & L2CAP_INFO_FEAT_MASK_REQ_SENT) {
948                 if (!(conn->info_state & L2CAP_INFO_FEAT_MASK_REQ_DONE))
949                         return;
950
951                 if (l2cap_chan_check_security(chan) &&
952                                 __l2cap_no_conn_pending(chan))
953                         l2cap_send_conn_req(chan);
954         } else {
955                 struct l2cap_info_req req;
956                 req.type = cpu_to_le16(L2CAP_IT_FEAT_MASK);
957
958                 conn->info_state |= L2CAP_INFO_FEAT_MASK_REQ_SENT;
959                 conn->info_ident = l2cap_get_ident(conn);
960
961                 schedule_delayed_work(&conn->info_timer, L2CAP_INFO_TIMEOUT);
962
963                 l2cap_send_cmd(conn, conn->info_ident,
964                                         L2CAP_INFO_REQ, sizeof(req), &req);
965         }
966 }
967
968 static inline int l2cap_mode_supported(__u8 mode, __u32 feat_mask)
969 {
970         u32 local_feat_mask = l2cap_feat_mask;
971         if (!disable_ertm)
972                 local_feat_mask |= L2CAP_FEAT_ERTM | L2CAP_FEAT_STREAMING;
973
974         switch (mode) {
975         case L2CAP_MODE_ERTM:
976                 return L2CAP_FEAT_ERTM & feat_mask & local_feat_mask;
977         case L2CAP_MODE_STREAMING:
978                 return L2CAP_FEAT_STREAMING & feat_mask & local_feat_mask;
979         default:
980                 return 0x00;
981         }
982 }
983
984 static void l2cap_send_disconn_req(struct l2cap_conn *conn, struct l2cap_chan *chan, int err)
985 {
986         struct sock *sk = chan->sk;
987         struct l2cap_disconn_req req;
988
989         if (!conn)
990                 return;
991
992         if (chan->mode == L2CAP_MODE_ERTM) {
993                 __clear_retrans_timer(chan);
994                 __clear_monitor_timer(chan);
995                 __clear_ack_timer(chan);
996         }
997
998         req.dcid = cpu_to_le16(chan->dcid);
999         req.scid = cpu_to_le16(chan->scid);
1000         l2cap_send_cmd(conn, l2cap_get_ident(conn),
1001                         L2CAP_DISCONN_REQ, sizeof(req), &req);
1002
1003         lock_sock(sk);
1004         __l2cap_state_change(chan, BT_DISCONN);
1005         __l2cap_chan_set_err(chan, err);
1006         release_sock(sk);
1007 }
1008
1009 /* ---- L2CAP connections ---- */
1010 static void l2cap_conn_start(struct l2cap_conn *conn)
1011 {
1012         struct l2cap_chan *chan, *tmp;
1013
1014         BT_DBG("conn %p", conn);
1015
1016         mutex_lock(&conn->chan_lock);
1017
1018         list_for_each_entry_safe(chan, tmp, &conn->chan_l, list) {
1019                 struct sock *sk = chan->sk;
1020
1021                 l2cap_chan_lock(chan);
1022
1023                 if (chan->chan_type != L2CAP_CHAN_CONN_ORIENTED) {
1024                         l2cap_chan_unlock(chan);
1025                         continue;
1026                 }
1027
1028                 if (chan->state == BT_CONNECT) {
1029                         if (!l2cap_chan_check_security(chan) ||
1030                                         !__l2cap_no_conn_pending(chan)) {
1031                                 l2cap_chan_unlock(chan);
1032                                 continue;
1033                         }
1034
1035                         if (!l2cap_mode_supported(chan->mode, conn->feat_mask)
1036                                         && test_bit(CONF_STATE2_DEVICE,
1037                                         &chan->conf_state)) {
1038                                 l2cap_chan_close(chan, ECONNRESET);
1039                                 l2cap_chan_unlock(chan);
1040                                 continue;
1041                         }
1042
1043                         l2cap_send_conn_req(chan);
1044
1045                 } else if (chan->state == BT_CONNECT2) {
1046                         struct l2cap_conn_rsp rsp;
1047                         char buf[128];
1048                         rsp.scid = cpu_to_le16(chan->dcid);
1049                         rsp.dcid = cpu_to_le16(chan->scid);
1050
1051                         if (l2cap_chan_check_security(chan)) {
1052                                 lock_sock(sk);
1053                                 if (test_bit(BT_SK_DEFER_SETUP,
1054                                              &bt_sk(sk)->flags)) {
1055                                         struct sock *parent = bt_sk(sk)->parent;
1056                                         rsp.result = cpu_to_le16(L2CAP_CR_PEND);
1057                                         rsp.status = cpu_to_le16(L2CAP_CS_AUTHOR_PEND);
1058                                         if (parent)
1059                                                 parent->sk_data_ready(parent, 0);
1060
1061                                 } else {
1062                                         __l2cap_state_change(chan, BT_CONFIG);
1063                                         rsp.result = cpu_to_le16(L2CAP_CR_SUCCESS);
1064                                         rsp.status = cpu_to_le16(L2CAP_CS_NO_INFO);
1065                                 }
1066                                 release_sock(sk);
1067                         } else {
1068                                 rsp.result = cpu_to_le16(L2CAP_CR_PEND);
1069                                 rsp.status = cpu_to_le16(L2CAP_CS_AUTHEN_PEND);
1070                         }
1071
1072                         l2cap_send_cmd(conn, chan->ident, L2CAP_CONN_RSP,
1073                                                         sizeof(rsp), &rsp);
1074
1075                         if (test_bit(CONF_REQ_SENT, &chan->conf_state) ||
1076                                         rsp.result != L2CAP_CR_SUCCESS) {
1077                                 l2cap_chan_unlock(chan);
1078                                 continue;
1079                         }
1080
1081                         set_bit(CONF_REQ_SENT, &chan->conf_state);
1082                         l2cap_send_cmd(conn, l2cap_get_ident(conn), L2CAP_CONF_REQ,
1083                                                 l2cap_build_conf_req(chan, buf), buf);
1084                         chan->num_conf_req++;
1085                 }
1086
1087                 l2cap_chan_unlock(chan);
1088         }
1089
1090         mutex_unlock(&conn->chan_lock);
1091 }
1092
1093 /* Find socket with cid and source/destination bdaddr.
1094  * Returns closest match, locked.
1095  */
1096 static struct l2cap_chan *l2cap_global_chan_by_scid(int state, u16 cid,
1097                                                     bdaddr_t *src,
1098                                                     bdaddr_t *dst)
1099 {
1100         struct l2cap_chan *c, *c1 = NULL;
1101
1102         read_lock(&chan_list_lock);
1103
1104         list_for_each_entry(c, &chan_list, global_l) {
1105                 struct sock *sk = c->sk;
1106
1107                 if (state && c->state != state)
1108                         continue;
1109
1110                 if (c->scid == cid) {
1111                         int src_match, dst_match;
1112                         int src_any, dst_any;
1113
1114                         /* Exact match. */
1115                         src_match = !bacmp(&bt_sk(sk)->src, src);
1116                         dst_match = !bacmp(&bt_sk(sk)->dst, dst);
1117                         if (src_match && dst_match) {
1118                                 read_unlock(&chan_list_lock);
1119                                 return c;
1120                         }
1121
1122                         /* Closest match */
1123                         src_any = !bacmp(&bt_sk(sk)->src, BDADDR_ANY);
1124                         dst_any = !bacmp(&bt_sk(sk)->dst, BDADDR_ANY);
1125                         if ((src_match && dst_any) || (src_any && dst_match) ||
1126                             (src_any && dst_any))
1127                                 c1 = c;
1128                 }
1129         }
1130
1131         read_unlock(&chan_list_lock);
1132
1133         return c1;
1134 }
1135
1136 static void l2cap_le_conn_ready(struct l2cap_conn *conn)
1137 {
1138         struct sock *parent, *sk;
1139         struct l2cap_chan *chan, *pchan;
1140
1141         BT_DBG("");
1142
1143         /* Check if we have socket listening on cid */
1144         pchan = l2cap_global_chan_by_scid(BT_LISTEN, L2CAP_CID_LE_DATA,
1145                                           conn->src, conn->dst);
1146         if (!pchan)
1147                 return;
1148
1149         parent = pchan->sk;
1150
1151         lock_sock(parent);
1152
1153         /* Check for backlog size */
1154         if (sk_acceptq_is_full(parent)) {
1155                 BT_DBG("backlog full %d", parent->sk_ack_backlog);
1156                 goto clean;
1157         }
1158
1159         chan = pchan->ops->new_connection(pchan->data);
1160         if (!chan)
1161                 goto clean;
1162
1163         sk = chan->sk;
1164
1165         hci_conn_hold(conn->hcon);
1166
1167         bacpy(&bt_sk(sk)->src, conn->src);
1168         bacpy(&bt_sk(sk)->dst, conn->dst);
1169
1170         bt_accept_enqueue(parent, sk);
1171
1172         l2cap_chan_add(conn, chan);
1173
1174         __set_chan_timer(chan, sk->sk_sndtimeo);
1175
1176         __l2cap_state_change(chan, BT_CONNECTED);
1177         parent->sk_data_ready(parent, 0);
1178
1179 clean:
1180         release_sock(parent);
1181 }
1182
1183 static void l2cap_conn_ready(struct l2cap_conn *conn)
1184 {
1185         struct l2cap_chan *chan;
1186
1187         BT_DBG("conn %p", conn);
1188
1189         if (!conn->hcon->out && conn->hcon->type == LE_LINK)
1190                 l2cap_le_conn_ready(conn);
1191
1192         if (conn->hcon->out && conn->hcon->type == LE_LINK)
1193                 smp_conn_security(conn, conn->hcon->pending_sec_level);
1194
1195         mutex_lock(&conn->chan_lock);
1196
1197         list_for_each_entry(chan, &conn->chan_l, list) {
1198
1199                 l2cap_chan_lock(chan);
1200
1201                 if (conn->hcon->type == LE_LINK) {
1202                         if (smp_conn_security(conn, chan->sec_level))
1203                                 l2cap_chan_ready(chan);
1204
1205                 } else if (chan->chan_type != L2CAP_CHAN_CONN_ORIENTED) {
1206                         struct sock *sk = chan->sk;
1207                         __clear_chan_timer(chan);
1208                         lock_sock(sk);
1209                         __l2cap_state_change(chan, BT_CONNECTED);
1210                         sk->sk_state_change(sk);
1211                         release_sock(sk);
1212
1213                 } else if (chan->state == BT_CONNECT)
1214                         l2cap_do_start(chan);
1215
1216                 l2cap_chan_unlock(chan);
1217         }
1218
1219         mutex_unlock(&conn->chan_lock);
1220 }
1221
1222 /* Notify sockets that we cannot guaranty reliability anymore */
1223 static void l2cap_conn_unreliable(struct l2cap_conn *conn, int err)
1224 {
1225         struct l2cap_chan *chan;
1226
1227         BT_DBG("conn %p", conn);
1228
1229         mutex_lock(&conn->chan_lock);
1230
1231         list_for_each_entry(chan, &conn->chan_l, list) {
1232                 if (test_bit(FLAG_FORCE_RELIABLE, &chan->flags))
1233                         __l2cap_chan_set_err(chan, err);
1234         }
1235
1236         mutex_unlock(&conn->chan_lock);
1237 }
1238
1239 static void l2cap_info_timeout(struct work_struct *work)
1240 {
1241         struct l2cap_conn *conn = container_of(work, struct l2cap_conn,
1242                                                         info_timer.work);
1243
1244         conn->info_state |= L2CAP_INFO_FEAT_MASK_REQ_DONE;
1245         conn->info_ident = 0;
1246
1247         l2cap_conn_start(conn);
1248 }
1249
1250 static void l2cap_conn_del(struct hci_conn *hcon, int err)
1251 {
1252         struct l2cap_conn *conn = hcon->l2cap_data;
1253         struct l2cap_chan *chan, *l;
1254
1255         if (!conn)
1256                 return;
1257
1258         BT_DBG("hcon %p conn %p, err %d", hcon, conn, err);
1259
1260         kfree_skb(conn->rx_skb);
1261
1262         mutex_lock(&conn->chan_lock);
1263
1264         /* Kill channels */
1265         list_for_each_entry_safe(chan, l, &conn->chan_l, list) {
1266                 l2cap_chan_hold(chan);
1267                 l2cap_chan_lock(chan);
1268
1269                 l2cap_chan_del(chan, err);
1270
1271                 l2cap_chan_unlock(chan);
1272
1273                 chan->ops->close(chan->data);
1274                 l2cap_chan_put(chan);
1275         }
1276
1277         mutex_unlock(&conn->chan_lock);
1278
1279         hci_chan_del(conn->hchan);
1280
1281         if (conn->info_state & L2CAP_INFO_FEAT_MASK_REQ_SENT)
1282                 cancel_delayed_work_sync(&conn->info_timer);
1283
1284         if (test_and_clear_bit(HCI_CONN_LE_SMP_PEND, &hcon->flags)) {
1285                 cancel_delayed_work_sync(&conn->security_timer);
1286                 smp_chan_destroy(conn);
1287         }
1288
1289         hcon->l2cap_data = NULL;
1290         kfree(conn);
1291 }
1292
1293 static void security_timeout(struct work_struct *work)
1294 {
1295         struct l2cap_conn *conn = container_of(work, struct l2cap_conn,
1296                                                 security_timer.work);
1297
1298         BT_DBG("conn %p", conn);
1299
1300         if (test_and_clear_bit(HCI_CONN_LE_SMP_PEND, &conn->hcon->flags)) {
1301                 smp_chan_destroy(conn);
1302                 l2cap_conn_del(conn->hcon, ETIMEDOUT);
1303         }
1304 }
1305
1306 static struct l2cap_conn *l2cap_conn_add(struct hci_conn *hcon, u8 status)
1307 {
1308         struct l2cap_conn *conn = hcon->l2cap_data;
1309         struct hci_chan *hchan;
1310
1311         if (conn || status)
1312                 return conn;
1313
1314         hchan = hci_chan_create(hcon);
1315         if (!hchan)
1316                 return NULL;
1317
1318         conn = kzalloc(sizeof(struct l2cap_conn), GFP_ATOMIC);
1319         if (!conn) {
1320                 hci_chan_del(hchan);
1321                 return NULL;
1322         }
1323
1324         hcon->l2cap_data = conn;
1325         conn->hcon = hcon;
1326         conn->hchan = hchan;
1327
1328         BT_DBG("hcon %p conn %p hchan %p", hcon, conn, hchan);
1329
1330         if (hcon->hdev->le_mtu && hcon->type == LE_LINK)
1331                 conn->mtu = hcon->hdev->le_mtu;
1332         else
1333                 conn->mtu = hcon->hdev->acl_mtu;
1334
1335         conn->src = &hcon->hdev->bdaddr;
1336         conn->dst = &hcon->dst;
1337
1338         conn->feat_mask = 0;
1339
1340         spin_lock_init(&conn->lock);
1341         mutex_init(&conn->chan_lock);
1342
1343         INIT_LIST_HEAD(&conn->chan_l);
1344
1345         if (hcon->type == LE_LINK)
1346                 INIT_DELAYED_WORK(&conn->security_timer, security_timeout);
1347         else
1348                 INIT_DELAYED_WORK(&conn->info_timer, l2cap_info_timeout);
1349
1350         conn->disc_reason = HCI_ERROR_REMOTE_USER_TERM;
1351
1352         return conn;
1353 }
1354
1355 /* ---- Socket interface ---- */
1356
1357 /* Find socket with psm and source / destination bdaddr.
1358  * Returns closest match.
1359  */
1360 static struct l2cap_chan *l2cap_global_chan_by_psm(int state, __le16 psm,
1361                                                    bdaddr_t *src,
1362                                                    bdaddr_t *dst)
1363 {
1364         struct l2cap_chan *c, *c1 = NULL;
1365
1366         read_lock(&chan_list_lock);
1367
1368         list_for_each_entry(c, &chan_list, global_l) {
1369                 struct sock *sk = c->sk;
1370
1371                 if (state && c->state != state)
1372                         continue;
1373
1374                 if (c->psm == psm) {
1375                         int src_match, dst_match;
1376                         int src_any, dst_any;
1377
1378                         /* Exact match. */
1379                         src_match = !bacmp(&bt_sk(sk)->src, src);
1380                         dst_match = !bacmp(&bt_sk(sk)->dst, dst);
1381                         if (src_match && dst_match) {
1382                                 read_unlock(&chan_list_lock);
1383                                 return c;
1384                         }
1385
1386                         /* Closest match */
1387                         src_any = !bacmp(&bt_sk(sk)->src, BDADDR_ANY);
1388                         dst_any = !bacmp(&bt_sk(sk)->dst, BDADDR_ANY);
1389                         if ((src_match && dst_any) || (src_any && dst_match) ||
1390                             (src_any && dst_any))
1391                                 c1 = c;
1392                 }
1393         }
1394
1395         read_unlock(&chan_list_lock);
1396
1397         return c1;
1398 }
1399
1400 int l2cap_chan_connect(struct l2cap_chan *chan, __le16 psm, u16 cid,
1401                        bdaddr_t *dst, u8 dst_type)
1402 {
1403         struct sock *sk = chan->sk;
1404         bdaddr_t *src = &bt_sk(sk)->src;
1405         struct l2cap_conn *conn;
1406         struct hci_conn *hcon;
1407         struct hci_dev *hdev;
1408         __u8 auth_type;
1409         int err;
1410
1411         BT_DBG("%s -> %s (type %u) psm 0x%2.2x", batostr(src), batostr(dst),
1412                dst_type, __le16_to_cpu(chan->psm));
1413
1414         hdev = hci_get_route(dst, src);
1415         if (!hdev)
1416                 return -EHOSTUNREACH;
1417
1418         hci_dev_lock(hdev);
1419
1420         l2cap_chan_lock(chan);
1421
1422         /* PSM must be odd and lsb of upper byte must be 0 */
1423         if ((__le16_to_cpu(psm) & 0x0101) != 0x0001 && !cid &&
1424                                         chan->chan_type != L2CAP_CHAN_RAW) {
1425                 err = -EINVAL;
1426                 goto done;
1427         }
1428
1429         if (chan->chan_type == L2CAP_CHAN_CONN_ORIENTED && !(psm || cid)) {
1430                 err = -EINVAL;
1431                 goto done;
1432         }
1433
1434         switch (chan->mode) {
1435         case L2CAP_MODE_BASIC:
1436                 break;
1437         case L2CAP_MODE_ERTM:
1438         case L2CAP_MODE_STREAMING:
1439                 if (!disable_ertm)
1440                         break;
1441                 /* fall through */
1442         default:
1443                 err = -ENOTSUPP;
1444                 goto done;
1445         }
1446
1447         lock_sock(sk);
1448
1449         switch (sk->sk_state) {
1450         case BT_CONNECT:
1451         case BT_CONNECT2:
1452         case BT_CONFIG:
1453                 /* Already connecting */
1454                 err = 0;
1455                 release_sock(sk);
1456                 goto done;
1457
1458         case BT_CONNECTED:
1459                 /* Already connected */
1460                 err = -EISCONN;
1461                 release_sock(sk);
1462                 goto done;
1463
1464         case BT_OPEN:
1465         case BT_BOUND:
1466                 /* Can connect */
1467                 break;
1468
1469         default:
1470                 err = -EBADFD;
1471                 release_sock(sk);
1472                 goto done;
1473         }
1474
1475         /* Set destination address and psm */
1476         bacpy(&bt_sk(sk)->dst, dst);
1477
1478         release_sock(sk);
1479
1480         chan->psm = psm;
1481         chan->dcid = cid;
1482
1483         auth_type = l2cap_get_auth_type(chan);
1484
1485         if (chan->dcid == L2CAP_CID_LE_DATA)
1486                 hcon = hci_connect(hdev, LE_LINK, dst, dst_type,
1487                                    chan->sec_level, auth_type);
1488         else
1489                 hcon = hci_connect(hdev, ACL_LINK, dst, dst_type,
1490                                    chan->sec_level, auth_type);
1491
1492         if (IS_ERR(hcon)) {
1493                 err = PTR_ERR(hcon);
1494                 goto done;
1495         }
1496
1497         conn = l2cap_conn_add(hcon, 0);
1498         if (!conn) {
1499                 hci_conn_put(hcon);
1500                 err = -ENOMEM;
1501                 goto done;
1502         }
1503
1504         if (hcon->type == LE_LINK) {
1505                 err = 0;
1506
1507                 if (!list_empty(&conn->chan_l)) {
1508                         err = -EBUSY;
1509                         hci_conn_put(hcon);
1510                 }
1511
1512                 if (err)
1513                         goto done;
1514         }
1515
1516         /* Update source addr of the socket */
1517         bacpy(src, conn->src);
1518
1519         l2cap_chan_unlock(chan);
1520         l2cap_chan_add(conn, chan);
1521         l2cap_chan_lock(chan);
1522
1523         l2cap_state_change(chan, BT_CONNECT);
1524         __set_chan_timer(chan, sk->sk_sndtimeo);
1525
1526         if (hcon->state == BT_CONNECTED) {
1527                 if (chan->chan_type != L2CAP_CHAN_CONN_ORIENTED) {
1528                         __clear_chan_timer(chan);
1529                         if (l2cap_chan_check_security(chan))
1530                                 l2cap_state_change(chan, BT_CONNECTED);
1531                 } else
1532                         l2cap_do_start(chan);
1533         }
1534
1535         err = 0;
1536
1537 done:
1538         l2cap_chan_unlock(chan);
1539         hci_dev_unlock(hdev);
1540         hci_dev_put(hdev);
1541         return err;
1542 }
1543
1544 int __l2cap_wait_ack(struct sock *sk)
1545 {
1546         struct l2cap_chan *chan = l2cap_pi(sk)->chan;
1547         DECLARE_WAITQUEUE(wait, current);
1548         int err = 0;
1549         int timeo = HZ/5;
1550
1551         add_wait_queue(sk_sleep(sk), &wait);
1552         set_current_state(TASK_INTERRUPTIBLE);
1553         while (chan->unacked_frames > 0 && chan->conn) {
1554                 if (!timeo)
1555                         timeo = HZ/5;
1556
1557                 if (signal_pending(current)) {
1558                         err = sock_intr_errno(timeo);
1559                         break;
1560                 }
1561
1562                 release_sock(sk);
1563                 timeo = schedule_timeout(timeo);
1564                 lock_sock(sk);
1565                 set_current_state(TASK_INTERRUPTIBLE);
1566
1567                 err = sock_error(sk);
1568                 if (err)
1569                         break;
1570         }
1571         set_current_state(TASK_RUNNING);
1572         remove_wait_queue(sk_sleep(sk), &wait);
1573         return err;
1574 }
1575
1576 static void l2cap_monitor_timeout(struct work_struct *work)
1577 {
1578         struct l2cap_chan *chan = container_of(work, struct l2cap_chan,
1579                                                         monitor_timer.work);
1580
1581         BT_DBG("chan %p", chan);
1582
1583         l2cap_chan_lock(chan);
1584
1585         if (chan->retry_count >= chan->remote_max_tx) {
1586                 l2cap_send_disconn_req(chan->conn, chan, ECONNABORTED);
1587                 l2cap_chan_unlock(chan);
1588                 l2cap_chan_put(chan);
1589                 return;
1590         }
1591
1592         chan->retry_count++;
1593         __set_monitor_timer(chan);
1594
1595         l2cap_send_rr_or_rnr(chan, L2CAP_CTRL_POLL);
1596         l2cap_chan_unlock(chan);
1597         l2cap_chan_put(chan);
1598 }
1599
1600 static void l2cap_retrans_timeout(struct work_struct *work)
1601 {
1602         struct l2cap_chan *chan = container_of(work, struct l2cap_chan,
1603                                                         retrans_timer.work);
1604
1605         BT_DBG("chan %p", chan);
1606
1607         l2cap_chan_lock(chan);
1608
1609         chan->retry_count = 1;
1610         __set_monitor_timer(chan);
1611
1612         set_bit(CONN_WAIT_F, &chan->conn_state);
1613
1614         l2cap_send_rr_or_rnr(chan, L2CAP_CTRL_POLL);
1615
1616         l2cap_chan_unlock(chan);
1617         l2cap_chan_put(chan);
1618 }
1619
1620 static void l2cap_drop_acked_frames(struct l2cap_chan *chan)
1621 {
1622         struct sk_buff *skb;
1623
1624         while ((skb = skb_peek(&chan->tx_q)) &&
1625                         chan->unacked_frames) {
1626                 if (bt_cb(skb)->control.txseq == chan->expected_ack_seq)
1627                         break;
1628
1629                 skb = skb_dequeue(&chan->tx_q);
1630                 kfree_skb(skb);
1631
1632                 chan->unacked_frames--;
1633         }
1634
1635         if (!chan->unacked_frames)
1636                 __clear_retrans_timer(chan);
1637 }
1638
1639 static void l2cap_streaming_send(struct l2cap_chan *chan)
1640 {
1641         struct sk_buff *skb;
1642         u32 control;
1643         u16 fcs;
1644
1645         while ((skb = skb_dequeue(&chan->tx_q))) {
1646                 control = __get_control(chan, skb->data + L2CAP_HDR_SIZE);
1647                 control |= __set_txseq(chan, chan->next_tx_seq);
1648                 control |= __set_ctrl_sar(chan, bt_cb(skb)->control.sar);
1649                 __put_control(chan, control, skb->data + L2CAP_HDR_SIZE);
1650
1651                 if (chan->fcs == L2CAP_FCS_CRC16) {
1652                         fcs = crc16(0, (u8 *)skb->data,
1653                                                 skb->len - L2CAP_FCS_SIZE);
1654                         put_unaligned_le16(fcs,
1655                                         skb->data + skb->len - L2CAP_FCS_SIZE);
1656                 }
1657
1658                 l2cap_do_send(chan, skb);
1659
1660                 chan->next_tx_seq = __next_seq(chan, chan->next_tx_seq);
1661         }
1662 }
1663
1664 static void l2cap_retransmit_one_frame(struct l2cap_chan *chan, u16 tx_seq)
1665 {
1666         struct sk_buff *skb, *tx_skb;
1667         u16 fcs;
1668         u32 control;
1669
1670         skb = skb_peek(&chan->tx_q);
1671         if (!skb)
1672                 return;
1673
1674         while (bt_cb(skb)->control.txseq != tx_seq) {
1675                 if (skb_queue_is_last(&chan->tx_q, skb))
1676                         return;
1677
1678                 skb = skb_queue_next(&chan->tx_q, skb);
1679         }
1680
1681         if (bt_cb(skb)->control.retries == chan->remote_max_tx &&
1682             chan->remote_max_tx) {
1683                 l2cap_send_disconn_req(chan->conn, chan, ECONNABORTED);
1684                 return;
1685         }
1686
1687         tx_skb = skb_clone(skb, GFP_ATOMIC);
1688         bt_cb(skb)->control.retries++;
1689
1690         control = __get_control(chan, tx_skb->data + L2CAP_HDR_SIZE);
1691         control &= __get_sar_mask(chan);
1692
1693         if (test_and_clear_bit(CONN_SEND_FBIT, &chan->conn_state))
1694                 control |= __set_ctrl_final(chan);
1695
1696         control |= __set_reqseq(chan, chan->buffer_seq);
1697         control |= __set_txseq(chan, tx_seq);
1698
1699         __put_control(chan, control, tx_skb->data + L2CAP_HDR_SIZE);
1700
1701         if (chan->fcs == L2CAP_FCS_CRC16) {
1702                 fcs = crc16(0, (u8 *)tx_skb->data,
1703                                                 tx_skb->len - L2CAP_FCS_SIZE);
1704                 put_unaligned_le16(fcs,
1705                                 tx_skb->data + tx_skb->len - L2CAP_FCS_SIZE);
1706         }
1707
1708         l2cap_do_send(chan, tx_skb);
1709 }
1710
1711 static int l2cap_ertm_send(struct l2cap_chan *chan)
1712 {
1713         struct sk_buff *skb, *tx_skb;
1714         u16 fcs;
1715         u32 control;
1716         int nsent = 0;
1717
1718         if (chan->state != BT_CONNECTED)
1719                 return -ENOTCONN;
1720
1721         if (test_bit(CONN_REMOTE_BUSY, &chan->conn_state))
1722                 return 0;
1723
1724         while ((skb = chan->tx_send_head) && (!l2cap_tx_window_full(chan))) {
1725
1726                 if (bt_cb(skb)->control.retries == chan->remote_max_tx &&
1727                     chan->remote_max_tx) {
1728                         l2cap_send_disconn_req(chan->conn, chan, ECONNABORTED);
1729                         break;
1730                 }
1731
1732                 tx_skb = skb_clone(skb, GFP_ATOMIC);
1733
1734                 bt_cb(skb)->control.retries++;
1735
1736                 control = __get_control(chan, tx_skb->data + L2CAP_HDR_SIZE);
1737                 control &= __get_sar_mask(chan);
1738
1739                 if (test_and_clear_bit(CONN_SEND_FBIT, &chan->conn_state))
1740                         control |= __set_ctrl_final(chan);
1741
1742                 control |= __set_reqseq(chan, chan->buffer_seq);
1743                 control |= __set_txseq(chan, chan->next_tx_seq);
1744                 control |= __set_ctrl_sar(chan, bt_cb(skb)->control.sar);
1745
1746                 __put_control(chan, control, tx_skb->data + L2CAP_HDR_SIZE);
1747
1748                 if (chan->fcs == L2CAP_FCS_CRC16) {
1749                         fcs = crc16(0, (u8 *)skb->data,
1750                                                 tx_skb->len - L2CAP_FCS_SIZE);
1751                         put_unaligned_le16(fcs, skb->data +
1752                                                 tx_skb->len - L2CAP_FCS_SIZE);
1753                 }
1754
1755                 l2cap_do_send(chan, tx_skb);
1756
1757                 __set_retrans_timer(chan);
1758
1759                 bt_cb(skb)->control.txseq = chan->next_tx_seq;
1760
1761                 chan->next_tx_seq = __next_seq(chan, chan->next_tx_seq);
1762
1763                 if (bt_cb(skb)->control.retries == 1) {
1764                         chan->unacked_frames++;
1765
1766                         if (!nsent++)
1767                                 __clear_ack_timer(chan);
1768                 }
1769
1770                 chan->frames_sent++;
1771
1772                 if (skb_queue_is_last(&chan->tx_q, skb))
1773                         chan->tx_send_head = NULL;
1774                 else
1775                         chan->tx_send_head = skb_queue_next(&chan->tx_q, skb);
1776         }
1777
1778         return nsent;
1779 }
1780
1781 static int l2cap_retransmit_frames(struct l2cap_chan *chan)
1782 {
1783         int ret;
1784
1785         if (!skb_queue_empty(&chan->tx_q))
1786                 chan->tx_send_head = chan->tx_q.next;
1787
1788         chan->next_tx_seq = chan->expected_ack_seq;
1789         ret = l2cap_ertm_send(chan);
1790         return ret;
1791 }
1792
1793 static void __l2cap_send_ack(struct l2cap_chan *chan)
1794 {
1795         u32 control = 0;
1796
1797         control |= __set_reqseq(chan, chan->buffer_seq);
1798
1799         if (test_bit(CONN_LOCAL_BUSY, &chan->conn_state)) {
1800                 control |= __set_ctrl_super(chan, L2CAP_SUPER_RNR);
1801                 set_bit(CONN_RNR_SENT, &chan->conn_state);
1802                 l2cap_send_sframe(chan, control);
1803                 return;
1804         }
1805
1806         if (l2cap_ertm_send(chan) > 0)
1807                 return;
1808
1809         control |= __set_ctrl_super(chan, L2CAP_SUPER_RR);
1810         l2cap_send_sframe(chan, control);
1811 }
1812
1813 static void l2cap_send_ack(struct l2cap_chan *chan)
1814 {
1815         __clear_ack_timer(chan);
1816         __l2cap_send_ack(chan);
1817 }
1818
1819 static void l2cap_send_srejtail(struct l2cap_chan *chan)
1820 {
1821         struct srej_list *tail;
1822         u32 control;
1823
1824         control = __set_ctrl_super(chan, L2CAP_SUPER_SREJ);
1825         control |= __set_ctrl_final(chan);
1826
1827         tail = list_entry((&chan->srej_l)->prev, struct srej_list, list);
1828         control |= __set_reqseq(chan, tail->tx_seq);
1829
1830         l2cap_send_sframe(chan, control);
1831 }
1832
1833 static inline int l2cap_skbuff_fromiovec(struct l2cap_chan *chan,
1834                                          struct msghdr *msg, int len,
1835                                          int count, struct sk_buff *skb)
1836 {
1837         struct l2cap_conn *conn = chan->conn;
1838         struct sk_buff **frag;
1839         int sent = 0;
1840
1841         if (memcpy_fromiovec(skb_put(skb, count), msg->msg_iov, count))
1842                 return -EFAULT;
1843
1844         sent += count;
1845         len  -= count;
1846
1847         /* Continuation fragments (no L2CAP header) */
1848         frag = &skb_shinfo(skb)->frag_list;
1849         while (len) {
1850                 struct sk_buff *tmp;
1851
1852                 count = min_t(unsigned int, conn->mtu, len);
1853
1854                 tmp = chan->ops->alloc_skb(chan, count,
1855                                            msg->msg_flags & MSG_DONTWAIT);
1856                 if (IS_ERR(tmp))
1857                         return PTR_ERR(tmp);
1858
1859                 *frag = tmp;
1860
1861                 if (memcpy_fromiovec(skb_put(*frag, count), msg->msg_iov, count))
1862                         return -EFAULT;
1863
1864                 (*frag)->priority = skb->priority;
1865
1866                 sent += count;
1867                 len  -= count;
1868
1869                 skb->len += (*frag)->len;
1870                 skb->data_len += (*frag)->len;
1871
1872                 frag = &(*frag)->next;
1873         }
1874
1875         return sent;
1876 }
1877
1878 static struct sk_buff *l2cap_create_connless_pdu(struct l2cap_chan *chan,
1879                                                 struct msghdr *msg, size_t len,
1880                                                 u32 priority)
1881 {
1882         struct l2cap_conn *conn = chan->conn;
1883         struct sk_buff *skb;
1884         int err, count, hlen = L2CAP_HDR_SIZE + L2CAP_PSMLEN_SIZE;
1885         struct l2cap_hdr *lh;
1886
1887         BT_DBG("chan %p len %d priority %u", chan, (int)len, priority);
1888
1889         count = min_t(unsigned int, (conn->mtu - hlen), len);
1890
1891         skb = chan->ops->alloc_skb(chan, count + hlen,
1892                                    msg->msg_flags & MSG_DONTWAIT);
1893         if (IS_ERR(skb))
1894                 return skb;
1895
1896         skb->priority = priority;
1897
1898         /* Create L2CAP header */
1899         lh = (struct l2cap_hdr *) skb_put(skb, L2CAP_HDR_SIZE);
1900         lh->cid = cpu_to_le16(chan->dcid);
1901         lh->len = cpu_to_le16(len + L2CAP_PSMLEN_SIZE);
1902         put_unaligned(chan->psm, skb_put(skb, L2CAP_PSMLEN_SIZE));
1903
1904         err = l2cap_skbuff_fromiovec(chan, msg, len, count, skb);
1905         if (unlikely(err < 0)) {
1906                 kfree_skb(skb);
1907                 return ERR_PTR(err);
1908         }
1909         return skb;
1910 }
1911
1912 static struct sk_buff *l2cap_create_basic_pdu(struct l2cap_chan *chan,
1913                                                 struct msghdr *msg, size_t len,
1914                                                 u32 priority)
1915 {
1916         struct l2cap_conn *conn = chan->conn;
1917         struct sk_buff *skb;
1918         int err, count;
1919         struct l2cap_hdr *lh;
1920
1921         BT_DBG("chan %p len %d", chan, (int)len);
1922
1923         count = min_t(unsigned int, (conn->mtu - L2CAP_HDR_SIZE), len);
1924
1925         skb = chan->ops->alloc_skb(chan, count + L2CAP_HDR_SIZE,
1926                                    msg->msg_flags & MSG_DONTWAIT);
1927         if (IS_ERR(skb))
1928                 return skb;
1929
1930         skb->priority = priority;
1931
1932         /* Create L2CAP header */
1933         lh = (struct l2cap_hdr *) skb_put(skb, L2CAP_HDR_SIZE);
1934         lh->cid = cpu_to_le16(chan->dcid);
1935         lh->len = cpu_to_le16(len);
1936
1937         err = l2cap_skbuff_fromiovec(chan, msg, len, count, skb);
1938         if (unlikely(err < 0)) {
1939                 kfree_skb(skb);
1940                 return ERR_PTR(err);
1941         }
1942         return skb;
1943 }
1944
1945 static struct sk_buff *l2cap_create_iframe_pdu(struct l2cap_chan *chan,
1946                                                 struct msghdr *msg, size_t len,
1947                                                 u16 sdulen)
1948 {
1949         struct l2cap_conn *conn = chan->conn;
1950         struct sk_buff *skb;
1951         int err, count, hlen;
1952         struct l2cap_hdr *lh;
1953
1954         BT_DBG("chan %p len %d", chan, (int)len);
1955
1956         if (!conn)
1957                 return ERR_PTR(-ENOTCONN);
1958
1959         if (test_bit(FLAG_EXT_CTRL, &chan->flags))
1960                 hlen = L2CAP_EXT_HDR_SIZE;
1961         else
1962                 hlen = L2CAP_ENH_HDR_SIZE;
1963
1964         if (sdulen)
1965                 hlen += L2CAP_SDULEN_SIZE;
1966
1967         if (chan->fcs == L2CAP_FCS_CRC16)
1968                 hlen += L2CAP_FCS_SIZE;
1969
1970         count = min_t(unsigned int, (conn->mtu - hlen), len);
1971
1972         skb = chan->ops->alloc_skb(chan, count + hlen,
1973                                    msg->msg_flags & MSG_DONTWAIT);
1974         if (IS_ERR(skb))
1975                 return skb;
1976
1977         /* Create L2CAP header */
1978         lh = (struct l2cap_hdr *) skb_put(skb, L2CAP_HDR_SIZE);
1979         lh->cid = cpu_to_le16(chan->dcid);
1980         lh->len = cpu_to_le16(len + (hlen - L2CAP_HDR_SIZE));
1981
1982         __put_control(chan, 0, skb_put(skb, __ctrl_size(chan)));
1983
1984         if (sdulen)
1985                 put_unaligned_le16(sdulen, skb_put(skb, L2CAP_SDULEN_SIZE));
1986
1987         err = l2cap_skbuff_fromiovec(chan, msg, len, count, skb);
1988         if (unlikely(err < 0)) {
1989                 kfree_skb(skb);
1990                 return ERR_PTR(err);
1991         }
1992
1993         if (chan->fcs == L2CAP_FCS_CRC16)
1994                 put_unaligned_le16(0, skb_put(skb, L2CAP_FCS_SIZE));
1995
1996         bt_cb(skb)->control.retries = 0;
1997         return skb;
1998 }
1999
2000 static int l2cap_segment_sdu(struct l2cap_chan *chan,
2001                              struct sk_buff_head *seg_queue,
2002                              struct msghdr *msg, size_t len)
2003 {
2004         struct sk_buff *skb;
2005         u16 sdu_len;
2006         size_t pdu_len;
2007         int err = 0;
2008         u8 sar;
2009
2010         BT_DBG("chan %p, msg %p, len %d", chan, msg, (int)len);
2011
2012         /* It is critical that ERTM PDUs fit in a single HCI fragment,
2013          * so fragmented skbs are not used.  The HCI layer's handling
2014          * of fragmented skbs is not compatible with ERTM's queueing.
2015          */
2016
2017         /* PDU size is derived from the HCI MTU */
2018         pdu_len = chan->conn->mtu;
2019
2020         pdu_len = min_t(size_t, pdu_len, L2CAP_BREDR_MAX_PAYLOAD);
2021
2022         /* Adjust for largest possible L2CAP overhead. */
2023         pdu_len -= L2CAP_EXT_HDR_SIZE + L2CAP_FCS_SIZE;
2024
2025         /* Remote device may have requested smaller PDUs */
2026         pdu_len = min_t(size_t, pdu_len, chan->remote_mps);
2027
2028         if (len <= pdu_len) {
2029                 sar = L2CAP_SAR_UNSEGMENTED;
2030                 sdu_len = 0;
2031                 pdu_len = len;
2032         } else {
2033                 sar = L2CAP_SAR_START;
2034                 sdu_len = len;
2035                 pdu_len -= L2CAP_SDULEN_SIZE;
2036         }
2037
2038         while (len > 0) {
2039                 skb = l2cap_create_iframe_pdu(chan, msg, pdu_len, sdu_len);
2040
2041                 if (IS_ERR(skb)) {
2042                         __skb_queue_purge(seg_queue);
2043                         return PTR_ERR(skb);
2044                 }
2045
2046                 bt_cb(skb)->control.sar = sar;
2047                 __skb_queue_tail(seg_queue, skb);
2048
2049                 len -= pdu_len;
2050                 if (sdu_len) {
2051                         sdu_len = 0;
2052                         pdu_len += L2CAP_SDULEN_SIZE;
2053                 }
2054
2055                 if (len <= pdu_len) {
2056                         sar = L2CAP_SAR_END;
2057                         pdu_len = len;
2058                 } else {
2059                         sar = L2CAP_SAR_CONTINUE;
2060                 }
2061         }
2062
2063         return err;
2064 }
2065
2066 int l2cap_chan_send(struct l2cap_chan *chan, struct msghdr *msg, size_t len,
2067                                                                 u32 priority)
2068 {
2069         struct sk_buff *skb;
2070         int err;
2071         struct sk_buff_head seg_queue;
2072
2073         /* Connectionless channel */
2074         if (chan->chan_type == L2CAP_CHAN_CONN_LESS) {
2075                 skb = l2cap_create_connless_pdu(chan, msg, len, priority);
2076                 if (IS_ERR(skb))
2077                         return PTR_ERR(skb);
2078
2079                 l2cap_do_send(chan, skb);
2080                 return len;
2081         }
2082
2083         switch (chan->mode) {
2084         case L2CAP_MODE_BASIC:
2085                 /* Check outgoing MTU */
2086                 if (len > chan->omtu)
2087                         return -EMSGSIZE;
2088
2089                 /* Create a basic PDU */
2090                 skb = l2cap_create_basic_pdu(chan, msg, len, priority);
2091                 if (IS_ERR(skb))
2092                         return PTR_ERR(skb);
2093
2094                 l2cap_do_send(chan, skb);
2095                 err = len;
2096                 break;
2097
2098         case L2CAP_MODE_ERTM:
2099         case L2CAP_MODE_STREAMING:
2100                 /* Check outgoing MTU */
2101                 if (len > chan->omtu) {
2102                         err = -EMSGSIZE;
2103                         break;
2104                 }
2105
2106                 __skb_queue_head_init(&seg_queue);
2107
2108                 /* Do segmentation before calling in to the state machine,
2109                  * since it's possible to block while waiting for memory
2110                  * allocation.
2111                  */
2112                 err = l2cap_segment_sdu(chan, &seg_queue, msg, len);
2113
2114                 /* The channel could have been closed while segmenting,
2115                  * check that it is still connected.
2116                  */
2117                 if (chan->state != BT_CONNECTED) {
2118                         __skb_queue_purge(&seg_queue);
2119                         err = -ENOTCONN;
2120                 }
2121
2122                 if (err)
2123                         break;
2124
2125                 if (chan->mode == L2CAP_MODE_ERTM && chan->tx_send_head == NULL)
2126                         chan->tx_send_head = seg_queue.next;
2127                 skb_queue_splice_tail_init(&seg_queue, &chan->tx_q);
2128
2129                 if (chan->mode == L2CAP_MODE_ERTM)
2130                         err = l2cap_ertm_send(chan);
2131                 else
2132                         l2cap_streaming_send(chan);
2133
2134                 if (err >= 0)
2135                         err = len;
2136
2137                 /* If the skbs were not queued for sending, they'll still be in
2138                  * seg_queue and need to be purged.
2139                  */
2140                 __skb_queue_purge(&seg_queue);
2141                 break;
2142
2143         default:
2144                 BT_DBG("bad state %1.1x", chan->mode);
2145                 err = -EBADFD;
2146         }
2147
2148         return err;
2149 }
2150
2151 /* Copy frame to all raw sockets on that connection */
2152 static void l2cap_raw_recv(struct l2cap_conn *conn, struct sk_buff *skb)
2153 {
2154         struct sk_buff *nskb;
2155         struct l2cap_chan *chan;
2156
2157         BT_DBG("conn %p", conn);
2158
2159         mutex_lock(&conn->chan_lock);
2160
2161         list_for_each_entry(chan, &conn->chan_l, list) {
2162                 struct sock *sk = chan->sk;
2163                 if (chan->chan_type != L2CAP_CHAN_RAW)
2164                         continue;
2165
2166                 /* Don't send frame to the socket it came from */
2167                 if (skb->sk == sk)
2168                         continue;
2169                 nskb = skb_clone(skb, GFP_ATOMIC);
2170                 if (!nskb)
2171                         continue;
2172
2173                 if (chan->ops->recv(chan->data, nskb))
2174                         kfree_skb(nskb);
2175         }
2176
2177         mutex_unlock(&conn->chan_lock);
2178 }
2179
2180 /* ---- L2CAP signalling commands ---- */
2181 static struct sk_buff *l2cap_build_cmd(struct l2cap_conn *conn,
2182                                 u8 code, u8 ident, u16 dlen, void *data)
2183 {
2184         struct sk_buff *skb, **frag;
2185         struct l2cap_cmd_hdr *cmd;
2186         struct l2cap_hdr *lh;
2187         int len, count;
2188
2189         BT_DBG("conn %p, code 0x%2.2x, ident 0x%2.2x, len %d",
2190                         conn, code, ident, dlen);
2191
2192         len = L2CAP_HDR_SIZE + L2CAP_CMD_HDR_SIZE + dlen;
2193         count = min_t(unsigned int, conn->mtu, len);
2194
2195         skb = bt_skb_alloc(count, GFP_ATOMIC);
2196         if (!skb)
2197                 return NULL;
2198
2199         lh = (struct l2cap_hdr *) skb_put(skb, L2CAP_HDR_SIZE);
2200         lh->len = cpu_to_le16(L2CAP_CMD_HDR_SIZE + dlen);
2201
2202         if (conn->hcon->type == LE_LINK)
2203                 lh->cid = cpu_to_le16(L2CAP_CID_LE_SIGNALING);
2204         else
2205                 lh->cid = cpu_to_le16(L2CAP_CID_SIGNALING);
2206
2207         cmd = (struct l2cap_cmd_hdr *) skb_put(skb, L2CAP_CMD_HDR_SIZE);
2208         cmd->code  = code;
2209         cmd->ident = ident;
2210         cmd->len   = cpu_to_le16(dlen);
2211
2212         if (dlen) {
2213                 count -= L2CAP_HDR_SIZE + L2CAP_CMD_HDR_SIZE;
2214                 memcpy(skb_put(skb, count), data, count);
2215                 data += count;
2216         }
2217
2218         len -= skb->len;
2219
2220         /* Continuation fragments (no L2CAP header) */
2221         frag = &skb_shinfo(skb)->frag_list;
2222         while (len) {
2223                 count = min_t(unsigned int, conn->mtu, len);
2224
2225                 *frag = bt_skb_alloc(count, GFP_ATOMIC);
2226                 if (!*frag)
2227                         goto fail;
2228
2229                 memcpy(skb_put(*frag, count), data, count);
2230
2231                 len  -= count;
2232                 data += count;
2233
2234                 frag = &(*frag)->next;
2235         }
2236
2237         return skb;
2238
2239 fail:
2240         kfree_skb(skb);
2241         return NULL;
2242 }
2243
2244 static inline int l2cap_get_conf_opt(void **ptr, int *type, int *olen, unsigned long *val)
2245 {
2246         struct l2cap_conf_opt *opt = *ptr;
2247         int len;
2248
2249         len = L2CAP_CONF_OPT_SIZE + opt->len;
2250         *ptr += len;
2251
2252         *type = opt->type;
2253         *olen = opt->len;
2254
2255         switch (opt->len) {
2256         case 1:
2257                 *val = *((u8 *) opt->val);
2258                 break;
2259
2260         case 2:
2261                 *val = get_unaligned_le16(opt->val);
2262                 break;
2263
2264         case 4:
2265                 *val = get_unaligned_le32(opt->val);
2266                 break;
2267
2268         default:
2269                 *val = (unsigned long) opt->val;
2270                 break;
2271         }
2272
2273         BT_DBG("type 0x%2.2x len %d val 0x%lx", *type, opt->len, *val);
2274         return len;
2275 }
2276
2277 static void l2cap_add_conf_opt(void **ptr, u8 type, u8 len, unsigned long val)
2278 {
2279         struct l2cap_conf_opt *opt = *ptr;
2280
2281         BT_DBG("type 0x%2.2x len %d val 0x%lx", type, len, val);
2282
2283         opt->type = type;
2284         opt->len  = len;
2285
2286         switch (len) {
2287         case 1:
2288                 *((u8 *) opt->val)  = val;
2289                 break;
2290
2291         case 2:
2292                 put_unaligned_le16(val, opt->val);
2293                 break;
2294
2295         case 4:
2296                 put_unaligned_le32(val, opt->val);
2297                 break;
2298
2299         default:
2300                 memcpy(opt->val, (void *) val, len);
2301                 break;
2302         }
2303
2304         *ptr += L2CAP_CONF_OPT_SIZE + len;
2305 }
2306
2307 static void l2cap_add_opt_efs(void **ptr, struct l2cap_chan *chan)
2308 {
2309         struct l2cap_conf_efs efs;
2310
2311         switch (chan->mode) {
2312         case L2CAP_MODE_ERTM:
2313                 efs.id          = chan->local_id;
2314                 efs.stype       = chan->local_stype;
2315                 efs.msdu        = cpu_to_le16(chan->local_msdu);
2316                 efs.sdu_itime   = cpu_to_le32(chan->local_sdu_itime);
2317                 efs.acc_lat     = cpu_to_le32(L2CAP_DEFAULT_ACC_LAT);
2318                 efs.flush_to    = cpu_to_le32(L2CAP_DEFAULT_FLUSH_TO);
2319                 break;
2320
2321         case L2CAP_MODE_STREAMING:
2322                 efs.id          = 1;
2323                 efs.stype       = L2CAP_SERV_BESTEFFORT;
2324                 efs.msdu        = cpu_to_le16(chan->local_msdu);
2325                 efs.sdu_itime   = cpu_to_le32(chan->local_sdu_itime);
2326                 efs.acc_lat     = 0;
2327                 efs.flush_to    = 0;
2328                 break;
2329
2330         default:
2331                 return;
2332         }
2333
2334         l2cap_add_conf_opt(ptr, L2CAP_CONF_EFS, sizeof(efs),
2335                                                         (unsigned long) &efs);
2336 }
2337
2338 static void l2cap_ack_timeout(struct work_struct *work)
2339 {
2340         struct l2cap_chan *chan = container_of(work, struct l2cap_chan,
2341                                                         ack_timer.work);
2342
2343         BT_DBG("chan %p", chan);
2344
2345         l2cap_chan_lock(chan);
2346
2347         __l2cap_send_ack(chan);
2348
2349         l2cap_chan_unlock(chan);
2350
2351         l2cap_chan_put(chan);
2352 }
2353
2354 static inline int l2cap_ertm_init(struct l2cap_chan *chan)
2355 {
2356         int err;
2357
2358         chan->next_tx_seq = 0;
2359         chan->expected_tx_seq = 0;
2360         chan->expected_ack_seq = 0;
2361         chan->unacked_frames = 0;
2362         chan->buffer_seq = 0;
2363         chan->num_acked = 0;
2364         chan->frames_sent = 0;
2365         chan->last_acked_seq = 0;
2366         chan->sdu = NULL;
2367         chan->sdu_last_frag = NULL;
2368         chan->sdu_len = 0;
2369
2370         skb_queue_head_init(&chan->tx_q);
2371
2372         if (chan->mode != L2CAP_MODE_ERTM)
2373                 return 0;
2374
2375         chan->rx_state = L2CAP_RX_STATE_RECV;
2376         chan->tx_state = L2CAP_TX_STATE_XMIT;
2377
2378         INIT_DELAYED_WORK(&chan->retrans_timer, l2cap_retrans_timeout);
2379         INIT_DELAYED_WORK(&chan->monitor_timer, l2cap_monitor_timeout);
2380         INIT_DELAYED_WORK(&chan->ack_timer, l2cap_ack_timeout);
2381
2382         skb_queue_head_init(&chan->srej_q);
2383
2384         INIT_LIST_HEAD(&chan->srej_l);
2385         err = l2cap_seq_list_init(&chan->srej_list, chan->tx_win);
2386         if (err < 0)
2387                 return err;
2388
2389         return l2cap_seq_list_init(&chan->retrans_list, chan->remote_tx_win);
2390 }
2391
2392 static inline __u8 l2cap_select_mode(__u8 mode, __u16 remote_feat_mask)
2393 {
2394         switch (mode) {
2395         case L2CAP_MODE_STREAMING:
2396         case L2CAP_MODE_ERTM:
2397                 if (l2cap_mode_supported(mode, remote_feat_mask))
2398                         return mode;
2399                 /* fall through */
2400         default:
2401                 return L2CAP_MODE_BASIC;
2402         }
2403 }
2404
2405 static inline bool __l2cap_ews_supported(struct l2cap_chan *chan)
2406 {
2407         return enable_hs && chan->conn->feat_mask & L2CAP_FEAT_EXT_WINDOW;
2408 }
2409
2410 static inline bool __l2cap_efs_supported(struct l2cap_chan *chan)
2411 {
2412         return enable_hs && chan->conn->feat_mask & L2CAP_FEAT_EXT_FLOW;
2413 }
2414
2415 static inline void l2cap_txwin_setup(struct l2cap_chan *chan)
2416 {
2417         if (chan->tx_win > L2CAP_DEFAULT_TX_WINDOW &&
2418                                                 __l2cap_ews_supported(chan)) {
2419                 /* use extended control field */
2420                 set_bit(FLAG_EXT_CTRL, &chan->flags);
2421                 chan->tx_win_max = L2CAP_DEFAULT_EXT_WINDOW;
2422         } else {
2423                 chan->tx_win = min_t(u16, chan->tx_win,
2424                                                 L2CAP_DEFAULT_TX_WINDOW);
2425                 chan->tx_win_max = L2CAP_DEFAULT_TX_WINDOW;
2426         }
2427 }
2428
2429 static int l2cap_build_conf_req(struct l2cap_chan *chan, void *data)
2430 {
2431         struct l2cap_conf_req *req = data;
2432         struct l2cap_conf_rfc rfc = { .mode = chan->mode };
2433         void *ptr = req->data;
2434         u16 size;
2435
2436         BT_DBG("chan %p", chan);
2437
2438         if (chan->num_conf_req || chan->num_conf_rsp)
2439                 goto done;
2440
2441         switch (chan->mode) {
2442         case L2CAP_MODE_STREAMING:
2443         case L2CAP_MODE_ERTM:
2444                 if (test_bit(CONF_STATE2_DEVICE, &chan->conf_state))
2445                         break;
2446
2447                 if (__l2cap_efs_supported(chan))
2448                         set_bit(FLAG_EFS_ENABLE, &chan->flags);
2449
2450                 /* fall through */
2451         default:
2452                 chan->mode = l2cap_select_mode(rfc.mode, chan->conn->feat_mask);
2453                 break;
2454         }
2455
2456 done:
2457         if (chan->imtu != L2CAP_DEFAULT_MTU)
2458                 l2cap_add_conf_opt(&ptr, L2CAP_CONF_MTU, 2, chan->imtu);
2459
2460         switch (chan->mode) {
2461         case L2CAP_MODE_BASIC:
2462                 if (!(chan->conn->feat_mask & L2CAP_FEAT_ERTM) &&
2463                                 !(chan->conn->feat_mask & L2CAP_FEAT_STREAMING))
2464                         break;
2465
2466                 rfc.mode            = L2CAP_MODE_BASIC;
2467                 rfc.txwin_size      = 0;
2468                 rfc.max_transmit    = 0;
2469                 rfc.retrans_timeout = 0;
2470                 rfc.monitor_timeout = 0;
2471                 rfc.max_pdu_size    = 0;
2472
2473                 l2cap_add_conf_opt(&ptr, L2CAP_CONF_RFC, sizeof(rfc),
2474                                                         (unsigned long) &rfc);
2475                 break;
2476
2477         case L2CAP_MODE_ERTM:
2478                 rfc.mode            = L2CAP_MODE_ERTM;
2479                 rfc.max_transmit    = chan->max_tx;
2480                 rfc.retrans_timeout = 0;
2481                 rfc.monitor_timeout = 0;
2482
2483                 size = min_t(u16, L2CAP_DEFAULT_MAX_PDU_SIZE, chan->conn->mtu -
2484                                                 L2CAP_EXT_HDR_SIZE -
2485                                                 L2CAP_SDULEN_SIZE -
2486                                                 L2CAP_FCS_SIZE);
2487                 rfc.max_pdu_size = cpu_to_le16(size);
2488
2489                 l2cap_txwin_setup(chan);
2490
2491                 rfc.txwin_size = min_t(u16, chan->tx_win,
2492                                                 L2CAP_DEFAULT_TX_WINDOW);
2493
2494                 l2cap_add_conf_opt(&ptr, L2CAP_CONF_RFC, sizeof(rfc),
2495                                                         (unsigned long) &rfc);
2496
2497                 if (test_bit(FLAG_EFS_ENABLE, &chan->flags))
2498                         l2cap_add_opt_efs(&ptr, chan);
2499
2500                 if (!(chan->conn->feat_mask & L2CAP_FEAT_FCS))
2501                         break;
2502
2503                 if (chan->fcs == L2CAP_FCS_NONE ||
2504                                 test_bit(CONF_NO_FCS_RECV, &chan->conf_state)) {
2505                         chan->fcs = L2CAP_FCS_NONE;
2506                         l2cap_add_conf_opt(&ptr, L2CAP_CONF_FCS, 1, chan->fcs);
2507                 }
2508
2509                 if (test_bit(FLAG_EXT_CTRL, &chan->flags))
2510                         l2cap_add_conf_opt(&ptr, L2CAP_CONF_EWS, 2,
2511                                                                 chan->tx_win);
2512                 break;
2513
2514         case L2CAP_MODE_STREAMING:
2515                 rfc.mode            = L2CAP_MODE_STREAMING;
2516                 rfc.txwin_size      = 0;
2517                 rfc.max_transmit    = 0;
2518                 rfc.retrans_timeout = 0;
2519                 rfc.monitor_timeout = 0;
2520
2521                 size = min_t(u16, L2CAP_DEFAULT_MAX_PDU_SIZE, chan->conn->mtu -
2522                                                 L2CAP_EXT_HDR_SIZE -
2523                                                 L2CAP_SDULEN_SIZE -
2524                                                 L2CAP_FCS_SIZE);
2525                 rfc.max_pdu_size = cpu_to_le16(size);
2526
2527                 l2cap_add_conf_opt(&ptr, L2CAP_CONF_RFC, sizeof(rfc),
2528                                                         (unsigned long) &rfc);
2529
2530                 if (test_bit(FLAG_EFS_ENABLE, &chan->flags))
2531                         l2cap_add_opt_efs(&ptr, chan);
2532
2533                 if (!(chan->conn->feat_mask & L2CAP_FEAT_FCS))
2534                         break;
2535
2536                 if (chan->fcs == L2CAP_FCS_NONE ||
2537                                 test_bit(CONF_NO_FCS_RECV, &chan->conf_state)) {
2538                         chan->fcs = L2CAP_FCS_NONE;
2539                         l2cap_add_conf_opt(&ptr, L2CAP_CONF_FCS, 1, chan->fcs);
2540                 }
2541                 break;
2542         }
2543
2544         req->dcid  = cpu_to_le16(chan->dcid);
2545         req->flags = cpu_to_le16(0);
2546
2547         return ptr - data;
2548 }
2549
2550 static int l2cap_parse_conf_req(struct l2cap_chan *chan, void *data)
2551 {
2552         struct l2cap_conf_rsp *rsp = data;
2553         void *ptr = rsp->data;
2554         void *req = chan->conf_req;
2555         int len = chan->conf_len;
2556         int type, hint, olen;
2557         unsigned long val;
2558         struct l2cap_conf_rfc rfc = { .mode = L2CAP_MODE_BASIC };
2559         struct l2cap_conf_efs efs;
2560         u8 remote_efs = 0;
2561         u16 mtu = L2CAP_DEFAULT_MTU;
2562         u16 result = L2CAP_CONF_SUCCESS;
2563         u16 size;
2564
2565         BT_DBG("chan %p", chan);
2566
2567         while (len >= L2CAP_CONF_OPT_SIZE) {
2568                 len -= l2cap_get_conf_opt(&req, &type, &olen, &val);
2569
2570                 hint  = type & L2CAP_CONF_HINT;
2571                 type &= L2CAP_CONF_MASK;
2572
2573                 switch (type) {
2574                 case L2CAP_CONF_MTU:
2575                         mtu = val;
2576                         break;
2577
2578                 case L2CAP_CONF_FLUSH_TO:
2579                         chan->flush_to = val;
2580                         break;
2581
2582                 case L2CAP_CONF_QOS:
2583                         break;
2584
2585                 case L2CAP_CONF_RFC:
2586                         if (olen == sizeof(rfc))
2587                                 memcpy(&rfc, (void *) val, olen);
2588                         break;
2589
2590                 case L2CAP_CONF_FCS:
2591                         if (val == L2CAP_FCS_NONE)
2592                                 set_bit(CONF_NO_FCS_RECV, &chan->conf_state);
2593                         break;
2594
2595                 case L2CAP_CONF_EFS:
2596                         remote_efs = 1;
2597                         if (olen == sizeof(efs))
2598                                 memcpy(&efs, (void *) val, olen);
2599                         break;
2600
2601                 case L2CAP_CONF_EWS:
2602                         if (!enable_hs)
2603                                 return -ECONNREFUSED;
2604
2605                         set_bit(FLAG_EXT_CTRL, &chan->flags);
2606                         set_bit(CONF_EWS_RECV, &chan->conf_state);
2607                         chan->tx_win_max = L2CAP_DEFAULT_EXT_WINDOW;
2608                         chan->remote_tx_win = val;
2609                         break;
2610
2611                 default:
2612                         if (hint)
2613                                 break;
2614
2615                         result = L2CAP_CONF_UNKNOWN;
2616                         *((u8 *) ptr++) = type;
2617                         break;
2618                 }
2619         }
2620
2621         if (chan->num_conf_rsp || chan->num_conf_req > 1)
2622                 goto done;
2623
2624         switch (chan->mode) {
2625         case L2CAP_MODE_STREAMING:
2626         case L2CAP_MODE_ERTM:
2627                 if (!test_bit(CONF_STATE2_DEVICE, &chan->conf_state)) {
2628                         chan->mode = l2cap_select_mode(rfc.mode,
2629                                         chan->conn->feat_mask);
2630                         break;
2631                 }
2632
2633                 if (remote_efs) {
2634                         if (__l2cap_efs_supported(chan))
2635                                 set_bit(FLAG_EFS_ENABLE, &chan->flags);
2636                         else
2637                                 return -ECONNREFUSED;
2638                 }
2639
2640                 if (chan->mode != rfc.mode)
2641                         return -ECONNREFUSED;
2642
2643                 break;
2644         }
2645
2646 done:
2647         if (chan->mode != rfc.mode) {
2648                 result = L2CAP_CONF_UNACCEPT;
2649                 rfc.mode = chan->mode;
2650
2651                 if (chan->num_conf_rsp == 1)
2652                         return -ECONNREFUSED;
2653
2654                 l2cap_add_conf_opt(&ptr, L2CAP_CONF_RFC,
2655                                         sizeof(rfc), (unsigned long) &rfc);
2656         }
2657
2658         if (result == L2CAP_CONF_SUCCESS) {
2659                 /* Configure output options and let the other side know
2660                  * which ones we don't like. */
2661
2662                 if (mtu < L2CAP_DEFAULT_MIN_MTU)
2663                         result = L2CAP_CONF_UNACCEPT;
2664                 else {
2665                         chan->omtu = mtu;
2666                         set_bit(CONF_MTU_DONE, &chan->conf_state);
2667                 }
2668                 l2cap_add_conf_opt(&ptr, L2CAP_CONF_MTU, 2, chan->omtu);
2669
2670                 if (remote_efs) {
2671                         if (chan->local_stype != L2CAP_SERV_NOTRAFIC &&
2672                                         efs.stype != L2CAP_SERV_NOTRAFIC &&
2673                                         efs.stype != chan->local_stype) {
2674
2675                                 result = L2CAP_CONF_UNACCEPT;
2676
2677                                 if (chan->num_conf_req >= 1)
2678                                         return -ECONNREFUSED;
2679
2680                                 l2cap_add_conf_opt(&ptr, L2CAP_CONF_EFS,
2681                                                         sizeof(efs),
2682                                                         (unsigned long) &efs);
2683                         } else {
2684                                 /* Send PENDING Conf Rsp */
2685                                 result = L2CAP_CONF_PENDING;
2686                                 set_bit(CONF_LOC_CONF_PEND, &chan->conf_state);
2687                         }
2688                 }
2689
2690                 switch (rfc.mode) {
2691                 case L2CAP_MODE_BASIC:
2692                         chan->fcs = L2CAP_FCS_NONE;
2693                         set_bit(CONF_MODE_DONE, &chan->conf_state);
2694                         break;
2695
2696                 case L2CAP_MODE_ERTM:
2697                         if (!test_bit(CONF_EWS_RECV, &chan->conf_state))
2698                                 chan->remote_tx_win = rfc.txwin_size;
2699                         else
2700                                 rfc.txwin_size = L2CAP_DEFAULT_TX_WINDOW;
2701
2702                         chan->remote_max_tx = rfc.max_transmit;
2703
2704                         size = min_t(u16, le16_to_cpu(rfc.max_pdu_size),
2705                                                 chan->conn->mtu -
2706                                                 L2CAP_EXT_HDR_SIZE -
2707                                                 L2CAP_SDULEN_SIZE -
2708                                                 L2CAP_FCS_SIZE);
2709                         rfc.max_pdu_size = cpu_to_le16(size);
2710                         chan->remote_mps = size;
2711
2712                         rfc.retrans_timeout =
2713                                 __constant_cpu_to_le16(L2CAP_DEFAULT_RETRANS_TO);
2714                         rfc.monitor_timeout =
2715                                 __constant_cpu_to_le16(L2CAP_DEFAULT_MONITOR_TO);
2716
2717                         set_bit(CONF_MODE_DONE, &chan->conf_state);
2718
2719                         l2cap_add_conf_opt(&ptr, L2CAP_CONF_RFC,
2720                                         sizeof(rfc), (unsigned long) &rfc);
2721
2722                         if (test_bit(FLAG_EFS_ENABLE, &chan->flags)) {
2723                                 chan->remote_id = efs.id;
2724                                 chan->remote_stype = efs.stype;
2725                                 chan->remote_msdu = le16_to_cpu(efs.msdu);
2726                                 chan->remote_flush_to =
2727                                                 le32_to_cpu(efs.flush_to);
2728                                 chan->remote_acc_lat =
2729                                                 le32_to_cpu(efs.acc_lat);
2730                                 chan->remote_sdu_itime =
2731                                         le32_to_cpu(efs.sdu_itime);
2732                                 l2cap_add_conf_opt(&ptr, L2CAP_CONF_EFS,
2733                                         sizeof(efs), (unsigned long) &efs);
2734                         }
2735                         break;
2736
2737                 case L2CAP_MODE_STREAMING:
2738                         size = min_t(u16, le16_to_cpu(rfc.max_pdu_size),
2739                                                 chan->conn->mtu -
2740                                                 L2CAP_EXT_HDR_SIZE -
2741                                                 L2CAP_SDULEN_SIZE -
2742                                                 L2CAP_FCS_SIZE);
2743                         rfc.max_pdu_size = cpu_to_le16(size);
2744                         chan->remote_mps = size;
2745
2746                         set_bit(CONF_MODE_DONE, &chan->conf_state);
2747
2748                         l2cap_add_conf_opt(&ptr, L2CAP_CONF_RFC,
2749                                         sizeof(rfc), (unsigned long) &rfc);
2750
2751                         break;
2752
2753                 default:
2754                         result = L2CAP_CONF_UNACCEPT;
2755
2756                         memset(&rfc, 0, sizeof(rfc));
2757                         rfc.mode = chan->mode;
2758                 }
2759
2760                 if (result == L2CAP_CONF_SUCCESS)
2761                         set_bit(CONF_OUTPUT_DONE, &chan->conf_state);
2762         }
2763         rsp->scid   = cpu_to_le16(chan->dcid);
2764         rsp->result = cpu_to_le16(result);
2765         rsp->flags  = cpu_to_le16(0x0000);
2766
2767         return ptr - data;
2768 }
2769
2770 static int l2cap_parse_conf_rsp(struct l2cap_chan *chan, void *rsp, int len, void *data, u16 *result)
2771 {
2772         struct l2cap_conf_req *req = data;
2773         void *ptr = req->data;
2774         int type, olen;
2775         unsigned long val;
2776         struct l2cap_conf_rfc rfc = { .mode = L2CAP_MODE_BASIC };
2777         struct l2cap_conf_efs efs;
2778
2779         BT_DBG("chan %p, rsp %p, len %d, req %p", chan, rsp, len, data);
2780
2781         while (len >= L2CAP_CONF_OPT_SIZE) {
2782                 len -= l2cap_get_conf_opt(&rsp, &type, &olen, &val);
2783
2784                 switch (type) {
2785                 case L2CAP_CONF_MTU:
2786                         if (val < L2CAP_DEFAULT_MIN_MTU) {
2787                                 *result = L2CAP_CONF_UNACCEPT;
2788                                 chan->imtu = L2CAP_DEFAULT_MIN_MTU;
2789                         } else
2790                                 chan->imtu = val;
2791                         l2cap_add_conf_opt(&ptr, L2CAP_CONF_MTU, 2, chan->imtu);
2792                         break;
2793
2794                 case L2CAP_CONF_FLUSH_TO:
2795                         chan->flush_to = val;
2796                         l2cap_add_conf_opt(&ptr, L2CAP_CONF_FLUSH_TO,
2797                                                         2, chan->flush_to);
2798                         break;
2799
2800                 case L2CAP_CONF_RFC:
2801                         if (olen == sizeof(rfc))
2802                                 memcpy(&rfc, (void *)val, olen);
2803
2804                         if (test_bit(CONF_STATE2_DEVICE, &chan->conf_state) &&
2805                                                         rfc.mode != chan->mode)
2806                                 return -ECONNREFUSED;
2807
2808                         chan->fcs = 0;
2809
2810                         l2cap_add_conf_opt(&ptr, L2CAP_CONF_RFC,
2811                                         sizeof(rfc), (unsigned long) &rfc);
2812                         break;
2813
2814                 case L2CAP_CONF_EWS:
2815                         chan->tx_win = min_t(u16, val,
2816                                                 L2CAP_DEFAULT_EXT_WINDOW);
2817                         l2cap_add_conf_opt(&ptr, L2CAP_CONF_EWS, 2,
2818                                                         chan->tx_win);
2819                         break;
2820
2821                 case L2CAP_CONF_EFS:
2822                         if (olen == sizeof(efs))
2823                                 memcpy(&efs, (void *)val, olen);
2824
2825                         if (chan->local_stype != L2CAP_SERV_NOTRAFIC &&
2826                                         efs.stype != L2CAP_SERV_NOTRAFIC &&
2827                                         efs.stype != chan->local_stype)
2828                                 return -ECONNREFUSED;
2829
2830                         l2cap_add_conf_opt(&ptr, L2CAP_CONF_EFS,
2831                                         sizeof(efs), (unsigned long) &efs);
2832                         break;
2833                 }
2834         }
2835
2836         if (chan->mode == L2CAP_MODE_BASIC && chan->mode != rfc.mode)
2837                 return -ECONNREFUSED;
2838
2839         chan->mode = rfc.mode;
2840
2841         if (*result == L2CAP_CONF_SUCCESS || *result == L2CAP_CONF_PENDING) {
2842                 switch (rfc.mode) {
2843                 case L2CAP_MODE_ERTM:
2844                         chan->retrans_timeout = le16_to_cpu(rfc.retrans_timeout);
2845                         chan->monitor_timeout = le16_to_cpu(rfc.monitor_timeout);
2846                         chan->mps    = le16_to_cpu(rfc.max_pdu_size);
2847
2848                         if (test_bit(FLAG_EFS_ENABLE, &chan->flags)) {
2849                                 chan->local_msdu = le16_to_cpu(efs.msdu);
2850                                 chan->local_sdu_itime =
2851                                                 le32_to_cpu(efs.sdu_itime);
2852                                 chan->local_acc_lat = le32_to_cpu(efs.acc_lat);
2853                                 chan->local_flush_to =
2854                                                 le32_to_cpu(efs.flush_to);
2855                         }
2856                         break;
2857
2858                 case L2CAP_MODE_STREAMING:
2859                         chan->mps    = le16_to_cpu(rfc.max_pdu_size);
2860                 }
2861         }
2862
2863         req->dcid   = cpu_to_le16(chan->dcid);
2864         req->flags  = cpu_to_le16(0x0000);
2865
2866         return ptr - data;
2867 }
2868
2869 static int l2cap_build_conf_rsp(struct l2cap_chan *chan, void *data, u16 result, u16 flags)
2870 {
2871         struct l2cap_conf_rsp *rsp = data;
2872         void *ptr = rsp->data;
2873
2874         BT_DBG("chan %p", chan);
2875
2876         rsp->scid   = cpu_to_le16(chan->dcid);
2877         rsp->result = cpu_to_le16(result);
2878         rsp->flags  = cpu_to_le16(flags);
2879
2880         return ptr - data;
2881 }
2882
2883 void __l2cap_connect_rsp_defer(struct l2cap_chan *chan)
2884 {
2885         struct l2cap_conn_rsp rsp;
2886         struct l2cap_conn *conn = chan->conn;
2887         u8 buf[128];
2888
2889         rsp.scid   = cpu_to_le16(chan->dcid);
2890         rsp.dcid   = cpu_to_le16(chan->scid);
2891         rsp.result = cpu_to_le16(L2CAP_CR_SUCCESS);
2892         rsp.status = cpu_to_le16(L2CAP_CS_NO_INFO);
2893         l2cap_send_cmd(conn, chan->ident,
2894                                 L2CAP_CONN_RSP, sizeof(rsp), &rsp);
2895
2896         if (test_and_set_bit(CONF_REQ_SENT, &chan->conf_state))
2897                 return;
2898
2899         l2cap_send_cmd(conn, l2cap_get_ident(conn), L2CAP_CONF_REQ,
2900                         l2cap_build_conf_req(chan, buf), buf);
2901         chan->num_conf_req++;
2902 }
2903
2904 static void l2cap_conf_rfc_get(struct l2cap_chan *chan, void *rsp, int len)
2905 {
2906         int type, olen;
2907         unsigned long val;
2908         struct l2cap_conf_rfc rfc;
2909
2910         BT_DBG("chan %p, rsp %p, len %d", chan, rsp, len);
2911
2912         if ((chan->mode != L2CAP_MODE_ERTM) && (chan->mode != L2CAP_MODE_STREAMING))
2913                 return;
2914
2915         while (len >= L2CAP_CONF_OPT_SIZE) {
2916                 len -= l2cap_get_conf_opt(&rsp, &type, &olen, &val);
2917
2918                 if (type != L2CAP_CONF_RFC)
2919                         continue;
2920
2921                 if (olen != sizeof(rfc))
2922                         break;
2923
2924                 memcpy(&rfc, (void *)val, olen);
2925                 goto done;
2926         }
2927
2928         /* Use sane default values in case a misbehaving remote device
2929          * did not send an RFC option.
2930          */
2931         rfc.mode = chan->mode;
2932         rfc.retrans_timeout = cpu_to_le16(L2CAP_DEFAULT_RETRANS_TO);
2933         rfc.monitor_timeout = cpu_to_le16(L2CAP_DEFAULT_MONITOR_TO);
2934         rfc.max_pdu_size = cpu_to_le16(chan->imtu);
2935
2936         BT_ERR("Expected RFC option was not found, using defaults");
2937
2938 done:
2939         switch (rfc.mode) {
2940         case L2CAP_MODE_ERTM:
2941                 chan->retrans_timeout = le16_to_cpu(rfc.retrans_timeout);
2942                 chan->monitor_timeout = le16_to_cpu(rfc.monitor_timeout);
2943                 chan->mps    = le16_to_cpu(rfc.max_pdu_size);
2944                 break;
2945         case L2CAP_MODE_STREAMING:
2946                 chan->mps    = le16_to_cpu(rfc.max_pdu_size);
2947         }
2948 }
2949
2950 static inline int l2cap_command_rej(struct l2cap_conn *conn, struct l2cap_cmd_hdr *cmd, u8 *data)
2951 {
2952         struct l2cap_cmd_rej_unk *rej = (struct l2cap_cmd_rej_unk *) data;
2953
2954         if (rej->reason != L2CAP_REJ_NOT_UNDERSTOOD)
2955                 return 0;
2956
2957         if ((conn->info_state & L2CAP_INFO_FEAT_MASK_REQ_SENT) &&
2958                                         cmd->ident == conn->info_ident) {
2959                 cancel_delayed_work(&conn->info_timer);
2960
2961                 conn->info_state |= L2CAP_INFO_FEAT_MASK_REQ_DONE;
2962                 conn->info_ident = 0;
2963
2964                 l2cap_conn_start(conn);
2965         }
2966
2967         return 0;
2968 }
2969
2970 static inline int l2cap_connect_req(struct l2cap_conn *conn, struct l2cap_cmd_hdr *cmd, u8 *data)
2971 {
2972         struct l2cap_conn_req *req = (struct l2cap_conn_req *) data;
2973         struct l2cap_conn_rsp rsp;
2974         struct l2cap_chan *chan = NULL, *pchan;
2975         struct sock *parent, *sk = NULL;
2976         int result, status = L2CAP_CS_NO_INFO;
2977
2978         u16 dcid = 0, scid = __le16_to_cpu(req->scid);
2979         __le16 psm = req->psm;
2980
2981         BT_DBG("psm 0x%2.2x scid 0x%4.4x", __le16_to_cpu(psm), scid);
2982
2983         /* Check if we have socket listening on psm */
2984         pchan = l2cap_global_chan_by_psm(BT_LISTEN, psm, conn->src, conn->dst);
2985         if (!pchan) {
2986                 result = L2CAP_CR_BAD_PSM;
2987                 goto sendresp;
2988         }
2989
2990         parent = pchan->sk;
2991
2992         mutex_lock(&conn->chan_lock);
2993         lock_sock(parent);
2994
2995         /* Check if the ACL is secure enough (if not SDP) */
2996         if (psm != cpu_to_le16(0x0001) &&
2997                                 !hci_conn_check_link_mode(conn->hcon)) {
2998                 conn->disc_reason = HCI_ERROR_AUTH_FAILURE;
2999                 result = L2CAP_CR_SEC_BLOCK;
3000                 goto response;
3001         }
3002
3003         result = L2CAP_CR_NO_MEM;
3004
3005         /* Check for backlog size */
3006         if (sk_acceptq_is_full(parent)) {
3007                 BT_DBG("backlog full %d", parent->sk_ack_backlog);
3008                 goto response;
3009         }
3010
3011         chan = pchan->ops->new_connection(pchan->data);
3012         if (!chan)
3013                 goto response;
3014
3015         sk = chan->sk;
3016
3017         /* Check if we already have channel with that dcid */
3018         if (__l2cap_get_chan_by_dcid(conn, scid)) {
3019                 sock_set_flag(sk, SOCK_ZAPPED);
3020                 chan->ops->close(chan->data);
3021                 goto response;
3022         }
3023
3024         hci_conn_hold(conn->hcon);
3025
3026         bacpy(&bt_sk(sk)->src, conn->src);
3027         bacpy(&bt_sk(sk)->dst, conn->dst);
3028         chan->psm  = psm;
3029         chan->dcid = scid;
3030
3031         bt_accept_enqueue(parent, sk);
3032
3033         __l2cap_chan_add(conn, chan);
3034
3035         dcid = chan->scid;
3036
3037         __set_chan_timer(chan, sk->sk_sndtimeo);
3038
3039         chan->ident = cmd->ident;
3040
3041         if (conn->info_state & L2CAP_INFO_FEAT_MASK_REQ_DONE) {
3042                 if (l2cap_chan_check_security(chan)) {
3043                         if (test_bit(BT_SK_DEFER_SETUP, &bt_sk(sk)->flags)) {
3044                                 __l2cap_state_change(chan, BT_CONNECT2);
3045                                 result = L2CAP_CR_PEND;
3046                                 status = L2CAP_CS_AUTHOR_PEND;
3047                                 parent->sk_data_ready(parent, 0);
3048                         } else {
3049                                 __l2cap_state_change(chan, BT_CONFIG);
3050                                 result = L2CAP_CR_SUCCESS;
3051                                 status = L2CAP_CS_NO_INFO;
3052                         }
3053                 } else {
3054                         __l2cap_state_change(chan, BT_CONNECT2);
3055                         result = L2CAP_CR_PEND;
3056                         status = L2CAP_CS_AUTHEN_PEND;
3057                 }
3058         } else {
3059                 __l2cap_state_change(chan, BT_CONNECT2);
3060                 result = L2CAP_CR_PEND;
3061                 status = L2CAP_CS_NO_INFO;
3062         }
3063
3064 response:
3065         release_sock(parent);
3066         mutex_unlock(&conn->chan_lock);
3067
3068 sendresp:
3069         rsp.scid   = cpu_to_le16(scid);
3070         rsp.dcid   = cpu_to_le16(dcid);
3071         rsp.result = cpu_to_le16(result);
3072         rsp.status = cpu_to_le16(status);
3073         l2cap_send_cmd(conn, cmd->ident, L2CAP_CONN_RSP, sizeof(rsp), &rsp);
3074
3075         if (result == L2CAP_CR_PEND && status == L2CAP_CS_NO_INFO) {
3076                 struct l2cap_info_req info;
3077                 info.type = cpu_to_le16(L2CAP_IT_FEAT_MASK);
3078
3079                 conn->info_state |= L2CAP_INFO_FEAT_MASK_REQ_SENT;
3080                 conn->info_ident = l2cap_get_ident(conn);
3081
3082                 schedule_delayed_work(&conn->info_timer, L2CAP_INFO_TIMEOUT);
3083
3084                 l2cap_send_cmd(conn, conn->info_ident,
3085                                         L2CAP_INFO_REQ, sizeof(info), &info);
3086         }
3087
3088         if (chan && !test_bit(CONF_REQ_SENT, &chan->conf_state) &&
3089                                 result == L2CAP_CR_SUCCESS) {
3090                 u8 buf[128];
3091                 set_bit(CONF_REQ_SENT, &chan->conf_state);
3092                 l2cap_send_cmd(conn, l2cap_get_ident(conn), L2CAP_CONF_REQ,
3093                                         l2cap_build_conf_req(chan, buf), buf);
3094                 chan->num_conf_req++;
3095         }
3096
3097         return 0;
3098 }
3099
3100 static inline int l2cap_connect_rsp(struct l2cap_conn *conn, struct l2cap_cmd_hdr *cmd, u8 *data)
3101 {
3102         struct l2cap_conn_rsp *rsp = (struct l2cap_conn_rsp *) data;
3103         u16 scid, dcid, result, status;
3104         struct l2cap_chan *chan;
3105         u8 req[128];
3106         int err;
3107
3108         scid   = __le16_to_cpu(rsp->scid);
3109         dcid   = __le16_to_cpu(rsp->dcid);
3110         result = __le16_to_cpu(rsp->result);
3111         status = __le16_to_cpu(rsp->status);
3112
3113         BT_DBG("dcid 0x%4.4x scid 0x%4.4x result 0x%2.2x status 0x%2.2x",
3114                                                 dcid, scid, result, status);
3115
3116         mutex_lock(&conn->chan_lock);
3117
3118         if (scid) {
3119                 chan = __l2cap_get_chan_by_scid(conn, scid);
3120                 if (!chan) {
3121                         err = -EFAULT;
3122                         goto unlock;
3123                 }
3124         } else {
3125                 chan = __l2cap_get_chan_by_ident(conn, cmd->ident);
3126                 if (!chan) {
3127                         err = -EFAULT;
3128                         goto unlock;
3129                 }
3130         }
3131
3132         err = 0;
3133
3134         l2cap_chan_lock(chan);
3135
3136         switch (result) {
3137         case L2CAP_CR_SUCCESS:
3138                 l2cap_state_change(chan, BT_CONFIG);
3139                 chan->ident = 0;
3140                 chan->dcid = dcid;
3141                 clear_bit(CONF_CONNECT_PEND, &chan->conf_state);
3142
3143                 if (test_and_set_bit(CONF_REQ_SENT, &chan->conf_state))
3144                         break;
3145
3146                 l2cap_send_cmd(conn, l2cap_get_ident(conn), L2CAP_CONF_REQ,
3147                                         l2cap_build_conf_req(chan, req), req);
3148                 chan->num_conf_req++;
3149                 break;
3150
3151         case L2CAP_CR_PEND:
3152                 set_bit(CONF_CONNECT_PEND, &chan->conf_state);
3153                 break;
3154
3155         default:
3156                 l2cap_chan_del(chan, ECONNREFUSED);
3157                 break;
3158         }
3159
3160         l2cap_chan_unlock(chan);
3161
3162 unlock:
3163         mutex_unlock(&conn->chan_lock);
3164
3165         return err;
3166 }
3167
3168 static inline void set_default_fcs(struct l2cap_chan *chan)
3169 {
3170         /* FCS is enabled only in ERTM or streaming mode, if one or both
3171          * sides request it.
3172          */
3173         if (chan->mode != L2CAP_MODE_ERTM && chan->mode != L2CAP_MODE_STREAMING)
3174                 chan->fcs = L2CAP_FCS_NONE;
3175         else if (!test_bit(CONF_NO_FCS_RECV, &chan->conf_state))
3176                 chan->fcs = L2CAP_FCS_CRC16;
3177 }
3178
3179 static inline int l2cap_config_req(struct l2cap_conn *conn, struct l2cap_cmd_hdr *cmd, u16 cmd_len, u8 *data)
3180 {
3181         struct l2cap_conf_req *req = (struct l2cap_conf_req *) data;
3182         u16 dcid, flags;
3183         u8 rsp[64];
3184         struct l2cap_chan *chan;
3185         int len, err = 0;
3186
3187         dcid  = __le16_to_cpu(req->dcid);
3188         flags = __le16_to_cpu(req->flags);
3189
3190         BT_DBG("dcid 0x%4.4x flags 0x%2.2x", dcid, flags);
3191
3192         chan = l2cap_get_chan_by_scid(conn, dcid);
3193         if (!chan)
3194                 return -ENOENT;
3195
3196         if (chan->state != BT_CONFIG && chan->state != BT_CONNECT2) {
3197                 struct l2cap_cmd_rej_cid rej;
3198
3199                 rej.reason = cpu_to_le16(L2CAP_REJ_INVALID_CID);
3200                 rej.scid = cpu_to_le16(chan->scid);
3201                 rej.dcid = cpu_to_le16(chan->dcid);
3202
3203                 l2cap_send_cmd(conn, cmd->ident, L2CAP_COMMAND_REJ,
3204                                 sizeof(rej), &rej);
3205                 goto unlock;
3206         }
3207
3208         /* Reject if config buffer is too small. */
3209         len = cmd_len - sizeof(*req);
3210         if (len < 0 || chan->conf_len + len > sizeof(chan->conf_req)) {
3211                 l2cap_send_cmd(conn, cmd->ident, L2CAP_CONF_RSP,
3212                                 l2cap_build_conf_rsp(chan, rsp,
3213                                         L2CAP_CONF_REJECT, flags), rsp);
3214                 goto unlock;
3215         }
3216
3217         /* Store config. */
3218         memcpy(chan->conf_req + chan->conf_len, req->data, len);
3219         chan->conf_len += len;
3220
3221         if (flags & 0x0001) {
3222                 /* Incomplete config. Send empty response. */
3223                 l2cap_send_cmd(conn, cmd->ident, L2CAP_CONF_RSP,
3224                                 l2cap_build_conf_rsp(chan, rsp,
3225                                         L2CAP_CONF_SUCCESS, 0x0001), rsp);
3226                 goto unlock;
3227         }
3228
3229         /* Complete config. */
3230         len = l2cap_parse_conf_req(chan, rsp);
3231         if (len < 0) {
3232                 l2cap_send_disconn_req(conn, chan, ECONNRESET);
3233                 goto unlock;
3234         }
3235
3236         l2cap_send_cmd(conn, cmd->ident, L2CAP_CONF_RSP, len, rsp);
3237         chan->num_conf_rsp++;
3238
3239         /* Reset config buffer. */
3240         chan->conf_len = 0;
3241
3242         if (!test_bit(CONF_OUTPUT_DONE, &chan->conf_state))
3243                 goto unlock;
3244
3245         if (test_bit(CONF_INPUT_DONE, &chan->conf_state)) {
3246                 set_default_fcs(chan);
3247
3248                 l2cap_state_change(chan, BT_CONNECTED);
3249
3250                 if (chan->mode == L2CAP_MODE_ERTM ||
3251                     chan->mode == L2CAP_MODE_STREAMING)
3252                         err = l2cap_ertm_init(chan);
3253
3254                 if (err < 0)
3255                         l2cap_send_disconn_req(chan->conn, chan, -err);
3256                 else
3257                         l2cap_chan_ready(chan);
3258
3259                 goto unlock;
3260         }
3261
3262         if (!test_and_set_bit(CONF_REQ_SENT, &chan->conf_state)) {
3263                 u8 buf[64];
3264                 l2cap_send_cmd(conn, l2cap_get_ident(conn), L2CAP_CONF_REQ,
3265                                         l2cap_build_conf_req(chan, buf), buf);
3266                 chan->num_conf_req++;
3267         }
3268
3269         /* Got Conf Rsp PENDING from remote side and asume we sent
3270            Conf Rsp PENDING in the code above */
3271         if (test_bit(CONF_REM_CONF_PEND, &chan->conf_state) &&
3272                         test_bit(CONF_LOC_CONF_PEND, &chan->conf_state)) {
3273
3274                 /* check compatibility */
3275
3276                 clear_bit(CONF_LOC_CONF_PEND, &chan->conf_state);
3277                 set_bit(CONF_OUTPUT_DONE, &chan->conf_state);
3278
3279                 l2cap_send_cmd(conn, cmd->ident, L2CAP_CONF_RSP,
3280                                         l2cap_build_conf_rsp(chan, rsp,
3281                                         L2CAP_CONF_SUCCESS, 0x0000), rsp);
3282         }
3283
3284 unlock:
3285         l2cap_chan_unlock(chan);
3286         return err;
3287 }
3288
3289 static inline int l2cap_config_rsp(struct l2cap_conn *conn, struct l2cap_cmd_hdr *cmd, u8 *data)
3290 {
3291         struct l2cap_conf_rsp *rsp = (struct l2cap_conf_rsp *)data;
3292         u16 scid, flags, result;
3293         struct l2cap_chan *chan;
3294         int len = le16_to_cpu(cmd->len) - sizeof(*rsp);
3295         int err = 0;
3296
3297         scid   = __le16_to_cpu(rsp->scid);
3298         flags  = __le16_to_cpu(rsp->flags);
3299         result = __le16_to_cpu(rsp->result);
3300
3301         BT_DBG("scid 0x%4.4x flags 0x%2.2x result 0x%2.2x len %d", scid, flags,
3302                result, len);
3303
3304         chan = l2cap_get_chan_by_scid(conn, scid);
3305         if (!chan)
3306                 return 0;
3307
3308         switch (result) {
3309         case L2CAP_CONF_SUCCESS:
3310                 l2cap_conf_rfc_get(chan, rsp->data, len);
3311                 clear_bit(CONF_REM_CONF_PEND, &chan->conf_state);
3312                 break;
3313
3314         case L2CAP_CONF_PENDING:
3315                 set_bit(CONF_REM_CONF_PEND, &chan->conf_state);
3316
3317                 if (test_bit(CONF_LOC_CONF_PEND, &chan->conf_state)) {
3318                         char buf[64];
3319
3320                         len = l2cap_parse_conf_rsp(chan, rsp->data, len,
3321                                                                 buf, &result);
3322                         if (len < 0) {
3323                                 l2cap_send_disconn_req(conn, chan, ECONNRESET);
3324                                 goto done;
3325                         }
3326
3327                         /* check compatibility */
3328
3329                         clear_bit(CONF_LOC_CONF_PEND, &chan->conf_state);
3330                         set_bit(CONF_OUTPUT_DONE, &chan->conf_state);
3331
3332                         l2cap_send_cmd(conn, cmd->ident, L2CAP_CONF_RSP,
3333                                                 l2cap_build_conf_rsp(chan, buf,
3334                                                 L2CAP_CONF_SUCCESS, 0x0000), buf);
3335                 }
3336                 goto done;
3337
3338         case L2CAP_CONF_UNACCEPT:
3339                 if (chan->num_conf_rsp <= L2CAP_CONF_MAX_CONF_RSP) {
3340                         char req[64];
3341
3342                         if (len > sizeof(req) - sizeof(struct l2cap_conf_req)) {
3343                                 l2cap_send_disconn_req(conn, chan, ECONNRESET);
3344                                 goto done;
3345                         }
3346
3347                         /* throw out any old stored conf requests */
3348                         result = L2CAP_CONF_SUCCESS;
3349                         len = l2cap_parse_conf_rsp(chan, rsp->data, len,
3350                                                                 req, &result);
3351                         if (len < 0) {
3352                                 l2cap_send_disconn_req(conn, chan, ECONNRESET);
3353                                 goto done;
3354                         }
3355
3356                         l2cap_send_cmd(conn, l2cap_get_ident(conn),
3357                                                 L2CAP_CONF_REQ, len, req);
3358                         chan->num_conf_req++;
3359                         if (result != L2CAP_CONF_SUCCESS)
3360                                 goto done;
3361                         break;
3362                 }
3363
3364         default:
3365                 l2cap_chan_set_err(chan, ECONNRESET);
3366
3367                 __set_chan_timer(chan, L2CAP_DISC_REJ_TIMEOUT);
3368                 l2cap_send_disconn_req(conn, chan, ECONNRESET);
3369                 goto done;
3370         }
3371
3372         if (flags & 0x01)
3373                 goto done;
3374
3375         set_bit(CONF_INPUT_DONE, &chan->conf_state);
3376
3377         if (test_bit(CONF_OUTPUT_DONE, &chan->conf_state)) {
3378                 set_default_fcs(chan);
3379
3380                 l2cap_state_change(chan, BT_CONNECTED);
3381                 if (chan->mode == L2CAP_MODE_ERTM ||
3382                     chan->mode == L2CAP_MODE_STREAMING)
3383                         err = l2cap_ertm_init(chan);
3384
3385                 if (err < 0)
3386                         l2cap_send_disconn_req(chan->conn, chan, -err);
3387                 else
3388                         l2cap_chan_ready(chan);
3389         }
3390
3391 done:
3392         l2cap_chan_unlock(chan);
3393         return err;
3394 }
3395
3396 static inline int l2cap_disconnect_req(struct l2cap_conn *conn, struct l2cap_cmd_hdr *cmd, u8 *data)
3397 {
3398         struct l2cap_disconn_req *req = (struct l2cap_disconn_req *) data;
3399         struct l2cap_disconn_rsp rsp;
3400         u16 dcid, scid;
3401         struct l2cap_chan *chan;
3402         struct sock *sk;
3403
3404         scid = __le16_to_cpu(req->scid);
3405         dcid = __le16_to_cpu(req->dcid);
3406
3407         BT_DBG("scid 0x%4.4x dcid 0x%4.4x", scid, dcid);
3408
3409         mutex_lock(&conn->chan_lock);
3410
3411         chan = __l2cap_get_chan_by_scid(conn, dcid);
3412         if (!chan) {
3413                 mutex_unlock(&conn->chan_lock);
3414                 return 0;
3415         }
3416
3417         l2cap_chan_lock(chan);
3418
3419         sk = chan->sk;
3420
3421         rsp.dcid = cpu_to_le16(chan->scid);
3422         rsp.scid = cpu_to_le16(chan->dcid);
3423         l2cap_send_cmd(conn, cmd->ident, L2CAP_DISCONN_RSP, sizeof(rsp), &rsp);
3424
3425         lock_sock(sk);
3426         sk->sk_shutdown = SHUTDOWN_MASK;
3427         release_sock(sk);
3428
3429         l2cap_chan_hold(chan);
3430         l2cap_chan_del(chan, ECONNRESET);
3431
3432         l2cap_chan_unlock(chan);
3433
3434         chan->ops->close(chan->data);
3435         l2cap_chan_put(chan);
3436
3437         mutex_unlock(&conn->chan_lock);
3438
3439         return 0;
3440 }
3441
3442 static inline int l2cap_disconnect_rsp(struct l2cap_conn *conn, struct l2cap_cmd_hdr *cmd, u8 *data)
3443 {
3444         struct l2cap_disconn_rsp *rsp = (struct l2cap_disconn_rsp *) data;
3445         u16 dcid, scid;
3446         struct l2cap_chan *chan;
3447
3448         scid = __le16_to_cpu(rsp->scid);
3449         dcid = __le16_to_cpu(rsp->dcid);
3450
3451         BT_DBG("dcid 0x%4.4x scid 0x%4.4x", dcid, scid);
3452
3453         mutex_lock(&conn->chan_lock);
3454
3455         chan = __l2cap_get_chan_by_scid(conn, scid);
3456         if (!chan) {
3457                 mutex_unlock(&conn->chan_lock);
3458                 return 0;
3459         }
3460
3461         l2cap_chan_lock(chan);
3462
3463         l2cap_chan_hold(chan);
3464         l2cap_chan_del(chan, 0);
3465
3466         l2cap_chan_unlock(chan);
3467
3468         chan->ops->close(chan->data);
3469         l2cap_chan_put(chan);
3470
3471         mutex_unlock(&conn->chan_lock);
3472
3473         return 0;
3474 }
3475
3476 static inline int l2cap_information_req(struct l2cap_conn *conn, struct l2cap_cmd_hdr *cmd, u8 *data)
3477 {
3478         struct l2cap_info_req *req = (struct l2cap_info_req *) data;
3479         u16 type;
3480
3481         type = __le16_to_cpu(req->type);
3482
3483         BT_DBG("type 0x%4.4x", type);
3484
3485         if (type == L2CAP_IT_FEAT_MASK) {
3486                 u8 buf[8];
3487                 u32 feat_mask = l2cap_feat_mask;
3488                 struct l2cap_info_rsp *rsp = (struct l2cap_info_rsp *) buf;
3489                 rsp->type   = cpu_to_le16(L2CAP_IT_FEAT_MASK);
3490                 rsp->result = cpu_to_le16(L2CAP_IR_SUCCESS);
3491                 if (!disable_ertm)
3492                         feat_mask |= L2CAP_FEAT_ERTM | L2CAP_FEAT_STREAMING
3493                                                          | L2CAP_FEAT_FCS;
3494                 if (enable_hs)
3495                         feat_mask |= L2CAP_FEAT_EXT_FLOW
3496                                                 | L2CAP_FEAT_EXT_WINDOW;
3497
3498                 put_unaligned_le32(feat_mask, rsp->data);
3499                 l2cap_send_cmd(conn, cmd->ident,
3500                                         L2CAP_INFO_RSP, sizeof(buf), buf);
3501         } else if (type == L2CAP_IT_FIXED_CHAN) {
3502                 u8 buf[12];
3503                 struct l2cap_info_rsp *rsp = (struct l2cap_info_rsp *) buf;
3504
3505                 if (enable_hs)
3506                         l2cap_fixed_chan[0] |= L2CAP_FC_A2MP;
3507                 else
3508                         l2cap_fixed_chan[0] &= ~L2CAP_FC_A2MP;
3509
3510                 rsp->type   = cpu_to_le16(L2CAP_IT_FIXED_CHAN);
3511                 rsp->result = cpu_to_le16(L2CAP_IR_SUCCESS);
3512                 memcpy(rsp->data, l2cap_fixed_chan, sizeof(l2cap_fixed_chan));
3513                 l2cap_send_cmd(conn, cmd->ident,
3514                                         L2CAP_INFO_RSP, sizeof(buf), buf);
3515         } else {
3516                 struct l2cap_info_rsp rsp;
3517                 rsp.type   = cpu_to_le16(type);
3518                 rsp.result = cpu_to_le16(L2CAP_IR_NOTSUPP);
3519                 l2cap_send_cmd(conn, cmd->ident,
3520                                         L2CAP_INFO_RSP, sizeof(rsp), &rsp);
3521         }
3522
3523         return 0;
3524 }
3525
3526 static inline int l2cap_information_rsp(struct l2cap_conn *conn, struct l2cap_cmd_hdr *cmd, u8 *data)
3527 {
3528         struct l2cap_info_rsp *rsp = (struct l2cap_info_rsp *) data;
3529         u16 type, result;
3530
3531         type   = __le16_to_cpu(rsp->type);
3532         result = __le16_to_cpu(rsp->result);
3533
3534         BT_DBG("type 0x%4.4x result 0x%2.2x", type, result);
3535
3536         /* L2CAP Info req/rsp are unbound to channels, add extra checks */
3537         if (cmd->ident != conn->info_ident ||
3538                         conn->info_state & L2CAP_INFO_FEAT_MASK_REQ_DONE)
3539                 return 0;
3540
3541         cancel_delayed_work(&conn->info_timer);
3542
3543         if (result != L2CAP_IR_SUCCESS) {
3544                 conn->info_state |= L2CAP_INFO_FEAT_MASK_REQ_DONE;
3545                 conn->info_ident = 0;
3546
3547                 l2cap_conn_start(conn);
3548
3549                 return 0;
3550         }
3551
3552         switch (type) {
3553         case L2CAP_IT_FEAT_MASK:
3554                 conn->feat_mask = get_unaligned_le32(rsp->data);
3555
3556                 if (conn->feat_mask & L2CAP_FEAT_FIXED_CHAN) {
3557                         struct l2cap_info_req req;
3558                         req.type = cpu_to_le16(L2CAP_IT_FIXED_CHAN);
3559
3560                         conn->info_ident = l2cap_get_ident(conn);
3561
3562                         l2cap_send_cmd(conn, conn->info_ident,
3563                                         L2CAP_INFO_REQ, sizeof(req), &req);
3564                 } else {
3565                         conn->info_state |= L2CAP_INFO_FEAT_MASK_REQ_DONE;
3566                         conn->info_ident = 0;
3567
3568                         l2cap_conn_start(conn);
3569                 }
3570                 break;
3571
3572         case L2CAP_IT_FIXED_CHAN:
3573                 conn->fixed_chan_mask = rsp->data[0];
3574                 conn->info_state |= L2CAP_INFO_FEAT_MASK_REQ_DONE;
3575                 conn->info_ident = 0;
3576
3577                 l2cap_conn_start(conn);
3578                 break;
3579         }
3580
3581         return 0;
3582 }
3583
3584 static inline int l2cap_create_channel_req(struct l2cap_conn *conn,
3585                                         struct l2cap_cmd_hdr *cmd, u16 cmd_len,
3586                                         void *data)
3587 {
3588         struct l2cap_create_chan_req *req = data;
3589         struct l2cap_create_chan_rsp rsp;
3590         u16 psm, scid;
3591
3592         if (cmd_len != sizeof(*req))
3593                 return -EPROTO;
3594
3595         if (!enable_hs)
3596                 return -EINVAL;
3597
3598         psm = le16_to_cpu(req->psm);
3599         scid = le16_to_cpu(req->scid);
3600
3601         BT_DBG("psm %d, scid %d, amp_id %d", psm, scid, req->amp_id);
3602
3603         /* Placeholder: Always reject */
3604         rsp.dcid = 0;
3605         rsp.scid = cpu_to_le16(scid);
3606         rsp.result = __constant_cpu_to_le16(L2CAP_CR_NO_MEM);
3607         rsp.status = __constant_cpu_to_le16(L2CAP_CS_NO_INFO);
3608
3609         l2cap_send_cmd(conn, cmd->ident, L2CAP_CREATE_CHAN_RSP,
3610                        sizeof(rsp), &rsp);
3611
3612         return 0;
3613 }
3614
3615 static inline int l2cap_create_channel_rsp(struct l2cap_conn *conn,
3616                                         struct l2cap_cmd_hdr *cmd, void *data)
3617 {
3618         BT_DBG("conn %p", conn);
3619
3620         return l2cap_connect_rsp(conn, cmd, data);
3621 }
3622
3623 static void l2cap_send_move_chan_rsp(struct l2cap_conn *conn, u8 ident,
3624                                                         u16 icid, u16 result)
3625 {
3626         struct l2cap_move_chan_rsp rsp;
3627
3628         BT_DBG("icid %d, result %d", icid, result);
3629
3630         rsp.icid = cpu_to_le16(icid);
3631         rsp.result = cpu_to_le16(result);
3632
3633         l2cap_send_cmd(conn, ident, L2CAP_MOVE_CHAN_RSP, sizeof(rsp), &rsp);
3634 }
3635
3636 static void l2cap_send_move_chan_cfm(struct l2cap_conn *conn,
3637                                 struct l2cap_chan *chan, u16 icid, u16 result)
3638 {
3639         struct l2cap_move_chan_cfm cfm;
3640         u8 ident;
3641
3642         BT_DBG("icid %d, result %d", icid, result);
3643
3644         ident = l2cap_get_ident(conn);
3645         if (chan)
3646                 chan->ident = ident;
3647
3648         cfm.icid = cpu_to_le16(icid);
3649         cfm.result = cpu_to_le16(result);
3650
3651         l2cap_send_cmd(conn, ident, L2CAP_MOVE_CHAN_CFM, sizeof(cfm), &cfm);
3652 }
3653
3654 static void l2cap_send_move_chan_cfm_rsp(struct l2cap_conn *conn, u8 ident,
3655                                                                 u16 icid)
3656 {
3657         struct l2cap_move_chan_cfm_rsp rsp;
3658
3659         BT_DBG("icid %d", icid);
3660
3661         rsp.icid = cpu_to_le16(icid);
3662         l2cap_send_cmd(conn, ident, L2CAP_MOVE_CHAN_CFM_RSP, sizeof(rsp), &rsp);
3663 }
3664
3665 static inline int l2cap_move_channel_req(struct l2cap_conn *conn,
3666                         struct l2cap_cmd_hdr *cmd, u16 cmd_len, void *data)
3667 {
3668         struct l2cap_move_chan_req *req = data;
3669         u16 icid = 0;
3670         u16 result = L2CAP_MR_NOT_ALLOWED;
3671
3672         if (cmd_len != sizeof(*req))
3673                 return -EPROTO;
3674
3675         icid = le16_to_cpu(req->icid);
3676
3677         BT_DBG("icid %d, dest_amp_id %d", icid, req->dest_amp_id);
3678
3679         if (!enable_hs)
3680                 return -EINVAL;
3681
3682         /* Placeholder: Always refuse */
3683         l2cap_send_move_chan_rsp(conn, cmd->ident, icid, result);
3684
3685         return 0;
3686 }
3687
3688 static inline int l2cap_move_channel_rsp(struct l2cap_conn *conn,
3689                         struct l2cap_cmd_hdr *cmd, u16 cmd_len, void *data)
3690 {
3691         struct l2cap_move_chan_rsp *rsp = data;
3692         u16 icid, result;
3693
3694         if (cmd_len != sizeof(*rsp))
3695                 return -EPROTO;
3696
3697         icid = le16_to_cpu(rsp->icid);
3698         result = le16_to_cpu(rsp->result);
3699
3700         BT_DBG("icid %d, result %d", icid, result);
3701
3702         /* Placeholder: Always unconfirmed */
3703         l2cap_send_move_chan_cfm(conn, NULL, icid, L2CAP_MC_UNCONFIRMED);
3704
3705         return 0;
3706 }
3707
3708 static inline int l2cap_move_channel_confirm(struct l2cap_conn *conn,
3709                         struct l2cap_cmd_hdr *cmd, u16 cmd_len, void *data)
3710 {
3711         struct l2cap_move_chan_cfm *cfm = data;
3712         u16 icid, result;
3713
3714         if (cmd_len != sizeof(*cfm))
3715                 return -EPROTO;
3716
3717         icid = le16_to_cpu(cfm->icid);
3718         result = le16_to_cpu(cfm->result);
3719
3720         BT_DBG("icid %d, result %d", icid, result);
3721
3722         l2cap_send_move_chan_cfm_rsp(conn, cmd->ident, icid);
3723
3724         return 0;
3725 }
3726
3727 static inline int l2cap_move_channel_confirm_rsp(struct l2cap_conn *conn,
3728                         struct l2cap_cmd_hdr *cmd, u16 cmd_len, void *data)
3729 {
3730         struct l2cap_move_chan_cfm_rsp *rsp = data;
3731         u16 icid;
3732
3733         if (cmd_len != sizeof(*rsp))
3734                 return -EPROTO;
3735
3736         icid = le16_to_cpu(rsp->icid);
3737
3738         BT_DBG("icid %d", icid);
3739
3740         return 0;
3741 }
3742
3743 static inline int l2cap_check_conn_param(u16 min, u16 max, u16 latency,
3744                                                         u16 to_multiplier)
3745 {
3746         u16 max_latency;
3747
3748         if (min > max || min < 6 || max > 3200)
3749                 return -EINVAL;
3750
3751         if (to_multiplier < 10 || to_multiplier > 3200)
3752                 return -EINVAL;
3753
3754         if (max >= to_multiplier * 8)
3755                 return -EINVAL;
3756
3757         max_latency = (to_multiplier * 8 / max) - 1;
3758         if (latency > 499 || latency > max_latency)
3759                 return -EINVAL;
3760
3761         return 0;
3762 }
3763
3764 static inline int l2cap_conn_param_update_req(struct l2cap_conn *conn,
3765                                         struct l2cap_cmd_hdr *cmd, u8 *data)
3766 {
3767         struct hci_conn *hcon = conn->hcon;
3768         struct l2cap_conn_param_update_req *req;
3769         struct l2cap_conn_param_update_rsp rsp;
3770         u16 min, max, latency, to_multiplier, cmd_len;
3771         int err;
3772
3773         if (!(hcon->link_mode & HCI_LM_MASTER))
3774                 return -EINVAL;
3775
3776         cmd_len = __le16_to_cpu(cmd->len);
3777         if (cmd_len != sizeof(struct l2cap_conn_param_update_req))
3778                 return -EPROTO;
3779
3780         req = (struct l2cap_conn_param_update_req *) data;
3781         min             = __le16_to_cpu(req->min);
3782         max             = __le16_to_cpu(req->max);
3783         latency         = __le16_to_cpu(req->latency);
3784         to_multiplier   = __le16_to_cpu(req->to_multiplier);
3785
3786         BT_DBG("min 0x%4.4x max 0x%4.4x latency: 0x%4.4x Timeout: 0x%4.4x",
3787                                                 min, max, latency, to_multiplier);
3788
3789         memset(&rsp, 0, sizeof(rsp));
3790
3791         err = l2cap_check_conn_param(min, max, latency, to_multiplier);
3792         if (err)
3793                 rsp.result = cpu_to_le16(L2CAP_CONN_PARAM_REJECTED);
3794         else
3795                 rsp.result = cpu_to_le16(L2CAP_CONN_PARAM_ACCEPTED);
3796
3797         l2cap_send_cmd(conn, cmd->ident, L2CAP_CONN_PARAM_UPDATE_RSP,
3798                                                         sizeof(rsp), &rsp);
3799
3800         if (!err)
3801                 hci_le_conn_update(hcon, min, max, latency, to_multiplier);
3802
3803         return 0;
3804 }
3805
3806 static inline int l2cap_bredr_sig_cmd(struct l2cap_conn *conn,
3807                         struct l2cap_cmd_hdr *cmd, u16 cmd_len, u8 *data)
3808 {
3809         int err = 0;
3810
3811         switch (cmd->code) {
3812         case L2CAP_COMMAND_REJ:
3813                 l2cap_command_rej(conn, cmd, data);
3814                 break;
3815
3816         case L2CAP_CONN_REQ:
3817                 err = l2cap_connect_req(conn, cmd, data);
3818                 break;
3819
3820         case L2CAP_CONN_RSP:
3821                 err = l2cap_connect_rsp(conn, cmd, data);
3822                 break;
3823
3824         case L2CAP_CONF_REQ:
3825                 err = l2cap_config_req(conn, cmd, cmd_len, data);
3826                 break;
3827
3828         case L2CAP_CONF_RSP:
3829                 err = l2cap_config_rsp(conn, cmd, data);
3830                 break;
3831
3832         case L2CAP_DISCONN_REQ:
3833                 err = l2cap_disconnect_req(conn, cmd, data);
3834                 break;
3835
3836         case L2CAP_DISCONN_RSP:
3837                 err = l2cap_disconnect_rsp(conn, cmd, data);
3838                 break;
3839
3840         case L2CAP_ECHO_REQ:
3841                 l2cap_send_cmd(conn, cmd->ident, L2CAP_ECHO_RSP, cmd_len, data);
3842                 break;
3843
3844         case L2CAP_ECHO_RSP:
3845                 break;
3846
3847         case L2CAP_INFO_REQ:
3848                 err = l2cap_information_req(conn, cmd, data);
3849                 break;
3850
3851         case L2CAP_INFO_RSP:
3852                 err = l2cap_information_rsp(conn, cmd, data);
3853                 break;
3854
3855         case L2CAP_CREATE_CHAN_REQ:
3856                 err = l2cap_create_channel_req(conn, cmd, cmd_len, data);
3857                 break;
3858
3859         case L2CAP_CREATE_CHAN_RSP:
3860                 err = l2cap_create_channel_rsp(conn, cmd, data);
3861                 break;
3862
3863         case L2CAP_MOVE_CHAN_REQ:
3864                 err = l2cap_move_channel_req(conn, cmd, cmd_len, data);
3865                 break;
3866
3867         case L2CAP_MOVE_CHAN_RSP:
3868                 err = l2cap_move_channel_rsp(conn, cmd, cmd_len, data);
3869                 break;
3870
3871         case L2CAP_MOVE_CHAN_CFM:
3872                 err = l2cap_move_channel_confirm(conn, cmd, cmd_len, data);
3873                 break;
3874
3875         case L2CAP_MOVE_CHAN_CFM_RSP:
3876                 err = l2cap_move_channel_confirm_rsp(conn, cmd, cmd_len, data);
3877                 break;
3878
3879         default:
3880                 BT_ERR("Unknown BR/EDR signaling command 0x%2.2x", cmd->code);
3881                 err = -EINVAL;
3882                 break;
3883         }
3884
3885         return err;
3886 }
3887
3888 static inline int l2cap_le_sig_cmd(struct l2cap_conn *conn,
3889                                         struct l2cap_cmd_hdr *cmd, u8 *data)
3890 {
3891         switch (cmd->code) {
3892         case L2CAP_COMMAND_REJ:
3893                 return 0;
3894
3895         case L2CAP_CONN_PARAM_UPDATE_REQ:
3896                 return l2cap_conn_param_update_req(conn, cmd, data);
3897
3898         case L2CAP_CONN_PARAM_UPDATE_RSP:
3899                 return 0;
3900
3901         default:
3902                 BT_ERR("Unknown LE signaling command 0x%2.2x", cmd->code);
3903                 return -EINVAL;
3904         }
3905 }
3906
3907 static inline void l2cap_sig_channel(struct l2cap_conn *conn,
3908                                                         struct sk_buff *skb)
3909 {
3910         u8 *data = skb->data;
3911         int len = skb->len;
3912         struct l2cap_cmd_hdr cmd;
3913         int err;
3914
3915         l2cap_raw_recv(conn, skb);
3916
3917         while (len >= L2CAP_CMD_HDR_SIZE) {
3918                 u16 cmd_len;
3919                 memcpy(&cmd, data, L2CAP_CMD_HDR_SIZE);
3920                 data += L2CAP_CMD_HDR_SIZE;
3921                 len  -= L2CAP_CMD_HDR_SIZE;
3922
3923                 cmd_len = le16_to_cpu(cmd.len);
3924
3925                 BT_DBG("code 0x%2.2x len %d id 0x%2.2x", cmd.code, cmd_len, cmd.ident);
3926
3927                 if (cmd_len > len || !cmd.ident) {
3928                         BT_DBG("corrupted command");
3929                         break;
3930                 }
3931
3932                 if (conn->hcon->type == LE_LINK)
3933                         err = l2cap_le_sig_cmd(conn, &cmd, data);
3934                 else
3935                         err = l2cap_bredr_sig_cmd(conn, &cmd, cmd_len, data);
3936
3937                 if (err) {
3938                         struct l2cap_cmd_rej_unk rej;
3939
3940                         BT_ERR("Wrong link type (%d)", err);
3941
3942                         /* FIXME: Map err to a valid reason */
3943                         rej.reason = cpu_to_le16(L2CAP_REJ_NOT_UNDERSTOOD);
3944                         l2cap_send_cmd(conn, cmd.ident, L2CAP_COMMAND_REJ, sizeof(rej), &rej);
3945                 }
3946
3947                 data += cmd_len;
3948                 len  -= cmd_len;
3949         }
3950
3951         kfree_skb(skb);
3952 }
3953
3954 static int l2cap_check_fcs(struct l2cap_chan *chan,  struct sk_buff *skb)
3955 {
3956         u16 our_fcs, rcv_fcs;
3957         int hdr_size;
3958
3959         if (test_bit(FLAG_EXT_CTRL, &chan->flags))
3960                 hdr_size = L2CAP_EXT_HDR_SIZE;
3961         else
3962                 hdr_size = L2CAP_ENH_HDR_SIZE;
3963
3964         if (chan->fcs == L2CAP_FCS_CRC16) {
3965                 skb_trim(skb, skb->len - L2CAP_FCS_SIZE);
3966                 rcv_fcs = get_unaligned_le16(skb->data + skb->len);
3967                 our_fcs = crc16(0, skb->data - hdr_size, skb->len + hdr_size);
3968
3969                 if (our_fcs != rcv_fcs)
3970                         return -EBADMSG;
3971         }
3972         return 0;
3973 }
3974
3975 static inline void l2cap_send_i_or_rr_or_rnr(struct l2cap_chan *chan)
3976 {
3977         u32 control = 0;
3978
3979         chan->frames_sent = 0;
3980
3981         control |= __set_reqseq(chan, chan->buffer_seq);
3982
3983         if (test_bit(CONN_LOCAL_BUSY, &chan->conn_state)) {
3984                 control |= __set_ctrl_super(chan, L2CAP_SUPER_RNR);
3985                 l2cap_send_sframe(chan, control);
3986                 set_bit(CONN_RNR_SENT, &chan->conn_state);
3987         }
3988
3989         if (test_bit(CONN_REMOTE_BUSY, &chan->conn_state))
3990                 l2cap_retransmit_frames(chan);
3991
3992         l2cap_ertm_send(chan);
3993
3994         if (!test_bit(CONN_LOCAL_BUSY, &chan->conn_state) &&
3995                         chan->frames_sent == 0) {
3996                 control |= __set_ctrl_super(chan, L2CAP_SUPER_RR);
3997                 l2cap_send_sframe(chan, control);
3998         }
3999 }
4000
4001 static int l2cap_add_to_srej_queue(struct l2cap_chan *chan, struct sk_buff *skb, u16 tx_seq, u8 sar)
4002 {
4003         struct sk_buff *next_skb;
4004         int tx_seq_offset, next_tx_seq_offset;
4005
4006         bt_cb(skb)->control.txseq = tx_seq;
4007         bt_cb(skb)->control.sar = sar;
4008
4009         next_skb = skb_peek(&chan->srej_q);
4010
4011         tx_seq_offset = __seq_offset(chan, tx_seq, chan->buffer_seq);
4012
4013         while (next_skb) {
4014                 if (bt_cb(next_skb)->control.txseq == tx_seq)
4015                         return -EINVAL;
4016
4017                 next_tx_seq_offset = __seq_offset(chan,
4018                         bt_cb(next_skb)->control.txseq, chan->buffer_seq);
4019
4020                 if (next_tx_seq_offset > tx_seq_offset) {
4021                         __skb_queue_before(&chan->srej_q, next_skb, skb);
4022                         return 0;
4023                 }
4024
4025                 if (skb_queue_is_last(&chan->srej_q, next_skb))
4026                         next_skb = NULL;
4027                 else
4028                         next_skb = skb_queue_next(&chan->srej_q, next_skb);
4029         }
4030
4031         __skb_queue_tail(&chan->srej_q, skb);
4032
4033         return 0;
4034 }
4035
4036 static void append_skb_frag(struct sk_buff *skb,
4037                         struct sk_buff *new_frag, struct sk_buff **last_frag)
4038 {
4039         /* skb->len reflects data in skb as well as all fragments
4040          * skb->data_len reflects only data in fragments
4041          */
4042         if (!skb_has_frag_list(skb))
4043                 skb_shinfo(skb)->frag_list = new_frag;
4044
4045         new_frag->next = NULL;
4046
4047         (*last_frag)->next = new_frag;
4048         *last_frag = new_frag;
4049
4050         skb->len += new_frag->len;
4051         skb->data_len += new_frag->len;
4052         skb->truesize += new_frag->truesize;
4053 }
4054
4055 static int l2cap_reassemble_sdu(struct l2cap_chan *chan, struct sk_buff *skb, u32 control)
4056 {
4057         int err = -EINVAL;
4058
4059         switch (__get_ctrl_sar(chan, control)) {
4060         case L2CAP_SAR_UNSEGMENTED:
4061                 if (chan->sdu)
4062                         break;
4063
4064                 err = chan->ops->recv(chan->data, skb);
4065                 break;
4066
4067         case L2CAP_SAR_START:
4068                 if (chan->sdu)
4069                         break;
4070
4071                 chan->sdu_len = get_unaligned_le16(skb->data);
4072                 skb_pull(skb, L2CAP_SDULEN_SIZE);
4073
4074                 if (chan->sdu_len > chan->imtu) {
4075                         err = -EMSGSIZE;
4076                         break;
4077                 }
4078
4079                 if (skb->len >= chan->sdu_len)
4080                         break;
4081
4082                 chan->sdu = skb;
4083                 chan->sdu_last_frag = skb;
4084
4085                 skb = NULL;
4086                 err = 0;
4087                 break;
4088
4089         case L2CAP_SAR_CONTINUE:
4090                 if (!chan->sdu)
4091                         break;
4092
4093                 append_skb_frag(chan->sdu, skb,
4094                                 &chan->sdu_last_frag);
4095                 skb = NULL;
4096
4097                 if (chan->sdu->len >= chan->sdu_len)
4098                         break;
4099
4100                 err = 0;
4101                 break;
4102
4103         case L2CAP_SAR_END:
4104                 if (!chan->sdu)
4105                         break;
4106
4107                 append_skb_frag(chan->sdu, skb,
4108                                 &chan->sdu_last_frag);
4109                 skb = NULL;
4110
4111                 if (chan->sdu->len != chan->sdu_len)
4112                         break;
4113
4114                 err = chan->ops->recv(chan->data, chan->sdu);
4115
4116                 if (!err) {
4117                         /* Reassembly complete */
4118                         chan->sdu = NULL;
4119                         chan->sdu_last_frag = NULL;
4120                         chan->sdu_len = 0;
4121                 }
4122                 break;
4123         }
4124
4125         if (err) {
4126                 kfree_skb(skb);
4127                 kfree_skb(chan->sdu);
4128                 chan->sdu = NULL;
4129                 chan->sdu_last_frag = NULL;
4130                 chan->sdu_len = 0;
4131         }
4132
4133         return err;
4134 }
4135
4136 static void l2cap_ertm_enter_local_busy(struct l2cap_chan *chan)
4137 {
4138         BT_DBG("chan %p, Enter local busy", chan);
4139
4140         set_bit(CONN_LOCAL_BUSY, &chan->conn_state);
4141         l2cap_seq_list_clear(&chan->srej_list);
4142
4143         __set_ack_timer(chan);
4144 }
4145
4146 static void l2cap_ertm_exit_local_busy(struct l2cap_chan *chan)
4147 {
4148         u32 control;
4149
4150         if (!test_bit(CONN_RNR_SENT, &chan->conn_state))
4151                 goto done;
4152
4153         control = __set_reqseq(chan, chan->buffer_seq);
4154         control |= __set_ctrl_poll(chan);
4155         control |= __set_ctrl_super(chan, L2CAP_SUPER_RR);
4156         l2cap_send_sframe(chan, control);
4157         chan->retry_count = 1;
4158
4159         __clear_retrans_timer(chan);
4160         __set_monitor_timer(chan);
4161
4162         set_bit(CONN_WAIT_F, &chan->conn_state);
4163
4164 done:
4165         clear_bit(CONN_LOCAL_BUSY, &chan->conn_state);
4166         clear_bit(CONN_RNR_SENT, &chan->conn_state);
4167
4168         BT_DBG("chan %p, Exit local busy", chan);
4169 }
4170
4171 void l2cap_chan_busy(struct l2cap_chan *chan, int busy)
4172 {
4173         if (chan->mode == L2CAP_MODE_ERTM) {
4174                 if (busy)
4175                         l2cap_ertm_enter_local_busy(chan);
4176                 else
4177                         l2cap_ertm_exit_local_busy(chan);
4178         }
4179 }
4180
4181 static void l2cap_check_srej_gap(struct l2cap_chan *chan, u16 tx_seq)
4182 {
4183         struct sk_buff *skb;
4184         u32 control;
4185
4186         while ((skb = skb_peek(&chan->srej_q)) &&
4187                         !test_bit(CONN_LOCAL_BUSY, &chan->conn_state)) {
4188                 int err;
4189
4190                 if (bt_cb(skb)->control.txseq != tx_seq)
4191                         break;
4192
4193                 skb = skb_dequeue(&chan->srej_q);
4194                 control = __set_ctrl_sar(chan, bt_cb(skb)->control.sar);
4195                 err = l2cap_reassemble_sdu(chan, skb, control);
4196
4197                 if (err < 0) {
4198                         l2cap_send_disconn_req(chan->conn, chan, ECONNRESET);
4199                         break;
4200                 }
4201
4202                 chan->buffer_seq_srej = __next_seq(chan, chan->buffer_seq_srej);
4203                 tx_seq = __next_seq(chan, tx_seq);
4204         }
4205 }
4206
4207 static void l2cap_resend_srejframe(struct l2cap_chan *chan, u16 tx_seq)
4208 {
4209         struct srej_list *l, *tmp;
4210         u32 control;
4211
4212         list_for_each_entry_safe(l, tmp, &chan->srej_l, list) {
4213                 if (l->tx_seq == tx_seq) {
4214                         list_del(&l->list);
4215                         kfree(l);
4216                         return;
4217                 }
4218                 control = __set_ctrl_super(chan, L2CAP_SUPER_SREJ);
4219                 control |= __set_reqseq(chan, l->tx_seq);
4220                 l2cap_send_sframe(chan, control);
4221                 list_del(&l->list);
4222                 list_add_tail(&l->list, &chan->srej_l);
4223         }
4224 }
4225
4226 static int l2cap_send_srejframe(struct l2cap_chan *chan, u16 tx_seq)
4227 {
4228         struct srej_list *new;
4229         u32 control;
4230
4231         while (tx_seq != chan->expected_tx_seq) {
4232                 control = __set_ctrl_super(chan, L2CAP_SUPER_SREJ);
4233                 control |= __set_reqseq(chan, chan->expected_tx_seq);
4234                 l2cap_seq_list_append(&chan->srej_list, chan->expected_tx_seq);
4235                 l2cap_send_sframe(chan, control);
4236
4237                 new = kzalloc(sizeof(struct srej_list), GFP_ATOMIC);
4238                 if (!new)
4239                         return -ENOMEM;
4240
4241                 new->tx_seq = chan->expected_tx_seq;
4242
4243                 chan->expected_tx_seq = __next_seq(chan, chan->expected_tx_seq);
4244
4245                 list_add_tail(&new->list, &chan->srej_l);
4246         }
4247
4248         chan->expected_tx_seq = __next_seq(chan, chan->expected_tx_seq);
4249
4250         return 0;
4251 }
4252
4253 static inline int l2cap_data_channel_iframe(struct l2cap_chan *chan, u32 rx_control, struct sk_buff *skb)
4254 {
4255         u16 tx_seq = __get_txseq(chan, rx_control);
4256         u16 req_seq = __get_reqseq(chan, rx_control);
4257         u8 sar = __get_ctrl_sar(chan, rx_control);
4258         int tx_seq_offset, expected_tx_seq_offset;
4259         int num_to_ack = (chan->tx_win/6) + 1;
4260         int err = 0;
4261
4262         BT_DBG("chan %p len %d tx_seq %d rx_control 0x%8.8x", chan, skb->len,
4263                                                         tx_seq, rx_control);
4264
4265         if (__is_ctrl_final(chan, rx_control) &&
4266                         test_bit(CONN_WAIT_F, &chan->conn_state)) {
4267                 __clear_monitor_timer(chan);
4268                 if (chan->unacked_frames > 0)
4269                         __set_retrans_timer(chan);
4270                 clear_bit(CONN_WAIT_F, &chan->conn_state);
4271         }
4272
4273         chan->expected_ack_seq = req_seq;
4274         l2cap_drop_acked_frames(chan);
4275
4276         tx_seq_offset = __seq_offset(chan, tx_seq, chan->buffer_seq);
4277
4278         /* invalid tx_seq */
4279         if (tx_seq_offset >= chan->tx_win) {
4280                 l2cap_send_disconn_req(chan->conn, chan, ECONNRESET);
4281                 goto drop;
4282         }
4283
4284         if (test_bit(CONN_LOCAL_BUSY, &chan->conn_state)) {
4285                 if (!test_bit(CONN_RNR_SENT, &chan->conn_state))
4286                         l2cap_send_ack(chan);
4287                 goto drop;
4288         }
4289
4290         if (tx_seq == chan->expected_tx_seq)
4291                 goto expected;
4292
4293         if (test_bit(CONN_SREJ_SENT, &chan->conn_state)) {
4294                 struct srej_list *first;
4295
4296                 first = list_first_entry(&chan->srej_l,
4297                                 struct srej_list, list);
4298                 if (tx_seq == first->tx_seq) {
4299                         l2cap_add_to_srej_queue(chan, skb, tx_seq, sar);
4300                         l2cap_check_srej_gap(chan, tx_seq);
4301
4302                         list_del(&first->list);
4303                         kfree(first);
4304
4305                         if (list_empty(&chan->srej_l)) {
4306                                 chan->buffer_seq = chan->buffer_seq_srej;
4307                                 clear_bit(CONN_SREJ_SENT, &chan->conn_state);
4308                                 l2cap_send_ack(chan);
4309                                 BT_DBG("chan %p, Exit SREJ_SENT", chan);
4310                         }
4311                 } else {
4312                         struct srej_list *l;
4313
4314                         /* duplicated tx_seq */
4315                         if (l2cap_add_to_srej_queue(chan, skb, tx_seq, sar) < 0)
4316                                 goto drop;
4317
4318                         list_for_each_entry(l, &chan->srej_l, list) {
4319                                 if (l->tx_seq == tx_seq) {
4320                                         l2cap_resend_srejframe(chan, tx_seq);
4321                                         return 0;
4322                                 }
4323                         }
4324
4325                         err = l2cap_send_srejframe(chan, tx_seq);
4326                         if (err < 0) {
4327                                 l2cap_send_disconn_req(chan->conn, chan, -err);
4328                                 return err;
4329                         }
4330                 }
4331         } else {
4332                 expected_tx_seq_offset = __seq_offset(chan,
4333                                 chan->expected_tx_seq, chan->buffer_seq);
4334
4335                 /* duplicated tx_seq */
4336                 if (tx_seq_offset < expected_tx_seq_offset)
4337                         goto drop;
4338
4339                 set_bit(CONN_SREJ_SENT, &chan->conn_state);
4340
4341                 BT_DBG("chan %p, Enter SREJ", chan);
4342
4343                 INIT_LIST_HEAD(&chan->srej_l);
4344                 chan->buffer_seq_srej = chan->buffer_seq;
4345
4346                 __skb_queue_head_init(&chan->srej_q);
4347                 l2cap_add_to_srej_queue(chan, skb, tx_seq, sar);
4348
4349                 /* Set P-bit only if there are some I-frames to ack. */
4350                 if (__clear_ack_timer(chan))
4351                         set_bit(CONN_SEND_PBIT, &chan->conn_state);
4352
4353                 err = l2cap_send_srejframe(chan, tx_seq);
4354                 if (err < 0) {
4355                         l2cap_send_disconn_req(chan->conn, chan, -err);
4356                         return err;
4357                 }
4358         }
4359         return 0;
4360
4361 expected:
4362         chan->expected_tx_seq = __next_seq(chan, chan->expected_tx_seq);
4363
4364         if (test_bit(CONN_SREJ_SENT, &chan->conn_state)) {
4365                 bt_cb(skb)->control.txseq = tx_seq;
4366                 bt_cb(skb)->control.sar = sar;
4367                 __skb_queue_tail(&chan->srej_q, skb);
4368                 return 0;
4369         }
4370
4371         err = l2cap_reassemble_sdu(chan, skb, rx_control);
4372         chan->buffer_seq = __next_seq(chan, chan->buffer_seq);
4373
4374         if (err < 0) {
4375                 l2cap_send_disconn_req(chan->conn, chan, ECONNRESET);
4376                 return err;
4377         }
4378
4379         if (__is_ctrl_final(chan, rx_control)) {
4380                 if (!test_and_clear_bit(CONN_REJ_ACT, &chan->conn_state))
4381                         l2cap_retransmit_frames(chan);
4382         }
4383
4384
4385         chan->num_acked = (chan->num_acked + 1) % num_to_ack;
4386         if (chan->num_acked == num_to_ack - 1)
4387                 l2cap_send_ack(chan);
4388         else
4389                 __set_ack_timer(chan);
4390
4391         return 0;
4392
4393 drop:
4394         kfree_skb(skb);
4395         return 0;
4396 }
4397
4398 static inline void l2cap_data_channel_rrframe(struct l2cap_chan *chan, u32 rx_control)
4399 {
4400         BT_DBG("chan %p, req_seq %d ctrl 0x%8.8x", chan,
4401                                 __get_reqseq(chan, rx_control), rx_control);
4402
4403         chan->expected_ack_seq = __get_reqseq(chan, rx_control);
4404         l2cap_drop_acked_frames(chan);
4405
4406         if (__is_ctrl_poll(chan, rx_control)) {
4407                 set_bit(CONN_SEND_FBIT, &chan->conn_state);
4408                 if (test_bit(CONN_SREJ_SENT, &chan->conn_state)) {
4409                         if (test_bit(CONN_REMOTE_BUSY, &chan->conn_state) &&
4410                                         (chan->unacked_frames > 0))
4411                                 __set_retrans_timer(chan);
4412
4413                         clear_bit(CONN_REMOTE_BUSY, &chan->conn_state);
4414                         l2cap_send_srejtail(chan);
4415                 } else {
4416                         l2cap_send_i_or_rr_or_rnr(chan);
4417                 }
4418
4419         } else if (__is_ctrl_final(chan, rx_control)) {
4420                 clear_bit(CONN_REMOTE_BUSY, &chan->conn_state);
4421
4422                 if (!test_and_clear_bit(CONN_REJ_ACT, &chan->conn_state))
4423                         l2cap_retransmit_frames(chan);
4424
4425         } else {
4426                 if (test_bit(CONN_REMOTE_BUSY, &chan->conn_state) &&
4427                                 (chan->unacked_frames > 0))
4428                         __set_retrans_timer(chan);
4429
4430                 clear_bit(CONN_REMOTE_BUSY, &chan->conn_state);
4431                 if (test_bit(CONN_SREJ_SENT, &chan->conn_state))
4432                         l2cap_send_ack(chan);
4433                 else
4434                         l2cap_ertm_send(chan);
4435         }
4436 }
4437
4438 static inline void l2cap_data_channel_rejframe(struct l2cap_chan *chan, u32 rx_control)
4439 {
4440         u16 tx_seq = __get_reqseq(chan, rx_control);
4441
4442         BT_DBG("chan %p, req_seq %d ctrl 0x%8.8x", chan, tx_seq, rx_control);
4443
4444         clear_bit(CONN_REMOTE_BUSY, &chan->conn_state);
4445
4446         chan->expected_ack_seq = tx_seq;
4447         l2cap_drop_acked_frames(chan);
4448
4449         if (__is_ctrl_final(chan, rx_control)) {
4450                 if (!test_and_clear_bit(CONN_REJ_ACT, &chan->conn_state))
4451                         l2cap_retransmit_frames(chan);
4452         } else {
4453                 l2cap_retransmit_frames(chan);
4454
4455                 if (test_bit(CONN_WAIT_F, &chan->conn_state))
4456                         set_bit(CONN_REJ_ACT, &chan->conn_state);
4457         }
4458 }
4459 static inline void l2cap_data_channel_srejframe(struct l2cap_chan *chan, u32 rx_control)
4460 {
4461         u16 tx_seq = __get_reqseq(chan, rx_control);
4462
4463         BT_DBG("chan %p, req_seq %d ctrl 0x%8.8x", chan, tx_seq, rx_control);
4464
4465         clear_bit(CONN_REMOTE_BUSY, &chan->conn_state);
4466
4467         if (__is_ctrl_poll(chan, rx_control)) {
4468                 chan->expected_ack_seq = tx_seq;
4469                 l2cap_drop_acked_frames(chan);
4470
4471                 set_bit(CONN_SEND_FBIT, &chan->conn_state);
4472                 l2cap_retransmit_one_frame(chan, tx_seq);
4473
4474                 l2cap_ertm_send(chan);
4475
4476                 if (test_bit(CONN_WAIT_F, &chan->conn_state)) {
4477                         chan->srej_save_reqseq = tx_seq;
4478                         set_bit(CONN_SREJ_ACT, &chan->conn_state);
4479                 }
4480         } else if (__is_ctrl_final(chan, rx_control)) {
4481                 if (test_bit(CONN_SREJ_ACT, &chan->conn_state) &&
4482                                 chan->srej_save_reqseq == tx_seq)
4483                         clear_bit(CONN_SREJ_ACT, &chan->conn_state);
4484                 else
4485                         l2cap_retransmit_one_frame(chan, tx_seq);
4486         } else {
4487                 l2cap_retransmit_one_frame(chan, tx_seq);
4488                 if (test_bit(CONN_WAIT_F, &chan->conn_state)) {
4489                         chan->srej_save_reqseq = tx_seq;
4490                         set_bit(CONN_SREJ_ACT, &chan->conn_state);
4491                 }
4492         }
4493 }
4494
4495 static inline void l2cap_data_channel_rnrframe(struct l2cap_chan *chan, u32 rx_control)
4496 {
4497         u16 tx_seq = __get_reqseq(chan, rx_control);
4498
4499         BT_DBG("chan %p, req_seq %d ctrl 0x%8.8x", chan, tx_seq, rx_control);
4500
4501         set_bit(CONN_REMOTE_BUSY, &chan->conn_state);
4502         chan->expected_ack_seq = tx_seq;
4503         l2cap_drop_acked_frames(chan);
4504
4505         if (__is_ctrl_poll(chan, rx_control))
4506                 set_bit(CONN_SEND_FBIT, &chan->conn_state);
4507
4508         if (!test_bit(CONN_SREJ_SENT, &chan->conn_state)) {
4509                 __clear_retrans_timer(chan);
4510                 if (__is_ctrl_poll(chan, rx_control))
4511                         l2cap_send_rr_or_rnr(chan, L2CAP_CTRL_FINAL);
4512                 return;
4513         }
4514
4515         if (__is_ctrl_poll(chan, rx_control)) {
4516                 l2cap_send_srejtail(chan);
4517         } else {
4518                 rx_control = __set_ctrl_super(chan, L2CAP_SUPER_RR);
4519                 l2cap_send_sframe(chan, rx_control);
4520         }
4521 }
4522
4523 static inline int l2cap_data_channel_sframe(struct l2cap_chan *chan, u32 rx_control, struct sk_buff *skb)
4524 {
4525         BT_DBG("chan %p rx_control 0x%8.8x len %d", chan, rx_control, skb->len);
4526
4527         if (__is_ctrl_final(chan, rx_control) &&
4528                         test_bit(CONN_WAIT_F, &chan->conn_state)) {
4529                 __clear_monitor_timer(chan);
4530                 if (chan->unacked_frames > 0)
4531                         __set_retrans_timer(chan);
4532                 clear_bit(CONN_WAIT_F, &chan->conn_state);
4533         }
4534
4535         switch (__get_ctrl_super(chan, rx_control)) {
4536         case L2CAP_SUPER_RR:
4537                 l2cap_data_channel_rrframe(chan, rx_control);
4538                 break;
4539
4540         case L2CAP_SUPER_REJ:
4541                 l2cap_data_channel_rejframe(chan, rx_control);
4542                 break;
4543
4544         case L2CAP_SUPER_SREJ:
4545                 l2cap_data_channel_srejframe(chan, rx_control);
4546                 break;
4547
4548         case L2CAP_SUPER_RNR:
4549                 l2cap_data_channel_rnrframe(chan, rx_control);
4550                 break;
4551         }
4552
4553         kfree_skb(skb);
4554         return 0;
4555 }
4556
4557 static int l2cap_ertm_data_rcv(struct l2cap_chan *chan, struct sk_buff *skb)
4558 {
4559         u32 control;
4560         u16 req_seq;
4561         int len, next_tx_seq_offset, req_seq_offset;
4562
4563         __unpack_control(chan, skb);
4564
4565         control = __get_control(chan, skb->data);
4566         skb_pull(skb, __ctrl_size(chan));
4567         len = skb->len;
4568
4569         /*
4570          * We can just drop the corrupted I-frame here.
4571          * Receiver will miss it and start proper recovery
4572          * procedures and ask retransmission.
4573          */
4574         if (l2cap_check_fcs(chan, skb))
4575                 goto drop;
4576
4577         if (__is_sar_start(chan, control) && !__is_sframe(chan, control))
4578                 len -= L2CAP_SDULEN_SIZE;
4579
4580         if (chan->fcs == L2CAP_FCS_CRC16)
4581                 len -= L2CAP_FCS_SIZE;
4582
4583         if (len > chan->mps) {
4584                 l2cap_send_disconn_req(chan->conn, chan, ECONNRESET);
4585                 goto drop;
4586         }
4587
4588         req_seq = __get_reqseq(chan, control);
4589
4590         req_seq_offset = __seq_offset(chan, req_seq, chan->expected_ack_seq);
4591
4592         next_tx_seq_offset = __seq_offset(chan, chan->next_tx_seq,
4593                                                 chan->expected_ack_seq);
4594
4595         /* check for invalid req-seq */
4596         if (req_seq_offset > next_tx_seq_offset) {
4597                 l2cap_send_disconn_req(chan->conn, chan, ECONNRESET);
4598                 goto drop;
4599         }
4600
4601         if (!__is_sframe(chan, control)) {
4602                 if (len < 0) {
4603                         l2cap_send_disconn_req(chan->conn, chan, ECONNRESET);
4604                         goto drop;
4605                 }
4606
4607                 l2cap_data_channel_iframe(chan, control, skb);
4608         } else {
4609                 if (len != 0) {
4610                         BT_ERR("%d", len);
4611                         l2cap_send_disconn_req(chan->conn, chan, ECONNRESET);
4612                         goto drop;
4613                 }
4614
4615                 l2cap_data_channel_sframe(chan, control, skb);
4616         }
4617
4618         return 0;
4619
4620 drop:
4621         kfree_skb(skb);
4622         return 0;
4623 }
4624
4625 static inline int l2cap_data_channel(struct l2cap_conn *conn, u16 cid, struct sk_buff *skb)
4626 {
4627         struct l2cap_chan *chan;
4628         u32 control;
4629         u16 tx_seq;
4630         int len;
4631
4632         chan = l2cap_get_chan_by_scid(conn, cid);
4633         if (!chan) {
4634                 BT_DBG("unknown cid 0x%4.4x", cid);
4635                 /* Drop packet and return */
4636                 kfree_skb(skb);
4637                 return 0;
4638         }
4639
4640         BT_DBG("chan %p, len %d", chan, skb->len);
4641
4642         if (chan->state != BT_CONNECTED)
4643                 goto drop;
4644
4645         switch (chan->mode) {
4646         case L2CAP_MODE_BASIC:
4647                 /* If socket recv buffers overflows we drop data here
4648                  * which is *bad* because L2CAP has to be reliable.
4649                  * But we don't have any other choice. L2CAP doesn't
4650                  * provide flow control mechanism. */
4651
4652                 if (chan->imtu < skb->len)
4653                         goto drop;
4654
4655                 if (!chan->ops->recv(chan->data, skb))
4656                         goto done;
4657                 break;
4658
4659         case L2CAP_MODE_ERTM:
4660                 l2cap_ertm_data_rcv(chan, skb);
4661
4662                 goto done;
4663
4664         case L2CAP_MODE_STREAMING:
4665                 control = __get_control(chan, skb->data);
4666                 skb_pull(skb, __ctrl_size(chan));
4667                 len = skb->len;
4668
4669                 if (l2cap_check_fcs(chan, skb))
4670                         goto drop;
4671
4672                 if (__is_sar_start(chan, control))
4673                         len -= L2CAP_SDULEN_SIZE;
4674
4675                 if (chan->fcs == L2CAP_FCS_CRC16)
4676                         len -= L2CAP_FCS_SIZE;
4677
4678                 if (len > chan->mps || len < 0 || __is_sframe(chan, control))
4679                         goto drop;
4680
4681                 tx_seq = __get_txseq(chan, control);
4682
4683                 if (chan->expected_tx_seq != tx_seq) {
4684                         /* Frame(s) missing - must discard partial SDU */
4685                         kfree_skb(chan->sdu);
4686                         chan->sdu = NULL;
4687                         chan->sdu_last_frag = NULL;
4688                         chan->sdu_len = 0;
4689
4690                         /* TODO: Notify userland of missing data */
4691                 }
4692
4693                 chan->expected_tx_seq = __next_seq(chan, tx_seq);
4694
4695                 if (l2cap_reassemble_sdu(chan, skb, control) == -EMSGSIZE)
4696                         l2cap_send_disconn_req(chan->conn, chan, ECONNRESET);
4697
4698                 goto done;
4699
4700         default:
4701                 BT_DBG("chan %p: bad mode 0x%2.2x", chan, chan->mode);
4702                 break;
4703         }
4704
4705 drop:
4706         kfree_skb(skb);
4707
4708 done:
4709         l2cap_chan_unlock(chan);
4710
4711         return 0;
4712 }
4713
4714 static inline int l2cap_conless_channel(struct l2cap_conn *conn, __le16 psm, struct sk_buff *skb)
4715 {
4716         struct l2cap_chan *chan;
4717
4718         chan = l2cap_global_chan_by_psm(0, psm, conn->src, conn->dst);
4719         if (!chan)
4720                 goto drop;
4721
4722         BT_DBG("chan %p, len %d", chan, skb->len);
4723
4724         if (chan->state != BT_BOUND && chan->state != BT_CONNECTED)
4725                 goto drop;
4726
4727         if (chan->imtu < skb->len)
4728                 goto drop;
4729
4730         if (!chan->ops->recv(chan->data, skb))
4731                 return 0;
4732
4733 drop:
4734         kfree_skb(skb);
4735
4736         return 0;
4737 }
4738
4739 static inline int l2cap_att_channel(struct l2cap_conn *conn, u16 cid,
4740                                     struct sk_buff *skb)
4741 {
4742         struct l2cap_chan *chan;
4743
4744         chan = l2cap_global_chan_by_scid(0, cid, conn->src, conn->dst);
4745         if (!chan)
4746                 goto drop;
4747
4748         BT_DBG("chan %p, len %d", chan, skb->len);
4749
4750         if (chan->state != BT_BOUND && chan->state != BT_CONNECTED)
4751                 goto drop;
4752
4753         if (chan->imtu < skb->len)
4754                 goto drop;
4755
4756         if (!chan->ops->recv(chan->data, skb))
4757                 return 0;
4758
4759 drop:
4760         kfree_skb(skb);
4761
4762         return 0;
4763 }
4764
4765 static void l2cap_recv_frame(struct l2cap_conn *conn, struct sk_buff *skb)
4766 {
4767         struct l2cap_hdr *lh = (void *) skb->data;
4768         u16 cid, len;
4769         __le16 psm;
4770
4771         skb_pull(skb, L2CAP_HDR_SIZE);
4772         cid = __le16_to_cpu(lh->cid);
4773         len = __le16_to_cpu(lh->len);
4774
4775         if (len != skb->len) {
4776                 kfree_skb(skb);
4777                 return;
4778         }
4779
4780         BT_DBG("len %d, cid 0x%4.4x", len, cid);
4781
4782         switch (cid) {
4783         case L2CAP_CID_LE_SIGNALING:
4784         case L2CAP_CID_SIGNALING:
4785                 l2cap_sig_channel(conn, skb);
4786                 break;
4787
4788         case L2CAP_CID_CONN_LESS:
4789                 psm = get_unaligned((__le16 *) skb->data);
4790                 skb_pull(skb, 2);
4791                 l2cap_conless_channel(conn, psm, skb);
4792                 break;
4793
4794         case L2CAP_CID_LE_DATA:
4795                 l2cap_att_channel(conn, cid, skb);
4796                 break;
4797
4798         case L2CAP_CID_SMP:
4799                 if (smp_sig_channel(conn, skb))
4800                         l2cap_conn_del(conn->hcon, EACCES);
4801                 break;
4802
4803         default:
4804                 l2cap_data_channel(conn, cid, skb);
4805                 break;
4806         }
4807 }
4808
4809 /* ---- L2CAP interface with lower layer (HCI) ---- */
4810
4811 int l2cap_connect_ind(struct hci_dev *hdev, bdaddr_t *bdaddr)
4812 {
4813         int exact = 0, lm1 = 0, lm2 = 0;
4814         struct l2cap_chan *c;
4815
4816         BT_DBG("hdev %s, bdaddr %s", hdev->name, batostr(bdaddr));
4817
4818         /* Find listening sockets and check their link_mode */
4819         read_lock(&chan_list_lock);
4820         list_for_each_entry(c, &chan_list, global_l) {
4821                 struct sock *sk = c->sk;
4822
4823                 if (c->state != BT_LISTEN)
4824                         continue;
4825
4826                 if (!bacmp(&bt_sk(sk)->src, &hdev->bdaddr)) {
4827                         lm1 |= HCI_LM_ACCEPT;
4828                         if (test_bit(FLAG_ROLE_SWITCH, &c->flags))
4829                                 lm1 |= HCI_LM_MASTER;
4830                         exact++;
4831                 } else if (!bacmp(&bt_sk(sk)->src, BDADDR_ANY)) {
4832                         lm2 |= HCI_LM_ACCEPT;
4833                         if (test_bit(FLAG_ROLE_SWITCH, &c->flags))
4834                                 lm2 |= HCI_LM_MASTER;
4835                 }
4836         }
4837         read_unlock(&chan_list_lock);
4838
4839         return exact ? lm1 : lm2;
4840 }
4841
4842 int l2cap_connect_cfm(struct hci_conn *hcon, u8 status)
4843 {
4844         struct l2cap_conn *conn;
4845
4846         BT_DBG("hcon %p bdaddr %s status %d", hcon, batostr(&hcon->dst), status);
4847
4848         if (!status) {
4849                 conn = l2cap_conn_add(hcon, status);
4850                 if (conn)
4851                         l2cap_conn_ready(conn);
4852         } else
4853                 l2cap_conn_del(hcon, bt_to_errno(status));
4854
4855         return 0;
4856 }
4857
4858 int l2cap_disconn_ind(struct hci_conn *hcon)
4859 {
4860         struct l2cap_conn *conn = hcon->l2cap_data;
4861
4862         BT_DBG("hcon %p", hcon);
4863
4864         if (!conn)
4865                 return HCI_ERROR_REMOTE_USER_TERM;
4866         return conn->disc_reason;
4867 }
4868
4869 int l2cap_disconn_cfm(struct hci_conn *hcon, u8 reason)
4870 {
4871         BT_DBG("hcon %p reason %d", hcon, reason);
4872
4873         l2cap_conn_del(hcon, bt_to_errno(reason));
4874         return 0;
4875 }
4876
4877 static inline void l2cap_check_encryption(struct l2cap_chan *chan, u8 encrypt)
4878 {
4879         if (chan->chan_type != L2CAP_CHAN_CONN_ORIENTED)
4880                 return;
4881
4882         if (encrypt == 0x00) {
4883                 if (chan->sec_level == BT_SECURITY_MEDIUM) {
4884                         __set_chan_timer(chan, L2CAP_ENC_TIMEOUT);
4885                 } else if (chan->sec_level == BT_SECURITY_HIGH)
4886                         l2cap_chan_close(chan, ECONNREFUSED);
4887         } else {
4888                 if (chan->sec_level == BT_SECURITY_MEDIUM)
4889                         __clear_chan_timer(chan);
4890         }
4891 }
4892
4893 int l2cap_security_cfm(struct hci_conn *hcon, u8 status, u8 encrypt)
4894 {
4895         struct l2cap_conn *conn = hcon->l2cap_data;
4896         struct l2cap_chan *chan;
4897
4898         if (!conn)
4899                 return 0;
4900
4901         BT_DBG("conn %p", conn);
4902
4903         if (hcon->type == LE_LINK) {
4904                 if (!status && encrypt)
4905                         smp_distribute_keys(conn, 0);
4906                 cancel_delayed_work(&conn->security_timer);
4907         }
4908
4909         mutex_lock(&conn->chan_lock);
4910
4911         list_for_each_entry(chan, &conn->chan_l, list) {
4912                 l2cap_chan_lock(chan);
4913
4914                 BT_DBG("chan->scid %d", chan->scid);
4915
4916                 if (chan->scid == L2CAP_CID_LE_DATA) {
4917                         if (!status && encrypt) {
4918                                 chan->sec_level = hcon->sec_level;
4919                                 l2cap_chan_ready(chan);
4920                         }
4921
4922                         l2cap_chan_unlock(chan);
4923                         continue;
4924                 }
4925
4926                 if (test_bit(CONF_CONNECT_PEND, &chan->conf_state)) {
4927                         l2cap_chan_unlock(chan);
4928                         continue;
4929                 }
4930
4931                 if (!status && (chan->state == BT_CONNECTED ||
4932                                                 chan->state == BT_CONFIG)) {
4933                         struct sock *sk = chan->sk;
4934
4935                         clear_bit(BT_SK_SUSPEND, &bt_sk(sk)->flags);
4936                         sk->sk_state_change(sk);
4937
4938                         l2cap_check_encryption(chan, encrypt);
4939                         l2cap_chan_unlock(chan);
4940                         continue;
4941                 }
4942
4943                 if (chan->state == BT_CONNECT) {
4944                         if (!status) {
4945                                 l2cap_send_conn_req(chan);
4946                         } else {
4947                                 __set_chan_timer(chan, L2CAP_DISC_TIMEOUT);
4948                         }
4949                 } else if (chan->state == BT_CONNECT2) {
4950                         struct sock *sk = chan->sk;
4951                         struct l2cap_conn_rsp rsp;
4952                         __u16 res, stat;
4953
4954                         lock_sock(sk);
4955
4956                         if (!status) {
4957                                 if (test_bit(BT_SK_DEFER_SETUP,
4958                                              &bt_sk(sk)->flags)) {
4959                                         struct sock *parent = bt_sk(sk)->parent;
4960                                         res = L2CAP_CR_PEND;
4961                                         stat = L2CAP_CS_AUTHOR_PEND;
4962                                         if (parent)
4963                                                 parent->sk_data_ready(parent, 0);
4964                                 } else {
4965                                         __l2cap_state_change(chan, BT_CONFIG);
4966                                         res = L2CAP_CR_SUCCESS;
4967                                         stat = L2CAP_CS_NO_INFO;
4968                                 }
4969                         } else {
4970                                 __l2cap_state_change(chan, BT_DISCONN);
4971                                 __set_chan_timer(chan, L2CAP_DISC_TIMEOUT);
4972                                 res = L2CAP_CR_SEC_BLOCK;
4973                                 stat = L2CAP_CS_NO_INFO;
4974                         }
4975
4976                         release_sock(sk);
4977
4978                         rsp.scid   = cpu_to_le16(chan->dcid);
4979                         rsp.dcid   = cpu_to_le16(chan->scid);
4980                         rsp.result = cpu_to_le16(res);
4981                         rsp.status = cpu_to_le16(stat);
4982                         l2cap_send_cmd(conn, chan->ident, L2CAP_CONN_RSP,
4983                                                         sizeof(rsp), &rsp);
4984                 }
4985
4986                 l2cap_chan_unlock(chan);
4987         }
4988
4989         mutex_unlock(&conn->chan_lock);
4990
4991         return 0;
4992 }
4993
4994 int l2cap_recv_acldata(struct hci_conn *hcon, struct sk_buff *skb, u16 flags)
4995 {
4996         struct l2cap_conn *conn = hcon->l2cap_data;
4997
4998         if (!conn)
4999                 conn = l2cap_conn_add(hcon, 0);
5000
5001         if (!conn)
5002                 goto drop;
5003
5004         BT_DBG("conn %p len %d flags 0x%x", conn, skb->len, flags);
5005
5006         if (!(flags & ACL_CONT)) {
5007                 struct l2cap_hdr *hdr;
5008                 int len;
5009
5010                 if (conn->rx_len) {
5011                         BT_ERR("Unexpected start frame (len %d)", skb->len);
5012                         kfree_skb(conn->rx_skb);
5013                         conn->rx_skb = NULL;
5014                         conn->rx_len = 0;
5015                         l2cap_conn_unreliable(conn, ECOMM);
5016                 }
5017
5018                 /* Start fragment always begin with Basic L2CAP header */
5019                 if (skb->len < L2CAP_HDR_SIZE) {
5020                         BT_ERR("Frame is too short (len %d)", skb->len);
5021                         l2cap_conn_unreliable(conn, ECOMM);
5022                         goto drop;
5023                 }
5024
5025                 hdr = (struct l2cap_hdr *) skb->data;
5026                 len = __le16_to_cpu(hdr->len) + L2CAP_HDR_SIZE;
5027
5028                 if (len == skb->len) {
5029                         /* Complete frame received */
5030                         l2cap_recv_frame(conn, skb);
5031                         return 0;
5032                 }
5033
5034                 BT_DBG("Start: total len %d, frag len %d", len, skb->len);
5035
5036                 if (skb->len > len) {
5037                         BT_ERR("Frame is too long (len %d, expected len %d)",
5038                                 skb->len, len);
5039                         l2cap_conn_unreliable(conn, ECOMM);
5040                         goto drop;
5041                 }
5042
5043                 /* Allocate skb for the complete frame (with header) */
5044                 conn->rx_skb = bt_skb_alloc(len, GFP_ATOMIC);
5045                 if (!conn->rx_skb)
5046                         goto drop;
5047
5048                 skb_copy_from_linear_data(skb, skb_put(conn->rx_skb, skb->len),
5049                                                                 skb->len);
5050                 conn->rx_len = len - skb->len;
5051         } else {
5052                 BT_DBG("Cont: frag len %d (expecting %d)", skb->len, conn->rx_len);
5053
5054                 if (!conn->rx_len) {
5055                         BT_ERR("Unexpected continuation frame (len %d)", skb->len);
5056                         l2cap_conn_unreliable(conn, ECOMM);
5057                         goto drop;
5058                 }
5059
5060                 if (skb->len > conn->rx_len) {
5061                         BT_ERR("Fragment is too long (len %d, expected %d)",
5062                                         skb->len, conn->rx_len);
5063                         kfree_skb(conn->rx_skb);
5064                         conn->rx_skb = NULL;
5065                         conn->rx_len = 0;
5066                         l2cap_conn_unreliable(conn, ECOMM);
5067                         goto drop;
5068                 }
5069
5070                 skb_copy_from_linear_data(skb, skb_put(conn->rx_skb, skb->len),
5071                                                                 skb->len);
5072                 conn->rx_len -= skb->len;
5073
5074                 if (!conn->rx_len) {
5075                         /* Complete frame received */
5076                         l2cap_recv_frame(conn, conn->rx_skb);
5077                         conn->rx_skb = NULL;
5078                 }
5079         }
5080
5081 drop:
5082         kfree_skb(skb);
5083         return 0;
5084 }
5085
5086 static int l2cap_debugfs_show(struct seq_file *f, void *p)
5087 {
5088         struct l2cap_chan *c;
5089
5090         read_lock(&chan_list_lock);
5091
5092         list_for_each_entry(c, &chan_list, global_l) {
5093                 struct sock *sk = c->sk;
5094
5095                 seq_printf(f, "%s %s %d %d 0x%4.4x 0x%4.4x %d %d %d %d\n",
5096                                         batostr(&bt_sk(sk)->src),
5097                                         batostr(&bt_sk(sk)->dst),
5098                                         c->state, __le16_to_cpu(c->psm),
5099                                         c->scid, c->dcid, c->imtu, c->omtu,
5100                                         c->sec_level, c->mode);
5101         }
5102
5103         read_unlock(&chan_list_lock);
5104
5105         return 0;
5106 }
5107
5108 static int l2cap_debugfs_open(struct inode *inode, struct file *file)
5109 {
5110         return single_open(file, l2cap_debugfs_show, inode->i_private);
5111 }
5112
5113 static const struct file_operations l2cap_debugfs_fops = {
5114         .open           = l2cap_debugfs_open,
5115         .read           = seq_read,
5116         .llseek         = seq_lseek,
5117         .release        = single_release,
5118 };
5119
5120 static struct dentry *l2cap_debugfs;
5121
5122 int __init l2cap_init(void)
5123 {
5124         int err;
5125
5126         err = l2cap_init_sockets();
5127         if (err < 0)
5128                 return err;
5129
5130         if (bt_debugfs) {
5131                 l2cap_debugfs = debugfs_create_file("l2cap", 0444,
5132                                         bt_debugfs, NULL, &l2cap_debugfs_fops);
5133                 if (!l2cap_debugfs)
5134                         BT_ERR("Failed to create L2CAP debug file");
5135         }
5136
5137         return 0;
5138 }
5139
5140 void l2cap_exit(void)
5141 {
5142         debugfs_remove(l2cap_debugfs);
5143         l2cap_cleanup_sockets();
5144 }
5145
5146 module_param(disable_ertm, bool, 0644);
5147 MODULE_PARM_DESC(disable_ertm, "Disable enhanced retransmission mode");