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