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