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