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