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