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