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