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