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