xref: /netbsd-src/sys/netbt/hci_link.c (revision b1c86f5f087524e68db12794ee9c3e3da1ab17a0)
1 /*	$NetBSD: hci_link.c,v 1.21 2009/09/24 19:35:09 plunky Exp $	*/
2 
3 /*-
4  * Copyright (c) 2005 Iain Hibbert.
5  * Copyright (c) 2006 Itronix Inc.
6  * All rights reserved.
7  *
8  * Redistribution and use in source and binary forms, with or without
9  * modification, are permitted provided that the following conditions
10  * are met:
11  * 1. Redistributions of source code must retain the above copyright
12  *    notice, this list of conditions and the following disclaimer.
13  * 2. Redistributions in binary form must reproduce the above copyright
14  *    notice, this list of conditions and the following disclaimer in the
15  *    documentation and/or other materials provided with the distribution.
16  * 3. The name of Itronix Inc. may not be used to endorse
17  *    or promote products derived from this software without specific
18  *    prior written permission.
19  *
20  * THIS SOFTWARE IS PROVIDED BY ITRONIX INC. ``AS IS'' AND
21  * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED
22  * TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
23  * PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL ITRONIX INC. BE LIABLE FOR ANY
24  * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
25  * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
26  * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
27  * ON ANY THEORY OF LIABILITY, WHETHER IN
28  * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
29  * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
30  * POSSIBILITY OF SUCH DAMAGE.
31  */
32 
33 #include <sys/cdefs.h>
34 __KERNEL_RCSID(0, "$NetBSD: hci_link.c,v 1.21 2009/09/24 19:35:09 plunky Exp $");
35 
36 #include <sys/param.h>
37 #include <sys/kernel.h>
38 #include <sys/malloc.h>
39 #include <sys/mbuf.h>
40 #include <sys/proc.h>
41 #include <sys/queue.h>
42 #include <sys/systm.h>
43 
44 #include <netbt/bluetooth.h>
45 #include <netbt/hci.h>
46 #include <netbt/l2cap.h>
47 #include <netbt/sco.h>
48 
49 /*******************************************************************************
50  *
51  *	HCI ACL Connections
52  */
53 
54 /*
55  * Automatically expire unused ACL connections after this number of
56  * seconds (if zero, do not expire unused connections) [sysctl]
57  */
58 int hci_acl_expiry = 10;	/* seconds */
59 
60 /*
61  * hci_acl_open(unit, bdaddr)
62  *
63  * open ACL connection to remote bdaddr. Only one ACL connection is permitted
64  * between any two Bluetooth devices, so we look for an existing one before
65  * trying to start a new one.
66  */
67 struct hci_link *
68 hci_acl_open(struct hci_unit *unit, bdaddr_t *bdaddr)
69 {
70 	struct hci_link *link;
71 	struct hci_memo *memo;
72 	hci_create_con_cp cp;
73 	int err;
74 
75 	KASSERT(unit != NULL);
76 	KASSERT(bdaddr != NULL);
77 
78 	link = hci_link_lookup_bdaddr(unit, bdaddr, HCI_LINK_ACL);
79 	if (link == NULL) {
80 		link = hci_link_alloc(unit, bdaddr, HCI_LINK_ACL);
81 		if (link == NULL)
82 			return NULL;
83 	}
84 
85 	switch(link->hl_state) {
86 	case HCI_LINK_CLOSED:
87 		/*
88 		 * open connection to remote device
89 		 */
90 		memset(&cp, 0, sizeof(cp));
91 		bdaddr_copy(&cp.bdaddr, bdaddr);
92 		cp.pkt_type = htole16(unit->hci_packet_type);
93 
94 		memo = hci_memo_find(unit, bdaddr);
95 		if (memo != NULL) {
96 			cp.page_scan_rep_mode = memo->page_scan_rep_mode;
97 			cp.page_scan_mode = memo->page_scan_mode;
98 			cp.clock_offset = memo->clock_offset;
99 		}
100 
101 		if (unit->hci_link_policy & HCI_LINK_POLICY_ENABLE_ROLE_SWITCH)
102 			cp.accept_role_switch = 1;
103 
104 		err = hci_send_cmd(unit, HCI_CMD_CREATE_CON, &cp, sizeof(cp));
105 		if (err) {
106 			hci_link_free(link, err);
107 			return NULL;
108 		}
109 
110 		link->hl_flags |= HCI_LINK_CREATE_CON;
111 		link->hl_state = HCI_LINK_WAIT_CONNECT;
112 		break;
113 
114 	case HCI_LINK_WAIT_CONNECT:
115 	case HCI_LINK_WAIT_AUTH:
116 	case HCI_LINK_WAIT_ENCRYPT:
117 	case HCI_LINK_WAIT_SECURE:
118 		/*
119 		 * somebody else already trying to connect, we just
120 		 * sit on the bench with them..
121 		 */
122 		break;
123 
124 	case HCI_LINK_OPEN:
125 		/*
126 		 * If already open, halt any expiry timeouts. We dont need
127 		 * to care about already invoking timeouts since refcnt >0
128 		 * will keep the link alive.
129 		 */
130 		callout_stop(&link->hl_expire);
131 		break;
132 
133 	default:
134 		UNKNOWN(link->hl_state);
135 		return NULL;
136 	}
137 
138 	/* open */
139 	link->hl_refcnt++;
140 
141 	return link;
142 }
143 
144 /*
145  * Close ACL connection. When there are no more references to this link,
146  * we can either close it down or schedule a delayed closedown.
147  */
148 void
149 hci_acl_close(struct hci_link *link, int err)
150 {
151 
152 	KASSERT(link != NULL);
153 
154 	if (--link->hl_refcnt == 0) {
155 		if (link->hl_state == HCI_LINK_CLOSED)
156 			hci_link_free(link, err);
157 		else if (hci_acl_expiry > 0)
158 			callout_schedule(&link->hl_expire, hci_acl_expiry * hz);
159 	}
160 }
161 
162 /*
163  * Incoming ACL connection.
164  *
165  * Check the L2CAP listeners list and only accept when there is a
166  * potential listener available.
167  *
168  * There should not be a link to the same bdaddr already, we check
169  * anyway though its left unhandled for now.
170  */
171 struct hci_link *
172 hci_acl_newconn(struct hci_unit *unit, bdaddr_t *bdaddr)
173 {
174 	struct hci_link *link;
175 	struct l2cap_channel *chan;
176 
177 	LIST_FOREACH(chan, &l2cap_listen_list, lc_ncid) {
178 		if (bdaddr_same(&unit->hci_bdaddr, &chan->lc_laddr.bt_bdaddr)
179 		    || bdaddr_any(&chan->lc_laddr.bt_bdaddr))
180 			break;
181 	}
182 
183 	if (chan == NULL) {
184 		DPRINTF("%s: rejecting connection (no listeners)\n",
185 		    device_xname(unit->hci_dev));
186 
187 		return NULL;
188 	}
189 
190 	link = hci_link_lookup_bdaddr(unit, bdaddr, HCI_LINK_ACL);
191 	if (link != NULL) {
192 		DPRINTF("%s: rejecting connection (link exists)\n",
193 		    device_xname(unit->hci_dev));
194 
195 		return NULL;
196 	}
197 
198 	link = hci_link_alloc(unit, bdaddr, HCI_LINK_ACL);
199 	if (link != NULL) {
200 		link->hl_state = HCI_LINK_WAIT_CONNECT;
201 
202 		if (hci_acl_expiry > 0)
203 			callout_schedule(&link->hl_expire, hci_acl_expiry * hz);
204 	}
205 
206 	return link;
207 }
208 
209 void
210 hci_acl_timeout(void *arg)
211 {
212 	struct hci_link *link = arg;
213 	hci_discon_cp cp;
214 	int err;
215 
216 	mutex_enter(bt_lock);
217 	callout_ack(&link->hl_expire);
218 
219 	if (link->hl_refcnt > 0)
220 		goto out;
221 
222 	DPRINTF("link #%d expired\n", link->hl_handle);
223 
224 	switch (link->hl_state) {
225 	case HCI_LINK_CLOSED:
226 	case HCI_LINK_WAIT_CONNECT:
227 		hci_link_free(link, ECONNRESET);
228 		break;
229 
230 	case HCI_LINK_WAIT_AUTH:
231 	case HCI_LINK_WAIT_ENCRYPT:
232 	case HCI_LINK_WAIT_SECURE:
233 	case HCI_LINK_OPEN:
234 		cp.con_handle = htole16(link->hl_handle);
235 		cp.reason = 0x13; /* "Remote User Terminated Connection" */
236 
237 		err = hci_send_cmd(link->hl_unit, HCI_CMD_DISCONNECT,
238 					&cp, sizeof(cp));
239 
240 		if (err) {
241 			DPRINTF("error %d sending HCI_CMD_DISCONNECT\n",
242 			    err);
243 		}
244 
245 		break;
246 
247 	default:
248 		UNKNOWN(link->hl_state);
249 		break;
250 	}
251 
252 out:
253 	mutex_exit(bt_lock);
254 }
255 
256 /*
257  * Initiate any Link Mode change requests.
258  */
259 int
260 hci_acl_setmode(struct hci_link *link)
261 {
262 	int err;
263 
264 	KASSERT(link != NULL);
265 	KASSERT(link->hl_unit != NULL);
266 
267 	if (link->hl_state != HCI_LINK_OPEN)
268 		return EINPROGRESS;
269 
270 	if ((link->hl_flags & HCI_LINK_AUTH_REQ)
271 	    && !(link->hl_flags & HCI_LINK_AUTH)) {
272 		hci_auth_req_cp cp;
273 
274 		DPRINTF("requesting auth for handle #%d\n",
275 			link->hl_handle);
276 
277 		link->hl_state = HCI_LINK_WAIT_AUTH;
278 		cp.con_handle = htole16(link->hl_handle);
279 		err = hci_send_cmd(link->hl_unit, HCI_CMD_AUTH_REQ,
280 				   &cp, sizeof(cp));
281 
282 		return (err == 0 ? EINPROGRESS : err);
283 	}
284 
285 	if ((link->hl_flags & HCI_LINK_ENCRYPT_REQ)
286 	    && !(link->hl_flags & HCI_LINK_ENCRYPT)) {
287 		hci_set_con_encryption_cp cp;
288 
289 		/* XXX we should check features for encryption capability */
290 
291 		DPRINTF("requesting encryption for handle #%d\n",
292 			link->hl_handle);
293 
294 		link->hl_state = HCI_LINK_WAIT_ENCRYPT;
295 		cp.con_handle = htole16(link->hl_handle);
296 		cp.encryption_enable = 0x01;
297 
298 		err = hci_send_cmd(link->hl_unit, HCI_CMD_SET_CON_ENCRYPTION,
299 				   &cp, sizeof(cp));
300 
301 		return (err == 0 ? EINPROGRESS : err);
302 	}
303 
304 	if ((link->hl_flags & HCI_LINK_SECURE_REQ)) {
305 		hci_change_con_link_key_cp cp;
306 
307 		/* always change link key for SECURE requests */
308 		link->hl_flags &= ~HCI_LINK_SECURE;
309 
310 		DPRINTF("changing link key for handle #%d\n",
311 			link->hl_handle);
312 
313 		link->hl_state = HCI_LINK_WAIT_SECURE;
314 		cp.con_handle = htole16(link->hl_handle);
315 
316 		err = hci_send_cmd(link->hl_unit, HCI_CMD_CHANGE_CON_LINK_KEY,
317 				   &cp, sizeof(cp));
318 
319 		return (err == 0 ? EINPROGRESS : err);
320 	}
321 
322 	return 0;
323 }
324 
325 /*
326  * Link Mode changed.
327  *
328  * This is called from event handlers when the mode change
329  * is complete. We notify upstream and restart the link.
330  */
331 void
332 hci_acl_linkmode(struct hci_link *link)
333 {
334 	struct l2cap_channel *chan, *next;
335 	int err, mode = 0;
336 
337 	DPRINTF("handle #%d, auth %s, encrypt %s, secure %s\n",
338 		link->hl_handle,
339 		(link->hl_flags & HCI_LINK_AUTH ? "on" : "off"),
340 		(link->hl_flags & HCI_LINK_ENCRYPT ? "on" : "off"),
341 		(link->hl_flags & HCI_LINK_SECURE ? "on" : "off"));
342 
343 	if (link->hl_flags & HCI_LINK_AUTH)
344 		mode |= L2CAP_LM_AUTH;
345 
346 	if (link->hl_flags & HCI_LINK_ENCRYPT)
347 		mode |= L2CAP_LM_ENCRYPT;
348 
349 	if (link->hl_flags & HCI_LINK_SECURE)
350 		mode |= L2CAP_LM_SECURE;
351 
352 	/*
353 	 * The link state will only be OPEN here if the mode change
354 	 * was successful. So, we can proceed with L2CAP connections,
355 	 * or notify already establshed channels, to allow any that
356 	 * are dissatisfied to disconnect before we restart.
357 	 */
358 	next = LIST_FIRST(&l2cap_active_list);
359 	while ((chan = next) != NULL) {
360 		next = LIST_NEXT(chan, lc_ncid);
361 
362 		if (chan->lc_link != link)
363 			continue;
364 
365 		switch(chan->lc_state) {
366 		case L2CAP_WAIT_SEND_CONNECT_REQ: /* we are connecting */
367 			if ((mode & chan->lc_mode) != chan->lc_mode) {
368 				l2cap_close(chan, ECONNABORTED);
369 				break;
370 			}
371 
372 			chan->lc_state = L2CAP_WAIT_RECV_CONNECT_RSP;
373 			err = l2cap_send_connect_req(chan);
374 			if (err) {
375 				l2cap_close(chan, err);
376 				break;
377 			}
378 			break;
379 
380 		case L2CAP_WAIT_SEND_CONNECT_RSP: /* they are connecting */
381 			if ((mode & chan->lc_mode) != chan->lc_mode) {
382 				l2cap_send_connect_rsp(link, chan->lc_ident,
383 							0, chan->lc_rcid,
384 							L2CAP_SECURITY_BLOCK);
385 
386 				l2cap_close(chan, ECONNABORTED);
387 				break;
388 			}
389 
390 			l2cap_send_connect_rsp(link, chan->lc_ident,
391 						chan->lc_lcid, chan->lc_rcid,
392 						L2CAP_SUCCESS);
393 
394 			chan->lc_state = L2CAP_WAIT_CONFIG;
395 			chan->lc_flags |= (L2CAP_WAIT_CONFIG_RSP | L2CAP_WAIT_CONFIG_REQ);
396 			err = l2cap_send_config_req(chan);
397 			if (err) {
398 				l2cap_close(chan, err);
399 				break;
400 			}
401 			break;
402 
403 		case L2CAP_WAIT_RECV_CONNECT_RSP:
404 		case L2CAP_WAIT_CONFIG:
405 		case L2CAP_OPEN: /* already established */
406 			(*chan->lc_proto->linkmode)(chan->lc_upper, mode);
407 			break;
408 
409 		default:
410 			break;
411 		}
412 	}
413 
414 	link->hl_state = HCI_LINK_OPEN;
415 	hci_acl_start(link);
416 }
417 
418 /*
419  * Receive ACL Data
420  *
421  * we accumulate packet fragments on the hci_link structure
422  * until a full L2CAP frame is ready, then send it on.
423  */
424 void
425 hci_acl_recv(struct mbuf *m, struct hci_unit *unit)
426 {
427 	struct hci_link *link;
428 	hci_acldata_hdr_t hdr;
429 	uint16_t handle, want;
430 	int pb, got;
431 
432 	KASSERT(m != NULL);
433 	KASSERT(unit != NULL);
434 
435 	KASSERT(m->m_pkthdr.len >= sizeof(hdr));
436 	m_copydata(m, 0, sizeof(hdr), &hdr);
437 	m_adj(m, sizeof(hdr));
438 
439 #ifdef DIAGNOSTIC
440 	if (hdr.type != HCI_ACL_DATA_PKT) {
441 		aprint_error_dev(unit->hci_dev, "bad ACL packet type\n");
442 		goto bad;
443 	}
444 
445 	if (m->m_pkthdr.len != le16toh(hdr.length)) {
446 		aprint_error_dev(unit->hci_dev,
447 		    "bad ACL packet length (%d != %d)\n",
448 		    m->m_pkthdr.len, le16toh(hdr.length));
449 		goto bad;
450 	}
451 #endif
452 
453 	hdr.length = le16toh(hdr.length);
454 	hdr.con_handle = le16toh(hdr.con_handle);
455 	handle = HCI_CON_HANDLE(hdr.con_handle);
456 	pb = HCI_PB_FLAG(hdr.con_handle);
457 
458 	link = hci_link_lookup_handle(unit, handle);
459 	if (link == NULL) {
460 		hci_discon_cp cp;
461 
462 		DPRINTF("%s: dumping packet for unknown handle #%d\n",
463 			device_xname(unit->hci_dev), handle);
464 
465 		/*
466 		 * There is no way to find out what this connection handle is
467 		 * for, just get rid of it. This may happen, if a USB dongle
468 		 * is plugged into a self powered hub and does not reset when
469 		 * the system is shut down.
470 		 */
471 		cp.con_handle = htole16(handle);
472 		cp.reason = 0x13; /* "Remote User Terminated Connection" */
473 		hci_send_cmd(unit, HCI_CMD_DISCONNECT, &cp, sizeof(cp));
474 		goto bad;
475 	}
476 
477 	switch (pb) {
478 	case HCI_PACKET_START:
479 		if (link->hl_rxp != NULL)
480 			aprint_error_dev(unit->hci_dev,
481 			    "dropped incomplete ACL packet\n");
482 
483 		if (m->m_pkthdr.len < sizeof(l2cap_hdr_t)) {
484 			aprint_error_dev(unit->hci_dev, "short ACL packet\n");
485 			goto bad;
486 		}
487 
488 		link->hl_rxp = m;
489 		got = m->m_pkthdr.len;
490 		break;
491 
492 	case HCI_PACKET_FRAGMENT:
493 		if (link->hl_rxp == NULL) {
494 			aprint_error_dev(unit->hci_dev,
495 			    "unexpected packet fragment\n");
496 
497 			goto bad;
498 		}
499 
500 		got = m->m_pkthdr.len + link->hl_rxp->m_pkthdr.len;
501 		m_cat(link->hl_rxp, m);
502 		m = link->hl_rxp;
503 		m->m_pkthdr.len = got;
504 		break;
505 
506 	default:
507 		aprint_error_dev(unit->hci_dev, "unknown packet type\n");
508 		goto bad;
509 	}
510 
511 	m_copydata(m, 0, sizeof(want), &want);
512 	want = le16toh(want) + sizeof(l2cap_hdr_t) - got;
513 
514 	if (want > 0)
515 		return;
516 
517 	link->hl_rxp = NULL;
518 
519 	if (want == 0) {
520 		l2cap_recv_frame(m, link);
521 		return;
522 	}
523 
524 bad:
525 	m_freem(m);
526 }
527 
528 /*
529  * Send ACL data on link
530  *
531  * We must fragment packets into chunks of less than unit->hci_max_acl_size and
532  * prepend a relevant ACL header to each fragment. We keep a PDU structure
533  * attached to the link, so that completed fragments can be marked off and
534  * more data requested from above once the PDU is sent.
535  */
536 int
537 hci_acl_send(struct mbuf *m, struct hci_link *link,
538 		struct l2cap_channel *chan)
539 {
540 	struct l2cap_pdu *pdu;
541 	struct mbuf *n = NULL;
542 	int plen, mlen, num = 0;
543 
544 	KASSERT(link != NULL);
545 	KASSERT(m != NULL);
546 	KASSERT(m->m_flags & M_PKTHDR);
547 	KASSERT(m->m_pkthdr.len > 0);
548 
549 	if (link->hl_state == HCI_LINK_CLOSED) {
550 		m_freem(m);
551 		return ENETDOWN;
552 	}
553 
554 	pdu = pool_get(&l2cap_pdu_pool, PR_NOWAIT);
555 	if (pdu == NULL)
556 		goto nomem;
557 
558 	pdu->lp_chan = chan;
559 	pdu->lp_pending = 0;
560 	MBUFQ_INIT(&pdu->lp_data);
561 
562 	plen = m->m_pkthdr.len;
563 	mlen = link->hl_unit->hci_max_acl_size;
564 
565 	DPRINTFN(5, "%s: handle #%d, plen = %d, max = %d\n",
566 		device_xname(link->hl_unit->hci_dev), link->hl_handle, plen, mlen);
567 
568 	while (plen > 0) {
569 		if (plen > mlen) {
570 			n = m_split(m, mlen, M_DONTWAIT);
571 			if (n == NULL)
572 				goto nomem;
573 		} else {
574 			mlen = plen;
575 		}
576 
577 		if (num++ == 0)
578 			m->m_flags |= M_PROTO1;	/* tag first fragment */
579 
580 		DPRINTFN(10, "chunk of %d (plen = %d) bytes\n", mlen, plen);
581 		MBUFQ_ENQUEUE(&pdu->lp_data, m);
582 		m = n;
583 		plen -= mlen;
584 	}
585 
586 	TAILQ_INSERT_TAIL(&link->hl_txq, pdu, lp_next);
587 	link->hl_txqlen += num;
588 
589 	hci_acl_start(link);
590 
591 	return 0;
592 
593 nomem:
594 	if (m) m_freem(m);
595 	if (pdu) {
596 		MBUFQ_DRAIN(&pdu->lp_data);
597 		pool_put(&l2cap_pdu_pool, pdu);
598 	}
599 
600 	return ENOMEM;
601 }
602 
603 /*
604  * Start sending ACL data on link.
605  *
606  *	This is called when the queue may need restarting: as new data
607  * is queued, after link mode changes have completed, or when device
608  * buffers have cleared.
609  *
610  *	We may use all the available packet slots. The reason that we add
611  * the ACL encapsulation here rather than in hci_acl_send() is that L2CAP
612  * signal packets may be queued before the handle is given to us..
613  */
614 void
615 hci_acl_start(struct hci_link *link)
616 {
617 	struct hci_unit *unit;
618 	hci_acldata_hdr_t *hdr;
619 	struct l2cap_pdu *pdu;
620 	struct mbuf *m;
621 	uint16_t handle;
622 
623 	KASSERT(link != NULL);
624 
625 	unit = link->hl_unit;
626 	KASSERT(unit != NULL);
627 
628 	/* this is mainly to block ourselves (below) */
629 	if (link->hl_state != HCI_LINK_OPEN)
630 		return;
631 
632 	if (link->hl_txqlen == 0 || unit->hci_num_acl_pkts == 0)
633 		return;
634 
635 	/* find first PDU with data to send */
636 	pdu = TAILQ_FIRST(&link->hl_txq);
637 	for (;;) {
638 		if (pdu == NULL)
639 			return;
640 
641 		if (MBUFQ_FIRST(&pdu->lp_data) != NULL)
642 			break;
643 
644 		pdu = TAILQ_NEXT(pdu, lp_next);
645 	}
646 
647 	while (unit->hci_num_acl_pkts > 0) {
648 		MBUFQ_DEQUEUE(&pdu->lp_data, m);
649 		KASSERT(m != NULL);
650 
651 		if (m->m_flags & M_PROTO1)
652 			handle = HCI_MK_CON_HANDLE(link->hl_handle,
653 						HCI_PACKET_START, 0);
654 		else
655 			handle = HCI_MK_CON_HANDLE(link->hl_handle,
656 						HCI_PACKET_FRAGMENT, 0);
657 
658 		M_PREPEND(m, sizeof(*hdr), M_DONTWAIT);
659 		if (m == NULL)
660 			break;
661 
662 		hdr = mtod(m, hci_acldata_hdr_t *);
663 		hdr->type = HCI_ACL_DATA_PKT;
664 		hdr->con_handle = htole16(handle);
665 		hdr->length = htole16(m->m_pkthdr.len - sizeof(*hdr));
666 
667 		link->hl_txqlen--;
668 		pdu->lp_pending++;
669 
670 		hci_output_acl(unit, m);
671 
672 		if (MBUFQ_FIRST(&pdu->lp_data) == NULL) {
673 			if (pdu->lp_chan) {
674 				/*
675 				 * This should enable streaming of PDUs - when
676 				 * we have placed all the fragments on the acl
677 				 * output queue, we trigger the L2CAP layer to
678 				 * send us down one more. Use a false state so
679 				 * we dont run into ourselves coming back from
680 				 * the future..
681 				 */
682 				link->hl_state = HCI_LINK_BLOCK;
683 				l2cap_start(pdu->lp_chan);
684 				link->hl_state = HCI_LINK_OPEN;
685 			}
686 
687 			pdu = TAILQ_NEXT(pdu, lp_next);
688 			if (pdu == NULL)
689 				break;
690 		}
691 	}
692 
693 	/*
694 	 * We had our turn now, move to the back of the queue to let
695 	 * other links have a go at the output buffers..
696 	 */
697 	if (TAILQ_NEXT(link, hl_next)) {
698 		TAILQ_REMOVE(&unit->hci_links, link, hl_next);
699 		TAILQ_INSERT_TAIL(&unit->hci_links, link, hl_next);
700 	}
701 }
702 
703 /*
704  * Confirm ACL packets cleared from Controller buffers. We scan our PDU
705  * list to clear pending fragments and signal upstream for more data
706  * when a PDU is complete.
707  */
708 void
709 hci_acl_complete(struct hci_link *link, int num)
710 {
711 	struct l2cap_pdu *pdu;
712 	struct l2cap_channel *chan;
713 
714 	DPRINTFN(5, "handle #%d (%d)\n", link->hl_handle, num);
715 
716 	while (num > 0) {
717 		pdu = TAILQ_FIRST(&link->hl_txq);
718 		if (pdu == NULL) {
719 			aprint_error_dev(link->hl_unit->hci_dev,
720 			    "%d packets completed on handle #%x but none pending!\n",
721 			    num, link->hl_handle);
722 
723 			return;
724 		}
725 
726 		if (num >= pdu->lp_pending) {
727 			num -= pdu->lp_pending;
728 			pdu->lp_pending = 0;
729 
730 			if (MBUFQ_FIRST(&pdu->lp_data) == NULL) {
731 				TAILQ_REMOVE(&link->hl_txq, pdu, lp_next);
732 				chan = pdu->lp_chan;
733 				if (chan != NULL) {
734 					chan->lc_pending--;
735 					(*chan->lc_proto->complete)
736 							(chan->lc_upper, 1);
737 
738 					if (chan->lc_pending == 0)
739 						l2cap_start(chan);
740 				}
741 
742 				pool_put(&l2cap_pdu_pool, pdu);
743 			}
744 		} else {
745 			pdu->lp_pending -= num;
746 			num = 0;
747 		}
748 	}
749 }
750 
751 /*******************************************************************************
752  *
753  *	HCI SCO Connections
754  */
755 
756 /*
757  * Incoming SCO Connection. We check the list for anybody willing
758  * to take it.
759  */
760 struct hci_link *
761 hci_sco_newconn(struct hci_unit *unit, bdaddr_t *bdaddr)
762 {
763 	struct sockaddr_bt laddr, raddr;
764 	struct sco_pcb *pcb, *new;
765 	struct hci_link *sco, *acl;
766 
767 	memset(&laddr, 0, sizeof(laddr));
768 	laddr.bt_len = sizeof(laddr);
769 	laddr.bt_family = AF_BLUETOOTH;
770 	bdaddr_copy(&laddr.bt_bdaddr, &unit->hci_bdaddr);
771 
772 	memset(&raddr, 0, sizeof(raddr));
773 	raddr.bt_len = sizeof(raddr);
774 	raddr.bt_family = AF_BLUETOOTH;
775 	bdaddr_copy(&raddr.bt_bdaddr, bdaddr);
776 
777 	/*
778 	 * There should already be an ACL link up and running before
779 	 * the controller sends us SCO connection requests, but you
780 	 * never know..
781 	 */
782 	acl = hci_link_lookup_bdaddr(unit, bdaddr, HCI_LINK_ACL);
783 	if (acl == NULL || acl->hl_state != HCI_LINK_OPEN)
784 		return NULL;
785 
786 	LIST_FOREACH(pcb, &sco_pcb, sp_next) {
787 		if ((pcb->sp_flags & SP_LISTENING) == 0)
788 			continue;
789 
790 		new = (*pcb->sp_proto->newconn)(pcb->sp_upper, &laddr, &raddr);
791 		if (new == NULL)
792 			continue;
793 
794 		/*
795 		 * Ok, got new pcb so we can start a new link and fill
796 		 * in all the details.
797 		 */
798 		bdaddr_copy(&new->sp_laddr, &unit->hci_bdaddr);
799 		bdaddr_copy(&new->sp_raddr, bdaddr);
800 
801 		sco = hci_link_alloc(unit, bdaddr, HCI_LINK_SCO);
802 		if (sco == NULL) {
803 			sco_detach(&new);
804 			return NULL;
805 		}
806 
807 		sco->hl_link = hci_acl_open(unit, bdaddr);
808 		KASSERT(sco->hl_link == acl);
809 
810 		sco->hl_sco = new;
811 		new->sp_link = sco;
812 
813 		new->sp_mtu = unit->hci_max_sco_size;
814 		return sco;
815 	}
816 
817 	return NULL;
818 }
819 
820 /*
821  * receive SCO packet, we only need to strip the header and send
822  * it to the right handler
823  */
824 void
825 hci_sco_recv(struct mbuf *m, struct hci_unit *unit)
826 {
827 	struct hci_link *link;
828 	hci_scodata_hdr_t hdr;
829 	uint16_t handle;
830 
831 	KASSERT(m != NULL);
832 	KASSERT(unit != NULL);
833 
834 	KASSERT(m->m_pkthdr.len >= sizeof(hdr));
835 	m_copydata(m, 0, sizeof(hdr), &hdr);
836 	m_adj(m, sizeof(hdr));
837 
838 #ifdef DIAGNOSTIC
839 	if (hdr.type != HCI_SCO_DATA_PKT) {
840 		aprint_error_dev(unit->hci_dev, "bad SCO packet type\n");
841 		goto bad;
842 	}
843 
844 	if (m->m_pkthdr.len != hdr.length) {
845 		aprint_error_dev(unit->hci_dev,
846 		    "bad SCO packet length (%d != %d)\n",
847 		    m->m_pkthdr.len, hdr.length);
848 
849 		goto bad;
850 	}
851 #endif
852 
853 	hdr.con_handle = le16toh(hdr.con_handle);
854 	handle = HCI_CON_HANDLE(hdr.con_handle);
855 
856 	link = hci_link_lookup_handle(unit, handle);
857 	if (link == NULL || link->hl_type == HCI_LINK_ACL) {
858 		DPRINTF("%s: dumping packet for unknown handle #%d\n",
859 			device_xname(unit->hci_dev), handle);
860 
861 		goto bad;
862 	}
863 
864 	(*link->hl_sco->sp_proto->input)(link->hl_sco->sp_upper, m);
865 	return;
866 
867 bad:
868 	m_freem(m);
869 }
870 
871 void
872 hci_sco_start(struct hci_link *link)
873 {
874 }
875 
876 /*
877  * SCO packets have completed at the controller, so we can
878  * signal up to free the buffer space.
879  */
880 void
881 hci_sco_complete(struct hci_link *link, int num)
882 {
883 
884 	DPRINTFN(5, "handle #%d (num=%d)\n", link->hl_handle, num);
885 	link->hl_sco->sp_pending--;
886 	(*link->hl_sco->sp_proto->complete)(link->hl_sco->sp_upper, num);
887 }
888 
889 /*******************************************************************************
890  *
891  *	Generic HCI Connection alloc/free/lookup etc
892  */
893 
894 struct hci_link *
895 hci_link_alloc(struct hci_unit *unit, bdaddr_t *bdaddr, uint8_t type)
896 {
897 	struct hci_link *link;
898 
899 	KASSERT(unit != NULL);
900 
901 	link = malloc(sizeof(struct hci_link), M_BLUETOOTH, M_NOWAIT | M_ZERO);
902 	if (link == NULL)
903 		return NULL;
904 
905 	link->hl_unit = unit;
906 	link->hl_type = type;
907 	link->hl_state = HCI_LINK_CLOSED;
908 	bdaddr_copy(&link->hl_bdaddr, bdaddr);
909 
910 	/* init ACL portion */
911 	callout_init(&link->hl_expire, 0);
912 	callout_setfunc(&link->hl_expire, hci_acl_timeout, link);
913 
914 	TAILQ_INIT(&link->hl_txq);	/* outgoing packets */
915 	TAILQ_INIT(&link->hl_reqs);	/* request queue */
916 
917 	link->hl_mtu = L2CAP_MTU_DEFAULT;		/* L2CAP signal mtu */
918 	link->hl_flush = L2CAP_FLUSH_TIMO_DEFAULT;	/* flush timeout */
919 
920 	/* init SCO portion */
921 	MBUFQ_INIT(&link->hl_data);
922 
923 	/* attach to unit */
924 	TAILQ_INSERT_TAIL(&unit->hci_links, link, hl_next);
925 	return link;
926 }
927 
928 void
929 hci_link_free(struct hci_link *link, int err)
930 {
931 	struct l2cap_req *req;
932 	struct l2cap_pdu *pdu;
933 	struct l2cap_channel *chan, *next;
934 
935 	KASSERT(link != NULL);
936 
937 	DPRINTF("#%d, type = %d, state = %d, refcnt = %d\n",
938 		link->hl_handle, link->hl_type,
939 		link->hl_state, link->hl_refcnt);
940 
941 	/* ACL reference count */
942 	if (link->hl_refcnt > 0) {
943 		next = LIST_FIRST(&l2cap_active_list);
944 		while ((chan = next) != NULL) {
945 			next = LIST_NEXT(chan, lc_ncid);
946 			if (chan->lc_link == link)
947 				l2cap_close(chan, err);
948 		}
949 	}
950 	KASSERT(link->hl_refcnt == 0);
951 
952 	/* ACL L2CAP requests.. */
953 	while ((req = TAILQ_FIRST(&link->hl_reqs)) != NULL)
954 		l2cap_request_free(req);
955 
956 	KASSERT(TAILQ_EMPTY(&link->hl_reqs));
957 
958 	/* ACL outgoing data queue */
959 	while ((pdu = TAILQ_FIRST(&link->hl_txq)) != NULL) {
960 		TAILQ_REMOVE(&link->hl_txq, pdu, lp_next);
961 		MBUFQ_DRAIN(&pdu->lp_data);
962 		if (pdu->lp_pending)
963 			link->hl_unit->hci_num_acl_pkts += pdu->lp_pending;
964 
965 		pool_put(&l2cap_pdu_pool, pdu);
966 	}
967 
968 	KASSERT(TAILQ_EMPTY(&link->hl_txq));
969 
970 	/* ACL incoming data packet */
971 	if (link->hl_rxp != NULL) {
972 		m_freem(link->hl_rxp);
973 		link->hl_rxp = NULL;
974 	}
975 
976 	/* SCO master ACL link */
977 	if (link->hl_link != NULL) {
978 		hci_acl_close(link->hl_link, err);
979 		link->hl_link = NULL;
980 	}
981 
982 	/* SCO pcb */
983 	if (link->hl_sco != NULL) {
984 		struct sco_pcb *pcb;
985 
986 		pcb = link->hl_sco;
987 		pcb->sp_link = NULL;
988 		link->hl_sco = NULL;
989 		(*pcb->sp_proto->disconnected)(pcb->sp_upper, err);
990 	}
991 
992 	/* flush any SCO data */
993 	MBUFQ_DRAIN(&link->hl_data);
994 
995 	/*
996 	 * Halt the callout - if its already running we cannot free the
997 	 * link structure but the timeout function will call us back in
998 	 * any case.
999 	 */
1000 	link->hl_state = HCI_LINK_CLOSED;
1001 	callout_stop(&link->hl_expire);
1002 	if (callout_invoking(&link->hl_expire))
1003 		return;
1004 
1005 	callout_destroy(&link->hl_expire);
1006 
1007 	/*
1008 	 * If we made a note of clock offset, keep it in a memo
1009 	 * to facilitate reconnections to this device
1010 	 */
1011 	if (link->hl_clock != 0) {
1012 		struct hci_memo *memo;
1013 
1014 		memo = hci_memo_new(link->hl_unit, &link->hl_bdaddr);
1015 		if (memo != NULL)
1016 			memo->clock_offset = link->hl_clock;
1017 	}
1018 
1019 	TAILQ_REMOVE(&link->hl_unit->hci_links, link, hl_next);
1020 	free(link, M_BLUETOOTH);
1021 }
1022 
1023 /*
1024  * Lookup HCI link by address and type. Note that for SCO links there may
1025  * be more than one link per address, so we only return links with no
1026  * handle (ie new links)
1027  */
1028 struct hci_link *
1029 hci_link_lookup_bdaddr(struct hci_unit *unit, bdaddr_t *bdaddr, uint8_t type)
1030 {
1031 	struct hci_link *link;
1032 
1033 	KASSERT(unit != NULL);
1034 	KASSERT(bdaddr != NULL);
1035 
1036 	TAILQ_FOREACH(link, &unit->hci_links, hl_next) {
1037 		if (link->hl_type != type)
1038 			continue;
1039 
1040 		if (type == HCI_LINK_SCO && link->hl_handle != 0)
1041 			continue;
1042 
1043 		if (bdaddr_same(&link->hl_bdaddr, bdaddr))
1044 			break;
1045 	}
1046 
1047 	return link;
1048 }
1049 
1050 struct hci_link *
1051 hci_link_lookup_handle(struct hci_unit *unit, uint16_t handle)
1052 {
1053 	struct hci_link *link;
1054 
1055 	KASSERT(unit != NULL);
1056 
1057 	TAILQ_FOREACH(link, &unit->hci_links, hl_next) {
1058 		if (handle == link->hl_handle)
1059 			break;
1060 	}
1061 
1062 	return link;
1063 }
1064