xref: /openbmc/linux/net/bluetooth/l2cap_core.c (revision 82e6fdd6)
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 			if (olen == sizeof(efs)) {
3367 				remote_efs = 1;
3368 				memcpy(&efs, (void *) val, olen);
3369 			}
3370 			break;
3371 
3372 		case L2CAP_CONF_EWS:
3373 			if (!(chan->conn->local_fixed_chan & L2CAP_FC_A2MP))
3374 				return -ECONNREFUSED;
3375 
3376 			set_bit(FLAG_EXT_CTRL, &chan->flags);
3377 			set_bit(CONF_EWS_RECV, &chan->conf_state);
3378 			chan->tx_win_max = L2CAP_DEFAULT_EXT_WINDOW;
3379 			chan->remote_tx_win = val;
3380 			break;
3381 
3382 		default:
3383 			if (hint)
3384 				break;
3385 
3386 			result = L2CAP_CONF_UNKNOWN;
3387 			*((u8 *) ptr++) = type;
3388 			break;
3389 		}
3390 	}
3391 
3392 	if (chan->num_conf_rsp || chan->num_conf_req > 1)
3393 		goto done;
3394 
3395 	switch (chan->mode) {
3396 	case L2CAP_MODE_STREAMING:
3397 	case L2CAP_MODE_ERTM:
3398 		if (!test_bit(CONF_STATE2_DEVICE, &chan->conf_state)) {
3399 			chan->mode = l2cap_select_mode(rfc.mode,
3400 						       chan->conn->feat_mask);
3401 			break;
3402 		}
3403 
3404 		if (remote_efs) {
3405 			if (__l2cap_efs_supported(chan->conn))
3406 				set_bit(FLAG_EFS_ENABLE, &chan->flags);
3407 			else
3408 				return -ECONNREFUSED;
3409 		}
3410 
3411 		if (chan->mode != rfc.mode)
3412 			return -ECONNREFUSED;
3413 
3414 		break;
3415 	}
3416 
3417 done:
3418 	if (chan->mode != rfc.mode) {
3419 		result = L2CAP_CONF_UNACCEPT;
3420 		rfc.mode = chan->mode;
3421 
3422 		if (chan->num_conf_rsp == 1)
3423 			return -ECONNREFUSED;
3424 
3425 		l2cap_add_conf_opt(&ptr, L2CAP_CONF_RFC, sizeof(rfc),
3426 				   (unsigned long) &rfc, endptr - ptr);
3427 	}
3428 
3429 	if (result == L2CAP_CONF_SUCCESS) {
3430 		/* Configure output options and let the other side know
3431 		 * which ones we don't like. */
3432 
3433 		if (mtu < L2CAP_DEFAULT_MIN_MTU)
3434 			result = L2CAP_CONF_UNACCEPT;
3435 		else {
3436 			chan->omtu = mtu;
3437 			set_bit(CONF_MTU_DONE, &chan->conf_state);
3438 		}
3439 		l2cap_add_conf_opt(&ptr, L2CAP_CONF_MTU, 2, chan->omtu, endptr - ptr);
3440 
3441 		if (remote_efs) {
3442 			if (chan->local_stype != L2CAP_SERV_NOTRAFIC &&
3443 			    efs.stype != L2CAP_SERV_NOTRAFIC &&
3444 			    efs.stype != chan->local_stype) {
3445 
3446 				result = L2CAP_CONF_UNACCEPT;
3447 
3448 				if (chan->num_conf_req >= 1)
3449 					return -ECONNREFUSED;
3450 
3451 				l2cap_add_conf_opt(&ptr, L2CAP_CONF_EFS,
3452 						   sizeof(efs),
3453 						   (unsigned long) &efs, endptr - ptr);
3454 			} else {
3455 				/* Send PENDING Conf Rsp */
3456 				result = L2CAP_CONF_PENDING;
3457 				set_bit(CONF_LOC_CONF_PEND, &chan->conf_state);
3458 			}
3459 		}
3460 
3461 		switch (rfc.mode) {
3462 		case L2CAP_MODE_BASIC:
3463 			chan->fcs = L2CAP_FCS_NONE;
3464 			set_bit(CONF_MODE_DONE, &chan->conf_state);
3465 			break;
3466 
3467 		case L2CAP_MODE_ERTM:
3468 			if (!test_bit(CONF_EWS_RECV, &chan->conf_state))
3469 				chan->remote_tx_win = rfc.txwin_size;
3470 			else
3471 				rfc.txwin_size = L2CAP_DEFAULT_TX_WINDOW;
3472 
3473 			chan->remote_max_tx = rfc.max_transmit;
3474 
3475 			size = min_t(u16, le16_to_cpu(rfc.max_pdu_size),
3476 				     chan->conn->mtu - L2CAP_EXT_HDR_SIZE -
3477 				     L2CAP_SDULEN_SIZE - L2CAP_FCS_SIZE);
3478 			rfc.max_pdu_size = cpu_to_le16(size);
3479 			chan->remote_mps = size;
3480 
3481 			__l2cap_set_ertm_timeouts(chan, &rfc);
3482 
3483 			set_bit(CONF_MODE_DONE, &chan->conf_state);
3484 
3485 			l2cap_add_conf_opt(&ptr, L2CAP_CONF_RFC,
3486 					   sizeof(rfc), (unsigned long) &rfc, endptr - ptr);
3487 
3488 			if (test_bit(FLAG_EFS_ENABLE, &chan->flags)) {
3489 				chan->remote_id = efs.id;
3490 				chan->remote_stype = efs.stype;
3491 				chan->remote_msdu = le16_to_cpu(efs.msdu);
3492 				chan->remote_flush_to =
3493 					le32_to_cpu(efs.flush_to);
3494 				chan->remote_acc_lat =
3495 					le32_to_cpu(efs.acc_lat);
3496 				chan->remote_sdu_itime =
3497 					le32_to_cpu(efs.sdu_itime);
3498 				l2cap_add_conf_opt(&ptr, L2CAP_CONF_EFS,
3499 						   sizeof(efs),
3500 						   (unsigned long) &efs, endptr - ptr);
3501 			}
3502 			break;
3503 
3504 		case L2CAP_MODE_STREAMING:
3505 			size = min_t(u16, le16_to_cpu(rfc.max_pdu_size),
3506 				     chan->conn->mtu - L2CAP_EXT_HDR_SIZE -
3507 				     L2CAP_SDULEN_SIZE - L2CAP_FCS_SIZE);
3508 			rfc.max_pdu_size = cpu_to_le16(size);
3509 			chan->remote_mps = size;
3510 
3511 			set_bit(CONF_MODE_DONE, &chan->conf_state);
3512 
3513 			l2cap_add_conf_opt(&ptr, L2CAP_CONF_RFC, sizeof(rfc),
3514 					   (unsigned long) &rfc, endptr - ptr);
3515 
3516 			break;
3517 
3518 		default:
3519 			result = L2CAP_CONF_UNACCEPT;
3520 
3521 			memset(&rfc, 0, sizeof(rfc));
3522 			rfc.mode = chan->mode;
3523 		}
3524 
3525 		if (result == L2CAP_CONF_SUCCESS)
3526 			set_bit(CONF_OUTPUT_DONE, &chan->conf_state);
3527 	}
3528 	rsp->scid   = cpu_to_le16(chan->dcid);
3529 	rsp->result = cpu_to_le16(result);
3530 	rsp->flags  = cpu_to_le16(0);
3531 
3532 	return ptr - data;
3533 }
3534 
3535 static int l2cap_parse_conf_rsp(struct l2cap_chan *chan, void *rsp, int len,
3536 				void *data, size_t size, u16 *result)
3537 {
3538 	struct l2cap_conf_req *req = data;
3539 	void *ptr = req->data;
3540 	void *endptr = data + size;
3541 	int type, olen;
3542 	unsigned long val;
3543 	struct l2cap_conf_rfc rfc = { .mode = L2CAP_MODE_BASIC };
3544 	struct l2cap_conf_efs efs;
3545 
3546 	BT_DBG("chan %p, rsp %p, len %d, req %p", chan, rsp, len, data);
3547 
3548 	while (len >= L2CAP_CONF_OPT_SIZE) {
3549 		len -= l2cap_get_conf_opt(&rsp, &type, &olen, &val);
3550 
3551 		switch (type) {
3552 		case L2CAP_CONF_MTU:
3553 			if (val < L2CAP_DEFAULT_MIN_MTU) {
3554 				*result = L2CAP_CONF_UNACCEPT;
3555 				chan->imtu = L2CAP_DEFAULT_MIN_MTU;
3556 			} else
3557 				chan->imtu = val;
3558 			l2cap_add_conf_opt(&ptr, L2CAP_CONF_MTU, 2, chan->imtu, endptr - ptr);
3559 			break;
3560 
3561 		case L2CAP_CONF_FLUSH_TO:
3562 			chan->flush_to = val;
3563 			l2cap_add_conf_opt(&ptr, L2CAP_CONF_FLUSH_TO,
3564 					   2, chan->flush_to, endptr - ptr);
3565 			break;
3566 
3567 		case L2CAP_CONF_RFC:
3568 			if (olen == sizeof(rfc))
3569 				memcpy(&rfc, (void *)val, olen);
3570 
3571 			if (test_bit(CONF_STATE2_DEVICE, &chan->conf_state) &&
3572 			    rfc.mode != chan->mode)
3573 				return -ECONNREFUSED;
3574 
3575 			chan->fcs = 0;
3576 
3577 			l2cap_add_conf_opt(&ptr, L2CAP_CONF_RFC,
3578 					   sizeof(rfc), (unsigned long) &rfc, endptr - ptr);
3579 			break;
3580 
3581 		case L2CAP_CONF_EWS:
3582 			chan->ack_win = min_t(u16, val, chan->ack_win);
3583 			l2cap_add_conf_opt(&ptr, L2CAP_CONF_EWS, 2,
3584 					   chan->tx_win, endptr - ptr);
3585 			break;
3586 
3587 		case L2CAP_CONF_EFS:
3588 			if (olen == sizeof(efs)) {
3589 				memcpy(&efs, (void *)val, olen);
3590 
3591 				if (chan->local_stype != L2CAP_SERV_NOTRAFIC &&
3592 				    efs.stype != L2CAP_SERV_NOTRAFIC &&
3593 				    efs.stype != chan->local_stype)
3594 					return -ECONNREFUSED;
3595 
3596 				l2cap_add_conf_opt(&ptr, L2CAP_CONF_EFS, sizeof(efs),
3597 						   (unsigned long) &efs, endptr - ptr);
3598 			}
3599 			break;
3600 
3601 		case L2CAP_CONF_FCS:
3602 			if (*result == L2CAP_CONF_PENDING)
3603 				if (val == L2CAP_FCS_NONE)
3604 					set_bit(CONF_RECV_NO_FCS,
3605 						&chan->conf_state);
3606 			break;
3607 		}
3608 	}
3609 
3610 	if (chan->mode == L2CAP_MODE_BASIC && chan->mode != rfc.mode)
3611 		return -ECONNREFUSED;
3612 
3613 	chan->mode = rfc.mode;
3614 
3615 	if (*result == L2CAP_CONF_SUCCESS || *result == L2CAP_CONF_PENDING) {
3616 		switch (rfc.mode) {
3617 		case L2CAP_MODE_ERTM:
3618 			chan->retrans_timeout = le16_to_cpu(rfc.retrans_timeout);
3619 			chan->monitor_timeout = le16_to_cpu(rfc.monitor_timeout);
3620 			chan->mps    = le16_to_cpu(rfc.max_pdu_size);
3621 			if (!test_bit(FLAG_EXT_CTRL, &chan->flags))
3622 				chan->ack_win = min_t(u16, chan->ack_win,
3623 						      rfc.txwin_size);
3624 
3625 			if (test_bit(FLAG_EFS_ENABLE, &chan->flags)) {
3626 				chan->local_msdu = le16_to_cpu(efs.msdu);
3627 				chan->local_sdu_itime =
3628 					le32_to_cpu(efs.sdu_itime);
3629 				chan->local_acc_lat = le32_to_cpu(efs.acc_lat);
3630 				chan->local_flush_to =
3631 					le32_to_cpu(efs.flush_to);
3632 			}
3633 			break;
3634 
3635 		case L2CAP_MODE_STREAMING:
3636 			chan->mps    = le16_to_cpu(rfc.max_pdu_size);
3637 		}
3638 	}
3639 
3640 	req->dcid   = cpu_to_le16(chan->dcid);
3641 	req->flags  = cpu_to_le16(0);
3642 
3643 	return ptr - data;
3644 }
3645 
3646 static int l2cap_build_conf_rsp(struct l2cap_chan *chan, void *data,
3647 				u16 result, u16 flags)
3648 {
3649 	struct l2cap_conf_rsp *rsp = data;
3650 	void *ptr = rsp->data;
3651 
3652 	BT_DBG("chan %p", chan);
3653 
3654 	rsp->scid   = cpu_to_le16(chan->dcid);
3655 	rsp->result = cpu_to_le16(result);
3656 	rsp->flags  = cpu_to_le16(flags);
3657 
3658 	return ptr - data;
3659 }
3660 
3661 void __l2cap_le_connect_rsp_defer(struct l2cap_chan *chan)
3662 {
3663 	struct l2cap_le_conn_rsp rsp;
3664 	struct l2cap_conn *conn = chan->conn;
3665 
3666 	BT_DBG("chan %p", chan);
3667 
3668 	rsp.dcid    = cpu_to_le16(chan->scid);
3669 	rsp.mtu     = cpu_to_le16(chan->imtu);
3670 	rsp.mps     = cpu_to_le16(chan->mps);
3671 	rsp.credits = cpu_to_le16(chan->rx_credits);
3672 	rsp.result  = cpu_to_le16(L2CAP_CR_SUCCESS);
3673 
3674 	l2cap_send_cmd(conn, chan->ident, L2CAP_LE_CONN_RSP, sizeof(rsp),
3675 		       &rsp);
3676 }
3677 
3678 void __l2cap_connect_rsp_defer(struct l2cap_chan *chan)
3679 {
3680 	struct l2cap_conn_rsp rsp;
3681 	struct l2cap_conn *conn = chan->conn;
3682 	u8 buf[128];
3683 	u8 rsp_code;
3684 
3685 	rsp.scid   = cpu_to_le16(chan->dcid);
3686 	rsp.dcid   = cpu_to_le16(chan->scid);
3687 	rsp.result = cpu_to_le16(L2CAP_CR_SUCCESS);
3688 	rsp.status = cpu_to_le16(L2CAP_CS_NO_INFO);
3689 
3690 	if (chan->hs_hcon)
3691 		rsp_code = L2CAP_CREATE_CHAN_RSP;
3692 	else
3693 		rsp_code = L2CAP_CONN_RSP;
3694 
3695 	BT_DBG("chan %p rsp_code %u", chan, rsp_code);
3696 
3697 	l2cap_send_cmd(conn, chan->ident, rsp_code, sizeof(rsp), &rsp);
3698 
3699 	if (test_and_set_bit(CONF_REQ_SENT, &chan->conf_state))
3700 		return;
3701 
3702 	l2cap_send_cmd(conn, l2cap_get_ident(conn), L2CAP_CONF_REQ,
3703 		       l2cap_build_conf_req(chan, buf, sizeof(buf)), buf);
3704 	chan->num_conf_req++;
3705 }
3706 
3707 static void l2cap_conf_rfc_get(struct l2cap_chan *chan, void *rsp, int len)
3708 {
3709 	int type, olen;
3710 	unsigned long val;
3711 	/* Use sane default values in case a misbehaving remote device
3712 	 * did not send an RFC or extended window size option.
3713 	 */
3714 	u16 txwin_ext = chan->ack_win;
3715 	struct l2cap_conf_rfc rfc = {
3716 		.mode = chan->mode,
3717 		.retrans_timeout = cpu_to_le16(L2CAP_DEFAULT_RETRANS_TO),
3718 		.monitor_timeout = cpu_to_le16(L2CAP_DEFAULT_MONITOR_TO),
3719 		.max_pdu_size = cpu_to_le16(chan->imtu),
3720 		.txwin_size = min_t(u16, chan->ack_win, L2CAP_DEFAULT_TX_WINDOW),
3721 	};
3722 
3723 	BT_DBG("chan %p, rsp %p, len %d", chan, rsp, len);
3724 
3725 	if ((chan->mode != L2CAP_MODE_ERTM) && (chan->mode != L2CAP_MODE_STREAMING))
3726 		return;
3727 
3728 	while (len >= L2CAP_CONF_OPT_SIZE) {
3729 		len -= l2cap_get_conf_opt(&rsp, &type, &olen, &val);
3730 
3731 		switch (type) {
3732 		case L2CAP_CONF_RFC:
3733 			if (olen == sizeof(rfc))
3734 				memcpy(&rfc, (void *)val, olen);
3735 			break;
3736 		case L2CAP_CONF_EWS:
3737 			txwin_ext = val;
3738 			break;
3739 		}
3740 	}
3741 
3742 	switch (rfc.mode) {
3743 	case L2CAP_MODE_ERTM:
3744 		chan->retrans_timeout = le16_to_cpu(rfc.retrans_timeout);
3745 		chan->monitor_timeout = le16_to_cpu(rfc.monitor_timeout);
3746 		chan->mps = le16_to_cpu(rfc.max_pdu_size);
3747 		if (test_bit(FLAG_EXT_CTRL, &chan->flags))
3748 			chan->ack_win = min_t(u16, chan->ack_win, txwin_ext);
3749 		else
3750 			chan->ack_win = min_t(u16, chan->ack_win,
3751 					      rfc.txwin_size);
3752 		break;
3753 	case L2CAP_MODE_STREAMING:
3754 		chan->mps    = le16_to_cpu(rfc.max_pdu_size);
3755 	}
3756 }
3757 
3758 static inline int l2cap_command_rej(struct l2cap_conn *conn,
3759 				    struct l2cap_cmd_hdr *cmd, u16 cmd_len,
3760 				    u8 *data)
3761 {
3762 	struct l2cap_cmd_rej_unk *rej = (struct l2cap_cmd_rej_unk *) data;
3763 
3764 	if (cmd_len < sizeof(*rej))
3765 		return -EPROTO;
3766 
3767 	if (rej->reason != L2CAP_REJ_NOT_UNDERSTOOD)
3768 		return 0;
3769 
3770 	if ((conn->info_state & L2CAP_INFO_FEAT_MASK_REQ_SENT) &&
3771 	    cmd->ident == conn->info_ident) {
3772 		cancel_delayed_work(&conn->info_timer);
3773 
3774 		conn->info_state |= L2CAP_INFO_FEAT_MASK_REQ_DONE;
3775 		conn->info_ident = 0;
3776 
3777 		l2cap_conn_start(conn);
3778 	}
3779 
3780 	return 0;
3781 }
3782 
3783 static struct l2cap_chan *l2cap_connect(struct l2cap_conn *conn,
3784 					struct l2cap_cmd_hdr *cmd,
3785 					u8 *data, u8 rsp_code, u8 amp_id)
3786 {
3787 	struct l2cap_conn_req *req = (struct l2cap_conn_req *) data;
3788 	struct l2cap_conn_rsp rsp;
3789 	struct l2cap_chan *chan = NULL, *pchan;
3790 	int result, status = L2CAP_CS_NO_INFO;
3791 
3792 	u16 dcid = 0, scid = __le16_to_cpu(req->scid);
3793 	__le16 psm = req->psm;
3794 
3795 	BT_DBG("psm 0x%2.2x scid 0x%4.4x", __le16_to_cpu(psm), scid);
3796 
3797 	/* Check if we have socket listening on psm */
3798 	pchan = l2cap_global_chan_by_psm(BT_LISTEN, psm, &conn->hcon->src,
3799 					 &conn->hcon->dst, ACL_LINK);
3800 	if (!pchan) {
3801 		result = L2CAP_CR_BAD_PSM;
3802 		goto sendresp;
3803 	}
3804 
3805 	mutex_lock(&conn->chan_lock);
3806 	l2cap_chan_lock(pchan);
3807 
3808 	/* Check if the ACL is secure enough (if not SDP) */
3809 	if (psm != cpu_to_le16(L2CAP_PSM_SDP) &&
3810 	    !hci_conn_check_link_mode(conn->hcon)) {
3811 		conn->disc_reason = HCI_ERROR_AUTH_FAILURE;
3812 		result = L2CAP_CR_SEC_BLOCK;
3813 		goto response;
3814 	}
3815 
3816 	result = L2CAP_CR_NO_MEM;
3817 
3818 	/* Check if we already have channel with that dcid */
3819 	if (__l2cap_get_chan_by_dcid(conn, scid))
3820 		goto response;
3821 
3822 	chan = pchan->ops->new_connection(pchan);
3823 	if (!chan)
3824 		goto response;
3825 
3826 	/* For certain devices (ex: HID mouse), support for authentication,
3827 	 * pairing and bonding is optional. For such devices, inorder to avoid
3828 	 * the ACL alive for too long after L2CAP disconnection, reset the ACL
3829 	 * disc_timeout back to HCI_DISCONN_TIMEOUT during L2CAP connect.
3830 	 */
3831 	conn->hcon->disc_timeout = HCI_DISCONN_TIMEOUT;
3832 
3833 	bacpy(&chan->src, &conn->hcon->src);
3834 	bacpy(&chan->dst, &conn->hcon->dst);
3835 	chan->src_type = bdaddr_src_type(conn->hcon);
3836 	chan->dst_type = bdaddr_dst_type(conn->hcon);
3837 	chan->psm  = psm;
3838 	chan->dcid = scid;
3839 	chan->local_amp_id = amp_id;
3840 
3841 	__l2cap_chan_add(conn, chan);
3842 
3843 	dcid = chan->scid;
3844 
3845 	__set_chan_timer(chan, chan->ops->get_sndtimeo(chan));
3846 
3847 	chan->ident = cmd->ident;
3848 
3849 	if (conn->info_state & L2CAP_INFO_FEAT_MASK_REQ_DONE) {
3850 		if (l2cap_chan_check_security(chan, false)) {
3851 			if (test_bit(FLAG_DEFER_SETUP, &chan->flags)) {
3852 				l2cap_state_change(chan, BT_CONNECT2);
3853 				result = L2CAP_CR_PEND;
3854 				status = L2CAP_CS_AUTHOR_PEND;
3855 				chan->ops->defer(chan);
3856 			} else {
3857 				/* Force pending result for AMP controllers.
3858 				 * The connection will succeed after the
3859 				 * physical link is up.
3860 				 */
3861 				if (amp_id == AMP_ID_BREDR) {
3862 					l2cap_state_change(chan, BT_CONFIG);
3863 					result = L2CAP_CR_SUCCESS;
3864 				} else {
3865 					l2cap_state_change(chan, BT_CONNECT2);
3866 					result = L2CAP_CR_PEND;
3867 				}
3868 				status = L2CAP_CS_NO_INFO;
3869 			}
3870 		} else {
3871 			l2cap_state_change(chan, BT_CONNECT2);
3872 			result = L2CAP_CR_PEND;
3873 			status = L2CAP_CS_AUTHEN_PEND;
3874 		}
3875 	} else {
3876 		l2cap_state_change(chan, BT_CONNECT2);
3877 		result = L2CAP_CR_PEND;
3878 		status = L2CAP_CS_NO_INFO;
3879 	}
3880 
3881 response:
3882 	l2cap_chan_unlock(pchan);
3883 	mutex_unlock(&conn->chan_lock);
3884 	l2cap_chan_put(pchan);
3885 
3886 sendresp:
3887 	rsp.scid   = cpu_to_le16(scid);
3888 	rsp.dcid   = cpu_to_le16(dcid);
3889 	rsp.result = cpu_to_le16(result);
3890 	rsp.status = cpu_to_le16(status);
3891 	l2cap_send_cmd(conn, cmd->ident, rsp_code, sizeof(rsp), &rsp);
3892 
3893 	if (result == L2CAP_CR_PEND && status == L2CAP_CS_NO_INFO) {
3894 		struct l2cap_info_req info;
3895 		info.type = cpu_to_le16(L2CAP_IT_FEAT_MASK);
3896 
3897 		conn->info_state |= L2CAP_INFO_FEAT_MASK_REQ_SENT;
3898 		conn->info_ident = l2cap_get_ident(conn);
3899 
3900 		schedule_delayed_work(&conn->info_timer, L2CAP_INFO_TIMEOUT);
3901 
3902 		l2cap_send_cmd(conn, conn->info_ident, L2CAP_INFO_REQ,
3903 			       sizeof(info), &info);
3904 	}
3905 
3906 	if (chan && !test_bit(CONF_REQ_SENT, &chan->conf_state) &&
3907 	    result == L2CAP_CR_SUCCESS) {
3908 		u8 buf[128];
3909 		set_bit(CONF_REQ_SENT, &chan->conf_state);
3910 		l2cap_send_cmd(conn, l2cap_get_ident(conn), L2CAP_CONF_REQ,
3911 			       l2cap_build_conf_req(chan, buf, sizeof(buf)), buf);
3912 		chan->num_conf_req++;
3913 	}
3914 
3915 	return chan;
3916 }
3917 
3918 static int l2cap_connect_req(struct l2cap_conn *conn,
3919 			     struct l2cap_cmd_hdr *cmd, u16 cmd_len, u8 *data)
3920 {
3921 	struct hci_dev *hdev = conn->hcon->hdev;
3922 	struct hci_conn *hcon = conn->hcon;
3923 
3924 	if (cmd_len < sizeof(struct l2cap_conn_req))
3925 		return -EPROTO;
3926 
3927 	hci_dev_lock(hdev);
3928 	if (hci_dev_test_flag(hdev, HCI_MGMT) &&
3929 	    !test_and_set_bit(HCI_CONN_MGMT_CONNECTED, &hcon->flags))
3930 		mgmt_device_connected(hdev, hcon, 0, NULL, 0);
3931 	hci_dev_unlock(hdev);
3932 
3933 	l2cap_connect(conn, cmd, data, L2CAP_CONN_RSP, 0);
3934 	return 0;
3935 }
3936 
3937 static int l2cap_connect_create_rsp(struct l2cap_conn *conn,
3938 				    struct l2cap_cmd_hdr *cmd, u16 cmd_len,
3939 				    u8 *data)
3940 {
3941 	struct l2cap_conn_rsp *rsp = (struct l2cap_conn_rsp *) data;
3942 	u16 scid, dcid, result, status;
3943 	struct l2cap_chan *chan;
3944 	u8 req[128];
3945 	int err;
3946 
3947 	if (cmd_len < sizeof(*rsp))
3948 		return -EPROTO;
3949 
3950 	scid   = __le16_to_cpu(rsp->scid);
3951 	dcid   = __le16_to_cpu(rsp->dcid);
3952 	result = __le16_to_cpu(rsp->result);
3953 	status = __le16_to_cpu(rsp->status);
3954 
3955 	BT_DBG("dcid 0x%4.4x scid 0x%4.4x result 0x%2.2x status 0x%2.2x",
3956 	       dcid, scid, result, status);
3957 
3958 	mutex_lock(&conn->chan_lock);
3959 
3960 	if (scid) {
3961 		chan = __l2cap_get_chan_by_scid(conn, scid);
3962 		if (!chan) {
3963 			err = -EBADSLT;
3964 			goto unlock;
3965 		}
3966 	} else {
3967 		chan = __l2cap_get_chan_by_ident(conn, cmd->ident);
3968 		if (!chan) {
3969 			err = -EBADSLT;
3970 			goto unlock;
3971 		}
3972 	}
3973 
3974 	err = 0;
3975 
3976 	l2cap_chan_lock(chan);
3977 
3978 	switch (result) {
3979 	case L2CAP_CR_SUCCESS:
3980 		l2cap_state_change(chan, BT_CONFIG);
3981 		chan->ident = 0;
3982 		chan->dcid = dcid;
3983 		clear_bit(CONF_CONNECT_PEND, &chan->conf_state);
3984 
3985 		if (test_and_set_bit(CONF_REQ_SENT, &chan->conf_state))
3986 			break;
3987 
3988 		l2cap_send_cmd(conn, l2cap_get_ident(conn), L2CAP_CONF_REQ,
3989 			       l2cap_build_conf_req(chan, req, sizeof(req)), req);
3990 		chan->num_conf_req++;
3991 		break;
3992 
3993 	case L2CAP_CR_PEND:
3994 		set_bit(CONF_CONNECT_PEND, &chan->conf_state);
3995 		break;
3996 
3997 	default:
3998 		l2cap_chan_del(chan, ECONNREFUSED);
3999 		break;
4000 	}
4001 
4002 	l2cap_chan_unlock(chan);
4003 
4004 unlock:
4005 	mutex_unlock(&conn->chan_lock);
4006 
4007 	return err;
4008 }
4009 
4010 static inline void set_default_fcs(struct l2cap_chan *chan)
4011 {
4012 	/* FCS is enabled only in ERTM or streaming mode, if one or both
4013 	 * sides request it.
4014 	 */
4015 	if (chan->mode != L2CAP_MODE_ERTM && chan->mode != L2CAP_MODE_STREAMING)
4016 		chan->fcs = L2CAP_FCS_NONE;
4017 	else if (!test_bit(CONF_RECV_NO_FCS, &chan->conf_state))
4018 		chan->fcs = L2CAP_FCS_CRC16;
4019 }
4020 
4021 static void l2cap_send_efs_conf_rsp(struct l2cap_chan *chan, void *data,
4022 				    u8 ident, u16 flags)
4023 {
4024 	struct l2cap_conn *conn = chan->conn;
4025 
4026 	BT_DBG("conn %p chan %p ident %d flags 0x%4.4x", conn, chan, ident,
4027 	       flags);
4028 
4029 	clear_bit(CONF_LOC_CONF_PEND, &chan->conf_state);
4030 	set_bit(CONF_OUTPUT_DONE, &chan->conf_state);
4031 
4032 	l2cap_send_cmd(conn, ident, L2CAP_CONF_RSP,
4033 		       l2cap_build_conf_rsp(chan, data,
4034 					    L2CAP_CONF_SUCCESS, flags), data);
4035 }
4036 
4037 static void cmd_reject_invalid_cid(struct l2cap_conn *conn, u8 ident,
4038 				   u16 scid, u16 dcid)
4039 {
4040 	struct l2cap_cmd_rej_cid rej;
4041 
4042 	rej.reason = cpu_to_le16(L2CAP_REJ_INVALID_CID);
4043 	rej.scid = __cpu_to_le16(scid);
4044 	rej.dcid = __cpu_to_le16(dcid);
4045 
4046 	l2cap_send_cmd(conn, ident, L2CAP_COMMAND_REJ, sizeof(rej), &rej);
4047 }
4048 
4049 static inline int l2cap_config_req(struct l2cap_conn *conn,
4050 				   struct l2cap_cmd_hdr *cmd, u16 cmd_len,
4051 				   u8 *data)
4052 {
4053 	struct l2cap_conf_req *req = (struct l2cap_conf_req *) data;
4054 	u16 dcid, flags;
4055 	u8 rsp[64];
4056 	struct l2cap_chan *chan;
4057 	int len, err = 0;
4058 
4059 	if (cmd_len < sizeof(*req))
4060 		return -EPROTO;
4061 
4062 	dcid  = __le16_to_cpu(req->dcid);
4063 	flags = __le16_to_cpu(req->flags);
4064 
4065 	BT_DBG("dcid 0x%4.4x flags 0x%2.2x", dcid, flags);
4066 
4067 	chan = l2cap_get_chan_by_scid(conn, dcid);
4068 	if (!chan) {
4069 		cmd_reject_invalid_cid(conn, cmd->ident, dcid, 0);
4070 		return 0;
4071 	}
4072 
4073 	if (chan->state != BT_CONFIG && chan->state != BT_CONNECT2) {
4074 		cmd_reject_invalid_cid(conn, cmd->ident, chan->scid,
4075 				       chan->dcid);
4076 		goto unlock;
4077 	}
4078 
4079 	/* Reject if config buffer is too small. */
4080 	len = cmd_len - sizeof(*req);
4081 	if (chan->conf_len + len > sizeof(chan->conf_req)) {
4082 		l2cap_send_cmd(conn, cmd->ident, L2CAP_CONF_RSP,
4083 			       l2cap_build_conf_rsp(chan, rsp,
4084 			       L2CAP_CONF_REJECT, flags), rsp);
4085 		goto unlock;
4086 	}
4087 
4088 	/* Store config. */
4089 	memcpy(chan->conf_req + chan->conf_len, req->data, len);
4090 	chan->conf_len += len;
4091 
4092 	if (flags & L2CAP_CONF_FLAG_CONTINUATION) {
4093 		/* Incomplete config. Send empty response. */
4094 		l2cap_send_cmd(conn, cmd->ident, L2CAP_CONF_RSP,
4095 			       l2cap_build_conf_rsp(chan, rsp,
4096 			       L2CAP_CONF_SUCCESS, flags), rsp);
4097 		goto unlock;
4098 	}
4099 
4100 	/* Complete config. */
4101 	len = l2cap_parse_conf_req(chan, rsp, sizeof(rsp));
4102 	if (len < 0) {
4103 		l2cap_send_disconn_req(chan, ECONNRESET);
4104 		goto unlock;
4105 	}
4106 
4107 	chan->ident = cmd->ident;
4108 	l2cap_send_cmd(conn, cmd->ident, L2CAP_CONF_RSP, len, rsp);
4109 	chan->num_conf_rsp++;
4110 
4111 	/* Reset config buffer. */
4112 	chan->conf_len = 0;
4113 
4114 	if (!test_bit(CONF_OUTPUT_DONE, &chan->conf_state))
4115 		goto unlock;
4116 
4117 	if (test_bit(CONF_INPUT_DONE, &chan->conf_state)) {
4118 		set_default_fcs(chan);
4119 
4120 		if (chan->mode == L2CAP_MODE_ERTM ||
4121 		    chan->mode == L2CAP_MODE_STREAMING)
4122 			err = l2cap_ertm_init(chan);
4123 
4124 		if (err < 0)
4125 			l2cap_send_disconn_req(chan, -err);
4126 		else
4127 			l2cap_chan_ready(chan);
4128 
4129 		goto unlock;
4130 	}
4131 
4132 	if (!test_and_set_bit(CONF_REQ_SENT, &chan->conf_state)) {
4133 		u8 buf[64];
4134 		l2cap_send_cmd(conn, l2cap_get_ident(conn), L2CAP_CONF_REQ,
4135 			       l2cap_build_conf_req(chan, buf, sizeof(buf)), buf);
4136 		chan->num_conf_req++;
4137 	}
4138 
4139 	/* Got Conf Rsp PENDING from remote side and assume we sent
4140 	   Conf Rsp PENDING in the code above */
4141 	if (test_bit(CONF_REM_CONF_PEND, &chan->conf_state) &&
4142 	    test_bit(CONF_LOC_CONF_PEND, &chan->conf_state)) {
4143 
4144 		/* check compatibility */
4145 
4146 		/* Send rsp for BR/EDR channel */
4147 		if (!chan->hs_hcon)
4148 			l2cap_send_efs_conf_rsp(chan, rsp, cmd->ident, flags);
4149 		else
4150 			chan->ident = cmd->ident;
4151 	}
4152 
4153 unlock:
4154 	l2cap_chan_unlock(chan);
4155 	return err;
4156 }
4157 
4158 static inline int l2cap_config_rsp(struct l2cap_conn *conn,
4159 				   struct l2cap_cmd_hdr *cmd, u16 cmd_len,
4160 				   u8 *data)
4161 {
4162 	struct l2cap_conf_rsp *rsp = (struct l2cap_conf_rsp *)data;
4163 	u16 scid, flags, result;
4164 	struct l2cap_chan *chan;
4165 	int len = cmd_len - sizeof(*rsp);
4166 	int err = 0;
4167 
4168 	if (cmd_len < sizeof(*rsp))
4169 		return -EPROTO;
4170 
4171 	scid   = __le16_to_cpu(rsp->scid);
4172 	flags  = __le16_to_cpu(rsp->flags);
4173 	result = __le16_to_cpu(rsp->result);
4174 
4175 	BT_DBG("scid 0x%4.4x flags 0x%2.2x result 0x%2.2x len %d", scid, flags,
4176 	       result, len);
4177 
4178 	chan = l2cap_get_chan_by_scid(conn, scid);
4179 	if (!chan)
4180 		return 0;
4181 
4182 	switch (result) {
4183 	case L2CAP_CONF_SUCCESS:
4184 		l2cap_conf_rfc_get(chan, rsp->data, len);
4185 		clear_bit(CONF_REM_CONF_PEND, &chan->conf_state);
4186 		break;
4187 
4188 	case L2CAP_CONF_PENDING:
4189 		set_bit(CONF_REM_CONF_PEND, &chan->conf_state);
4190 
4191 		if (test_bit(CONF_LOC_CONF_PEND, &chan->conf_state)) {
4192 			char buf[64];
4193 
4194 			len = l2cap_parse_conf_rsp(chan, rsp->data, len,
4195 						   buf, sizeof(buf), &result);
4196 			if (len < 0) {
4197 				l2cap_send_disconn_req(chan, ECONNRESET);
4198 				goto done;
4199 			}
4200 
4201 			if (!chan->hs_hcon) {
4202 				l2cap_send_efs_conf_rsp(chan, buf, cmd->ident,
4203 							0);
4204 			} else {
4205 				if (l2cap_check_efs(chan)) {
4206 					amp_create_logical_link(chan);
4207 					chan->ident = cmd->ident;
4208 				}
4209 			}
4210 		}
4211 		goto done;
4212 
4213 	case L2CAP_CONF_UNACCEPT:
4214 		if (chan->num_conf_rsp <= L2CAP_CONF_MAX_CONF_RSP) {
4215 			char req[64];
4216 
4217 			if (len > sizeof(req) - sizeof(struct l2cap_conf_req)) {
4218 				l2cap_send_disconn_req(chan, ECONNRESET);
4219 				goto done;
4220 			}
4221 
4222 			/* throw out any old stored conf requests */
4223 			result = L2CAP_CONF_SUCCESS;
4224 			len = l2cap_parse_conf_rsp(chan, rsp->data, len,
4225 						   req, sizeof(req), &result);
4226 			if (len < 0) {
4227 				l2cap_send_disconn_req(chan, ECONNRESET);
4228 				goto done;
4229 			}
4230 
4231 			l2cap_send_cmd(conn, l2cap_get_ident(conn),
4232 				       L2CAP_CONF_REQ, len, req);
4233 			chan->num_conf_req++;
4234 			if (result != L2CAP_CONF_SUCCESS)
4235 				goto done;
4236 			break;
4237 		}
4238 
4239 	default:
4240 		l2cap_chan_set_err(chan, ECONNRESET);
4241 
4242 		__set_chan_timer(chan, L2CAP_DISC_REJ_TIMEOUT);
4243 		l2cap_send_disconn_req(chan, ECONNRESET);
4244 		goto done;
4245 	}
4246 
4247 	if (flags & L2CAP_CONF_FLAG_CONTINUATION)
4248 		goto done;
4249 
4250 	set_bit(CONF_INPUT_DONE, &chan->conf_state);
4251 
4252 	if (test_bit(CONF_OUTPUT_DONE, &chan->conf_state)) {
4253 		set_default_fcs(chan);
4254 
4255 		if (chan->mode == L2CAP_MODE_ERTM ||
4256 		    chan->mode == L2CAP_MODE_STREAMING)
4257 			err = l2cap_ertm_init(chan);
4258 
4259 		if (err < 0)
4260 			l2cap_send_disconn_req(chan, -err);
4261 		else
4262 			l2cap_chan_ready(chan);
4263 	}
4264 
4265 done:
4266 	l2cap_chan_unlock(chan);
4267 	return err;
4268 }
4269 
4270 static inline int l2cap_disconnect_req(struct l2cap_conn *conn,
4271 				       struct l2cap_cmd_hdr *cmd, u16 cmd_len,
4272 				       u8 *data)
4273 {
4274 	struct l2cap_disconn_req *req = (struct l2cap_disconn_req *) data;
4275 	struct l2cap_disconn_rsp rsp;
4276 	u16 dcid, scid;
4277 	struct l2cap_chan *chan;
4278 
4279 	if (cmd_len != sizeof(*req))
4280 		return -EPROTO;
4281 
4282 	scid = __le16_to_cpu(req->scid);
4283 	dcid = __le16_to_cpu(req->dcid);
4284 
4285 	BT_DBG("scid 0x%4.4x dcid 0x%4.4x", scid, dcid);
4286 
4287 	mutex_lock(&conn->chan_lock);
4288 
4289 	chan = __l2cap_get_chan_by_scid(conn, dcid);
4290 	if (!chan) {
4291 		mutex_unlock(&conn->chan_lock);
4292 		cmd_reject_invalid_cid(conn, cmd->ident, dcid, scid);
4293 		return 0;
4294 	}
4295 
4296 	l2cap_chan_lock(chan);
4297 
4298 	rsp.dcid = cpu_to_le16(chan->scid);
4299 	rsp.scid = cpu_to_le16(chan->dcid);
4300 	l2cap_send_cmd(conn, cmd->ident, L2CAP_DISCONN_RSP, sizeof(rsp), &rsp);
4301 
4302 	chan->ops->set_shutdown(chan);
4303 
4304 	l2cap_chan_hold(chan);
4305 	l2cap_chan_del(chan, ECONNRESET);
4306 
4307 	l2cap_chan_unlock(chan);
4308 
4309 	chan->ops->close(chan);
4310 	l2cap_chan_put(chan);
4311 
4312 	mutex_unlock(&conn->chan_lock);
4313 
4314 	return 0;
4315 }
4316 
4317 static inline int l2cap_disconnect_rsp(struct l2cap_conn *conn,
4318 				       struct l2cap_cmd_hdr *cmd, u16 cmd_len,
4319 				       u8 *data)
4320 {
4321 	struct l2cap_disconn_rsp *rsp = (struct l2cap_disconn_rsp *) data;
4322 	u16 dcid, scid;
4323 	struct l2cap_chan *chan;
4324 
4325 	if (cmd_len != sizeof(*rsp))
4326 		return -EPROTO;
4327 
4328 	scid = __le16_to_cpu(rsp->scid);
4329 	dcid = __le16_to_cpu(rsp->dcid);
4330 
4331 	BT_DBG("dcid 0x%4.4x scid 0x%4.4x", dcid, scid);
4332 
4333 	mutex_lock(&conn->chan_lock);
4334 
4335 	chan = __l2cap_get_chan_by_scid(conn, scid);
4336 	if (!chan) {
4337 		mutex_unlock(&conn->chan_lock);
4338 		return 0;
4339 	}
4340 
4341 	l2cap_chan_lock(chan);
4342 
4343 	l2cap_chan_hold(chan);
4344 	l2cap_chan_del(chan, 0);
4345 
4346 	l2cap_chan_unlock(chan);
4347 
4348 	chan->ops->close(chan);
4349 	l2cap_chan_put(chan);
4350 
4351 	mutex_unlock(&conn->chan_lock);
4352 
4353 	return 0;
4354 }
4355 
4356 static inline int l2cap_information_req(struct l2cap_conn *conn,
4357 					struct l2cap_cmd_hdr *cmd, u16 cmd_len,
4358 					u8 *data)
4359 {
4360 	struct l2cap_info_req *req = (struct l2cap_info_req *) data;
4361 	u16 type;
4362 
4363 	if (cmd_len != sizeof(*req))
4364 		return -EPROTO;
4365 
4366 	type = __le16_to_cpu(req->type);
4367 
4368 	BT_DBG("type 0x%4.4x", type);
4369 
4370 	if (type == L2CAP_IT_FEAT_MASK) {
4371 		u8 buf[8];
4372 		u32 feat_mask = l2cap_feat_mask;
4373 		struct l2cap_info_rsp *rsp = (struct l2cap_info_rsp *) buf;
4374 		rsp->type   = cpu_to_le16(L2CAP_IT_FEAT_MASK);
4375 		rsp->result = cpu_to_le16(L2CAP_IR_SUCCESS);
4376 		if (!disable_ertm)
4377 			feat_mask |= L2CAP_FEAT_ERTM | L2CAP_FEAT_STREAMING
4378 				| L2CAP_FEAT_FCS;
4379 		if (conn->local_fixed_chan & L2CAP_FC_A2MP)
4380 			feat_mask |= L2CAP_FEAT_EXT_FLOW
4381 				| L2CAP_FEAT_EXT_WINDOW;
4382 
4383 		put_unaligned_le32(feat_mask, rsp->data);
4384 		l2cap_send_cmd(conn, cmd->ident, L2CAP_INFO_RSP, sizeof(buf),
4385 			       buf);
4386 	} else if (type == L2CAP_IT_FIXED_CHAN) {
4387 		u8 buf[12];
4388 		struct l2cap_info_rsp *rsp = (struct l2cap_info_rsp *) buf;
4389 
4390 		rsp->type   = cpu_to_le16(L2CAP_IT_FIXED_CHAN);
4391 		rsp->result = cpu_to_le16(L2CAP_IR_SUCCESS);
4392 		rsp->data[0] = conn->local_fixed_chan;
4393 		memset(rsp->data + 1, 0, 7);
4394 		l2cap_send_cmd(conn, cmd->ident, L2CAP_INFO_RSP, sizeof(buf),
4395 			       buf);
4396 	} else {
4397 		struct l2cap_info_rsp rsp;
4398 		rsp.type   = cpu_to_le16(type);
4399 		rsp.result = cpu_to_le16(L2CAP_IR_NOTSUPP);
4400 		l2cap_send_cmd(conn, cmd->ident, L2CAP_INFO_RSP, sizeof(rsp),
4401 			       &rsp);
4402 	}
4403 
4404 	return 0;
4405 }
4406 
4407 static inline int l2cap_information_rsp(struct l2cap_conn *conn,
4408 					struct l2cap_cmd_hdr *cmd, u16 cmd_len,
4409 					u8 *data)
4410 {
4411 	struct l2cap_info_rsp *rsp = (struct l2cap_info_rsp *) data;
4412 	u16 type, result;
4413 
4414 	if (cmd_len < sizeof(*rsp))
4415 		return -EPROTO;
4416 
4417 	type   = __le16_to_cpu(rsp->type);
4418 	result = __le16_to_cpu(rsp->result);
4419 
4420 	BT_DBG("type 0x%4.4x result 0x%2.2x", type, result);
4421 
4422 	/* L2CAP Info req/rsp are unbound to channels, add extra checks */
4423 	if (cmd->ident != conn->info_ident ||
4424 	    conn->info_state & L2CAP_INFO_FEAT_MASK_REQ_DONE)
4425 		return 0;
4426 
4427 	cancel_delayed_work(&conn->info_timer);
4428 
4429 	if (result != L2CAP_IR_SUCCESS) {
4430 		conn->info_state |= L2CAP_INFO_FEAT_MASK_REQ_DONE;
4431 		conn->info_ident = 0;
4432 
4433 		l2cap_conn_start(conn);
4434 
4435 		return 0;
4436 	}
4437 
4438 	switch (type) {
4439 	case L2CAP_IT_FEAT_MASK:
4440 		conn->feat_mask = get_unaligned_le32(rsp->data);
4441 
4442 		if (conn->feat_mask & L2CAP_FEAT_FIXED_CHAN) {
4443 			struct l2cap_info_req req;
4444 			req.type = cpu_to_le16(L2CAP_IT_FIXED_CHAN);
4445 
4446 			conn->info_ident = l2cap_get_ident(conn);
4447 
4448 			l2cap_send_cmd(conn, conn->info_ident,
4449 				       L2CAP_INFO_REQ, sizeof(req), &req);
4450 		} else {
4451 			conn->info_state |= L2CAP_INFO_FEAT_MASK_REQ_DONE;
4452 			conn->info_ident = 0;
4453 
4454 			l2cap_conn_start(conn);
4455 		}
4456 		break;
4457 
4458 	case L2CAP_IT_FIXED_CHAN:
4459 		conn->remote_fixed_chan = rsp->data[0];
4460 		conn->info_state |= L2CAP_INFO_FEAT_MASK_REQ_DONE;
4461 		conn->info_ident = 0;
4462 
4463 		l2cap_conn_start(conn);
4464 		break;
4465 	}
4466 
4467 	return 0;
4468 }
4469 
4470 static int l2cap_create_channel_req(struct l2cap_conn *conn,
4471 				    struct l2cap_cmd_hdr *cmd,
4472 				    u16 cmd_len, void *data)
4473 {
4474 	struct l2cap_create_chan_req *req = data;
4475 	struct l2cap_create_chan_rsp rsp;
4476 	struct l2cap_chan *chan;
4477 	struct hci_dev *hdev;
4478 	u16 psm, scid;
4479 
4480 	if (cmd_len != sizeof(*req))
4481 		return -EPROTO;
4482 
4483 	if (!(conn->local_fixed_chan & L2CAP_FC_A2MP))
4484 		return -EINVAL;
4485 
4486 	psm = le16_to_cpu(req->psm);
4487 	scid = le16_to_cpu(req->scid);
4488 
4489 	BT_DBG("psm 0x%2.2x, scid 0x%4.4x, amp_id %d", psm, scid, req->amp_id);
4490 
4491 	/* For controller id 0 make BR/EDR connection */
4492 	if (req->amp_id == AMP_ID_BREDR) {
4493 		l2cap_connect(conn, cmd, data, L2CAP_CREATE_CHAN_RSP,
4494 			      req->amp_id);
4495 		return 0;
4496 	}
4497 
4498 	/* Validate AMP controller id */
4499 	hdev = hci_dev_get(req->amp_id);
4500 	if (!hdev)
4501 		goto error;
4502 
4503 	if (hdev->dev_type != HCI_AMP || !test_bit(HCI_UP, &hdev->flags)) {
4504 		hci_dev_put(hdev);
4505 		goto error;
4506 	}
4507 
4508 	chan = l2cap_connect(conn, cmd, data, L2CAP_CREATE_CHAN_RSP,
4509 			     req->amp_id);
4510 	if (chan) {
4511 		struct amp_mgr *mgr = conn->hcon->amp_mgr;
4512 		struct hci_conn *hs_hcon;
4513 
4514 		hs_hcon = hci_conn_hash_lookup_ba(hdev, AMP_LINK,
4515 						  &conn->hcon->dst);
4516 		if (!hs_hcon) {
4517 			hci_dev_put(hdev);
4518 			cmd_reject_invalid_cid(conn, cmd->ident, chan->scid,
4519 					       chan->dcid);
4520 			return 0;
4521 		}
4522 
4523 		BT_DBG("mgr %p bredr_chan %p hs_hcon %p", mgr, chan, hs_hcon);
4524 
4525 		mgr->bredr_chan = chan;
4526 		chan->hs_hcon = hs_hcon;
4527 		chan->fcs = L2CAP_FCS_NONE;
4528 		conn->mtu = hdev->block_mtu;
4529 	}
4530 
4531 	hci_dev_put(hdev);
4532 
4533 	return 0;
4534 
4535 error:
4536 	rsp.dcid = 0;
4537 	rsp.scid = cpu_to_le16(scid);
4538 	rsp.result = cpu_to_le16(L2CAP_CR_BAD_AMP);
4539 	rsp.status = cpu_to_le16(L2CAP_CS_NO_INFO);
4540 
4541 	l2cap_send_cmd(conn, cmd->ident, L2CAP_CREATE_CHAN_RSP,
4542 		       sizeof(rsp), &rsp);
4543 
4544 	return 0;
4545 }
4546 
4547 static void l2cap_send_move_chan_req(struct l2cap_chan *chan, u8 dest_amp_id)
4548 {
4549 	struct l2cap_move_chan_req req;
4550 	u8 ident;
4551 
4552 	BT_DBG("chan %p, dest_amp_id %d", chan, dest_amp_id);
4553 
4554 	ident = l2cap_get_ident(chan->conn);
4555 	chan->ident = ident;
4556 
4557 	req.icid = cpu_to_le16(chan->scid);
4558 	req.dest_amp_id = dest_amp_id;
4559 
4560 	l2cap_send_cmd(chan->conn, ident, L2CAP_MOVE_CHAN_REQ, sizeof(req),
4561 		       &req);
4562 
4563 	__set_chan_timer(chan, L2CAP_MOVE_TIMEOUT);
4564 }
4565 
4566 static void l2cap_send_move_chan_rsp(struct l2cap_chan *chan, u16 result)
4567 {
4568 	struct l2cap_move_chan_rsp rsp;
4569 
4570 	BT_DBG("chan %p, result 0x%4.4x", chan, result);
4571 
4572 	rsp.icid = cpu_to_le16(chan->dcid);
4573 	rsp.result = cpu_to_le16(result);
4574 
4575 	l2cap_send_cmd(chan->conn, chan->ident, L2CAP_MOVE_CHAN_RSP,
4576 		       sizeof(rsp), &rsp);
4577 }
4578 
4579 static void l2cap_send_move_chan_cfm(struct l2cap_chan *chan, u16 result)
4580 {
4581 	struct l2cap_move_chan_cfm cfm;
4582 
4583 	BT_DBG("chan %p, result 0x%4.4x", chan, result);
4584 
4585 	chan->ident = l2cap_get_ident(chan->conn);
4586 
4587 	cfm.icid = cpu_to_le16(chan->scid);
4588 	cfm.result = cpu_to_le16(result);
4589 
4590 	l2cap_send_cmd(chan->conn, chan->ident, L2CAP_MOVE_CHAN_CFM,
4591 		       sizeof(cfm), &cfm);
4592 
4593 	__set_chan_timer(chan, L2CAP_MOVE_TIMEOUT);
4594 }
4595 
4596 static void l2cap_send_move_chan_cfm_icid(struct l2cap_conn *conn, u16 icid)
4597 {
4598 	struct l2cap_move_chan_cfm cfm;
4599 
4600 	BT_DBG("conn %p, icid 0x%4.4x", conn, icid);
4601 
4602 	cfm.icid = cpu_to_le16(icid);
4603 	cfm.result = cpu_to_le16(L2CAP_MC_UNCONFIRMED);
4604 
4605 	l2cap_send_cmd(conn, l2cap_get_ident(conn), L2CAP_MOVE_CHAN_CFM,
4606 		       sizeof(cfm), &cfm);
4607 }
4608 
4609 static void l2cap_send_move_chan_cfm_rsp(struct l2cap_conn *conn, u8 ident,
4610 					 u16 icid)
4611 {
4612 	struct l2cap_move_chan_cfm_rsp rsp;
4613 
4614 	BT_DBG("icid 0x%4.4x", icid);
4615 
4616 	rsp.icid = cpu_to_le16(icid);
4617 	l2cap_send_cmd(conn, ident, L2CAP_MOVE_CHAN_CFM_RSP, sizeof(rsp), &rsp);
4618 }
4619 
4620 static void __release_logical_link(struct l2cap_chan *chan)
4621 {
4622 	chan->hs_hchan = NULL;
4623 	chan->hs_hcon = NULL;
4624 
4625 	/* Placeholder - release the logical link */
4626 }
4627 
4628 static void l2cap_logical_fail(struct l2cap_chan *chan)
4629 {
4630 	/* Logical link setup failed */
4631 	if (chan->state != BT_CONNECTED) {
4632 		/* Create channel failure, disconnect */
4633 		l2cap_send_disconn_req(chan, ECONNRESET);
4634 		return;
4635 	}
4636 
4637 	switch (chan->move_role) {
4638 	case L2CAP_MOVE_ROLE_RESPONDER:
4639 		l2cap_move_done(chan);
4640 		l2cap_send_move_chan_rsp(chan, L2CAP_MR_NOT_SUPP);
4641 		break;
4642 	case L2CAP_MOVE_ROLE_INITIATOR:
4643 		if (chan->move_state == L2CAP_MOVE_WAIT_LOGICAL_COMP ||
4644 		    chan->move_state == L2CAP_MOVE_WAIT_LOGICAL_CFM) {
4645 			/* Remote has only sent pending or
4646 			 * success responses, clean up
4647 			 */
4648 			l2cap_move_done(chan);
4649 		}
4650 
4651 		/* Other amp move states imply that the move
4652 		 * has already aborted
4653 		 */
4654 		l2cap_send_move_chan_cfm(chan, L2CAP_MC_UNCONFIRMED);
4655 		break;
4656 	}
4657 }
4658 
4659 static void l2cap_logical_finish_create(struct l2cap_chan *chan,
4660 					struct hci_chan *hchan)
4661 {
4662 	struct l2cap_conf_rsp rsp;
4663 
4664 	chan->hs_hchan = hchan;
4665 	chan->hs_hcon->l2cap_data = chan->conn;
4666 
4667 	l2cap_send_efs_conf_rsp(chan, &rsp, chan->ident, 0);
4668 
4669 	if (test_bit(CONF_INPUT_DONE, &chan->conf_state)) {
4670 		int err;
4671 
4672 		set_default_fcs(chan);
4673 
4674 		err = l2cap_ertm_init(chan);
4675 		if (err < 0)
4676 			l2cap_send_disconn_req(chan, -err);
4677 		else
4678 			l2cap_chan_ready(chan);
4679 	}
4680 }
4681 
4682 static void l2cap_logical_finish_move(struct l2cap_chan *chan,
4683 				      struct hci_chan *hchan)
4684 {
4685 	chan->hs_hcon = hchan->conn;
4686 	chan->hs_hcon->l2cap_data = chan->conn;
4687 
4688 	BT_DBG("move_state %d", chan->move_state);
4689 
4690 	switch (chan->move_state) {
4691 	case L2CAP_MOVE_WAIT_LOGICAL_COMP:
4692 		/* Move confirm will be sent after a success
4693 		 * response is received
4694 		 */
4695 		chan->move_state = L2CAP_MOVE_WAIT_RSP_SUCCESS;
4696 		break;
4697 	case L2CAP_MOVE_WAIT_LOGICAL_CFM:
4698 		if (test_bit(CONN_LOCAL_BUSY, &chan->conn_state)) {
4699 			chan->move_state = L2CAP_MOVE_WAIT_LOCAL_BUSY;
4700 		} else if (chan->move_role == L2CAP_MOVE_ROLE_INITIATOR) {
4701 			chan->move_state = L2CAP_MOVE_WAIT_CONFIRM_RSP;
4702 			l2cap_send_move_chan_cfm(chan, L2CAP_MC_CONFIRMED);
4703 		} else if (chan->move_role == L2CAP_MOVE_ROLE_RESPONDER) {
4704 			chan->move_state = L2CAP_MOVE_WAIT_CONFIRM;
4705 			l2cap_send_move_chan_rsp(chan, L2CAP_MR_SUCCESS);
4706 		}
4707 		break;
4708 	default:
4709 		/* Move was not in expected state, free the channel */
4710 		__release_logical_link(chan);
4711 
4712 		chan->move_state = L2CAP_MOVE_STABLE;
4713 	}
4714 }
4715 
4716 /* Call with chan locked */
4717 void l2cap_logical_cfm(struct l2cap_chan *chan, struct hci_chan *hchan,
4718 		       u8 status)
4719 {
4720 	BT_DBG("chan %p, hchan %p, status %d", chan, hchan, status);
4721 
4722 	if (status) {
4723 		l2cap_logical_fail(chan);
4724 		__release_logical_link(chan);
4725 		return;
4726 	}
4727 
4728 	if (chan->state != BT_CONNECTED) {
4729 		/* Ignore logical link if channel is on BR/EDR */
4730 		if (chan->local_amp_id != AMP_ID_BREDR)
4731 			l2cap_logical_finish_create(chan, hchan);
4732 	} else {
4733 		l2cap_logical_finish_move(chan, hchan);
4734 	}
4735 }
4736 
4737 void l2cap_move_start(struct l2cap_chan *chan)
4738 {
4739 	BT_DBG("chan %p", chan);
4740 
4741 	if (chan->local_amp_id == AMP_ID_BREDR) {
4742 		if (chan->chan_policy != BT_CHANNEL_POLICY_AMP_PREFERRED)
4743 			return;
4744 		chan->move_role = L2CAP_MOVE_ROLE_INITIATOR;
4745 		chan->move_state = L2CAP_MOVE_WAIT_PREPARE;
4746 		/* Placeholder - start physical link setup */
4747 	} else {
4748 		chan->move_role = L2CAP_MOVE_ROLE_INITIATOR;
4749 		chan->move_state = L2CAP_MOVE_WAIT_RSP_SUCCESS;
4750 		chan->move_id = 0;
4751 		l2cap_move_setup(chan);
4752 		l2cap_send_move_chan_req(chan, 0);
4753 	}
4754 }
4755 
4756 static void l2cap_do_create(struct l2cap_chan *chan, int result,
4757 			    u8 local_amp_id, u8 remote_amp_id)
4758 {
4759 	BT_DBG("chan %p state %s %u -> %u", chan, state_to_string(chan->state),
4760 	       local_amp_id, remote_amp_id);
4761 
4762 	chan->fcs = L2CAP_FCS_NONE;
4763 
4764 	/* Outgoing channel on AMP */
4765 	if (chan->state == BT_CONNECT) {
4766 		if (result == L2CAP_CR_SUCCESS) {
4767 			chan->local_amp_id = local_amp_id;
4768 			l2cap_send_create_chan_req(chan, remote_amp_id);
4769 		} else {
4770 			/* Revert to BR/EDR connect */
4771 			l2cap_send_conn_req(chan);
4772 		}
4773 
4774 		return;
4775 	}
4776 
4777 	/* Incoming channel on AMP */
4778 	if (__l2cap_no_conn_pending(chan)) {
4779 		struct l2cap_conn_rsp rsp;
4780 		char buf[128];
4781 		rsp.scid = cpu_to_le16(chan->dcid);
4782 		rsp.dcid = cpu_to_le16(chan->scid);
4783 
4784 		if (result == L2CAP_CR_SUCCESS) {
4785 			/* Send successful response */
4786 			rsp.result = cpu_to_le16(L2CAP_CR_SUCCESS);
4787 			rsp.status = cpu_to_le16(L2CAP_CS_NO_INFO);
4788 		} else {
4789 			/* Send negative response */
4790 			rsp.result = cpu_to_le16(L2CAP_CR_NO_MEM);
4791 			rsp.status = cpu_to_le16(L2CAP_CS_NO_INFO);
4792 		}
4793 
4794 		l2cap_send_cmd(chan->conn, chan->ident, L2CAP_CREATE_CHAN_RSP,
4795 			       sizeof(rsp), &rsp);
4796 
4797 		if (result == L2CAP_CR_SUCCESS) {
4798 			l2cap_state_change(chan, BT_CONFIG);
4799 			set_bit(CONF_REQ_SENT, &chan->conf_state);
4800 			l2cap_send_cmd(chan->conn, l2cap_get_ident(chan->conn),
4801 				       L2CAP_CONF_REQ,
4802 				       l2cap_build_conf_req(chan, buf, sizeof(buf)), buf);
4803 			chan->num_conf_req++;
4804 		}
4805 	}
4806 }
4807 
4808 static void l2cap_do_move_initiate(struct l2cap_chan *chan, u8 local_amp_id,
4809 				   u8 remote_amp_id)
4810 {
4811 	l2cap_move_setup(chan);
4812 	chan->move_id = local_amp_id;
4813 	chan->move_state = L2CAP_MOVE_WAIT_RSP;
4814 
4815 	l2cap_send_move_chan_req(chan, remote_amp_id);
4816 }
4817 
4818 static void l2cap_do_move_respond(struct l2cap_chan *chan, int result)
4819 {
4820 	struct hci_chan *hchan = NULL;
4821 
4822 	/* Placeholder - get hci_chan for logical link */
4823 
4824 	if (hchan) {
4825 		if (hchan->state == BT_CONNECTED) {
4826 			/* Logical link is ready to go */
4827 			chan->hs_hcon = hchan->conn;
4828 			chan->hs_hcon->l2cap_data = chan->conn;
4829 			chan->move_state = L2CAP_MOVE_WAIT_CONFIRM;
4830 			l2cap_send_move_chan_rsp(chan, L2CAP_MR_SUCCESS);
4831 
4832 			l2cap_logical_cfm(chan, hchan, L2CAP_MR_SUCCESS);
4833 		} else {
4834 			/* Wait for logical link to be ready */
4835 			chan->move_state = L2CAP_MOVE_WAIT_LOGICAL_CFM;
4836 		}
4837 	} else {
4838 		/* Logical link not available */
4839 		l2cap_send_move_chan_rsp(chan, L2CAP_MR_NOT_ALLOWED);
4840 	}
4841 }
4842 
4843 static void l2cap_do_move_cancel(struct l2cap_chan *chan, int result)
4844 {
4845 	if (chan->move_role == L2CAP_MOVE_ROLE_RESPONDER) {
4846 		u8 rsp_result;
4847 		if (result == -EINVAL)
4848 			rsp_result = L2CAP_MR_BAD_ID;
4849 		else
4850 			rsp_result = L2CAP_MR_NOT_ALLOWED;
4851 
4852 		l2cap_send_move_chan_rsp(chan, rsp_result);
4853 	}
4854 
4855 	chan->move_role = L2CAP_MOVE_ROLE_NONE;
4856 	chan->move_state = L2CAP_MOVE_STABLE;
4857 
4858 	/* Restart data transmission */
4859 	l2cap_ertm_send(chan);
4860 }
4861 
4862 /* Invoke with locked chan */
4863 void __l2cap_physical_cfm(struct l2cap_chan *chan, int result)
4864 {
4865 	u8 local_amp_id = chan->local_amp_id;
4866 	u8 remote_amp_id = chan->remote_amp_id;
4867 
4868 	BT_DBG("chan %p, result %d, local_amp_id %d, remote_amp_id %d",
4869 	       chan, result, local_amp_id, remote_amp_id);
4870 
4871 	if (chan->state == BT_DISCONN || chan->state == BT_CLOSED) {
4872 		l2cap_chan_unlock(chan);
4873 		return;
4874 	}
4875 
4876 	if (chan->state != BT_CONNECTED) {
4877 		l2cap_do_create(chan, result, local_amp_id, remote_amp_id);
4878 	} else if (result != L2CAP_MR_SUCCESS) {
4879 		l2cap_do_move_cancel(chan, result);
4880 	} else {
4881 		switch (chan->move_role) {
4882 		case L2CAP_MOVE_ROLE_INITIATOR:
4883 			l2cap_do_move_initiate(chan, local_amp_id,
4884 					       remote_amp_id);
4885 			break;
4886 		case L2CAP_MOVE_ROLE_RESPONDER:
4887 			l2cap_do_move_respond(chan, result);
4888 			break;
4889 		default:
4890 			l2cap_do_move_cancel(chan, result);
4891 			break;
4892 		}
4893 	}
4894 }
4895 
4896 static inline int l2cap_move_channel_req(struct l2cap_conn *conn,
4897 					 struct l2cap_cmd_hdr *cmd,
4898 					 u16 cmd_len, void *data)
4899 {
4900 	struct l2cap_move_chan_req *req = data;
4901 	struct l2cap_move_chan_rsp rsp;
4902 	struct l2cap_chan *chan;
4903 	u16 icid = 0;
4904 	u16 result = L2CAP_MR_NOT_ALLOWED;
4905 
4906 	if (cmd_len != sizeof(*req))
4907 		return -EPROTO;
4908 
4909 	icid = le16_to_cpu(req->icid);
4910 
4911 	BT_DBG("icid 0x%4.4x, dest_amp_id %d", icid, req->dest_amp_id);
4912 
4913 	if (!(conn->local_fixed_chan & L2CAP_FC_A2MP))
4914 		return -EINVAL;
4915 
4916 	chan = l2cap_get_chan_by_dcid(conn, icid);
4917 	if (!chan) {
4918 		rsp.icid = cpu_to_le16(icid);
4919 		rsp.result = cpu_to_le16(L2CAP_MR_NOT_ALLOWED);
4920 		l2cap_send_cmd(conn, cmd->ident, L2CAP_MOVE_CHAN_RSP,
4921 			       sizeof(rsp), &rsp);
4922 		return 0;
4923 	}
4924 
4925 	chan->ident = cmd->ident;
4926 
4927 	if (chan->scid < L2CAP_CID_DYN_START ||
4928 	    chan->chan_policy == BT_CHANNEL_POLICY_BREDR_ONLY ||
4929 	    (chan->mode != L2CAP_MODE_ERTM &&
4930 	     chan->mode != L2CAP_MODE_STREAMING)) {
4931 		result = L2CAP_MR_NOT_ALLOWED;
4932 		goto send_move_response;
4933 	}
4934 
4935 	if (chan->local_amp_id == req->dest_amp_id) {
4936 		result = L2CAP_MR_SAME_ID;
4937 		goto send_move_response;
4938 	}
4939 
4940 	if (req->dest_amp_id != AMP_ID_BREDR) {
4941 		struct hci_dev *hdev;
4942 		hdev = hci_dev_get(req->dest_amp_id);
4943 		if (!hdev || hdev->dev_type != HCI_AMP ||
4944 		    !test_bit(HCI_UP, &hdev->flags)) {
4945 			if (hdev)
4946 				hci_dev_put(hdev);
4947 
4948 			result = L2CAP_MR_BAD_ID;
4949 			goto send_move_response;
4950 		}
4951 		hci_dev_put(hdev);
4952 	}
4953 
4954 	/* Detect a move collision.  Only send a collision response
4955 	 * if this side has "lost", otherwise proceed with the move.
4956 	 * The winner has the larger bd_addr.
4957 	 */
4958 	if ((__chan_is_moving(chan) ||
4959 	     chan->move_role != L2CAP_MOVE_ROLE_NONE) &&
4960 	    bacmp(&conn->hcon->src, &conn->hcon->dst) > 0) {
4961 		result = L2CAP_MR_COLLISION;
4962 		goto send_move_response;
4963 	}
4964 
4965 	chan->move_role = L2CAP_MOVE_ROLE_RESPONDER;
4966 	l2cap_move_setup(chan);
4967 	chan->move_id = req->dest_amp_id;
4968 	icid = chan->dcid;
4969 
4970 	if (req->dest_amp_id == AMP_ID_BREDR) {
4971 		/* Moving to BR/EDR */
4972 		if (test_bit(CONN_LOCAL_BUSY, &chan->conn_state)) {
4973 			chan->move_state = L2CAP_MOVE_WAIT_LOCAL_BUSY;
4974 			result = L2CAP_MR_PEND;
4975 		} else {
4976 			chan->move_state = L2CAP_MOVE_WAIT_CONFIRM;
4977 			result = L2CAP_MR_SUCCESS;
4978 		}
4979 	} else {
4980 		chan->move_state = L2CAP_MOVE_WAIT_PREPARE;
4981 		/* Placeholder - uncomment when amp functions are available */
4982 		/*amp_accept_physical(chan, req->dest_amp_id);*/
4983 		result = L2CAP_MR_PEND;
4984 	}
4985 
4986 send_move_response:
4987 	l2cap_send_move_chan_rsp(chan, result);
4988 
4989 	l2cap_chan_unlock(chan);
4990 
4991 	return 0;
4992 }
4993 
4994 static void l2cap_move_continue(struct l2cap_conn *conn, u16 icid, u16 result)
4995 {
4996 	struct l2cap_chan *chan;
4997 	struct hci_chan *hchan = NULL;
4998 
4999 	chan = l2cap_get_chan_by_scid(conn, icid);
5000 	if (!chan) {
5001 		l2cap_send_move_chan_cfm_icid(conn, icid);
5002 		return;
5003 	}
5004 
5005 	__clear_chan_timer(chan);
5006 	if (result == L2CAP_MR_PEND)
5007 		__set_chan_timer(chan, L2CAP_MOVE_ERTX_TIMEOUT);
5008 
5009 	switch (chan->move_state) {
5010 	case L2CAP_MOVE_WAIT_LOGICAL_COMP:
5011 		/* Move confirm will be sent when logical link
5012 		 * is complete.
5013 		 */
5014 		chan->move_state = L2CAP_MOVE_WAIT_LOGICAL_CFM;
5015 		break;
5016 	case L2CAP_MOVE_WAIT_RSP_SUCCESS:
5017 		if (result == L2CAP_MR_PEND) {
5018 			break;
5019 		} else if (test_bit(CONN_LOCAL_BUSY,
5020 				    &chan->conn_state)) {
5021 			chan->move_state = L2CAP_MOVE_WAIT_LOCAL_BUSY;
5022 		} else {
5023 			/* Logical link is up or moving to BR/EDR,
5024 			 * proceed with move
5025 			 */
5026 			chan->move_state = L2CAP_MOVE_WAIT_CONFIRM_RSP;
5027 			l2cap_send_move_chan_cfm(chan, L2CAP_MC_CONFIRMED);
5028 		}
5029 		break;
5030 	case L2CAP_MOVE_WAIT_RSP:
5031 		/* Moving to AMP */
5032 		if (result == L2CAP_MR_SUCCESS) {
5033 			/* Remote is ready, send confirm immediately
5034 			 * after logical link is ready
5035 			 */
5036 			chan->move_state = L2CAP_MOVE_WAIT_LOGICAL_CFM;
5037 		} else {
5038 			/* Both logical link and move success
5039 			 * are required to confirm
5040 			 */
5041 			chan->move_state = L2CAP_MOVE_WAIT_LOGICAL_COMP;
5042 		}
5043 
5044 		/* Placeholder - get hci_chan for logical link */
5045 		if (!hchan) {
5046 			/* Logical link not available */
5047 			l2cap_send_move_chan_cfm(chan, L2CAP_MC_UNCONFIRMED);
5048 			break;
5049 		}
5050 
5051 		/* If the logical link is not yet connected, do not
5052 		 * send confirmation.
5053 		 */
5054 		if (hchan->state != BT_CONNECTED)
5055 			break;
5056 
5057 		/* Logical link is already ready to go */
5058 
5059 		chan->hs_hcon = hchan->conn;
5060 		chan->hs_hcon->l2cap_data = chan->conn;
5061 
5062 		if (result == L2CAP_MR_SUCCESS) {
5063 			/* Can confirm now */
5064 			l2cap_send_move_chan_cfm(chan, L2CAP_MC_CONFIRMED);
5065 		} else {
5066 			/* Now only need move success
5067 			 * to confirm
5068 			 */
5069 			chan->move_state = L2CAP_MOVE_WAIT_RSP_SUCCESS;
5070 		}
5071 
5072 		l2cap_logical_cfm(chan, hchan, L2CAP_MR_SUCCESS);
5073 		break;
5074 	default:
5075 		/* Any other amp move state means the move failed. */
5076 		chan->move_id = chan->local_amp_id;
5077 		l2cap_move_done(chan);
5078 		l2cap_send_move_chan_cfm(chan, L2CAP_MC_UNCONFIRMED);
5079 	}
5080 
5081 	l2cap_chan_unlock(chan);
5082 }
5083 
5084 static void l2cap_move_fail(struct l2cap_conn *conn, u8 ident, u16 icid,
5085 			    u16 result)
5086 {
5087 	struct l2cap_chan *chan;
5088 
5089 	chan = l2cap_get_chan_by_ident(conn, ident);
5090 	if (!chan) {
5091 		/* Could not locate channel, icid is best guess */
5092 		l2cap_send_move_chan_cfm_icid(conn, icid);
5093 		return;
5094 	}
5095 
5096 	__clear_chan_timer(chan);
5097 
5098 	if (chan->move_role == L2CAP_MOVE_ROLE_INITIATOR) {
5099 		if (result == L2CAP_MR_COLLISION) {
5100 			chan->move_role = L2CAP_MOVE_ROLE_RESPONDER;
5101 		} else {
5102 			/* Cleanup - cancel move */
5103 			chan->move_id = chan->local_amp_id;
5104 			l2cap_move_done(chan);
5105 		}
5106 	}
5107 
5108 	l2cap_send_move_chan_cfm(chan, L2CAP_MC_UNCONFIRMED);
5109 
5110 	l2cap_chan_unlock(chan);
5111 }
5112 
5113 static int l2cap_move_channel_rsp(struct l2cap_conn *conn,
5114 				  struct l2cap_cmd_hdr *cmd,
5115 				  u16 cmd_len, void *data)
5116 {
5117 	struct l2cap_move_chan_rsp *rsp = data;
5118 	u16 icid, result;
5119 
5120 	if (cmd_len != sizeof(*rsp))
5121 		return -EPROTO;
5122 
5123 	icid = le16_to_cpu(rsp->icid);
5124 	result = le16_to_cpu(rsp->result);
5125 
5126 	BT_DBG("icid 0x%4.4x, result 0x%4.4x", icid, result);
5127 
5128 	if (result == L2CAP_MR_SUCCESS || result == L2CAP_MR_PEND)
5129 		l2cap_move_continue(conn, icid, result);
5130 	else
5131 		l2cap_move_fail(conn, cmd->ident, icid, result);
5132 
5133 	return 0;
5134 }
5135 
5136 static int l2cap_move_channel_confirm(struct l2cap_conn *conn,
5137 				      struct l2cap_cmd_hdr *cmd,
5138 				      u16 cmd_len, void *data)
5139 {
5140 	struct l2cap_move_chan_cfm *cfm = data;
5141 	struct l2cap_chan *chan;
5142 	u16 icid, result;
5143 
5144 	if (cmd_len != sizeof(*cfm))
5145 		return -EPROTO;
5146 
5147 	icid = le16_to_cpu(cfm->icid);
5148 	result = le16_to_cpu(cfm->result);
5149 
5150 	BT_DBG("icid 0x%4.4x, result 0x%4.4x", icid, result);
5151 
5152 	chan = l2cap_get_chan_by_dcid(conn, icid);
5153 	if (!chan) {
5154 		/* Spec requires a response even if the icid was not found */
5155 		l2cap_send_move_chan_cfm_rsp(conn, cmd->ident, icid);
5156 		return 0;
5157 	}
5158 
5159 	if (chan->move_state == L2CAP_MOVE_WAIT_CONFIRM) {
5160 		if (result == L2CAP_MC_CONFIRMED) {
5161 			chan->local_amp_id = chan->move_id;
5162 			if (chan->local_amp_id == AMP_ID_BREDR)
5163 				__release_logical_link(chan);
5164 		} else {
5165 			chan->move_id = chan->local_amp_id;
5166 		}
5167 
5168 		l2cap_move_done(chan);
5169 	}
5170 
5171 	l2cap_send_move_chan_cfm_rsp(conn, cmd->ident, icid);
5172 
5173 	l2cap_chan_unlock(chan);
5174 
5175 	return 0;
5176 }
5177 
5178 static inline int l2cap_move_channel_confirm_rsp(struct l2cap_conn *conn,
5179 						 struct l2cap_cmd_hdr *cmd,
5180 						 u16 cmd_len, void *data)
5181 {
5182 	struct l2cap_move_chan_cfm_rsp *rsp = data;
5183 	struct l2cap_chan *chan;
5184 	u16 icid;
5185 
5186 	if (cmd_len != sizeof(*rsp))
5187 		return -EPROTO;
5188 
5189 	icid = le16_to_cpu(rsp->icid);
5190 
5191 	BT_DBG("icid 0x%4.4x", icid);
5192 
5193 	chan = l2cap_get_chan_by_scid(conn, icid);
5194 	if (!chan)
5195 		return 0;
5196 
5197 	__clear_chan_timer(chan);
5198 
5199 	if (chan->move_state == L2CAP_MOVE_WAIT_CONFIRM_RSP) {
5200 		chan->local_amp_id = chan->move_id;
5201 
5202 		if (chan->local_amp_id == AMP_ID_BREDR && chan->hs_hchan)
5203 			__release_logical_link(chan);
5204 
5205 		l2cap_move_done(chan);
5206 	}
5207 
5208 	l2cap_chan_unlock(chan);
5209 
5210 	return 0;
5211 }
5212 
5213 static inline int l2cap_conn_param_update_req(struct l2cap_conn *conn,
5214 					      struct l2cap_cmd_hdr *cmd,
5215 					      u16 cmd_len, u8 *data)
5216 {
5217 	struct hci_conn *hcon = conn->hcon;
5218 	struct l2cap_conn_param_update_req *req;
5219 	struct l2cap_conn_param_update_rsp rsp;
5220 	u16 min, max, latency, to_multiplier;
5221 	int err;
5222 
5223 	if (hcon->role != HCI_ROLE_MASTER)
5224 		return -EINVAL;
5225 
5226 	if (cmd_len != sizeof(struct l2cap_conn_param_update_req))
5227 		return -EPROTO;
5228 
5229 	req = (struct l2cap_conn_param_update_req *) data;
5230 	min		= __le16_to_cpu(req->min);
5231 	max		= __le16_to_cpu(req->max);
5232 	latency		= __le16_to_cpu(req->latency);
5233 	to_multiplier	= __le16_to_cpu(req->to_multiplier);
5234 
5235 	BT_DBG("min 0x%4.4x max 0x%4.4x latency: 0x%4.4x Timeout: 0x%4.4x",
5236 	       min, max, latency, to_multiplier);
5237 
5238 	memset(&rsp, 0, sizeof(rsp));
5239 
5240 	err = hci_check_conn_params(min, max, latency, to_multiplier);
5241 	if (err)
5242 		rsp.result = cpu_to_le16(L2CAP_CONN_PARAM_REJECTED);
5243 	else
5244 		rsp.result = cpu_to_le16(L2CAP_CONN_PARAM_ACCEPTED);
5245 
5246 	l2cap_send_cmd(conn, cmd->ident, L2CAP_CONN_PARAM_UPDATE_RSP,
5247 		       sizeof(rsp), &rsp);
5248 
5249 	if (!err) {
5250 		u8 store_hint;
5251 
5252 		store_hint = hci_le_conn_update(hcon, min, max, latency,
5253 						to_multiplier);
5254 		mgmt_new_conn_param(hcon->hdev, &hcon->dst, hcon->dst_type,
5255 				    store_hint, min, max, latency,
5256 				    to_multiplier);
5257 
5258 	}
5259 
5260 	return 0;
5261 }
5262 
5263 static int l2cap_le_connect_rsp(struct l2cap_conn *conn,
5264 				struct l2cap_cmd_hdr *cmd, u16 cmd_len,
5265 				u8 *data)
5266 {
5267 	struct l2cap_le_conn_rsp *rsp = (struct l2cap_le_conn_rsp *) data;
5268 	struct hci_conn *hcon = conn->hcon;
5269 	u16 dcid, mtu, mps, credits, result;
5270 	struct l2cap_chan *chan;
5271 	int err, sec_level;
5272 
5273 	if (cmd_len < sizeof(*rsp))
5274 		return -EPROTO;
5275 
5276 	dcid    = __le16_to_cpu(rsp->dcid);
5277 	mtu     = __le16_to_cpu(rsp->mtu);
5278 	mps     = __le16_to_cpu(rsp->mps);
5279 	credits = __le16_to_cpu(rsp->credits);
5280 	result  = __le16_to_cpu(rsp->result);
5281 
5282 	if (result == L2CAP_CR_SUCCESS && (mtu < 23 || mps < 23 ||
5283 					   dcid < L2CAP_CID_DYN_START ||
5284 					   dcid > L2CAP_CID_LE_DYN_END))
5285 		return -EPROTO;
5286 
5287 	BT_DBG("dcid 0x%4.4x mtu %u mps %u credits %u result 0x%2.2x",
5288 	       dcid, mtu, mps, credits, result);
5289 
5290 	mutex_lock(&conn->chan_lock);
5291 
5292 	chan = __l2cap_get_chan_by_ident(conn, cmd->ident);
5293 	if (!chan) {
5294 		err = -EBADSLT;
5295 		goto unlock;
5296 	}
5297 
5298 	err = 0;
5299 
5300 	l2cap_chan_lock(chan);
5301 
5302 	switch (result) {
5303 	case L2CAP_CR_SUCCESS:
5304 		if (__l2cap_get_chan_by_dcid(conn, dcid)) {
5305 			err = -EBADSLT;
5306 			break;
5307 		}
5308 
5309 		chan->ident = 0;
5310 		chan->dcid = dcid;
5311 		chan->omtu = mtu;
5312 		chan->remote_mps = mps;
5313 		chan->tx_credits = credits;
5314 		l2cap_chan_ready(chan);
5315 		break;
5316 
5317 	case L2CAP_CR_AUTHENTICATION:
5318 	case L2CAP_CR_ENCRYPTION:
5319 		/* If we already have MITM protection we can't do
5320 		 * anything.
5321 		 */
5322 		if (hcon->sec_level > BT_SECURITY_MEDIUM) {
5323 			l2cap_chan_del(chan, ECONNREFUSED);
5324 			break;
5325 		}
5326 
5327 		sec_level = hcon->sec_level + 1;
5328 		if (chan->sec_level < sec_level)
5329 			chan->sec_level = sec_level;
5330 
5331 		/* We'll need to send a new Connect Request */
5332 		clear_bit(FLAG_LE_CONN_REQ_SENT, &chan->flags);
5333 
5334 		smp_conn_security(hcon, chan->sec_level);
5335 		break;
5336 
5337 	default:
5338 		l2cap_chan_del(chan, ECONNREFUSED);
5339 		break;
5340 	}
5341 
5342 	l2cap_chan_unlock(chan);
5343 
5344 unlock:
5345 	mutex_unlock(&conn->chan_lock);
5346 
5347 	return err;
5348 }
5349 
5350 static inline int l2cap_bredr_sig_cmd(struct l2cap_conn *conn,
5351 				      struct l2cap_cmd_hdr *cmd, u16 cmd_len,
5352 				      u8 *data)
5353 {
5354 	int err = 0;
5355 
5356 	switch (cmd->code) {
5357 	case L2CAP_COMMAND_REJ:
5358 		l2cap_command_rej(conn, cmd, cmd_len, data);
5359 		break;
5360 
5361 	case L2CAP_CONN_REQ:
5362 		err = l2cap_connect_req(conn, cmd, cmd_len, data);
5363 		break;
5364 
5365 	case L2CAP_CONN_RSP:
5366 	case L2CAP_CREATE_CHAN_RSP:
5367 		l2cap_connect_create_rsp(conn, cmd, cmd_len, data);
5368 		break;
5369 
5370 	case L2CAP_CONF_REQ:
5371 		err = l2cap_config_req(conn, cmd, cmd_len, data);
5372 		break;
5373 
5374 	case L2CAP_CONF_RSP:
5375 		l2cap_config_rsp(conn, cmd, cmd_len, data);
5376 		break;
5377 
5378 	case L2CAP_DISCONN_REQ:
5379 		err = l2cap_disconnect_req(conn, cmd, cmd_len, data);
5380 		break;
5381 
5382 	case L2CAP_DISCONN_RSP:
5383 		l2cap_disconnect_rsp(conn, cmd, cmd_len, data);
5384 		break;
5385 
5386 	case L2CAP_ECHO_REQ:
5387 		l2cap_send_cmd(conn, cmd->ident, L2CAP_ECHO_RSP, cmd_len, data);
5388 		break;
5389 
5390 	case L2CAP_ECHO_RSP:
5391 		break;
5392 
5393 	case L2CAP_INFO_REQ:
5394 		err = l2cap_information_req(conn, cmd, cmd_len, data);
5395 		break;
5396 
5397 	case L2CAP_INFO_RSP:
5398 		l2cap_information_rsp(conn, cmd, cmd_len, data);
5399 		break;
5400 
5401 	case L2CAP_CREATE_CHAN_REQ:
5402 		err = l2cap_create_channel_req(conn, cmd, cmd_len, data);
5403 		break;
5404 
5405 	case L2CAP_MOVE_CHAN_REQ:
5406 		err = l2cap_move_channel_req(conn, cmd, cmd_len, data);
5407 		break;
5408 
5409 	case L2CAP_MOVE_CHAN_RSP:
5410 		l2cap_move_channel_rsp(conn, cmd, cmd_len, data);
5411 		break;
5412 
5413 	case L2CAP_MOVE_CHAN_CFM:
5414 		err = l2cap_move_channel_confirm(conn, cmd, cmd_len, data);
5415 		break;
5416 
5417 	case L2CAP_MOVE_CHAN_CFM_RSP:
5418 		l2cap_move_channel_confirm_rsp(conn, cmd, cmd_len, data);
5419 		break;
5420 
5421 	default:
5422 		BT_ERR("Unknown BR/EDR signaling command 0x%2.2x", cmd->code);
5423 		err = -EINVAL;
5424 		break;
5425 	}
5426 
5427 	return err;
5428 }
5429 
5430 static int l2cap_le_connect_req(struct l2cap_conn *conn,
5431 				struct l2cap_cmd_hdr *cmd, u16 cmd_len,
5432 				u8 *data)
5433 {
5434 	struct l2cap_le_conn_req *req = (struct l2cap_le_conn_req *) data;
5435 	struct l2cap_le_conn_rsp rsp;
5436 	struct l2cap_chan *chan, *pchan;
5437 	u16 dcid, scid, credits, mtu, mps;
5438 	__le16 psm;
5439 	u8 result;
5440 
5441 	if (cmd_len != sizeof(*req))
5442 		return -EPROTO;
5443 
5444 	scid = __le16_to_cpu(req->scid);
5445 	mtu  = __le16_to_cpu(req->mtu);
5446 	mps  = __le16_to_cpu(req->mps);
5447 	psm  = req->psm;
5448 	dcid = 0;
5449 	credits = 0;
5450 
5451 	if (mtu < 23 || mps < 23)
5452 		return -EPROTO;
5453 
5454 	BT_DBG("psm 0x%2.2x scid 0x%4.4x mtu %u mps %u", __le16_to_cpu(psm),
5455 	       scid, mtu, mps);
5456 
5457 	/* Check if we have socket listening on psm */
5458 	pchan = l2cap_global_chan_by_psm(BT_LISTEN, psm, &conn->hcon->src,
5459 					 &conn->hcon->dst, LE_LINK);
5460 	if (!pchan) {
5461 		result = L2CAP_CR_BAD_PSM;
5462 		chan = NULL;
5463 		goto response;
5464 	}
5465 
5466 	mutex_lock(&conn->chan_lock);
5467 	l2cap_chan_lock(pchan);
5468 
5469 	if (!smp_sufficient_security(conn->hcon, pchan->sec_level,
5470 				     SMP_ALLOW_STK)) {
5471 		result = L2CAP_CR_AUTHENTICATION;
5472 		chan = NULL;
5473 		goto response_unlock;
5474 	}
5475 
5476 	/* Check for valid dynamic CID range */
5477 	if (scid < L2CAP_CID_DYN_START || scid > L2CAP_CID_LE_DYN_END) {
5478 		result = L2CAP_CR_INVALID_SCID;
5479 		chan = NULL;
5480 		goto response_unlock;
5481 	}
5482 
5483 	/* Check if we already have channel with that dcid */
5484 	if (__l2cap_get_chan_by_dcid(conn, scid)) {
5485 		result = L2CAP_CR_SCID_IN_USE;
5486 		chan = NULL;
5487 		goto response_unlock;
5488 	}
5489 
5490 	chan = pchan->ops->new_connection(pchan);
5491 	if (!chan) {
5492 		result = L2CAP_CR_NO_MEM;
5493 		goto response_unlock;
5494 	}
5495 
5496 	l2cap_le_flowctl_init(chan);
5497 
5498 	bacpy(&chan->src, &conn->hcon->src);
5499 	bacpy(&chan->dst, &conn->hcon->dst);
5500 	chan->src_type = bdaddr_src_type(conn->hcon);
5501 	chan->dst_type = bdaddr_dst_type(conn->hcon);
5502 	chan->psm  = psm;
5503 	chan->dcid = scid;
5504 	chan->omtu = mtu;
5505 	chan->remote_mps = mps;
5506 	chan->tx_credits = __le16_to_cpu(req->credits);
5507 
5508 	__l2cap_chan_add(conn, chan);
5509 	dcid = chan->scid;
5510 	credits = chan->rx_credits;
5511 
5512 	__set_chan_timer(chan, chan->ops->get_sndtimeo(chan));
5513 
5514 	chan->ident = cmd->ident;
5515 
5516 	if (test_bit(FLAG_DEFER_SETUP, &chan->flags)) {
5517 		l2cap_state_change(chan, BT_CONNECT2);
5518 		/* The following result value is actually not defined
5519 		 * for LE CoC but we use it to let the function know
5520 		 * that it should bail out after doing its cleanup
5521 		 * instead of sending a response.
5522 		 */
5523 		result = L2CAP_CR_PEND;
5524 		chan->ops->defer(chan);
5525 	} else {
5526 		l2cap_chan_ready(chan);
5527 		result = L2CAP_CR_SUCCESS;
5528 	}
5529 
5530 response_unlock:
5531 	l2cap_chan_unlock(pchan);
5532 	mutex_unlock(&conn->chan_lock);
5533 	l2cap_chan_put(pchan);
5534 
5535 	if (result == L2CAP_CR_PEND)
5536 		return 0;
5537 
5538 response:
5539 	if (chan) {
5540 		rsp.mtu = cpu_to_le16(chan->imtu);
5541 		rsp.mps = cpu_to_le16(chan->mps);
5542 	} else {
5543 		rsp.mtu = 0;
5544 		rsp.mps = 0;
5545 	}
5546 
5547 	rsp.dcid    = cpu_to_le16(dcid);
5548 	rsp.credits = cpu_to_le16(credits);
5549 	rsp.result  = cpu_to_le16(result);
5550 
5551 	l2cap_send_cmd(conn, cmd->ident, L2CAP_LE_CONN_RSP, sizeof(rsp), &rsp);
5552 
5553 	return 0;
5554 }
5555 
5556 static inline int l2cap_le_credits(struct l2cap_conn *conn,
5557 				   struct l2cap_cmd_hdr *cmd, u16 cmd_len,
5558 				   u8 *data)
5559 {
5560 	struct l2cap_le_credits *pkt;
5561 	struct l2cap_chan *chan;
5562 	u16 cid, credits, max_credits;
5563 
5564 	if (cmd_len != sizeof(*pkt))
5565 		return -EPROTO;
5566 
5567 	pkt = (struct l2cap_le_credits *) data;
5568 	cid	= __le16_to_cpu(pkt->cid);
5569 	credits	= __le16_to_cpu(pkt->credits);
5570 
5571 	BT_DBG("cid 0x%4.4x credits 0x%4.4x", cid, credits);
5572 
5573 	chan = l2cap_get_chan_by_dcid(conn, cid);
5574 	if (!chan)
5575 		return -EBADSLT;
5576 
5577 	max_credits = LE_FLOWCTL_MAX_CREDITS - chan->tx_credits;
5578 	if (credits > max_credits) {
5579 		BT_ERR("LE credits overflow");
5580 		l2cap_send_disconn_req(chan, ECONNRESET);
5581 		l2cap_chan_unlock(chan);
5582 
5583 		/* Return 0 so that we don't trigger an unnecessary
5584 		 * command reject packet.
5585 		 */
5586 		return 0;
5587 	}
5588 
5589 	chan->tx_credits += credits;
5590 
5591 	/* Resume sending */
5592 	l2cap_le_flowctl_send(chan);
5593 
5594 	if (chan->tx_credits)
5595 		chan->ops->resume(chan);
5596 
5597 	l2cap_chan_unlock(chan);
5598 
5599 	return 0;
5600 }
5601 
5602 static inline int l2cap_le_command_rej(struct l2cap_conn *conn,
5603 				       struct l2cap_cmd_hdr *cmd, u16 cmd_len,
5604 				       u8 *data)
5605 {
5606 	struct l2cap_cmd_rej_unk *rej = (struct l2cap_cmd_rej_unk *) data;
5607 	struct l2cap_chan *chan;
5608 
5609 	if (cmd_len < sizeof(*rej))
5610 		return -EPROTO;
5611 
5612 	mutex_lock(&conn->chan_lock);
5613 
5614 	chan = __l2cap_get_chan_by_ident(conn, cmd->ident);
5615 	if (!chan)
5616 		goto done;
5617 
5618 	l2cap_chan_lock(chan);
5619 	l2cap_chan_del(chan, ECONNREFUSED);
5620 	l2cap_chan_unlock(chan);
5621 
5622 done:
5623 	mutex_unlock(&conn->chan_lock);
5624 	return 0;
5625 }
5626 
5627 static inline int l2cap_le_sig_cmd(struct l2cap_conn *conn,
5628 				   struct l2cap_cmd_hdr *cmd, u16 cmd_len,
5629 				   u8 *data)
5630 {
5631 	int err = 0;
5632 
5633 	switch (cmd->code) {
5634 	case L2CAP_COMMAND_REJ:
5635 		l2cap_le_command_rej(conn, cmd, cmd_len, data);
5636 		break;
5637 
5638 	case L2CAP_CONN_PARAM_UPDATE_REQ:
5639 		err = l2cap_conn_param_update_req(conn, cmd, cmd_len, data);
5640 		break;
5641 
5642 	case L2CAP_CONN_PARAM_UPDATE_RSP:
5643 		break;
5644 
5645 	case L2CAP_LE_CONN_RSP:
5646 		l2cap_le_connect_rsp(conn, cmd, cmd_len, data);
5647 		break;
5648 
5649 	case L2CAP_LE_CONN_REQ:
5650 		err = l2cap_le_connect_req(conn, cmd, cmd_len, data);
5651 		break;
5652 
5653 	case L2CAP_LE_CREDITS:
5654 		err = l2cap_le_credits(conn, cmd, cmd_len, data);
5655 		break;
5656 
5657 	case L2CAP_DISCONN_REQ:
5658 		err = l2cap_disconnect_req(conn, cmd, cmd_len, data);
5659 		break;
5660 
5661 	case L2CAP_DISCONN_RSP:
5662 		l2cap_disconnect_rsp(conn, cmd, cmd_len, data);
5663 		break;
5664 
5665 	default:
5666 		BT_ERR("Unknown LE signaling command 0x%2.2x", cmd->code);
5667 		err = -EINVAL;
5668 		break;
5669 	}
5670 
5671 	return err;
5672 }
5673 
5674 static inline void l2cap_le_sig_channel(struct l2cap_conn *conn,
5675 					struct sk_buff *skb)
5676 {
5677 	struct hci_conn *hcon = conn->hcon;
5678 	struct l2cap_cmd_hdr *cmd;
5679 	u16 len;
5680 	int err;
5681 
5682 	if (hcon->type != LE_LINK)
5683 		goto drop;
5684 
5685 	if (skb->len < L2CAP_CMD_HDR_SIZE)
5686 		goto drop;
5687 
5688 	cmd = (void *) skb->data;
5689 	skb_pull(skb, L2CAP_CMD_HDR_SIZE);
5690 
5691 	len = le16_to_cpu(cmd->len);
5692 
5693 	BT_DBG("code 0x%2.2x len %d id 0x%2.2x", cmd->code, len, cmd->ident);
5694 
5695 	if (len != skb->len || !cmd->ident) {
5696 		BT_DBG("corrupted command");
5697 		goto drop;
5698 	}
5699 
5700 	err = l2cap_le_sig_cmd(conn, cmd, len, skb->data);
5701 	if (err) {
5702 		struct l2cap_cmd_rej_unk rej;
5703 
5704 		BT_ERR("Wrong link type (%d)", err);
5705 
5706 		rej.reason = cpu_to_le16(L2CAP_REJ_NOT_UNDERSTOOD);
5707 		l2cap_send_cmd(conn, cmd->ident, L2CAP_COMMAND_REJ,
5708 			       sizeof(rej), &rej);
5709 	}
5710 
5711 drop:
5712 	kfree_skb(skb);
5713 }
5714 
5715 static inline void l2cap_sig_channel(struct l2cap_conn *conn,
5716 				     struct sk_buff *skb)
5717 {
5718 	struct hci_conn *hcon = conn->hcon;
5719 	u8 *data = skb->data;
5720 	int len = skb->len;
5721 	struct l2cap_cmd_hdr cmd;
5722 	int err;
5723 
5724 	l2cap_raw_recv(conn, skb);
5725 
5726 	if (hcon->type != ACL_LINK)
5727 		goto drop;
5728 
5729 	while (len >= L2CAP_CMD_HDR_SIZE) {
5730 		u16 cmd_len;
5731 		memcpy(&cmd, data, L2CAP_CMD_HDR_SIZE);
5732 		data += L2CAP_CMD_HDR_SIZE;
5733 		len  -= L2CAP_CMD_HDR_SIZE;
5734 
5735 		cmd_len = le16_to_cpu(cmd.len);
5736 
5737 		BT_DBG("code 0x%2.2x len %d id 0x%2.2x", cmd.code, cmd_len,
5738 		       cmd.ident);
5739 
5740 		if (cmd_len > len || !cmd.ident) {
5741 			BT_DBG("corrupted command");
5742 			break;
5743 		}
5744 
5745 		err = l2cap_bredr_sig_cmd(conn, &cmd, cmd_len, data);
5746 		if (err) {
5747 			struct l2cap_cmd_rej_unk rej;
5748 
5749 			BT_ERR("Wrong link type (%d)", err);
5750 
5751 			rej.reason = cpu_to_le16(L2CAP_REJ_NOT_UNDERSTOOD);
5752 			l2cap_send_cmd(conn, cmd.ident, L2CAP_COMMAND_REJ,
5753 				       sizeof(rej), &rej);
5754 		}
5755 
5756 		data += cmd_len;
5757 		len  -= cmd_len;
5758 	}
5759 
5760 drop:
5761 	kfree_skb(skb);
5762 }
5763 
5764 static int l2cap_check_fcs(struct l2cap_chan *chan,  struct sk_buff *skb)
5765 {
5766 	u16 our_fcs, rcv_fcs;
5767 	int hdr_size;
5768 
5769 	if (test_bit(FLAG_EXT_CTRL, &chan->flags))
5770 		hdr_size = L2CAP_EXT_HDR_SIZE;
5771 	else
5772 		hdr_size = L2CAP_ENH_HDR_SIZE;
5773 
5774 	if (chan->fcs == L2CAP_FCS_CRC16) {
5775 		skb_trim(skb, skb->len - L2CAP_FCS_SIZE);
5776 		rcv_fcs = get_unaligned_le16(skb->data + skb->len);
5777 		our_fcs = crc16(0, skb->data - hdr_size, skb->len + hdr_size);
5778 
5779 		if (our_fcs != rcv_fcs)
5780 			return -EBADMSG;
5781 	}
5782 	return 0;
5783 }
5784 
5785 static void l2cap_send_i_or_rr_or_rnr(struct l2cap_chan *chan)
5786 {
5787 	struct l2cap_ctrl control;
5788 
5789 	BT_DBG("chan %p", chan);
5790 
5791 	memset(&control, 0, sizeof(control));
5792 	control.sframe = 1;
5793 	control.final = 1;
5794 	control.reqseq = chan->buffer_seq;
5795 	set_bit(CONN_SEND_FBIT, &chan->conn_state);
5796 
5797 	if (test_bit(CONN_LOCAL_BUSY, &chan->conn_state)) {
5798 		control.super = L2CAP_SUPER_RNR;
5799 		l2cap_send_sframe(chan, &control);
5800 	}
5801 
5802 	if (test_and_clear_bit(CONN_REMOTE_BUSY, &chan->conn_state) &&
5803 	    chan->unacked_frames > 0)
5804 		__set_retrans_timer(chan);
5805 
5806 	/* Send pending iframes */
5807 	l2cap_ertm_send(chan);
5808 
5809 	if (!test_bit(CONN_LOCAL_BUSY, &chan->conn_state) &&
5810 	    test_bit(CONN_SEND_FBIT, &chan->conn_state)) {
5811 		/* F-bit wasn't sent in an s-frame or i-frame yet, so
5812 		 * send it now.
5813 		 */
5814 		control.super = L2CAP_SUPER_RR;
5815 		l2cap_send_sframe(chan, &control);
5816 	}
5817 }
5818 
5819 static void append_skb_frag(struct sk_buff *skb, struct sk_buff *new_frag,
5820 			    struct sk_buff **last_frag)
5821 {
5822 	/* skb->len reflects data in skb as well as all fragments
5823 	 * skb->data_len reflects only data in fragments
5824 	 */
5825 	if (!skb_has_frag_list(skb))
5826 		skb_shinfo(skb)->frag_list = new_frag;
5827 
5828 	new_frag->next = NULL;
5829 
5830 	(*last_frag)->next = new_frag;
5831 	*last_frag = new_frag;
5832 
5833 	skb->len += new_frag->len;
5834 	skb->data_len += new_frag->len;
5835 	skb->truesize += new_frag->truesize;
5836 }
5837 
5838 static int l2cap_reassemble_sdu(struct l2cap_chan *chan, struct sk_buff *skb,
5839 				struct l2cap_ctrl *control)
5840 {
5841 	int err = -EINVAL;
5842 
5843 	switch (control->sar) {
5844 	case L2CAP_SAR_UNSEGMENTED:
5845 		if (chan->sdu)
5846 			break;
5847 
5848 		err = chan->ops->recv(chan, skb);
5849 		break;
5850 
5851 	case L2CAP_SAR_START:
5852 		if (chan->sdu)
5853 			break;
5854 
5855 		if (!pskb_may_pull(skb, L2CAP_SDULEN_SIZE))
5856 			break;
5857 
5858 		chan->sdu_len = get_unaligned_le16(skb->data);
5859 		skb_pull(skb, L2CAP_SDULEN_SIZE);
5860 
5861 		if (chan->sdu_len > chan->imtu) {
5862 			err = -EMSGSIZE;
5863 			break;
5864 		}
5865 
5866 		if (skb->len >= chan->sdu_len)
5867 			break;
5868 
5869 		chan->sdu = skb;
5870 		chan->sdu_last_frag = skb;
5871 
5872 		skb = NULL;
5873 		err = 0;
5874 		break;
5875 
5876 	case L2CAP_SAR_CONTINUE:
5877 		if (!chan->sdu)
5878 			break;
5879 
5880 		append_skb_frag(chan->sdu, skb,
5881 				&chan->sdu_last_frag);
5882 		skb = NULL;
5883 
5884 		if (chan->sdu->len >= chan->sdu_len)
5885 			break;
5886 
5887 		err = 0;
5888 		break;
5889 
5890 	case L2CAP_SAR_END:
5891 		if (!chan->sdu)
5892 			break;
5893 
5894 		append_skb_frag(chan->sdu, skb,
5895 				&chan->sdu_last_frag);
5896 		skb = NULL;
5897 
5898 		if (chan->sdu->len != chan->sdu_len)
5899 			break;
5900 
5901 		err = chan->ops->recv(chan, chan->sdu);
5902 
5903 		if (!err) {
5904 			/* Reassembly complete */
5905 			chan->sdu = NULL;
5906 			chan->sdu_last_frag = NULL;
5907 			chan->sdu_len = 0;
5908 		}
5909 		break;
5910 	}
5911 
5912 	if (err) {
5913 		kfree_skb(skb);
5914 		kfree_skb(chan->sdu);
5915 		chan->sdu = NULL;
5916 		chan->sdu_last_frag = NULL;
5917 		chan->sdu_len = 0;
5918 	}
5919 
5920 	return err;
5921 }
5922 
5923 static int l2cap_resegment(struct l2cap_chan *chan)
5924 {
5925 	/* Placeholder */
5926 	return 0;
5927 }
5928 
5929 void l2cap_chan_busy(struct l2cap_chan *chan, int busy)
5930 {
5931 	u8 event;
5932 
5933 	if (chan->mode != L2CAP_MODE_ERTM)
5934 		return;
5935 
5936 	event = busy ? L2CAP_EV_LOCAL_BUSY_DETECTED : L2CAP_EV_LOCAL_BUSY_CLEAR;
5937 	l2cap_tx(chan, NULL, NULL, event);
5938 }
5939 
5940 static int l2cap_rx_queued_iframes(struct l2cap_chan *chan)
5941 {
5942 	int err = 0;
5943 	/* Pass sequential frames to l2cap_reassemble_sdu()
5944 	 * until a gap is encountered.
5945 	 */
5946 
5947 	BT_DBG("chan %p", chan);
5948 
5949 	while (!test_bit(CONN_LOCAL_BUSY, &chan->conn_state)) {
5950 		struct sk_buff *skb;
5951 		BT_DBG("Searching for skb with txseq %d (queue len %d)",
5952 		       chan->buffer_seq, skb_queue_len(&chan->srej_q));
5953 
5954 		skb = l2cap_ertm_seq_in_queue(&chan->srej_q, chan->buffer_seq);
5955 
5956 		if (!skb)
5957 			break;
5958 
5959 		skb_unlink(skb, &chan->srej_q);
5960 		chan->buffer_seq = __next_seq(chan, chan->buffer_seq);
5961 		err = l2cap_reassemble_sdu(chan, skb, &bt_cb(skb)->l2cap);
5962 		if (err)
5963 			break;
5964 	}
5965 
5966 	if (skb_queue_empty(&chan->srej_q)) {
5967 		chan->rx_state = L2CAP_RX_STATE_RECV;
5968 		l2cap_send_ack(chan);
5969 	}
5970 
5971 	return err;
5972 }
5973 
5974 static void l2cap_handle_srej(struct l2cap_chan *chan,
5975 			      struct l2cap_ctrl *control)
5976 {
5977 	struct sk_buff *skb;
5978 
5979 	BT_DBG("chan %p, control %p", chan, control);
5980 
5981 	if (control->reqseq == chan->next_tx_seq) {
5982 		BT_DBG("Invalid reqseq %d, disconnecting", control->reqseq);
5983 		l2cap_send_disconn_req(chan, ECONNRESET);
5984 		return;
5985 	}
5986 
5987 	skb = l2cap_ertm_seq_in_queue(&chan->tx_q, control->reqseq);
5988 
5989 	if (skb == NULL) {
5990 		BT_DBG("Seq %d not available for retransmission",
5991 		       control->reqseq);
5992 		return;
5993 	}
5994 
5995 	if (chan->max_tx != 0 && bt_cb(skb)->l2cap.retries >= chan->max_tx) {
5996 		BT_DBG("Retry limit exceeded (%d)", chan->max_tx);
5997 		l2cap_send_disconn_req(chan, ECONNRESET);
5998 		return;
5999 	}
6000 
6001 	clear_bit(CONN_REMOTE_BUSY, &chan->conn_state);
6002 
6003 	if (control->poll) {
6004 		l2cap_pass_to_tx(chan, control);
6005 
6006 		set_bit(CONN_SEND_FBIT, &chan->conn_state);
6007 		l2cap_retransmit(chan, control);
6008 		l2cap_ertm_send(chan);
6009 
6010 		if (chan->tx_state == L2CAP_TX_STATE_WAIT_F) {
6011 			set_bit(CONN_SREJ_ACT, &chan->conn_state);
6012 			chan->srej_save_reqseq = control->reqseq;
6013 		}
6014 	} else {
6015 		l2cap_pass_to_tx_fbit(chan, control);
6016 
6017 		if (control->final) {
6018 			if (chan->srej_save_reqseq != control->reqseq ||
6019 			    !test_and_clear_bit(CONN_SREJ_ACT,
6020 						&chan->conn_state))
6021 				l2cap_retransmit(chan, control);
6022 		} else {
6023 			l2cap_retransmit(chan, control);
6024 			if (chan->tx_state == L2CAP_TX_STATE_WAIT_F) {
6025 				set_bit(CONN_SREJ_ACT, &chan->conn_state);
6026 				chan->srej_save_reqseq = control->reqseq;
6027 			}
6028 		}
6029 	}
6030 }
6031 
6032 static void l2cap_handle_rej(struct l2cap_chan *chan,
6033 			     struct l2cap_ctrl *control)
6034 {
6035 	struct sk_buff *skb;
6036 
6037 	BT_DBG("chan %p, control %p", chan, control);
6038 
6039 	if (control->reqseq == chan->next_tx_seq) {
6040 		BT_DBG("Invalid reqseq %d, disconnecting", control->reqseq);
6041 		l2cap_send_disconn_req(chan, ECONNRESET);
6042 		return;
6043 	}
6044 
6045 	skb = l2cap_ertm_seq_in_queue(&chan->tx_q, control->reqseq);
6046 
6047 	if (chan->max_tx && skb &&
6048 	    bt_cb(skb)->l2cap.retries >= chan->max_tx) {
6049 		BT_DBG("Retry limit exceeded (%d)", chan->max_tx);
6050 		l2cap_send_disconn_req(chan, ECONNRESET);
6051 		return;
6052 	}
6053 
6054 	clear_bit(CONN_REMOTE_BUSY, &chan->conn_state);
6055 
6056 	l2cap_pass_to_tx(chan, control);
6057 
6058 	if (control->final) {
6059 		if (!test_and_clear_bit(CONN_REJ_ACT, &chan->conn_state))
6060 			l2cap_retransmit_all(chan, control);
6061 	} else {
6062 		l2cap_retransmit_all(chan, control);
6063 		l2cap_ertm_send(chan);
6064 		if (chan->tx_state == L2CAP_TX_STATE_WAIT_F)
6065 			set_bit(CONN_REJ_ACT, &chan->conn_state);
6066 	}
6067 }
6068 
6069 static u8 l2cap_classify_txseq(struct l2cap_chan *chan, u16 txseq)
6070 {
6071 	BT_DBG("chan %p, txseq %d", chan, txseq);
6072 
6073 	BT_DBG("last_acked_seq %d, expected_tx_seq %d", chan->last_acked_seq,
6074 	       chan->expected_tx_seq);
6075 
6076 	if (chan->rx_state == L2CAP_RX_STATE_SREJ_SENT) {
6077 		if (__seq_offset(chan, txseq, chan->last_acked_seq) >=
6078 		    chan->tx_win) {
6079 			/* See notes below regarding "double poll" and
6080 			 * invalid packets.
6081 			 */
6082 			if (chan->tx_win <= ((chan->tx_win_max + 1) >> 1)) {
6083 				BT_DBG("Invalid/Ignore - after SREJ");
6084 				return L2CAP_TXSEQ_INVALID_IGNORE;
6085 			} else {
6086 				BT_DBG("Invalid - in window after SREJ sent");
6087 				return L2CAP_TXSEQ_INVALID;
6088 			}
6089 		}
6090 
6091 		if (chan->srej_list.head == txseq) {
6092 			BT_DBG("Expected SREJ");
6093 			return L2CAP_TXSEQ_EXPECTED_SREJ;
6094 		}
6095 
6096 		if (l2cap_ertm_seq_in_queue(&chan->srej_q, txseq)) {
6097 			BT_DBG("Duplicate SREJ - txseq already stored");
6098 			return L2CAP_TXSEQ_DUPLICATE_SREJ;
6099 		}
6100 
6101 		if (l2cap_seq_list_contains(&chan->srej_list, txseq)) {
6102 			BT_DBG("Unexpected SREJ - not requested");
6103 			return L2CAP_TXSEQ_UNEXPECTED_SREJ;
6104 		}
6105 	}
6106 
6107 	if (chan->expected_tx_seq == txseq) {
6108 		if (__seq_offset(chan, txseq, chan->last_acked_seq) >=
6109 		    chan->tx_win) {
6110 			BT_DBG("Invalid - txseq outside tx window");
6111 			return L2CAP_TXSEQ_INVALID;
6112 		} else {
6113 			BT_DBG("Expected");
6114 			return L2CAP_TXSEQ_EXPECTED;
6115 		}
6116 	}
6117 
6118 	if (__seq_offset(chan, txseq, chan->last_acked_seq) <
6119 	    __seq_offset(chan, chan->expected_tx_seq, chan->last_acked_seq)) {
6120 		BT_DBG("Duplicate - expected_tx_seq later than txseq");
6121 		return L2CAP_TXSEQ_DUPLICATE;
6122 	}
6123 
6124 	if (__seq_offset(chan, txseq, chan->last_acked_seq) >= chan->tx_win) {
6125 		/* A source of invalid packets is a "double poll" condition,
6126 		 * where delays cause us to send multiple poll packets.  If
6127 		 * the remote stack receives and processes both polls,
6128 		 * sequence numbers can wrap around in such a way that a
6129 		 * resent frame has a sequence number that looks like new data
6130 		 * with a sequence gap.  This would trigger an erroneous SREJ
6131 		 * request.
6132 		 *
6133 		 * Fortunately, this is impossible with a tx window that's
6134 		 * less than half of the maximum sequence number, which allows
6135 		 * invalid frames to be safely ignored.
6136 		 *
6137 		 * With tx window sizes greater than half of the tx window
6138 		 * maximum, the frame is invalid and cannot be ignored.  This
6139 		 * causes a disconnect.
6140 		 */
6141 
6142 		if (chan->tx_win <= ((chan->tx_win_max + 1) >> 1)) {
6143 			BT_DBG("Invalid/Ignore - txseq outside tx window");
6144 			return L2CAP_TXSEQ_INVALID_IGNORE;
6145 		} else {
6146 			BT_DBG("Invalid - txseq outside tx window");
6147 			return L2CAP_TXSEQ_INVALID;
6148 		}
6149 	} else {
6150 		BT_DBG("Unexpected - txseq indicates missing frames");
6151 		return L2CAP_TXSEQ_UNEXPECTED;
6152 	}
6153 }
6154 
6155 static int l2cap_rx_state_recv(struct l2cap_chan *chan,
6156 			       struct l2cap_ctrl *control,
6157 			       struct sk_buff *skb, u8 event)
6158 {
6159 	int err = 0;
6160 	bool skb_in_use = false;
6161 
6162 	BT_DBG("chan %p, control %p, skb %p, event %d", chan, control, skb,
6163 	       event);
6164 
6165 	switch (event) {
6166 	case L2CAP_EV_RECV_IFRAME:
6167 		switch (l2cap_classify_txseq(chan, control->txseq)) {
6168 		case L2CAP_TXSEQ_EXPECTED:
6169 			l2cap_pass_to_tx(chan, control);
6170 
6171 			if (test_bit(CONN_LOCAL_BUSY, &chan->conn_state)) {
6172 				BT_DBG("Busy, discarding expected seq %d",
6173 				       control->txseq);
6174 				break;
6175 			}
6176 
6177 			chan->expected_tx_seq = __next_seq(chan,
6178 							   control->txseq);
6179 
6180 			chan->buffer_seq = chan->expected_tx_seq;
6181 			skb_in_use = true;
6182 
6183 			err = l2cap_reassemble_sdu(chan, skb, control);
6184 			if (err)
6185 				break;
6186 
6187 			if (control->final) {
6188 				if (!test_and_clear_bit(CONN_REJ_ACT,
6189 							&chan->conn_state)) {
6190 					control->final = 0;
6191 					l2cap_retransmit_all(chan, control);
6192 					l2cap_ertm_send(chan);
6193 				}
6194 			}
6195 
6196 			if (!test_bit(CONN_LOCAL_BUSY, &chan->conn_state))
6197 				l2cap_send_ack(chan);
6198 			break;
6199 		case L2CAP_TXSEQ_UNEXPECTED:
6200 			l2cap_pass_to_tx(chan, control);
6201 
6202 			/* Can't issue SREJ frames in the local busy state.
6203 			 * Drop this frame, it will be seen as missing
6204 			 * when local busy is exited.
6205 			 */
6206 			if (test_bit(CONN_LOCAL_BUSY, &chan->conn_state)) {
6207 				BT_DBG("Busy, discarding unexpected seq %d",
6208 				       control->txseq);
6209 				break;
6210 			}
6211 
6212 			/* There was a gap in the sequence, so an SREJ
6213 			 * must be sent for each missing frame.  The
6214 			 * current frame is stored for later use.
6215 			 */
6216 			skb_queue_tail(&chan->srej_q, skb);
6217 			skb_in_use = true;
6218 			BT_DBG("Queued %p (queue len %d)", skb,
6219 			       skb_queue_len(&chan->srej_q));
6220 
6221 			clear_bit(CONN_SREJ_ACT, &chan->conn_state);
6222 			l2cap_seq_list_clear(&chan->srej_list);
6223 			l2cap_send_srej(chan, control->txseq);
6224 
6225 			chan->rx_state = L2CAP_RX_STATE_SREJ_SENT;
6226 			break;
6227 		case L2CAP_TXSEQ_DUPLICATE:
6228 			l2cap_pass_to_tx(chan, control);
6229 			break;
6230 		case L2CAP_TXSEQ_INVALID_IGNORE:
6231 			break;
6232 		case L2CAP_TXSEQ_INVALID:
6233 		default:
6234 			l2cap_send_disconn_req(chan, ECONNRESET);
6235 			break;
6236 		}
6237 		break;
6238 	case L2CAP_EV_RECV_RR:
6239 		l2cap_pass_to_tx(chan, control);
6240 		if (control->final) {
6241 			clear_bit(CONN_REMOTE_BUSY, &chan->conn_state);
6242 
6243 			if (!test_and_clear_bit(CONN_REJ_ACT, &chan->conn_state) &&
6244 			    !__chan_is_moving(chan)) {
6245 				control->final = 0;
6246 				l2cap_retransmit_all(chan, control);
6247 			}
6248 
6249 			l2cap_ertm_send(chan);
6250 		} else if (control->poll) {
6251 			l2cap_send_i_or_rr_or_rnr(chan);
6252 		} else {
6253 			if (test_and_clear_bit(CONN_REMOTE_BUSY,
6254 					       &chan->conn_state) &&
6255 			    chan->unacked_frames)
6256 				__set_retrans_timer(chan);
6257 
6258 			l2cap_ertm_send(chan);
6259 		}
6260 		break;
6261 	case L2CAP_EV_RECV_RNR:
6262 		set_bit(CONN_REMOTE_BUSY, &chan->conn_state);
6263 		l2cap_pass_to_tx(chan, control);
6264 		if (control && control->poll) {
6265 			set_bit(CONN_SEND_FBIT, &chan->conn_state);
6266 			l2cap_send_rr_or_rnr(chan, 0);
6267 		}
6268 		__clear_retrans_timer(chan);
6269 		l2cap_seq_list_clear(&chan->retrans_list);
6270 		break;
6271 	case L2CAP_EV_RECV_REJ:
6272 		l2cap_handle_rej(chan, control);
6273 		break;
6274 	case L2CAP_EV_RECV_SREJ:
6275 		l2cap_handle_srej(chan, control);
6276 		break;
6277 	default:
6278 		break;
6279 	}
6280 
6281 	if (skb && !skb_in_use) {
6282 		BT_DBG("Freeing %p", skb);
6283 		kfree_skb(skb);
6284 	}
6285 
6286 	return err;
6287 }
6288 
6289 static int l2cap_rx_state_srej_sent(struct l2cap_chan *chan,
6290 				    struct l2cap_ctrl *control,
6291 				    struct sk_buff *skb, u8 event)
6292 {
6293 	int err = 0;
6294 	u16 txseq = control->txseq;
6295 	bool skb_in_use = false;
6296 
6297 	BT_DBG("chan %p, control %p, skb %p, event %d", chan, control, skb,
6298 	       event);
6299 
6300 	switch (event) {
6301 	case L2CAP_EV_RECV_IFRAME:
6302 		switch (l2cap_classify_txseq(chan, txseq)) {
6303 		case L2CAP_TXSEQ_EXPECTED:
6304 			/* Keep frame for reassembly later */
6305 			l2cap_pass_to_tx(chan, control);
6306 			skb_queue_tail(&chan->srej_q, skb);
6307 			skb_in_use = true;
6308 			BT_DBG("Queued %p (queue len %d)", skb,
6309 			       skb_queue_len(&chan->srej_q));
6310 
6311 			chan->expected_tx_seq = __next_seq(chan, txseq);
6312 			break;
6313 		case L2CAP_TXSEQ_EXPECTED_SREJ:
6314 			l2cap_seq_list_pop(&chan->srej_list);
6315 
6316 			l2cap_pass_to_tx(chan, control);
6317 			skb_queue_tail(&chan->srej_q, skb);
6318 			skb_in_use = true;
6319 			BT_DBG("Queued %p (queue len %d)", skb,
6320 			       skb_queue_len(&chan->srej_q));
6321 
6322 			err = l2cap_rx_queued_iframes(chan);
6323 			if (err)
6324 				break;
6325 
6326 			break;
6327 		case L2CAP_TXSEQ_UNEXPECTED:
6328 			/* Got a frame that can't be reassembled yet.
6329 			 * Save it for later, and send SREJs to cover
6330 			 * the missing frames.
6331 			 */
6332 			skb_queue_tail(&chan->srej_q, skb);
6333 			skb_in_use = true;
6334 			BT_DBG("Queued %p (queue len %d)", skb,
6335 			       skb_queue_len(&chan->srej_q));
6336 
6337 			l2cap_pass_to_tx(chan, control);
6338 			l2cap_send_srej(chan, control->txseq);
6339 			break;
6340 		case L2CAP_TXSEQ_UNEXPECTED_SREJ:
6341 			/* This frame was requested with an SREJ, but
6342 			 * some expected retransmitted frames are
6343 			 * missing.  Request retransmission of missing
6344 			 * SREJ'd frames.
6345 			 */
6346 			skb_queue_tail(&chan->srej_q, skb);
6347 			skb_in_use = true;
6348 			BT_DBG("Queued %p (queue len %d)", skb,
6349 			       skb_queue_len(&chan->srej_q));
6350 
6351 			l2cap_pass_to_tx(chan, control);
6352 			l2cap_send_srej_list(chan, control->txseq);
6353 			break;
6354 		case L2CAP_TXSEQ_DUPLICATE_SREJ:
6355 			/* We've already queued this frame.  Drop this copy. */
6356 			l2cap_pass_to_tx(chan, control);
6357 			break;
6358 		case L2CAP_TXSEQ_DUPLICATE:
6359 			/* Expecting a later sequence number, so this frame
6360 			 * was already received.  Ignore it completely.
6361 			 */
6362 			break;
6363 		case L2CAP_TXSEQ_INVALID_IGNORE:
6364 			break;
6365 		case L2CAP_TXSEQ_INVALID:
6366 		default:
6367 			l2cap_send_disconn_req(chan, ECONNRESET);
6368 			break;
6369 		}
6370 		break;
6371 	case L2CAP_EV_RECV_RR:
6372 		l2cap_pass_to_tx(chan, control);
6373 		if (control->final) {
6374 			clear_bit(CONN_REMOTE_BUSY, &chan->conn_state);
6375 
6376 			if (!test_and_clear_bit(CONN_REJ_ACT,
6377 						&chan->conn_state)) {
6378 				control->final = 0;
6379 				l2cap_retransmit_all(chan, control);
6380 			}
6381 
6382 			l2cap_ertm_send(chan);
6383 		} else if (control->poll) {
6384 			if (test_and_clear_bit(CONN_REMOTE_BUSY,
6385 					       &chan->conn_state) &&
6386 			    chan->unacked_frames) {
6387 				__set_retrans_timer(chan);
6388 			}
6389 
6390 			set_bit(CONN_SEND_FBIT, &chan->conn_state);
6391 			l2cap_send_srej_tail(chan);
6392 		} else {
6393 			if (test_and_clear_bit(CONN_REMOTE_BUSY,
6394 					       &chan->conn_state) &&
6395 			    chan->unacked_frames)
6396 				__set_retrans_timer(chan);
6397 
6398 			l2cap_send_ack(chan);
6399 		}
6400 		break;
6401 	case L2CAP_EV_RECV_RNR:
6402 		set_bit(CONN_REMOTE_BUSY, &chan->conn_state);
6403 		l2cap_pass_to_tx(chan, control);
6404 		if (control->poll) {
6405 			l2cap_send_srej_tail(chan);
6406 		} else {
6407 			struct l2cap_ctrl rr_control;
6408 			memset(&rr_control, 0, sizeof(rr_control));
6409 			rr_control.sframe = 1;
6410 			rr_control.super = L2CAP_SUPER_RR;
6411 			rr_control.reqseq = chan->buffer_seq;
6412 			l2cap_send_sframe(chan, &rr_control);
6413 		}
6414 
6415 		break;
6416 	case L2CAP_EV_RECV_REJ:
6417 		l2cap_handle_rej(chan, control);
6418 		break;
6419 	case L2CAP_EV_RECV_SREJ:
6420 		l2cap_handle_srej(chan, control);
6421 		break;
6422 	}
6423 
6424 	if (skb && !skb_in_use) {
6425 		BT_DBG("Freeing %p", skb);
6426 		kfree_skb(skb);
6427 	}
6428 
6429 	return err;
6430 }
6431 
6432 static int l2cap_finish_move(struct l2cap_chan *chan)
6433 {
6434 	BT_DBG("chan %p", chan);
6435 
6436 	chan->rx_state = L2CAP_RX_STATE_RECV;
6437 
6438 	if (chan->hs_hcon)
6439 		chan->conn->mtu = chan->hs_hcon->hdev->block_mtu;
6440 	else
6441 		chan->conn->mtu = chan->conn->hcon->hdev->acl_mtu;
6442 
6443 	return l2cap_resegment(chan);
6444 }
6445 
6446 static int l2cap_rx_state_wait_p(struct l2cap_chan *chan,
6447 				 struct l2cap_ctrl *control,
6448 				 struct sk_buff *skb, u8 event)
6449 {
6450 	int err;
6451 
6452 	BT_DBG("chan %p, control %p, skb %p, event %d", chan, control, skb,
6453 	       event);
6454 
6455 	if (!control->poll)
6456 		return -EPROTO;
6457 
6458 	l2cap_process_reqseq(chan, control->reqseq);
6459 
6460 	if (!skb_queue_empty(&chan->tx_q))
6461 		chan->tx_send_head = skb_peek(&chan->tx_q);
6462 	else
6463 		chan->tx_send_head = NULL;
6464 
6465 	/* Rewind next_tx_seq to the point expected
6466 	 * by the receiver.
6467 	 */
6468 	chan->next_tx_seq = control->reqseq;
6469 	chan->unacked_frames = 0;
6470 
6471 	err = l2cap_finish_move(chan);
6472 	if (err)
6473 		return err;
6474 
6475 	set_bit(CONN_SEND_FBIT, &chan->conn_state);
6476 	l2cap_send_i_or_rr_or_rnr(chan);
6477 
6478 	if (event == L2CAP_EV_RECV_IFRAME)
6479 		return -EPROTO;
6480 
6481 	return l2cap_rx_state_recv(chan, control, NULL, event);
6482 }
6483 
6484 static int l2cap_rx_state_wait_f(struct l2cap_chan *chan,
6485 				 struct l2cap_ctrl *control,
6486 				 struct sk_buff *skb, u8 event)
6487 {
6488 	int err;
6489 
6490 	if (!control->final)
6491 		return -EPROTO;
6492 
6493 	clear_bit(CONN_REMOTE_BUSY, &chan->conn_state);
6494 
6495 	chan->rx_state = L2CAP_RX_STATE_RECV;
6496 	l2cap_process_reqseq(chan, control->reqseq);
6497 
6498 	if (!skb_queue_empty(&chan->tx_q))
6499 		chan->tx_send_head = skb_peek(&chan->tx_q);
6500 	else
6501 		chan->tx_send_head = NULL;
6502 
6503 	/* Rewind next_tx_seq to the point expected
6504 	 * by the receiver.
6505 	 */
6506 	chan->next_tx_seq = control->reqseq;
6507 	chan->unacked_frames = 0;
6508 
6509 	if (chan->hs_hcon)
6510 		chan->conn->mtu = chan->hs_hcon->hdev->block_mtu;
6511 	else
6512 		chan->conn->mtu = chan->conn->hcon->hdev->acl_mtu;
6513 
6514 	err = l2cap_resegment(chan);
6515 
6516 	if (!err)
6517 		err = l2cap_rx_state_recv(chan, control, skb, event);
6518 
6519 	return err;
6520 }
6521 
6522 static bool __valid_reqseq(struct l2cap_chan *chan, u16 reqseq)
6523 {
6524 	/* Make sure reqseq is for a packet that has been sent but not acked */
6525 	u16 unacked;
6526 
6527 	unacked = __seq_offset(chan, chan->next_tx_seq, chan->expected_ack_seq);
6528 	return __seq_offset(chan, chan->next_tx_seq, reqseq) <= unacked;
6529 }
6530 
6531 static int l2cap_rx(struct l2cap_chan *chan, struct l2cap_ctrl *control,
6532 		    struct sk_buff *skb, u8 event)
6533 {
6534 	int err = 0;
6535 
6536 	BT_DBG("chan %p, control %p, skb %p, event %d, state %d", chan,
6537 	       control, skb, event, chan->rx_state);
6538 
6539 	if (__valid_reqseq(chan, control->reqseq)) {
6540 		switch (chan->rx_state) {
6541 		case L2CAP_RX_STATE_RECV:
6542 			err = l2cap_rx_state_recv(chan, control, skb, event);
6543 			break;
6544 		case L2CAP_RX_STATE_SREJ_SENT:
6545 			err = l2cap_rx_state_srej_sent(chan, control, skb,
6546 						       event);
6547 			break;
6548 		case L2CAP_RX_STATE_WAIT_P:
6549 			err = l2cap_rx_state_wait_p(chan, control, skb, event);
6550 			break;
6551 		case L2CAP_RX_STATE_WAIT_F:
6552 			err = l2cap_rx_state_wait_f(chan, control, skb, event);
6553 			break;
6554 		default:
6555 			/* shut it down */
6556 			break;
6557 		}
6558 	} else {
6559 		BT_DBG("Invalid reqseq %d (next_tx_seq %d, expected_ack_seq %d",
6560 		       control->reqseq, chan->next_tx_seq,
6561 		       chan->expected_ack_seq);
6562 		l2cap_send_disconn_req(chan, ECONNRESET);
6563 	}
6564 
6565 	return err;
6566 }
6567 
6568 static int l2cap_stream_rx(struct l2cap_chan *chan, struct l2cap_ctrl *control,
6569 			   struct sk_buff *skb)
6570 {
6571 	BT_DBG("chan %p, control %p, skb %p, state %d", chan, control, skb,
6572 	       chan->rx_state);
6573 
6574 	if (l2cap_classify_txseq(chan, control->txseq) ==
6575 	    L2CAP_TXSEQ_EXPECTED) {
6576 		l2cap_pass_to_tx(chan, control);
6577 
6578 		BT_DBG("buffer_seq %d->%d", chan->buffer_seq,
6579 		       __next_seq(chan, chan->buffer_seq));
6580 
6581 		chan->buffer_seq = __next_seq(chan, chan->buffer_seq);
6582 
6583 		l2cap_reassemble_sdu(chan, skb, control);
6584 	} else {
6585 		if (chan->sdu) {
6586 			kfree_skb(chan->sdu);
6587 			chan->sdu = NULL;
6588 		}
6589 		chan->sdu_last_frag = NULL;
6590 		chan->sdu_len = 0;
6591 
6592 		if (skb) {
6593 			BT_DBG("Freeing %p", skb);
6594 			kfree_skb(skb);
6595 		}
6596 	}
6597 
6598 	chan->last_acked_seq = control->txseq;
6599 	chan->expected_tx_seq = __next_seq(chan, control->txseq);
6600 
6601 	return 0;
6602 }
6603 
6604 static int l2cap_data_rcv(struct l2cap_chan *chan, struct sk_buff *skb)
6605 {
6606 	struct l2cap_ctrl *control = &bt_cb(skb)->l2cap;
6607 	u16 len;
6608 	u8 event;
6609 
6610 	__unpack_control(chan, skb);
6611 
6612 	len = skb->len;
6613 
6614 	/*
6615 	 * We can just drop the corrupted I-frame here.
6616 	 * Receiver will miss it and start proper recovery
6617 	 * procedures and ask for retransmission.
6618 	 */
6619 	if (l2cap_check_fcs(chan, skb))
6620 		goto drop;
6621 
6622 	if (!control->sframe && control->sar == L2CAP_SAR_START)
6623 		len -= L2CAP_SDULEN_SIZE;
6624 
6625 	if (chan->fcs == L2CAP_FCS_CRC16)
6626 		len -= L2CAP_FCS_SIZE;
6627 
6628 	if (len > chan->mps) {
6629 		l2cap_send_disconn_req(chan, ECONNRESET);
6630 		goto drop;
6631 	}
6632 
6633 	if ((chan->mode == L2CAP_MODE_ERTM ||
6634 	     chan->mode == L2CAP_MODE_STREAMING) && sk_filter(chan->data, skb))
6635 		goto drop;
6636 
6637 	if (!control->sframe) {
6638 		int err;
6639 
6640 		BT_DBG("iframe sar %d, reqseq %d, final %d, txseq %d",
6641 		       control->sar, control->reqseq, control->final,
6642 		       control->txseq);
6643 
6644 		/* Validate F-bit - F=0 always valid, F=1 only
6645 		 * valid in TX WAIT_F
6646 		 */
6647 		if (control->final && chan->tx_state != L2CAP_TX_STATE_WAIT_F)
6648 			goto drop;
6649 
6650 		if (chan->mode != L2CAP_MODE_STREAMING) {
6651 			event = L2CAP_EV_RECV_IFRAME;
6652 			err = l2cap_rx(chan, control, skb, event);
6653 		} else {
6654 			err = l2cap_stream_rx(chan, control, skb);
6655 		}
6656 
6657 		if (err)
6658 			l2cap_send_disconn_req(chan, ECONNRESET);
6659 	} else {
6660 		const u8 rx_func_to_event[4] = {
6661 			L2CAP_EV_RECV_RR, L2CAP_EV_RECV_REJ,
6662 			L2CAP_EV_RECV_RNR, L2CAP_EV_RECV_SREJ
6663 		};
6664 
6665 		/* Only I-frames are expected in streaming mode */
6666 		if (chan->mode == L2CAP_MODE_STREAMING)
6667 			goto drop;
6668 
6669 		BT_DBG("sframe reqseq %d, final %d, poll %d, super %d",
6670 		       control->reqseq, control->final, control->poll,
6671 		       control->super);
6672 
6673 		if (len != 0) {
6674 			BT_ERR("Trailing bytes: %d in sframe", len);
6675 			l2cap_send_disconn_req(chan, ECONNRESET);
6676 			goto drop;
6677 		}
6678 
6679 		/* Validate F and P bits */
6680 		if (control->final && (control->poll ||
6681 				       chan->tx_state != L2CAP_TX_STATE_WAIT_F))
6682 			goto drop;
6683 
6684 		event = rx_func_to_event[control->super];
6685 		if (l2cap_rx(chan, control, skb, event))
6686 			l2cap_send_disconn_req(chan, ECONNRESET);
6687 	}
6688 
6689 	return 0;
6690 
6691 drop:
6692 	kfree_skb(skb);
6693 	return 0;
6694 }
6695 
6696 static void l2cap_chan_le_send_credits(struct l2cap_chan *chan)
6697 {
6698 	struct l2cap_conn *conn = chan->conn;
6699 	struct l2cap_le_credits pkt;
6700 	u16 return_credits;
6701 
6702 	/* We return more credits to the sender only after the amount of
6703 	 * credits falls below half of the initial amount.
6704 	 */
6705 	if (chan->rx_credits >= (le_max_credits + 1) / 2)
6706 		return;
6707 
6708 	return_credits = le_max_credits - chan->rx_credits;
6709 
6710 	BT_DBG("chan %p returning %u credits to sender", chan, return_credits);
6711 
6712 	chan->rx_credits += return_credits;
6713 
6714 	pkt.cid     = cpu_to_le16(chan->scid);
6715 	pkt.credits = cpu_to_le16(return_credits);
6716 
6717 	chan->ident = l2cap_get_ident(conn);
6718 
6719 	l2cap_send_cmd(conn, chan->ident, L2CAP_LE_CREDITS, sizeof(pkt), &pkt);
6720 }
6721 
6722 static int l2cap_le_data_rcv(struct l2cap_chan *chan, struct sk_buff *skb)
6723 {
6724 	int err;
6725 
6726 	if (!chan->rx_credits) {
6727 		BT_ERR("No credits to receive LE L2CAP data");
6728 		l2cap_send_disconn_req(chan, ECONNRESET);
6729 		return -ENOBUFS;
6730 	}
6731 
6732 	if (chan->imtu < skb->len) {
6733 		BT_ERR("Too big LE L2CAP PDU");
6734 		return -ENOBUFS;
6735 	}
6736 
6737 	chan->rx_credits--;
6738 	BT_DBG("rx_credits %u -> %u", chan->rx_credits + 1, chan->rx_credits);
6739 
6740 	l2cap_chan_le_send_credits(chan);
6741 
6742 	err = 0;
6743 
6744 	if (!chan->sdu) {
6745 		u16 sdu_len;
6746 
6747 		sdu_len = get_unaligned_le16(skb->data);
6748 		skb_pull(skb, L2CAP_SDULEN_SIZE);
6749 
6750 		BT_DBG("Start of new SDU. sdu_len %u skb->len %u imtu %u",
6751 		       sdu_len, skb->len, chan->imtu);
6752 
6753 		if (sdu_len > chan->imtu) {
6754 			BT_ERR("Too big LE L2CAP SDU length received");
6755 			err = -EMSGSIZE;
6756 			goto failed;
6757 		}
6758 
6759 		if (skb->len > sdu_len) {
6760 			BT_ERR("Too much LE L2CAP data received");
6761 			err = -EINVAL;
6762 			goto failed;
6763 		}
6764 
6765 		if (skb->len == sdu_len)
6766 			return chan->ops->recv(chan, skb);
6767 
6768 		chan->sdu = skb;
6769 		chan->sdu_len = sdu_len;
6770 		chan->sdu_last_frag = skb;
6771 
6772 		return 0;
6773 	}
6774 
6775 	BT_DBG("SDU fragment. chan->sdu->len %u skb->len %u chan->sdu_len %u",
6776 	       chan->sdu->len, skb->len, chan->sdu_len);
6777 
6778 	if (chan->sdu->len + skb->len > chan->sdu_len) {
6779 		BT_ERR("Too much LE L2CAP data received");
6780 		err = -EINVAL;
6781 		goto failed;
6782 	}
6783 
6784 	append_skb_frag(chan->sdu, skb, &chan->sdu_last_frag);
6785 	skb = NULL;
6786 
6787 	if (chan->sdu->len == chan->sdu_len) {
6788 		err = chan->ops->recv(chan, chan->sdu);
6789 		if (!err) {
6790 			chan->sdu = NULL;
6791 			chan->sdu_last_frag = NULL;
6792 			chan->sdu_len = 0;
6793 		}
6794 	}
6795 
6796 failed:
6797 	if (err) {
6798 		kfree_skb(skb);
6799 		kfree_skb(chan->sdu);
6800 		chan->sdu = NULL;
6801 		chan->sdu_last_frag = NULL;
6802 		chan->sdu_len = 0;
6803 	}
6804 
6805 	/* We can't return an error here since we took care of the skb
6806 	 * freeing internally. An error return would cause the caller to
6807 	 * do a double-free of the skb.
6808 	 */
6809 	return 0;
6810 }
6811 
6812 static void l2cap_data_channel(struct l2cap_conn *conn, u16 cid,
6813 			       struct sk_buff *skb)
6814 {
6815 	struct l2cap_chan *chan;
6816 
6817 	chan = l2cap_get_chan_by_scid(conn, cid);
6818 	if (!chan) {
6819 		if (cid == L2CAP_CID_A2MP) {
6820 			chan = a2mp_channel_create(conn, skb);
6821 			if (!chan) {
6822 				kfree_skb(skb);
6823 				return;
6824 			}
6825 
6826 			l2cap_chan_lock(chan);
6827 		} else {
6828 			BT_DBG("unknown cid 0x%4.4x", cid);
6829 			/* Drop packet and return */
6830 			kfree_skb(skb);
6831 			return;
6832 		}
6833 	}
6834 
6835 	BT_DBG("chan %p, len %d", chan, skb->len);
6836 
6837 	/* If we receive data on a fixed channel before the info req/rsp
6838 	 * procdure is done simply assume that the channel is supported
6839 	 * and mark it as ready.
6840 	 */
6841 	if (chan->chan_type == L2CAP_CHAN_FIXED)
6842 		l2cap_chan_ready(chan);
6843 
6844 	if (chan->state != BT_CONNECTED)
6845 		goto drop;
6846 
6847 	switch (chan->mode) {
6848 	case L2CAP_MODE_LE_FLOWCTL:
6849 		if (l2cap_le_data_rcv(chan, skb) < 0)
6850 			goto drop;
6851 
6852 		goto done;
6853 
6854 	case L2CAP_MODE_BASIC:
6855 		/* If socket recv buffers overflows we drop data here
6856 		 * which is *bad* because L2CAP has to be reliable.
6857 		 * But we don't have any other choice. L2CAP doesn't
6858 		 * provide flow control mechanism. */
6859 
6860 		if (chan->imtu < skb->len) {
6861 			BT_ERR("Dropping L2CAP data: receive buffer overflow");
6862 			goto drop;
6863 		}
6864 
6865 		if (!chan->ops->recv(chan, skb))
6866 			goto done;
6867 		break;
6868 
6869 	case L2CAP_MODE_ERTM:
6870 	case L2CAP_MODE_STREAMING:
6871 		l2cap_data_rcv(chan, skb);
6872 		goto done;
6873 
6874 	default:
6875 		BT_DBG("chan %p: bad mode 0x%2.2x", chan, chan->mode);
6876 		break;
6877 	}
6878 
6879 drop:
6880 	kfree_skb(skb);
6881 
6882 done:
6883 	l2cap_chan_unlock(chan);
6884 }
6885 
6886 static void l2cap_conless_channel(struct l2cap_conn *conn, __le16 psm,
6887 				  struct sk_buff *skb)
6888 {
6889 	struct hci_conn *hcon = conn->hcon;
6890 	struct l2cap_chan *chan;
6891 
6892 	if (hcon->type != ACL_LINK)
6893 		goto free_skb;
6894 
6895 	chan = l2cap_global_chan_by_psm(0, psm, &hcon->src, &hcon->dst,
6896 					ACL_LINK);
6897 	if (!chan)
6898 		goto free_skb;
6899 
6900 	BT_DBG("chan %p, len %d", chan, skb->len);
6901 
6902 	if (chan->state != BT_BOUND && chan->state != BT_CONNECTED)
6903 		goto drop;
6904 
6905 	if (chan->imtu < skb->len)
6906 		goto drop;
6907 
6908 	/* Store remote BD_ADDR and PSM for msg_name */
6909 	bacpy(&bt_cb(skb)->l2cap.bdaddr, &hcon->dst);
6910 	bt_cb(skb)->l2cap.psm = psm;
6911 
6912 	if (!chan->ops->recv(chan, skb)) {
6913 		l2cap_chan_put(chan);
6914 		return;
6915 	}
6916 
6917 drop:
6918 	l2cap_chan_put(chan);
6919 free_skb:
6920 	kfree_skb(skb);
6921 }
6922 
6923 static void l2cap_recv_frame(struct l2cap_conn *conn, struct sk_buff *skb)
6924 {
6925 	struct l2cap_hdr *lh = (void *) skb->data;
6926 	struct hci_conn *hcon = conn->hcon;
6927 	u16 cid, len;
6928 	__le16 psm;
6929 
6930 	if (hcon->state != BT_CONNECTED) {
6931 		BT_DBG("queueing pending rx skb");
6932 		skb_queue_tail(&conn->pending_rx, skb);
6933 		return;
6934 	}
6935 
6936 	skb_pull(skb, L2CAP_HDR_SIZE);
6937 	cid = __le16_to_cpu(lh->cid);
6938 	len = __le16_to_cpu(lh->len);
6939 
6940 	if (len != skb->len) {
6941 		kfree_skb(skb);
6942 		return;
6943 	}
6944 
6945 	/* Since we can't actively block incoming LE connections we must
6946 	 * at least ensure that we ignore incoming data from them.
6947 	 */
6948 	if (hcon->type == LE_LINK &&
6949 	    hci_bdaddr_list_lookup(&hcon->hdev->blacklist, &hcon->dst,
6950 				   bdaddr_dst_type(hcon))) {
6951 		kfree_skb(skb);
6952 		return;
6953 	}
6954 
6955 	BT_DBG("len %d, cid 0x%4.4x", len, cid);
6956 
6957 	switch (cid) {
6958 	case L2CAP_CID_SIGNALING:
6959 		l2cap_sig_channel(conn, skb);
6960 		break;
6961 
6962 	case L2CAP_CID_CONN_LESS:
6963 		psm = get_unaligned((__le16 *) skb->data);
6964 		skb_pull(skb, L2CAP_PSMLEN_SIZE);
6965 		l2cap_conless_channel(conn, psm, skb);
6966 		break;
6967 
6968 	case L2CAP_CID_LE_SIGNALING:
6969 		l2cap_le_sig_channel(conn, skb);
6970 		break;
6971 
6972 	default:
6973 		l2cap_data_channel(conn, cid, skb);
6974 		break;
6975 	}
6976 }
6977 
6978 static void process_pending_rx(struct work_struct *work)
6979 {
6980 	struct l2cap_conn *conn = container_of(work, struct l2cap_conn,
6981 					       pending_rx_work);
6982 	struct sk_buff *skb;
6983 
6984 	BT_DBG("");
6985 
6986 	while ((skb = skb_dequeue(&conn->pending_rx)))
6987 		l2cap_recv_frame(conn, skb);
6988 }
6989 
6990 static struct l2cap_conn *l2cap_conn_add(struct hci_conn *hcon)
6991 {
6992 	struct l2cap_conn *conn = hcon->l2cap_data;
6993 	struct hci_chan *hchan;
6994 
6995 	if (conn)
6996 		return conn;
6997 
6998 	hchan = hci_chan_create(hcon);
6999 	if (!hchan)
7000 		return NULL;
7001 
7002 	conn = kzalloc(sizeof(*conn), GFP_KERNEL);
7003 	if (!conn) {
7004 		hci_chan_del(hchan);
7005 		return NULL;
7006 	}
7007 
7008 	kref_init(&conn->ref);
7009 	hcon->l2cap_data = conn;
7010 	conn->hcon = hci_conn_get(hcon);
7011 	conn->hchan = hchan;
7012 
7013 	BT_DBG("hcon %p conn %p hchan %p", hcon, conn, hchan);
7014 
7015 	switch (hcon->type) {
7016 	case LE_LINK:
7017 		if (hcon->hdev->le_mtu) {
7018 			conn->mtu = hcon->hdev->le_mtu;
7019 			break;
7020 		}
7021 		/* fall through */
7022 	default:
7023 		conn->mtu = hcon->hdev->acl_mtu;
7024 		break;
7025 	}
7026 
7027 	conn->feat_mask = 0;
7028 
7029 	conn->local_fixed_chan = L2CAP_FC_SIG_BREDR | L2CAP_FC_CONNLESS;
7030 
7031 	if (hcon->type == ACL_LINK &&
7032 	    hci_dev_test_flag(hcon->hdev, HCI_HS_ENABLED))
7033 		conn->local_fixed_chan |= L2CAP_FC_A2MP;
7034 
7035 	if (hci_dev_test_flag(hcon->hdev, HCI_LE_ENABLED) &&
7036 	    (bredr_sc_enabled(hcon->hdev) ||
7037 	     hci_dev_test_flag(hcon->hdev, HCI_FORCE_BREDR_SMP)))
7038 		conn->local_fixed_chan |= L2CAP_FC_SMP_BREDR;
7039 
7040 	mutex_init(&conn->ident_lock);
7041 	mutex_init(&conn->chan_lock);
7042 
7043 	INIT_LIST_HEAD(&conn->chan_l);
7044 	INIT_LIST_HEAD(&conn->users);
7045 
7046 	INIT_DELAYED_WORK(&conn->info_timer, l2cap_info_timeout);
7047 
7048 	skb_queue_head_init(&conn->pending_rx);
7049 	INIT_WORK(&conn->pending_rx_work, process_pending_rx);
7050 	INIT_WORK(&conn->id_addr_update_work, l2cap_conn_update_id_addr);
7051 
7052 	conn->disc_reason = HCI_ERROR_REMOTE_USER_TERM;
7053 
7054 	return conn;
7055 }
7056 
7057 static bool is_valid_psm(u16 psm, u8 dst_type) {
7058 	if (!psm)
7059 		return false;
7060 
7061 	if (bdaddr_type_is_le(dst_type))
7062 		return (psm <= 0x00ff);
7063 
7064 	/* PSM must be odd and lsb of upper byte must be 0 */
7065 	return ((psm & 0x0101) == 0x0001);
7066 }
7067 
7068 int l2cap_chan_connect(struct l2cap_chan *chan, __le16 psm, u16 cid,
7069 		       bdaddr_t *dst, u8 dst_type)
7070 {
7071 	struct l2cap_conn *conn;
7072 	struct hci_conn *hcon;
7073 	struct hci_dev *hdev;
7074 	int err;
7075 
7076 	BT_DBG("%pMR -> %pMR (type %u) psm 0x%2.2x", &chan->src, dst,
7077 	       dst_type, __le16_to_cpu(psm));
7078 
7079 	hdev = hci_get_route(dst, &chan->src, chan->src_type);
7080 	if (!hdev)
7081 		return -EHOSTUNREACH;
7082 
7083 	hci_dev_lock(hdev);
7084 
7085 	if (!is_valid_psm(__le16_to_cpu(psm), dst_type) && !cid &&
7086 	    chan->chan_type != L2CAP_CHAN_RAW) {
7087 		err = -EINVAL;
7088 		goto done;
7089 	}
7090 
7091 	if (chan->chan_type == L2CAP_CHAN_CONN_ORIENTED && !psm) {
7092 		err = -EINVAL;
7093 		goto done;
7094 	}
7095 
7096 	if (chan->chan_type == L2CAP_CHAN_FIXED && !cid) {
7097 		err = -EINVAL;
7098 		goto done;
7099 	}
7100 
7101 	switch (chan->mode) {
7102 	case L2CAP_MODE_BASIC:
7103 		break;
7104 	case L2CAP_MODE_LE_FLOWCTL:
7105 		l2cap_le_flowctl_init(chan);
7106 		break;
7107 	case L2CAP_MODE_ERTM:
7108 	case L2CAP_MODE_STREAMING:
7109 		if (!disable_ertm)
7110 			break;
7111 		/* fall through */
7112 	default:
7113 		err = -EOPNOTSUPP;
7114 		goto done;
7115 	}
7116 
7117 	switch (chan->state) {
7118 	case BT_CONNECT:
7119 	case BT_CONNECT2:
7120 	case BT_CONFIG:
7121 		/* Already connecting */
7122 		err = 0;
7123 		goto done;
7124 
7125 	case BT_CONNECTED:
7126 		/* Already connected */
7127 		err = -EISCONN;
7128 		goto done;
7129 
7130 	case BT_OPEN:
7131 	case BT_BOUND:
7132 		/* Can connect */
7133 		break;
7134 
7135 	default:
7136 		err = -EBADFD;
7137 		goto done;
7138 	}
7139 
7140 	/* Set destination address and psm */
7141 	bacpy(&chan->dst, dst);
7142 	chan->dst_type = dst_type;
7143 
7144 	chan->psm = psm;
7145 	chan->dcid = cid;
7146 
7147 	if (bdaddr_type_is_le(dst_type)) {
7148 		/* Convert from L2CAP channel address type to HCI address type
7149 		 */
7150 		if (dst_type == BDADDR_LE_PUBLIC)
7151 			dst_type = ADDR_LE_DEV_PUBLIC;
7152 		else
7153 			dst_type = ADDR_LE_DEV_RANDOM;
7154 
7155 		if (hci_dev_test_flag(hdev, HCI_ADVERTISING))
7156 			hcon = hci_connect_le(hdev, dst, dst_type,
7157 					      chan->sec_level,
7158 					      HCI_LE_CONN_TIMEOUT,
7159 					      HCI_ROLE_SLAVE);
7160 		else
7161 			hcon = hci_connect_le_scan(hdev, dst, dst_type,
7162 						   chan->sec_level,
7163 						   HCI_LE_CONN_TIMEOUT);
7164 
7165 	} else {
7166 		u8 auth_type = l2cap_get_auth_type(chan);
7167 		hcon = hci_connect_acl(hdev, dst, chan->sec_level, auth_type);
7168 	}
7169 
7170 	if (IS_ERR(hcon)) {
7171 		err = PTR_ERR(hcon);
7172 		goto done;
7173 	}
7174 
7175 	conn = l2cap_conn_add(hcon);
7176 	if (!conn) {
7177 		hci_conn_drop(hcon);
7178 		err = -ENOMEM;
7179 		goto done;
7180 	}
7181 
7182 	mutex_lock(&conn->chan_lock);
7183 	l2cap_chan_lock(chan);
7184 
7185 	if (cid && __l2cap_get_chan_by_dcid(conn, cid)) {
7186 		hci_conn_drop(hcon);
7187 		err = -EBUSY;
7188 		goto chan_unlock;
7189 	}
7190 
7191 	/* Update source addr of the socket */
7192 	bacpy(&chan->src, &hcon->src);
7193 	chan->src_type = bdaddr_src_type(hcon);
7194 
7195 	__l2cap_chan_add(conn, chan);
7196 
7197 	/* l2cap_chan_add takes its own ref so we can drop this one */
7198 	hci_conn_drop(hcon);
7199 
7200 	l2cap_state_change(chan, BT_CONNECT);
7201 	__set_chan_timer(chan, chan->ops->get_sndtimeo(chan));
7202 
7203 	/* Release chan->sport so that it can be reused by other
7204 	 * sockets (as it's only used for listening sockets).
7205 	 */
7206 	write_lock(&chan_list_lock);
7207 	chan->sport = 0;
7208 	write_unlock(&chan_list_lock);
7209 
7210 	if (hcon->state == BT_CONNECTED) {
7211 		if (chan->chan_type != L2CAP_CHAN_CONN_ORIENTED) {
7212 			__clear_chan_timer(chan);
7213 			if (l2cap_chan_check_security(chan, true))
7214 				l2cap_state_change(chan, BT_CONNECTED);
7215 		} else
7216 			l2cap_do_start(chan);
7217 	}
7218 
7219 	err = 0;
7220 
7221 chan_unlock:
7222 	l2cap_chan_unlock(chan);
7223 	mutex_unlock(&conn->chan_lock);
7224 done:
7225 	hci_dev_unlock(hdev);
7226 	hci_dev_put(hdev);
7227 	return err;
7228 }
7229 EXPORT_SYMBOL_GPL(l2cap_chan_connect);
7230 
7231 /* ---- L2CAP interface with lower layer (HCI) ---- */
7232 
7233 int l2cap_connect_ind(struct hci_dev *hdev, bdaddr_t *bdaddr)
7234 {
7235 	int exact = 0, lm1 = 0, lm2 = 0;
7236 	struct l2cap_chan *c;
7237 
7238 	BT_DBG("hdev %s, bdaddr %pMR", hdev->name, bdaddr);
7239 
7240 	/* Find listening sockets and check their link_mode */
7241 	read_lock(&chan_list_lock);
7242 	list_for_each_entry(c, &chan_list, global_l) {
7243 		if (c->state != BT_LISTEN)
7244 			continue;
7245 
7246 		if (!bacmp(&c->src, &hdev->bdaddr)) {
7247 			lm1 |= HCI_LM_ACCEPT;
7248 			if (test_bit(FLAG_ROLE_SWITCH, &c->flags))
7249 				lm1 |= HCI_LM_MASTER;
7250 			exact++;
7251 		} else if (!bacmp(&c->src, BDADDR_ANY)) {
7252 			lm2 |= HCI_LM_ACCEPT;
7253 			if (test_bit(FLAG_ROLE_SWITCH, &c->flags))
7254 				lm2 |= HCI_LM_MASTER;
7255 		}
7256 	}
7257 	read_unlock(&chan_list_lock);
7258 
7259 	return exact ? lm1 : lm2;
7260 }
7261 
7262 /* Find the next fixed channel in BT_LISTEN state, continue iteration
7263  * from an existing channel in the list or from the beginning of the
7264  * global list (by passing NULL as first parameter).
7265  */
7266 static struct l2cap_chan *l2cap_global_fixed_chan(struct l2cap_chan *c,
7267 						  struct hci_conn *hcon)
7268 {
7269 	u8 src_type = bdaddr_src_type(hcon);
7270 
7271 	read_lock(&chan_list_lock);
7272 
7273 	if (c)
7274 		c = list_next_entry(c, global_l);
7275 	else
7276 		c = list_entry(chan_list.next, typeof(*c), global_l);
7277 
7278 	list_for_each_entry_from(c, &chan_list, global_l) {
7279 		if (c->chan_type != L2CAP_CHAN_FIXED)
7280 			continue;
7281 		if (c->state != BT_LISTEN)
7282 			continue;
7283 		if (bacmp(&c->src, &hcon->src) && bacmp(&c->src, BDADDR_ANY))
7284 			continue;
7285 		if (src_type != c->src_type)
7286 			continue;
7287 
7288 		l2cap_chan_hold(c);
7289 		read_unlock(&chan_list_lock);
7290 		return c;
7291 	}
7292 
7293 	read_unlock(&chan_list_lock);
7294 
7295 	return NULL;
7296 }
7297 
7298 static void l2cap_connect_cfm(struct hci_conn *hcon, u8 status)
7299 {
7300 	struct hci_dev *hdev = hcon->hdev;
7301 	struct l2cap_conn *conn;
7302 	struct l2cap_chan *pchan;
7303 	u8 dst_type;
7304 
7305 	if (hcon->type != ACL_LINK && hcon->type != LE_LINK)
7306 		return;
7307 
7308 	BT_DBG("hcon %p bdaddr %pMR status %d", hcon, &hcon->dst, status);
7309 
7310 	if (status) {
7311 		l2cap_conn_del(hcon, bt_to_errno(status));
7312 		return;
7313 	}
7314 
7315 	conn = l2cap_conn_add(hcon);
7316 	if (!conn)
7317 		return;
7318 
7319 	dst_type = bdaddr_dst_type(hcon);
7320 
7321 	/* If device is blocked, do not create channels for it */
7322 	if (hci_bdaddr_list_lookup(&hdev->blacklist, &hcon->dst, dst_type))
7323 		return;
7324 
7325 	/* Find fixed channels and notify them of the new connection. We
7326 	 * use multiple individual lookups, continuing each time where
7327 	 * we left off, because the list lock would prevent calling the
7328 	 * potentially sleeping l2cap_chan_lock() function.
7329 	 */
7330 	pchan = l2cap_global_fixed_chan(NULL, hcon);
7331 	while (pchan) {
7332 		struct l2cap_chan *chan, *next;
7333 
7334 		/* Client fixed channels should override server ones */
7335 		if (__l2cap_get_chan_by_dcid(conn, pchan->scid))
7336 			goto next;
7337 
7338 		l2cap_chan_lock(pchan);
7339 		chan = pchan->ops->new_connection(pchan);
7340 		if (chan) {
7341 			bacpy(&chan->src, &hcon->src);
7342 			bacpy(&chan->dst, &hcon->dst);
7343 			chan->src_type = bdaddr_src_type(hcon);
7344 			chan->dst_type = dst_type;
7345 
7346 			__l2cap_chan_add(conn, chan);
7347 		}
7348 
7349 		l2cap_chan_unlock(pchan);
7350 next:
7351 		next = l2cap_global_fixed_chan(pchan, hcon);
7352 		l2cap_chan_put(pchan);
7353 		pchan = next;
7354 	}
7355 
7356 	l2cap_conn_ready(conn);
7357 }
7358 
7359 int l2cap_disconn_ind(struct hci_conn *hcon)
7360 {
7361 	struct l2cap_conn *conn = hcon->l2cap_data;
7362 
7363 	BT_DBG("hcon %p", hcon);
7364 
7365 	if (!conn)
7366 		return HCI_ERROR_REMOTE_USER_TERM;
7367 	return conn->disc_reason;
7368 }
7369 
7370 static void l2cap_disconn_cfm(struct hci_conn *hcon, u8 reason)
7371 {
7372 	if (hcon->type != ACL_LINK && hcon->type != LE_LINK)
7373 		return;
7374 
7375 	BT_DBG("hcon %p reason %d", hcon, reason);
7376 
7377 	l2cap_conn_del(hcon, bt_to_errno(reason));
7378 }
7379 
7380 static inline void l2cap_check_encryption(struct l2cap_chan *chan, u8 encrypt)
7381 {
7382 	if (chan->chan_type != L2CAP_CHAN_CONN_ORIENTED)
7383 		return;
7384 
7385 	if (encrypt == 0x00) {
7386 		if (chan->sec_level == BT_SECURITY_MEDIUM) {
7387 			__set_chan_timer(chan, L2CAP_ENC_TIMEOUT);
7388 		} else if (chan->sec_level == BT_SECURITY_HIGH ||
7389 			   chan->sec_level == BT_SECURITY_FIPS)
7390 			l2cap_chan_close(chan, ECONNREFUSED);
7391 	} else {
7392 		if (chan->sec_level == BT_SECURITY_MEDIUM)
7393 			__clear_chan_timer(chan);
7394 	}
7395 }
7396 
7397 static void l2cap_security_cfm(struct hci_conn *hcon, u8 status, u8 encrypt)
7398 {
7399 	struct l2cap_conn *conn = hcon->l2cap_data;
7400 	struct l2cap_chan *chan;
7401 
7402 	if (!conn)
7403 		return;
7404 
7405 	BT_DBG("conn %p status 0x%2.2x encrypt %u", conn, status, encrypt);
7406 
7407 	mutex_lock(&conn->chan_lock);
7408 
7409 	list_for_each_entry(chan, &conn->chan_l, list) {
7410 		l2cap_chan_lock(chan);
7411 
7412 		BT_DBG("chan %p scid 0x%4.4x state %s", chan, chan->scid,
7413 		       state_to_string(chan->state));
7414 
7415 		if (chan->scid == L2CAP_CID_A2MP) {
7416 			l2cap_chan_unlock(chan);
7417 			continue;
7418 		}
7419 
7420 		if (!status && encrypt)
7421 			chan->sec_level = hcon->sec_level;
7422 
7423 		if (!__l2cap_no_conn_pending(chan)) {
7424 			l2cap_chan_unlock(chan);
7425 			continue;
7426 		}
7427 
7428 		if (!status && (chan->state == BT_CONNECTED ||
7429 				chan->state == BT_CONFIG)) {
7430 			chan->ops->resume(chan);
7431 			l2cap_check_encryption(chan, encrypt);
7432 			l2cap_chan_unlock(chan);
7433 			continue;
7434 		}
7435 
7436 		if (chan->state == BT_CONNECT) {
7437 			if (!status)
7438 				l2cap_start_connection(chan);
7439 			else
7440 				__set_chan_timer(chan, L2CAP_DISC_TIMEOUT);
7441 		} else if (chan->state == BT_CONNECT2 &&
7442 			   chan->mode != L2CAP_MODE_LE_FLOWCTL) {
7443 			struct l2cap_conn_rsp rsp;
7444 			__u16 res, stat;
7445 
7446 			if (!status) {
7447 				if (test_bit(FLAG_DEFER_SETUP, &chan->flags)) {
7448 					res = L2CAP_CR_PEND;
7449 					stat = L2CAP_CS_AUTHOR_PEND;
7450 					chan->ops->defer(chan);
7451 				} else {
7452 					l2cap_state_change(chan, BT_CONFIG);
7453 					res = L2CAP_CR_SUCCESS;
7454 					stat = L2CAP_CS_NO_INFO;
7455 				}
7456 			} else {
7457 				l2cap_state_change(chan, BT_DISCONN);
7458 				__set_chan_timer(chan, L2CAP_DISC_TIMEOUT);
7459 				res = L2CAP_CR_SEC_BLOCK;
7460 				stat = L2CAP_CS_NO_INFO;
7461 			}
7462 
7463 			rsp.scid   = cpu_to_le16(chan->dcid);
7464 			rsp.dcid   = cpu_to_le16(chan->scid);
7465 			rsp.result = cpu_to_le16(res);
7466 			rsp.status = cpu_to_le16(stat);
7467 			l2cap_send_cmd(conn, chan->ident, L2CAP_CONN_RSP,
7468 				       sizeof(rsp), &rsp);
7469 
7470 			if (!test_bit(CONF_REQ_SENT, &chan->conf_state) &&
7471 			    res == L2CAP_CR_SUCCESS) {
7472 				char buf[128];
7473 				set_bit(CONF_REQ_SENT, &chan->conf_state);
7474 				l2cap_send_cmd(conn, l2cap_get_ident(conn),
7475 					       L2CAP_CONF_REQ,
7476 					       l2cap_build_conf_req(chan, buf, sizeof(buf)),
7477 					       buf);
7478 				chan->num_conf_req++;
7479 			}
7480 		}
7481 
7482 		l2cap_chan_unlock(chan);
7483 	}
7484 
7485 	mutex_unlock(&conn->chan_lock);
7486 }
7487 
7488 void l2cap_recv_acldata(struct hci_conn *hcon, struct sk_buff *skb, u16 flags)
7489 {
7490 	struct l2cap_conn *conn = hcon->l2cap_data;
7491 	struct l2cap_hdr *hdr;
7492 	int len;
7493 
7494 	/* For AMP controller do not create l2cap conn */
7495 	if (!conn && hcon->hdev->dev_type != HCI_PRIMARY)
7496 		goto drop;
7497 
7498 	if (!conn)
7499 		conn = l2cap_conn_add(hcon);
7500 
7501 	if (!conn)
7502 		goto drop;
7503 
7504 	BT_DBG("conn %p len %d flags 0x%x", conn, skb->len, flags);
7505 
7506 	switch (flags) {
7507 	case ACL_START:
7508 	case ACL_START_NO_FLUSH:
7509 	case ACL_COMPLETE:
7510 		if (conn->rx_len) {
7511 			BT_ERR("Unexpected start frame (len %d)", skb->len);
7512 			kfree_skb(conn->rx_skb);
7513 			conn->rx_skb = NULL;
7514 			conn->rx_len = 0;
7515 			l2cap_conn_unreliable(conn, ECOMM);
7516 		}
7517 
7518 		/* Start fragment always begin with Basic L2CAP header */
7519 		if (skb->len < L2CAP_HDR_SIZE) {
7520 			BT_ERR("Frame is too short (len %d)", skb->len);
7521 			l2cap_conn_unreliable(conn, ECOMM);
7522 			goto drop;
7523 		}
7524 
7525 		hdr = (struct l2cap_hdr *) skb->data;
7526 		len = __le16_to_cpu(hdr->len) + L2CAP_HDR_SIZE;
7527 
7528 		if (len == skb->len) {
7529 			/* Complete frame received */
7530 			l2cap_recv_frame(conn, skb);
7531 			return;
7532 		}
7533 
7534 		BT_DBG("Start: total len %d, frag len %d", len, skb->len);
7535 
7536 		if (skb->len > len) {
7537 			BT_ERR("Frame is too long (len %d, expected len %d)",
7538 			       skb->len, len);
7539 			l2cap_conn_unreliable(conn, ECOMM);
7540 			goto drop;
7541 		}
7542 
7543 		/* Allocate skb for the complete frame (with header) */
7544 		conn->rx_skb = bt_skb_alloc(len, GFP_KERNEL);
7545 		if (!conn->rx_skb)
7546 			goto drop;
7547 
7548 		skb_copy_from_linear_data(skb, skb_put(conn->rx_skb, skb->len),
7549 					  skb->len);
7550 		conn->rx_len = len - skb->len;
7551 		break;
7552 
7553 	case ACL_CONT:
7554 		BT_DBG("Cont: frag len %d (expecting %d)", skb->len, conn->rx_len);
7555 
7556 		if (!conn->rx_len) {
7557 			BT_ERR("Unexpected continuation frame (len %d)", skb->len);
7558 			l2cap_conn_unreliable(conn, ECOMM);
7559 			goto drop;
7560 		}
7561 
7562 		if (skb->len > conn->rx_len) {
7563 			BT_ERR("Fragment is too long (len %d, expected %d)",
7564 			       skb->len, conn->rx_len);
7565 			kfree_skb(conn->rx_skb);
7566 			conn->rx_skb = NULL;
7567 			conn->rx_len = 0;
7568 			l2cap_conn_unreliable(conn, ECOMM);
7569 			goto drop;
7570 		}
7571 
7572 		skb_copy_from_linear_data(skb, skb_put(conn->rx_skb, skb->len),
7573 					  skb->len);
7574 		conn->rx_len -= skb->len;
7575 
7576 		if (!conn->rx_len) {
7577 			/* Complete frame received. l2cap_recv_frame
7578 			 * takes ownership of the skb so set the global
7579 			 * rx_skb pointer to NULL first.
7580 			 */
7581 			struct sk_buff *rx_skb = conn->rx_skb;
7582 			conn->rx_skb = NULL;
7583 			l2cap_recv_frame(conn, rx_skb);
7584 		}
7585 		break;
7586 	}
7587 
7588 drop:
7589 	kfree_skb(skb);
7590 }
7591 
7592 static struct hci_cb l2cap_cb = {
7593 	.name		= "L2CAP",
7594 	.connect_cfm	= l2cap_connect_cfm,
7595 	.disconn_cfm	= l2cap_disconn_cfm,
7596 	.security_cfm	= l2cap_security_cfm,
7597 };
7598 
7599 static int l2cap_debugfs_show(struct seq_file *f, void *p)
7600 {
7601 	struct l2cap_chan *c;
7602 
7603 	read_lock(&chan_list_lock);
7604 
7605 	list_for_each_entry(c, &chan_list, global_l) {
7606 		seq_printf(f, "%pMR (%u) %pMR (%u) %d %d 0x%4.4x 0x%4.4x %d %d %d %d\n",
7607 			   &c->src, c->src_type, &c->dst, c->dst_type,
7608 			   c->state, __le16_to_cpu(c->psm),
7609 			   c->scid, c->dcid, c->imtu, c->omtu,
7610 			   c->sec_level, c->mode);
7611 	}
7612 
7613 	read_unlock(&chan_list_lock);
7614 
7615 	return 0;
7616 }
7617 
7618 static int l2cap_debugfs_open(struct inode *inode, struct file *file)
7619 {
7620 	return single_open(file, l2cap_debugfs_show, inode->i_private);
7621 }
7622 
7623 static const struct file_operations l2cap_debugfs_fops = {
7624 	.open		= l2cap_debugfs_open,
7625 	.read		= seq_read,
7626 	.llseek		= seq_lseek,
7627 	.release	= single_release,
7628 };
7629 
7630 static struct dentry *l2cap_debugfs;
7631 
7632 int __init l2cap_init(void)
7633 {
7634 	int err;
7635 
7636 	err = l2cap_init_sockets();
7637 	if (err < 0)
7638 		return err;
7639 
7640 	hci_register_cb(&l2cap_cb);
7641 
7642 	if (IS_ERR_OR_NULL(bt_debugfs))
7643 		return 0;
7644 
7645 	l2cap_debugfs = debugfs_create_file("l2cap", 0444, bt_debugfs,
7646 					    NULL, &l2cap_debugfs_fops);
7647 
7648 	debugfs_create_u16("l2cap_le_max_credits", 0644, bt_debugfs,
7649 			   &le_max_credits);
7650 	debugfs_create_u16("l2cap_le_default_mps", 0644, bt_debugfs,
7651 			   &le_default_mps);
7652 
7653 	return 0;
7654 }
7655 
7656 void l2cap_exit(void)
7657 {
7658 	debugfs_remove(l2cap_debugfs);
7659 	hci_unregister_cb(&l2cap_cb);
7660 	l2cap_cleanup_sockets();
7661 }
7662 
7663 module_param(disable_ertm, bool, 0644);
7664 MODULE_PARM_DESC(disable_ertm, "Disable enhanced retransmission mode");
7665