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