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