]> asedeno.scripts.mit.edu Git - linux.git/blob - net/bluetooth/l2cap_core.c
Merge branch 'for-5.2' of git://git.kernel.org/pub/scm/linux/kernel/git/tj/wq
[linux.git] / 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/debugfs.h>
34 #include <linux/crc16.h>
35 #include <linux/filter.h>
36
37 #include <net/bluetooth/bluetooth.h>
38 #include <net/bluetooth/hci_core.h>
39 #include <net/bluetooth/l2cap.h>
40
41 #include "smp.h"
42 #include "a2mp.h"
43 #include "amp.h"
44
45 #define LE_FLOWCTL_MAX_CREDITS 65535
46
47 bool disable_ertm;
48
49 static u32 l2cap_feat_mask = L2CAP_FEAT_FIXED_CHAN | L2CAP_FEAT_UCD;
50
51 static LIST_HEAD(chan_list);
52 static DEFINE_RWLOCK(chan_list_lock);
53
54 static struct sk_buff *l2cap_build_cmd(struct l2cap_conn *conn,
55                                        u8 code, u8 ident, u16 dlen, void *data);
56 static void l2cap_send_cmd(struct l2cap_conn *conn, u8 ident, u8 code, u16 len,
57                            void *data);
58 static int l2cap_build_conf_req(struct l2cap_chan *chan, void *data, size_t data_size);
59 static void l2cap_send_disconn_req(struct l2cap_chan *chan, int err);
60
61 static void l2cap_tx(struct l2cap_chan *chan, struct l2cap_ctrl *control,
62                      struct sk_buff_head *skbs, u8 event);
63
64 static inline u8 bdaddr_type(u8 link_type, u8 bdaddr_type)
65 {
66         if (link_type == LE_LINK) {
67                 if (bdaddr_type == ADDR_LE_DEV_PUBLIC)
68                         return BDADDR_LE_PUBLIC;
69                 else
70                         return BDADDR_LE_RANDOM;
71         }
72
73         return BDADDR_BREDR;
74 }
75
76 static inline u8 bdaddr_src_type(struct hci_conn *hcon)
77 {
78         return bdaddr_type(hcon->type, hcon->src_type);
79 }
80
81 static inline u8 bdaddr_dst_type(struct hci_conn *hcon)
82 {
83         return bdaddr_type(hcon->type, hcon->dst_type);
84 }
85
86 /* ---- L2CAP channels ---- */
87
88 static struct l2cap_chan *__l2cap_get_chan_by_dcid(struct l2cap_conn *conn,
89                                                    u16 cid)
90 {
91         struct l2cap_chan *c;
92
93         list_for_each_entry(c, &conn->chan_l, list) {
94                 if (c->dcid == cid)
95                         return c;
96         }
97         return NULL;
98 }
99
100 static struct l2cap_chan *__l2cap_get_chan_by_scid(struct l2cap_conn *conn,
101                                                    u16 cid)
102 {
103         struct l2cap_chan *c;
104
105         list_for_each_entry(c, &conn->chan_l, list) {
106                 if (c->scid == cid)
107                         return c;
108         }
109         return NULL;
110 }
111
112 /* Find channel with given SCID.
113  * Returns locked channel. */
114 static struct l2cap_chan *l2cap_get_chan_by_scid(struct l2cap_conn *conn,
115                                                  u16 cid)
116 {
117         struct l2cap_chan *c;
118
119         mutex_lock(&conn->chan_lock);
120         c = __l2cap_get_chan_by_scid(conn, cid);
121         if (c)
122                 l2cap_chan_lock(c);
123         mutex_unlock(&conn->chan_lock);
124
125         return c;
126 }
127
128 /* Find channel with given DCID.
129  * Returns locked channel.
130  */
131 static struct l2cap_chan *l2cap_get_chan_by_dcid(struct l2cap_conn *conn,
132                                                  u16 cid)
133 {
134         struct l2cap_chan *c;
135
136         mutex_lock(&conn->chan_lock);
137         c = __l2cap_get_chan_by_dcid(conn, cid);
138         if (c)
139                 l2cap_chan_lock(c);
140         mutex_unlock(&conn->chan_lock);
141
142         return c;
143 }
144
145 static struct l2cap_chan *__l2cap_get_chan_by_ident(struct l2cap_conn *conn,
146                                                     u8 ident)
147 {
148         struct l2cap_chan *c;
149
150         list_for_each_entry(c, &conn->chan_l, list) {
151                 if (c->ident == ident)
152                         return c;
153         }
154         return NULL;
155 }
156
157 static struct l2cap_chan *l2cap_get_chan_by_ident(struct l2cap_conn *conn,
158                                                   u8 ident)
159 {
160         struct l2cap_chan *c;
161
162         mutex_lock(&conn->chan_lock);
163         c = __l2cap_get_chan_by_ident(conn, ident);
164         if (c)
165                 l2cap_chan_lock(c);
166         mutex_unlock(&conn->chan_lock);
167
168         return c;
169 }
170
171 static struct l2cap_chan *__l2cap_global_chan_by_addr(__le16 psm, bdaddr_t *src)
172 {
173         struct l2cap_chan *c;
174
175         list_for_each_entry(c, &chan_list, global_l) {
176                 if (c->sport == psm && !bacmp(&c->src, src))
177                         return c;
178         }
179         return NULL;
180 }
181
182 int l2cap_add_psm(struct l2cap_chan *chan, bdaddr_t *src, __le16 psm)
183 {
184         int err;
185
186         write_lock(&chan_list_lock);
187
188         if (psm && __l2cap_global_chan_by_addr(psm, src)) {
189                 err = -EADDRINUSE;
190                 goto done;
191         }
192
193         if (psm) {
194                 chan->psm = psm;
195                 chan->sport = psm;
196                 err = 0;
197         } else {
198                 u16 p, start, end, incr;
199
200                 if (chan->src_type == BDADDR_BREDR) {
201                         start = L2CAP_PSM_DYN_START;
202                         end = L2CAP_PSM_AUTO_END;
203                         incr = 2;
204                 } else {
205                         start = L2CAP_PSM_LE_DYN_START;
206                         end = L2CAP_PSM_LE_DYN_END;
207                         incr = 1;
208                 }
209
210                 err = -EINVAL;
211                 for (p = start; p <= end; p += incr)
212                         if (!__l2cap_global_chan_by_addr(cpu_to_le16(p), src)) {
213                                 chan->psm   = cpu_to_le16(p);
214                                 chan->sport = cpu_to_le16(p);
215                                 err = 0;
216                                 break;
217                         }
218         }
219
220 done:
221         write_unlock(&chan_list_lock);
222         return err;
223 }
224 EXPORT_SYMBOL_GPL(l2cap_add_psm);
225
226 int l2cap_add_scid(struct l2cap_chan *chan,  __u16 scid)
227 {
228         write_lock(&chan_list_lock);
229
230         /* Override the defaults (which are for conn-oriented) */
231         chan->omtu = L2CAP_DEFAULT_MTU;
232         chan->chan_type = L2CAP_CHAN_FIXED;
233
234         chan->scid = scid;
235
236         write_unlock(&chan_list_lock);
237
238         return 0;
239 }
240
241 static u16 l2cap_alloc_cid(struct l2cap_conn *conn)
242 {
243         u16 cid, dyn_end;
244
245         if (conn->hcon->type == LE_LINK)
246                 dyn_end = L2CAP_CID_LE_DYN_END;
247         else
248                 dyn_end = L2CAP_CID_DYN_END;
249
250         for (cid = L2CAP_CID_DYN_START; cid <= dyn_end; cid++) {
251                 if (!__l2cap_get_chan_by_scid(conn, cid))
252                         return cid;
253         }
254
255         return 0;
256 }
257
258 static void l2cap_state_change(struct l2cap_chan *chan, int state)
259 {
260         BT_DBG("chan %p %s -> %s", chan, state_to_string(chan->state),
261                state_to_string(state));
262
263         chan->state = state;
264         chan->ops->state_change(chan, state, 0);
265 }
266
267 static inline void l2cap_state_change_and_error(struct l2cap_chan *chan,
268                                                 int state, int err)
269 {
270         chan->state = state;
271         chan->ops->state_change(chan, chan->state, err);
272 }
273
274 static inline void l2cap_chan_set_err(struct l2cap_chan *chan, int err)
275 {
276         chan->ops->state_change(chan, chan->state, err);
277 }
278
279 static void __set_retrans_timer(struct l2cap_chan *chan)
280 {
281         if (!delayed_work_pending(&chan->monitor_timer) &&
282             chan->retrans_timeout) {
283                 l2cap_set_timer(chan, &chan->retrans_timer,
284                                 msecs_to_jiffies(chan->retrans_timeout));
285         }
286 }
287
288 static void __set_monitor_timer(struct l2cap_chan *chan)
289 {
290         __clear_retrans_timer(chan);
291         if (chan->monitor_timeout) {
292                 l2cap_set_timer(chan, &chan->monitor_timer,
293                                 msecs_to_jiffies(chan->monitor_timeout));
294         }
295 }
296
297 static struct sk_buff *l2cap_ertm_seq_in_queue(struct sk_buff_head *head,
298                                                u16 seq)
299 {
300         struct sk_buff *skb;
301
302         skb_queue_walk(head, skb) {
303                 if (bt_cb(skb)->l2cap.txseq == seq)
304                         return skb;
305         }
306
307         return NULL;
308 }
309
310 /* ---- L2CAP sequence number lists ---- */
311
312 /* For ERTM, ordered lists of sequence numbers must be tracked for
313  * SREJ requests that are received and for frames that are to be
314  * retransmitted. These seq_list functions implement a singly-linked
315  * list in an array, where membership in the list can also be checked
316  * in constant time. Items can also be added to the tail of the list
317  * and removed from the head in constant time, without further memory
318  * allocs or frees.
319  */
320
321 static int l2cap_seq_list_init(struct l2cap_seq_list *seq_list, u16 size)
322 {
323         size_t alloc_size, i;
324
325         /* Allocated size is a power of 2 to map sequence numbers
326          * (which may be up to 14 bits) in to a smaller array that is
327          * sized for the negotiated ERTM transmit windows.
328          */
329         alloc_size = roundup_pow_of_two(size);
330
331         seq_list->list = kmalloc_array(alloc_size, sizeof(u16), GFP_KERNEL);
332         if (!seq_list->list)
333                 return -ENOMEM;
334
335         seq_list->mask = alloc_size - 1;
336         seq_list->head = L2CAP_SEQ_LIST_CLEAR;
337         seq_list->tail = L2CAP_SEQ_LIST_CLEAR;
338         for (i = 0; i < alloc_size; i++)
339                 seq_list->list[i] = L2CAP_SEQ_LIST_CLEAR;
340
341         return 0;
342 }
343
344 static inline void l2cap_seq_list_free(struct l2cap_seq_list *seq_list)
345 {
346         kfree(seq_list->list);
347 }
348
349 static inline bool l2cap_seq_list_contains(struct l2cap_seq_list *seq_list,
350                                            u16 seq)
351 {
352         /* Constant-time check for list membership */
353         return seq_list->list[seq & seq_list->mask] != L2CAP_SEQ_LIST_CLEAR;
354 }
355
356 static inline u16 l2cap_seq_list_pop(struct l2cap_seq_list *seq_list)
357 {
358         u16 seq = seq_list->head;
359         u16 mask = seq_list->mask;
360
361         seq_list->head = seq_list->list[seq & mask];
362         seq_list->list[seq & mask] = L2CAP_SEQ_LIST_CLEAR;
363
364         if (seq_list->head == L2CAP_SEQ_LIST_TAIL) {
365                 seq_list->head = L2CAP_SEQ_LIST_CLEAR;
366                 seq_list->tail = L2CAP_SEQ_LIST_CLEAR;
367         }
368
369         return seq;
370 }
371
372 static void l2cap_seq_list_clear(struct l2cap_seq_list *seq_list)
373 {
374         u16 i;
375
376         if (seq_list->head == L2CAP_SEQ_LIST_CLEAR)
377                 return;
378
379         for (i = 0; i <= seq_list->mask; i++)
380                 seq_list->list[i] = L2CAP_SEQ_LIST_CLEAR;
381
382         seq_list->head = L2CAP_SEQ_LIST_CLEAR;
383         seq_list->tail = L2CAP_SEQ_LIST_CLEAR;
384 }
385
386 static void l2cap_seq_list_append(struct l2cap_seq_list *seq_list, u16 seq)
387 {
388         u16 mask = seq_list->mask;
389
390         /* All appends happen in constant time */
391
392         if (seq_list->list[seq & mask] != L2CAP_SEQ_LIST_CLEAR)
393                 return;
394
395         if (seq_list->tail == L2CAP_SEQ_LIST_CLEAR)
396                 seq_list->head = seq;
397         else
398                 seq_list->list[seq_list->tail & mask] = seq;
399
400         seq_list->tail = seq;
401         seq_list->list[seq & mask] = L2CAP_SEQ_LIST_TAIL;
402 }
403
404 static void l2cap_chan_timeout(struct work_struct *work)
405 {
406         struct l2cap_chan *chan = container_of(work, struct l2cap_chan,
407                                                chan_timer.work);
408         struct l2cap_conn *conn = chan->conn;
409         int reason;
410
411         BT_DBG("chan %p state %s", chan, state_to_string(chan->state));
412
413         mutex_lock(&conn->chan_lock);
414         l2cap_chan_lock(chan);
415
416         if (chan->state == BT_CONNECTED || chan->state == BT_CONFIG)
417                 reason = ECONNREFUSED;
418         else if (chan->state == BT_CONNECT &&
419                  chan->sec_level != BT_SECURITY_SDP)
420                 reason = ECONNREFUSED;
421         else
422                 reason = ETIMEDOUT;
423
424         l2cap_chan_close(chan, reason);
425
426         l2cap_chan_unlock(chan);
427
428         chan->ops->close(chan);
429         mutex_unlock(&conn->chan_lock);
430
431         l2cap_chan_put(chan);
432 }
433
434 struct l2cap_chan *l2cap_chan_create(void)
435 {
436         struct l2cap_chan *chan;
437
438         chan = kzalloc(sizeof(*chan), GFP_ATOMIC);
439         if (!chan)
440                 return NULL;
441
442         mutex_init(&chan->lock);
443
444         /* Set default lock nesting level */
445         atomic_set(&chan->nesting, L2CAP_NESTING_NORMAL);
446
447         write_lock(&chan_list_lock);
448         list_add(&chan->global_l, &chan_list);
449         write_unlock(&chan_list_lock);
450
451         INIT_DELAYED_WORK(&chan->chan_timer, l2cap_chan_timeout);
452
453         chan->state = BT_OPEN;
454
455         kref_init(&chan->kref);
456
457         /* This flag is cleared in l2cap_chan_ready() */
458         set_bit(CONF_NOT_COMPLETE, &chan->conf_state);
459
460         BT_DBG("chan %p", chan);
461
462         return chan;
463 }
464 EXPORT_SYMBOL_GPL(l2cap_chan_create);
465
466 static void l2cap_chan_destroy(struct kref *kref)
467 {
468         struct l2cap_chan *chan = container_of(kref, struct l2cap_chan, kref);
469
470         BT_DBG("chan %p", chan);
471
472         write_lock(&chan_list_lock);
473         list_del(&chan->global_l);
474         write_unlock(&chan_list_lock);
475
476         kfree(chan);
477 }
478
479 void l2cap_chan_hold(struct l2cap_chan *c)
480 {
481         BT_DBG("chan %p orig refcnt %d", c, kref_read(&c->kref));
482
483         kref_get(&c->kref);
484 }
485
486 void l2cap_chan_put(struct l2cap_chan *c)
487 {
488         BT_DBG("chan %p orig refcnt %d", c, kref_read(&c->kref));
489
490         kref_put(&c->kref, l2cap_chan_destroy);
491 }
492 EXPORT_SYMBOL_GPL(l2cap_chan_put);
493
494 void l2cap_chan_set_defaults(struct l2cap_chan *chan)
495 {
496         chan->fcs  = L2CAP_FCS_CRC16;
497         chan->max_tx = L2CAP_DEFAULT_MAX_TX;
498         chan->tx_win = L2CAP_DEFAULT_TX_WINDOW;
499         chan->tx_win_max = L2CAP_DEFAULT_TX_WINDOW;
500         chan->remote_max_tx = chan->max_tx;
501         chan->remote_tx_win = chan->tx_win;
502         chan->ack_win = L2CAP_DEFAULT_TX_WINDOW;
503         chan->sec_level = BT_SECURITY_LOW;
504         chan->flush_to = L2CAP_DEFAULT_FLUSH_TO;
505         chan->retrans_timeout = L2CAP_DEFAULT_RETRANS_TO;
506         chan->monitor_timeout = L2CAP_DEFAULT_MONITOR_TO;
507         chan->conf_state = 0;
508
509         set_bit(FLAG_FORCE_ACTIVE, &chan->flags);
510 }
511 EXPORT_SYMBOL_GPL(l2cap_chan_set_defaults);
512
513 static void l2cap_le_flowctl_init(struct l2cap_chan *chan, u16 tx_credits)
514 {
515         chan->sdu = NULL;
516         chan->sdu_last_frag = NULL;
517         chan->sdu_len = 0;
518         chan->tx_credits = tx_credits;
519         /* Derive MPS from connection MTU to stop HCI fragmentation */
520         chan->mps = min_t(u16, chan->imtu, chan->conn->mtu - L2CAP_HDR_SIZE);
521         /* Give enough credits for a full packet */
522         chan->rx_credits = (chan->imtu / chan->mps) + 1;
523
524         skb_queue_head_init(&chan->tx_q);
525 }
526
527 void __l2cap_chan_add(struct l2cap_conn *conn, struct l2cap_chan *chan)
528 {
529         BT_DBG("conn %p, psm 0x%2.2x, dcid 0x%4.4x", conn,
530                __le16_to_cpu(chan->psm), chan->dcid);
531
532         conn->disc_reason = HCI_ERROR_REMOTE_USER_TERM;
533
534         chan->conn = conn;
535
536         switch (chan->chan_type) {
537         case L2CAP_CHAN_CONN_ORIENTED:
538                 /* Alloc CID for connection-oriented socket */
539                 chan->scid = l2cap_alloc_cid(conn);
540                 if (conn->hcon->type == ACL_LINK)
541                         chan->omtu = L2CAP_DEFAULT_MTU;
542                 break;
543
544         case L2CAP_CHAN_CONN_LESS:
545                 /* Connectionless socket */
546                 chan->scid = L2CAP_CID_CONN_LESS;
547                 chan->dcid = L2CAP_CID_CONN_LESS;
548                 chan->omtu = L2CAP_DEFAULT_MTU;
549                 break;
550
551         case L2CAP_CHAN_FIXED:
552                 /* Caller will set CID and CID specific MTU values */
553                 break;
554
555         default:
556                 /* Raw socket can send/recv signalling messages only */
557                 chan->scid = L2CAP_CID_SIGNALING;
558                 chan->dcid = L2CAP_CID_SIGNALING;
559                 chan->omtu = L2CAP_DEFAULT_MTU;
560         }
561
562         chan->local_id          = L2CAP_BESTEFFORT_ID;
563         chan->local_stype       = L2CAP_SERV_BESTEFFORT;
564         chan->local_msdu        = L2CAP_DEFAULT_MAX_SDU_SIZE;
565         chan->local_sdu_itime   = L2CAP_DEFAULT_SDU_ITIME;
566         chan->local_acc_lat     = L2CAP_DEFAULT_ACC_LAT;
567         chan->local_flush_to    = L2CAP_EFS_DEFAULT_FLUSH_TO;
568
569         l2cap_chan_hold(chan);
570
571         /* Only keep a reference for fixed channels if they requested it */
572         if (chan->chan_type != L2CAP_CHAN_FIXED ||
573             test_bit(FLAG_HOLD_HCI_CONN, &chan->flags))
574                 hci_conn_hold(conn->hcon);
575
576         list_add(&chan->list, &conn->chan_l);
577 }
578
579 void l2cap_chan_add(struct l2cap_conn *conn, struct l2cap_chan *chan)
580 {
581         mutex_lock(&conn->chan_lock);
582         __l2cap_chan_add(conn, chan);
583         mutex_unlock(&conn->chan_lock);
584 }
585
586 void l2cap_chan_del(struct l2cap_chan *chan, int err)
587 {
588         struct l2cap_conn *conn = chan->conn;
589
590         __clear_chan_timer(chan);
591
592         BT_DBG("chan %p, conn %p, err %d, state %s", chan, conn, err,
593                state_to_string(chan->state));
594
595         chan->ops->teardown(chan, err);
596
597         if (conn) {
598                 struct amp_mgr *mgr = conn->hcon->amp_mgr;
599                 /* Delete from channel list */
600                 list_del(&chan->list);
601
602                 l2cap_chan_put(chan);
603
604                 chan->conn = NULL;
605
606                 /* Reference was only held for non-fixed channels or
607                  * fixed channels that explicitly requested it using the
608                  * FLAG_HOLD_HCI_CONN flag.
609                  */
610                 if (chan->chan_type != L2CAP_CHAN_FIXED ||
611                     test_bit(FLAG_HOLD_HCI_CONN, &chan->flags))
612                         hci_conn_drop(conn->hcon);
613
614                 if (mgr && mgr->bredr_chan == chan)
615                         mgr->bredr_chan = NULL;
616         }
617
618         if (chan->hs_hchan) {
619                 struct hci_chan *hs_hchan = chan->hs_hchan;
620
621                 BT_DBG("chan %p disconnect hs_hchan %p", chan, hs_hchan);
622                 amp_disconnect_logical_link(hs_hchan);
623         }
624
625         if (test_bit(CONF_NOT_COMPLETE, &chan->conf_state))
626                 return;
627
628         switch(chan->mode) {
629         case L2CAP_MODE_BASIC:
630                 break;
631
632         case L2CAP_MODE_LE_FLOWCTL:
633                 skb_queue_purge(&chan->tx_q);
634                 break;
635
636         case L2CAP_MODE_ERTM:
637                 __clear_retrans_timer(chan);
638                 __clear_monitor_timer(chan);
639                 __clear_ack_timer(chan);
640
641                 skb_queue_purge(&chan->srej_q);
642
643                 l2cap_seq_list_free(&chan->srej_list);
644                 l2cap_seq_list_free(&chan->retrans_list);
645
646                 /* fall through */
647
648         case L2CAP_MODE_STREAMING:
649                 skb_queue_purge(&chan->tx_q);
650                 break;
651         }
652
653         return;
654 }
655 EXPORT_SYMBOL_GPL(l2cap_chan_del);
656
657 static void l2cap_conn_update_id_addr(struct work_struct *work)
658 {
659         struct l2cap_conn *conn = container_of(work, struct l2cap_conn,
660                                                id_addr_update_work);
661         struct hci_conn *hcon = conn->hcon;
662         struct l2cap_chan *chan;
663
664         mutex_lock(&conn->chan_lock);
665
666         list_for_each_entry(chan, &conn->chan_l, list) {
667                 l2cap_chan_lock(chan);
668                 bacpy(&chan->dst, &hcon->dst);
669                 chan->dst_type = bdaddr_dst_type(hcon);
670                 l2cap_chan_unlock(chan);
671         }
672
673         mutex_unlock(&conn->chan_lock);
674 }
675
676 static void l2cap_chan_le_connect_reject(struct l2cap_chan *chan)
677 {
678         struct l2cap_conn *conn = chan->conn;
679         struct l2cap_le_conn_rsp rsp;
680         u16 result;
681
682         if (test_bit(FLAG_DEFER_SETUP, &chan->flags))
683                 result = L2CAP_CR_LE_AUTHORIZATION;
684         else
685                 result = L2CAP_CR_LE_BAD_PSM;
686
687         l2cap_state_change(chan, BT_DISCONN);
688
689         rsp.dcid    = cpu_to_le16(chan->scid);
690         rsp.mtu     = cpu_to_le16(chan->imtu);
691         rsp.mps     = cpu_to_le16(chan->mps);
692         rsp.credits = cpu_to_le16(chan->rx_credits);
693         rsp.result  = cpu_to_le16(result);
694
695         l2cap_send_cmd(conn, chan->ident, L2CAP_LE_CONN_RSP, sizeof(rsp),
696                        &rsp);
697 }
698
699 static void l2cap_chan_connect_reject(struct l2cap_chan *chan)
700 {
701         struct l2cap_conn *conn = chan->conn;
702         struct l2cap_conn_rsp rsp;
703         u16 result;
704
705         if (test_bit(FLAG_DEFER_SETUP, &chan->flags))
706                 result = L2CAP_CR_SEC_BLOCK;
707         else
708                 result = L2CAP_CR_BAD_PSM;
709
710         l2cap_state_change(chan, BT_DISCONN);
711
712         rsp.scid   = cpu_to_le16(chan->dcid);
713         rsp.dcid   = cpu_to_le16(chan->scid);
714         rsp.result = cpu_to_le16(result);
715         rsp.status = cpu_to_le16(L2CAP_CS_NO_INFO);
716
717         l2cap_send_cmd(conn, chan->ident, L2CAP_CONN_RSP, sizeof(rsp), &rsp);
718 }
719
720 void l2cap_chan_close(struct l2cap_chan *chan, int reason)
721 {
722         struct l2cap_conn *conn = chan->conn;
723
724         BT_DBG("chan %p state %s", chan, state_to_string(chan->state));
725
726         switch (chan->state) {
727         case BT_LISTEN:
728                 chan->ops->teardown(chan, 0);
729                 break;
730
731         case BT_CONNECTED:
732         case BT_CONFIG:
733                 if (chan->chan_type == L2CAP_CHAN_CONN_ORIENTED) {
734                         __set_chan_timer(chan, chan->ops->get_sndtimeo(chan));
735                         l2cap_send_disconn_req(chan, reason);
736                 } else
737                         l2cap_chan_del(chan, reason);
738                 break;
739
740         case BT_CONNECT2:
741                 if (chan->chan_type == L2CAP_CHAN_CONN_ORIENTED) {
742                         if (conn->hcon->type == ACL_LINK)
743                                 l2cap_chan_connect_reject(chan);
744                         else if (conn->hcon->type == LE_LINK)
745                                 l2cap_chan_le_connect_reject(chan);
746                 }
747
748                 l2cap_chan_del(chan, reason);
749                 break;
750
751         case BT_CONNECT:
752         case BT_DISCONN:
753                 l2cap_chan_del(chan, reason);
754                 break;
755
756         default:
757                 chan->ops->teardown(chan, 0);
758                 break;
759         }
760 }
761 EXPORT_SYMBOL(l2cap_chan_close);
762
763 static inline u8 l2cap_get_auth_type(struct l2cap_chan *chan)
764 {
765         switch (chan->chan_type) {
766         case L2CAP_CHAN_RAW:
767                 switch (chan->sec_level) {
768                 case BT_SECURITY_HIGH:
769                 case BT_SECURITY_FIPS:
770                         return HCI_AT_DEDICATED_BONDING_MITM;
771                 case BT_SECURITY_MEDIUM:
772                         return HCI_AT_DEDICATED_BONDING;
773                 default:
774                         return HCI_AT_NO_BONDING;
775                 }
776                 break;
777         case L2CAP_CHAN_CONN_LESS:
778                 if (chan->psm == cpu_to_le16(L2CAP_PSM_3DSP)) {
779                         if (chan->sec_level == BT_SECURITY_LOW)
780                                 chan->sec_level = BT_SECURITY_SDP;
781                 }
782                 if (chan->sec_level == BT_SECURITY_HIGH ||
783                     chan->sec_level == BT_SECURITY_FIPS)
784                         return HCI_AT_NO_BONDING_MITM;
785                 else
786                         return HCI_AT_NO_BONDING;
787                 break;
788         case L2CAP_CHAN_CONN_ORIENTED:
789                 if (chan->psm == cpu_to_le16(L2CAP_PSM_SDP)) {
790                         if (chan->sec_level == BT_SECURITY_LOW)
791                                 chan->sec_level = BT_SECURITY_SDP;
792
793                         if (chan->sec_level == BT_SECURITY_HIGH ||
794                             chan->sec_level == BT_SECURITY_FIPS)
795                                 return HCI_AT_NO_BONDING_MITM;
796                         else
797                                 return HCI_AT_NO_BONDING;
798                 }
799                 /* fall through */
800         default:
801                 switch (chan->sec_level) {
802                 case BT_SECURITY_HIGH:
803                 case BT_SECURITY_FIPS:
804                         return HCI_AT_GENERAL_BONDING_MITM;
805                 case BT_SECURITY_MEDIUM:
806                         return HCI_AT_GENERAL_BONDING;
807                 default:
808                         return HCI_AT_NO_BONDING;
809                 }
810                 break;
811         }
812 }
813
814 /* Service level security */
815 int l2cap_chan_check_security(struct l2cap_chan *chan, bool initiator)
816 {
817         struct l2cap_conn *conn = chan->conn;
818         __u8 auth_type;
819
820         if (conn->hcon->type == LE_LINK)
821                 return smp_conn_security(conn->hcon, chan->sec_level);
822
823         auth_type = l2cap_get_auth_type(chan);
824
825         return hci_conn_security(conn->hcon, chan->sec_level, auth_type,
826                                  initiator);
827 }
828
829 static u8 l2cap_get_ident(struct l2cap_conn *conn)
830 {
831         u8 id;
832
833         /* Get next available identificator.
834          *    1 - 128 are used by kernel.
835          *  129 - 199 are reserved.
836          *  200 - 254 are used by utilities like l2ping, etc.
837          */
838
839         mutex_lock(&conn->ident_lock);
840
841         if (++conn->tx_ident > 128)
842                 conn->tx_ident = 1;
843
844         id = conn->tx_ident;
845
846         mutex_unlock(&conn->ident_lock);
847
848         return id;
849 }
850
851 static void l2cap_send_cmd(struct l2cap_conn *conn, u8 ident, u8 code, u16 len,
852                            void *data)
853 {
854         struct sk_buff *skb = l2cap_build_cmd(conn, code, ident, len, data);
855         u8 flags;
856
857         BT_DBG("code 0x%2.2x", code);
858
859         if (!skb)
860                 return;
861
862         /* Use NO_FLUSH if supported or we have an LE link (which does
863          * not support auto-flushing packets) */
864         if (lmp_no_flush_capable(conn->hcon->hdev) ||
865             conn->hcon->type == LE_LINK)
866                 flags = ACL_START_NO_FLUSH;
867         else
868                 flags = ACL_START;
869
870         bt_cb(skb)->force_active = BT_POWER_FORCE_ACTIVE_ON;
871         skb->priority = HCI_PRIO_MAX;
872
873         hci_send_acl(conn->hchan, skb, flags);
874 }
875
876 static bool __chan_is_moving(struct l2cap_chan *chan)
877 {
878         return chan->move_state != L2CAP_MOVE_STABLE &&
879                chan->move_state != L2CAP_MOVE_WAIT_PREPARE;
880 }
881
882 static void l2cap_do_send(struct l2cap_chan *chan, struct sk_buff *skb)
883 {
884         struct hci_conn *hcon = chan->conn->hcon;
885         u16 flags;
886
887         BT_DBG("chan %p, skb %p len %d priority %u", chan, skb, skb->len,
888                skb->priority);
889
890         if (chan->hs_hcon && !__chan_is_moving(chan)) {
891                 if (chan->hs_hchan)
892                         hci_send_acl(chan->hs_hchan, skb, ACL_COMPLETE);
893                 else
894                         kfree_skb(skb);
895
896                 return;
897         }
898
899         /* Use NO_FLUSH for LE links (where this is the only option) or
900          * if the BR/EDR link supports it and flushing has not been
901          * explicitly requested (through FLAG_FLUSHABLE).
902          */
903         if (hcon->type == LE_LINK ||
904             (!test_bit(FLAG_FLUSHABLE, &chan->flags) &&
905              lmp_no_flush_capable(hcon->hdev)))
906                 flags = ACL_START_NO_FLUSH;
907         else
908                 flags = ACL_START;
909
910         bt_cb(skb)->force_active = test_bit(FLAG_FORCE_ACTIVE, &chan->flags);
911         hci_send_acl(chan->conn->hchan, skb, flags);
912 }
913
914 static void __unpack_enhanced_control(u16 enh, struct l2cap_ctrl *control)
915 {
916         control->reqseq = (enh & L2CAP_CTRL_REQSEQ) >> L2CAP_CTRL_REQSEQ_SHIFT;
917         control->final = (enh & L2CAP_CTRL_FINAL) >> L2CAP_CTRL_FINAL_SHIFT;
918
919         if (enh & L2CAP_CTRL_FRAME_TYPE) {
920                 /* S-Frame */
921                 control->sframe = 1;
922                 control->poll = (enh & L2CAP_CTRL_POLL) >> L2CAP_CTRL_POLL_SHIFT;
923                 control->super = (enh & L2CAP_CTRL_SUPERVISE) >> L2CAP_CTRL_SUPER_SHIFT;
924
925                 control->sar = 0;
926                 control->txseq = 0;
927         } else {
928                 /* I-Frame */
929                 control->sframe = 0;
930                 control->sar = (enh & L2CAP_CTRL_SAR) >> L2CAP_CTRL_SAR_SHIFT;
931                 control->txseq = (enh & L2CAP_CTRL_TXSEQ) >> L2CAP_CTRL_TXSEQ_SHIFT;
932
933                 control->poll = 0;
934                 control->super = 0;
935         }
936 }
937
938 static void __unpack_extended_control(u32 ext, struct l2cap_ctrl *control)
939 {
940         control->reqseq = (ext & L2CAP_EXT_CTRL_REQSEQ) >> L2CAP_EXT_CTRL_REQSEQ_SHIFT;
941         control->final = (ext & L2CAP_EXT_CTRL_FINAL) >> L2CAP_EXT_CTRL_FINAL_SHIFT;
942
943         if (ext & L2CAP_EXT_CTRL_FRAME_TYPE) {
944                 /* S-Frame */
945                 control->sframe = 1;
946                 control->poll = (ext & L2CAP_EXT_CTRL_POLL) >> L2CAP_EXT_CTRL_POLL_SHIFT;
947                 control->super = (ext & L2CAP_EXT_CTRL_SUPERVISE) >> L2CAP_EXT_CTRL_SUPER_SHIFT;
948
949                 control->sar = 0;
950                 control->txseq = 0;
951         } else {
952                 /* I-Frame */
953                 control->sframe = 0;
954                 control->sar = (ext & L2CAP_EXT_CTRL_SAR) >> L2CAP_EXT_CTRL_SAR_SHIFT;
955                 control->txseq = (ext & L2CAP_EXT_CTRL_TXSEQ) >> L2CAP_EXT_CTRL_TXSEQ_SHIFT;
956
957                 control->poll = 0;
958                 control->super = 0;
959         }
960 }
961
962 static inline void __unpack_control(struct l2cap_chan *chan,
963                                     struct sk_buff *skb)
964 {
965         if (test_bit(FLAG_EXT_CTRL, &chan->flags)) {
966                 __unpack_extended_control(get_unaligned_le32(skb->data),
967                                           &bt_cb(skb)->l2cap);
968                 skb_pull(skb, L2CAP_EXT_CTRL_SIZE);
969         } else {
970                 __unpack_enhanced_control(get_unaligned_le16(skb->data),
971                                           &bt_cb(skb)->l2cap);
972                 skb_pull(skb, L2CAP_ENH_CTRL_SIZE);
973         }
974 }
975
976 static u32 __pack_extended_control(struct l2cap_ctrl *control)
977 {
978         u32 packed;
979
980         packed = control->reqseq << L2CAP_EXT_CTRL_REQSEQ_SHIFT;
981         packed |= control->final << L2CAP_EXT_CTRL_FINAL_SHIFT;
982
983         if (control->sframe) {
984                 packed |= control->poll << L2CAP_EXT_CTRL_POLL_SHIFT;
985                 packed |= control->super << L2CAP_EXT_CTRL_SUPER_SHIFT;
986                 packed |= L2CAP_EXT_CTRL_FRAME_TYPE;
987         } else {
988                 packed |= control->sar << L2CAP_EXT_CTRL_SAR_SHIFT;
989                 packed |= control->txseq << L2CAP_EXT_CTRL_TXSEQ_SHIFT;
990         }
991
992         return packed;
993 }
994
995 static u16 __pack_enhanced_control(struct l2cap_ctrl *control)
996 {
997         u16 packed;
998
999         packed = control->reqseq << L2CAP_CTRL_REQSEQ_SHIFT;
1000         packed |= control->final << L2CAP_CTRL_FINAL_SHIFT;
1001
1002         if (control->sframe) {
1003                 packed |= control->poll << L2CAP_CTRL_POLL_SHIFT;
1004                 packed |= control->super << L2CAP_CTRL_SUPER_SHIFT;
1005                 packed |= L2CAP_CTRL_FRAME_TYPE;
1006         } else {
1007                 packed |= control->sar << L2CAP_CTRL_SAR_SHIFT;
1008                 packed |= control->txseq << L2CAP_CTRL_TXSEQ_SHIFT;
1009         }
1010
1011         return packed;
1012 }
1013
1014 static inline void __pack_control(struct l2cap_chan *chan,
1015                                   struct l2cap_ctrl *control,
1016                                   struct sk_buff *skb)
1017 {
1018         if (test_bit(FLAG_EXT_CTRL, &chan->flags)) {
1019                 put_unaligned_le32(__pack_extended_control(control),
1020                                    skb->data + L2CAP_HDR_SIZE);
1021         } else {
1022                 put_unaligned_le16(__pack_enhanced_control(control),
1023                                    skb->data + L2CAP_HDR_SIZE);
1024         }
1025 }
1026
1027 static inline unsigned int __ertm_hdr_size(struct l2cap_chan *chan)
1028 {
1029         if (test_bit(FLAG_EXT_CTRL, &chan->flags))
1030                 return L2CAP_EXT_HDR_SIZE;
1031         else
1032                 return L2CAP_ENH_HDR_SIZE;
1033 }
1034
1035 static struct sk_buff *l2cap_create_sframe_pdu(struct l2cap_chan *chan,
1036                                                u32 control)
1037 {
1038         struct sk_buff *skb;
1039         struct l2cap_hdr *lh;
1040         int hlen = __ertm_hdr_size(chan);
1041
1042         if (chan->fcs == L2CAP_FCS_CRC16)
1043                 hlen += L2CAP_FCS_SIZE;
1044
1045         skb = bt_skb_alloc(hlen, GFP_KERNEL);
1046
1047         if (!skb)
1048                 return ERR_PTR(-ENOMEM);
1049
1050         lh = skb_put(skb, L2CAP_HDR_SIZE);
1051         lh->len = cpu_to_le16(hlen - L2CAP_HDR_SIZE);
1052         lh->cid = cpu_to_le16(chan->dcid);
1053
1054         if (test_bit(FLAG_EXT_CTRL, &chan->flags))
1055                 put_unaligned_le32(control, skb_put(skb, L2CAP_EXT_CTRL_SIZE));
1056         else
1057                 put_unaligned_le16(control, skb_put(skb, L2CAP_ENH_CTRL_SIZE));
1058
1059         if (chan->fcs == L2CAP_FCS_CRC16) {
1060                 u16 fcs = crc16(0, (u8 *)skb->data, skb->len);
1061                 put_unaligned_le16(fcs, skb_put(skb, L2CAP_FCS_SIZE));
1062         }
1063
1064         skb->priority = HCI_PRIO_MAX;
1065         return skb;
1066 }
1067
1068 static void l2cap_send_sframe(struct l2cap_chan *chan,
1069                               struct l2cap_ctrl *control)
1070 {
1071         struct sk_buff *skb;
1072         u32 control_field;
1073
1074         BT_DBG("chan %p, control %p", chan, control);
1075
1076         if (!control->sframe)
1077                 return;
1078
1079         if (__chan_is_moving(chan))
1080                 return;
1081
1082         if (test_and_clear_bit(CONN_SEND_FBIT, &chan->conn_state) &&
1083             !control->poll)
1084                 control->final = 1;
1085
1086         if (control->super == L2CAP_SUPER_RR)
1087                 clear_bit(CONN_RNR_SENT, &chan->conn_state);
1088         else if (control->super == L2CAP_SUPER_RNR)
1089                 set_bit(CONN_RNR_SENT, &chan->conn_state);
1090
1091         if (control->super != L2CAP_SUPER_SREJ) {
1092                 chan->last_acked_seq = control->reqseq;
1093                 __clear_ack_timer(chan);
1094         }
1095
1096         BT_DBG("reqseq %d, final %d, poll %d, super %d", control->reqseq,
1097                control->final, control->poll, control->super);
1098
1099         if (test_bit(FLAG_EXT_CTRL, &chan->flags))
1100                 control_field = __pack_extended_control(control);
1101         else
1102                 control_field = __pack_enhanced_control(control);
1103
1104         skb = l2cap_create_sframe_pdu(chan, control_field);
1105         if (!IS_ERR(skb))
1106                 l2cap_do_send(chan, skb);
1107 }
1108
1109 static void l2cap_send_rr_or_rnr(struct l2cap_chan *chan, bool poll)
1110 {
1111         struct l2cap_ctrl control;
1112
1113         BT_DBG("chan %p, poll %d", chan, poll);
1114
1115         memset(&control, 0, sizeof(control));
1116         control.sframe = 1;
1117         control.poll = poll;
1118
1119         if (test_bit(CONN_LOCAL_BUSY, &chan->conn_state))
1120                 control.super = L2CAP_SUPER_RNR;
1121         else
1122                 control.super = L2CAP_SUPER_RR;
1123
1124         control.reqseq = chan->buffer_seq;
1125         l2cap_send_sframe(chan, &control);
1126 }
1127
1128 static inline int __l2cap_no_conn_pending(struct l2cap_chan *chan)
1129 {
1130         if (chan->chan_type != L2CAP_CHAN_CONN_ORIENTED)
1131                 return true;
1132
1133         return !test_bit(CONF_CONNECT_PEND, &chan->conf_state);
1134 }
1135
1136 static bool __amp_capable(struct l2cap_chan *chan)
1137 {
1138         struct l2cap_conn *conn = chan->conn;
1139         struct hci_dev *hdev;
1140         bool amp_available = false;
1141
1142         if (!(conn->local_fixed_chan & L2CAP_FC_A2MP))
1143                 return false;
1144
1145         if (!(conn->remote_fixed_chan & L2CAP_FC_A2MP))
1146                 return false;
1147
1148         read_lock(&hci_dev_list_lock);
1149         list_for_each_entry(hdev, &hci_dev_list, list) {
1150                 if (hdev->amp_type != AMP_TYPE_BREDR &&
1151                     test_bit(HCI_UP, &hdev->flags)) {
1152                         amp_available = true;
1153                         break;
1154                 }
1155         }
1156         read_unlock(&hci_dev_list_lock);
1157
1158         if (chan->chan_policy == BT_CHANNEL_POLICY_AMP_PREFERRED)
1159                 return amp_available;
1160
1161         return false;
1162 }
1163
1164 static bool l2cap_check_efs(struct l2cap_chan *chan)
1165 {
1166         /* Check EFS parameters */
1167         return true;
1168 }
1169
1170 void l2cap_send_conn_req(struct l2cap_chan *chan)
1171 {
1172         struct l2cap_conn *conn = chan->conn;
1173         struct l2cap_conn_req req;
1174
1175         req.scid = cpu_to_le16(chan->scid);
1176         req.psm  = chan->psm;
1177
1178         chan->ident = l2cap_get_ident(conn);
1179
1180         set_bit(CONF_CONNECT_PEND, &chan->conf_state);
1181
1182         l2cap_send_cmd(conn, chan->ident, L2CAP_CONN_REQ, sizeof(req), &req);
1183 }
1184
1185 static void l2cap_send_create_chan_req(struct l2cap_chan *chan, u8 amp_id)
1186 {
1187         struct l2cap_create_chan_req req;
1188         req.scid = cpu_to_le16(chan->scid);
1189         req.psm  = chan->psm;
1190         req.amp_id = amp_id;
1191
1192         chan->ident = l2cap_get_ident(chan->conn);
1193
1194         l2cap_send_cmd(chan->conn, chan->ident, L2CAP_CREATE_CHAN_REQ,
1195                        sizeof(req), &req);
1196 }
1197
1198 static void l2cap_move_setup(struct l2cap_chan *chan)
1199 {
1200         struct sk_buff *skb;
1201
1202         BT_DBG("chan %p", chan);
1203
1204         if (chan->mode != L2CAP_MODE_ERTM)
1205                 return;
1206
1207         __clear_retrans_timer(chan);
1208         __clear_monitor_timer(chan);
1209         __clear_ack_timer(chan);
1210
1211         chan->retry_count = 0;
1212         skb_queue_walk(&chan->tx_q, skb) {
1213                 if (bt_cb(skb)->l2cap.retries)
1214                         bt_cb(skb)->l2cap.retries = 1;
1215                 else
1216                         break;
1217         }
1218
1219         chan->expected_tx_seq = chan->buffer_seq;
1220
1221         clear_bit(CONN_REJ_ACT, &chan->conn_state);
1222         clear_bit(CONN_SREJ_ACT, &chan->conn_state);
1223         l2cap_seq_list_clear(&chan->retrans_list);
1224         l2cap_seq_list_clear(&chan->srej_list);
1225         skb_queue_purge(&chan->srej_q);
1226
1227         chan->tx_state = L2CAP_TX_STATE_XMIT;
1228         chan->rx_state = L2CAP_RX_STATE_MOVE;
1229
1230         set_bit(CONN_REMOTE_BUSY, &chan->conn_state);
1231 }
1232
1233 static void l2cap_move_done(struct l2cap_chan *chan)
1234 {
1235         u8 move_role = chan->move_role;
1236         BT_DBG("chan %p", chan);
1237
1238         chan->move_state = L2CAP_MOVE_STABLE;
1239         chan->move_role = L2CAP_MOVE_ROLE_NONE;
1240
1241         if (chan->mode != L2CAP_MODE_ERTM)
1242                 return;
1243
1244         switch (move_role) {
1245         case L2CAP_MOVE_ROLE_INITIATOR:
1246                 l2cap_tx(chan, NULL, NULL, L2CAP_EV_EXPLICIT_POLL);
1247                 chan->rx_state = L2CAP_RX_STATE_WAIT_F;
1248                 break;
1249         case L2CAP_MOVE_ROLE_RESPONDER:
1250                 chan->rx_state = L2CAP_RX_STATE_WAIT_P;
1251                 break;
1252         }
1253 }
1254
1255 static void l2cap_chan_ready(struct l2cap_chan *chan)
1256 {
1257         /* The channel may have already been flagged as connected in
1258          * case of receiving data before the L2CAP info req/rsp
1259          * procedure is complete.
1260          */
1261         if (chan->state == BT_CONNECTED)
1262                 return;
1263
1264         /* This clears all conf flags, including CONF_NOT_COMPLETE */
1265         chan->conf_state = 0;
1266         __clear_chan_timer(chan);
1267
1268         if (chan->mode == L2CAP_MODE_LE_FLOWCTL && !chan->tx_credits)
1269                 chan->ops->suspend(chan);
1270
1271         chan->state = BT_CONNECTED;
1272
1273         chan->ops->ready(chan);
1274 }
1275
1276 static void l2cap_le_connect(struct l2cap_chan *chan)
1277 {
1278         struct l2cap_conn *conn = chan->conn;
1279         struct l2cap_le_conn_req req;
1280
1281         if (test_and_set_bit(FLAG_LE_CONN_REQ_SENT, &chan->flags))
1282                 return;
1283
1284         l2cap_le_flowctl_init(chan, 0);
1285
1286         req.psm     = chan->psm;
1287         req.scid    = cpu_to_le16(chan->scid);
1288         req.mtu     = cpu_to_le16(chan->imtu);
1289         req.mps     = cpu_to_le16(chan->mps);
1290         req.credits = cpu_to_le16(chan->rx_credits);
1291
1292         chan->ident = l2cap_get_ident(conn);
1293
1294         l2cap_send_cmd(conn, chan->ident, L2CAP_LE_CONN_REQ,
1295                        sizeof(req), &req);
1296 }
1297
1298 static void l2cap_le_start(struct l2cap_chan *chan)
1299 {
1300         struct l2cap_conn *conn = chan->conn;
1301
1302         if (!smp_conn_security(conn->hcon, chan->sec_level))
1303                 return;
1304
1305         if (!chan->psm) {
1306                 l2cap_chan_ready(chan);
1307                 return;
1308         }
1309
1310         if (chan->state == BT_CONNECT)
1311                 l2cap_le_connect(chan);
1312 }
1313
1314 static void l2cap_start_connection(struct l2cap_chan *chan)
1315 {
1316         if (__amp_capable(chan)) {
1317                 BT_DBG("chan %p AMP capable: discover AMPs", chan);
1318                 a2mp_discover_amp(chan);
1319         } else if (chan->conn->hcon->type == LE_LINK) {
1320                 l2cap_le_start(chan);
1321         } else {
1322                 l2cap_send_conn_req(chan);
1323         }
1324 }
1325
1326 static void l2cap_request_info(struct l2cap_conn *conn)
1327 {
1328         struct l2cap_info_req req;
1329
1330         if (conn->info_state & L2CAP_INFO_FEAT_MASK_REQ_SENT)
1331                 return;
1332
1333         req.type = cpu_to_le16(L2CAP_IT_FEAT_MASK);
1334
1335         conn->info_state |= L2CAP_INFO_FEAT_MASK_REQ_SENT;
1336         conn->info_ident = l2cap_get_ident(conn);
1337
1338         schedule_delayed_work(&conn->info_timer, L2CAP_INFO_TIMEOUT);
1339
1340         l2cap_send_cmd(conn, conn->info_ident, L2CAP_INFO_REQ,
1341                        sizeof(req), &req);
1342 }
1343
1344 static void l2cap_do_start(struct l2cap_chan *chan)
1345 {
1346         struct l2cap_conn *conn = chan->conn;
1347
1348         if (conn->hcon->type == LE_LINK) {
1349                 l2cap_le_start(chan);
1350                 return;
1351         }
1352
1353         if (!(conn->info_state & L2CAP_INFO_FEAT_MASK_REQ_SENT)) {
1354                 l2cap_request_info(conn);
1355                 return;
1356         }
1357
1358         if (!(conn->info_state & L2CAP_INFO_FEAT_MASK_REQ_DONE))
1359                 return;
1360
1361         if (l2cap_chan_check_security(chan, true) &&
1362             __l2cap_no_conn_pending(chan))
1363                 l2cap_start_connection(chan);
1364 }
1365
1366 static inline int l2cap_mode_supported(__u8 mode, __u32 feat_mask)
1367 {
1368         u32 local_feat_mask = l2cap_feat_mask;
1369         if (!disable_ertm)
1370                 local_feat_mask |= L2CAP_FEAT_ERTM | L2CAP_FEAT_STREAMING;
1371
1372         switch (mode) {
1373         case L2CAP_MODE_ERTM:
1374                 return L2CAP_FEAT_ERTM & feat_mask & local_feat_mask;
1375         case L2CAP_MODE_STREAMING:
1376                 return L2CAP_FEAT_STREAMING & feat_mask & local_feat_mask;
1377         default:
1378                 return 0x00;
1379         }
1380 }
1381
1382 static void l2cap_send_disconn_req(struct l2cap_chan *chan, int err)
1383 {
1384         struct l2cap_conn *conn = chan->conn;
1385         struct l2cap_disconn_req req;
1386
1387         if (!conn)
1388                 return;
1389
1390         if (chan->mode == L2CAP_MODE_ERTM && chan->state == BT_CONNECTED) {
1391                 __clear_retrans_timer(chan);
1392                 __clear_monitor_timer(chan);
1393                 __clear_ack_timer(chan);
1394         }
1395
1396         if (chan->scid == L2CAP_CID_A2MP) {
1397                 l2cap_state_change(chan, BT_DISCONN);
1398                 return;
1399         }
1400
1401         req.dcid = cpu_to_le16(chan->dcid);
1402         req.scid = cpu_to_le16(chan->scid);
1403         l2cap_send_cmd(conn, l2cap_get_ident(conn), L2CAP_DISCONN_REQ,
1404                        sizeof(req), &req);
1405
1406         l2cap_state_change_and_error(chan, BT_DISCONN, err);
1407 }
1408
1409 /* ---- L2CAP connections ---- */
1410 static void l2cap_conn_start(struct l2cap_conn *conn)
1411 {
1412         struct l2cap_chan *chan, *tmp;
1413
1414         BT_DBG("conn %p", conn);
1415
1416         mutex_lock(&conn->chan_lock);
1417
1418         list_for_each_entry_safe(chan, tmp, &conn->chan_l, list) {
1419                 l2cap_chan_lock(chan);
1420
1421                 if (chan->chan_type != L2CAP_CHAN_CONN_ORIENTED) {
1422                         l2cap_chan_ready(chan);
1423                         l2cap_chan_unlock(chan);
1424                         continue;
1425                 }
1426
1427                 if (chan->state == BT_CONNECT) {
1428                         if (!l2cap_chan_check_security(chan, true) ||
1429                             !__l2cap_no_conn_pending(chan)) {
1430                                 l2cap_chan_unlock(chan);
1431                                 continue;
1432                         }
1433
1434                         if (!l2cap_mode_supported(chan->mode, conn->feat_mask)
1435                             && test_bit(CONF_STATE2_DEVICE,
1436                                         &chan->conf_state)) {
1437                                 l2cap_chan_close(chan, ECONNRESET);
1438                                 l2cap_chan_unlock(chan);
1439                                 continue;
1440                         }
1441
1442                         l2cap_start_connection(chan);
1443
1444                 } else if (chan->state == BT_CONNECT2) {
1445                         struct l2cap_conn_rsp rsp;
1446                         char buf[128];
1447                         rsp.scid = cpu_to_le16(chan->dcid);
1448                         rsp.dcid = cpu_to_le16(chan->scid);
1449
1450                         if (l2cap_chan_check_security(chan, false)) {
1451                                 if (test_bit(FLAG_DEFER_SETUP, &chan->flags)) {
1452                                         rsp.result = cpu_to_le16(L2CAP_CR_PEND);
1453                                         rsp.status = cpu_to_le16(L2CAP_CS_AUTHOR_PEND);
1454                                         chan->ops->defer(chan);
1455
1456                                 } else {
1457                                         l2cap_state_change(chan, BT_CONFIG);
1458                                         rsp.result = cpu_to_le16(L2CAP_CR_SUCCESS);
1459                                         rsp.status = cpu_to_le16(L2CAP_CS_NO_INFO);
1460                                 }
1461                         } else {
1462                                 rsp.result = cpu_to_le16(L2CAP_CR_PEND);
1463                                 rsp.status = cpu_to_le16(L2CAP_CS_AUTHEN_PEND);
1464                         }
1465
1466                         l2cap_send_cmd(conn, chan->ident, L2CAP_CONN_RSP,
1467                                        sizeof(rsp), &rsp);
1468
1469                         if (test_bit(CONF_REQ_SENT, &chan->conf_state) ||
1470                             rsp.result != L2CAP_CR_SUCCESS) {
1471                                 l2cap_chan_unlock(chan);
1472                                 continue;
1473                         }
1474
1475                         set_bit(CONF_REQ_SENT, &chan->conf_state);
1476                         l2cap_send_cmd(conn, l2cap_get_ident(conn), L2CAP_CONF_REQ,
1477                                        l2cap_build_conf_req(chan, buf, sizeof(buf)), buf);
1478                         chan->num_conf_req++;
1479                 }
1480
1481                 l2cap_chan_unlock(chan);
1482         }
1483
1484         mutex_unlock(&conn->chan_lock);
1485 }
1486
1487 static void l2cap_le_conn_ready(struct l2cap_conn *conn)
1488 {
1489         struct hci_conn *hcon = conn->hcon;
1490         struct hci_dev *hdev = hcon->hdev;
1491
1492         BT_DBG("%s conn %p", hdev->name, conn);
1493
1494         /* For outgoing pairing which doesn't necessarily have an
1495          * associated socket (e.g. mgmt_pair_device).
1496          */
1497         if (hcon->out)
1498                 smp_conn_security(hcon, hcon->pending_sec_level);
1499
1500         /* For LE slave connections, make sure the connection interval
1501          * is in the range of the minium and maximum interval that has
1502          * been configured for this connection. If not, then trigger
1503          * the connection update procedure.
1504          */
1505         if (hcon->role == HCI_ROLE_SLAVE &&
1506             (hcon->le_conn_interval < hcon->le_conn_min_interval ||
1507              hcon->le_conn_interval > hcon->le_conn_max_interval)) {
1508                 struct l2cap_conn_param_update_req req;
1509
1510                 req.min = cpu_to_le16(hcon->le_conn_min_interval);
1511                 req.max = cpu_to_le16(hcon->le_conn_max_interval);
1512                 req.latency = cpu_to_le16(hcon->le_conn_latency);
1513                 req.to_multiplier = cpu_to_le16(hcon->le_supv_timeout);
1514
1515                 l2cap_send_cmd(conn, l2cap_get_ident(conn),
1516                                L2CAP_CONN_PARAM_UPDATE_REQ, sizeof(req), &req);
1517         }
1518 }
1519
1520 static void l2cap_conn_ready(struct l2cap_conn *conn)
1521 {
1522         struct l2cap_chan *chan;
1523         struct hci_conn *hcon = conn->hcon;
1524
1525         BT_DBG("conn %p", conn);
1526
1527         if (hcon->type == ACL_LINK)
1528                 l2cap_request_info(conn);
1529
1530         mutex_lock(&conn->chan_lock);
1531
1532         list_for_each_entry(chan, &conn->chan_l, list) {
1533
1534                 l2cap_chan_lock(chan);
1535
1536                 if (chan->scid == L2CAP_CID_A2MP) {
1537                         l2cap_chan_unlock(chan);
1538                         continue;
1539                 }
1540
1541                 if (hcon->type == LE_LINK) {
1542                         l2cap_le_start(chan);
1543                 } else if (chan->chan_type != L2CAP_CHAN_CONN_ORIENTED) {
1544                         if (conn->info_state & L2CAP_INFO_FEAT_MASK_REQ_DONE)
1545                                 l2cap_chan_ready(chan);
1546                 } else if (chan->state == BT_CONNECT) {
1547                         l2cap_do_start(chan);
1548                 }
1549
1550                 l2cap_chan_unlock(chan);
1551         }
1552
1553         mutex_unlock(&conn->chan_lock);
1554
1555         if (hcon->type == LE_LINK)
1556                 l2cap_le_conn_ready(conn);
1557
1558         queue_work(hcon->hdev->workqueue, &conn->pending_rx_work);
1559 }
1560
1561 /* Notify sockets that we cannot guaranty reliability anymore */
1562 static void l2cap_conn_unreliable(struct l2cap_conn *conn, int err)
1563 {
1564         struct l2cap_chan *chan;
1565
1566         BT_DBG("conn %p", conn);
1567
1568         mutex_lock(&conn->chan_lock);
1569
1570         list_for_each_entry(chan, &conn->chan_l, list) {
1571                 if (test_bit(FLAG_FORCE_RELIABLE, &chan->flags))
1572                         l2cap_chan_set_err(chan, err);
1573         }
1574
1575         mutex_unlock(&conn->chan_lock);
1576 }
1577
1578 static void l2cap_info_timeout(struct work_struct *work)
1579 {
1580         struct l2cap_conn *conn = container_of(work, struct l2cap_conn,
1581                                                info_timer.work);
1582
1583         conn->info_state |= L2CAP_INFO_FEAT_MASK_REQ_DONE;
1584         conn->info_ident = 0;
1585
1586         l2cap_conn_start(conn);
1587 }
1588
1589 /*
1590  * l2cap_user
1591  * External modules can register l2cap_user objects on l2cap_conn. The ->probe
1592  * callback is called during registration. The ->remove callback is called
1593  * during unregistration.
1594  * An l2cap_user object can either be explicitly unregistered or when the
1595  * underlying l2cap_conn object is deleted. This guarantees that l2cap->hcon,
1596  * l2cap->hchan, .. are valid as long as the remove callback hasn't been called.
1597  * External modules must own a reference to the l2cap_conn object if they intend
1598  * to call l2cap_unregister_user(). The l2cap_conn object might get destroyed at
1599  * any time if they don't.
1600  */
1601
1602 int l2cap_register_user(struct l2cap_conn *conn, struct l2cap_user *user)
1603 {
1604         struct hci_dev *hdev = conn->hcon->hdev;
1605         int ret;
1606
1607         /* We need to check whether l2cap_conn is registered. If it is not, we
1608          * must not register the l2cap_user. l2cap_conn_del() is unregisters
1609          * l2cap_conn objects, but doesn't provide its own locking. Instead, it
1610          * relies on the parent hci_conn object to be locked. This itself relies
1611          * on the hci_dev object to be locked. So we must lock the hci device
1612          * here, too. */
1613
1614         hci_dev_lock(hdev);
1615
1616         if (!list_empty(&user->list)) {
1617                 ret = -EINVAL;
1618                 goto out_unlock;
1619         }
1620
1621         /* conn->hchan is NULL after l2cap_conn_del() was called */
1622         if (!conn->hchan) {
1623                 ret = -ENODEV;
1624                 goto out_unlock;
1625         }
1626
1627         ret = user->probe(conn, user);
1628         if (ret)
1629                 goto out_unlock;
1630
1631         list_add(&user->list, &conn->users);
1632         ret = 0;
1633
1634 out_unlock:
1635         hci_dev_unlock(hdev);
1636         return ret;
1637 }
1638 EXPORT_SYMBOL(l2cap_register_user);
1639
1640 void l2cap_unregister_user(struct l2cap_conn *conn, struct l2cap_user *user)
1641 {
1642         struct hci_dev *hdev = conn->hcon->hdev;
1643
1644         hci_dev_lock(hdev);
1645
1646         if (list_empty(&user->list))
1647                 goto out_unlock;
1648
1649         list_del_init(&user->list);
1650         user->remove(conn, user);
1651
1652 out_unlock:
1653         hci_dev_unlock(hdev);
1654 }
1655 EXPORT_SYMBOL(l2cap_unregister_user);
1656
1657 static void l2cap_unregister_all_users(struct l2cap_conn *conn)
1658 {
1659         struct l2cap_user *user;
1660
1661         while (!list_empty(&conn->users)) {
1662                 user = list_first_entry(&conn->users, struct l2cap_user, list);
1663                 list_del_init(&user->list);
1664                 user->remove(conn, user);
1665         }
1666 }
1667
1668 static void l2cap_conn_del(struct hci_conn *hcon, int err)
1669 {
1670         struct l2cap_conn *conn = hcon->l2cap_data;
1671         struct l2cap_chan *chan, *l;
1672
1673         if (!conn)
1674                 return;
1675
1676         BT_DBG("hcon %p conn %p, err %d", hcon, conn, err);
1677
1678         kfree_skb(conn->rx_skb);
1679
1680         skb_queue_purge(&conn->pending_rx);
1681
1682         /* We can not call flush_work(&conn->pending_rx_work) here since we
1683          * might block if we are running on a worker from the same workqueue
1684          * pending_rx_work is waiting on.
1685          */
1686         if (work_pending(&conn->pending_rx_work))
1687                 cancel_work_sync(&conn->pending_rx_work);
1688
1689         if (work_pending(&conn->id_addr_update_work))
1690                 cancel_work_sync(&conn->id_addr_update_work);
1691
1692         l2cap_unregister_all_users(conn);
1693
1694         /* Force the connection to be immediately dropped */
1695         hcon->disc_timeout = 0;
1696
1697         mutex_lock(&conn->chan_lock);
1698
1699         /* Kill channels */
1700         list_for_each_entry_safe(chan, l, &conn->chan_l, list) {
1701                 l2cap_chan_hold(chan);
1702                 l2cap_chan_lock(chan);
1703
1704                 l2cap_chan_del(chan, err);
1705
1706                 l2cap_chan_unlock(chan);
1707
1708                 chan->ops->close(chan);
1709                 l2cap_chan_put(chan);
1710         }
1711
1712         mutex_unlock(&conn->chan_lock);
1713
1714         hci_chan_del(conn->hchan);
1715
1716         if (conn->info_state & L2CAP_INFO_FEAT_MASK_REQ_SENT)
1717                 cancel_delayed_work_sync(&conn->info_timer);
1718
1719         hcon->l2cap_data = NULL;
1720         conn->hchan = NULL;
1721         l2cap_conn_put(conn);
1722 }
1723
1724 static void l2cap_conn_free(struct kref *ref)
1725 {
1726         struct l2cap_conn *conn = container_of(ref, struct l2cap_conn, ref);
1727
1728         hci_conn_put(conn->hcon);
1729         kfree(conn);
1730 }
1731
1732 struct l2cap_conn *l2cap_conn_get(struct l2cap_conn *conn)
1733 {
1734         kref_get(&conn->ref);
1735         return conn;
1736 }
1737 EXPORT_SYMBOL(l2cap_conn_get);
1738
1739 void l2cap_conn_put(struct l2cap_conn *conn)
1740 {
1741         kref_put(&conn->ref, l2cap_conn_free);
1742 }
1743 EXPORT_SYMBOL(l2cap_conn_put);
1744
1745 /* ---- Socket interface ---- */
1746
1747 /* Find socket with psm and source / destination bdaddr.
1748  * Returns closest match.
1749  */
1750 static struct l2cap_chan *l2cap_global_chan_by_psm(int state, __le16 psm,
1751                                                    bdaddr_t *src,
1752                                                    bdaddr_t *dst,
1753                                                    u8 link_type)
1754 {
1755         struct l2cap_chan *c, *c1 = NULL;
1756
1757         read_lock(&chan_list_lock);
1758
1759         list_for_each_entry(c, &chan_list, global_l) {
1760                 if (state && c->state != state)
1761                         continue;
1762
1763                 if (link_type == ACL_LINK && c->src_type != BDADDR_BREDR)
1764                         continue;
1765
1766                 if (link_type == LE_LINK && c->src_type == BDADDR_BREDR)
1767                         continue;
1768
1769                 if (c->psm == psm) {
1770                         int src_match, dst_match;
1771                         int src_any, dst_any;
1772
1773                         /* Exact match. */
1774                         src_match = !bacmp(&c->src, src);
1775                         dst_match = !bacmp(&c->dst, dst);
1776                         if (src_match && dst_match) {
1777                                 l2cap_chan_hold(c);
1778                                 read_unlock(&chan_list_lock);
1779                                 return c;
1780                         }
1781
1782                         /* Closest match */
1783                         src_any = !bacmp(&c->src, BDADDR_ANY);
1784                         dst_any = !bacmp(&c->dst, BDADDR_ANY);
1785                         if ((src_match && dst_any) || (src_any && dst_match) ||
1786                             (src_any && dst_any))
1787                                 c1 = c;
1788                 }
1789         }
1790
1791         if (c1)
1792                 l2cap_chan_hold(c1);
1793
1794         read_unlock(&chan_list_lock);
1795
1796         return c1;
1797 }
1798
1799 static void l2cap_monitor_timeout(struct work_struct *work)
1800 {
1801         struct l2cap_chan *chan = container_of(work, struct l2cap_chan,
1802                                                monitor_timer.work);
1803
1804         BT_DBG("chan %p", chan);
1805
1806         l2cap_chan_lock(chan);
1807
1808         if (!chan->conn) {
1809                 l2cap_chan_unlock(chan);
1810                 l2cap_chan_put(chan);
1811                 return;
1812         }
1813
1814         l2cap_tx(chan, NULL, NULL, L2CAP_EV_MONITOR_TO);
1815
1816         l2cap_chan_unlock(chan);
1817         l2cap_chan_put(chan);
1818 }
1819
1820 static void l2cap_retrans_timeout(struct work_struct *work)
1821 {
1822         struct l2cap_chan *chan = container_of(work, struct l2cap_chan,
1823                                                retrans_timer.work);
1824
1825         BT_DBG("chan %p", chan);
1826
1827         l2cap_chan_lock(chan);
1828
1829         if (!chan->conn) {
1830                 l2cap_chan_unlock(chan);
1831                 l2cap_chan_put(chan);
1832                 return;
1833         }
1834
1835         l2cap_tx(chan, NULL, NULL, L2CAP_EV_RETRANS_TO);
1836         l2cap_chan_unlock(chan);
1837         l2cap_chan_put(chan);
1838 }
1839
1840 static void l2cap_streaming_send(struct l2cap_chan *chan,
1841                                  struct sk_buff_head *skbs)
1842 {
1843         struct sk_buff *skb;
1844         struct l2cap_ctrl *control;
1845
1846         BT_DBG("chan %p, skbs %p", chan, skbs);
1847
1848         if (__chan_is_moving(chan))
1849                 return;
1850
1851         skb_queue_splice_tail_init(skbs, &chan->tx_q);
1852
1853         while (!skb_queue_empty(&chan->tx_q)) {
1854
1855                 skb = skb_dequeue(&chan->tx_q);
1856
1857                 bt_cb(skb)->l2cap.retries = 1;
1858                 control = &bt_cb(skb)->l2cap;
1859
1860                 control->reqseq = 0;
1861                 control->txseq = chan->next_tx_seq;
1862
1863                 __pack_control(chan, control, skb);
1864
1865                 if (chan->fcs == L2CAP_FCS_CRC16) {
1866                         u16 fcs = crc16(0, (u8 *) skb->data, skb->len);
1867                         put_unaligned_le16(fcs, skb_put(skb, L2CAP_FCS_SIZE));
1868                 }
1869
1870                 l2cap_do_send(chan, skb);
1871
1872                 BT_DBG("Sent txseq %u", control->txseq);
1873
1874                 chan->next_tx_seq = __next_seq(chan, chan->next_tx_seq);
1875                 chan->frames_sent++;
1876         }
1877 }
1878
1879 static int l2cap_ertm_send(struct l2cap_chan *chan)
1880 {
1881         struct sk_buff *skb, *tx_skb;
1882         struct l2cap_ctrl *control;
1883         int sent = 0;
1884
1885         BT_DBG("chan %p", chan);
1886
1887         if (chan->state != BT_CONNECTED)
1888                 return -ENOTCONN;
1889
1890         if (test_bit(CONN_REMOTE_BUSY, &chan->conn_state))
1891                 return 0;
1892
1893         if (__chan_is_moving(chan))
1894                 return 0;
1895
1896         while (chan->tx_send_head &&
1897                chan->unacked_frames < chan->remote_tx_win &&
1898                chan->tx_state == L2CAP_TX_STATE_XMIT) {
1899
1900                 skb = chan->tx_send_head;
1901
1902                 bt_cb(skb)->l2cap.retries = 1;
1903                 control = &bt_cb(skb)->l2cap;
1904
1905                 if (test_and_clear_bit(CONN_SEND_FBIT, &chan->conn_state))
1906                         control->final = 1;
1907
1908                 control->reqseq = chan->buffer_seq;
1909                 chan->last_acked_seq = chan->buffer_seq;
1910                 control->txseq = chan->next_tx_seq;
1911
1912                 __pack_control(chan, control, skb);
1913
1914                 if (chan->fcs == L2CAP_FCS_CRC16) {
1915                         u16 fcs = crc16(0, (u8 *) skb->data, skb->len);
1916                         put_unaligned_le16(fcs, skb_put(skb, L2CAP_FCS_SIZE));
1917                 }
1918
1919                 /* Clone after data has been modified. Data is assumed to be
1920                    read-only (for locking purposes) on cloned sk_buffs.
1921                  */
1922                 tx_skb = skb_clone(skb, GFP_KERNEL);
1923
1924                 if (!tx_skb)
1925                         break;
1926
1927                 __set_retrans_timer(chan);
1928
1929                 chan->next_tx_seq = __next_seq(chan, chan->next_tx_seq);
1930                 chan->unacked_frames++;
1931                 chan->frames_sent++;
1932                 sent++;
1933
1934                 if (skb_queue_is_last(&chan->tx_q, skb))
1935                         chan->tx_send_head = NULL;
1936                 else
1937                         chan->tx_send_head = skb_queue_next(&chan->tx_q, skb);
1938
1939                 l2cap_do_send(chan, tx_skb);
1940                 BT_DBG("Sent txseq %u", control->txseq);
1941         }
1942
1943         BT_DBG("Sent %d, %u unacked, %u in ERTM queue", sent,
1944                chan->unacked_frames, skb_queue_len(&chan->tx_q));
1945
1946         return sent;
1947 }
1948
1949 static void l2cap_ertm_resend(struct l2cap_chan *chan)
1950 {
1951         struct l2cap_ctrl control;
1952         struct sk_buff *skb;
1953         struct sk_buff *tx_skb;
1954         u16 seq;
1955
1956         BT_DBG("chan %p", chan);
1957
1958         if (test_bit(CONN_REMOTE_BUSY, &chan->conn_state))
1959                 return;
1960
1961         if (__chan_is_moving(chan))
1962                 return;
1963
1964         while (chan->retrans_list.head != L2CAP_SEQ_LIST_CLEAR) {
1965                 seq = l2cap_seq_list_pop(&chan->retrans_list);
1966
1967                 skb = l2cap_ertm_seq_in_queue(&chan->tx_q, seq);
1968                 if (!skb) {
1969                         BT_DBG("Error: Can't retransmit seq %d, frame missing",
1970                                seq);
1971                         continue;
1972                 }
1973
1974                 bt_cb(skb)->l2cap.retries++;
1975                 control = bt_cb(skb)->l2cap;
1976
1977                 if (chan->max_tx != 0 &&
1978                     bt_cb(skb)->l2cap.retries > chan->max_tx) {
1979                         BT_DBG("Retry limit exceeded (%d)", chan->max_tx);
1980                         l2cap_send_disconn_req(chan, ECONNRESET);
1981                         l2cap_seq_list_clear(&chan->retrans_list);
1982                         break;
1983                 }
1984
1985                 control.reqseq = chan->buffer_seq;
1986                 if (test_and_clear_bit(CONN_SEND_FBIT, &chan->conn_state))
1987                         control.final = 1;
1988                 else
1989                         control.final = 0;
1990
1991                 if (skb_cloned(skb)) {
1992                         /* Cloned sk_buffs are read-only, so we need a
1993                          * writeable copy
1994                          */
1995                         tx_skb = skb_copy(skb, GFP_KERNEL);
1996                 } else {
1997                         tx_skb = skb_clone(skb, GFP_KERNEL);
1998                 }
1999
2000                 if (!tx_skb) {
2001                         l2cap_seq_list_clear(&chan->retrans_list);
2002                         break;
2003                 }
2004
2005                 /* Update skb contents */
2006                 if (test_bit(FLAG_EXT_CTRL, &chan->flags)) {
2007                         put_unaligned_le32(__pack_extended_control(&control),
2008                                            tx_skb->data + L2CAP_HDR_SIZE);
2009                 } else {
2010                         put_unaligned_le16(__pack_enhanced_control(&control),
2011                                            tx_skb->data + L2CAP_HDR_SIZE);
2012                 }
2013
2014                 /* Update FCS */
2015                 if (chan->fcs == L2CAP_FCS_CRC16) {
2016                         u16 fcs = crc16(0, (u8 *) tx_skb->data,
2017                                         tx_skb->len - L2CAP_FCS_SIZE);
2018                         put_unaligned_le16(fcs, skb_tail_pointer(tx_skb) -
2019                                                 L2CAP_FCS_SIZE);
2020                 }
2021
2022                 l2cap_do_send(chan, tx_skb);
2023
2024                 BT_DBG("Resent txseq %d", control.txseq);
2025
2026                 chan->last_acked_seq = chan->buffer_seq;
2027         }
2028 }
2029
2030 static void l2cap_retransmit(struct l2cap_chan *chan,
2031                              struct l2cap_ctrl *control)
2032 {
2033         BT_DBG("chan %p, control %p", chan, control);
2034
2035         l2cap_seq_list_append(&chan->retrans_list, control->reqseq);
2036         l2cap_ertm_resend(chan);
2037 }
2038
2039 static void l2cap_retransmit_all(struct l2cap_chan *chan,
2040                                  struct l2cap_ctrl *control)
2041 {
2042         struct sk_buff *skb;
2043
2044         BT_DBG("chan %p, control %p", chan, control);
2045
2046         if (control->poll)
2047                 set_bit(CONN_SEND_FBIT, &chan->conn_state);
2048
2049         l2cap_seq_list_clear(&chan->retrans_list);
2050
2051         if (test_bit(CONN_REMOTE_BUSY, &chan->conn_state))
2052                 return;
2053
2054         if (chan->unacked_frames) {
2055                 skb_queue_walk(&chan->tx_q, skb) {
2056                         if (bt_cb(skb)->l2cap.txseq == control->reqseq ||
2057                             skb == chan->tx_send_head)
2058                                 break;
2059                 }
2060
2061                 skb_queue_walk_from(&chan->tx_q, skb) {
2062                         if (skb == chan->tx_send_head)
2063                                 break;
2064
2065                         l2cap_seq_list_append(&chan->retrans_list,
2066                                               bt_cb(skb)->l2cap.txseq);
2067                 }
2068
2069                 l2cap_ertm_resend(chan);
2070         }
2071 }
2072
2073 static void l2cap_send_ack(struct l2cap_chan *chan)
2074 {
2075         struct l2cap_ctrl control;
2076         u16 frames_to_ack = __seq_offset(chan, chan->buffer_seq,
2077                                          chan->last_acked_seq);
2078         int threshold;
2079
2080         BT_DBG("chan %p last_acked_seq %d buffer_seq %d",
2081                chan, chan->last_acked_seq, chan->buffer_seq);
2082
2083         memset(&control, 0, sizeof(control));
2084         control.sframe = 1;
2085
2086         if (test_bit(CONN_LOCAL_BUSY, &chan->conn_state) &&
2087             chan->rx_state == L2CAP_RX_STATE_RECV) {
2088                 __clear_ack_timer(chan);
2089                 control.super = L2CAP_SUPER_RNR;
2090                 control.reqseq = chan->buffer_seq;
2091                 l2cap_send_sframe(chan, &control);
2092         } else {
2093                 if (!test_bit(CONN_REMOTE_BUSY, &chan->conn_state)) {
2094                         l2cap_ertm_send(chan);
2095                         /* If any i-frames were sent, they included an ack */
2096                         if (chan->buffer_seq == chan->last_acked_seq)
2097                                 frames_to_ack = 0;
2098                 }
2099
2100                 /* Ack now if the window is 3/4ths full.
2101                  * Calculate without mul or div
2102                  */
2103                 threshold = chan->ack_win;
2104                 threshold += threshold << 1;
2105                 threshold >>= 2;
2106
2107                 BT_DBG("frames_to_ack %u, threshold %d", frames_to_ack,
2108                        threshold);
2109
2110                 if (frames_to_ack >= threshold) {
2111                         __clear_ack_timer(chan);
2112                         control.super = L2CAP_SUPER_RR;
2113                         control.reqseq = chan->buffer_seq;
2114                         l2cap_send_sframe(chan, &control);
2115                         frames_to_ack = 0;
2116                 }
2117
2118                 if (frames_to_ack)
2119                         __set_ack_timer(chan);
2120         }
2121 }
2122
2123 static inline int l2cap_skbuff_fromiovec(struct l2cap_chan *chan,
2124                                          struct msghdr *msg, int len,
2125                                          int count, struct sk_buff *skb)
2126 {
2127         struct l2cap_conn *conn = chan->conn;
2128         struct sk_buff **frag;
2129         int sent = 0;
2130
2131         if (!copy_from_iter_full(skb_put(skb, count), count, &msg->msg_iter))
2132                 return -EFAULT;
2133
2134         sent += count;
2135         len  -= count;
2136
2137         /* Continuation fragments (no L2CAP header) */
2138         frag = &skb_shinfo(skb)->frag_list;
2139         while (len) {
2140                 struct sk_buff *tmp;
2141
2142                 count = min_t(unsigned int, conn->mtu, len);
2143
2144                 tmp = chan->ops->alloc_skb(chan, 0, count,
2145                                            msg->msg_flags & MSG_DONTWAIT);
2146                 if (IS_ERR(tmp))
2147                         return PTR_ERR(tmp);
2148
2149                 *frag = tmp;
2150
2151                 if (!copy_from_iter_full(skb_put(*frag, count), count,
2152                                    &msg->msg_iter))
2153                         return -EFAULT;
2154
2155                 sent += count;
2156                 len  -= count;
2157
2158                 skb->len += (*frag)->len;
2159                 skb->data_len += (*frag)->len;
2160
2161                 frag = &(*frag)->next;
2162         }
2163
2164         return sent;
2165 }
2166
2167 static struct sk_buff *l2cap_create_connless_pdu(struct l2cap_chan *chan,
2168                                                  struct msghdr *msg, size_t len)
2169 {
2170         struct l2cap_conn *conn = chan->conn;
2171         struct sk_buff *skb;
2172         int err, count, hlen = L2CAP_HDR_SIZE + L2CAP_PSMLEN_SIZE;
2173         struct l2cap_hdr *lh;
2174
2175         BT_DBG("chan %p psm 0x%2.2x len %zu", chan,
2176                __le16_to_cpu(chan->psm), len);
2177
2178         count = min_t(unsigned int, (conn->mtu - hlen), len);
2179
2180         skb = chan->ops->alloc_skb(chan, hlen, count,
2181                                    msg->msg_flags & MSG_DONTWAIT);
2182         if (IS_ERR(skb))
2183                 return skb;
2184
2185         /* Create L2CAP header */
2186         lh = skb_put(skb, L2CAP_HDR_SIZE);
2187         lh->cid = cpu_to_le16(chan->dcid);
2188         lh->len = cpu_to_le16(len + L2CAP_PSMLEN_SIZE);
2189         put_unaligned(chan->psm, (__le16 *) skb_put(skb, L2CAP_PSMLEN_SIZE));
2190
2191         err = l2cap_skbuff_fromiovec(chan, msg, len, count, skb);
2192         if (unlikely(err < 0)) {
2193                 kfree_skb(skb);
2194                 return ERR_PTR(err);
2195         }
2196         return skb;
2197 }
2198
2199 static struct sk_buff *l2cap_create_basic_pdu(struct l2cap_chan *chan,
2200                                               struct msghdr *msg, size_t len)
2201 {
2202         struct l2cap_conn *conn = chan->conn;
2203         struct sk_buff *skb;
2204         int err, count;
2205         struct l2cap_hdr *lh;
2206
2207         BT_DBG("chan %p len %zu", chan, len);
2208
2209         count = min_t(unsigned int, (conn->mtu - L2CAP_HDR_SIZE), len);
2210
2211         skb = chan->ops->alloc_skb(chan, L2CAP_HDR_SIZE, count,
2212                                    msg->msg_flags & MSG_DONTWAIT);
2213         if (IS_ERR(skb))
2214                 return skb;
2215
2216         /* Create L2CAP header */
2217         lh = skb_put(skb, L2CAP_HDR_SIZE);
2218         lh->cid = cpu_to_le16(chan->dcid);
2219         lh->len = cpu_to_le16(len);
2220
2221         err = l2cap_skbuff_fromiovec(chan, msg, len, count, skb);
2222         if (unlikely(err < 0)) {
2223                 kfree_skb(skb);
2224                 return ERR_PTR(err);
2225         }
2226         return skb;
2227 }
2228
2229 static struct sk_buff *l2cap_create_iframe_pdu(struct l2cap_chan *chan,
2230                                                struct msghdr *msg, size_t len,
2231                                                u16 sdulen)
2232 {
2233         struct l2cap_conn *conn = chan->conn;
2234         struct sk_buff *skb;
2235         int err, count, hlen;
2236         struct l2cap_hdr *lh;
2237
2238         BT_DBG("chan %p len %zu", chan, len);
2239
2240         if (!conn)
2241                 return ERR_PTR(-ENOTCONN);
2242
2243         hlen = __ertm_hdr_size(chan);
2244
2245         if (sdulen)
2246                 hlen += L2CAP_SDULEN_SIZE;
2247
2248         if (chan->fcs == L2CAP_FCS_CRC16)
2249                 hlen += L2CAP_FCS_SIZE;
2250
2251         count = min_t(unsigned int, (conn->mtu - hlen), len);
2252
2253         skb = chan->ops->alloc_skb(chan, hlen, count,
2254                                    msg->msg_flags & MSG_DONTWAIT);
2255         if (IS_ERR(skb))
2256                 return skb;
2257
2258         /* Create L2CAP header */
2259         lh = skb_put(skb, L2CAP_HDR_SIZE);
2260         lh->cid = cpu_to_le16(chan->dcid);
2261         lh->len = cpu_to_le16(len + (hlen - L2CAP_HDR_SIZE));
2262
2263         /* Control header is populated later */
2264         if (test_bit(FLAG_EXT_CTRL, &chan->flags))
2265                 put_unaligned_le32(0, skb_put(skb, L2CAP_EXT_CTRL_SIZE));
2266         else
2267                 put_unaligned_le16(0, skb_put(skb, L2CAP_ENH_CTRL_SIZE));
2268
2269         if (sdulen)
2270                 put_unaligned_le16(sdulen, skb_put(skb, L2CAP_SDULEN_SIZE));
2271
2272         err = l2cap_skbuff_fromiovec(chan, msg, len, count, skb);
2273         if (unlikely(err < 0)) {
2274                 kfree_skb(skb);
2275                 return ERR_PTR(err);
2276         }
2277
2278         bt_cb(skb)->l2cap.fcs = chan->fcs;
2279         bt_cb(skb)->l2cap.retries = 0;
2280         return skb;
2281 }
2282
2283 static int l2cap_segment_sdu(struct l2cap_chan *chan,
2284                              struct sk_buff_head *seg_queue,
2285                              struct msghdr *msg, size_t len)
2286 {
2287         struct sk_buff *skb;
2288         u16 sdu_len;
2289         size_t pdu_len;
2290         u8 sar;
2291
2292         BT_DBG("chan %p, msg %p, len %zu", chan, msg, len);
2293
2294         /* It is critical that ERTM PDUs fit in a single HCI fragment,
2295          * so fragmented skbs are not used.  The HCI layer's handling
2296          * of fragmented skbs is not compatible with ERTM's queueing.
2297          */
2298
2299         /* PDU size is derived from the HCI MTU */
2300         pdu_len = chan->conn->mtu;
2301
2302         /* Constrain PDU size for BR/EDR connections */
2303         if (!chan->hs_hcon)
2304                 pdu_len = min_t(size_t, pdu_len, L2CAP_BREDR_MAX_PAYLOAD);
2305
2306         /* Adjust for largest possible L2CAP overhead. */
2307         if (chan->fcs)
2308                 pdu_len -= L2CAP_FCS_SIZE;
2309
2310         pdu_len -= __ertm_hdr_size(chan);
2311
2312         /* Remote device may have requested smaller PDUs */
2313         pdu_len = min_t(size_t, pdu_len, chan->remote_mps);
2314
2315         if (len <= pdu_len) {
2316                 sar = L2CAP_SAR_UNSEGMENTED;
2317                 sdu_len = 0;
2318                 pdu_len = len;
2319         } else {
2320                 sar = L2CAP_SAR_START;
2321                 sdu_len = len;
2322         }
2323
2324         while (len > 0) {
2325                 skb = l2cap_create_iframe_pdu(chan, msg, pdu_len, sdu_len);
2326
2327                 if (IS_ERR(skb)) {
2328                         __skb_queue_purge(seg_queue);
2329                         return PTR_ERR(skb);
2330                 }
2331
2332                 bt_cb(skb)->l2cap.sar = sar;
2333                 __skb_queue_tail(seg_queue, skb);
2334
2335                 len -= pdu_len;
2336                 if (sdu_len)
2337                         sdu_len = 0;
2338
2339                 if (len <= pdu_len) {
2340                         sar = L2CAP_SAR_END;
2341                         pdu_len = len;
2342                 } else {
2343                         sar = L2CAP_SAR_CONTINUE;
2344                 }
2345         }
2346
2347         return 0;
2348 }
2349
2350 static struct sk_buff *l2cap_create_le_flowctl_pdu(struct l2cap_chan *chan,
2351                                                    struct msghdr *msg,
2352                                                    size_t len, u16 sdulen)
2353 {
2354         struct l2cap_conn *conn = chan->conn;
2355         struct sk_buff *skb;
2356         int err, count, hlen;
2357         struct l2cap_hdr *lh;
2358
2359         BT_DBG("chan %p len %zu", chan, len);
2360
2361         if (!conn)
2362                 return ERR_PTR(-ENOTCONN);
2363
2364         hlen = L2CAP_HDR_SIZE;
2365
2366         if (sdulen)
2367                 hlen += L2CAP_SDULEN_SIZE;
2368
2369         count = min_t(unsigned int, (conn->mtu - hlen), len);
2370
2371         skb = chan->ops->alloc_skb(chan, hlen, count,
2372                                    msg->msg_flags & MSG_DONTWAIT);
2373         if (IS_ERR(skb))
2374                 return skb;
2375
2376         /* Create L2CAP header */
2377         lh = skb_put(skb, L2CAP_HDR_SIZE);
2378         lh->cid = cpu_to_le16(chan->dcid);
2379         lh->len = cpu_to_le16(len + (hlen - L2CAP_HDR_SIZE));
2380
2381         if (sdulen)
2382                 put_unaligned_le16(sdulen, skb_put(skb, L2CAP_SDULEN_SIZE));
2383
2384         err = l2cap_skbuff_fromiovec(chan, msg, len, count, skb);
2385         if (unlikely(err < 0)) {
2386                 kfree_skb(skb);
2387                 return ERR_PTR(err);
2388         }
2389
2390         return skb;
2391 }
2392
2393 static int l2cap_segment_le_sdu(struct l2cap_chan *chan,
2394                                 struct sk_buff_head *seg_queue,
2395                                 struct msghdr *msg, size_t len)
2396 {
2397         struct sk_buff *skb;
2398         size_t pdu_len;
2399         u16 sdu_len;
2400
2401         BT_DBG("chan %p, msg %p, len %zu", chan, msg, len);
2402
2403         sdu_len = len;
2404         pdu_len = chan->remote_mps - L2CAP_SDULEN_SIZE;
2405
2406         while (len > 0) {
2407                 if (len <= pdu_len)
2408                         pdu_len = len;
2409
2410                 skb = l2cap_create_le_flowctl_pdu(chan, msg, pdu_len, sdu_len);
2411                 if (IS_ERR(skb)) {
2412                         __skb_queue_purge(seg_queue);
2413                         return PTR_ERR(skb);
2414                 }
2415
2416                 __skb_queue_tail(seg_queue, skb);
2417
2418                 len -= pdu_len;
2419
2420                 if (sdu_len) {
2421                         sdu_len = 0;
2422                         pdu_len += L2CAP_SDULEN_SIZE;
2423                 }
2424         }
2425
2426         return 0;
2427 }
2428
2429 static void l2cap_le_flowctl_send(struct l2cap_chan *chan)
2430 {
2431         int sent = 0;
2432
2433         BT_DBG("chan %p", chan);
2434
2435         while (chan->tx_credits && !skb_queue_empty(&chan->tx_q)) {
2436                 l2cap_do_send(chan, skb_dequeue(&chan->tx_q));
2437                 chan->tx_credits--;
2438                 sent++;
2439         }
2440
2441         BT_DBG("Sent %d credits %u queued %u", sent, chan->tx_credits,
2442                skb_queue_len(&chan->tx_q));
2443 }
2444
2445 int l2cap_chan_send(struct l2cap_chan *chan, struct msghdr *msg, size_t len)
2446 {
2447         struct sk_buff *skb;
2448         int err;
2449         struct sk_buff_head seg_queue;
2450
2451         if (!chan->conn)
2452                 return -ENOTCONN;
2453
2454         /* Connectionless channel */
2455         if (chan->chan_type == L2CAP_CHAN_CONN_LESS) {
2456                 skb = l2cap_create_connless_pdu(chan, msg, len);
2457                 if (IS_ERR(skb))
2458                         return PTR_ERR(skb);
2459
2460                 /* Channel lock is released before requesting new skb and then
2461                  * reacquired thus we need to recheck channel state.
2462                  */
2463                 if (chan->state != BT_CONNECTED) {
2464                         kfree_skb(skb);
2465                         return -ENOTCONN;
2466                 }
2467
2468                 l2cap_do_send(chan, skb);
2469                 return len;
2470         }
2471
2472         switch (chan->mode) {
2473         case L2CAP_MODE_LE_FLOWCTL:
2474                 /* Check outgoing MTU */
2475                 if (len > chan->omtu)
2476                         return -EMSGSIZE;
2477
2478                 __skb_queue_head_init(&seg_queue);
2479
2480                 err = l2cap_segment_le_sdu(chan, &seg_queue, msg, len);
2481
2482                 if (chan->state != BT_CONNECTED) {
2483                         __skb_queue_purge(&seg_queue);
2484                         err = -ENOTCONN;
2485                 }
2486
2487                 if (err)
2488                         return err;
2489
2490                 skb_queue_splice_tail_init(&seg_queue, &chan->tx_q);
2491
2492                 l2cap_le_flowctl_send(chan);
2493
2494                 if (!chan->tx_credits)
2495                         chan->ops->suspend(chan);
2496
2497                 err = len;
2498
2499                 break;
2500
2501         case L2CAP_MODE_BASIC:
2502                 /* Check outgoing MTU */
2503                 if (len > chan->omtu)
2504                         return -EMSGSIZE;
2505
2506                 /* Create a basic PDU */
2507                 skb = l2cap_create_basic_pdu(chan, msg, len);
2508                 if (IS_ERR(skb))
2509                         return PTR_ERR(skb);
2510
2511                 /* Channel lock is released before requesting new skb and then
2512                  * reacquired thus we need to recheck channel state.
2513                  */
2514                 if (chan->state != BT_CONNECTED) {
2515                         kfree_skb(skb);
2516                         return -ENOTCONN;
2517                 }
2518
2519                 l2cap_do_send(chan, skb);
2520                 err = len;
2521                 break;
2522
2523         case L2CAP_MODE_ERTM:
2524         case L2CAP_MODE_STREAMING:
2525                 /* Check outgoing MTU */
2526                 if (len > chan->omtu) {
2527                         err = -EMSGSIZE;
2528                         break;
2529                 }
2530
2531                 __skb_queue_head_init(&seg_queue);
2532
2533                 /* Do segmentation before calling in to the state machine,
2534                  * since it's possible to block while waiting for memory
2535                  * allocation.
2536                  */
2537                 err = l2cap_segment_sdu(chan, &seg_queue, msg, len);
2538
2539                 /* The channel could have been closed while segmenting,
2540                  * check that it is still connected.
2541                  */
2542                 if (chan->state != BT_CONNECTED) {
2543                         __skb_queue_purge(&seg_queue);
2544                         err = -ENOTCONN;
2545                 }
2546
2547                 if (err)
2548                         break;
2549
2550                 if (chan->mode == L2CAP_MODE_ERTM)
2551                         l2cap_tx(chan, NULL, &seg_queue, L2CAP_EV_DATA_REQUEST);
2552                 else
2553                         l2cap_streaming_send(chan, &seg_queue);
2554
2555                 err = len;
2556
2557                 /* If the skbs were not queued for sending, they'll still be in
2558                  * seg_queue and need to be purged.
2559                  */
2560                 __skb_queue_purge(&seg_queue);
2561                 break;
2562
2563         default:
2564                 BT_DBG("bad state %1.1x", chan->mode);
2565                 err = -EBADFD;
2566         }
2567
2568         return err;
2569 }
2570 EXPORT_SYMBOL_GPL(l2cap_chan_send);
2571
2572 static void l2cap_send_srej(struct l2cap_chan *chan, u16 txseq)
2573 {
2574         struct l2cap_ctrl control;
2575         u16 seq;
2576
2577         BT_DBG("chan %p, txseq %u", chan, txseq);
2578
2579         memset(&control, 0, sizeof(control));
2580         control.sframe = 1;
2581         control.super = L2CAP_SUPER_SREJ;
2582
2583         for (seq = chan->expected_tx_seq; seq != txseq;
2584              seq = __next_seq(chan, seq)) {
2585                 if (!l2cap_ertm_seq_in_queue(&chan->srej_q, seq)) {
2586                         control.reqseq = seq;
2587                         l2cap_send_sframe(chan, &control);
2588                         l2cap_seq_list_append(&chan->srej_list, seq);
2589                 }
2590         }
2591
2592         chan->expected_tx_seq = __next_seq(chan, txseq);
2593 }
2594
2595 static void l2cap_send_srej_tail(struct l2cap_chan *chan)
2596 {
2597         struct l2cap_ctrl control;
2598
2599         BT_DBG("chan %p", chan);
2600
2601         if (chan->srej_list.tail == L2CAP_SEQ_LIST_CLEAR)
2602                 return;
2603
2604         memset(&control, 0, sizeof(control));
2605         control.sframe = 1;
2606         control.super = L2CAP_SUPER_SREJ;
2607         control.reqseq = chan->srej_list.tail;
2608         l2cap_send_sframe(chan, &control);
2609 }
2610
2611 static void l2cap_send_srej_list(struct l2cap_chan *chan, u16 txseq)
2612 {
2613         struct l2cap_ctrl control;
2614         u16 initial_head;
2615         u16 seq;
2616
2617         BT_DBG("chan %p, txseq %u", chan, txseq);
2618
2619         memset(&control, 0, sizeof(control));
2620         control.sframe = 1;
2621         control.super = L2CAP_SUPER_SREJ;
2622
2623         /* Capture initial list head to allow only one pass through the list. */
2624         initial_head = chan->srej_list.head;
2625
2626         do {
2627                 seq = l2cap_seq_list_pop(&chan->srej_list);
2628                 if (seq == txseq || seq == L2CAP_SEQ_LIST_CLEAR)
2629                         break;
2630
2631                 control.reqseq = seq;
2632                 l2cap_send_sframe(chan, &control);
2633                 l2cap_seq_list_append(&chan->srej_list, seq);
2634         } while (chan->srej_list.head != initial_head);
2635 }
2636
2637 static void l2cap_process_reqseq(struct l2cap_chan *chan, u16 reqseq)
2638 {
2639         struct sk_buff *acked_skb;
2640         u16 ackseq;
2641
2642         BT_DBG("chan %p, reqseq %u", chan, reqseq);
2643
2644         if (chan->unacked_frames == 0 || reqseq == chan->expected_ack_seq)
2645                 return;
2646
2647         BT_DBG("expected_ack_seq %u, unacked_frames %u",
2648                chan->expected_ack_seq, chan->unacked_frames);
2649
2650         for (ackseq = chan->expected_ack_seq; ackseq != reqseq;
2651              ackseq = __next_seq(chan, ackseq)) {
2652
2653                 acked_skb = l2cap_ertm_seq_in_queue(&chan->tx_q, ackseq);
2654                 if (acked_skb) {
2655                         skb_unlink(acked_skb, &chan->tx_q);
2656                         kfree_skb(acked_skb);
2657                         chan->unacked_frames--;
2658                 }
2659         }
2660
2661         chan->expected_ack_seq = reqseq;
2662
2663         if (chan->unacked_frames == 0)
2664                 __clear_retrans_timer(chan);
2665
2666         BT_DBG("unacked_frames %u", chan->unacked_frames);
2667 }
2668
2669 static void l2cap_abort_rx_srej_sent(struct l2cap_chan *chan)
2670 {
2671         BT_DBG("chan %p", chan);
2672
2673         chan->expected_tx_seq = chan->buffer_seq;
2674         l2cap_seq_list_clear(&chan->srej_list);
2675         skb_queue_purge(&chan->srej_q);
2676         chan->rx_state = L2CAP_RX_STATE_RECV;
2677 }
2678
2679 static void l2cap_tx_state_xmit(struct l2cap_chan *chan,
2680                                 struct l2cap_ctrl *control,
2681                                 struct sk_buff_head *skbs, u8 event)
2682 {
2683         BT_DBG("chan %p, control %p, skbs %p, event %d", chan, control, skbs,
2684                event);
2685
2686         switch (event) {
2687         case L2CAP_EV_DATA_REQUEST:
2688                 if (chan->tx_send_head == NULL)
2689                         chan->tx_send_head = skb_peek(skbs);
2690
2691                 skb_queue_splice_tail_init(skbs, &chan->tx_q);
2692                 l2cap_ertm_send(chan);
2693                 break;
2694         case L2CAP_EV_LOCAL_BUSY_DETECTED:
2695                 BT_DBG("Enter LOCAL_BUSY");
2696                 set_bit(CONN_LOCAL_BUSY, &chan->conn_state);
2697
2698                 if (chan->rx_state == L2CAP_RX_STATE_SREJ_SENT) {
2699                         /* The SREJ_SENT state must be aborted if we are to
2700                          * enter the LOCAL_BUSY state.
2701                          */
2702                         l2cap_abort_rx_srej_sent(chan);
2703                 }
2704
2705                 l2cap_send_ack(chan);
2706
2707                 break;
2708         case L2CAP_EV_LOCAL_BUSY_CLEAR:
2709                 BT_DBG("Exit LOCAL_BUSY");
2710                 clear_bit(CONN_LOCAL_BUSY, &chan->conn_state);
2711
2712                 if (test_bit(CONN_RNR_SENT, &chan->conn_state)) {
2713                         struct l2cap_ctrl local_control;
2714
2715                         memset(&local_control, 0, sizeof(local_control));
2716                         local_control.sframe = 1;
2717                         local_control.super = L2CAP_SUPER_RR;
2718                         local_control.poll = 1;
2719                         local_control.reqseq = chan->buffer_seq;
2720                         l2cap_send_sframe(chan, &local_control);
2721
2722                         chan->retry_count = 1;
2723                         __set_monitor_timer(chan);
2724                         chan->tx_state = L2CAP_TX_STATE_WAIT_F;
2725                 }
2726                 break;
2727         case L2CAP_EV_RECV_REQSEQ_AND_FBIT:
2728                 l2cap_process_reqseq(chan, control->reqseq);
2729                 break;
2730         case L2CAP_EV_EXPLICIT_POLL:
2731                 l2cap_send_rr_or_rnr(chan, 1);
2732                 chan->retry_count = 1;
2733                 __set_monitor_timer(chan);
2734                 __clear_ack_timer(chan);
2735                 chan->tx_state = L2CAP_TX_STATE_WAIT_F;
2736                 break;
2737         case L2CAP_EV_RETRANS_TO:
2738                 l2cap_send_rr_or_rnr(chan, 1);
2739                 chan->retry_count = 1;
2740                 __set_monitor_timer(chan);
2741                 chan->tx_state = L2CAP_TX_STATE_WAIT_F;
2742                 break;
2743         case L2CAP_EV_RECV_FBIT:
2744                 /* Nothing to process */
2745                 break;
2746         default:
2747                 break;
2748         }
2749 }
2750
2751 static void l2cap_tx_state_wait_f(struct l2cap_chan *chan,
2752                                   struct l2cap_ctrl *control,
2753                                   struct sk_buff_head *skbs, u8 event)
2754 {
2755         BT_DBG("chan %p, control %p, skbs %p, event %d", chan, control, skbs,
2756                event);
2757
2758         switch (event) {
2759         case L2CAP_EV_DATA_REQUEST:
2760                 if (chan->tx_send_head == NULL)
2761                         chan->tx_send_head = skb_peek(skbs);
2762                 /* Queue data, but don't send. */
2763                 skb_queue_splice_tail_init(skbs, &chan->tx_q);
2764                 break;
2765         case L2CAP_EV_LOCAL_BUSY_DETECTED:
2766                 BT_DBG("Enter LOCAL_BUSY");
2767                 set_bit(CONN_LOCAL_BUSY, &chan->conn_state);
2768
2769                 if (chan->rx_state == L2CAP_RX_STATE_SREJ_SENT) {
2770                         /* The SREJ_SENT state must be aborted if we are to
2771                          * enter the LOCAL_BUSY state.
2772                          */
2773                         l2cap_abort_rx_srej_sent(chan);
2774                 }
2775
2776                 l2cap_send_ack(chan);
2777
2778                 break;
2779         case L2CAP_EV_LOCAL_BUSY_CLEAR:
2780                 BT_DBG("Exit LOCAL_BUSY");
2781                 clear_bit(CONN_LOCAL_BUSY, &chan->conn_state);
2782
2783                 if (test_bit(CONN_RNR_SENT, &chan->conn_state)) {
2784                         struct l2cap_ctrl local_control;
2785                         memset(&local_control, 0, sizeof(local_control));
2786                         local_control.sframe = 1;
2787                         local_control.super = L2CAP_SUPER_RR;
2788                         local_control.poll = 1;
2789                         local_control.reqseq = chan->buffer_seq;
2790                         l2cap_send_sframe(chan, &local_control);
2791
2792                         chan->retry_count = 1;
2793                         __set_monitor_timer(chan);
2794                         chan->tx_state = L2CAP_TX_STATE_WAIT_F;
2795                 }
2796                 break;
2797         case L2CAP_EV_RECV_REQSEQ_AND_FBIT:
2798                 l2cap_process_reqseq(chan, control->reqseq);
2799
2800                 /* Fall through */
2801
2802         case L2CAP_EV_RECV_FBIT:
2803                 if (control && control->final) {
2804                         __clear_monitor_timer(chan);
2805                         if (chan->unacked_frames > 0)
2806                                 __set_retrans_timer(chan);
2807                         chan->retry_count = 0;
2808                         chan->tx_state = L2CAP_TX_STATE_XMIT;
2809                         BT_DBG("recv fbit tx_state 0x2.2%x", chan->tx_state);
2810                 }
2811                 break;
2812         case L2CAP_EV_EXPLICIT_POLL:
2813                 /* Ignore */
2814                 break;
2815         case L2CAP_EV_MONITOR_TO:
2816                 if (chan->max_tx == 0 || chan->retry_count < chan->max_tx) {
2817                         l2cap_send_rr_or_rnr(chan, 1);
2818                         __set_monitor_timer(chan);
2819                         chan->retry_count++;
2820                 } else {
2821                         l2cap_send_disconn_req(chan, ECONNABORTED);
2822                 }
2823                 break;
2824         default:
2825                 break;
2826         }
2827 }
2828
2829 static void l2cap_tx(struct l2cap_chan *chan, struct l2cap_ctrl *control,
2830                      struct sk_buff_head *skbs, u8 event)
2831 {
2832         BT_DBG("chan %p, control %p, skbs %p, event %d, state %d",
2833                chan, control, skbs, event, chan->tx_state);
2834
2835         switch (chan->tx_state) {
2836         case L2CAP_TX_STATE_XMIT:
2837                 l2cap_tx_state_xmit(chan, control, skbs, event);
2838                 break;
2839         case L2CAP_TX_STATE_WAIT_F:
2840                 l2cap_tx_state_wait_f(chan, control, skbs, event);
2841                 break;
2842         default:
2843                 /* Ignore event */
2844                 break;
2845         }
2846 }
2847
2848 static void l2cap_pass_to_tx(struct l2cap_chan *chan,
2849                              struct l2cap_ctrl *control)
2850 {
2851         BT_DBG("chan %p, control %p", chan, control);
2852         l2cap_tx(chan, control, NULL, L2CAP_EV_RECV_REQSEQ_AND_FBIT);
2853 }
2854
2855 static void l2cap_pass_to_tx_fbit(struct l2cap_chan *chan,
2856                                   struct l2cap_ctrl *control)
2857 {
2858         BT_DBG("chan %p, control %p", chan, control);
2859         l2cap_tx(chan, control, NULL, L2CAP_EV_RECV_FBIT);
2860 }
2861
2862 /* Copy frame to all raw sockets on that connection */
2863 static void l2cap_raw_recv(struct l2cap_conn *conn, struct sk_buff *skb)
2864 {
2865         struct sk_buff *nskb;
2866         struct l2cap_chan *chan;
2867
2868         BT_DBG("conn %p", conn);
2869
2870         mutex_lock(&conn->chan_lock);
2871
2872         list_for_each_entry(chan, &conn->chan_l, list) {
2873                 if (chan->chan_type != L2CAP_CHAN_RAW)
2874                         continue;
2875
2876                 /* Don't send frame to the channel it came from */
2877                 if (bt_cb(skb)->l2cap.chan == chan)
2878                         continue;
2879
2880                 nskb = skb_clone(skb, GFP_KERNEL);
2881                 if (!nskb)
2882                         continue;
2883                 if (chan->ops->recv(chan, nskb))
2884                         kfree_skb(nskb);
2885         }
2886
2887         mutex_unlock(&conn->chan_lock);
2888 }
2889
2890 /* ---- L2CAP signalling commands ---- */
2891 static struct sk_buff *l2cap_build_cmd(struct l2cap_conn *conn, u8 code,
2892                                        u8 ident, u16 dlen, void *data)
2893 {
2894         struct sk_buff *skb, **frag;
2895         struct l2cap_cmd_hdr *cmd;
2896         struct l2cap_hdr *lh;
2897         int len, count;
2898
2899         BT_DBG("conn %p, code 0x%2.2x, ident 0x%2.2x, len %u",
2900                conn, code, ident, dlen);
2901
2902         if (conn->mtu < L2CAP_HDR_SIZE + L2CAP_CMD_HDR_SIZE)
2903                 return NULL;
2904
2905         len = L2CAP_HDR_SIZE + L2CAP_CMD_HDR_SIZE + dlen;
2906         count = min_t(unsigned int, conn->mtu, len);
2907
2908         skb = bt_skb_alloc(count, GFP_KERNEL);
2909         if (!skb)
2910                 return NULL;
2911
2912         lh = skb_put(skb, L2CAP_HDR_SIZE);
2913         lh->len = cpu_to_le16(L2CAP_CMD_HDR_SIZE + dlen);
2914
2915         if (conn->hcon->type == LE_LINK)
2916                 lh->cid = cpu_to_le16(L2CAP_CID_LE_SIGNALING);
2917         else
2918                 lh->cid = cpu_to_le16(L2CAP_CID_SIGNALING);
2919
2920         cmd = skb_put(skb, L2CAP_CMD_HDR_SIZE);
2921         cmd->code  = code;
2922         cmd->ident = ident;
2923         cmd->len   = cpu_to_le16(dlen);
2924
2925         if (dlen) {
2926                 count -= L2CAP_HDR_SIZE + L2CAP_CMD_HDR_SIZE;
2927                 skb_put_data(skb, data, count);
2928                 data += count;
2929         }
2930
2931         len -= skb->len;
2932
2933         /* Continuation fragments (no L2CAP header) */
2934         frag = &skb_shinfo(skb)->frag_list;
2935         while (len) {
2936                 count = min_t(unsigned int, conn->mtu, len);
2937
2938                 *frag = bt_skb_alloc(count, GFP_KERNEL);
2939                 if (!*frag)
2940                         goto fail;
2941
2942                 skb_put_data(*frag, data, count);
2943
2944                 len  -= count;
2945                 data += count;
2946
2947                 frag = &(*frag)->next;
2948         }
2949
2950         return skb;
2951
2952 fail:
2953         kfree_skb(skb);
2954         return NULL;
2955 }
2956
2957 static inline int l2cap_get_conf_opt(void **ptr, int *type, int *olen,
2958                                      unsigned long *val)
2959 {
2960         struct l2cap_conf_opt *opt = *ptr;
2961         int len;
2962
2963         len = L2CAP_CONF_OPT_SIZE + opt->len;
2964         *ptr += len;
2965
2966         *type = opt->type;
2967         *olen = opt->len;
2968
2969         switch (opt->len) {
2970         case 1:
2971                 *val = *((u8 *) opt->val);
2972                 break;
2973
2974         case 2:
2975                 *val = get_unaligned_le16(opt->val);
2976                 break;
2977
2978         case 4:
2979                 *val = get_unaligned_le32(opt->val);
2980                 break;
2981
2982         default:
2983                 *val = (unsigned long) opt->val;
2984                 break;
2985         }
2986
2987         BT_DBG("type 0x%2.2x len %u val 0x%lx", *type, opt->len, *val);
2988         return len;
2989 }
2990
2991 static void l2cap_add_conf_opt(void **ptr, u8 type, u8 len, unsigned long val, size_t size)
2992 {
2993         struct l2cap_conf_opt *opt = *ptr;
2994
2995         BT_DBG("type 0x%2.2x len %u val 0x%lx", type, len, val);
2996
2997         if (size < L2CAP_CONF_OPT_SIZE + len)
2998                 return;
2999
3000         opt->type = type;
3001         opt->len  = len;
3002
3003         switch (len) {
3004         case 1:
3005                 *((u8 *) opt->val)  = val;
3006                 break;
3007
3008         case 2:
3009                 put_unaligned_le16(val, opt->val);
3010                 break;
3011
3012         case 4:
3013                 put_unaligned_le32(val, opt->val);
3014                 break;
3015
3016         default:
3017                 memcpy(opt->val, (void *) val, len);
3018                 break;
3019         }
3020
3021         *ptr += L2CAP_CONF_OPT_SIZE + len;
3022 }
3023
3024 static void l2cap_add_opt_efs(void **ptr, struct l2cap_chan *chan, size_t size)
3025 {
3026         struct l2cap_conf_efs efs;
3027
3028         switch (chan->mode) {
3029         case L2CAP_MODE_ERTM:
3030                 efs.id          = chan->local_id;
3031                 efs.stype       = chan->local_stype;
3032                 efs.msdu        = cpu_to_le16(chan->local_msdu);
3033                 efs.sdu_itime   = cpu_to_le32(chan->local_sdu_itime);
3034                 efs.acc_lat     = cpu_to_le32(L2CAP_DEFAULT_ACC_LAT);
3035                 efs.flush_to    = cpu_to_le32(L2CAP_EFS_DEFAULT_FLUSH_TO);
3036                 break;
3037
3038         case L2CAP_MODE_STREAMING:
3039                 efs.id          = 1;
3040                 efs.stype       = L2CAP_SERV_BESTEFFORT;
3041                 efs.msdu        = cpu_to_le16(chan->local_msdu);
3042                 efs.sdu_itime   = cpu_to_le32(chan->local_sdu_itime);
3043                 efs.acc_lat     = 0;
3044                 efs.flush_to    = 0;
3045                 break;
3046
3047         default:
3048                 return;
3049         }
3050
3051         l2cap_add_conf_opt(ptr, L2CAP_CONF_EFS, sizeof(efs),
3052                            (unsigned long) &efs, size);
3053 }
3054
3055 static void l2cap_ack_timeout(struct work_struct *work)
3056 {
3057         struct l2cap_chan *chan = container_of(work, struct l2cap_chan,
3058                                                ack_timer.work);
3059         u16 frames_to_ack;
3060
3061         BT_DBG("chan %p", chan);
3062
3063         l2cap_chan_lock(chan);
3064
3065         frames_to_ack = __seq_offset(chan, chan->buffer_seq,
3066                                      chan->last_acked_seq);
3067
3068         if (frames_to_ack)
3069                 l2cap_send_rr_or_rnr(chan, 0);
3070
3071         l2cap_chan_unlock(chan);
3072         l2cap_chan_put(chan);
3073 }
3074
3075 int l2cap_ertm_init(struct l2cap_chan *chan)
3076 {
3077         int err;
3078
3079         chan->next_tx_seq = 0;
3080         chan->expected_tx_seq = 0;
3081         chan->expected_ack_seq = 0;
3082         chan->unacked_frames = 0;
3083         chan->buffer_seq = 0;
3084         chan->frames_sent = 0;
3085         chan->last_acked_seq = 0;
3086         chan->sdu = NULL;
3087         chan->sdu_last_frag = NULL;
3088         chan->sdu_len = 0;
3089
3090         skb_queue_head_init(&chan->tx_q);
3091
3092         chan->local_amp_id = AMP_ID_BREDR;
3093         chan->move_id = AMP_ID_BREDR;
3094         chan->move_state = L2CAP_MOVE_STABLE;
3095         chan->move_role = L2CAP_MOVE_ROLE_NONE;
3096
3097         if (chan->mode != L2CAP_MODE_ERTM)
3098                 return 0;
3099
3100         chan->rx_state = L2CAP_RX_STATE_RECV;
3101         chan->tx_state = L2CAP_TX_STATE_XMIT;
3102
3103         INIT_DELAYED_WORK(&chan->retrans_timer, l2cap_retrans_timeout);
3104         INIT_DELAYED_WORK(&chan->monitor_timer, l2cap_monitor_timeout);
3105         INIT_DELAYED_WORK(&chan->ack_timer, l2cap_ack_timeout);
3106
3107         skb_queue_head_init(&chan->srej_q);
3108
3109         err = l2cap_seq_list_init(&chan->srej_list, chan->tx_win);
3110         if (err < 0)
3111                 return err;
3112
3113         err = l2cap_seq_list_init(&chan->retrans_list, chan->remote_tx_win);
3114         if (err < 0)
3115                 l2cap_seq_list_free(&chan->srej_list);
3116
3117         return err;
3118 }
3119
3120 static inline __u8 l2cap_select_mode(__u8 mode, __u16 remote_feat_mask)
3121 {
3122         switch (mode) {
3123         case L2CAP_MODE_STREAMING:
3124         case L2CAP_MODE_ERTM:
3125                 if (l2cap_mode_supported(mode, remote_feat_mask))
3126                         return mode;
3127                 /* fall through */
3128         default:
3129                 return L2CAP_MODE_BASIC;
3130         }
3131 }
3132
3133 static inline bool __l2cap_ews_supported(struct l2cap_conn *conn)
3134 {
3135         return ((conn->local_fixed_chan & L2CAP_FC_A2MP) &&
3136                 (conn->feat_mask & L2CAP_FEAT_EXT_WINDOW));
3137 }
3138
3139 static inline bool __l2cap_efs_supported(struct l2cap_conn *conn)
3140 {
3141         return ((conn->local_fixed_chan & L2CAP_FC_A2MP) &&
3142                 (conn->feat_mask & L2CAP_FEAT_EXT_FLOW));
3143 }
3144
3145 static void __l2cap_set_ertm_timeouts(struct l2cap_chan *chan,
3146                                       struct l2cap_conf_rfc *rfc)
3147 {
3148         if (chan->local_amp_id != AMP_ID_BREDR && chan->hs_hcon) {
3149                 u64 ertm_to = chan->hs_hcon->hdev->amp_be_flush_to;
3150
3151                 /* Class 1 devices have must have ERTM timeouts
3152                  * exceeding the Link Supervision Timeout.  The
3153                  * default Link Supervision Timeout for AMP
3154                  * controllers is 10 seconds.
3155                  *
3156                  * Class 1 devices use 0xffffffff for their
3157                  * best-effort flush timeout, so the clamping logic
3158                  * will result in a timeout that meets the above
3159                  * requirement.  ERTM timeouts are 16-bit values, so
3160                  * the maximum timeout is 65.535 seconds.
3161                  */
3162
3163                 /* Convert timeout to milliseconds and round */
3164                 ertm_to = DIV_ROUND_UP_ULL(ertm_to, 1000);
3165
3166                 /* This is the recommended formula for class 2 devices
3167                  * that start ERTM timers when packets are sent to the
3168                  * controller.
3169                  */
3170                 ertm_to = 3 * ertm_to + 500;
3171
3172                 if (ertm_to > 0xffff)
3173                         ertm_to = 0xffff;
3174
3175                 rfc->retrans_timeout = cpu_to_le16((u16) ertm_to);
3176                 rfc->monitor_timeout = rfc->retrans_timeout;
3177         } else {
3178                 rfc->retrans_timeout = cpu_to_le16(L2CAP_DEFAULT_RETRANS_TO);
3179                 rfc->monitor_timeout = cpu_to_le16(L2CAP_DEFAULT_MONITOR_TO);
3180         }
3181 }
3182
3183 static inline void l2cap_txwin_setup(struct l2cap_chan *chan)
3184 {
3185         if (chan->tx_win > L2CAP_DEFAULT_TX_WINDOW &&
3186             __l2cap_ews_supported(chan->conn)) {
3187                 /* use extended control field */
3188                 set_bit(FLAG_EXT_CTRL, &chan->flags);
3189                 chan->tx_win_max = L2CAP_DEFAULT_EXT_WINDOW;
3190         } else {
3191                 chan->tx_win = min_t(u16, chan->tx_win,
3192                                      L2CAP_DEFAULT_TX_WINDOW);
3193                 chan->tx_win_max = L2CAP_DEFAULT_TX_WINDOW;
3194         }
3195         chan->ack_win = chan->tx_win;
3196 }
3197
3198 static int l2cap_build_conf_req(struct l2cap_chan *chan, void *data, size_t data_size)
3199 {
3200         struct l2cap_conf_req *req = data;
3201         struct l2cap_conf_rfc rfc = { .mode = chan->mode };
3202         void *ptr = req->data;
3203         void *endptr = data + data_size;
3204         u16 size;
3205
3206         BT_DBG("chan %p", chan);
3207
3208         if (chan->num_conf_req || chan->num_conf_rsp)
3209                 goto done;
3210
3211         switch (chan->mode) {
3212         case L2CAP_MODE_STREAMING:
3213         case L2CAP_MODE_ERTM:
3214                 if (test_bit(CONF_STATE2_DEVICE, &chan->conf_state))
3215                         break;
3216
3217                 if (__l2cap_efs_supported(chan->conn))
3218                         set_bit(FLAG_EFS_ENABLE, &chan->flags);
3219
3220                 /* fall through */
3221         default:
3222                 chan->mode = l2cap_select_mode(rfc.mode, chan->conn->feat_mask);
3223                 break;
3224         }
3225
3226 done:
3227         if (chan->imtu != L2CAP_DEFAULT_MTU)
3228                 l2cap_add_conf_opt(&ptr, L2CAP_CONF_MTU, 2, chan->imtu, endptr - ptr);
3229
3230         switch (chan->mode) {
3231         case L2CAP_MODE_BASIC:
3232                 if (disable_ertm)
3233                         break;
3234
3235                 if (!(chan->conn->feat_mask & L2CAP_FEAT_ERTM) &&
3236                     !(chan->conn->feat_mask & L2CAP_FEAT_STREAMING))
3237                         break;
3238
3239                 rfc.mode            = L2CAP_MODE_BASIC;
3240                 rfc.txwin_size      = 0;
3241                 rfc.max_transmit    = 0;
3242                 rfc.retrans_timeout = 0;
3243                 rfc.monitor_timeout = 0;
3244                 rfc.max_pdu_size    = 0;
3245
3246                 l2cap_add_conf_opt(&ptr, L2CAP_CONF_RFC, sizeof(rfc),
3247                                    (unsigned long) &rfc, endptr - ptr);
3248                 break;
3249
3250         case L2CAP_MODE_ERTM:
3251                 rfc.mode            = L2CAP_MODE_ERTM;
3252                 rfc.max_transmit    = chan->max_tx;
3253
3254                 __l2cap_set_ertm_timeouts(chan, &rfc);
3255
3256                 size = min_t(u16, L2CAP_DEFAULT_MAX_PDU_SIZE, chan->conn->mtu -
3257                              L2CAP_EXT_HDR_SIZE - L2CAP_SDULEN_SIZE -
3258                              L2CAP_FCS_SIZE);
3259                 rfc.max_pdu_size = cpu_to_le16(size);
3260
3261                 l2cap_txwin_setup(chan);
3262
3263                 rfc.txwin_size = min_t(u16, chan->tx_win,
3264                                        L2CAP_DEFAULT_TX_WINDOW);
3265
3266                 l2cap_add_conf_opt(&ptr, L2CAP_CONF_RFC, sizeof(rfc),
3267                                    (unsigned long) &rfc, endptr - ptr);
3268
3269                 if (test_bit(FLAG_EFS_ENABLE, &chan->flags))
3270                         l2cap_add_opt_efs(&ptr, chan, endptr - ptr);
3271
3272                 if (test_bit(FLAG_EXT_CTRL, &chan->flags))
3273                         l2cap_add_conf_opt(&ptr, L2CAP_CONF_EWS, 2,
3274                                            chan->tx_win, endptr - ptr);
3275
3276                 if (chan->conn->feat_mask & L2CAP_FEAT_FCS)
3277                         if (chan->fcs == L2CAP_FCS_NONE ||
3278                             test_bit(CONF_RECV_NO_FCS, &chan->conf_state)) {
3279                                 chan->fcs = L2CAP_FCS_NONE;
3280                                 l2cap_add_conf_opt(&ptr, L2CAP_CONF_FCS, 1,
3281                                                    chan->fcs, endptr - ptr);
3282                         }
3283                 break;
3284
3285         case L2CAP_MODE_STREAMING:
3286                 l2cap_txwin_setup(chan);
3287                 rfc.mode            = L2CAP_MODE_STREAMING;
3288                 rfc.txwin_size      = 0;
3289                 rfc.max_transmit    = 0;
3290                 rfc.retrans_timeout = 0;
3291                 rfc.monitor_timeout = 0;
3292
3293                 size = min_t(u16, L2CAP_DEFAULT_MAX_PDU_SIZE, chan->conn->mtu -
3294                              L2CAP_EXT_HDR_SIZE - L2CAP_SDULEN_SIZE -
3295                              L2CAP_FCS_SIZE);
3296                 rfc.max_pdu_size = cpu_to_le16(size);
3297
3298                 l2cap_add_conf_opt(&ptr, L2CAP_CONF_RFC, sizeof(rfc),
3299                                    (unsigned long) &rfc, endptr - ptr);
3300
3301                 if (test_bit(FLAG_EFS_ENABLE, &chan->flags))
3302                         l2cap_add_opt_efs(&ptr, chan, endptr - ptr);
3303
3304                 if (chan->conn->feat_mask & L2CAP_FEAT_FCS)
3305                         if (chan->fcs == L2CAP_FCS_NONE ||
3306                             test_bit(CONF_RECV_NO_FCS, &chan->conf_state)) {
3307                                 chan->fcs = L2CAP_FCS_NONE;
3308                                 l2cap_add_conf_opt(&ptr, L2CAP_CONF_FCS, 1,
3309                                                    chan->fcs, endptr - ptr);
3310                         }
3311                 break;
3312         }
3313
3314         req->dcid  = cpu_to_le16(chan->dcid);
3315         req->flags = cpu_to_le16(0);
3316
3317         return ptr - data;
3318 }
3319
3320 static int l2cap_parse_conf_req(struct l2cap_chan *chan, void *data, size_t data_size)
3321 {
3322         struct l2cap_conf_rsp *rsp = data;
3323         void *ptr = rsp->data;
3324         void *endptr = data + data_size;
3325         void *req = chan->conf_req;
3326         int len = chan->conf_len;
3327         int type, hint, olen;
3328         unsigned long val;
3329         struct l2cap_conf_rfc rfc = { .mode = L2CAP_MODE_BASIC };
3330         struct l2cap_conf_efs efs;
3331         u8 remote_efs = 0;
3332         u16 mtu = L2CAP_DEFAULT_MTU;
3333         u16 result = L2CAP_CONF_SUCCESS;
3334         u16 size;
3335
3336         BT_DBG("chan %p", chan);
3337
3338         while (len >= L2CAP_CONF_OPT_SIZE) {
3339                 len -= l2cap_get_conf_opt(&req, &type, &olen, &val);
3340                 if (len < 0)
3341                         break;
3342
3343                 hint  = type & L2CAP_CONF_HINT;
3344                 type &= L2CAP_CONF_MASK;
3345
3346                 switch (type) {
3347                 case L2CAP_CONF_MTU:
3348                         if (olen != 2)
3349                                 break;
3350                         mtu = val;
3351                         break;
3352
3353                 case L2CAP_CONF_FLUSH_TO:
3354                         if (olen != 2)
3355                                 break;
3356                         chan->flush_to = val;
3357                         break;
3358
3359                 case L2CAP_CONF_QOS:
3360                         break;
3361
3362                 case L2CAP_CONF_RFC:
3363                         if (olen != sizeof(rfc))
3364                                 break;
3365                         memcpy(&rfc, (void *) val, olen);
3366                         break;
3367
3368                 case L2CAP_CONF_FCS:
3369                         if (olen != 1)
3370                                 break;
3371                         if (val == L2CAP_FCS_NONE)
3372                                 set_bit(CONF_RECV_NO_FCS, &chan->conf_state);
3373                         break;
3374
3375                 case L2CAP_CONF_EFS:
3376                         if (olen != sizeof(efs))
3377                                 break;
3378                         remote_efs = 1;
3379                         memcpy(&efs, (void *) val, olen);
3380                         break;
3381
3382                 case L2CAP_CONF_EWS:
3383                         if (olen != 2)
3384                                 break;
3385                         if (!(chan->conn->local_fixed_chan & L2CAP_FC_A2MP))
3386                                 return -ECONNREFUSED;
3387                         set_bit(FLAG_EXT_CTRL, &chan->flags);
3388                         set_bit(CONF_EWS_RECV, &chan->conf_state);
3389                         chan->tx_win_max = L2CAP_DEFAULT_EXT_WINDOW;
3390                         chan->remote_tx_win = val;
3391                         break;
3392
3393                 default:
3394                         if (hint)
3395                                 break;
3396                         result = L2CAP_CONF_UNKNOWN;
3397                         *((u8 *) ptr++) = type;
3398                         break;
3399                 }
3400         }
3401
3402         if (chan->num_conf_rsp || chan->num_conf_req > 1)
3403                 goto done;
3404
3405         switch (chan->mode) {
3406         case L2CAP_MODE_STREAMING:
3407         case L2CAP_MODE_ERTM:
3408                 if (!test_bit(CONF_STATE2_DEVICE, &chan->conf_state)) {
3409                         chan->mode = l2cap_select_mode(rfc.mode,
3410                                                        chan->conn->feat_mask);
3411                         break;
3412                 }
3413
3414                 if (remote_efs) {
3415                         if (__l2cap_efs_supported(chan->conn))
3416                                 set_bit(FLAG_EFS_ENABLE, &chan->flags);
3417                         else
3418                                 return -ECONNREFUSED;
3419                 }
3420
3421                 if (chan->mode != rfc.mode)
3422                         return -ECONNREFUSED;
3423
3424                 break;
3425         }
3426
3427 done:
3428         if (chan->mode != rfc.mode) {
3429                 result = L2CAP_CONF_UNACCEPT;
3430                 rfc.mode = chan->mode;
3431
3432                 if (chan->num_conf_rsp == 1)
3433                         return -ECONNREFUSED;
3434
3435                 l2cap_add_conf_opt(&ptr, L2CAP_CONF_RFC, sizeof(rfc),
3436                                    (unsigned long) &rfc, endptr - ptr);
3437         }
3438
3439         if (result == L2CAP_CONF_SUCCESS) {
3440                 /* Configure output options and let the other side know
3441                  * which ones we don't like. */
3442
3443                 if (mtu < L2CAP_DEFAULT_MIN_MTU)
3444                         result = L2CAP_CONF_UNACCEPT;
3445                 else {
3446                         chan->omtu = mtu;
3447                         set_bit(CONF_MTU_DONE, &chan->conf_state);
3448                 }
3449                 l2cap_add_conf_opt(&ptr, L2CAP_CONF_MTU, 2, chan->omtu, endptr - ptr);
3450
3451                 if (remote_efs) {
3452                         if (chan->local_stype != L2CAP_SERV_NOTRAFIC &&
3453                             efs.stype != L2CAP_SERV_NOTRAFIC &&
3454                             efs.stype != chan->local_stype) {
3455
3456                                 result = L2CAP_CONF_UNACCEPT;
3457
3458                                 if (chan->num_conf_req >= 1)
3459                                         return -ECONNREFUSED;
3460
3461                                 l2cap_add_conf_opt(&ptr, L2CAP_CONF_EFS,
3462                                                    sizeof(efs),
3463                                                    (unsigned long) &efs, endptr - ptr);
3464                         } else {
3465                                 /* Send PENDING Conf Rsp */
3466                                 result = L2CAP_CONF_PENDING;
3467                                 set_bit(CONF_LOC_CONF_PEND, &chan->conf_state);
3468                         }
3469                 }
3470
3471                 switch (rfc.mode) {
3472                 case L2CAP_MODE_BASIC:
3473                         chan->fcs = L2CAP_FCS_NONE;
3474                         set_bit(CONF_MODE_DONE, &chan->conf_state);
3475                         break;
3476
3477                 case L2CAP_MODE_ERTM:
3478                         if (!test_bit(CONF_EWS_RECV, &chan->conf_state))
3479                                 chan->remote_tx_win = rfc.txwin_size;
3480                         else
3481                                 rfc.txwin_size = L2CAP_DEFAULT_TX_WINDOW;
3482
3483                         chan->remote_max_tx = rfc.max_transmit;
3484
3485                         size = min_t(u16, le16_to_cpu(rfc.max_pdu_size),
3486                                      chan->conn->mtu - L2CAP_EXT_HDR_SIZE -
3487                                      L2CAP_SDULEN_SIZE - L2CAP_FCS_SIZE);
3488                         rfc.max_pdu_size = cpu_to_le16(size);
3489                         chan->remote_mps = size;
3490
3491                         __l2cap_set_ertm_timeouts(chan, &rfc);
3492
3493                         set_bit(CONF_MODE_DONE, &chan->conf_state);
3494
3495                         l2cap_add_conf_opt(&ptr, L2CAP_CONF_RFC,
3496                                            sizeof(rfc), (unsigned long) &rfc, endptr - ptr);
3497
3498                         if (test_bit(FLAG_EFS_ENABLE, &chan->flags)) {
3499                                 chan->remote_id = efs.id;
3500                                 chan->remote_stype = efs.stype;
3501                                 chan->remote_msdu = le16_to_cpu(efs.msdu);
3502                                 chan->remote_flush_to =
3503                                         le32_to_cpu(efs.flush_to);
3504                                 chan->remote_acc_lat =
3505                                         le32_to_cpu(efs.acc_lat);
3506                                 chan->remote_sdu_itime =
3507                                         le32_to_cpu(efs.sdu_itime);
3508                                 l2cap_add_conf_opt(&ptr, L2CAP_CONF_EFS,
3509                                                    sizeof(efs),
3510                                                    (unsigned long) &efs, endptr - ptr);
3511                         }
3512                         break;
3513
3514                 case L2CAP_MODE_STREAMING:
3515                         size = min_t(u16, le16_to_cpu(rfc.max_pdu_size),
3516                                      chan->conn->mtu - L2CAP_EXT_HDR_SIZE -
3517                                      L2CAP_SDULEN_SIZE - L2CAP_FCS_SIZE);
3518                         rfc.max_pdu_size = cpu_to_le16(size);
3519                         chan->remote_mps = size;
3520
3521                         set_bit(CONF_MODE_DONE, &chan->conf_state);
3522
3523                         l2cap_add_conf_opt(&ptr, L2CAP_CONF_RFC, sizeof(rfc),
3524                                            (unsigned long) &rfc, endptr - ptr);
3525
3526                         break;
3527
3528                 default:
3529                         result = L2CAP_CONF_UNACCEPT;
3530
3531                         memset(&rfc, 0, sizeof(rfc));
3532                         rfc.mode = chan->mode;
3533                 }
3534
3535                 if (result == L2CAP_CONF_SUCCESS)
3536                         set_bit(CONF_OUTPUT_DONE, &chan->conf_state);
3537         }
3538         rsp->scid   = cpu_to_le16(chan->dcid);
3539         rsp->result = cpu_to_le16(result);
3540         rsp->flags  = cpu_to_le16(0);
3541
3542         return ptr - data;
3543 }
3544
3545 static int l2cap_parse_conf_rsp(struct l2cap_chan *chan, void *rsp, int len,
3546                                 void *data, size_t size, u16 *result)
3547 {
3548         struct l2cap_conf_req *req = data;
3549         void *ptr = req->data;
3550         void *endptr = data + size;
3551         int type, olen;
3552         unsigned long val;
3553         struct l2cap_conf_rfc rfc = { .mode = L2CAP_MODE_BASIC };
3554         struct l2cap_conf_efs efs;
3555
3556         BT_DBG("chan %p, rsp %p, len %d, req %p", chan, rsp, len, data);
3557
3558         while (len >= L2CAP_CONF_OPT_SIZE) {
3559                 len -= l2cap_get_conf_opt(&rsp, &type, &olen, &val);
3560                 if (len < 0)
3561                         break;
3562
3563                 switch (type) {
3564                 case L2CAP_CONF_MTU:
3565                         if (olen != 2)
3566                                 break;
3567                         if (val < L2CAP_DEFAULT_MIN_MTU) {
3568                                 *result = L2CAP_CONF_UNACCEPT;
3569                                 chan->imtu = L2CAP_DEFAULT_MIN_MTU;
3570                         } else
3571                                 chan->imtu = val;
3572                         l2cap_add_conf_opt(&ptr, L2CAP_CONF_MTU, 2, chan->imtu,
3573                                            endptr - ptr);
3574                         break;
3575
3576                 case L2CAP_CONF_FLUSH_TO:
3577                         if (olen != 2)
3578                                 break;
3579                         chan->flush_to = val;
3580                         l2cap_add_conf_opt(&ptr, L2CAP_CONF_FLUSH_TO, 2,
3581                                            chan->flush_to, endptr - ptr);
3582                         break;
3583
3584                 case L2CAP_CONF_RFC:
3585                         if (olen != sizeof(rfc))
3586                                 break;
3587                         memcpy(&rfc, (void *)val, olen);
3588                         if (test_bit(CONF_STATE2_DEVICE, &chan->conf_state) &&
3589                             rfc.mode != chan->mode)
3590                                 return -ECONNREFUSED;
3591                         chan->fcs = 0;
3592                         l2cap_add_conf_opt(&ptr, L2CAP_CONF_RFC, sizeof(rfc),
3593                                            (unsigned long) &rfc, endptr - ptr);
3594                         break;
3595
3596                 case L2CAP_CONF_EWS:
3597                         if (olen != 2)
3598                                 break;
3599                         chan->ack_win = min_t(u16, val, chan->ack_win);
3600                         l2cap_add_conf_opt(&ptr, L2CAP_CONF_EWS, 2,
3601                                            chan->tx_win, endptr - ptr);
3602                         break;
3603
3604                 case L2CAP_CONF_EFS:
3605                         if (olen != sizeof(efs))
3606                                 break;
3607                         memcpy(&efs, (void *)val, olen);
3608                         if (chan->local_stype != L2CAP_SERV_NOTRAFIC &&
3609                             efs.stype != L2CAP_SERV_NOTRAFIC &&
3610                             efs.stype != chan->local_stype)
3611                                 return -ECONNREFUSED;
3612                         l2cap_add_conf_opt(&ptr, L2CAP_CONF_EFS, sizeof(efs),
3613                                            (unsigned long) &efs, endptr - ptr);
3614                         break;
3615
3616                 case L2CAP_CONF_FCS:
3617                         if (olen != 1)
3618                                 break;
3619                         if (*result == L2CAP_CONF_PENDING)
3620                                 if (val == L2CAP_FCS_NONE)
3621                                         set_bit(CONF_RECV_NO_FCS,
3622                                                 &chan->conf_state);
3623                         break;
3624                 }
3625         }
3626
3627         if (chan->mode == L2CAP_MODE_BASIC && chan->mode != rfc.mode)
3628                 return -ECONNREFUSED;
3629
3630         chan->mode = rfc.mode;
3631
3632         if (*result == L2CAP_CONF_SUCCESS || *result == L2CAP_CONF_PENDING) {
3633                 switch (rfc.mode) {
3634                 case L2CAP_MODE_ERTM:
3635                         chan->retrans_timeout = le16_to_cpu(rfc.retrans_timeout);
3636                         chan->monitor_timeout = le16_to_cpu(rfc.monitor_timeout);
3637                         chan->mps    = le16_to_cpu(rfc.max_pdu_size);
3638                         if (!test_bit(FLAG_EXT_CTRL, &chan->flags))
3639                                 chan->ack_win = min_t(u16, chan->ack_win,
3640                                                       rfc.txwin_size);
3641
3642                         if (test_bit(FLAG_EFS_ENABLE, &chan->flags)) {
3643                                 chan->local_msdu = le16_to_cpu(efs.msdu);
3644                                 chan->local_sdu_itime =
3645                                         le32_to_cpu(efs.sdu_itime);
3646                                 chan->local_acc_lat = le32_to_cpu(efs.acc_lat);
3647                                 chan->local_flush_to =
3648                                         le32_to_cpu(efs.flush_to);
3649                         }
3650                         break;
3651
3652                 case L2CAP_MODE_STREAMING:
3653                         chan->mps    = le16_to_cpu(rfc.max_pdu_size);
3654                 }
3655         }
3656
3657         req->dcid   = cpu_to_le16(chan->dcid);
3658         req->flags  = cpu_to_le16(0);
3659
3660         return ptr - data;
3661 }
3662
3663 static int l2cap_build_conf_rsp(struct l2cap_chan *chan, void *data,
3664                                 u16 result, u16 flags)
3665 {
3666         struct l2cap_conf_rsp *rsp = data;
3667         void *ptr = rsp->data;
3668
3669         BT_DBG("chan %p", chan);
3670
3671         rsp->scid   = cpu_to_le16(chan->dcid);
3672         rsp->result = cpu_to_le16(result);
3673         rsp->flags  = cpu_to_le16(flags);
3674
3675         return ptr - data;
3676 }
3677
3678 void __l2cap_le_connect_rsp_defer(struct l2cap_chan *chan)
3679 {
3680         struct l2cap_le_conn_rsp rsp;
3681         struct l2cap_conn *conn = chan->conn;
3682
3683         BT_DBG("chan %p", chan);
3684
3685         rsp.dcid    = cpu_to_le16(chan->scid);
3686         rsp.mtu     = cpu_to_le16(chan->imtu);
3687         rsp.mps     = cpu_to_le16(chan->mps);
3688         rsp.credits = cpu_to_le16(chan->rx_credits);
3689         rsp.result  = cpu_to_le16(L2CAP_CR_LE_SUCCESS);
3690
3691         l2cap_send_cmd(conn, chan->ident, L2CAP_LE_CONN_RSP, sizeof(rsp),
3692                        &rsp);
3693 }
3694
3695 void __l2cap_connect_rsp_defer(struct l2cap_chan *chan)
3696 {
3697         struct l2cap_conn_rsp rsp;
3698         struct l2cap_conn *conn = chan->conn;
3699         u8 buf[128];
3700         u8 rsp_code;
3701
3702         rsp.scid   = cpu_to_le16(chan->dcid);
3703         rsp.dcid   = cpu_to_le16(chan->scid);
3704         rsp.result = cpu_to_le16(L2CAP_CR_SUCCESS);
3705         rsp.status = cpu_to_le16(L2CAP_CS_NO_INFO);
3706
3707         if (chan->hs_hcon)
3708                 rsp_code = L2CAP_CREATE_CHAN_RSP;
3709         else
3710                 rsp_code = L2CAP_CONN_RSP;
3711
3712         BT_DBG("chan %p rsp_code %u", chan, rsp_code);
3713
3714         l2cap_send_cmd(conn, chan->ident, rsp_code, sizeof(rsp), &rsp);
3715
3716         if (test_and_set_bit(CONF_REQ_SENT, &chan->conf_state))
3717                 return;
3718
3719         l2cap_send_cmd(conn, l2cap_get_ident(conn), L2CAP_CONF_REQ,
3720                        l2cap_build_conf_req(chan, buf, sizeof(buf)), buf);
3721         chan->num_conf_req++;
3722 }
3723
3724 static void l2cap_conf_rfc_get(struct l2cap_chan *chan, void *rsp, int len)
3725 {
3726         int type, olen;
3727         unsigned long val;
3728         /* Use sane default values in case a misbehaving remote device
3729          * did not send an RFC or extended window size option.
3730          */
3731         u16 txwin_ext = chan->ack_win;
3732         struct l2cap_conf_rfc rfc = {
3733                 .mode = chan->mode,
3734                 .retrans_timeout = cpu_to_le16(L2CAP_DEFAULT_RETRANS_TO),
3735                 .monitor_timeout = cpu_to_le16(L2CAP_DEFAULT_MONITOR_TO),
3736                 .max_pdu_size = cpu_to_le16(chan->imtu),
3737                 .txwin_size = min_t(u16, chan->ack_win, L2CAP_DEFAULT_TX_WINDOW),
3738         };
3739
3740         BT_DBG("chan %p, rsp %p, len %d", chan, rsp, len);
3741
3742         if ((chan->mode != L2CAP_MODE_ERTM) && (chan->mode != L2CAP_MODE_STREAMING))
3743                 return;
3744
3745         while (len >= L2CAP_CONF_OPT_SIZE) {
3746                 len -= l2cap_get_conf_opt(&rsp, &type, &olen, &val);
3747                 if (len < 0)
3748                         break;
3749
3750                 switch (type) {
3751                 case L2CAP_CONF_RFC:
3752                         if (olen != sizeof(rfc))
3753                                 break;
3754                         memcpy(&rfc, (void *)val, olen);
3755                         break;
3756                 case L2CAP_CONF_EWS:
3757                         if (olen != 2)
3758                                 break;
3759                         txwin_ext = val;
3760                         break;
3761                 }
3762         }
3763
3764         switch (rfc.mode) {
3765         case L2CAP_MODE_ERTM:
3766                 chan->retrans_timeout = le16_to_cpu(rfc.retrans_timeout);
3767                 chan->monitor_timeout = le16_to_cpu(rfc.monitor_timeout);
3768                 chan->mps = le16_to_cpu(rfc.max_pdu_size);
3769                 if (test_bit(FLAG_EXT_CTRL, &chan->flags))
3770                         chan->ack_win = min_t(u16, chan->ack_win, txwin_ext);
3771                 else
3772                         chan->ack_win = min_t(u16, chan->ack_win,
3773                                               rfc.txwin_size);
3774                 break;
3775         case L2CAP_MODE_STREAMING:
3776                 chan->mps    = le16_to_cpu(rfc.max_pdu_size);
3777         }
3778 }
3779
3780 static inline int l2cap_command_rej(struct l2cap_conn *conn,
3781                                     struct l2cap_cmd_hdr *cmd, u16 cmd_len,
3782                                     u8 *data)
3783 {
3784         struct l2cap_cmd_rej_unk *rej = (struct l2cap_cmd_rej_unk *) data;
3785
3786         if (cmd_len < sizeof(*rej))
3787                 return -EPROTO;
3788
3789         if (rej->reason != L2CAP_REJ_NOT_UNDERSTOOD)
3790                 return 0;
3791
3792         if ((conn->info_state & L2CAP_INFO_FEAT_MASK_REQ_SENT) &&
3793             cmd->ident == conn->info_ident) {
3794                 cancel_delayed_work(&conn->info_timer);
3795
3796                 conn->info_state |= L2CAP_INFO_FEAT_MASK_REQ_DONE;
3797                 conn->info_ident = 0;
3798
3799                 l2cap_conn_start(conn);
3800         }
3801
3802         return 0;
3803 }
3804
3805 static struct l2cap_chan *l2cap_connect(struct l2cap_conn *conn,
3806                                         struct l2cap_cmd_hdr *cmd,
3807                                         u8 *data, u8 rsp_code, u8 amp_id)
3808 {
3809         struct l2cap_conn_req *req = (struct l2cap_conn_req *) data;
3810         struct l2cap_conn_rsp rsp;
3811         struct l2cap_chan *chan = NULL, *pchan;
3812         int result, status = L2CAP_CS_NO_INFO;
3813
3814         u16 dcid = 0, scid = __le16_to_cpu(req->scid);
3815         __le16 psm = req->psm;
3816
3817         BT_DBG("psm 0x%2.2x scid 0x%4.4x", __le16_to_cpu(psm), scid);
3818
3819         /* Check if we have socket listening on psm */
3820         pchan = l2cap_global_chan_by_psm(BT_LISTEN, psm, &conn->hcon->src,
3821                                          &conn->hcon->dst, ACL_LINK);
3822         if (!pchan) {
3823                 result = L2CAP_CR_BAD_PSM;
3824                 goto sendresp;
3825         }
3826
3827         mutex_lock(&conn->chan_lock);
3828         l2cap_chan_lock(pchan);
3829
3830         /* Check if the ACL is secure enough (if not SDP) */
3831         if (psm != cpu_to_le16(L2CAP_PSM_SDP) &&
3832             !hci_conn_check_link_mode(conn->hcon)) {
3833                 conn->disc_reason = HCI_ERROR_AUTH_FAILURE;
3834                 result = L2CAP_CR_SEC_BLOCK;
3835                 goto response;
3836         }
3837
3838         result = L2CAP_CR_NO_MEM;
3839
3840         /* Check for valid dynamic CID range (as per Erratum 3253) */
3841         if (scid < L2CAP_CID_DYN_START || scid > L2CAP_CID_DYN_END) {
3842                 result = L2CAP_CR_INVALID_SCID;
3843                 goto response;
3844         }
3845
3846         /* Check if we already have channel with that dcid */
3847         if (__l2cap_get_chan_by_dcid(conn, scid)) {
3848                 result = L2CAP_CR_SCID_IN_USE;
3849                 goto response;
3850         }
3851
3852         chan = pchan->ops->new_connection(pchan);
3853         if (!chan)
3854                 goto response;
3855
3856         /* For certain devices (ex: HID mouse), support for authentication,
3857          * pairing and bonding is optional. For such devices, inorder to avoid
3858          * the ACL alive for too long after L2CAP disconnection, reset the ACL
3859          * disc_timeout back to HCI_DISCONN_TIMEOUT during L2CAP connect.
3860          */
3861         conn->hcon->disc_timeout = HCI_DISCONN_TIMEOUT;
3862
3863         bacpy(&chan->src, &conn->hcon->src);
3864         bacpy(&chan->dst, &conn->hcon->dst);
3865         chan->src_type = bdaddr_src_type(conn->hcon);
3866         chan->dst_type = bdaddr_dst_type(conn->hcon);
3867         chan->psm  = psm;
3868         chan->dcid = scid;
3869         chan->local_amp_id = amp_id;
3870
3871         __l2cap_chan_add(conn, chan);
3872
3873         dcid = chan->scid;
3874
3875         __set_chan_timer(chan, chan->ops->get_sndtimeo(chan));
3876
3877         chan->ident = cmd->ident;
3878
3879         if (conn->info_state & L2CAP_INFO_FEAT_MASK_REQ_DONE) {
3880                 if (l2cap_chan_check_security(chan, false)) {
3881                         if (test_bit(FLAG_DEFER_SETUP, &chan->flags)) {
3882                                 l2cap_state_change(chan, BT_CONNECT2);
3883                                 result = L2CAP_CR_PEND;
3884                                 status = L2CAP_CS_AUTHOR_PEND;
3885                                 chan->ops->defer(chan);
3886                         } else {
3887                                 /* Force pending result for AMP controllers.
3888                                  * The connection will succeed after the
3889                                  * physical link is up.
3890                                  */
3891                                 if (amp_id == AMP_ID_BREDR) {
3892                                         l2cap_state_change(chan, BT_CONFIG);
3893                                         result = L2CAP_CR_SUCCESS;
3894                                 } else {
3895                                         l2cap_state_change(chan, BT_CONNECT2);
3896                                         result = L2CAP_CR_PEND;
3897                                 }
3898                                 status = L2CAP_CS_NO_INFO;
3899                         }
3900                 } else {
3901                         l2cap_state_change(chan, BT_CONNECT2);
3902                         result = L2CAP_CR_PEND;
3903                         status = L2CAP_CS_AUTHEN_PEND;
3904                 }
3905         } else {
3906                 l2cap_state_change(chan, BT_CONNECT2);
3907                 result = L2CAP_CR_PEND;
3908                 status = L2CAP_CS_NO_INFO;
3909         }
3910
3911 response:
3912         l2cap_chan_unlock(pchan);
3913         mutex_unlock(&conn->chan_lock);
3914         l2cap_chan_put(pchan);
3915
3916 sendresp:
3917         rsp.scid   = cpu_to_le16(scid);
3918         rsp.dcid   = cpu_to_le16(dcid);
3919         rsp.result = cpu_to_le16(result);
3920         rsp.status = cpu_to_le16(status);
3921         l2cap_send_cmd(conn, cmd->ident, rsp_code, sizeof(rsp), &rsp);
3922
3923         if (result == L2CAP_CR_PEND && status == L2CAP_CS_NO_INFO) {
3924                 struct l2cap_info_req info;
3925                 info.type = cpu_to_le16(L2CAP_IT_FEAT_MASK);
3926
3927                 conn->info_state |= L2CAP_INFO_FEAT_MASK_REQ_SENT;
3928                 conn->info_ident = l2cap_get_ident(conn);
3929
3930                 schedule_delayed_work(&conn->info_timer, L2CAP_INFO_TIMEOUT);
3931
3932                 l2cap_send_cmd(conn, conn->info_ident, L2CAP_INFO_REQ,
3933                                sizeof(info), &info);
3934         }
3935
3936         if (chan && !test_bit(CONF_REQ_SENT, &chan->conf_state) &&
3937             result == L2CAP_CR_SUCCESS) {
3938                 u8 buf[128];
3939                 set_bit(CONF_REQ_SENT, &chan->conf_state);
3940                 l2cap_send_cmd(conn, l2cap_get_ident(conn), L2CAP_CONF_REQ,
3941                                l2cap_build_conf_req(chan, buf, sizeof(buf)), buf);
3942                 chan->num_conf_req++;
3943         }
3944
3945         return chan;
3946 }
3947
3948 static int l2cap_connect_req(struct l2cap_conn *conn,
3949                              struct l2cap_cmd_hdr *cmd, u16 cmd_len, u8 *data)
3950 {
3951         struct hci_dev *hdev = conn->hcon->hdev;
3952         struct hci_conn *hcon = conn->hcon;
3953
3954         if (cmd_len < sizeof(struct l2cap_conn_req))
3955                 return -EPROTO;
3956
3957         hci_dev_lock(hdev);
3958         if (hci_dev_test_flag(hdev, HCI_MGMT) &&
3959             !test_and_set_bit(HCI_CONN_MGMT_CONNECTED, &hcon->flags))
3960                 mgmt_device_connected(hdev, hcon, 0, NULL, 0);
3961         hci_dev_unlock(hdev);
3962
3963         l2cap_connect(conn, cmd, data, L2CAP_CONN_RSP, 0);
3964         return 0;
3965 }
3966
3967 static int l2cap_connect_create_rsp(struct l2cap_conn *conn,
3968                                     struct l2cap_cmd_hdr *cmd, u16 cmd_len,
3969                                     u8 *data)
3970 {
3971         struct l2cap_conn_rsp *rsp = (struct l2cap_conn_rsp *) data;
3972         u16 scid, dcid, result, status;
3973         struct l2cap_chan *chan;
3974         u8 req[128];
3975         int err;
3976
3977         if (cmd_len < sizeof(*rsp))
3978                 return -EPROTO;
3979
3980         scid   = __le16_to_cpu(rsp->scid);
3981         dcid   = __le16_to_cpu(rsp->dcid);
3982         result = __le16_to_cpu(rsp->result);
3983         status = __le16_to_cpu(rsp->status);
3984
3985         BT_DBG("dcid 0x%4.4x scid 0x%4.4x result 0x%2.2x status 0x%2.2x",
3986                dcid, scid, result, status);
3987
3988         mutex_lock(&conn->chan_lock);
3989
3990         if (scid) {
3991                 chan = __l2cap_get_chan_by_scid(conn, scid);
3992                 if (!chan) {
3993                         err = -EBADSLT;
3994                         goto unlock;
3995                 }
3996         } else {
3997                 chan = __l2cap_get_chan_by_ident(conn, cmd->ident);
3998                 if (!chan) {
3999                         err = -EBADSLT;
4000                         goto unlock;
4001                 }
4002         }
4003
4004         err = 0;
4005
4006         l2cap_chan_lock(chan);
4007
4008         switch (result) {
4009         case L2CAP_CR_SUCCESS:
4010                 l2cap_state_change(chan, BT_CONFIG);
4011                 chan->ident = 0;
4012                 chan->dcid = dcid;
4013                 clear_bit(CONF_CONNECT_PEND, &chan->conf_state);
4014
4015                 if (test_and_set_bit(CONF_REQ_SENT, &chan->conf_state))
4016                         break;
4017
4018                 l2cap_send_cmd(conn, l2cap_get_ident(conn), L2CAP_CONF_REQ,
4019                                l2cap_build_conf_req(chan, req, sizeof(req)), req);
4020                 chan->num_conf_req++;
4021                 break;
4022
4023         case L2CAP_CR_PEND:
4024                 set_bit(CONF_CONNECT_PEND, &chan->conf_state);
4025                 break;
4026
4027         default:
4028                 l2cap_chan_del(chan, ECONNREFUSED);
4029                 break;
4030         }
4031
4032         l2cap_chan_unlock(chan);
4033
4034 unlock:
4035         mutex_unlock(&conn->chan_lock);
4036
4037         return err;
4038 }
4039
4040 static inline void set_default_fcs(struct l2cap_chan *chan)
4041 {
4042         /* FCS is enabled only in ERTM or streaming mode, if one or both
4043          * sides request it.
4044          */
4045         if (chan->mode != L2CAP_MODE_ERTM && chan->mode != L2CAP_MODE_STREAMING)
4046                 chan->fcs = L2CAP_FCS_NONE;
4047         else if (!test_bit(CONF_RECV_NO_FCS, &chan->conf_state))
4048                 chan->fcs = L2CAP_FCS_CRC16;
4049 }
4050
4051 static void l2cap_send_efs_conf_rsp(struct l2cap_chan *chan, void *data,
4052                                     u8 ident, u16 flags)
4053 {
4054         struct l2cap_conn *conn = chan->conn;
4055
4056         BT_DBG("conn %p chan %p ident %d flags 0x%4.4x", conn, chan, ident,
4057                flags);
4058
4059         clear_bit(CONF_LOC_CONF_PEND, &chan->conf_state);
4060         set_bit(CONF_OUTPUT_DONE, &chan->conf_state);
4061
4062         l2cap_send_cmd(conn, ident, L2CAP_CONF_RSP,
4063                        l2cap_build_conf_rsp(chan, data,
4064                                             L2CAP_CONF_SUCCESS, flags), data);
4065 }
4066
4067 static void cmd_reject_invalid_cid(struct l2cap_conn *conn, u8 ident,
4068                                    u16 scid, u16 dcid)
4069 {
4070         struct l2cap_cmd_rej_cid rej;
4071
4072         rej.reason = cpu_to_le16(L2CAP_REJ_INVALID_CID);
4073         rej.scid = __cpu_to_le16(scid);
4074         rej.dcid = __cpu_to_le16(dcid);
4075
4076         l2cap_send_cmd(conn, ident, L2CAP_COMMAND_REJ, sizeof(rej), &rej);
4077 }
4078
4079 static inline int l2cap_config_req(struct l2cap_conn *conn,
4080                                    struct l2cap_cmd_hdr *cmd, u16 cmd_len,
4081                                    u8 *data)
4082 {
4083         struct l2cap_conf_req *req = (struct l2cap_conf_req *) data;
4084         u16 dcid, flags;
4085         u8 rsp[64];
4086         struct l2cap_chan *chan;
4087         int len, err = 0;
4088
4089         if (cmd_len < sizeof(*req))
4090                 return -EPROTO;
4091
4092         dcid  = __le16_to_cpu(req->dcid);
4093         flags = __le16_to_cpu(req->flags);
4094
4095         BT_DBG("dcid 0x%4.4x flags 0x%2.2x", dcid, flags);
4096
4097         chan = l2cap_get_chan_by_scid(conn, dcid);
4098         if (!chan) {
4099                 cmd_reject_invalid_cid(conn, cmd->ident, dcid, 0);
4100                 return 0;
4101         }
4102
4103         if (chan->state != BT_CONFIG && chan->state != BT_CONNECT2) {
4104                 cmd_reject_invalid_cid(conn, cmd->ident, chan->scid,
4105                                        chan->dcid);
4106                 goto unlock;
4107         }
4108
4109         /* Reject if config buffer is too small. */
4110         len = cmd_len - sizeof(*req);
4111         if (chan->conf_len + len > sizeof(chan->conf_req)) {
4112                 l2cap_send_cmd(conn, cmd->ident, L2CAP_CONF_RSP,
4113                                l2cap_build_conf_rsp(chan, rsp,
4114                                L2CAP_CONF_REJECT, flags), rsp);
4115                 goto unlock;
4116         }
4117
4118         /* Store config. */
4119         memcpy(chan->conf_req + chan->conf_len, req->data, len);
4120         chan->conf_len += len;
4121
4122         if (flags & L2CAP_CONF_FLAG_CONTINUATION) {
4123                 /* Incomplete config. Send empty response. */
4124                 l2cap_send_cmd(conn, cmd->ident, L2CAP_CONF_RSP,
4125                                l2cap_build_conf_rsp(chan, rsp,
4126                                L2CAP_CONF_SUCCESS, flags), rsp);
4127                 goto unlock;
4128         }
4129
4130         /* Complete config. */
4131         len = l2cap_parse_conf_req(chan, rsp, sizeof(rsp));
4132         if (len < 0) {
4133                 l2cap_send_disconn_req(chan, ECONNRESET);
4134                 goto unlock;
4135         }
4136
4137         chan->ident = cmd->ident;
4138         l2cap_send_cmd(conn, cmd->ident, L2CAP_CONF_RSP, len, rsp);
4139         chan->num_conf_rsp++;
4140
4141         /* Reset config buffer. */
4142         chan->conf_len = 0;
4143
4144         if (!test_bit(CONF_OUTPUT_DONE, &chan->conf_state))
4145                 goto unlock;
4146
4147         if (test_bit(CONF_INPUT_DONE, &chan->conf_state)) {
4148                 set_default_fcs(chan);
4149
4150                 if (chan->mode == L2CAP_MODE_ERTM ||
4151                     chan->mode == L2CAP_MODE_STREAMING)
4152                         err = l2cap_ertm_init(chan);
4153
4154                 if (err < 0)
4155                         l2cap_send_disconn_req(chan, -err);
4156                 else
4157                         l2cap_chan_ready(chan);
4158
4159                 goto unlock;
4160         }
4161
4162         if (!test_and_set_bit(CONF_REQ_SENT, &chan->conf_state)) {
4163                 u8 buf[64];
4164                 l2cap_send_cmd(conn, l2cap_get_ident(conn), L2CAP_CONF_REQ,
4165                                l2cap_build_conf_req(chan, buf, sizeof(buf)), buf);
4166                 chan->num_conf_req++;
4167         }
4168
4169         /* Got Conf Rsp PENDING from remote side and assume we sent
4170            Conf Rsp PENDING in the code above */
4171         if (test_bit(CONF_REM_CONF_PEND, &chan->conf_state) &&
4172             test_bit(CONF_LOC_CONF_PEND, &chan->conf_state)) {
4173
4174                 /* check compatibility */
4175
4176                 /* Send rsp for BR/EDR channel */
4177                 if (!chan->hs_hcon)
4178                         l2cap_send_efs_conf_rsp(chan, rsp, cmd->ident, flags);
4179                 else
4180                         chan->ident = cmd->ident;
4181         }
4182
4183 unlock:
4184         l2cap_chan_unlock(chan);
4185         return err;
4186 }
4187
4188 static inline int l2cap_config_rsp(struct l2cap_conn *conn,
4189                                    struct l2cap_cmd_hdr *cmd, u16 cmd_len,
4190                                    u8 *data)
4191 {
4192         struct l2cap_conf_rsp *rsp = (struct l2cap_conf_rsp *)data;
4193         u16 scid, flags, result;
4194         struct l2cap_chan *chan;
4195         int len = cmd_len - sizeof(*rsp);
4196         int err = 0;
4197
4198         if (cmd_len < sizeof(*rsp))
4199                 return -EPROTO;
4200
4201         scid   = __le16_to_cpu(rsp->scid);
4202         flags  = __le16_to_cpu(rsp->flags);
4203         result = __le16_to_cpu(rsp->result);
4204
4205         BT_DBG("scid 0x%4.4x flags 0x%2.2x result 0x%2.2x len %d", scid, flags,
4206                result, len);
4207
4208         chan = l2cap_get_chan_by_scid(conn, scid);
4209         if (!chan)
4210                 return 0;
4211
4212         switch (result) {
4213         case L2CAP_CONF_SUCCESS:
4214                 l2cap_conf_rfc_get(chan, rsp->data, len);
4215                 clear_bit(CONF_REM_CONF_PEND, &chan->conf_state);
4216                 break;
4217
4218         case L2CAP_CONF_PENDING:
4219                 set_bit(CONF_REM_CONF_PEND, &chan->conf_state);
4220
4221                 if (test_bit(CONF_LOC_CONF_PEND, &chan->conf_state)) {
4222                         char buf[64];
4223
4224                         len = l2cap_parse_conf_rsp(chan, rsp->data, len,
4225                                                    buf, sizeof(buf), &result);
4226                         if (len < 0) {
4227                                 l2cap_send_disconn_req(chan, ECONNRESET);
4228                                 goto done;
4229                         }
4230
4231                         if (!chan->hs_hcon) {
4232                                 l2cap_send_efs_conf_rsp(chan, buf, cmd->ident,
4233                                                         0);
4234                         } else {
4235                                 if (l2cap_check_efs(chan)) {
4236                                         amp_create_logical_link(chan);
4237                                         chan->ident = cmd->ident;
4238                                 }
4239                         }
4240                 }
4241                 goto done;
4242
4243         case L2CAP_CONF_UNACCEPT:
4244                 if (chan->num_conf_rsp <= L2CAP_CONF_MAX_CONF_RSP) {
4245                         char req[64];
4246
4247                         if (len > sizeof(req) - sizeof(struct l2cap_conf_req)) {
4248                                 l2cap_send_disconn_req(chan, ECONNRESET);
4249                                 goto done;
4250                         }
4251
4252                         /* throw out any old stored conf requests */
4253                         result = L2CAP_CONF_SUCCESS;
4254                         len = l2cap_parse_conf_rsp(chan, rsp->data, len,
4255                                                    req, sizeof(req), &result);
4256                         if (len < 0) {
4257                                 l2cap_send_disconn_req(chan, ECONNRESET);
4258                                 goto done;
4259                         }
4260
4261                         l2cap_send_cmd(conn, l2cap_get_ident(conn),
4262                                        L2CAP_CONF_REQ, len, req);
4263                         chan->num_conf_req++;
4264                         if (result != L2CAP_CONF_SUCCESS)
4265                                 goto done;
4266                         break;
4267                 }
4268                 /* fall through */
4269
4270         default:
4271                 l2cap_chan_set_err(chan, ECONNRESET);
4272
4273                 __set_chan_timer(chan, L2CAP_DISC_REJ_TIMEOUT);
4274                 l2cap_send_disconn_req(chan, ECONNRESET);
4275                 goto done;
4276         }
4277
4278         if (flags & L2CAP_CONF_FLAG_CONTINUATION)
4279                 goto done;
4280
4281         set_bit(CONF_INPUT_DONE, &chan->conf_state);
4282
4283         if (test_bit(CONF_OUTPUT_DONE, &chan->conf_state)) {
4284                 set_default_fcs(chan);
4285
4286                 if (chan->mode == L2CAP_MODE_ERTM ||
4287                     chan->mode == L2CAP_MODE_STREAMING)
4288                         err = l2cap_ertm_init(chan);
4289
4290                 if (err < 0)
4291                         l2cap_send_disconn_req(chan, -err);
4292                 else
4293                         l2cap_chan_ready(chan);
4294         }
4295
4296 done:
4297         l2cap_chan_unlock(chan);
4298         return err;
4299 }
4300
4301 static inline int l2cap_disconnect_req(struct l2cap_conn *conn,
4302                                        struct l2cap_cmd_hdr *cmd, u16 cmd_len,
4303                                        u8 *data)
4304 {
4305         struct l2cap_disconn_req *req = (struct l2cap_disconn_req *) data;
4306         struct l2cap_disconn_rsp rsp;
4307         u16 dcid, scid;
4308         struct l2cap_chan *chan;
4309
4310         if (cmd_len != sizeof(*req))
4311                 return -EPROTO;
4312
4313         scid = __le16_to_cpu(req->scid);
4314         dcid = __le16_to_cpu(req->dcid);
4315
4316         BT_DBG("scid 0x%4.4x dcid 0x%4.4x", scid, dcid);
4317
4318         mutex_lock(&conn->chan_lock);
4319
4320         chan = __l2cap_get_chan_by_scid(conn, dcid);
4321         if (!chan) {
4322                 mutex_unlock(&conn->chan_lock);
4323                 cmd_reject_invalid_cid(conn, cmd->ident, dcid, scid);
4324                 return 0;
4325         }
4326
4327         l2cap_chan_lock(chan);
4328
4329         rsp.dcid = cpu_to_le16(chan->scid);
4330         rsp.scid = cpu_to_le16(chan->dcid);
4331         l2cap_send_cmd(conn, cmd->ident, L2CAP_DISCONN_RSP, sizeof(rsp), &rsp);
4332
4333         chan->ops->set_shutdown(chan);
4334
4335         l2cap_chan_hold(chan);
4336         l2cap_chan_del(chan, ECONNRESET);
4337
4338         l2cap_chan_unlock(chan);
4339
4340         chan->ops->close(chan);
4341         l2cap_chan_put(chan);
4342
4343         mutex_unlock(&conn->chan_lock);
4344
4345         return 0;
4346 }
4347
4348 static inline int l2cap_disconnect_rsp(struct l2cap_conn *conn,
4349                                        struct l2cap_cmd_hdr *cmd, u16 cmd_len,
4350                                        u8 *data)
4351 {
4352         struct l2cap_disconn_rsp *rsp = (struct l2cap_disconn_rsp *) data;
4353         u16 dcid, scid;
4354         struct l2cap_chan *chan;
4355
4356         if (cmd_len != sizeof(*rsp))
4357                 return -EPROTO;
4358
4359         scid = __le16_to_cpu(rsp->scid);
4360         dcid = __le16_to_cpu(rsp->dcid);
4361
4362         BT_DBG("dcid 0x%4.4x scid 0x%4.4x", dcid, scid);
4363
4364         mutex_lock(&conn->chan_lock);
4365
4366         chan = __l2cap_get_chan_by_scid(conn, scid);
4367         if (!chan) {
4368                 mutex_unlock(&conn->chan_lock);
4369                 return 0;
4370         }
4371
4372         l2cap_chan_lock(chan);
4373
4374         l2cap_chan_hold(chan);
4375         l2cap_chan_del(chan, 0);
4376
4377         l2cap_chan_unlock(chan);
4378
4379         chan->ops->close(chan);
4380         l2cap_chan_put(chan);
4381
4382         mutex_unlock(&conn->chan_lock);
4383
4384         return 0;
4385 }
4386
4387 static inline int l2cap_information_req(struct l2cap_conn *conn,
4388                                         struct l2cap_cmd_hdr *cmd, u16 cmd_len,
4389                                         u8 *data)
4390 {
4391         struct l2cap_info_req *req = (struct l2cap_info_req *) data;
4392         u16 type;
4393
4394         if (cmd_len != sizeof(*req))
4395                 return -EPROTO;
4396
4397         type = __le16_to_cpu(req->type);
4398
4399         BT_DBG("type 0x%4.4x", type);
4400
4401         if (type == L2CAP_IT_FEAT_MASK) {
4402                 u8 buf[8];
4403                 u32 feat_mask = l2cap_feat_mask;
4404                 struct l2cap_info_rsp *rsp = (struct l2cap_info_rsp *) buf;
4405                 rsp->type   = cpu_to_le16(L2CAP_IT_FEAT_MASK);
4406                 rsp->result = cpu_to_le16(L2CAP_IR_SUCCESS);
4407                 if (!disable_ertm)
4408                         feat_mask |= L2CAP_FEAT_ERTM | L2CAP_FEAT_STREAMING
4409                                 | L2CAP_FEAT_FCS;
4410                 if (conn->local_fixed_chan & L2CAP_FC_A2MP)
4411                         feat_mask |= L2CAP_FEAT_EXT_FLOW
4412                                 | L2CAP_FEAT_EXT_WINDOW;
4413
4414                 put_unaligned_le32(feat_mask, rsp->data);
4415                 l2cap_send_cmd(conn, cmd->ident, L2CAP_INFO_RSP, sizeof(buf),
4416                                buf);
4417         } else if (type == L2CAP_IT_FIXED_CHAN) {
4418                 u8 buf[12];
4419                 struct l2cap_info_rsp *rsp = (struct l2cap_info_rsp *) buf;
4420
4421                 rsp->type   = cpu_to_le16(L2CAP_IT_FIXED_CHAN);
4422                 rsp->result = cpu_to_le16(L2CAP_IR_SUCCESS);
4423                 rsp->data[0] = conn->local_fixed_chan;
4424                 memset(rsp->data + 1, 0, 7);
4425                 l2cap_send_cmd(conn, cmd->ident, L2CAP_INFO_RSP, sizeof(buf),
4426                                buf);
4427         } else {
4428                 struct l2cap_info_rsp rsp;
4429                 rsp.type   = cpu_to_le16(type);
4430                 rsp.result = cpu_to_le16(L2CAP_IR_NOTSUPP);
4431                 l2cap_send_cmd(conn, cmd->ident, L2CAP_INFO_RSP, sizeof(rsp),
4432                                &rsp);
4433         }
4434
4435         return 0;
4436 }
4437
4438 static inline int l2cap_information_rsp(struct l2cap_conn *conn,
4439                                         struct l2cap_cmd_hdr *cmd, u16 cmd_len,
4440                                         u8 *data)
4441 {
4442         struct l2cap_info_rsp *rsp = (struct l2cap_info_rsp *) data;
4443         u16 type, result;
4444
4445         if (cmd_len < sizeof(*rsp))
4446                 return -EPROTO;
4447
4448         type   = __le16_to_cpu(rsp->type);
4449         result = __le16_to_cpu(rsp->result);
4450
4451         BT_DBG("type 0x%4.4x result 0x%2.2x", type, result);
4452
4453         /* L2CAP Info req/rsp are unbound to channels, add extra checks */
4454         if (cmd->ident != conn->info_ident ||
4455             conn->info_state & L2CAP_INFO_FEAT_MASK_REQ_DONE)
4456                 return 0;
4457
4458         cancel_delayed_work(&conn->info_timer);
4459
4460         if (result != L2CAP_IR_SUCCESS) {
4461                 conn->info_state |= L2CAP_INFO_FEAT_MASK_REQ_DONE;
4462                 conn->info_ident = 0;
4463
4464                 l2cap_conn_start(conn);
4465
4466                 return 0;
4467         }
4468
4469         switch (type) {
4470         case L2CAP_IT_FEAT_MASK:
4471                 conn->feat_mask = get_unaligned_le32(rsp->data);
4472
4473                 if (conn->feat_mask & L2CAP_FEAT_FIXED_CHAN) {
4474                         struct l2cap_info_req req;
4475                         req.type = cpu_to_le16(L2CAP_IT_FIXED_CHAN);
4476
4477                         conn->info_ident = l2cap_get_ident(conn);
4478
4479                         l2cap_send_cmd(conn, conn->info_ident,
4480                                        L2CAP_INFO_REQ, sizeof(req), &req);
4481                 } else {
4482                         conn->info_state |= L2CAP_INFO_FEAT_MASK_REQ_DONE;
4483                         conn->info_ident = 0;
4484
4485                         l2cap_conn_start(conn);
4486                 }
4487                 break;
4488
4489         case L2CAP_IT_FIXED_CHAN:
4490                 conn->remote_fixed_chan = rsp->data[0];
4491                 conn->info_state |= L2CAP_INFO_FEAT_MASK_REQ_DONE;
4492                 conn->info_ident = 0;
4493
4494                 l2cap_conn_start(conn);
4495                 break;
4496         }
4497
4498         return 0;
4499 }
4500
4501 static int l2cap_create_channel_req(struct l2cap_conn *conn,
4502                                     struct l2cap_cmd_hdr *cmd,
4503                                     u16 cmd_len, void *data)
4504 {
4505         struct l2cap_create_chan_req *req = data;
4506         struct l2cap_create_chan_rsp rsp;
4507         struct l2cap_chan *chan;
4508         struct hci_dev *hdev;
4509         u16 psm, scid;
4510
4511         if (cmd_len != sizeof(*req))
4512                 return -EPROTO;
4513
4514         if (!(conn->local_fixed_chan & L2CAP_FC_A2MP))
4515                 return -EINVAL;
4516
4517         psm = le16_to_cpu(req->psm);
4518         scid = le16_to_cpu(req->scid);
4519
4520         BT_DBG("psm 0x%2.2x, scid 0x%4.4x, amp_id %d", psm, scid, req->amp_id);
4521
4522         /* For controller id 0 make BR/EDR connection */
4523         if (req->amp_id == AMP_ID_BREDR) {
4524                 l2cap_connect(conn, cmd, data, L2CAP_CREATE_CHAN_RSP,
4525                               req->amp_id);
4526                 return 0;
4527         }
4528
4529         /* Validate AMP controller id */
4530         hdev = hci_dev_get(req->amp_id);
4531         if (!hdev)
4532                 goto error;
4533
4534         if (hdev->dev_type != HCI_AMP || !test_bit(HCI_UP, &hdev->flags)) {
4535                 hci_dev_put(hdev);
4536                 goto error;
4537         }
4538
4539         chan = l2cap_connect(conn, cmd, data, L2CAP_CREATE_CHAN_RSP,
4540                              req->amp_id);
4541         if (chan) {
4542                 struct amp_mgr *mgr = conn->hcon->amp_mgr;
4543                 struct hci_conn *hs_hcon;
4544
4545                 hs_hcon = hci_conn_hash_lookup_ba(hdev, AMP_LINK,
4546                                                   &conn->hcon->dst);
4547                 if (!hs_hcon) {
4548                         hci_dev_put(hdev);
4549                         cmd_reject_invalid_cid(conn, cmd->ident, chan->scid,
4550                                                chan->dcid);
4551                         return 0;
4552                 }
4553
4554                 BT_DBG("mgr %p bredr_chan %p hs_hcon %p", mgr, chan, hs_hcon);
4555
4556                 mgr->bredr_chan = chan;
4557                 chan->hs_hcon = hs_hcon;
4558                 chan->fcs = L2CAP_FCS_NONE;
4559                 conn->mtu = hdev->block_mtu;
4560         }
4561
4562         hci_dev_put(hdev);
4563
4564         return 0;
4565
4566 error:
4567         rsp.dcid = 0;
4568         rsp.scid = cpu_to_le16(scid);
4569         rsp.result = cpu_to_le16(L2CAP_CR_BAD_AMP);
4570         rsp.status = cpu_to_le16(L2CAP_CS_NO_INFO);
4571
4572         l2cap_send_cmd(conn, cmd->ident, L2CAP_CREATE_CHAN_RSP,
4573                        sizeof(rsp), &rsp);
4574
4575         return 0;
4576 }
4577
4578 static void l2cap_send_move_chan_req(struct l2cap_chan *chan, u8 dest_amp_id)
4579 {
4580         struct l2cap_move_chan_req req;
4581         u8 ident;
4582
4583         BT_DBG("chan %p, dest_amp_id %d", chan, dest_amp_id);
4584
4585         ident = l2cap_get_ident(chan->conn);
4586         chan->ident = ident;
4587
4588         req.icid = cpu_to_le16(chan->scid);
4589         req.dest_amp_id = dest_amp_id;
4590
4591         l2cap_send_cmd(chan->conn, ident, L2CAP_MOVE_CHAN_REQ, sizeof(req),
4592                        &req);
4593
4594         __set_chan_timer(chan, L2CAP_MOVE_TIMEOUT);
4595 }
4596
4597 static void l2cap_send_move_chan_rsp(struct l2cap_chan *chan, u16 result)
4598 {
4599         struct l2cap_move_chan_rsp rsp;
4600
4601         BT_DBG("chan %p, result 0x%4.4x", chan, result);
4602
4603         rsp.icid = cpu_to_le16(chan->dcid);
4604         rsp.result = cpu_to_le16(result);
4605
4606         l2cap_send_cmd(chan->conn, chan->ident, L2CAP_MOVE_CHAN_RSP,
4607                        sizeof(rsp), &rsp);
4608 }
4609
4610 static void l2cap_send_move_chan_cfm(struct l2cap_chan *chan, u16 result)
4611 {
4612         struct l2cap_move_chan_cfm cfm;
4613
4614         BT_DBG("chan %p, result 0x%4.4x", chan, result);
4615
4616         chan->ident = l2cap_get_ident(chan->conn);
4617
4618         cfm.icid = cpu_to_le16(chan->scid);
4619         cfm.result = cpu_to_le16(result);
4620
4621         l2cap_send_cmd(chan->conn, chan->ident, L2CAP_MOVE_CHAN_CFM,
4622                        sizeof(cfm), &cfm);
4623
4624         __set_chan_timer(chan, L2CAP_MOVE_TIMEOUT);
4625 }
4626
4627 static void l2cap_send_move_chan_cfm_icid(struct l2cap_conn *conn, u16 icid)
4628 {
4629         struct l2cap_move_chan_cfm cfm;
4630
4631         BT_DBG("conn %p, icid 0x%4.4x", conn, icid);
4632
4633         cfm.icid = cpu_to_le16(icid);
4634         cfm.result = cpu_to_le16(L2CAP_MC_UNCONFIRMED);
4635
4636         l2cap_send_cmd(conn, l2cap_get_ident(conn), L2CAP_MOVE_CHAN_CFM,
4637                        sizeof(cfm), &cfm);
4638 }
4639
4640 static void l2cap_send_move_chan_cfm_rsp(struct l2cap_conn *conn, u8 ident,
4641                                          u16 icid)
4642 {
4643         struct l2cap_move_chan_cfm_rsp rsp;
4644
4645         BT_DBG("icid 0x%4.4x", icid);
4646
4647         rsp.icid = cpu_to_le16(icid);
4648         l2cap_send_cmd(conn, ident, L2CAP_MOVE_CHAN_CFM_RSP, sizeof(rsp), &rsp);
4649 }
4650
4651 static void __release_logical_link(struct l2cap_chan *chan)
4652 {
4653         chan->hs_hchan = NULL;
4654         chan->hs_hcon = NULL;
4655
4656         /* Placeholder - release the logical link */
4657 }
4658
4659 static void l2cap_logical_fail(struct l2cap_chan *chan)
4660 {
4661         /* Logical link setup failed */
4662         if (chan->state != BT_CONNECTED) {
4663                 /* Create channel failure, disconnect */
4664                 l2cap_send_disconn_req(chan, ECONNRESET);
4665                 return;
4666         }
4667
4668         switch (chan->move_role) {
4669         case L2CAP_MOVE_ROLE_RESPONDER:
4670                 l2cap_move_done(chan);
4671                 l2cap_send_move_chan_rsp(chan, L2CAP_MR_NOT_SUPP);
4672                 break;
4673         case L2CAP_MOVE_ROLE_INITIATOR:
4674                 if (chan->move_state == L2CAP_MOVE_WAIT_LOGICAL_COMP ||
4675                     chan->move_state == L2CAP_MOVE_WAIT_LOGICAL_CFM) {
4676                         /* Remote has only sent pending or
4677                          * success responses, clean up
4678                          */
4679                         l2cap_move_done(chan);
4680                 }
4681
4682                 /* Other amp move states imply that the move
4683                  * has already aborted
4684                  */
4685                 l2cap_send_move_chan_cfm(chan, L2CAP_MC_UNCONFIRMED);
4686                 break;
4687         }
4688 }
4689
4690 static void l2cap_logical_finish_create(struct l2cap_chan *chan,
4691                                         struct hci_chan *hchan)
4692 {
4693         struct l2cap_conf_rsp rsp;
4694
4695         chan->hs_hchan = hchan;
4696         chan->hs_hcon->l2cap_data = chan->conn;
4697
4698         l2cap_send_efs_conf_rsp(chan, &rsp, chan->ident, 0);
4699
4700         if (test_bit(CONF_INPUT_DONE, &chan->conf_state)) {
4701                 int err;
4702
4703                 set_default_fcs(chan);
4704
4705                 err = l2cap_ertm_init(chan);
4706                 if (err < 0)
4707                         l2cap_send_disconn_req(chan, -err);
4708                 else
4709                         l2cap_chan_ready(chan);
4710         }
4711 }
4712
4713 static void l2cap_logical_finish_move(struct l2cap_chan *chan,
4714                                       struct hci_chan *hchan)
4715 {
4716         chan->hs_hcon = hchan->conn;
4717         chan->hs_hcon->l2cap_data = chan->conn;
4718
4719         BT_DBG("move_state %d", chan->move_state);
4720
4721         switch (chan->move_state) {
4722         case L2CAP_MOVE_WAIT_LOGICAL_COMP:
4723                 /* Move confirm will be sent after a success
4724                  * response is received
4725                  */
4726                 chan->move_state = L2CAP_MOVE_WAIT_RSP_SUCCESS;
4727                 break;
4728         case L2CAP_MOVE_WAIT_LOGICAL_CFM:
4729                 if (test_bit(CONN_LOCAL_BUSY, &chan->conn_state)) {
4730                         chan->move_state = L2CAP_MOVE_WAIT_LOCAL_BUSY;
4731                 } else if (chan->move_role == L2CAP_MOVE_ROLE_INITIATOR) {
4732                         chan->move_state = L2CAP_MOVE_WAIT_CONFIRM_RSP;
4733                         l2cap_send_move_chan_cfm(chan, L2CAP_MC_CONFIRMED);
4734                 } else if (chan->move_role == L2CAP_MOVE_ROLE_RESPONDER) {
4735                         chan->move_state = L2CAP_MOVE_WAIT_CONFIRM;
4736                         l2cap_send_move_chan_rsp(chan, L2CAP_MR_SUCCESS);
4737                 }
4738                 break;
4739         default:
4740                 /* Move was not in expected state, free the channel */
4741                 __release_logical_link(chan);
4742
4743                 chan->move_state = L2CAP_MOVE_STABLE;
4744         }
4745 }
4746
4747 /* Call with chan locked */
4748 void l2cap_logical_cfm(struct l2cap_chan *chan, struct hci_chan *hchan,
4749                        u8 status)
4750 {
4751         BT_DBG("chan %p, hchan %p, status %d", chan, hchan, status);
4752
4753         if (status) {
4754                 l2cap_logical_fail(chan);
4755                 __release_logical_link(chan);
4756                 return;
4757         }
4758
4759         if (chan->state != BT_CONNECTED) {
4760                 /* Ignore logical link if channel is on BR/EDR */
4761                 if (chan->local_amp_id != AMP_ID_BREDR)
4762                         l2cap_logical_finish_create(chan, hchan);
4763         } else {
4764                 l2cap_logical_finish_move(chan, hchan);
4765         }
4766 }
4767
4768 void l2cap_move_start(struct l2cap_chan *chan)
4769 {
4770         BT_DBG("chan %p", chan);
4771
4772         if (chan->local_amp_id == AMP_ID_BREDR) {
4773                 if (chan->chan_policy != BT_CHANNEL_POLICY_AMP_PREFERRED)
4774                         return;
4775                 chan->move_role = L2CAP_MOVE_ROLE_INITIATOR;
4776                 chan->move_state = L2CAP_MOVE_WAIT_PREPARE;
4777                 /* Placeholder - start physical link setup */
4778         } else {
4779                 chan->move_role = L2CAP_MOVE_ROLE_INITIATOR;
4780                 chan->move_state = L2CAP_MOVE_WAIT_RSP_SUCCESS;
4781                 chan->move_id = 0;
4782                 l2cap_move_setup(chan);
4783                 l2cap_send_move_chan_req(chan, 0);
4784         }
4785 }
4786
4787 static void l2cap_do_create(struct l2cap_chan *chan, int result,
4788                             u8 local_amp_id, u8 remote_amp_id)
4789 {
4790         BT_DBG("chan %p state %s %u -> %u", chan, state_to_string(chan->state),
4791                local_amp_id, remote_amp_id);
4792
4793         chan->fcs = L2CAP_FCS_NONE;
4794
4795         /* Outgoing channel on AMP */
4796         if (chan->state == BT_CONNECT) {
4797                 if (result == L2CAP_CR_SUCCESS) {
4798                         chan->local_amp_id = local_amp_id;
4799                         l2cap_send_create_chan_req(chan, remote_amp_id);
4800                 } else {
4801                         /* Revert to BR/EDR connect */
4802                         l2cap_send_conn_req(chan);
4803                 }
4804
4805                 return;
4806         }
4807
4808         /* Incoming channel on AMP */
4809         if (__l2cap_no_conn_pending(chan)) {
4810                 struct l2cap_conn_rsp rsp;
4811                 char buf[128];
4812                 rsp.scid = cpu_to_le16(chan->dcid);
4813                 rsp.dcid = cpu_to_le16(chan->scid);
4814
4815                 if (result == L2CAP_CR_SUCCESS) {
4816                         /* Send successful response */
4817                         rsp.result = cpu_to_le16(L2CAP_CR_SUCCESS);
4818                         rsp.status = cpu_to_le16(L2CAP_CS_NO_INFO);
4819                 } else {
4820                         /* Send negative response */
4821                         rsp.result = cpu_to_le16(L2CAP_CR_NO_MEM);
4822                         rsp.status = cpu_to_le16(L2CAP_CS_NO_INFO);
4823                 }
4824
4825                 l2cap_send_cmd(chan->conn, chan->ident, L2CAP_CREATE_CHAN_RSP,
4826                                sizeof(rsp), &rsp);
4827
4828                 if (result == L2CAP_CR_SUCCESS) {
4829                         l2cap_state_change(chan, BT_CONFIG);
4830                         set_bit(CONF_REQ_SENT, &chan->conf_state);
4831                         l2cap_send_cmd(chan->conn, l2cap_get_ident(chan->conn),
4832                                        L2CAP_CONF_REQ,
4833                                        l2cap_build_conf_req(chan, buf, sizeof(buf)), buf);
4834                         chan->num_conf_req++;
4835                 }
4836         }
4837 }
4838
4839 static void l2cap_do_move_initiate(struct l2cap_chan *chan, u8 local_amp_id,
4840                                    u8 remote_amp_id)
4841 {
4842         l2cap_move_setup(chan);
4843         chan->move_id = local_amp_id;
4844         chan->move_state = L2CAP_MOVE_WAIT_RSP;
4845
4846         l2cap_send_move_chan_req(chan, remote_amp_id);
4847 }
4848
4849 static void l2cap_do_move_respond(struct l2cap_chan *chan, int result)
4850 {
4851         struct hci_chan *hchan = NULL;
4852
4853         /* Placeholder - get hci_chan for logical link */
4854
4855         if (hchan) {
4856                 if (hchan->state == BT_CONNECTED) {
4857                         /* Logical link is ready to go */
4858                         chan->hs_hcon = hchan->conn;
4859                         chan->hs_hcon->l2cap_data = chan->conn;
4860                         chan->move_state = L2CAP_MOVE_WAIT_CONFIRM;
4861                         l2cap_send_move_chan_rsp(chan, L2CAP_MR_SUCCESS);
4862
4863                         l2cap_logical_cfm(chan, hchan, L2CAP_MR_SUCCESS);
4864                 } else {
4865                         /* Wait for logical link to be ready */
4866                         chan->move_state = L2CAP_MOVE_WAIT_LOGICAL_CFM;
4867                 }
4868         } else {
4869                 /* Logical link not available */
4870                 l2cap_send_move_chan_rsp(chan, L2CAP_MR_NOT_ALLOWED);
4871         }
4872 }
4873
4874 static void l2cap_do_move_cancel(struct l2cap_chan *chan, int result)
4875 {
4876         if (chan->move_role == L2CAP_MOVE_ROLE_RESPONDER) {
4877                 u8 rsp_result;
4878                 if (result == -EINVAL)
4879                         rsp_result = L2CAP_MR_BAD_ID;
4880                 else
4881                         rsp_result = L2CAP_MR_NOT_ALLOWED;
4882
4883                 l2cap_send_move_chan_rsp(chan, rsp_result);
4884         }
4885
4886         chan->move_role = L2CAP_MOVE_ROLE_NONE;
4887         chan->move_state = L2CAP_MOVE_STABLE;
4888
4889         /* Restart data transmission */
4890         l2cap_ertm_send(chan);
4891 }
4892
4893 /* Invoke with locked chan */
4894 void __l2cap_physical_cfm(struct l2cap_chan *chan, int result)
4895 {
4896         u8 local_amp_id = chan->local_amp_id;
4897         u8 remote_amp_id = chan->remote_amp_id;
4898
4899         BT_DBG("chan %p, result %d, local_amp_id %d, remote_amp_id %d",
4900                chan, result, local_amp_id, remote_amp_id);
4901
4902         if (chan->state == BT_DISCONN || chan->state == BT_CLOSED) {
4903                 l2cap_chan_unlock(chan);
4904                 return;
4905         }
4906
4907         if (chan->state != BT_CONNECTED) {
4908                 l2cap_do_create(chan, result, local_amp_id, remote_amp_id);
4909         } else if (result != L2CAP_MR_SUCCESS) {
4910                 l2cap_do_move_cancel(chan, result);
4911         } else {
4912                 switch (chan->move_role) {
4913                 case L2CAP_MOVE_ROLE_INITIATOR:
4914                         l2cap_do_move_initiate(chan, local_amp_id,
4915                                                remote_amp_id);
4916                         break;
4917                 case L2CAP_MOVE_ROLE_RESPONDER:
4918                         l2cap_do_move_respond(chan, result);
4919                         break;
4920                 default:
4921                         l2cap_do_move_cancel(chan, result);
4922                         break;
4923                 }
4924         }
4925 }
4926
4927 static inline int l2cap_move_channel_req(struct l2cap_conn *conn,
4928                                          struct l2cap_cmd_hdr *cmd,
4929                                          u16 cmd_len, void *data)
4930 {
4931         struct l2cap_move_chan_req *req = data;
4932         struct l2cap_move_chan_rsp rsp;
4933         struct l2cap_chan *chan;
4934         u16 icid = 0;
4935         u16 result = L2CAP_MR_NOT_ALLOWED;
4936
4937         if (cmd_len != sizeof(*req))
4938                 return -EPROTO;
4939
4940         icid = le16_to_cpu(req->icid);
4941
4942         BT_DBG("icid 0x%4.4x, dest_amp_id %d", icid, req->dest_amp_id);
4943
4944         if (!(conn->local_fixed_chan & L2CAP_FC_A2MP))
4945                 return -EINVAL;
4946
4947         chan = l2cap_get_chan_by_dcid(conn, icid);
4948         if (!chan) {
4949                 rsp.icid = cpu_to_le16(icid);
4950                 rsp.result = cpu_to_le16(L2CAP_MR_NOT_ALLOWED);
4951                 l2cap_send_cmd(conn, cmd->ident, L2CAP_MOVE_CHAN_RSP,
4952                                sizeof(rsp), &rsp);
4953                 return 0;
4954         }
4955
4956         chan->ident = cmd->ident;
4957
4958         if (chan->scid < L2CAP_CID_DYN_START ||
4959             chan->chan_policy == BT_CHANNEL_POLICY_BREDR_ONLY ||
4960             (chan->mode != L2CAP_MODE_ERTM &&
4961              chan->mode != L2CAP_MODE_STREAMING)) {
4962                 result = L2CAP_MR_NOT_ALLOWED;
4963                 goto send_move_response;
4964         }
4965
4966         if (chan->local_amp_id == req->dest_amp_id) {
4967                 result = L2CAP_MR_SAME_ID;
4968                 goto send_move_response;
4969         }
4970
4971         if (req->dest_amp_id != AMP_ID_BREDR) {
4972                 struct hci_dev *hdev;
4973                 hdev = hci_dev_get(req->dest_amp_id);
4974                 if (!hdev || hdev->dev_type != HCI_AMP ||
4975                     !test_bit(HCI_UP, &hdev->flags)) {
4976                         if (hdev)
4977                                 hci_dev_put(hdev);
4978
4979                         result = L2CAP_MR_BAD_ID;
4980                         goto send_move_response;
4981                 }
4982                 hci_dev_put(hdev);
4983         }
4984
4985         /* Detect a move collision.  Only send a collision response
4986          * if this side has "lost", otherwise proceed with the move.
4987          * The winner has the larger bd_addr.
4988          */
4989         if ((__chan_is_moving(chan) ||
4990              chan->move_role != L2CAP_MOVE_ROLE_NONE) &&
4991             bacmp(&conn->hcon->src, &conn->hcon->dst) > 0) {
4992                 result = L2CAP_MR_COLLISION;
4993                 goto send_move_response;
4994         }
4995
4996         chan->move_role = L2CAP_MOVE_ROLE_RESPONDER;
4997         l2cap_move_setup(chan);
4998         chan->move_id = req->dest_amp_id;
4999         icid = chan->dcid;
5000
5001         if (req->dest_amp_id == AMP_ID_BREDR) {
5002                 /* Moving to BR/EDR */
5003                 if (test_bit(CONN_LOCAL_BUSY, &chan->conn_state)) {
5004                         chan->move_state = L2CAP_MOVE_WAIT_LOCAL_BUSY;
5005                         result = L2CAP_MR_PEND;
5006                 } else {
5007                         chan->move_state = L2CAP_MOVE_WAIT_CONFIRM;
5008                         result = L2CAP_MR_SUCCESS;
5009                 }
5010         } else {
5011                 chan->move_state = L2CAP_MOVE_WAIT_PREPARE;
5012                 /* Placeholder - uncomment when amp functions are available */
5013                 /*amp_accept_physical(chan, req->dest_amp_id);*/
5014                 result = L2CAP_MR_PEND;
5015         }
5016
5017 send_move_response:
5018         l2cap_send_move_chan_rsp(chan, result);
5019
5020         l2cap_chan_unlock(chan);
5021
5022         return 0;
5023 }
5024
5025 static void l2cap_move_continue(struct l2cap_conn *conn, u16 icid, u16 result)
5026 {
5027         struct l2cap_chan *chan;
5028         struct hci_chan *hchan = NULL;
5029
5030         chan = l2cap_get_chan_by_scid(conn, icid);
5031         if (!chan) {
5032                 l2cap_send_move_chan_cfm_icid(conn, icid);
5033                 return;
5034         }
5035
5036         __clear_chan_timer(chan);
5037         if (result == L2CAP_MR_PEND)
5038                 __set_chan_timer(chan, L2CAP_MOVE_ERTX_TIMEOUT);
5039
5040         switch (chan->move_state) {
5041         case L2CAP_MOVE_WAIT_LOGICAL_COMP:
5042                 /* Move confirm will be sent when logical link
5043                  * is complete.
5044                  */
5045                 chan->move_state = L2CAP_MOVE_WAIT_LOGICAL_CFM;
5046                 break;
5047         case L2CAP_MOVE_WAIT_RSP_SUCCESS:
5048                 if (result == L2CAP_MR_PEND) {
5049                         break;
5050                 } else if (test_bit(CONN_LOCAL_BUSY,
5051                                     &chan->conn_state)) {
5052                         chan->move_state = L2CAP_MOVE_WAIT_LOCAL_BUSY;
5053                 } else {
5054                         /* Logical link is up or moving to BR/EDR,
5055                          * proceed with move
5056                          */
5057                         chan->move_state = L2CAP_MOVE_WAIT_CONFIRM_RSP;
5058                         l2cap_send_move_chan_cfm(chan, L2CAP_MC_CONFIRMED);
5059                 }
5060                 break;
5061         case L2CAP_MOVE_WAIT_RSP:
5062                 /* Moving to AMP */
5063                 if (result == L2CAP_MR_SUCCESS) {
5064                         /* Remote is ready, send confirm immediately
5065                          * after logical link is ready
5066                          */
5067                         chan->move_state = L2CAP_MOVE_WAIT_LOGICAL_CFM;
5068                 } else {
5069                         /* Both logical link and move success
5070                          * are required to confirm
5071                          */
5072                         chan->move_state = L2CAP_MOVE_WAIT_LOGICAL_COMP;
5073                 }
5074
5075                 /* Placeholder - get hci_chan for logical link */
5076                 if (!hchan) {
5077                         /* Logical link not available */
5078                         l2cap_send_move_chan_cfm(chan, L2CAP_MC_UNCONFIRMED);
5079                         break;
5080                 }
5081
5082                 /* If the logical link is not yet connected, do not
5083                  * send confirmation.
5084                  */
5085                 if (hchan->state != BT_CONNECTED)
5086                         break;
5087
5088                 /* Logical link is already ready to go */
5089
5090                 chan->hs_hcon = hchan->conn;
5091                 chan->hs_hcon->l2cap_data = chan->conn;
5092
5093                 if (result == L2CAP_MR_SUCCESS) {
5094                         /* Can confirm now */
5095                         l2cap_send_move_chan_cfm(chan, L2CAP_MC_CONFIRMED);
5096                 } else {
5097                         /* Now only need move success
5098                          * to confirm
5099                          */
5100                         chan->move_state = L2CAP_MOVE_WAIT_RSP_SUCCESS;
5101                 }
5102
5103                 l2cap_logical_cfm(chan, hchan, L2CAP_MR_SUCCESS);
5104                 break;
5105         default:
5106                 /* Any other amp move state means the move failed. */
5107                 chan->move_id = chan->local_amp_id;
5108                 l2cap_move_done(chan);
5109                 l2cap_send_move_chan_cfm(chan, L2CAP_MC_UNCONFIRMED);
5110         }
5111
5112         l2cap_chan_unlock(chan);
5113 }
5114
5115 static void l2cap_move_fail(struct l2cap_conn *conn, u8 ident, u16 icid,
5116                             u16 result)
5117 {
5118         struct l2cap_chan *chan;
5119
5120         chan = l2cap_get_chan_by_ident(conn, ident);
5121         if (!chan) {
5122                 /* Could not locate channel, icid is best guess */
5123                 l2cap_send_move_chan_cfm_icid(conn, icid);
5124                 return;
5125         }
5126
5127         __clear_chan_timer(chan);
5128
5129         if (chan->move_role == L2CAP_MOVE_ROLE_INITIATOR) {
5130                 if (result == L2CAP_MR_COLLISION) {
5131                         chan->move_role = L2CAP_MOVE_ROLE_RESPONDER;
5132                 } else {
5133                         /* Cleanup - cancel move */
5134                         chan->move_id = chan->local_amp_id;
5135                         l2cap_move_done(chan);
5136                 }
5137         }
5138
5139         l2cap_send_move_chan_cfm(chan, L2CAP_MC_UNCONFIRMED);
5140
5141         l2cap_chan_unlock(chan);
5142 }
5143
5144 static int l2cap_move_channel_rsp(struct l2cap_conn *conn,
5145                                   struct l2cap_cmd_hdr *cmd,
5146                                   u16 cmd_len, void *data)
5147 {
5148         struct l2cap_move_chan_rsp *rsp = data;
5149         u16 icid, result;
5150
5151         if (cmd_len != sizeof(*rsp))
5152                 return -EPROTO;
5153
5154         icid = le16_to_cpu(rsp->icid);
5155         result = le16_to_cpu(rsp->result);
5156
5157         BT_DBG("icid 0x%4.4x, result 0x%4.4x", icid, result);
5158
5159         if (result == L2CAP_MR_SUCCESS || result == L2CAP_MR_PEND)
5160                 l2cap_move_continue(conn, icid, result);
5161         else
5162                 l2cap_move_fail(conn, cmd->ident, icid, result);
5163
5164         return 0;
5165 }
5166
5167 static int l2cap_move_channel_confirm(struct l2cap_conn *conn,
5168                                       struct l2cap_cmd_hdr *cmd,
5169                                       u16 cmd_len, void *data)
5170 {
5171         struct l2cap_move_chan_cfm *cfm = data;
5172         struct l2cap_chan *chan;
5173         u16 icid, result;
5174
5175         if (cmd_len != sizeof(*cfm))
5176                 return -EPROTO;
5177
5178         icid = le16_to_cpu(cfm->icid);
5179         result = le16_to_cpu(cfm->result);
5180
5181         BT_DBG("icid 0x%4.4x, result 0x%4.4x", icid, result);
5182
5183         chan = l2cap_get_chan_by_dcid(conn, icid);
5184         if (!chan) {
5185                 /* Spec requires a response even if the icid was not found */
5186                 l2cap_send_move_chan_cfm_rsp(conn, cmd->ident, icid);
5187                 return 0;
5188         }
5189
5190         if (chan->move_state == L2CAP_MOVE_WAIT_CONFIRM) {
5191                 if (result == L2CAP_MC_CONFIRMED) {
5192                         chan->local_amp_id = chan->move_id;
5193                         if (chan->local_amp_id == AMP_ID_BREDR)
5194                                 __release_logical_link(chan);
5195                 } else {
5196                         chan->move_id = chan->local_amp_id;
5197                 }
5198
5199                 l2cap_move_done(chan);
5200         }
5201
5202         l2cap_send_move_chan_cfm_rsp(conn, cmd->ident, icid);
5203
5204         l2cap_chan_unlock(chan);
5205
5206         return 0;
5207 }
5208
5209 static inline int l2cap_move_channel_confirm_rsp(struct l2cap_conn *conn,
5210                                                  struct l2cap_cmd_hdr *cmd,
5211                                                  u16 cmd_len, void *data)
5212 {
5213         struct l2cap_move_chan_cfm_rsp *rsp = data;
5214         struct l2cap_chan *chan;
5215         u16 icid;
5216
5217         if (cmd_len != sizeof(*rsp))
5218                 return -EPROTO;
5219
5220         icid = le16_to_cpu(rsp->icid);
5221
5222         BT_DBG("icid 0x%4.4x", icid);
5223
5224         chan = l2cap_get_chan_by_scid(conn, icid);
5225         if (!chan)
5226                 return 0;
5227
5228         __clear_chan_timer(chan);
5229
5230         if (chan->move_state == L2CAP_MOVE_WAIT_CONFIRM_RSP) {
5231                 chan->local_amp_id = chan->move_id;
5232
5233                 if (chan->local_amp_id == AMP_ID_BREDR && chan->hs_hchan)
5234                         __release_logical_link(chan);
5235
5236                 l2cap_move_done(chan);
5237         }
5238
5239         l2cap_chan_unlock(chan);
5240
5241         return 0;
5242 }
5243
5244 static inline int l2cap_conn_param_update_req(struct l2cap_conn *conn,
5245                                               struct l2cap_cmd_hdr *cmd,
5246                                               u16 cmd_len, u8 *data)
5247 {
5248         struct hci_conn *hcon = conn->hcon;
5249         struct l2cap_conn_param_update_req *req;
5250         struct l2cap_conn_param_update_rsp rsp;
5251         u16 min, max, latency, to_multiplier;
5252         int err;
5253
5254         if (hcon->role != HCI_ROLE_MASTER)
5255                 return -EINVAL;
5256
5257         if (cmd_len != sizeof(struct l2cap_conn_param_update_req))
5258                 return -EPROTO;
5259
5260         req = (struct l2cap_conn_param_update_req *) data;
5261         min             = __le16_to_cpu(req->min);
5262         max             = __le16_to_cpu(req->max);
5263         latency         = __le16_to_cpu(req->latency);
5264         to_multiplier   = __le16_to_cpu(req->to_multiplier);
5265
5266         BT_DBG("min 0x%4.4x max 0x%4.4x latency: 0x%4.4x Timeout: 0x%4.4x",
5267                min, max, latency, to_multiplier);
5268
5269         memset(&rsp, 0, sizeof(rsp));
5270
5271         err = hci_check_conn_params(min, max, latency, to_multiplier);
5272         if (err)
5273                 rsp.result = cpu_to_le16(L2CAP_CONN_PARAM_REJECTED);
5274         else
5275                 rsp.result = cpu_to_le16(L2CAP_CONN_PARAM_ACCEPTED);
5276
5277         l2cap_send_cmd(conn, cmd->ident, L2CAP_CONN_PARAM_UPDATE_RSP,
5278                        sizeof(rsp), &rsp);
5279
5280         if (!err) {
5281                 u8 store_hint;
5282
5283                 store_hint = hci_le_conn_update(hcon, min, max, latency,
5284                                                 to_multiplier);
5285                 mgmt_new_conn_param(hcon->hdev, &hcon->dst, hcon->dst_type,
5286                                     store_hint, min, max, latency,
5287                                     to_multiplier);
5288
5289         }
5290
5291         return 0;
5292 }
5293
5294 static int l2cap_le_connect_rsp(struct l2cap_conn *conn,
5295                                 struct l2cap_cmd_hdr *cmd, u16 cmd_len,
5296                                 u8 *data)
5297 {
5298         struct l2cap_le_conn_rsp *rsp = (struct l2cap_le_conn_rsp *) data;
5299         struct hci_conn *hcon = conn->hcon;
5300         u16 dcid, mtu, mps, credits, result;
5301         struct l2cap_chan *chan;
5302         int err, sec_level;
5303
5304         if (cmd_len < sizeof(*rsp))
5305                 return -EPROTO;
5306
5307         dcid    = __le16_to_cpu(rsp->dcid);
5308         mtu     = __le16_to_cpu(rsp->mtu);
5309         mps     = __le16_to_cpu(rsp->mps);
5310         credits = __le16_to_cpu(rsp->credits);
5311         result  = __le16_to_cpu(rsp->result);
5312
5313         if (result == L2CAP_CR_LE_SUCCESS && (mtu < 23 || mps < 23 ||
5314                                            dcid < L2CAP_CID_DYN_START ||
5315                                            dcid > L2CAP_CID_LE_DYN_END))
5316                 return -EPROTO;
5317
5318         BT_DBG("dcid 0x%4.4x mtu %u mps %u credits %u result 0x%2.2x",
5319                dcid, mtu, mps, credits, result);
5320
5321         mutex_lock(&conn->chan_lock);
5322
5323         chan = __l2cap_get_chan_by_ident(conn, cmd->ident);
5324         if (!chan) {
5325                 err = -EBADSLT;
5326                 goto unlock;
5327         }
5328
5329         err = 0;
5330
5331         l2cap_chan_lock(chan);
5332
5333         switch (result) {
5334         case L2CAP_CR_LE_SUCCESS:
5335                 if (__l2cap_get_chan_by_dcid(conn, dcid)) {
5336                         err = -EBADSLT;
5337                         break;
5338                 }
5339
5340                 chan->ident = 0;
5341                 chan->dcid = dcid;
5342                 chan->omtu = mtu;
5343                 chan->remote_mps = mps;
5344                 chan->tx_credits = credits;
5345                 l2cap_chan_ready(chan);
5346                 break;
5347
5348         case L2CAP_CR_LE_AUTHENTICATION:
5349         case L2CAP_CR_LE_ENCRYPTION:
5350                 /* If we already have MITM protection we can't do
5351                  * anything.
5352                  */
5353                 if (hcon->sec_level > BT_SECURITY_MEDIUM) {
5354                         l2cap_chan_del(chan, ECONNREFUSED);
5355                         break;
5356                 }
5357
5358                 sec_level = hcon->sec_level + 1;
5359                 if (chan->sec_level < sec_level)
5360                         chan->sec_level = sec_level;
5361
5362                 /* We'll need to send a new Connect Request */
5363                 clear_bit(FLAG_LE_CONN_REQ_SENT, &chan->flags);
5364
5365                 smp_conn_security(hcon, chan->sec_level);
5366                 break;
5367
5368         default:
5369                 l2cap_chan_del(chan, ECONNREFUSED);
5370                 break;
5371         }
5372
5373         l2cap_chan_unlock(chan);
5374
5375 unlock:
5376         mutex_unlock(&conn->chan_lock);
5377
5378         return err;
5379 }
5380
5381 static inline int l2cap_bredr_sig_cmd(struct l2cap_conn *conn,
5382                                       struct l2cap_cmd_hdr *cmd, u16 cmd_len,
5383                                       u8 *data)
5384 {
5385         int err = 0;
5386
5387         switch (cmd->code) {
5388         case L2CAP_COMMAND_REJ:
5389                 l2cap_command_rej(conn, cmd, cmd_len, data);
5390                 break;
5391
5392         case L2CAP_CONN_REQ:
5393                 err = l2cap_connect_req(conn, cmd, cmd_len, data);
5394                 break;
5395
5396         case L2CAP_CONN_RSP:
5397         case L2CAP_CREATE_CHAN_RSP:
5398                 l2cap_connect_create_rsp(conn, cmd, cmd_len, data);
5399                 break;
5400
5401         case L2CAP_CONF_REQ:
5402                 err = l2cap_config_req(conn, cmd, cmd_len, data);
5403                 break;
5404
5405         case L2CAP_CONF_RSP:
5406                 l2cap_config_rsp(conn, cmd, cmd_len, data);
5407                 break;
5408
5409         case L2CAP_DISCONN_REQ:
5410                 err = l2cap_disconnect_req(conn, cmd, cmd_len, data);
5411                 break;
5412
5413         case L2CAP_DISCONN_RSP:
5414                 l2cap_disconnect_rsp(conn, cmd, cmd_len, data);
5415                 break;
5416
5417         case L2CAP_ECHO_REQ:
5418                 l2cap_send_cmd(conn, cmd->ident, L2CAP_ECHO_RSP, cmd_len, data);
5419                 break;
5420
5421         case L2CAP_ECHO_RSP:
5422                 break;
5423
5424         case L2CAP_INFO_REQ:
5425                 err = l2cap_information_req(conn, cmd, cmd_len, data);
5426                 break;
5427
5428         case L2CAP_INFO_RSP:
5429                 l2cap_information_rsp(conn, cmd, cmd_len, data);
5430                 break;
5431
5432         case L2CAP_CREATE_CHAN_REQ:
5433                 err = l2cap_create_channel_req(conn, cmd, cmd_len, data);
5434                 break;
5435
5436         case L2CAP_MOVE_CHAN_REQ:
5437                 err = l2cap_move_channel_req(conn, cmd, cmd_len, data);
5438                 break;
5439
5440         case L2CAP_MOVE_CHAN_RSP:
5441                 l2cap_move_channel_rsp(conn, cmd, cmd_len, data);
5442                 break;
5443
5444         case L2CAP_MOVE_CHAN_CFM:
5445                 err = l2cap_move_channel_confirm(conn, cmd, cmd_len, data);
5446                 break;
5447
5448         case L2CAP_MOVE_CHAN_CFM_RSP:
5449                 l2cap_move_channel_confirm_rsp(conn, cmd, cmd_len, data);
5450                 break;
5451
5452         default:
5453                 BT_ERR("Unknown BR/EDR signaling command 0x%2.2x", cmd->code);
5454                 err = -EINVAL;
5455                 break;
5456         }
5457
5458         return err;
5459 }
5460
5461 static int l2cap_le_connect_req(struct l2cap_conn *conn,
5462                                 struct l2cap_cmd_hdr *cmd, u16 cmd_len,
5463                                 u8 *data)
5464 {
5465         struct l2cap_le_conn_req *req = (struct l2cap_le_conn_req *) data;
5466         struct l2cap_le_conn_rsp rsp;
5467         struct l2cap_chan *chan, *pchan;
5468         u16 dcid, scid, credits, mtu, mps;
5469         __le16 psm;
5470         u8 result;
5471
5472         if (cmd_len != sizeof(*req))
5473                 return -EPROTO;
5474
5475         scid = __le16_to_cpu(req->scid);
5476         mtu  = __le16_to_cpu(req->mtu);
5477         mps  = __le16_to_cpu(req->mps);
5478         psm  = req->psm;
5479         dcid = 0;
5480         credits = 0;
5481
5482         if (mtu < 23 || mps < 23)
5483                 return -EPROTO;
5484
5485         BT_DBG("psm 0x%2.2x scid 0x%4.4x mtu %u mps %u", __le16_to_cpu(psm),
5486                scid, mtu, mps);
5487
5488         /* Check if we have socket listening on psm */
5489         pchan = l2cap_global_chan_by_psm(BT_LISTEN, psm, &conn->hcon->src,
5490                                          &conn->hcon->dst, LE_LINK);
5491         if (!pchan) {
5492                 result = L2CAP_CR_LE_BAD_PSM;
5493                 chan = NULL;
5494                 goto response;
5495         }
5496
5497         mutex_lock(&conn->chan_lock);
5498         l2cap_chan_lock(pchan);
5499
5500         if (!smp_sufficient_security(conn->hcon, pchan->sec_level,
5501                                      SMP_ALLOW_STK)) {
5502                 result = L2CAP_CR_LE_AUTHENTICATION;
5503                 chan = NULL;
5504                 goto response_unlock;
5505         }
5506
5507         /* Check for valid dynamic CID range */
5508         if (scid < L2CAP_CID_DYN_START || scid > L2CAP_CID_LE_DYN_END) {
5509                 result = L2CAP_CR_LE_INVALID_SCID;
5510                 chan = NULL;
5511                 goto response_unlock;
5512         }
5513
5514         /* Check if we already have channel with that dcid */
5515         if (__l2cap_get_chan_by_dcid(conn, scid)) {
5516                 result = L2CAP_CR_LE_SCID_IN_USE;
5517                 chan = NULL;
5518                 goto response_unlock;
5519         }
5520
5521         chan = pchan->ops->new_connection(pchan);
5522         if (!chan) {
5523                 result = L2CAP_CR_LE_NO_MEM;
5524                 goto response_unlock;
5525         }
5526
5527         bacpy(&chan->src, &conn->hcon->src);
5528         bacpy(&chan->dst, &conn->hcon->dst);
5529         chan->src_type = bdaddr_src_type(conn->hcon);
5530         chan->dst_type = bdaddr_dst_type(conn->hcon);
5531         chan->psm  = psm;
5532         chan->dcid = scid;
5533         chan->omtu = mtu;
5534         chan->remote_mps = mps;
5535
5536         __l2cap_chan_add(conn, chan);
5537
5538         l2cap_le_flowctl_init(chan, __le16_to_cpu(req->credits));
5539
5540         dcid = chan->scid;
5541         credits = chan->rx_credits;
5542
5543         __set_chan_timer(chan, chan->ops->get_sndtimeo(chan));
5544
5545         chan->ident = cmd->ident;
5546
5547         if (test_bit(FLAG_DEFER_SETUP, &chan->flags)) {
5548                 l2cap_state_change(chan, BT_CONNECT2);
5549                 /* The following result value is actually not defined
5550                  * for LE CoC but we use it to let the function know
5551                  * that it should bail out after doing its cleanup
5552                  * instead of sending a response.
5553                  */
5554                 result = L2CAP_CR_PEND;
5555                 chan->ops->defer(chan);
5556         } else {
5557                 l2cap_chan_ready(chan);
5558                 result = L2CAP_CR_LE_SUCCESS;
5559         }
5560
5561 response_unlock:
5562         l2cap_chan_unlock(pchan);
5563         mutex_unlock(&conn->chan_lock);
5564         l2cap_chan_put(pchan);
5565
5566         if (result == L2CAP_CR_PEND)
5567                 return 0;
5568
5569 response:
5570         if (chan) {
5571                 rsp.mtu = cpu_to_le16(chan->imtu);
5572                 rsp.mps = cpu_to_le16(chan->mps);
5573         } else {
5574                 rsp.mtu = 0;
5575                 rsp.mps = 0;
5576         }
5577
5578         rsp.dcid    = cpu_to_le16(dcid);
5579         rsp.credits = cpu_to_le16(credits);
5580         rsp.result  = cpu_to_le16(result);
5581
5582         l2cap_send_cmd(conn, cmd->ident, L2CAP_LE_CONN_RSP, sizeof(rsp), &rsp);
5583
5584         return 0;
5585 }
5586
5587 static inline int l2cap_le_credits(struct l2cap_conn *conn,
5588                                    struct l2cap_cmd_hdr *cmd, u16 cmd_len,
5589                                    u8 *data)
5590 {
5591         struct l2cap_le_credits *pkt;
5592         struct l2cap_chan *chan;
5593         u16 cid, credits, max_credits;
5594
5595         if (cmd_len != sizeof(*pkt))
5596                 return -EPROTO;
5597
5598         pkt = (struct l2cap_le_credits *) data;
5599         cid     = __le16_to_cpu(pkt->cid);
5600         credits = __le16_to_cpu(pkt->credits);
5601
5602         BT_DBG("cid 0x%4.4x credits 0x%4.4x", cid, credits);
5603
5604         chan = l2cap_get_chan_by_dcid(conn, cid);
5605         if (!chan)
5606                 return -EBADSLT;
5607
5608         max_credits = LE_FLOWCTL_MAX_CREDITS - chan->tx_credits;
5609         if (credits > max_credits) {
5610                 BT_ERR("LE credits overflow");
5611                 l2cap_send_disconn_req(chan, ECONNRESET);
5612                 l2cap_chan_unlock(chan);
5613
5614                 /* Return 0 so that we don't trigger an unnecessary
5615                  * command reject packet.
5616                  */
5617                 return 0;
5618         }
5619
5620         chan->tx_credits += credits;
5621
5622         /* Resume sending */
5623         l2cap_le_flowctl_send(chan);
5624
5625         if (chan->tx_credits)
5626                 chan->ops->resume(chan);
5627
5628         l2cap_chan_unlock(chan);
5629
5630         return 0;
5631 }
5632
5633 static inline int l2cap_le_command_rej(struct l2cap_conn *conn,
5634                                        struct l2cap_cmd_hdr *cmd, u16 cmd_len,
5635                                        u8 *data)
5636 {
5637         struct l2cap_cmd_rej_unk *rej = (struct l2cap_cmd_rej_unk *) data;
5638         struct l2cap_chan *chan;
5639
5640         if (cmd_len < sizeof(*rej))
5641                 return -EPROTO;
5642
5643         mutex_lock(&conn->chan_lock);
5644
5645         chan = __l2cap_get_chan_by_ident(conn, cmd->ident);
5646         if (!chan)
5647                 goto done;
5648
5649         l2cap_chan_lock(chan);
5650         l2cap_chan_del(chan, ECONNREFUSED);
5651         l2cap_chan_unlock(chan);
5652
5653 done:
5654         mutex_unlock(&conn->chan_lock);
5655         return 0;
5656 }
5657
5658 static inline int l2cap_le_sig_cmd(struct l2cap_conn *conn,
5659                                    struct l2cap_cmd_hdr *cmd, u16 cmd_len,
5660                                    u8 *data)
5661 {
5662         int err = 0;
5663
5664         switch (cmd->code) {
5665         case L2CAP_COMMAND_REJ:
5666                 l2cap_le_command_rej(conn, cmd, cmd_len, data);
5667                 break;
5668
5669         case L2CAP_CONN_PARAM_UPDATE_REQ:
5670                 err = l2cap_conn_param_update_req(conn, cmd, cmd_len, data);
5671                 break;
5672
5673         case L2CAP_CONN_PARAM_UPDATE_RSP:
5674                 break;
5675
5676         case L2CAP_LE_CONN_RSP:
5677                 l2cap_le_connect_rsp(conn, cmd, cmd_len, data);
5678                 break;
5679
5680         case L2CAP_LE_CONN_REQ:
5681                 err = l2cap_le_connect_req(conn, cmd, cmd_len, data);
5682                 break;
5683
5684         case L2CAP_LE_CREDITS:
5685                 err = l2cap_le_credits(conn, cmd, cmd_len, data);
5686                 break;
5687
5688         case L2CAP_DISCONN_REQ:
5689                 err = l2cap_disconnect_req(conn, cmd, cmd_len, data);
5690                 break;
5691
5692         case L2CAP_DISCONN_RSP:
5693                 l2cap_disconnect_rsp(conn, cmd, cmd_len, data);
5694                 break;
5695
5696         default:
5697                 BT_ERR("Unknown LE signaling command 0x%2.2x", cmd->code);
5698                 err = -EINVAL;
5699                 break;
5700         }
5701
5702         return err;
5703 }
5704
5705 static inline void l2cap_le_sig_channel(struct l2cap_conn *conn,
5706                                         struct sk_buff *skb)
5707 {
5708         struct hci_conn *hcon = conn->hcon;
5709         struct l2cap_cmd_hdr *cmd;
5710         u16 len;
5711         int err;
5712
5713         if (hcon->type != LE_LINK)
5714                 goto drop;
5715
5716         if (skb->len < L2CAP_CMD_HDR_SIZE)
5717                 goto drop;
5718
5719         cmd = (void *) skb->data;
5720         skb_pull(skb, L2CAP_CMD_HDR_SIZE);
5721
5722         len = le16_to_cpu(cmd->len);
5723
5724         BT_DBG("code 0x%2.2x len %d id 0x%2.2x", cmd->code, len, cmd->ident);
5725
5726         if (len != skb->len || !cmd->ident) {
5727                 BT_DBG("corrupted command");
5728                 goto drop;
5729         }
5730
5731         err = l2cap_le_sig_cmd(conn, cmd, len, skb->data);
5732         if (err) {
5733                 struct l2cap_cmd_rej_unk rej;
5734
5735                 BT_ERR("Wrong link type (%d)", err);
5736
5737                 rej.reason = cpu_to_le16(L2CAP_REJ_NOT_UNDERSTOOD);
5738                 l2cap_send_cmd(conn, cmd->ident, L2CAP_COMMAND_REJ,
5739                                sizeof(rej), &rej);
5740         }
5741
5742 drop:
5743         kfree_skb(skb);
5744 }
5745
5746 static inline void l2cap_sig_channel(struct l2cap_conn *conn,
5747                                      struct sk_buff *skb)
5748 {
5749         struct hci_conn *hcon = conn->hcon;
5750         u8 *data = skb->data;
5751         int len = skb->len;
5752         struct l2cap_cmd_hdr cmd;
5753         int err;
5754
5755         l2cap_raw_recv(conn, skb);
5756
5757         if (hcon->type != ACL_LINK)
5758                 goto drop;
5759
5760         while (len >= L2CAP_CMD_HDR_SIZE) {
5761                 u16 cmd_len;
5762                 memcpy(&cmd, data, L2CAP_CMD_HDR_SIZE);
5763                 data += L2CAP_CMD_HDR_SIZE;
5764                 len  -= L2CAP_CMD_HDR_SIZE;
5765
5766                 cmd_len = le16_to_cpu(cmd.len);
5767
5768                 BT_DBG("code 0x%2.2x len %d id 0x%2.2x", cmd.code, cmd_len,
5769                        cmd.ident);
5770
5771                 if (cmd_len > len || !cmd.ident) {
5772                         BT_DBG("corrupted command");
5773                         break;
5774                 }
5775
5776                 err = l2cap_bredr_sig_cmd(conn, &cmd, cmd_len, data);
5777                 if (err) {
5778                         struct l2cap_cmd_rej_unk rej;
5779
5780                         BT_ERR("Wrong link type (%d)", err);
5781
5782                         rej.reason = cpu_to_le16(L2CAP_REJ_NOT_UNDERSTOOD);
5783                         l2cap_send_cmd(conn, cmd.ident, L2CAP_COMMAND_REJ,
5784                                        sizeof(rej), &rej);
5785                 }
5786
5787                 data += cmd_len;
5788                 len  -= cmd_len;
5789         }
5790
5791 drop:
5792         kfree_skb(skb);
5793 }
5794
5795 static int l2cap_check_fcs(struct l2cap_chan *chan,  struct sk_buff *skb)
5796 {
5797         u16 our_fcs, rcv_fcs;
5798         int hdr_size;
5799
5800         if (test_bit(FLAG_EXT_CTRL, &chan->flags))
5801                 hdr_size = L2CAP_EXT_HDR_SIZE;
5802         else
5803                 hdr_size = L2CAP_ENH_HDR_SIZE;
5804
5805         if (chan->fcs == L2CAP_FCS_CRC16) {
5806                 skb_trim(skb, skb->len - L2CAP_FCS_SIZE);
5807                 rcv_fcs = get_unaligned_le16(skb->data + skb->len);
5808                 our_fcs = crc16(0, skb->data - hdr_size, skb->len + hdr_size);
5809
5810                 if (our_fcs != rcv_fcs)
5811                         return -EBADMSG;
5812         }
5813         return 0;
5814 }
5815
5816 static void l2cap_send_i_or_rr_or_rnr(struct l2cap_chan *chan)
5817 {
5818         struct l2cap_ctrl control;
5819
5820         BT_DBG("chan %p", chan);
5821
5822         memset(&control, 0, sizeof(control));
5823         control.sframe = 1;
5824         control.final = 1;
5825         control.reqseq = chan->buffer_seq;
5826         set_bit(CONN_SEND_FBIT, &chan->conn_state);
5827
5828         if (test_bit(CONN_LOCAL_BUSY, &chan->conn_state)) {
5829                 control.super = L2CAP_SUPER_RNR;
5830                 l2cap_send_sframe(chan, &control);
5831         }
5832
5833         if (test_and_clear_bit(CONN_REMOTE_BUSY, &chan->conn_state) &&
5834             chan->unacked_frames > 0)
5835                 __set_retrans_timer(chan);
5836
5837         /* Send pending iframes */
5838         l2cap_ertm_send(chan);
5839
5840         if (!test_bit(CONN_LOCAL_BUSY, &chan->conn_state) &&
5841             test_bit(CONN_SEND_FBIT, &chan->conn_state)) {
5842                 /* F-bit wasn't sent in an s-frame or i-frame yet, so
5843                  * send it now.
5844                  */
5845                 control.super = L2CAP_SUPER_RR;
5846                 l2cap_send_sframe(chan, &control);
5847         }
5848 }
5849
5850 static void append_skb_frag(struct sk_buff *skb, struct sk_buff *new_frag,
5851                             struct sk_buff **last_frag)
5852 {
5853         /* skb->len reflects data in skb as well as all fragments
5854          * skb->data_len reflects only data in fragments
5855          */
5856         if (!skb_has_frag_list(skb))
5857                 skb_shinfo(skb)->frag_list = new_frag;
5858
5859         new_frag->next = NULL;
5860
5861         (*last_frag)->next = new_frag;
5862         *last_frag = new_frag;
5863
5864         skb->len += new_frag->len;
5865         skb->data_len += new_frag->len;
5866         skb->truesize += new_frag->truesize;
5867 }
5868
5869 static int l2cap_reassemble_sdu(struct l2cap_chan *chan, struct sk_buff *skb,
5870                                 struct l2cap_ctrl *control)
5871 {
5872         int err = -EINVAL;
5873
5874         switch (control->sar) {
5875         case L2CAP_SAR_UNSEGMENTED:
5876                 if (chan->sdu)
5877                         break;
5878
5879                 err = chan->ops->recv(chan, skb);
5880                 break;
5881
5882         case L2CAP_SAR_START:
5883                 if (chan->sdu)
5884                         break;
5885
5886                 if (!pskb_may_pull(skb, L2CAP_SDULEN_SIZE))
5887                         break;
5888
5889                 chan->sdu_len = get_unaligned_le16(skb->data);
5890                 skb_pull(skb, L2CAP_SDULEN_SIZE);
5891
5892                 if (chan->sdu_len > chan->imtu) {
5893                         err = -EMSGSIZE;
5894                         break;
5895                 }
5896
5897                 if (skb->len >= chan->sdu_len)
5898                         break;
5899
5900                 chan->sdu = skb;
5901                 chan->sdu_last_frag = skb;
5902
5903                 skb = NULL;
5904                 err = 0;
5905                 break;
5906
5907         case L2CAP_SAR_CONTINUE:
5908                 if (!chan->sdu)
5909                         break;
5910
5911                 append_skb_frag(chan->sdu, skb,
5912                                 &chan->sdu_last_frag);
5913                 skb = NULL;
5914
5915                 if (chan->sdu->len >= chan->sdu_len)
5916                         break;
5917
5918                 err = 0;
5919                 break;
5920
5921         case L2CAP_SAR_END:
5922                 if (!chan->sdu)
5923                         break;
5924
5925                 append_skb_frag(chan->sdu, skb,
5926                                 &chan->sdu_last_frag);
5927                 skb = NULL;
5928
5929                 if (chan->sdu->len != chan->sdu_len)
5930                         break;
5931
5932                 err = chan->ops->recv(chan, chan->sdu);
5933
5934                 if (!err) {
5935                         /* Reassembly complete */
5936                         chan->sdu = NULL;
5937                         chan->sdu_last_frag = NULL;
5938                         chan->sdu_len = 0;
5939                 }
5940                 break;
5941         }
5942
5943         if (err) {
5944                 kfree_skb(skb);
5945                 kfree_skb(chan->sdu);
5946                 chan->sdu = NULL;
5947                 chan->sdu_last_frag = NULL;
5948                 chan->sdu_len = 0;
5949         }
5950
5951         return err;
5952 }
5953
5954 static int l2cap_resegment(struct l2cap_chan *chan)
5955 {
5956         /* Placeholder */
5957         return 0;
5958 }
5959
5960 void l2cap_chan_busy(struct l2cap_chan *chan, int busy)
5961 {
5962         u8 event;
5963
5964         if (chan->mode != L2CAP_MODE_ERTM)
5965                 return;
5966
5967         event = busy ? L2CAP_EV_LOCAL_BUSY_DETECTED : L2CAP_EV_LOCAL_BUSY_CLEAR;
5968         l2cap_tx(chan, NULL, NULL, event);
5969 }
5970
5971 static int l2cap_rx_queued_iframes(struct l2cap_chan *chan)
5972 {
5973         int err = 0;
5974         /* Pass sequential frames to l2cap_reassemble_sdu()
5975          * until a gap is encountered.
5976          */
5977
5978         BT_DBG("chan %p", chan);
5979
5980         while (!test_bit(CONN_LOCAL_BUSY, &chan->conn_state)) {
5981                 struct sk_buff *skb;
5982                 BT_DBG("Searching for skb with txseq %d (queue len %d)",
5983                        chan->buffer_seq, skb_queue_len(&chan->srej_q));
5984
5985                 skb = l2cap_ertm_seq_in_queue(&chan->srej_q, chan->buffer_seq);
5986
5987                 if (!skb)
5988                         break;
5989
5990                 skb_unlink(skb, &chan->srej_q);
5991                 chan->buffer_seq = __next_seq(chan, chan->buffer_seq);
5992                 err = l2cap_reassemble_sdu(chan, skb, &bt_cb(skb)->l2cap);
5993                 if (err)
5994                         break;
5995         }
5996
5997         if (skb_queue_empty(&chan->srej_q)) {
5998                 chan->rx_state = L2CAP_RX_STATE_RECV;
5999                 l2cap_send_ack(chan);
6000         }
6001
6002         return err;
6003 }
6004
6005 static void l2cap_handle_srej(struct l2cap_chan *chan,
6006                               struct l2cap_ctrl *control)
6007 {
6008         struct sk_buff *skb;
6009
6010         BT_DBG("chan %p, control %p", chan, control);
6011
6012         if (control->reqseq == chan->next_tx_seq) {
6013                 BT_DBG("Invalid reqseq %d, disconnecting", control->reqseq);
6014                 l2cap_send_disconn_req(chan, ECONNRESET);
6015                 return;
6016         }
6017
6018         skb = l2cap_ertm_seq_in_queue(&chan->tx_q, control->reqseq);
6019
6020         if (skb == NULL) {
6021                 BT_DBG("Seq %d not available for retransmission",
6022                        control->reqseq);
6023                 return;
6024         }
6025
6026         if (chan->max_tx != 0 && bt_cb(skb)->l2cap.retries >= chan->max_tx) {
6027                 BT_DBG("Retry limit exceeded (%d)", chan->max_tx);
6028                 l2cap_send_disconn_req(chan, ECONNRESET);
6029                 return;
6030         }
6031
6032         clear_bit(CONN_REMOTE_BUSY, &chan->conn_state);
6033
6034         if (control->poll) {
6035                 l2cap_pass_to_tx(chan, control);
6036
6037                 set_bit(CONN_SEND_FBIT, &chan->conn_state);
6038                 l2cap_retransmit(chan, control);
6039                 l2cap_ertm_send(chan);
6040
6041                 if (chan->tx_state == L2CAP_TX_STATE_WAIT_F) {
6042                         set_bit(CONN_SREJ_ACT, &chan->conn_state);
6043                         chan->srej_save_reqseq = control->reqseq;
6044                 }
6045         } else {
6046                 l2cap_pass_to_tx_fbit(chan, control);
6047
6048                 if (control->final) {
6049                         if (chan->srej_save_reqseq != control->reqseq ||
6050                             !test_and_clear_bit(CONN_SREJ_ACT,
6051                                                 &chan->conn_state))
6052                                 l2cap_retransmit(chan, control);
6053                 } else {
6054                         l2cap_retransmit(chan, control);
6055                         if (chan->tx_state == L2CAP_TX_STATE_WAIT_F) {
6056                                 set_bit(CONN_SREJ_ACT, &chan->conn_state);
6057                                 chan->srej_save_reqseq = control->reqseq;
6058                         }
6059                 }
6060         }
6061 }
6062
6063 static void l2cap_handle_rej(struct l2cap_chan *chan,
6064                              struct l2cap_ctrl *control)
6065 {
6066         struct sk_buff *skb;
6067
6068         BT_DBG("chan %p, control %p", chan, control);
6069
6070         if (control->reqseq == chan->next_tx_seq) {
6071                 BT_DBG("Invalid reqseq %d, disconnecting", control->reqseq);
6072                 l2cap_send_disconn_req(chan, ECONNRESET);
6073                 return;
6074         }
6075
6076         skb = l2cap_ertm_seq_in_queue(&chan->tx_q, control->reqseq);
6077
6078         if (chan->max_tx && skb &&
6079             bt_cb(skb)->l2cap.retries >= chan->max_tx) {
6080                 BT_DBG("Retry limit exceeded (%d)", chan->max_tx);
6081                 l2cap_send_disconn_req(chan, ECONNRESET);
6082                 return;
6083         }
6084
6085         clear_bit(CONN_REMOTE_BUSY, &chan->conn_state);
6086
6087         l2cap_pass_to_tx(chan, control);
6088
6089         if (control->final) {
6090                 if (!test_and_clear_bit(CONN_REJ_ACT, &chan->conn_state))
6091                         l2cap_retransmit_all(chan, control);
6092         } else {
6093                 l2cap_retransmit_all(chan, control);
6094                 l2cap_ertm_send(chan);
6095                 if (chan->tx_state == L2CAP_TX_STATE_WAIT_F)
6096                         set_bit(CONN_REJ_ACT, &chan->conn_state);
6097         }
6098 }
6099
6100 static u8 l2cap_classify_txseq(struct l2cap_chan *chan, u16 txseq)
6101 {
6102         BT_DBG("chan %p, txseq %d", chan, txseq);
6103
6104         BT_DBG("last_acked_seq %d, expected_tx_seq %d", chan->last_acked_seq,
6105                chan->expected_tx_seq);
6106
6107         if (chan->rx_state == L2CAP_RX_STATE_SREJ_SENT) {
6108                 if (__seq_offset(chan, txseq, chan->last_acked_seq) >=
6109                     chan->tx_win) {
6110                         /* See notes below regarding "double poll" and
6111                          * invalid packets.
6112                          */
6113                         if (chan->tx_win <= ((chan->tx_win_max + 1) >> 1)) {
6114                                 BT_DBG("Invalid/Ignore - after SREJ");
6115                                 return L2CAP_TXSEQ_INVALID_IGNORE;
6116                         } else {
6117                                 BT_DBG("Invalid - in window after SREJ sent");
6118                                 return L2CAP_TXSEQ_INVALID;
6119                         }
6120                 }
6121
6122                 if (chan->srej_list.head == txseq) {
6123                         BT_DBG("Expected SREJ");
6124                         return L2CAP_TXSEQ_EXPECTED_SREJ;
6125                 }
6126
6127                 if (l2cap_ertm_seq_in_queue(&chan->srej_q, txseq)) {
6128                         BT_DBG("Duplicate SREJ - txseq already stored");
6129                         return L2CAP_TXSEQ_DUPLICATE_SREJ;
6130                 }
6131
6132                 if (l2cap_seq_list_contains(&chan->srej_list, txseq)) {
6133                         BT_DBG("Unexpected SREJ - not requested");
6134                         return L2CAP_TXSEQ_UNEXPECTED_SREJ;
6135                 }
6136         }
6137
6138         if (chan->expected_tx_seq == txseq) {
6139                 if (__seq_offset(chan, txseq, chan->last_acked_seq) >=
6140                     chan->tx_win) {
6141                         BT_DBG("Invalid - txseq outside tx window");
6142                         return L2CAP_TXSEQ_INVALID;
6143                 } else {
6144                         BT_DBG("Expected");
6145                         return L2CAP_TXSEQ_EXPECTED;
6146                 }
6147         }
6148
6149         if (__seq_offset(chan, txseq, chan->last_acked_seq) <
6150             __seq_offset(chan, chan->expected_tx_seq, chan->last_acked_seq)) {
6151                 BT_DBG("Duplicate - expected_tx_seq later than txseq");
6152                 return L2CAP_TXSEQ_DUPLICATE;
6153         }
6154
6155         if (__seq_offset(chan, txseq, chan->last_acked_seq) >= chan->tx_win) {
6156                 /* A source of invalid packets is a "double poll" condition,
6157                  * where delays cause us to send multiple poll packets.  If
6158                  * the remote stack receives and processes both polls,
6159                  * sequence numbers can wrap around in such a way that a
6160                  * resent frame has a sequence number that looks like new data
6161                  * with a sequence gap.  This would trigger an erroneous SREJ
6162                  * request.
6163                  *
6164                  * Fortunately, this is impossible with a tx window that's
6165                  * less than half of the maximum sequence number, which allows
6166                  * invalid frames to be safely ignored.
6167                  *
6168                  * With tx window sizes greater than half of the tx window
6169                  * maximum, the frame is invalid and cannot be ignored.  This
6170                  * causes a disconnect.
6171                  */
6172
6173                 if (chan->tx_win <= ((chan->tx_win_max + 1) >> 1)) {
6174                         BT_DBG("Invalid/Ignore - txseq outside tx window");
6175                         return L2CAP_TXSEQ_INVALID_IGNORE;
6176                 } else {
6177                         BT_DBG("Invalid - txseq outside tx window");
6178                         return L2CAP_TXSEQ_INVALID;
6179                 }
6180         } else {
6181                 BT_DBG("Unexpected - txseq indicates missing frames");
6182                 return L2CAP_TXSEQ_UNEXPECTED;
6183         }
6184 }
6185
6186 static int l2cap_rx_state_recv(struct l2cap_chan *chan,
6187                                struct l2cap_ctrl *control,
6188                                struct sk_buff *skb, u8 event)
6189 {
6190         int err = 0;
6191         bool skb_in_use = false;
6192
6193         BT_DBG("chan %p, control %p, skb %p, event %d", chan, control, skb,
6194                event);
6195
6196         switch (event) {
6197         case L2CAP_EV_RECV_IFRAME:
6198                 switch (l2cap_classify_txseq(chan, control->txseq)) {
6199                 case L2CAP_TXSEQ_EXPECTED:
6200                         l2cap_pass_to_tx(chan, control);
6201
6202                         if (test_bit(CONN_LOCAL_BUSY, &chan->conn_state)) {
6203                                 BT_DBG("Busy, discarding expected seq %d",
6204                                        control->txseq);
6205                                 break;
6206                         }
6207
6208                         chan->expected_tx_seq = __next_seq(chan,
6209                                                            control->txseq);
6210
6211                         chan->buffer_seq = chan->expected_tx_seq;
6212                         skb_in_use = true;
6213
6214                         err = l2cap_reassemble_sdu(chan, skb, control);
6215                         if (err)
6216                                 break;
6217
6218                         if (control->final) {
6219                                 if (!test_and_clear_bit(CONN_REJ_ACT,
6220                                                         &chan->conn_state)) {
6221                                         control->final = 0;
6222                                         l2cap_retransmit_all(chan, control);
6223                                         l2cap_ertm_send(chan);
6224                                 }
6225                         }
6226
6227                         if (!test_bit(CONN_LOCAL_BUSY, &chan->conn_state))
6228                                 l2cap_send_ack(chan);
6229                         break;
6230                 case L2CAP_TXSEQ_UNEXPECTED:
6231                         l2cap_pass_to_tx(chan, control);
6232
6233                         /* Can't issue SREJ frames in the local busy state.
6234                          * Drop this frame, it will be seen as missing
6235                          * when local busy is exited.
6236                          */
6237                         if (test_bit(CONN_LOCAL_BUSY, &chan->conn_state)) {
6238                                 BT_DBG("Busy, discarding unexpected seq %d",
6239                                        control->txseq);
6240                                 break;
6241                         }
6242
6243                         /* There was a gap in the sequence, so an SREJ
6244                          * must be sent for each missing frame.  The
6245                          * current frame is stored for later use.
6246                          */
6247                         skb_queue_tail(&chan->srej_q, skb);
6248                         skb_in_use = true;
6249                         BT_DBG("Queued %p (queue len %d)", skb,
6250                                skb_queue_len(&chan->srej_q));
6251
6252                         clear_bit(CONN_SREJ_ACT, &chan->conn_state);
6253                         l2cap_seq_list_clear(&chan->srej_list);
6254                         l2cap_send_srej(chan, control->txseq);
6255
6256                         chan->rx_state = L2CAP_RX_STATE_SREJ_SENT;
6257                         break;
6258                 case L2CAP_TXSEQ_DUPLICATE:
6259                         l2cap_pass_to_tx(chan, control);
6260                         break;
6261                 case L2CAP_TXSEQ_INVALID_IGNORE:
6262                         break;
6263                 case L2CAP_TXSEQ_INVALID:
6264                 default:
6265                         l2cap_send_disconn_req(chan, ECONNRESET);
6266                         break;
6267                 }
6268                 break;
6269         case L2CAP_EV_RECV_RR:
6270                 l2cap_pass_to_tx(chan, control);
6271                 if (control->final) {
6272                         clear_bit(CONN_REMOTE_BUSY, &chan->conn_state);
6273
6274                         if (!test_and_clear_bit(CONN_REJ_ACT, &chan->conn_state) &&
6275                             !__chan_is_moving(chan)) {
6276                                 control->final = 0;
6277                                 l2cap_retransmit_all(chan, control);
6278                         }
6279
6280                         l2cap_ertm_send(chan);
6281                 } else if (control->poll) {
6282                         l2cap_send_i_or_rr_or_rnr(chan);
6283                 } else {
6284                         if (test_and_clear_bit(CONN_REMOTE_BUSY,
6285                                                &chan->conn_state) &&
6286                             chan->unacked_frames)
6287                                 __set_retrans_timer(chan);
6288
6289                         l2cap_ertm_send(chan);
6290                 }
6291                 break;
6292         case L2CAP_EV_RECV_RNR:
6293                 set_bit(CONN_REMOTE_BUSY, &chan->conn_state);
6294                 l2cap_pass_to_tx(chan, control);
6295                 if (control && control->poll) {
6296                         set_bit(CONN_SEND_FBIT, &chan->conn_state);
6297                         l2cap_send_rr_or_rnr(chan, 0);
6298                 }
6299                 __clear_retrans_timer(chan);
6300                 l2cap_seq_list_clear(&chan->retrans_list);
6301                 break;
6302         case L2CAP_EV_RECV_REJ:
6303                 l2cap_handle_rej(chan, control);
6304                 break;
6305         case L2CAP_EV_RECV_SREJ:
6306                 l2cap_handle_srej(chan, control);
6307                 break;
6308         default:
6309                 break;
6310         }
6311
6312         if (skb && !skb_in_use) {
6313                 BT_DBG("Freeing %p", skb);
6314                 kfree_skb(skb);
6315         }
6316
6317         return err;
6318 }
6319
6320 static int l2cap_rx_state_srej_sent(struct l2cap_chan *chan,
6321                                     struct l2cap_ctrl *control,
6322                                     struct sk_buff *skb, u8 event)
6323 {
6324         int err = 0;
6325         u16 txseq = control->txseq;
6326         bool skb_in_use = false;
6327
6328         BT_DBG("chan %p, control %p, skb %p, event %d", chan, control, skb,
6329                event);
6330
6331         switch (event) {
6332         case L2CAP_EV_RECV_IFRAME:
6333                 switch (l2cap_classify_txseq(chan, txseq)) {
6334                 case L2CAP_TXSEQ_EXPECTED:
6335                         /* Keep frame for reassembly later */
6336                         l2cap_pass_to_tx(chan, control);
6337                         skb_queue_tail(&chan->srej_q, skb);
6338                         skb_in_use = true;
6339                         BT_DBG("Queued %p (queue len %d)", skb,
6340                                skb_queue_len(&chan->srej_q));
6341
6342                         chan->expected_tx_seq = __next_seq(chan, txseq);
6343                         break;
6344                 case L2CAP_TXSEQ_EXPECTED_SREJ:
6345                         l2cap_seq_list_pop(&chan->srej_list);
6346
6347                         l2cap_pass_to_tx(chan, control);
6348                         skb_queue_tail(&chan->srej_q, skb);
6349                         skb_in_use = true;
6350                         BT_DBG("Queued %p (queue len %d)", skb,
6351                                skb_queue_len(&chan->srej_q));
6352
6353                         err = l2cap_rx_queued_iframes(chan);
6354                         if (err)
6355                                 break;
6356
6357                         break;
6358                 case L2CAP_TXSEQ_UNEXPECTED:
6359                         /* Got a frame that can't be reassembled yet.
6360                          * Save it for later, and send SREJs to cover
6361                          * the missing frames.
6362                          */
6363                         skb_queue_tail(&chan->srej_q, skb);
6364                         skb_in_use = true;
6365                         BT_DBG("Queued %p (queue len %d)", skb,
6366                                skb_queue_len(&chan->srej_q));
6367
6368                         l2cap_pass_to_tx(chan, control);
6369                         l2cap_send_srej(chan, control->txseq);
6370                         break;
6371                 case L2CAP_TXSEQ_UNEXPECTED_SREJ:
6372                         /* This frame was requested with an SREJ, but
6373                          * some expected retransmitted frames are
6374                          * missing.  Request retransmission of missing
6375                          * SREJ'd frames.
6376                          */
6377                         skb_queue_tail(&chan->srej_q, skb);
6378                         skb_in_use = true;
6379                         BT_DBG("Queued %p (queue len %d)", skb,
6380                                skb_queue_len(&chan->srej_q));
6381
6382                         l2cap_pass_to_tx(chan, control);
6383                         l2cap_send_srej_list(chan, control->txseq);
6384                         break;
6385                 case L2CAP_TXSEQ_DUPLICATE_SREJ:
6386                         /* We've already queued this frame.  Drop this copy. */
6387                         l2cap_pass_to_tx(chan, control);
6388                         break;
6389                 case L2CAP_TXSEQ_DUPLICATE:
6390                         /* Expecting a later sequence number, so this frame
6391                          * was already received.  Ignore it completely.
6392                          */
6393                         break;
6394                 case L2CAP_TXSEQ_INVALID_IGNORE:
6395                         break;
6396                 case L2CAP_TXSEQ_INVALID:
6397                 default:
6398                         l2cap_send_disconn_req(chan, ECONNRESET);
6399                         break;
6400                 }
6401                 break;
6402         case L2CAP_EV_RECV_RR:
6403                 l2cap_pass_to_tx(chan, control);
6404                 if (control->final) {
6405                         clear_bit(CONN_REMOTE_BUSY, &chan->conn_state);
6406
6407                         if (!test_and_clear_bit(CONN_REJ_ACT,
6408                                                 &chan->conn_state)) {
6409                                 control->final = 0;
6410                                 l2cap_retransmit_all(chan, control);
6411                         }
6412
6413                         l2cap_ertm_send(chan);
6414                 } else if (control->poll) {
6415                         if (test_and_clear_bit(CONN_REMOTE_BUSY,
6416                                                &chan->conn_state) &&
6417                             chan->unacked_frames) {
6418                                 __set_retrans_timer(chan);
6419                         }
6420
6421                         set_bit(CONN_SEND_FBIT, &chan->conn_state);
6422                         l2cap_send_srej_tail(chan);
6423                 } else {
6424                         if (test_and_clear_bit(CONN_REMOTE_BUSY,
6425                                                &chan->conn_state) &&
6426                             chan->unacked_frames)
6427                                 __set_retrans_timer(chan);
6428
6429                         l2cap_send_ack(chan);
6430                 }
6431                 break;
6432         case L2CAP_EV_RECV_RNR:
6433                 set_bit(CONN_REMOTE_BUSY, &chan->conn_state);
6434                 l2cap_pass_to_tx(chan, control);
6435                 if (control->poll) {
6436                         l2cap_send_srej_tail(chan);
6437                 } else {
6438                         struct l2cap_ctrl rr_control;
6439                         memset(&rr_control, 0, sizeof(rr_control));
6440                         rr_control.sframe = 1;
6441                         rr_control.super = L2CAP_SUPER_RR;
6442                         rr_control.reqseq = chan->buffer_seq;
6443                         l2cap_send_sframe(chan, &rr_control);
6444                 }
6445
6446                 break;
6447         case L2CAP_EV_RECV_REJ:
6448                 l2cap_handle_rej(chan, control);
6449                 break;
6450         case L2CAP_EV_RECV_SREJ:
6451                 l2cap_handle_srej(chan, control);
6452                 break;
6453         }
6454
6455         if (skb && !skb_in_use) {
6456                 BT_DBG("Freeing %p", skb);
6457                 kfree_skb(skb);
6458         }
6459
6460         return err;
6461 }
6462
6463 static int l2cap_finish_move(struct l2cap_chan *chan)
6464 {
6465         BT_DBG("chan %p", chan);
6466
6467         chan->rx_state = L2CAP_RX_STATE_RECV;
6468
6469         if (chan->hs_hcon)
6470                 chan->conn->mtu = chan->hs_hcon->hdev->block_mtu;
6471         else
6472                 chan->conn->mtu = chan->conn->hcon->hdev->acl_mtu;
6473
6474         return l2cap_resegment(chan);
6475 }
6476
6477 static int l2cap_rx_state_wait_p(struct l2cap_chan *chan,
6478                                  struct l2cap_ctrl *control,
6479                                  struct sk_buff *skb, u8 event)
6480 {
6481         int err;
6482
6483         BT_DBG("chan %p, control %p, skb %p, event %d", chan, control, skb,
6484                event);
6485
6486         if (!control->poll)
6487                 return -EPROTO;
6488
6489         l2cap_process_reqseq(chan, control->reqseq);
6490
6491         if (!skb_queue_empty(&chan->tx_q))
6492                 chan->tx_send_head = skb_peek(&chan->tx_q);
6493         else
6494                 chan->tx_send_head = NULL;
6495
6496         /* Rewind next_tx_seq to the point expected
6497          * by the receiver.
6498          */
6499         chan->next_tx_seq = control->reqseq;
6500         chan->unacked_frames = 0;
6501
6502         err = l2cap_finish_move(chan);
6503         if (err)
6504                 return err;
6505
6506         set_bit(CONN_SEND_FBIT, &chan->conn_state);
6507         l2cap_send_i_or_rr_or_rnr(chan);
6508
6509         if (event == L2CAP_EV_RECV_IFRAME)
6510                 return -EPROTO;
6511
6512         return l2cap_rx_state_recv(chan, control, NULL, event);
6513 }
6514
6515 static int l2cap_rx_state_wait_f(struct l2cap_chan *chan,
6516                                  struct l2cap_ctrl *control,
6517                                  struct sk_buff *skb, u8 event)
6518 {
6519         int err;
6520
6521         if (!control->final)
6522                 return -EPROTO;
6523
6524         clear_bit(CONN_REMOTE_BUSY, &chan->conn_state);
6525
6526         chan->rx_state = L2CAP_RX_STATE_RECV;
6527         l2cap_process_reqseq(chan, control->reqseq);
6528
6529         if (!skb_queue_empty(&chan->tx_q))
6530                 chan->tx_send_head = skb_peek(&chan->tx_q);
6531         else
6532                 chan->tx_send_head = NULL;
6533
6534         /* Rewind next_tx_seq to the point expected
6535          * by the receiver.
6536          */
6537         chan->next_tx_seq = control->reqseq;
6538         chan->unacked_frames = 0;
6539
6540         if (chan->hs_hcon)
6541                 chan->conn->mtu = chan->hs_hcon->hdev->block_mtu;
6542         else
6543                 chan->conn->mtu = chan->conn->hcon->hdev->acl_mtu;
6544
6545         err = l2cap_resegment(chan);
6546
6547         if (!err)
6548                 err = l2cap_rx_state_recv(chan, control, skb, event);
6549
6550         return err;
6551 }
6552
6553 static bool __valid_reqseq(struct l2cap_chan *chan, u16 reqseq)
6554 {
6555         /* Make sure reqseq is for a packet that has been sent but not acked */
6556         u16 unacked;
6557
6558         unacked = __seq_offset(chan, chan->next_tx_seq, chan->expected_ack_seq);
6559         return __seq_offset(chan, chan->next_tx_seq, reqseq) <= unacked;
6560 }
6561
6562 static int l2cap_rx(struct l2cap_chan *chan, struct l2cap_ctrl *control,
6563                     struct sk_buff *skb, u8 event)
6564 {
6565         int err = 0;
6566
6567         BT_DBG("chan %p, control %p, skb %p, event %d, state %d", chan,
6568                control, skb, event, chan->rx_state);
6569
6570         if (__valid_reqseq(chan, control->reqseq)) {
6571                 switch (chan->rx_state) {
6572                 case L2CAP_RX_STATE_RECV:
6573                         err = l2cap_rx_state_recv(chan, control, skb, event);
6574                         break;
6575                 case L2CAP_RX_STATE_SREJ_SENT:
6576                         err = l2cap_rx_state_srej_sent(chan, control, skb,
6577                                                        event);
6578                         break;
6579                 case L2CAP_RX_STATE_WAIT_P:
6580                         err = l2cap_rx_state_wait_p(chan, control, skb, event);
6581                         break;
6582                 case L2CAP_RX_STATE_WAIT_F:
6583                         err = l2cap_rx_state_wait_f(chan, control, skb, event);
6584                         break;
6585                 default:
6586                         /* shut it down */
6587                         break;
6588                 }
6589         } else {
6590                 BT_DBG("Invalid reqseq %d (next_tx_seq %d, expected_ack_seq %d",
6591                        control->reqseq, chan->next_tx_seq,
6592                        chan->expected_ack_seq);
6593                 l2cap_send_disconn_req(chan, ECONNRESET);
6594         }
6595
6596         return err;
6597 }
6598
6599 static int l2cap_stream_rx(struct l2cap_chan *chan, struct l2cap_ctrl *control,
6600                            struct sk_buff *skb)
6601 {
6602         BT_DBG("chan %p, control %p, skb %p, state %d", chan, control, skb,
6603                chan->rx_state);
6604
6605         if (l2cap_classify_txseq(chan, control->txseq) ==
6606             L2CAP_TXSEQ_EXPECTED) {
6607                 l2cap_pass_to_tx(chan, control);
6608
6609                 BT_DBG("buffer_seq %d->%d", chan->buffer_seq,
6610                        __next_seq(chan, chan->buffer_seq));
6611
6612                 chan->buffer_seq = __next_seq(chan, chan->buffer_seq);
6613
6614                 l2cap_reassemble_sdu(chan, skb, control);
6615         } else {
6616                 if (chan->sdu) {
6617                         kfree_skb(chan->sdu);
6618                         chan->sdu = NULL;
6619                 }
6620                 chan->sdu_last_frag = NULL;
6621                 chan->sdu_len = 0;
6622
6623                 if (skb) {
6624                         BT_DBG("Freeing %p", skb);
6625                         kfree_skb(skb);
6626                 }
6627         }
6628
6629         chan->last_acked_seq = control->txseq;
6630         chan->expected_tx_seq = __next_seq(chan, control->txseq);
6631
6632         return 0;
6633 }
6634
6635 static int l2cap_data_rcv(struct l2cap_chan *chan, struct sk_buff *skb)
6636 {
6637         struct l2cap_ctrl *control = &bt_cb(skb)->l2cap;
6638         u16 len;
6639         u8 event;
6640
6641         __unpack_control(chan, skb);
6642
6643         len = skb->len;
6644
6645         /*
6646          * We can just drop the corrupted I-frame here.
6647          * Receiver will miss it and start proper recovery
6648          * procedures and ask for retransmission.
6649          */
6650         if (l2cap_check_fcs(chan, skb))
6651                 goto drop;
6652
6653         if (!control->sframe && control->sar == L2CAP_SAR_START)
6654                 len -= L2CAP_SDULEN_SIZE;
6655
6656         if (chan->fcs == L2CAP_FCS_CRC16)
6657                 len -= L2CAP_FCS_SIZE;
6658
6659         if (len > chan->mps) {
6660                 l2cap_send_disconn_req(chan, ECONNRESET);
6661                 goto drop;
6662         }
6663
6664         if ((chan->mode == L2CAP_MODE_ERTM ||
6665              chan->mode == L2CAP_MODE_STREAMING) && sk_filter(chan->data, skb))
6666                 goto drop;
6667
6668         if (!control->sframe) {
6669                 int err;
6670
6671                 BT_DBG("iframe sar %d, reqseq %d, final %d, txseq %d",
6672                        control->sar, control->reqseq, control->final,
6673                        control->txseq);
6674
6675                 /* Validate F-bit - F=0 always valid, F=1 only
6676                  * valid in TX WAIT_F
6677                  */
6678                 if (control->final && chan->tx_state != L2CAP_TX_STATE_WAIT_F)
6679                         goto drop;
6680
6681                 if (chan->mode != L2CAP_MODE_STREAMING) {
6682                         event = L2CAP_EV_RECV_IFRAME;
6683                         err = l2cap_rx(chan, control, skb, event);
6684                 } else {
6685                         err = l2cap_stream_rx(chan, control, skb);
6686                 }
6687
6688                 if (err)
6689                         l2cap_send_disconn_req(chan, ECONNRESET);
6690         } else {
6691                 const u8 rx_func_to_event[4] = {
6692                         L2CAP_EV_RECV_RR, L2CAP_EV_RECV_REJ,
6693                         L2CAP_EV_RECV_RNR, L2CAP_EV_RECV_SREJ
6694                 };
6695
6696                 /* Only I-frames are expected in streaming mode */
6697                 if (chan->mode == L2CAP_MODE_STREAMING)
6698                         goto drop;
6699
6700                 BT_DBG("sframe reqseq %d, final %d, poll %d, super %d",
6701                        control->reqseq, control->final, control->poll,
6702                        control->super);
6703
6704                 if (len != 0) {
6705                         BT_ERR("Trailing bytes: %d in sframe", len);
6706                         l2cap_send_disconn_req(chan, ECONNRESET);
6707                         goto drop;
6708                 }
6709
6710                 /* Validate F and P bits */
6711                 if (control->final && (control->poll ||
6712                                        chan->tx_state != L2CAP_TX_STATE_WAIT_F))
6713                         goto drop;
6714
6715                 event = rx_func_to_event[control->super];
6716                 if (l2cap_rx(chan, control, skb, event))
6717                         l2cap_send_disconn_req(chan, ECONNRESET);
6718         }
6719
6720         return 0;
6721
6722 drop:
6723         kfree_skb(skb);
6724         return 0;
6725 }
6726
6727 static void l2cap_chan_le_send_credits(struct l2cap_chan *chan)
6728 {
6729         struct l2cap_conn *conn = chan->conn;
6730         struct l2cap_le_credits pkt;
6731         u16 return_credits;
6732
6733         return_credits = ((chan->imtu / chan->mps) + 1) - chan->rx_credits;
6734
6735         if (!return_credits)
6736                 return;
6737
6738         BT_DBG("chan %p returning %u credits to sender", chan, return_credits);
6739
6740         chan->rx_credits += return_credits;
6741
6742         pkt.cid     = cpu_to_le16(chan->scid);
6743         pkt.credits = cpu_to_le16(return_credits);
6744
6745         chan->ident = l2cap_get_ident(conn);
6746
6747         l2cap_send_cmd(conn, chan->ident, L2CAP_LE_CREDITS, sizeof(pkt), &pkt);
6748 }
6749
6750 static int l2cap_le_recv(struct l2cap_chan *chan, struct sk_buff *skb)
6751 {
6752         int err;
6753
6754         BT_DBG("SDU reassemble complete: chan %p skb->len %u", chan, skb->len);
6755
6756         /* Wait recv to confirm reception before updating the credits */
6757         err = chan->ops->recv(chan, skb);
6758
6759         /* Update credits whenever an SDU is received */
6760         l2cap_chan_le_send_credits(chan);
6761
6762         return err;
6763 }
6764
6765 static int l2cap_le_data_rcv(struct l2cap_chan *chan, struct sk_buff *skb)
6766 {
6767         int err;
6768
6769         if (!chan->rx_credits) {
6770                 BT_ERR("No credits to receive LE L2CAP data");
6771                 l2cap_send_disconn_req(chan, ECONNRESET);
6772                 return -ENOBUFS;
6773         }
6774
6775         if (chan->imtu < skb->len) {
6776                 BT_ERR("Too big LE L2CAP PDU");
6777                 return -ENOBUFS;
6778         }
6779
6780         chan->rx_credits--;
6781         BT_DBG("rx_credits %u -> %u", chan->rx_credits + 1, chan->rx_credits);
6782
6783         /* Update if remote had run out of credits, this should only happens
6784          * if the remote is not using the entire MPS.
6785          */
6786         if (!chan->rx_credits)
6787                 l2cap_chan_le_send_credits(chan);
6788
6789         err = 0;
6790
6791         if (!chan->sdu) {
6792                 u16 sdu_len;
6793
6794                 sdu_len = get_unaligned_le16(skb->data);
6795                 skb_pull(skb, L2CAP_SDULEN_SIZE);
6796
6797                 BT_DBG("Start of new SDU. sdu_len %u skb->len %u imtu %u",
6798                        sdu_len, skb->len, chan->imtu);
6799
6800                 if (sdu_len > chan->imtu) {
6801                         BT_ERR("Too big LE L2CAP SDU length received");
6802                         err = -EMSGSIZE;
6803                         goto failed;
6804                 }
6805
6806                 if (skb->len > sdu_len) {
6807                         BT_ERR("Too much LE L2CAP data received");
6808                         err = -EINVAL;
6809                         goto failed;
6810                 }
6811
6812                 if (skb->len == sdu_len)
6813                         return l2cap_le_recv(chan, skb);
6814
6815                 chan->sdu = skb;
6816                 chan->sdu_len = sdu_len;
6817                 chan->sdu_last_frag = skb;
6818
6819                 /* Detect if remote is not able to use the selected MPS */
6820                 if (skb->len + L2CAP_SDULEN_SIZE < chan->mps) {
6821                         u16 mps_len = skb->len + L2CAP_SDULEN_SIZE;
6822
6823                         /* Adjust the number of credits */
6824                         BT_DBG("chan->mps %u -> %u", chan->mps, mps_len);
6825                         chan->mps = mps_len;
6826                         l2cap_chan_le_send_credits(chan);
6827                 }
6828
6829                 return 0;
6830         }
6831
6832         BT_DBG("SDU fragment. chan->sdu->len %u skb->len %u chan->sdu_len %u",
6833                chan->sdu->len, skb->len, chan->sdu_len);
6834
6835         if (chan->sdu->len + skb->len > chan->sdu_len) {
6836                 BT_ERR("Too much LE L2CAP data received");
6837                 err = -EINVAL;
6838                 goto failed;
6839         }
6840
6841         append_skb_frag(chan->sdu, skb, &chan->sdu_last_frag);
6842         skb = NULL;
6843
6844         if (chan->sdu->len == chan->sdu_len) {
6845                 err = l2cap_le_recv(chan, chan->sdu);
6846                 if (!err) {
6847                         chan->sdu = NULL;
6848                         chan->sdu_last_frag = NULL;
6849                         chan->sdu_len = 0;
6850                 }
6851         }
6852
6853 failed:
6854         if (err) {
6855                 kfree_skb(skb);
6856                 kfree_skb(chan->sdu);
6857                 chan->sdu = NULL;
6858                 chan->sdu_last_frag = NULL;
6859                 chan->sdu_len = 0;
6860         }
6861
6862         /* We can't return an error here since we took care of the skb
6863          * freeing internally. An error return would cause the caller to
6864          * do a double-free of the skb.
6865          */
6866         return 0;
6867 }
6868
6869 static void l2cap_data_channel(struct l2cap_conn *conn, u16 cid,
6870                                struct sk_buff *skb)
6871 {
6872         struct l2cap_chan *chan;
6873
6874         chan = l2cap_get_chan_by_scid(conn, cid);
6875         if (!chan) {
6876                 if (cid == L2CAP_CID_A2MP) {
6877                         chan = a2mp_channel_create(conn, skb);
6878                         if (!chan) {
6879                                 kfree_skb(skb);
6880                                 return;
6881                         }
6882
6883                         l2cap_chan_lock(chan);
6884                 } else {
6885                         BT_DBG("unknown cid 0x%4.4x", cid);
6886                         /* Drop packet and return */
6887                         kfree_skb(skb);
6888                         return;
6889                 }
6890         }
6891
6892         BT_DBG("chan %p, len %d", chan, skb->len);
6893
6894         /* If we receive data on a fixed channel before the info req/rsp
6895          * procdure is done simply assume that the channel is supported
6896          * and mark it as ready.
6897          */
6898         if (chan->chan_type == L2CAP_CHAN_FIXED)
6899                 l2cap_chan_ready(chan);
6900
6901         if (chan->state != BT_CONNECTED)
6902                 goto drop;
6903
6904         switch (chan->mode) {
6905         case L2CAP_MODE_LE_FLOWCTL:
6906                 if (l2cap_le_data_rcv(chan, skb) < 0)
6907                         goto drop;
6908
6909                 goto done;
6910
6911         case L2CAP_MODE_BASIC:
6912                 /* If socket recv buffers overflows we drop data here
6913                  * which is *bad* because L2CAP has to be reliable.
6914                  * But we don't have any other choice. L2CAP doesn't
6915                  * provide flow control mechanism. */
6916
6917                 if (chan->imtu < skb->len) {
6918                         BT_ERR("Dropping L2CAP data: receive buffer overflow");
6919                         goto drop;
6920                 }
6921
6922                 if (!chan->ops->recv(chan, skb))
6923                         goto done;
6924                 break;
6925
6926         case L2CAP_MODE_ERTM:
6927         case L2CAP_MODE_STREAMING:
6928                 l2cap_data_rcv(chan, skb);
6929                 goto done;
6930
6931         default:
6932                 BT_DBG("chan %p: bad mode 0x%2.2x", chan, chan->mode);
6933                 break;
6934         }
6935
6936 drop:
6937         kfree_skb(skb);
6938
6939 done:
6940         l2cap_chan_unlock(chan);
6941 }
6942
6943 static void l2cap_conless_channel(struct l2cap_conn *conn, __le16 psm,
6944                                   struct sk_buff *skb)
6945 {
6946         struct hci_conn *hcon = conn->hcon;
6947         struct l2cap_chan *chan;
6948
6949         if (hcon->type != ACL_LINK)
6950                 goto free_skb;
6951
6952         chan = l2cap_global_chan_by_psm(0, psm, &hcon->src, &hcon->dst,
6953                                         ACL_LINK);
6954         if (!chan)
6955                 goto free_skb;
6956
6957         BT_DBG("chan %p, len %d", chan, skb->len);
6958
6959         if (chan->state != BT_BOUND && chan->state != BT_CONNECTED)
6960                 goto drop;
6961
6962         if (chan->imtu < skb->len)
6963                 goto drop;
6964
6965         /* Store remote BD_ADDR and PSM for msg_name */
6966         bacpy(&bt_cb(skb)->l2cap.bdaddr, &hcon->dst);
6967         bt_cb(skb)->l2cap.psm = psm;
6968
6969         if (!chan->ops->recv(chan, skb)) {
6970                 l2cap_chan_put(chan);
6971                 return;
6972         }
6973
6974 drop:
6975         l2cap_chan_put(chan);
6976 free_skb:
6977         kfree_skb(skb);
6978 }
6979
6980 static void l2cap_recv_frame(struct l2cap_conn *conn, struct sk_buff *skb)
6981 {
6982         struct l2cap_hdr *lh = (void *) skb->data;
6983         struct hci_conn *hcon = conn->hcon;
6984         u16 cid, len;
6985         __le16 psm;
6986
6987         if (hcon->state != BT_CONNECTED) {
6988                 BT_DBG("queueing pending rx skb");
6989                 skb_queue_tail(&conn->pending_rx, skb);
6990                 return;
6991         }
6992
6993         skb_pull(skb, L2CAP_HDR_SIZE);
6994         cid = __le16_to_cpu(lh->cid);
6995         len = __le16_to_cpu(lh->len);
6996
6997         if (len != skb->len) {
6998                 kfree_skb(skb);
6999                 return;
7000         }
7001
7002         /* Since we can't actively block incoming LE connections we must
7003          * at least ensure that we ignore incoming data from them.
7004          */
7005         if (hcon->type == LE_LINK &&
7006             hci_bdaddr_list_lookup(&hcon->hdev->blacklist, &hcon->dst,
7007                                    bdaddr_dst_type(hcon))) {
7008                 kfree_skb(skb);
7009                 return;
7010         }
7011
7012         BT_DBG("len %d, cid 0x%4.4x", len, cid);
7013
7014         switch (cid) {
7015         case L2CAP_CID_SIGNALING:
7016                 l2cap_sig_channel(conn, skb);
7017                 break;
7018
7019         case L2CAP_CID_CONN_LESS:
7020                 psm = get_unaligned((__le16 *) skb->data);
7021                 skb_pull(skb, L2CAP_PSMLEN_SIZE);
7022                 l2cap_conless_channel(conn, psm, skb);
7023                 break;
7024
7025         case L2CAP_CID_LE_SIGNALING:
7026                 l2cap_le_sig_channel(conn, skb);
7027                 break;
7028
7029         default:
7030                 l2cap_data_channel(conn, cid, skb);
7031                 break;
7032         }
7033 }
7034
7035 static void process_pending_rx(struct work_struct *work)
7036 {
7037         struct l2cap_conn *conn = container_of(work, struct l2cap_conn,
7038                                                pending_rx_work);
7039         struct sk_buff *skb;
7040
7041         BT_DBG("");
7042
7043         while ((skb = skb_dequeue(&conn->pending_rx)))
7044                 l2cap_recv_frame(conn, skb);
7045 }
7046
7047 static struct l2cap_conn *l2cap_conn_add(struct hci_conn *hcon)
7048 {
7049         struct l2cap_conn *conn = hcon->l2cap_data;
7050         struct hci_chan *hchan;
7051
7052         if (conn)
7053                 return conn;
7054
7055         hchan = hci_chan_create(hcon);
7056         if (!hchan)
7057                 return NULL;
7058
7059         conn = kzalloc(sizeof(*conn), GFP_KERNEL);
7060         if (!conn) {
7061                 hci_chan_del(hchan);
7062                 return NULL;
7063         }
7064
7065         kref_init(&conn->ref);
7066         hcon->l2cap_data = conn;
7067         conn->hcon = hci_conn_get(hcon);
7068         conn->hchan = hchan;
7069
7070         BT_DBG("hcon %p conn %p hchan %p", hcon, conn, hchan);
7071
7072         switch (hcon->type) {
7073         case LE_LINK:
7074                 if (hcon->hdev->le_mtu) {
7075                         conn->mtu = hcon->hdev->le_mtu;
7076                         break;
7077                 }
7078                 /* fall through */
7079         default:
7080                 conn->mtu = hcon->hdev->acl_mtu;
7081                 break;
7082         }
7083
7084         conn->feat_mask = 0;
7085
7086         conn->local_fixed_chan = L2CAP_FC_SIG_BREDR | L2CAP_FC_CONNLESS;
7087
7088         if (hcon->type == ACL_LINK &&
7089             hci_dev_test_flag(hcon->hdev, HCI_HS_ENABLED))
7090                 conn->local_fixed_chan |= L2CAP_FC_A2MP;
7091
7092         if (hci_dev_test_flag(hcon->hdev, HCI_LE_ENABLED) &&
7093             (bredr_sc_enabled(hcon->hdev) ||
7094              hci_dev_test_flag(hcon->hdev, HCI_FORCE_BREDR_SMP)))
7095                 conn->local_fixed_chan |= L2CAP_FC_SMP_BREDR;
7096
7097         mutex_init(&conn->ident_lock);
7098         mutex_init(&conn->chan_lock);
7099
7100         INIT_LIST_HEAD(&conn->chan_l);
7101         INIT_LIST_HEAD(&conn->users);
7102
7103         INIT_DELAYED_WORK(&conn->info_timer, l2cap_info_timeout);
7104
7105         skb_queue_head_init(&conn->pending_rx);
7106         INIT_WORK(&conn->pending_rx_work, process_pending_rx);
7107         INIT_WORK(&conn->id_addr_update_work, l2cap_conn_update_id_addr);
7108
7109         conn->disc_reason = HCI_ERROR_REMOTE_USER_TERM;
7110
7111         return conn;
7112 }
7113
7114 static bool is_valid_psm(u16 psm, u8 dst_type) {
7115         if (!psm)
7116                 return false;
7117
7118         if (bdaddr_type_is_le(dst_type))
7119                 return (psm <= 0x00ff);
7120
7121         /* PSM must be odd and lsb of upper byte must be 0 */
7122         return ((psm & 0x0101) == 0x0001);
7123 }
7124
7125 int l2cap_chan_connect(struct l2cap_chan *chan, __le16 psm, u16 cid,
7126                        bdaddr_t *dst, u8 dst_type)
7127 {
7128         struct l2cap_conn *conn;
7129         struct hci_conn *hcon;
7130         struct hci_dev *hdev;
7131         int err;
7132
7133         BT_DBG("%pMR -> %pMR (type %u) psm 0x%2.2x", &chan->src, dst,
7134                dst_type, __le16_to_cpu(psm));
7135
7136         hdev = hci_get_route(dst, &chan->src, chan->src_type);
7137         if (!hdev)
7138                 return -EHOSTUNREACH;
7139
7140         hci_dev_lock(hdev);
7141
7142         if (!is_valid_psm(__le16_to_cpu(psm), dst_type) && !cid &&
7143             chan->chan_type != L2CAP_CHAN_RAW) {
7144                 err = -EINVAL;
7145                 goto done;
7146         }
7147
7148         if (chan->chan_type == L2CAP_CHAN_CONN_ORIENTED && !psm) {
7149                 err = -EINVAL;
7150                 goto done;
7151         }
7152
7153         if (chan->chan_type == L2CAP_CHAN_FIXED && !cid) {
7154                 err = -EINVAL;
7155                 goto done;
7156         }
7157
7158         switch (chan->mode) {
7159         case L2CAP_MODE_BASIC:
7160                 break;
7161         case L2CAP_MODE_LE_FLOWCTL:
7162                 break;
7163         case L2CAP_MODE_ERTM:
7164         case L2CAP_MODE_STREAMING:
7165                 if (!disable_ertm)
7166                         break;
7167                 /* fall through */
7168         default:
7169                 err = -EOPNOTSUPP;
7170                 goto done;
7171         }
7172
7173         switch (chan->state) {
7174         case BT_CONNECT:
7175         case BT_CONNECT2:
7176         case BT_CONFIG:
7177                 /* Already connecting */
7178                 err = 0;
7179                 goto done;
7180
7181         case BT_CONNECTED:
7182                 /* Already connected */
7183                 err = -EISCONN;
7184                 goto done;
7185
7186         case BT_OPEN:
7187         case BT_BOUND:
7188                 /* Can connect */
7189                 break;
7190
7191         default:
7192                 err = -EBADFD;
7193                 goto done;
7194         }
7195
7196         /* Set destination address and psm */
7197         bacpy(&chan->dst, dst);
7198         chan->dst_type = dst_type;
7199
7200         chan->psm = psm;
7201         chan->dcid = cid;
7202
7203         if (bdaddr_type_is_le(dst_type)) {
7204                 /* Convert from L2CAP channel address type to HCI address type
7205                  */
7206                 if (dst_type == BDADDR_LE_PUBLIC)
7207                         dst_type = ADDR_LE_DEV_PUBLIC;
7208                 else
7209                         dst_type = ADDR_LE_DEV_RANDOM;
7210
7211                 if (hci_dev_test_flag(hdev, HCI_ADVERTISING))
7212                         hcon = hci_connect_le(hdev, dst, dst_type,
7213                                               chan->sec_level,
7214                                               HCI_LE_CONN_TIMEOUT,
7215                                               HCI_ROLE_SLAVE, NULL);
7216                 else
7217                         hcon = hci_connect_le_scan(hdev, dst, dst_type,
7218                                                    chan->sec_level,
7219                                                    HCI_LE_CONN_TIMEOUT);
7220
7221         } else {
7222                 u8 auth_type = l2cap_get_auth_type(chan);
7223                 hcon = hci_connect_acl(hdev, dst, chan->sec_level, auth_type);
7224         }
7225
7226         if (IS_ERR(hcon)) {
7227                 err = PTR_ERR(hcon);
7228                 goto done;
7229         }
7230
7231         conn = l2cap_conn_add(hcon);
7232         if (!conn) {
7233                 hci_conn_drop(hcon);
7234                 err = -ENOMEM;
7235                 goto done;
7236         }
7237
7238         mutex_lock(&conn->chan_lock);
7239         l2cap_chan_lock(chan);
7240
7241         if (cid && __l2cap_get_chan_by_dcid(conn, cid)) {
7242                 hci_conn_drop(hcon);
7243                 err = -EBUSY;
7244                 goto chan_unlock;
7245         }
7246
7247         /* Update source addr of the socket */
7248         bacpy(&chan->src, &hcon->src);
7249         chan->src_type = bdaddr_src_type(hcon);
7250
7251         __l2cap_chan_add(conn, chan);
7252
7253         /* l2cap_chan_add takes its own ref so we can drop this one */
7254         hci_conn_drop(hcon);
7255
7256         l2cap_state_change(chan, BT_CONNECT);
7257         __set_chan_timer(chan, chan->ops->get_sndtimeo(chan));
7258
7259         /* Release chan->sport so that it can be reused by other
7260          * sockets (as it's only used for listening sockets).
7261          */
7262         write_lock(&chan_list_lock);
7263         chan->sport = 0;
7264         write_unlock(&chan_list_lock);
7265
7266         if (hcon->state == BT_CONNECTED) {
7267                 if (chan->chan_type != L2CAP_CHAN_CONN_ORIENTED) {
7268                         __clear_chan_timer(chan);
7269                         if (l2cap_chan_check_security(chan, true))
7270                                 l2cap_state_change(chan, BT_CONNECTED);
7271                 } else
7272                         l2cap_do_start(chan);
7273         }
7274
7275         err = 0;
7276
7277 chan_unlock:
7278         l2cap_chan_unlock(chan);
7279         mutex_unlock(&conn->chan_lock);
7280 done:
7281         hci_dev_unlock(hdev);
7282         hci_dev_put(hdev);
7283         return err;
7284 }
7285 EXPORT_SYMBOL_GPL(l2cap_chan_connect);
7286
7287 /* ---- L2CAP interface with lower layer (HCI) ---- */
7288
7289 int l2cap_connect_ind(struct hci_dev *hdev, bdaddr_t *bdaddr)
7290 {
7291         int exact = 0, lm1 = 0, lm2 = 0;
7292         struct l2cap_chan *c;
7293
7294         BT_DBG("hdev %s, bdaddr %pMR", hdev->name, bdaddr);
7295
7296         /* Find listening sockets and check their link_mode */
7297         read_lock(&chan_list_lock);
7298         list_for_each_entry(c, &chan_list, global_l) {
7299                 if (c->state != BT_LISTEN)
7300                         continue;
7301
7302                 if (!bacmp(&c->src, &hdev->bdaddr)) {
7303                         lm1 |= HCI_LM_ACCEPT;
7304                         if (test_bit(FLAG_ROLE_SWITCH, &c->flags))
7305                                 lm1 |= HCI_LM_MASTER;
7306                         exact++;
7307                 } else if (!bacmp(&c->src, BDADDR_ANY)) {
7308                         lm2 |= HCI_LM_ACCEPT;
7309                         if (test_bit(FLAG_ROLE_SWITCH, &c->flags))
7310                                 lm2 |= HCI_LM_MASTER;
7311                 }
7312         }
7313         read_unlock(&chan_list_lock);
7314
7315         return exact ? lm1 : lm2;
7316 }
7317
7318 /* Find the next fixed channel in BT_LISTEN state, continue iteration
7319  * from an existing channel in the list or from the beginning of the
7320  * global list (by passing NULL as first parameter).
7321  */
7322 static struct l2cap_chan *l2cap_global_fixed_chan(struct l2cap_chan *c,
7323                                                   struct hci_conn *hcon)
7324 {
7325         u8 src_type = bdaddr_src_type(hcon);
7326
7327         read_lock(&chan_list_lock);
7328
7329         if (c)
7330                 c = list_next_entry(c, global_l);
7331         else
7332                 c = list_entry(chan_list.next, typeof(*c), global_l);
7333
7334         list_for_each_entry_from(c, &chan_list, global_l) {
7335                 if (c->chan_type != L2CAP_CHAN_FIXED)
7336                         continue;
7337                 if (c->state != BT_LISTEN)
7338                         continue;
7339                 if (bacmp(&c->src, &hcon->src) && bacmp(&c->src, BDADDR_ANY))
7340                         continue;
7341                 if (src_type != c->src_type)
7342                         continue;
7343
7344                 l2cap_chan_hold(c);
7345                 read_unlock(&chan_list_lock);
7346                 return c;
7347         }
7348
7349         read_unlock(&chan_list_lock);
7350
7351         return NULL;
7352 }
7353
7354 static void l2cap_connect_cfm(struct hci_conn *hcon, u8 status)
7355 {
7356         struct hci_dev *hdev = hcon->hdev;
7357         struct l2cap_conn *conn;
7358         struct l2cap_chan *pchan;
7359         u8 dst_type;
7360
7361         if (hcon->type != ACL_LINK && hcon->type != LE_LINK)
7362                 return;
7363
7364         BT_DBG("hcon %p bdaddr %pMR status %d", hcon, &hcon->dst, status);
7365
7366         if (status) {
7367                 l2cap_conn_del(hcon, bt_to_errno(status));
7368                 return;
7369         }
7370
7371         conn = l2cap_conn_add(hcon);
7372         if (!conn)
7373                 return;
7374
7375         dst_type = bdaddr_dst_type(hcon);
7376
7377         /* If device is blocked, do not create channels for it */
7378         if (hci_bdaddr_list_lookup(&hdev->blacklist, &hcon->dst, dst_type))
7379                 return;
7380
7381         /* Find fixed channels and notify them of the new connection. We
7382          * use multiple individual lookups, continuing each time where
7383          * we left off, because the list lock would prevent calling the
7384          * potentially sleeping l2cap_chan_lock() function.
7385          */
7386         pchan = l2cap_global_fixed_chan(NULL, hcon);
7387         while (pchan) {
7388                 struct l2cap_chan *chan, *next;
7389
7390                 /* Client fixed channels should override server ones */
7391                 if (__l2cap_get_chan_by_dcid(conn, pchan->scid))
7392                         goto next;
7393
7394                 l2cap_chan_lock(pchan);
7395                 chan = pchan->ops->new_connection(pchan);
7396                 if (chan) {
7397                         bacpy(&chan->src, &hcon->src);
7398                         bacpy(&chan->dst, &hcon->dst);
7399                         chan->src_type = bdaddr_src_type(hcon);
7400                         chan->dst_type = dst_type;
7401
7402                         __l2cap_chan_add(conn, chan);
7403                 }
7404
7405                 l2cap_chan_unlock(pchan);
7406 next:
7407                 next = l2cap_global_fixed_chan(pchan, hcon);
7408                 l2cap_chan_put(pchan);
7409                 pchan = next;
7410         }
7411
7412         l2cap_conn_ready(conn);
7413 }
7414
7415 int l2cap_disconn_ind(struct hci_conn *hcon)
7416 {
7417         struct l2cap_conn *conn = hcon->l2cap_data;
7418
7419         BT_DBG("hcon %p", hcon);
7420
7421         if (!conn)
7422                 return HCI_ERROR_REMOTE_USER_TERM;
7423         return conn->disc_reason;
7424 }
7425
7426 static void l2cap_disconn_cfm(struct hci_conn *hcon, u8 reason)
7427 {
7428         if (hcon->type != ACL_LINK && hcon->type != LE_LINK)
7429                 return;
7430
7431         BT_DBG("hcon %p reason %d", hcon, reason);
7432
7433         l2cap_conn_del(hcon, bt_to_errno(reason));
7434 }
7435
7436 static inline void l2cap_check_encryption(struct l2cap_chan *chan, u8 encrypt)
7437 {
7438         if (chan->chan_type != L2CAP_CHAN_CONN_ORIENTED)
7439                 return;
7440
7441         if (encrypt == 0x00) {
7442                 if (chan->sec_level == BT_SECURITY_MEDIUM) {
7443                         __set_chan_timer(chan, L2CAP_ENC_TIMEOUT);
7444                 } else if (chan->sec_level == BT_SECURITY_HIGH ||
7445                            chan->sec_level == BT_SECURITY_FIPS)
7446                         l2cap_chan_close(chan, ECONNREFUSED);
7447         } else {
7448                 if (chan->sec_level == BT_SECURITY_MEDIUM)
7449                         __clear_chan_timer(chan);
7450         }
7451 }
7452
7453 static void l2cap_security_cfm(struct hci_conn *hcon, u8 status, u8 encrypt)
7454 {
7455         struct l2cap_conn *conn = hcon->l2cap_data;
7456         struct l2cap_chan *chan;
7457
7458         if (!conn)
7459                 return;
7460
7461         BT_DBG("conn %p status 0x%2.2x encrypt %u", conn, status, encrypt);
7462
7463         mutex_lock(&conn->chan_lock);
7464
7465         list_for_each_entry(chan, &conn->chan_l, list) {
7466                 l2cap_chan_lock(chan);
7467
7468                 BT_DBG("chan %p scid 0x%4.4x state %s", chan, chan->scid,
7469                        state_to_string(chan->state));
7470
7471                 if (chan->scid == L2CAP_CID_A2MP) {
7472                         l2cap_chan_unlock(chan);
7473                         continue;
7474                 }
7475
7476                 if (!status && encrypt)
7477                         chan->sec_level = hcon->sec_level;
7478
7479                 if (!__l2cap_no_conn_pending(chan)) {
7480                         l2cap_chan_unlock(chan);
7481                         continue;
7482                 }
7483
7484                 if (!status && (chan->state == BT_CONNECTED ||
7485                                 chan->state == BT_CONFIG)) {
7486                         chan->ops->resume(chan);
7487                         l2cap_check_encryption(chan, encrypt);
7488                         l2cap_chan_unlock(chan);
7489                         continue;
7490                 }
7491
7492                 if (chan->state == BT_CONNECT) {
7493                         if (!status)
7494                                 l2cap_start_connection(chan);
7495                         else
7496                                 __set_chan_timer(chan, L2CAP_DISC_TIMEOUT);
7497                 } else if (chan->state == BT_CONNECT2 &&
7498                            chan->mode != L2CAP_MODE_LE_FLOWCTL) {
7499                         struct l2cap_conn_rsp rsp;
7500                         __u16 res, stat;
7501
7502                         if (!status) {
7503                                 if (test_bit(FLAG_DEFER_SETUP, &chan->flags)) {
7504                                         res = L2CAP_CR_PEND;
7505                                         stat = L2CAP_CS_AUTHOR_PEND;
7506                                         chan->ops->defer(chan);
7507                                 } else {
7508                                         l2cap_state_change(chan, BT_CONFIG);
7509                                         res = L2CAP_CR_SUCCESS;
7510                                         stat = L2CAP_CS_NO_INFO;
7511                                 }
7512                         } else {
7513                                 l2cap_state_change(chan, BT_DISCONN);
7514                                 __set_chan_timer(chan, L2CAP_DISC_TIMEOUT);
7515                                 res = L2CAP_CR_SEC_BLOCK;
7516                                 stat = L2CAP_CS_NO_INFO;
7517                         }
7518
7519                         rsp.scid   = cpu_to_le16(chan->dcid);
7520                         rsp.dcid   = cpu_to_le16(chan->scid);
7521                         rsp.result = cpu_to_le16(res);
7522                         rsp.status = cpu_to_le16(stat);
7523                         l2cap_send_cmd(conn, chan->ident, L2CAP_CONN_RSP,
7524                                        sizeof(rsp), &rsp);
7525
7526                         if (!test_bit(CONF_REQ_SENT, &chan->conf_state) &&
7527                             res == L2CAP_CR_SUCCESS) {
7528                                 char buf[128];
7529                                 set_bit(CONF_REQ_SENT, &chan->conf_state);
7530                                 l2cap_send_cmd(conn, l2cap_get_ident(conn),
7531                                                L2CAP_CONF_REQ,
7532                                                l2cap_build_conf_req(chan, buf, sizeof(buf)),
7533                                                buf);
7534                                 chan->num_conf_req++;
7535                         }
7536                 }
7537
7538                 l2cap_chan_unlock(chan);
7539         }
7540
7541         mutex_unlock(&conn->chan_lock);
7542 }
7543
7544 void l2cap_recv_acldata(struct hci_conn *hcon, struct sk_buff *skb, u16 flags)
7545 {
7546         struct l2cap_conn *conn = hcon->l2cap_data;
7547         struct l2cap_hdr *hdr;
7548         int len;
7549
7550         /* For AMP controller do not create l2cap conn */
7551         if (!conn && hcon->hdev->dev_type != HCI_PRIMARY)
7552                 goto drop;
7553
7554         if (!conn)
7555                 conn = l2cap_conn_add(hcon);
7556
7557         if (!conn)
7558                 goto drop;
7559
7560         BT_DBG("conn %p len %d flags 0x%x", conn, skb->len, flags);
7561
7562         switch (flags) {
7563         case ACL_START:
7564         case ACL_START_NO_FLUSH:
7565         case ACL_COMPLETE:
7566                 if (conn->rx_len) {
7567                         BT_ERR("Unexpected start frame (len %d)", skb->len);
7568                         kfree_skb(conn->rx_skb);
7569                         conn->rx_skb = NULL;
7570                         conn->rx_len = 0;
7571                         l2cap_conn_unreliable(conn, ECOMM);
7572                 }
7573
7574                 /* Start fragment always begin with Basic L2CAP header */
7575                 if (skb->len < L2CAP_HDR_SIZE) {
7576                         BT_ERR("Frame is too short (len %d)", skb->len);
7577                         l2cap_conn_unreliable(conn, ECOMM);
7578                         goto drop;
7579                 }
7580
7581                 hdr = (struct l2cap_hdr *) skb->data;
7582                 len = __le16_to_cpu(hdr->len) + L2CAP_HDR_SIZE;
7583
7584                 if (len == skb->len) {
7585                         /* Complete frame received */
7586                         l2cap_recv_frame(conn, skb);
7587                         return;
7588                 }
7589
7590                 BT_DBG("Start: total len %d, frag len %d", len, skb->len);
7591
7592                 if (skb->len > len) {
7593                         BT_ERR("Frame is too long (len %d, expected len %d)",
7594                                skb->len, len);
7595                         l2cap_conn_unreliable(conn, ECOMM);
7596                         goto drop;
7597                 }
7598
7599                 /* Allocate skb for the complete frame (with header) */
7600                 conn->rx_skb = bt_skb_alloc(len, GFP_KERNEL);
7601                 if (!conn->rx_skb)
7602                         goto drop;
7603
7604                 skb_copy_from_linear_data(skb, skb_put(conn->rx_skb, skb->len),
7605                                           skb->len);
7606                 conn->rx_len = len - skb->len;
7607                 break;
7608
7609         case ACL_CONT:
7610                 BT_DBG("Cont: frag len %d (expecting %d)", skb->len, conn->rx_len);
7611
7612                 if (!conn->rx_len) {
7613                         BT_ERR("Unexpected continuation frame (len %d)", skb->len);
7614                         l2cap_conn_unreliable(conn, ECOMM);
7615                         goto drop;
7616                 }
7617
7618                 if (skb->len > conn->rx_len) {
7619                         BT_ERR("Fragment is too long (len %d, expected %d)",
7620                                skb->len, conn->rx_len);
7621                         kfree_skb(conn->rx_skb);
7622                         conn->rx_skb = NULL;
7623                         conn->rx_len = 0;
7624                         l2cap_conn_unreliable(conn, ECOMM);
7625                         goto drop;
7626                 }
7627
7628                 skb_copy_from_linear_data(skb, skb_put(conn->rx_skb, skb->len),
7629                                           skb->len);
7630                 conn->rx_len -= skb->len;
7631
7632                 if (!conn->rx_len) {
7633                         /* Complete frame received. l2cap_recv_frame
7634                          * takes ownership of the skb so set the global
7635                          * rx_skb pointer to NULL first.
7636                          */
7637                         struct sk_buff *rx_skb = conn->rx_skb;
7638                         conn->rx_skb = NULL;
7639                         l2cap_recv_frame(conn, rx_skb);
7640                 }
7641                 break;
7642         }
7643
7644 drop:
7645         kfree_skb(skb);
7646 }
7647
7648 static struct hci_cb l2cap_cb = {
7649         .name           = "L2CAP",
7650         .connect_cfm    = l2cap_connect_cfm,
7651         .disconn_cfm    = l2cap_disconn_cfm,
7652         .security_cfm   = l2cap_security_cfm,
7653 };
7654
7655 static int l2cap_debugfs_show(struct seq_file *f, void *p)
7656 {
7657         struct l2cap_chan *c;
7658
7659         read_lock(&chan_list_lock);
7660
7661         list_for_each_entry(c, &chan_list, global_l) {
7662                 seq_printf(f, "%pMR (%u) %pMR (%u) %d %d 0x%4.4x 0x%4.4x %d %d %d %d\n",
7663                            &c->src, c->src_type, &c->dst, c->dst_type,
7664                            c->state, __le16_to_cpu(c->psm),
7665                            c->scid, c->dcid, c->imtu, c->omtu,
7666                            c->sec_level, c->mode);
7667         }
7668
7669         read_unlock(&chan_list_lock);
7670
7671         return 0;
7672 }
7673
7674 DEFINE_SHOW_ATTRIBUTE(l2cap_debugfs);
7675
7676 static struct dentry *l2cap_debugfs;
7677
7678 int __init l2cap_init(void)
7679 {
7680         int err;
7681
7682         err = l2cap_init_sockets();
7683         if (err < 0)
7684                 return err;
7685
7686         hci_register_cb(&l2cap_cb);
7687
7688         if (IS_ERR_OR_NULL(bt_debugfs))
7689                 return 0;
7690
7691         l2cap_debugfs = debugfs_create_file("l2cap", 0444, bt_debugfs,
7692                                             NULL, &l2cap_debugfs_fops);
7693
7694         return 0;
7695 }
7696
7697 void l2cap_exit(void)
7698 {
7699         debugfs_remove(l2cap_debugfs);
7700         hci_unregister_cb(&l2cap_cb);
7701         l2cap_cleanup_sockets();
7702 }
7703
7704 module_param(disable_ertm, bool, 0644);
7705 MODULE_PARM_DESC(disable_ertm, "Disable enhanced retransmission mode");