2 * QEMU Bluetooth HCI logic.
4 * Copyright (C) 2007 OpenMoko, Inc.
7 * This program is free software; you can redistribute it and/or
8 * modify it under the terms of the GNU General Public License as
9 * published by the Free Software Foundation; either version 2 of
10 * the License, or (at your option) any later version.
12 * This program is distributed in the hope that it will be useful,
13 * but WITHOUT ANY WARRANTY; without even the implied warranty of
14 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
15 * GNU General Public License for more details.
17 * You should have received a copy of the GNU General Public License
18 * along with this program; if not, see <http://www.gnu.org/licenses/>.
21 #include "qemu-common.h"
22 #include "qemu-timer.h"
28 uint8_t *(*evt_packet)(void *opaque);
29 void (*evt_submit)(void *opaque, int len);
33 uint8_t acl_buf[4096];
39 int last_cmd; /* Note: Always little-endian */
41 struct bt_device_s *conn_req_host;
48 QEMUTimer *inquiry_done;
49 QEMUTimer *inquiry_next;
54 #define HCI_HANDLE_OFFSET 0x20
55 #define HCI_HANDLES_MAX 0x10
56 struct bt_hci_master_link_s {
57 struct bt_link_s *link;
58 void (*lmp_acl_data)(struct bt_link_s *link,
59 const uint8_t *data, int start, int len);
60 QEMUTimer *acl_mode_timer;
61 } handle[HCI_HANDLES_MAX];
65 bdaddr_t awaiting_bdaddr[HCI_HANDLES_MAX];
68 uint8_t event_mask[8];
69 uint16_t voice_setting; /* Notw: Always little-endian */
70 uint16_t conn_accept_tout;
71 QEMUTimer *conn_accept_timer;
74 struct bt_device_s device;
77 #define DEFAULT_RSSI_DBM 20
79 #define hci_from_info(ptr) container_of((ptr), struct bt_hci_s, info)
80 #define hci_from_device(ptr) container_of((ptr), struct bt_hci_s, device)
82 struct bt_hci_link_s {
83 struct bt_link_s btlink;
84 uint16_t handle; /* Local */
87 /* LMP layer emulation */
89 static void bt_submit_lmp(struct bt_device_s *bt, int length, uint8_t *data)
91 int resp, resplen, error, op, tr;
105 if (op >= 0x7c) { /* Extended opcode */
106 op |= *(data ++) << 8;
107 resp = LMP_ACCEPTED_EXT;
109 respdata[0] = op >> 8;
110 respdata[1] = op & 0xff;
119 error = HCI_UNSUPPORTED_LMP_PARAMETER_VALUE;
125 case LMP_ACCEPTED_EXT:
126 /* data[0] Escape op code
127 * data[1] Extended op code
130 error = HCI_UNSUPPORTED_LMP_PARAMETER_VALUE;
136 case LMP_NOT_ACCEPTED:
141 error = HCI_UNSUPPORTED_LMP_PARAMETER_VALUE;
147 case LMP_NOT_ACCEPTED_EXT:
149 * data[1] Extended op code
153 error = HCI_UNSUPPORTED_LMP_PARAMETER_VALUE;
159 case LMP_HOST_CONNECTION_REQ:
162 case LMP_SETUP_COMPLETE:
163 resp = LMP_SETUP_COMPLETE;
169 /* data[0] Error code
172 error = HCI_UNSUPPORTED_LMP_PARAMETER_VALUE;
179 case LMP_SUPERVISION_TIMEOUT:
180 /* data[0,1] Supervision timeout
183 error = HCI_UNSUPPORTED_LMP_PARAMETER_VALUE;
189 case LMP_QUALITY_OF_SERVICE:
193 /* data[0,1] Poll interval
197 error = HCI_UNSUPPORTED_LMP_PARAMETER_VALUE;
205 case LMP_MAX_SLOT_REQ:
209 error = HCI_UNSUPPORTED_LMP_PARAMETER_VALUE;
217 /* data[0-15] Random number
220 error = HCI_UNSUPPORTED_LMP_PARAMETER_VALUE;
223 if (op == LMP_AU_RAND) {
224 if (bt->key_present) {
227 /* XXX: [Part H] Section 6.1 on page 801 */
229 error = HCI_PIN_OR_KEY_MISSING;
232 } else if (op == LMP_IN_RAND) {
233 error = HCI_PAIRING_NOT_ALLOWED;
236 /* XXX: [Part H] Section 3.2 on page 779 */
239 memcpy(respdata + 1, bt->key, 16);
241 error = HCI_UNIT_LINK_KEY_USED;
250 error = HCI_UNSUPPORTED_LMP_PARAMETER_VALUE;
253 memcpy(bt->key, data, 16);
258 /* data[0-3] Authentication response
261 error = HCI_UNSUPPORTED_LMP_PARAMETER_VALUE;
266 case LMP_CLKOFFSET_REQ:
267 resp = LMP_CLKOFFSET_RES;
273 case LMP_CLKOFFSET_RES:
274 /* data[0,1] Clock offset
275 * (Slave to master only)
278 error = HCI_UNSUPPORTED_LMP_PARAMETER_VALUE;
283 case LMP_VERSION_REQ:
284 case LMP_VERSION_RES:
287 * data[3,4] SubVersNr
290 error = HCI_UNSUPPORTED_LMP_PARAMETER_VALUE;
293 if (op == LMP_VERSION_REQ) {
294 resp = LMP_VERSION_RES;
305 case LMP_FEATURES_REQ:
306 case LMP_FEATURES_RES:
307 /* data[0-7] Features
310 error = HCI_UNSUPPORTED_LMP_PARAMETER_VALUE;
313 if (op == LMP_FEATURES_REQ) {
314 resp = LMP_FEATURES_RES;
316 respdata[1] = (bt->lmp_caps >> 0) & 0xff;
317 respdata[2] = (bt->lmp_caps >> 8) & 0xff;
318 respdata[3] = (bt->lmp_caps >> 16) & 0xff;
319 respdata[4] = (bt->lmp_caps >> 24) & 0xff;
320 respdata[5] = (bt->lmp_caps >> 32) & 0xff;
321 respdata[6] = (bt->lmp_caps >> 40) & 0xff;
322 respdata[7] = (bt->lmp_caps >> 48) & 0xff;
323 respdata[8] = (bt->lmp_caps >> 56) & 0xff;
329 /* data[0] Name offset
332 error = HCI_UNSUPPORTED_LMP_PARAMETER_VALUE;
337 respdata[1] = data[0];
338 respdata[2] = strlen(bt->lmp_name);
339 memset(respdata + 3, 0x00, 14);
340 if (respdata[2] > respdata[1])
341 memcpy(respdata + 3, bt->lmp_name + respdata[1],
342 respdata[2] - respdata[1]);
346 /* data[0] Name offset
347 * data[1] Name length
348 * data[2-15] Name fragment
351 error = HCI_UNSUPPORTED_LMP_PARAMETER_VALUE;
358 error = HCI_UNKNOWN_LMP_PDU;
362 resp = LMP_NOT_ACCEPTED_EXT;
364 respdata[0] = op >> 8;
365 respdata[1] = op & 0xff;
368 resp = LMP_NOT_ACCEPTED;
370 respdata[0] = op & 0xff;
379 respdata[0] = resp >> 8;
380 respdata[1] = resp & 0xff;
382 respdata[0] = resp & 0xff;
388 static void bt_submit_raw_acl(struct bt_piconet_s *net, int length, uint8_t *data)
390 struct bt_device_s *slave;
399 switch (data[0] & 3) {
401 bt_submit_lmp(slave, length - 1, data + 1);
403 case LLID_ACLU_START:
405 bt_sumbit_l2cap(slave, length - 1, data + 1, (data[0] >> 2) & 1);
415 /* HCI layer emulation */
417 /* Note: we could ignore endiannes because unswapped handles will still
418 * be valid as connection identifiers for the guest - they don't have to
419 * be continuously allocated. We do it though, to preserve similar
420 * behaviour between hosts. Some things, like the BD_ADDR cannot be
421 * preserved though (for example if a real hci is used). */
422 #ifdef HOST_WORDS_BIGENDIAN
423 # define HNDL(raw) bswap16(raw)
425 # define HNDL(raw) (raw)
428 static const uint8_t bt_event_reserved_mask[8] = {
429 0xff, 0x9f, 0xfb, 0xff, 0x07, 0x18, 0x00, 0x00,
432 static inline uint8_t *bt_hci_event_start(struct bt_hci_s *hci,
435 uint8_t *packet, mask;
439 fprintf(stderr, "%s: HCI event params too long (%ib)\n",
444 mask_byte = (evt - 1) >> 3;
445 mask = 1 << ((evt - 1) & 3);
446 if (mask & bt_event_reserved_mask[mask_byte] & ~hci->event_mask[mask_byte])
449 packet = hci->evt_packet(hci->opaque);
456 static inline void bt_hci_event(struct bt_hci_s *hci, int evt,
457 void *params, int len)
459 uint8_t *packet = bt_hci_event_start(hci, evt, len);
465 memcpy(packet, params, len);
467 hci->evt_submit(hci->opaque, len + 2);
470 static inline void bt_hci_event_status(struct bt_hci_s *hci, int status)
472 evt_cmd_status params = {
475 .opcode = hci->last_cmd,
478 bt_hci_event(hci, EVT_CMD_STATUS, ¶ms, EVT_CMD_STATUS_SIZE);
481 static inline void bt_hci_event_complete(struct bt_hci_s *hci,
484 uint8_t *packet = bt_hci_event_start(hci, EVT_CMD_COMPLETE,
485 len + EVT_CMD_COMPLETE_SIZE);
486 evt_cmd_complete *params = (evt_cmd_complete *) packet;
492 params->opcode = hci->last_cmd;
494 memcpy(&packet[EVT_CMD_COMPLETE_SIZE], ret, len);
496 hci->evt_submit(hci->opaque, len + EVT_CMD_COMPLETE_SIZE + 2);
499 static void bt_hci_inquiry_done(void *opaque)
501 struct bt_hci_s *hci = (struct bt_hci_s *) opaque;
502 uint8_t status = HCI_SUCCESS;
504 if (!hci->lm.periodic)
507 /* The specification is inconsistent about this one. Page 565 reads
508 * "The event parameters of Inquiry Complete event will have a summary
509 * of the result from the Inquiry process, which reports the number of
510 * nearby Bluetooth devices that responded [so hci->responses].", but
511 * Event Parameters (see page 729) has only Status. */
512 bt_hci_event(hci, EVT_INQUIRY_COMPLETE, &status, 1);
515 static void bt_hci_inquiry_result_standard(struct bt_hci_s *hci,
516 struct bt_device_s *slave)
518 inquiry_info params = {
520 .bdaddr = BAINIT(&slave->bd_addr),
521 .pscan_rep_mode = 0x00, /* R0 */
522 .pscan_period_mode = 0x00, /* P0 - deprecated */
523 .pscan_mode = 0x00, /* Standard scan - deprecated */
524 .dev_class[0] = slave->class[0],
525 .dev_class[1] = slave->class[1],
526 .dev_class[2] = slave->class[2],
527 /* TODO: return the clkoff *differenece* */
528 .clock_offset = slave->clkoff, /* Note: no swapping */
531 bt_hci_event(hci, EVT_INQUIRY_RESULT, ¶ms, INQUIRY_INFO_SIZE);
534 static void bt_hci_inquiry_result_with_rssi(struct bt_hci_s *hci,
535 struct bt_device_s *slave)
537 inquiry_info_with_rssi params = {
539 .bdaddr = BAINIT(&slave->bd_addr),
540 .pscan_rep_mode = 0x00, /* R0 */
541 .pscan_period_mode = 0x00, /* P0 - deprecated */
542 .dev_class[0] = slave->class[0],
543 .dev_class[1] = slave->class[1],
544 .dev_class[2] = slave->class[2],
545 /* TODO: return the clkoff *differenece* */
546 .clock_offset = slave->clkoff, /* Note: no swapping */
547 .rssi = DEFAULT_RSSI_DBM,
550 bt_hci_event(hci, EVT_INQUIRY_RESULT_WITH_RSSI,
551 ¶ms, INQUIRY_INFO_WITH_RSSI_SIZE);
554 static void bt_hci_inquiry_result(struct bt_hci_s *hci,
555 struct bt_device_s *slave)
557 if (!slave->inquiry_scan || !hci->lm.responses_left)
560 hci->lm.responses_left --;
561 hci->lm.responses ++;
563 switch (hci->lm.inquiry_mode) {
565 bt_hci_inquiry_result_standard(hci, slave);
568 bt_hci_inquiry_result_with_rssi(hci, slave);
571 fprintf(stderr, "%s: bad inquiry mode %02x\n", __FUNCTION__,
572 hci->lm.inquiry_mode);
577 static void bt_hci_mod_timer_1280ms(QEMUTimer *timer, int period)
579 qemu_mod_timer(timer, qemu_get_clock_ns(vm_clock) +
580 muldiv64(period << 7, get_ticks_per_sec(), 100));
583 static void bt_hci_inquiry_start(struct bt_hci_s *hci, int length)
585 struct bt_device_s *slave;
587 hci->lm.inquiry_length = length;
588 for (slave = hci->device.net->slave; slave; slave = slave->next)
589 /* Don't uncover ourselves. */
590 if (slave != &hci->device)
591 bt_hci_inquiry_result(hci, slave);
593 /* TODO: register for a callback on a new device's addition to the
594 * scatternet so that if it's added before inquiry_length expires,
595 * an Inquiry Result is generated immediately. Alternatively re-loop
596 * through the devices on the inquiry_length expiration and report
597 * devices not seen before. */
598 if (hci->lm.responses_left)
599 bt_hci_mod_timer_1280ms(hci->lm.inquiry_done, hci->lm.inquiry_length);
601 bt_hci_inquiry_done(hci);
603 if (hci->lm.periodic)
604 bt_hci_mod_timer_1280ms(hci->lm.inquiry_next, hci->lm.inquiry_period);
607 static void bt_hci_inquiry_next(void *opaque)
609 struct bt_hci_s *hci = (struct bt_hci_s *) opaque;
611 hci->lm.responses_left += hci->lm.responses;
612 hci->lm.responses = 0;
613 bt_hci_inquiry_start(hci, hci->lm.inquiry_length);
616 static inline int bt_hci_handle_bad(struct bt_hci_s *hci, uint16_t handle)
618 return !(handle & HCI_HANDLE_OFFSET) ||
619 handle >= (HCI_HANDLE_OFFSET | HCI_HANDLES_MAX) ||
620 !hci->lm.handle[handle & ~HCI_HANDLE_OFFSET].link;
623 static inline int bt_hci_role_master(struct bt_hci_s *hci, uint16_t handle)
625 return !!(hci->lm.role_bmp & (1 << (handle & ~HCI_HANDLE_OFFSET)));
628 static inline struct bt_device_s *bt_hci_remote_dev(struct bt_hci_s *hci,
631 struct bt_link_s *link = hci->lm.handle[handle & ~HCI_HANDLE_OFFSET].link;
633 return bt_hci_role_master(hci, handle) ? link->slave : link->host;
636 static void bt_hci_mode_tick(void *opaque);
637 static void bt_hci_lmp_link_establish(struct bt_hci_s *hci,
638 struct bt_link_s *link, int master)
640 hci->lm.handle[hci->lm.last_handle].link = link;
643 /* We are the master side of an ACL link */
644 hci->lm.role_bmp |= 1 << hci->lm.last_handle;
646 hci->lm.handle[hci->lm.last_handle].lmp_acl_data =
647 link->slave->lmp_acl_data;
649 /* We are the slave side of an ACL link */
650 hci->lm.role_bmp &= ~(1 << hci->lm.last_handle);
652 hci->lm.handle[hci->lm.last_handle].lmp_acl_data =
653 link->host->lmp_acl_resp;
658 link->acl_mode = acl_active;
659 hci->lm.handle[hci->lm.last_handle].acl_mode_timer =
660 qemu_new_timer_ns(vm_clock, bt_hci_mode_tick, link);
664 static void bt_hci_lmp_link_teardown(struct bt_hci_s *hci, uint16_t handle)
666 handle &= ~HCI_HANDLE_OFFSET;
667 hci->lm.handle[handle].link = NULL;
669 if (bt_hci_role_master(hci, handle)) {
670 qemu_del_timer(hci->lm.handle[handle].acl_mode_timer);
671 qemu_free_timer(hci->lm.handle[handle].acl_mode_timer);
675 static int bt_hci_connect(struct bt_hci_s *hci, bdaddr_t *bdaddr)
677 struct bt_device_s *slave;
678 struct bt_link_s link;
680 for (slave = hci->device.net->slave; slave; slave = slave->next)
681 if (slave->page_scan && !bacmp(&slave->bd_addr, bdaddr))
683 if (!slave || slave == &hci->device)
686 bacpy(&hci->lm.awaiting_bdaddr[hci->lm.connecting ++], &slave->bd_addr);
689 link.host = &hci->device;
690 link.slave->lmp_connection_request(&link); /* Always last */
695 static void bt_hci_connection_reject(struct bt_hci_s *hci,
696 struct bt_device_s *host, uint8_t because)
698 struct bt_link_s link = {
699 .slave = &hci->device,
701 /* Rest uninitialised */
704 host->reject_reason = because;
705 host->lmp_connection_complete(&link);
708 static void bt_hci_connection_reject_event(struct bt_hci_s *hci,
711 evt_conn_complete params;
713 params.status = HCI_NO_CONNECTION;
715 bacpy(¶ms.bdaddr, bdaddr);
716 params.link_type = ACL_LINK;
717 params.encr_mode = 0x00; /* Encryption not required */
718 bt_hci_event(hci, EVT_CONN_COMPLETE, ¶ms, EVT_CONN_COMPLETE_SIZE);
721 static void bt_hci_connection_accept(struct bt_hci_s *hci,
722 struct bt_device_s *host)
724 struct bt_hci_link_s *link = g_malloc0(sizeof(struct bt_hci_link_s));
725 evt_conn_complete params;
727 uint8_t status = HCI_SUCCESS;
728 int tries = HCI_HANDLES_MAX;
730 /* Make a connection handle */
732 while (hci->lm.handle[++ hci->lm.last_handle].link && -- tries)
733 hci->lm.last_handle &= HCI_HANDLES_MAX - 1;
734 handle = hci->lm.last_handle | HCI_HANDLE_OFFSET;
735 } while ((handle == hci->asb_handle || handle == hci->psb_handle) &&
740 bt_hci_connection_reject(hci, host, HCI_REJECTED_LIMITED_RESOURCES);
741 status = HCI_NO_CONNECTION;
745 link->btlink.slave = &hci->device;
746 link->btlink.host = host;
747 link->handle = handle;
749 /* Link established */
750 bt_hci_lmp_link_establish(hci, &link->btlink, 0);
753 params.status = status;
754 params.handle = HNDL(handle);
755 bacpy(¶ms.bdaddr, &host->bd_addr);
756 params.link_type = ACL_LINK;
757 params.encr_mode = 0x00; /* Encryption not required */
758 bt_hci_event(hci, EVT_CONN_COMPLETE, ¶ms, EVT_CONN_COMPLETE_SIZE);
760 /* Neets to be done at the very end because it can trigger a (nested)
761 * disconnected, in case the other and had cancelled the request
763 if (status == HCI_SUCCESS) {
764 host->reject_reason = 0;
765 host->lmp_connection_complete(&link->btlink);
769 static void bt_hci_lmp_connection_request(struct bt_link_s *link)
771 struct bt_hci_s *hci = hci_from_device(link->slave);
772 evt_conn_request params;
774 if (hci->conn_req_host) {
775 bt_hci_connection_reject(hci, link->host,
776 HCI_REJECTED_LIMITED_RESOURCES);
779 hci->conn_req_host = link->host;
780 /* TODO: if masked and auto-accept, then auto-accept,
781 * if masked and not auto-accept, then auto-reject */
782 /* TODO: kick the hci->conn_accept_timer, timeout after
783 * hci->conn_accept_tout * 0.625 msec */
785 bacpy(¶ms.bdaddr, &link->host->bd_addr);
786 memcpy(¶ms.dev_class, &link->host->class, sizeof(params.dev_class));
787 params.link_type = ACL_LINK;
788 bt_hci_event(hci, EVT_CONN_REQUEST, ¶ms, EVT_CONN_REQUEST_SIZE);
792 static void bt_hci_conn_accept_timeout(void *opaque)
794 struct bt_hci_s *hci = (struct bt_hci_s *) opaque;
796 if (!hci->conn_req_host)
797 /* Already accepted or rejected. If the other end cancelled the
798 * connection request then we still have to reject or accept it
799 * and then we'll get a disconnect. */
805 /* Remove from the list of devices which we wanted to connect to and
806 * are awaiting a response from. If the callback sees a response from
807 * a device which is not on the list it will assume it's a connection
808 * that's been cancelled by the host in the meantime and immediately
809 * try to detach the link and send a Connection Complete. */
810 static int bt_hci_lmp_connection_ready(struct bt_hci_s *hci,
815 for (i = 0; i < hci->lm.connecting; i ++)
816 if (!bacmp(&hci->lm.awaiting_bdaddr[i], bdaddr)) {
817 if (i < -- hci->lm.connecting)
818 bacpy(&hci->lm.awaiting_bdaddr[i],
819 &hci->lm.awaiting_bdaddr[hci->lm.connecting]);
826 static void bt_hci_lmp_connection_complete(struct bt_link_s *link)
828 struct bt_hci_s *hci = hci_from_device(link->host);
829 evt_conn_complete params;
831 uint8_t status = HCI_SUCCESS;
832 int tries = HCI_HANDLES_MAX;
834 if (bt_hci_lmp_connection_ready(hci, &link->slave->bd_addr)) {
835 if (!hci->device.reject_reason)
836 link->slave->lmp_disconnect_slave(link);
838 status = HCI_NO_CONNECTION;
842 if (hci->device.reject_reason) {
844 status = hci->device.reject_reason;
848 /* Make a connection handle */
850 while (hci->lm.handle[++ hci->lm.last_handle].link && -- tries)
851 hci->lm.last_handle &= HCI_HANDLES_MAX - 1;
852 handle = hci->lm.last_handle | HCI_HANDLE_OFFSET;
853 } while ((handle == hci->asb_handle || handle == hci->psb_handle) &&
857 link->slave->lmp_disconnect_slave(link);
858 status = HCI_NO_CONNECTION;
862 /* Link established */
863 link->handle = handle;
864 bt_hci_lmp_link_establish(hci, link, 1);
867 params.status = status;
868 params.handle = HNDL(handle);
869 params.link_type = ACL_LINK;
870 bacpy(¶ms.bdaddr, &link->slave->bd_addr);
871 params.encr_mode = 0x00; /* Encryption not required */
872 bt_hci_event(hci, EVT_CONN_COMPLETE, ¶ms, EVT_CONN_COMPLETE_SIZE);
875 static void bt_hci_disconnect(struct bt_hci_s *hci,
876 uint16_t handle, int reason)
878 struct bt_link_s *btlink =
879 hci->lm.handle[handle & ~HCI_HANDLE_OFFSET].link;
880 struct bt_hci_link_s *link;
881 evt_disconn_complete params;
883 if (bt_hci_role_master(hci, handle)) {
884 btlink->slave->reject_reason = reason;
885 btlink->slave->lmp_disconnect_slave(btlink);
886 /* The link pointer is invalid from now on */
891 btlink->host->reject_reason = reason;
892 btlink->host->lmp_disconnect_master(btlink);
894 /* We are the slave, we get to clean this burden */
895 link = (struct bt_hci_link_s *) btlink;
899 bt_hci_lmp_link_teardown(hci, handle);
901 params.status = HCI_SUCCESS;
902 params.handle = HNDL(handle);
903 params.reason = HCI_CONNECTION_TERMINATED;
904 bt_hci_event(hci, EVT_DISCONN_COMPLETE,
905 ¶ms, EVT_DISCONN_COMPLETE_SIZE);
908 /* TODO: use only one function */
909 static void bt_hci_lmp_disconnect_host(struct bt_link_s *link)
911 struct bt_hci_s *hci = hci_from_device(link->host);
912 uint16_t handle = link->handle;
913 evt_disconn_complete params;
915 bt_hci_lmp_link_teardown(hci, handle);
917 params.status = HCI_SUCCESS;
918 params.handle = HNDL(handle);
919 params.reason = hci->device.reject_reason;
920 bt_hci_event(hci, EVT_DISCONN_COMPLETE,
921 ¶ms, EVT_DISCONN_COMPLETE_SIZE);
924 static void bt_hci_lmp_disconnect_slave(struct bt_link_s *btlink)
926 struct bt_hci_link_s *link = (struct bt_hci_link_s *) btlink;
927 struct bt_hci_s *hci = hci_from_device(btlink->slave);
928 uint16_t handle = link->handle;
929 evt_disconn_complete params;
933 bt_hci_lmp_link_teardown(hci, handle);
935 params.status = HCI_SUCCESS;
936 params.handle = HNDL(handle);
937 params.reason = hci->device.reject_reason;
938 bt_hci_event(hci, EVT_DISCONN_COMPLETE,
939 ¶ms, EVT_DISCONN_COMPLETE_SIZE);
942 static int bt_hci_name_req(struct bt_hci_s *hci, bdaddr_t *bdaddr)
944 struct bt_device_s *slave;
945 evt_remote_name_req_complete params;
947 for (slave = hci->device.net->slave; slave; slave = slave->next)
948 if (slave->page_scan && !bacmp(&slave->bd_addr, bdaddr))
953 bt_hci_event_status(hci, HCI_SUCCESS);
955 params.status = HCI_SUCCESS;
956 bacpy(¶ms.bdaddr, &slave->bd_addr);
957 pstrcpy(params.name, sizeof(params.name), slave->lmp_name ?: "");
958 bt_hci_event(hci, EVT_REMOTE_NAME_REQ_COMPLETE,
959 ¶ms, EVT_REMOTE_NAME_REQ_COMPLETE_SIZE);
964 static int bt_hci_features_req(struct bt_hci_s *hci, uint16_t handle)
966 struct bt_device_s *slave;
967 evt_read_remote_features_complete params;
969 if (bt_hci_handle_bad(hci, handle))
972 slave = bt_hci_remote_dev(hci, handle);
974 bt_hci_event_status(hci, HCI_SUCCESS);
976 params.status = HCI_SUCCESS;
977 params.handle = HNDL(handle);
978 params.features[0] = (slave->lmp_caps >> 0) & 0xff;
979 params.features[1] = (slave->lmp_caps >> 8) & 0xff;
980 params.features[2] = (slave->lmp_caps >> 16) & 0xff;
981 params.features[3] = (slave->lmp_caps >> 24) & 0xff;
982 params.features[4] = (slave->lmp_caps >> 32) & 0xff;
983 params.features[5] = (slave->lmp_caps >> 40) & 0xff;
984 params.features[6] = (slave->lmp_caps >> 48) & 0xff;
985 params.features[7] = (slave->lmp_caps >> 56) & 0xff;
986 bt_hci_event(hci, EVT_READ_REMOTE_FEATURES_COMPLETE,
987 ¶ms, EVT_READ_REMOTE_FEATURES_COMPLETE_SIZE);
992 static int bt_hci_version_req(struct bt_hci_s *hci, uint16_t handle)
994 evt_read_remote_version_complete params;
996 if (bt_hci_handle_bad(hci, handle))
999 bt_hci_remote_dev(hci, handle);
1001 bt_hci_event_status(hci, HCI_SUCCESS);
1003 params.status = HCI_SUCCESS;
1004 params.handle = HNDL(handle);
1005 params.lmp_ver = 0x03;
1006 params.manufacturer = cpu_to_le16(0xa000);
1007 params.lmp_subver = cpu_to_le16(0xa607);
1008 bt_hci_event(hci, EVT_READ_REMOTE_VERSION_COMPLETE,
1009 ¶ms, EVT_READ_REMOTE_VERSION_COMPLETE_SIZE);
1014 static int bt_hci_clkoffset_req(struct bt_hci_s *hci, uint16_t handle)
1016 struct bt_device_s *slave;
1017 evt_read_clock_offset_complete params;
1019 if (bt_hci_handle_bad(hci, handle))
1022 slave = bt_hci_remote_dev(hci, handle);
1024 bt_hci_event_status(hci, HCI_SUCCESS);
1026 params.status = HCI_SUCCESS;
1027 params.handle = HNDL(handle);
1028 /* TODO: return the clkoff *differenece* */
1029 params.clock_offset = slave->clkoff; /* Note: no swapping */
1030 bt_hci_event(hci, EVT_READ_CLOCK_OFFSET_COMPLETE,
1031 ¶ms, EVT_READ_CLOCK_OFFSET_COMPLETE_SIZE);
1036 static void bt_hci_event_mode(struct bt_hci_s *hci, struct bt_link_s *link,
1039 evt_mode_change params = {
1040 .status = HCI_SUCCESS,
1041 .handle = HNDL(handle),
1042 .mode = link->acl_mode,
1043 .interval = cpu_to_le16(link->acl_interval),
1046 bt_hci_event(hci, EVT_MODE_CHANGE, ¶ms, EVT_MODE_CHANGE_SIZE);
1049 static void bt_hci_lmp_mode_change_master(struct bt_hci_s *hci,
1050 struct bt_link_s *link, int mode, uint16_t interval)
1052 link->acl_mode = mode;
1053 link->acl_interval = interval;
1055 bt_hci_event_mode(hci, link, link->handle);
1057 link->slave->lmp_mode_change(link);
1060 static void bt_hci_lmp_mode_change_slave(struct bt_link_s *btlink)
1062 struct bt_hci_link_s *link = (struct bt_hci_link_s *) btlink;
1063 struct bt_hci_s *hci = hci_from_device(btlink->slave);
1065 bt_hci_event_mode(hci, btlink, link->handle);
1068 static int bt_hci_mode_change(struct bt_hci_s *hci, uint16_t handle,
1069 int interval, int mode)
1071 struct bt_hci_master_link_s *link;
1073 if (bt_hci_handle_bad(hci, handle) || !bt_hci_role_master(hci, handle))
1076 link = &hci->lm.handle[handle & ~HCI_HANDLE_OFFSET];
1077 if (link->link->acl_mode != acl_active) {
1078 bt_hci_event_status(hci, HCI_COMMAND_DISALLOWED);
1082 bt_hci_event_status(hci, HCI_SUCCESS);
1084 qemu_mod_timer(link->acl_mode_timer, qemu_get_clock_ns(vm_clock) +
1085 muldiv64(interval * 625, get_ticks_per_sec(), 1000000));
1086 bt_hci_lmp_mode_change_master(hci, link->link, mode, interval);
1091 static int bt_hci_mode_cancel(struct bt_hci_s *hci, uint16_t handle, int mode)
1093 struct bt_hci_master_link_s *link;
1095 if (bt_hci_handle_bad(hci, handle) || !bt_hci_role_master(hci, handle))
1098 link = &hci->lm.handle[handle & ~HCI_HANDLE_OFFSET];
1099 if (link->link->acl_mode != mode) {
1100 bt_hci_event_status(hci, HCI_COMMAND_DISALLOWED);
1105 bt_hci_event_status(hci, HCI_SUCCESS);
1107 qemu_del_timer(link->acl_mode_timer);
1108 bt_hci_lmp_mode_change_master(hci, link->link, acl_active, 0);
1113 static void bt_hci_mode_tick(void *opaque)
1115 struct bt_link_s *link = opaque;
1116 struct bt_hci_s *hci = hci_from_device(link->host);
1118 bt_hci_lmp_mode_change_master(hci, link, acl_active, 0);
1121 static void bt_hci_reset(struct bt_hci_s *hci)
1125 hci->lm.connecting = 0;
1127 hci->event_mask[0] = 0xff;
1128 hci->event_mask[1] = 0xff;
1129 hci->event_mask[2] = 0xff;
1130 hci->event_mask[3] = 0xff;
1131 hci->event_mask[4] = 0xff;
1132 hci->event_mask[5] = 0x1f;
1133 hci->event_mask[6] = 0x00;
1134 hci->event_mask[7] = 0x00;
1135 hci->device.inquiry_scan = 0;
1136 hci->device.page_scan = 0;
1137 if (hci->device.lmp_name)
1138 g_free((void *) hci->device.lmp_name);
1139 hci->device.lmp_name = NULL;
1140 hci->device.class[0] = 0x00;
1141 hci->device.class[1] = 0x00;
1142 hci->device.class[2] = 0x00;
1143 hci->voice_setting = 0x0000;
1144 hci->conn_accept_tout = 0x1f40;
1145 hci->lm.inquiry_mode = 0x00;
1147 hci->psb_handle = 0x000;
1148 hci->asb_handle = 0x000;
1150 /* XXX: qemu_del_timer(sl->acl_mode_timer); for all links */
1151 qemu_del_timer(hci->lm.inquiry_done);
1152 qemu_del_timer(hci->lm.inquiry_next);
1153 qemu_del_timer(hci->conn_accept_timer);
1156 static void bt_hci_read_local_version_rp(struct bt_hci_s *hci)
1158 read_local_version_rp lv = {
1159 .status = HCI_SUCCESS,
1161 .hci_rev = cpu_to_le16(0xa607),
1163 .manufacturer = cpu_to_le16(0xa000),
1164 .lmp_subver = cpu_to_le16(0xa607),
1167 bt_hci_event_complete(hci, &lv, READ_LOCAL_VERSION_RP_SIZE);
1170 static void bt_hci_read_local_commands_rp(struct bt_hci_s *hci)
1172 read_local_commands_rp lc = {
1173 .status = HCI_SUCCESS,
1176 /* Also, keep in sync with hci->device.lmp_caps in bt_new_hci */
1177 0xbf, 0x80, 0xf9, 0x03, 0xb2, 0xc0, 0x03, 0xc3,
1178 0x00, 0x0f, 0x80, 0x00, 0xc0, 0x00, 0xe8, 0x13,
1179 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
1180 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
1181 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
1182 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
1183 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
1184 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
1188 bt_hci_event_complete(hci, &lc, READ_LOCAL_COMMANDS_RP_SIZE);
1191 static void bt_hci_read_local_features_rp(struct bt_hci_s *hci)
1193 read_local_features_rp lf = {
1194 .status = HCI_SUCCESS,
1196 (hci->device.lmp_caps >> 0) & 0xff,
1197 (hci->device.lmp_caps >> 8) & 0xff,
1198 (hci->device.lmp_caps >> 16) & 0xff,
1199 (hci->device.lmp_caps >> 24) & 0xff,
1200 (hci->device.lmp_caps >> 32) & 0xff,
1201 (hci->device.lmp_caps >> 40) & 0xff,
1202 (hci->device.lmp_caps >> 48) & 0xff,
1203 (hci->device.lmp_caps >> 56) & 0xff,
1207 bt_hci_event_complete(hci, &lf, READ_LOCAL_FEATURES_RP_SIZE);
1210 static void bt_hci_read_local_ext_features_rp(struct bt_hci_s *hci, int page)
1212 read_local_ext_features_rp lef = {
1213 .status = HCI_SUCCESS,
1215 .max_page_num = 0x00,
1218 0x5f, 0x35, 0x85, 0x7e, 0x9b, 0x19, 0x00, 0x80,
1222 memset(lef.features, 0, sizeof(lef.features));
1224 bt_hci_event_complete(hci, &lef, READ_LOCAL_EXT_FEATURES_RP_SIZE);
1227 static void bt_hci_read_buffer_size_rp(struct bt_hci_s *hci)
1229 read_buffer_size_rp bs = {
1230 /* This can be made configurable, for one standard USB dongle HCI
1231 * the four values are cpu_to_le16(0x0180), 0x40,
1232 * cpu_to_le16(0x0008), cpu_to_le16(0x0008). */
1233 .status = HCI_SUCCESS,
1234 .acl_mtu = cpu_to_le16(0x0200),
1236 .acl_max_pkt = cpu_to_le16(0x0001),
1237 .sco_max_pkt = cpu_to_le16(0x0000),
1240 bt_hci_event_complete(hci, &bs, READ_BUFFER_SIZE_RP_SIZE);
1243 /* Deprecated in V2.0 (page 661) */
1244 static void bt_hci_read_country_code_rp(struct bt_hci_s *hci)
1246 read_country_code_rp cc ={
1247 .status = HCI_SUCCESS,
1248 .country_code = 0x00, /* North America & Europe^1 and Japan */
1251 bt_hci_event_complete(hci, &cc, READ_COUNTRY_CODE_RP_SIZE);
1253 /* ^1. Except France, sorry */
1256 static void bt_hci_read_bd_addr_rp(struct bt_hci_s *hci)
1258 read_bd_addr_rp ba = {
1259 .status = HCI_SUCCESS,
1260 .bdaddr = BAINIT(&hci->device.bd_addr),
1263 bt_hci_event_complete(hci, &ba, READ_BD_ADDR_RP_SIZE);
1266 static int bt_hci_link_quality_rp(struct bt_hci_s *hci, uint16_t handle)
1268 read_link_quality_rp lq = {
1269 .status = HCI_SUCCESS,
1270 .handle = HNDL(handle),
1271 .link_quality = 0xff,
1274 if (bt_hci_handle_bad(hci, handle))
1275 lq.status = HCI_NO_CONNECTION;
1277 bt_hci_event_complete(hci, &lq, READ_LINK_QUALITY_RP_SIZE);
1281 /* Generate a Command Complete event with only the Status parameter */
1282 static inline void bt_hci_event_complete_status(struct bt_hci_s *hci,
1285 bt_hci_event_complete(hci, &status, 1);
1288 static inline void bt_hci_event_complete_conn_cancel(struct bt_hci_s *hci,
1289 uint8_t status, bdaddr_t *bd_addr)
1291 create_conn_cancel_rp params = {
1293 .bdaddr = BAINIT(bd_addr),
1296 bt_hci_event_complete(hci, ¶ms, CREATE_CONN_CANCEL_RP_SIZE);
1299 static inline void bt_hci_event_auth_complete(struct bt_hci_s *hci,
1302 evt_auth_complete params = {
1303 .status = HCI_SUCCESS,
1304 .handle = HNDL(handle),
1307 bt_hci_event(hci, EVT_AUTH_COMPLETE, ¶ms, EVT_AUTH_COMPLETE_SIZE);
1310 static inline void bt_hci_event_encrypt_change(struct bt_hci_s *hci,
1311 uint16_t handle, uint8_t mode)
1313 evt_encrypt_change params = {
1314 .status = HCI_SUCCESS,
1315 .handle = HNDL(handle),
1319 bt_hci_event(hci, EVT_ENCRYPT_CHANGE, ¶ms, EVT_ENCRYPT_CHANGE_SIZE);
1322 static inline void bt_hci_event_complete_name_cancel(struct bt_hci_s *hci,
1325 remote_name_req_cancel_rp params = {
1326 .status = HCI_INVALID_PARAMETERS,
1327 .bdaddr = BAINIT(bd_addr),
1330 bt_hci_event_complete(hci, ¶ms, REMOTE_NAME_REQ_CANCEL_RP_SIZE);
1333 static inline void bt_hci_event_read_remote_ext_features(struct bt_hci_s *hci,
1336 evt_read_remote_ext_features_complete params = {
1337 .status = HCI_UNSUPPORTED_FEATURE,
1338 .handle = HNDL(handle),
1339 /* Rest uninitialised */
1342 bt_hci_event(hci, EVT_READ_REMOTE_EXT_FEATURES_COMPLETE,
1343 ¶ms, EVT_READ_REMOTE_EXT_FEATURES_COMPLETE_SIZE);
1346 static inline void bt_hci_event_complete_lmp_handle(struct bt_hci_s *hci,
1349 read_lmp_handle_rp params = {
1350 .status = HCI_NO_CONNECTION,
1351 .handle = HNDL(handle),
1353 /* Rest uninitialised */
1356 bt_hci_event_complete(hci, ¶ms, READ_LMP_HANDLE_RP_SIZE);
1359 static inline void bt_hci_event_complete_role_discovery(struct bt_hci_s *hci,
1360 int status, uint16_t handle, int master)
1362 role_discovery_rp params = {
1364 .handle = HNDL(handle),
1365 .role = master ? 0x00 : 0x01,
1368 bt_hci_event_complete(hci, ¶ms, ROLE_DISCOVERY_RP_SIZE);
1371 static inline void bt_hci_event_complete_flush(struct bt_hci_s *hci,
1372 int status, uint16_t handle)
1376 .handle = HNDL(handle),
1379 bt_hci_event_complete(hci, ¶ms, FLUSH_RP_SIZE);
1382 static inline void bt_hci_event_complete_read_local_name(struct bt_hci_s *hci)
1384 read_local_name_rp params;
1385 params.status = HCI_SUCCESS;
1386 memset(params.name, 0, sizeof(params.name));
1387 if (hci->device.lmp_name)
1388 pstrcpy(params.name, sizeof(params.name), hci->device.lmp_name);
1390 bt_hci_event_complete(hci, ¶ms, READ_LOCAL_NAME_RP_SIZE);
1393 static inline void bt_hci_event_complete_read_conn_accept_timeout(
1394 struct bt_hci_s *hci)
1396 read_conn_accept_timeout_rp params = {
1397 .status = HCI_SUCCESS,
1398 .timeout = cpu_to_le16(hci->conn_accept_tout),
1401 bt_hci_event_complete(hci, ¶ms, READ_CONN_ACCEPT_TIMEOUT_RP_SIZE);
1404 static inline void bt_hci_event_complete_read_scan_enable(struct bt_hci_s *hci)
1406 read_scan_enable_rp params = {
1407 .status = HCI_SUCCESS,
1409 (hci->device.inquiry_scan ? SCAN_INQUIRY : 0) |
1410 (hci->device.page_scan ? SCAN_PAGE : 0),
1413 bt_hci_event_complete(hci, ¶ms, READ_SCAN_ENABLE_RP_SIZE);
1416 static inline void bt_hci_event_complete_read_local_class(struct bt_hci_s *hci)
1418 read_class_of_dev_rp params;
1420 params.status = HCI_SUCCESS;
1421 memcpy(params.dev_class, hci->device.class, sizeof(params.dev_class));
1423 bt_hci_event_complete(hci, ¶ms, READ_CLASS_OF_DEV_RP_SIZE);
1426 static inline void bt_hci_event_complete_voice_setting(struct bt_hci_s *hci)
1428 read_voice_setting_rp params = {
1429 .status = HCI_SUCCESS,
1430 .voice_setting = hci->voice_setting, /* Note: no swapping */
1433 bt_hci_event_complete(hci, ¶ms, READ_VOICE_SETTING_RP_SIZE);
1436 static inline void bt_hci_event_complete_read_inquiry_mode(
1437 struct bt_hci_s *hci)
1439 read_inquiry_mode_rp params = {
1440 .status = HCI_SUCCESS,
1441 .mode = hci->lm.inquiry_mode,
1444 bt_hci_event_complete(hci, ¶ms, READ_INQUIRY_MODE_RP_SIZE);
1447 static inline void bt_hci_event_num_comp_pkts(struct bt_hci_s *hci,
1448 uint16_t handle, int packets)
1450 uint16_t buf[EVT_NUM_COMP_PKTS_SIZE(1) / 2 + 1];
1451 evt_num_comp_pkts *params = (void *) ((uint8_t *) buf + 1);
1453 params->num_hndl = 1;
1454 params->connection->handle = HNDL(handle);
1455 params->connection->num_packets = cpu_to_le16(packets);
1457 bt_hci_event(hci, EVT_NUM_COMP_PKTS, params, EVT_NUM_COMP_PKTS_SIZE(1));
1460 static void bt_submit_hci(struct HCIInfo *info,
1461 const uint8_t *data, int length)
1463 struct bt_hci_s *hci = hci_from_info(info);
1467 if (length < HCI_COMMAND_HDR_SIZE)
1470 memcpy(&hci->last_cmd, data, 2);
1472 cmd = (data[1] << 8) | data[0];
1474 if (cmd_opcode_ogf(cmd) == 0 || cmd_opcode_ocf(cmd) == 0) /* NOP */
1477 data += HCI_COMMAND_HDR_SIZE;
1478 length -= HCI_COMMAND_HDR_SIZE;
1480 if (paramlen > length)
1483 #define PARAM(cmd, param) (((cmd##_cp *) data)->param)
1484 #define PARAM16(cmd, param) le16_to_cpup(&PARAM(cmd, param))
1485 #define PARAMHANDLE(cmd) HNDL(PARAM(cmd, handle))
1486 #define LENGTH_CHECK(cmd) if (length < sizeof(cmd##_cp)) goto short_hci
1487 /* Note: the supported commands bitmask in bt_hci_read_local_commands_rp
1488 * needs to be updated every time a command is implemented here! */
1490 case cmd_opcode_pack(OGF_LINK_CTL, OCF_INQUIRY):
1491 LENGTH_CHECK(inquiry);
1493 if (PARAM(inquiry, length) < 1) {
1494 bt_hci_event_complete_status(hci, HCI_INVALID_PARAMETERS);
1498 hci->lm.inquire = 1;
1499 hci->lm.periodic = 0;
1500 hci->lm.responses_left = PARAM(inquiry, num_rsp) ?: INT_MAX;
1501 hci->lm.responses = 0;
1502 bt_hci_event_status(hci, HCI_SUCCESS);
1503 bt_hci_inquiry_start(hci, PARAM(inquiry, length));
1506 case cmd_opcode_pack(OGF_LINK_CTL, OCF_INQUIRY_CANCEL):
1507 if (!hci->lm.inquire || hci->lm.periodic) {
1508 fprintf(stderr, "%s: Inquiry Cancel should only be issued after "
1509 "the Inquiry command has been issued, a Command "
1510 "Status event has been received for the Inquiry "
1511 "command, and before the Inquiry Complete event "
1512 "occurs", __FUNCTION__);
1513 bt_hci_event_complete_status(hci, HCI_COMMAND_DISALLOWED);
1517 hci->lm.inquire = 0;
1518 qemu_del_timer(hci->lm.inquiry_done);
1519 bt_hci_event_complete_status(hci, HCI_SUCCESS);
1522 case cmd_opcode_pack(OGF_LINK_CTL, OCF_PERIODIC_INQUIRY):
1523 LENGTH_CHECK(periodic_inquiry);
1525 if (!(PARAM(periodic_inquiry, length) <
1526 PARAM16(periodic_inquiry, min_period) &&
1527 PARAM16(periodic_inquiry, min_period) <
1528 PARAM16(periodic_inquiry, max_period)) ||
1529 PARAM(periodic_inquiry, length) < 1 ||
1530 PARAM16(periodic_inquiry, min_period) < 2 ||
1531 PARAM16(periodic_inquiry, max_period) < 3) {
1532 bt_hci_event_complete_status(hci, HCI_INVALID_PARAMETERS);
1536 hci->lm.inquire = 1;
1537 hci->lm.periodic = 1;
1538 hci->lm.responses_left = PARAM(periodic_inquiry, num_rsp);
1539 hci->lm.responses = 0;
1540 hci->lm.inquiry_period = PARAM16(periodic_inquiry, max_period);
1541 bt_hci_event_complete_status(hci, HCI_SUCCESS);
1542 bt_hci_inquiry_start(hci, PARAM(periodic_inquiry, length));
1545 case cmd_opcode_pack(OGF_LINK_CTL, OCF_EXIT_PERIODIC_INQUIRY):
1546 if (!hci->lm.inquire || !hci->lm.periodic) {
1547 fprintf(stderr, "%s: Inquiry Cancel should only be issued after "
1548 "the Inquiry command has been issued, a Command "
1549 "Status event has been received for the Inquiry "
1550 "command, and before the Inquiry Complete event "
1551 "occurs", __FUNCTION__);
1552 bt_hci_event_complete_status(hci, HCI_COMMAND_DISALLOWED);
1555 hci->lm.inquire = 0;
1556 qemu_del_timer(hci->lm.inquiry_done);
1557 qemu_del_timer(hci->lm.inquiry_next);
1558 bt_hci_event_complete_status(hci, HCI_SUCCESS);
1561 case cmd_opcode_pack(OGF_LINK_CTL, OCF_CREATE_CONN):
1562 LENGTH_CHECK(create_conn);
1564 if (hci->lm.connecting >= HCI_HANDLES_MAX) {
1565 bt_hci_event_status(hci, HCI_REJECTED_LIMITED_RESOURCES);
1568 bt_hci_event_status(hci, HCI_SUCCESS);
1570 if (bt_hci_connect(hci, &PARAM(create_conn, bdaddr)))
1571 bt_hci_connection_reject_event(hci, &PARAM(create_conn, bdaddr));
1574 case cmd_opcode_pack(OGF_LINK_CTL, OCF_DISCONNECT):
1575 LENGTH_CHECK(disconnect);
1577 if (bt_hci_handle_bad(hci, PARAMHANDLE(disconnect))) {
1578 bt_hci_event_status(hci, HCI_NO_CONNECTION);
1582 bt_hci_event_status(hci, HCI_SUCCESS);
1583 bt_hci_disconnect(hci, PARAMHANDLE(disconnect),
1584 PARAM(disconnect, reason));
1587 case cmd_opcode_pack(OGF_LINK_CTL, OCF_CREATE_CONN_CANCEL):
1588 LENGTH_CHECK(create_conn_cancel);
1590 if (bt_hci_lmp_connection_ready(hci,
1591 &PARAM(create_conn_cancel, bdaddr))) {
1592 for (i = 0; i < HCI_HANDLES_MAX; i ++)
1593 if (bt_hci_role_master(hci, i) && hci->lm.handle[i].link &&
1594 !bacmp(&hci->lm.handle[i].link->slave->bd_addr,
1595 &PARAM(create_conn_cancel, bdaddr)))
1598 bt_hci_event_complete_conn_cancel(hci, i < HCI_HANDLES_MAX ?
1599 HCI_ACL_CONNECTION_EXISTS : HCI_NO_CONNECTION,
1600 &PARAM(create_conn_cancel, bdaddr));
1602 bt_hci_event_complete_conn_cancel(hci, HCI_SUCCESS,
1603 &PARAM(create_conn_cancel, bdaddr));
1606 case cmd_opcode_pack(OGF_LINK_CTL, OCF_ACCEPT_CONN_REQ):
1607 LENGTH_CHECK(accept_conn_req);
1609 if (!hci->conn_req_host ||
1610 bacmp(&PARAM(accept_conn_req, bdaddr),
1611 &hci->conn_req_host->bd_addr)) {
1612 bt_hci_event_status(hci, HCI_INVALID_PARAMETERS);
1616 bt_hci_event_status(hci, HCI_SUCCESS);
1617 bt_hci_connection_accept(hci, hci->conn_req_host);
1618 hci->conn_req_host = NULL;
1621 case cmd_opcode_pack(OGF_LINK_CTL, OCF_REJECT_CONN_REQ):
1622 LENGTH_CHECK(reject_conn_req);
1624 if (!hci->conn_req_host ||
1625 bacmp(&PARAM(reject_conn_req, bdaddr),
1626 &hci->conn_req_host->bd_addr)) {
1627 bt_hci_event_status(hci, HCI_INVALID_PARAMETERS);
1631 bt_hci_event_status(hci, HCI_SUCCESS);
1632 bt_hci_connection_reject(hci, hci->conn_req_host,
1633 PARAM(reject_conn_req, reason));
1634 bt_hci_connection_reject_event(hci, &hci->conn_req_host->bd_addr);
1635 hci->conn_req_host = NULL;
1638 case cmd_opcode_pack(OGF_LINK_CTL, OCF_AUTH_REQUESTED):
1639 LENGTH_CHECK(auth_requested);
1641 if (bt_hci_handle_bad(hci, PARAMHANDLE(auth_requested)))
1642 bt_hci_event_status(hci, HCI_NO_CONNECTION);
1644 bt_hci_event_status(hci, HCI_SUCCESS);
1645 bt_hci_event_auth_complete(hci, PARAMHANDLE(auth_requested));
1649 case cmd_opcode_pack(OGF_LINK_CTL, OCF_SET_CONN_ENCRYPT):
1650 LENGTH_CHECK(set_conn_encrypt);
1652 if (bt_hci_handle_bad(hci, PARAMHANDLE(set_conn_encrypt)))
1653 bt_hci_event_status(hci, HCI_NO_CONNECTION);
1655 bt_hci_event_status(hci, HCI_SUCCESS);
1656 bt_hci_event_encrypt_change(hci,
1657 PARAMHANDLE(set_conn_encrypt),
1658 PARAM(set_conn_encrypt, encrypt));
1662 case cmd_opcode_pack(OGF_LINK_CTL, OCF_REMOTE_NAME_REQ):
1663 LENGTH_CHECK(remote_name_req);
1665 if (bt_hci_name_req(hci, &PARAM(remote_name_req, bdaddr)))
1666 bt_hci_event_status(hci, HCI_NO_CONNECTION);
1669 case cmd_opcode_pack(OGF_LINK_CTL, OCF_REMOTE_NAME_REQ_CANCEL):
1670 LENGTH_CHECK(remote_name_req_cancel);
1672 bt_hci_event_complete_name_cancel(hci,
1673 &PARAM(remote_name_req_cancel, bdaddr));
1676 case cmd_opcode_pack(OGF_LINK_CTL, OCF_READ_REMOTE_FEATURES):
1677 LENGTH_CHECK(read_remote_features);
1679 if (bt_hci_features_req(hci, PARAMHANDLE(read_remote_features)))
1680 bt_hci_event_status(hci, HCI_NO_CONNECTION);
1683 case cmd_opcode_pack(OGF_LINK_CTL, OCF_READ_REMOTE_EXT_FEATURES):
1684 LENGTH_CHECK(read_remote_ext_features);
1686 if (bt_hci_handle_bad(hci, PARAMHANDLE(read_remote_ext_features)))
1687 bt_hci_event_status(hci, HCI_NO_CONNECTION);
1689 bt_hci_event_status(hci, HCI_SUCCESS);
1690 bt_hci_event_read_remote_ext_features(hci,
1691 PARAMHANDLE(read_remote_ext_features));
1695 case cmd_opcode_pack(OGF_LINK_CTL, OCF_READ_REMOTE_VERSION):
1696 LENGTH_CHECK(read_remote_version);
1698 if (bt_hci_version_req(hci, PARAMHANDLE(read_remote_version)))
1699 bt_hci_event_status(hci, HCI_NO_CONNECTION);
1702 case cmd_opcode_pack(OGF_LINK_CTL, OCF_READ_CLOCK_OFFSET):
1703 LENGTH_CHECK(read_clock_offset);
1705 if (bt_hci_clkoffset_req(hci, PARAMHANDLE(read_clock_offset)))
1706 bt_hci_event_status(hci, HCI_NO_CONNECTION);
1709 case cmd_opcode_pack(OGF_LINK_CTL, OCF_READ_LMP_HANDLE):
1710 LENGTH_CHECK(read_lmp_handle);
1713 bt_hci_event_complete_lmp_handle(hci, PARAMHANDLE(read_lmp_handle));
1716 case cmd_opcode_pack(OGF_LINK_POLICY, OCF_HOLD_MODE):
1717 LENGTH_CHECK(hold_mode);
1719 if (PARAM16(hold_mode, min_interval) >
1720 PARAM16(hold_mode, max_interval) ||
1721 PARAM16(hold_mode, min_interval) < 0x0002 ||
1722 PARAM16(hold_mode, max_interval) > 0xff00 ||
1723 (PARAM16(hold_mode, min_interval) & 1) ||
1724 (PARAM16(hold_mode, max_interval) & 1)) {
1725 bt_hci_event_status(hci, HCI_INVALID_PARAMETERS);
1729 if (bt_hci_mode_change(hci, PARAMHANDLE(hold_mode),
1730 PARAM16(hold_mode, max_interval),
1732 bt_hci_event_status(hci, HCI_NO_CONNECTION);
1735 case cmd_opcode_pack(OGF_LINK_POLICY, OCF_PARK_MODE):
1736 LENGTH_CHECK(park_mode);
1738 if (PARAM16(park_mode, min_interval) >
1739 PARAM16(park_mode, max_interval) ||
1740 PARAM16(park_mode, min_interval) < 0x000e ||
1741 (PARAM16(park_mode, min_interval) & 1) ||
1742 (PARAM16(park_mode, max_interval) & 1)) {
1743 bt_hci_event_status(hci, HCI_INVALID_PARAMETERS);
1747 if (bt_hci_mode_change(hci, PARAMHANDLE(park_mode),
1748 PARAM16(park_mode, max_interval),
1750 bt_hci_event_status(hci, HCI_NO_CONNECTION);
1753 case cmd_opcode_pack(OGF_LINK_POLICY, OCF_EXIT_PARK_MODE):
1754 LENGTH_CHECK(exit_park_mode);
1756 if (bt_hci_mode_cancel(hci, PARAMHANDLE(exit_park_mode),
1758 bt_hci_event_status(hci, HCI_NO_CONNECTION);
1761 case cmd_opcode_pack(OGF_LINK_POLICY, OCF_ROLE_DISCOVERY):
1762 LENGTH_CHECK(role_discovery);
1764 if (bt_hci_handle_bad(hci, PARAMHANDLE(role_discovery)))
1765 bt_hci_event_complete_role_discovery(hci,
1766 HCI_NO_CONNECTION, PARAMHANDLE(role_discovery), 0);
1768 bt_hci_event_complete_role_discovery(hci,
1769 HCI_SUCCESS, PARAMHANDLE(role_discovery),
1770 bt_hci_role_master(hci,
1771 PARAMHANDLE(role_discovery)));
1774 case cmd_opcode_pack(OGF_HOST_CTL, OCF_SET_EVENT_MASK):
1775 LENGTH_CHECK(set_event_mask);
1777 memcpy(hci->event_mask, PARAM(set_event_mask, mask), 8);
1778 bt_hci_event_complete_status(hci, HCI_SUCCESS);
1781 case cmd_opcode_pack(OGF_HOST_CTL, OCF_RESET):
1783 bt_hci_event_status(hci, HCI_SUCCESS);
1786 case cmd_opcode_pack(OGF_HOST_CTL, OCF_SET_EVENT_FLT):
1787 if (length >= 1 && PARAM(set_event_flt, flt_type) == FLT_CLEAR_ALL)
1788 /* No length check */;
1790 LENGTH_CHECK(set_event_flt);
1792 /* Filters are not implemented */
1793 bt_hci_event_complete_status(hci, HCI_SUCCESS);
1796 case cmd_opcode_pack(OGF_HOST_CTL, OCF_FLUSH):
1797 LENGTH_CHECK(flush);
1799 if (bt_hci_handle_bad(hci, PARAMHANDLE(flush)))
1800 bt_hci_event_complete_flush(hci,
1801 HCI_NO_CONNECTION, PARAMHANDLE(flush));
1803 /* TODO: ordering? */
1804 bt_hci_event(hci, EVT_FLUSH_OCCURRED,
1805 &PARAM(flush, handle),
1806 EVT_FLUSH_OCCURRED_SIZE);
1807 bt_hci_event_complete_flush(hci,
1808 HCI_SUCCESS, PARAMHANDLE(flush));
1812 case cmd_opcode_pack(OGF_HOST_CTL, OCF_CHANGE_LOCAL_NAME):
1813 LENGTH_CHECK(change_local_name);
1815 if (hci->device.lmp_name)
1816 g_free((void *) hci->device.lmp_name);
1817 hci->device.lmp_name = g_strndup(PARAM(change_local_name, name),
1818 sizeof(PARAM(change_local_name, name)));
1819 bt_hci_event_complete_status(hci, HCI_SUCCESS);
1822 case cmd_opcode_pack(OGF_HOST_CTL, OCF_READ_LOCAL_NAME):
1823 bt_hci_event_complete_read_local_name(hci);
1826 case cmd_opcode_pack(OGF_HOST_CTL, OCF_READ_CONN_ACCEPT_TIMEOUT):
1827 bt_hci_event_complete_read_conn_accept_timeout(hci);
1830 case cmd_opcode_pack(OGF_HOST_CTL, OCF_WRITE_CONN_ACCEPT_TIMEOUT):
1832 LENGTH_CHECK(write_conn_accept_timeout);
1834 if (PARAM16(write_conn_accept_timeout, timeout) < 0x0001 ||
1835 PARAM16(write_conn_accept_timeout, timeout) > 0xb540) {
1836 bt_hci_event_complete_status(hci, HCI_INVALID_PARAMETERS);
1840 hci->conn_accept_tout = PARAM16(write_conn_accept_timeout, timeout);
1841 bt_hci_event_complete_status(hci, HCI_SUCCESS);
1844 case cmd_opcode_pack(OGF_HOST_CTL, OCF_READ_SCAN_ENABLE):
1845 bt_hci_event_complete_read_scan_enable(hci);
1848 case cmd_opcode_pack(OGF_HOST_CTL, OCF_WRITE_SCAN_ENABLE):
1849 LENGTH_CHECK(write_scan_enable);
1851 /* TODO: check that the remaining bits are all 0 */
1852 hci->device.inquiry_scan =
1853 !!(PARAM(write_scan_enable, scan_enable) & SCAN_INQUIRY);
1854 hci->device.page_scan =
1855 !!(PARAM(write_scan_enable, scan_enable) & SCAN_PAGE);
1856 bt_hci_event_complete_status(hci, HCI_SUCCESS);
1859 case cmd_opcode_pack(OGF_HOST_CTL, OCF_READ_CLASS_OF_DEV):
1860 bt_hci_event_complete_read_local_class(hci);
1863 case cmd_opcode_pack(OGF_HOST_CTL, OCF_WRITE_CLASS_OF_DEV):
1864 LENGTH_CHECK(write_class_of_dev);
1866 memcpy(hci->device.class, PARAM(write_class_of_dev, dev_class),
1867 sizeof(PARAM(write_class_of_dev, dev_class)));
1868 bt_hci_event_complete_status(hci, HCI_SUCCESS);
1871 case cmd_opcode_pack(OGF_HOST_CTL, OCF_READ_VOICE_SETTING):
1872 bt_hci_event_complete_voice_setting(hci);
1875 case cmd_opcode_pack(OGF_HOST_CTL, OCF_WRITE_VOICE_SETTING):
1876 LENGTH_CHECK(write_voice_setting);
1878 hci->voice_setting = PARAM(write_voice_setting, voice_setting);
1879 bt_hci_event_complete_status(hci, HCI_SUCCESS);
1882 case cmd_opcode_pack(OGF_HOST_CTL, OCF_HOST_NUMBER_OF_COMPLETED_PACKETS):
1883 if (length < data[0] * 2 + 1)
1886 for (i = 0; i < data[0]; i ++)
1887 if (bt_hci_handle_bad(hci,
1888 data[i * 2 + 1] | (data[i * 2 + 2] << 8)))
1889 bt_hci_event_complete_status(hci, HCI_INVALID_PARAMETERS);
1892 case cmd_opcode_pack(OGF_HOST_CTL, OCF_READ_INQUIRY_MODE):
1893 /* Only if (local_features[3] & 0x40) && (local_commands[12] & 0x40)
1895 * goto unknown_command */
1896 bt_hci_event_complete_read_inquiry_mode(hci);
1899 case cmd_opcode_pack(OGF_HOST_CTL, OCF_WRITE_INQUIRY_MODE):
1900 /* Only if (local_features[3] & 0x40) && (local_commands[12] & 0x80)
1902 * goto unknown_command */
1903 LENGTH_CHECK(write_inquiry_mode);
1905 if (PARAM(write_inquiry_mode, mode) > 0x01) {
1906 bt_hci_event_complete_status(hci, HCI_INVALID_PARAMETERS);
1910 hci->lm.inquiry_mode = PARAM(write_inquiry_mode, mode);
1911 bt_hci_event_complete_status(hci, HCI_SUCCESS);
1914 case cmd_opcode_pack(OGF_INFO_PARAM, OCF_READ_LOCAL_VERSION):
1915 bt_hci_read_local_version_rp(hci);
1918 case cmd_opcode_pack(OGF_INFO_PARAM, OCF_READ_LOCAL_COMMANDS):
1919 bt_hci_read_local_commands_rp(hci);
1922 case cmd_opcode_pack(OGF_INFO_PARAM, OCF_READ_LOCAL_FEATURES):
1923 bt_hci_read_local_features_rp(hci);
1926 case cmd_opcode_pack(OGF_INFO_PARAM, OCF_READ_LOCAL_EXT_FEATURES):
1927 LENGTH_CHECK(read_local_ext_features);
1929 bt_hci_read_local_ext_features_rp(hci,
1930 PARAM(read_local_ext_features, page_num));
1933 case cmd_opcode_pack(OGF_INFO_PARAM, OCF_READ_BUFFER_SIZE):
1934 bt_hci_read_buffer_size_rp(hci);
1937 case cmd_opcode_pack(OGF_INFO_PARAM, OCF_READ_COUNTRY_CODE):
1938 bt_hci_read_country_code_rp(hci);
1941 case cmd_opcode_pack(OGF_INFO_PARAM, OCF_READ_BD_ADDR):
1942 bt_hci_read_bd_addr_rp(hci);
1945 case cmd_opcode_pack(OGF_STATUS_PARAM, OCF_READ_LINK_QUALITY):
1946 LENGTH_CHECK(read_link_quality);
1948 bt_hci_link_quality_rp(hci, PARAMHANDLE(read_link_quality));
1952 bt_hci_event_status(hci, HCI_UNKNOWN_COMMAND);
1956 fprintf(stderr, "%s: HCI packet too short (%iB)\n",
1957 __FUNCTION__, length);
1958 bt_hci_event_status(hci, HCI_INVALID_PARAMETERS);
1963 /* We could perform fragmentation here, we can't do "recombination" because
1964 * at this layer the length of the payload is not know ahead, so we only
1965 * know that a packet contained the last fragment of the SDU when the next
1967 static inline void bt_hci_lmp_acl_data(struct bt_hci_s *hci, uint16_t handle,
1968 const uint8_t *data, int start, int len)
1970 struct hci_acl_hdr *pkt = (void *) hci->acl_buf;
1972 /* TODO: packet flags */
1973 /* TODO: avoid memcpy'ing */
1975 if (len + HCI_ACL_HDR_SIZE > sizeof(hci->acl_buf)) {
1976 fprintf(stderr, "%s: can't take ACL packets %i bytes long\n",
1980 memcpy(hci->acl_buf + HCI_ACL_HDR_SIZE, data, len);
1982 pkt->handle = cpu_to_le16(
1983 acl_handle_pack(handle, start ? ACL_START : ACL_CONT));
1984 pkt->dlen = cpu_to_le16(len);
1985 hci->info.acl_recv(hci->info.opaque,
1986 hci->acl_buf, len + HCI_ACL_HDR_SIZE);
1989 static void bt_hci_lmp_acl_data_slave(struct bt_link_s *btlink,
1990 const uint8_t *data, int start, int len)
1992 struct bt_hci_link_s *link = (struct bt_hci_link_s *) btlink;
1994 bt_hci_lmp_acl_data(hci_from_device(btlink->slave),
1995 link->handle, data, start, len);
1998 static void bt_hci_lmp_acl_data_host(struct bt_link_s *link,
1999 const uint8_t *data, int start, int len)
2001 bt_hci_lmp_acl_data(hci_from_device(link->host),
2002 link->handle, data, start, len);
2005 static void bt_submit_acl(struct HCIInfo *info,
2006 const uint8_t *data, int length)
2008 struct bt_hci_s *hci = hci_from_info(info);
2011 struct bt_link_s *link;
2013 if (length < HCI_ACL_HDR_SIZE) {
2014 fprintf(stderr, "%s: ACL packet too short (%iB)\n",
2015 __FUNCTION__, length);
2019 handle = acl_handle((data[1] << 8) | data[0]);
2020 flags = acl_flags((data[1] << 8) | data[0]);
2021 datalen = (data[3] << 8) | data[2];
2022 data += HCI_ACL_HDR_SIZE;
2023 length -= HCI_ACL_HDR_SIZE;
2025 if (bt_hci_handle_bad(hci, handle)) {
2026 fprintf(stderr, "%s: invalid ACL handle %03x\n",
2027 __FUNCTION__, handle);
2028 /* TODO: signal an error */
2031 handle &= ~HCI_HANDLE_OFFSET;
2033 if (datalen > length) {
2034 fprintf(stderr, "%s: ACL packet too short (%iB < %iB)\n",
2035 __FUNCTION__, length, datalen);
2039 link = hci->lm.handle[handle].link;
2041 if ((flags & ~3) == ACL_ACTIVE_BCAST) {
2042 if (!hci->asb_handle)
2043 hci->asb_handle = handle;
2044 else if (handle != hci->asb_handle) {
2045 fprintf(stderr, "%s: Bad handle %03x in Active Slave Broadcast\n",
2046 __FUNCTION__, handle);
2047 /* TODO: signal an error */
2054 if ((flags & ~3) == ACL_PICO_BCAST) {
2055 if (!hci->psb_handle)
2056 hci->psb_handle = handle;
2057 else if (handle != hci->psb_handle) {
2058 fprintf(stderr, "%s: Bad handle %03x in Parked Slave Broadcast\n",
2059 __FUNCTION__, handle);
2060 /* TODO: signal an error */
2067 /* TODO: increase counter and send EVT_NUM_COMP_PKTS */
2068 bt_hci_event_num_comp_pkts(hci, handle | HCI_HANDLE_OFFSET, 1);
2070 /* Do this last as it can trigger further events even in this HCI */
2071 hci->lm.handle[handle].lmp_acl_data(link, data,
2072 (flags & 3) == ACL_START, length);
2075 static void bt_submit_sco(struct HCIInfo *info,
2076 const uint8_t *data, int length)
2078 struct bt_hci_s *hci = hci_from_info(info);
2085 handle = acl_handle((data[1] << 8) | data[0]);
2089 if (bt_hci_handle_bad(hci, handle)) {
2090 fprintf(stderr, "%s: invalid SCO handle %03x\n",
2091 __FUNCTION__, handle);
2095 if (datalen > length) {
2096 fprintf(stderr, "%s: SCO packet too short (%iB < %iB)\n",
2097 __FUNCTION__, length, datalen);
2103 /* TODO: increase counter and send EVT_NUM_COMP_PKTS if synchronous
2104 * Flow Control is enabled.
2105 * (See Read/Write_Synchronous_Flow_Control_Enable on page 513 and
2109 static uint8_t *bt_hci_evt_packet(void *opaque)
2111 /* TODO: allocate a packet from upper layer */
2112 struct bt_hci_s *s = opaque;
2117 static void bt_hci_evt_submit(void *opaque, int len)
2119 /* TODO: notify upper layer */
2120 struct bt_hci_s *s = opaque;
2122 s->info.evt_recv(s->info.opaque, s->evt_buf, len);
2125 static int bt_hci_bdaddr_set(struct HCIInfo *info, const uint8_t *bd_addr)
2127 struct bt_hci_s *hci = hci_from_info(info);
2129 bacpy(&hci->device.bd_addr, (const bdaddr_t *) bd_addr);
2133 static void bt_hci_done(struct HCIInfo *info);
2134 static void bt_hci_destroy(struct bt_device_s *dev)
2136 struct bt_hci_s *hci = hci_from_device(dev);
2138 bt_hci_done(&hci->info);
2141 struct HCIInfo *bt_new_hci(struct bt_scatternet_s *net)
2143 struct bt_hci_s *s = g_malloc0(sizeof(struct bt_hci_s));
2145 s->lm.inquiry_done = qemu_new_timer_ns(vm_clock, bt_hci_inquiry_done, s);
2146 s->lm.inquiry_next = qemu_new_timer_ns(vm_clock, bt_hci_inquiry_next, s);
2147 s->conn_accept_timer =
2148 qemu_new_timer_ns(vm_clock, bt_hci_conn_accept_timeout, s);
2150 s->evt_packet = bt_hci_evt_packet;
2151 s->evt_submit = bt_hci_evt_submit;
2154 bt_device_init(&s->device, net);
2155 s->device.lmp_connection_request = bt_hci_lmp_connection_request;
2156 s->device.lmp_connection_complete = bt_hci_lmp_connection_complete;
2157 s->device.lmp_disconnect_master = bt_hci_lmp_disconnect_host;
2158 s->device.lmp_disconnect_slave = bt_hci_lmp_disconnect_slave;
2159 s->device.lmp_acl_data = bt_hci_lmp_acl_data_slave;
2160 s->device.lmp_acl_resp = bt_hci_lmp_acl_data_host;
2161 s->device.lmp_mode_change = bt_hci_lmp_mode_change_slave;
2164 /* Also keep in sync with supported commands bitmask in
2165 * bt_hci_read_local_commands_rp */
2166 s->device.lmp_caps = 0x8000199b7e85355fll;
2170 s->info.cmd_send = bt_submit_hci;
2171 s->info.sco_send = bt_submit_sco;
2172 s->info.acl_send = bt_submit_acl;
2173 s->info.bdaddr_set = bt_hci_bdaddr_set;
2175 s->device.handle_destroy = bt_hci_destroy;
2180 static void bt_hci_done(struct HCIInfo *info)
2182 struct bt_hci_s *hci = hci_from_info(info);
2185 bt_device_done(&hci->device);
2187 if (hci->device.lmp_name)
2188 g_free((void *) hci->device.lmp_name);
2190 /* Be gentle and send DISCONNECT to all connected peers and those
2191 * currently waiting for us to accept or reject a connection request.
2192 * This frees the links. */
2193 if (hci->conn_req_host) {
2194 bt_hci_connection_reject(hci,
2195 hci->conn_req_host, HCI_OE_POWER_OFF);
2199 for (handle = HCI_HANDLE_OFFSET;
2200 handle < (HCI_HANDLE_OFFSET | HCI_HANDLES_MAX); handle ++)
2201 if (!bt_hci_handle_bad(hci, handle))
2202 bt_hci_disconnect(hci, handle, HCI_OE_POWER_OFF);
2204 /* TODO: this is not enough actually, there may be slaves from whom
2205 * we have requested a connection who will soon (or not) respond with
2206 * an accept or a reject, so we should also check if hci->lm.connecting
2207 * is non-zero and if so, avoid freeing the hci but otherwise disappear
2208 * from all qemu social life (e.g. stop scanning and request to be
2209 * removed from s->device.net) and arrange for
2210 * s->device.lmp_connection_complete to free the remaining bits once
2211 * hci->lm.awaiting_bdaddr[] is empty. */
2213 qemu_free_timer(hci->lm.inquiry_done);
2214 qemu_free_timer(hci->lm.inquiry_next);
2215 qemu_free_timer(hci->conn_accept_timer);