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