1/*
2 * QEMU Bluetooth HCI logic.
3 *
4 * Copyright (C) 2007 OpenMoko, Inc.
5 * Copyright (C) 2008 Andrzej Zaborowski <balrog@zabor.org>
6 *
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.
11 *
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.
16 *
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/>.
19 */
20
21#include "qemu/osdep.h"
22#include "qemu/error-report.h"
23#include "qapi/error.h"
24#include "qemu/timer.h"
25#include "hw/usb.h"
26#include "sysemu/bt.h"
27#include "hw/bt.h"
28#include "qapi/qmp/qerror.h"
29#include "sysemu/replay.h"
30#include "qemu/cutils.h"
31
32struct bt_hci_s {
33 uint8_t *(*evt_packet)(void *opaque);
34 void (*evt_submit)(void *opaque, int len);
35 void *opaque;
36 uint8_t evt_buf[256];
37
38 uint8_t acl_buf[4096];
39 int acl_len;
40
41 uint16_t asb_handle;
42 uint16_t psb_handle;
43
44 int last_cmd; /* Note: Always little-endian */
45
46 struct bt_device_s *conn_req_host;
47
48 struct {
49 int inquire;
50 int periodic;
51 int responses_left;
52 int responses;
53 QEMUTimer *inquiry_done;
54 QEMUTimer *inquiry_next;
55 int inquiry_length;
56 int inquiry_period;
57 int inquiry_mode;
58
59#define HCI_HANDLE_OFFSET 0x20
60#define HCI_HANDLES_MAX 0x10
61 struct bt_hci_master_link_s {
62 struct bt_link_s *link;
63 void (*lmp_acl_data)(struct bt_link_s *link,
64 const uint8_t *data, int start, int len);
65 QEMUTimer *acl_mode_timer;
66 } handle[HCI_HANDLES_MAX];
67 uint32_t role_bmp;
68 int last_handle;
69 int connecting;
70 bdaddr_t awaiting_bdaddr[HCI_HANDLES_MAX];
71 } lm;
72
73 uint8_t event_mask[8];
74 uint16_t voice_setting; /* Notw: Always little-endian */
75 uint16_t conn_accept_tout;
76 QEMUTimer *conn_accept_timer;
77
78 struct HCIInfo info;
79 struct bt_device_s device;
80
81 Error *replay_blocker;
82};
83
84#define DEFAULT_RSSI_DBM 20
85
86#define hci_from_info(ptr) container_of((ptr), struct bt_hci_s, info)
87#define hci_from_device(ptr) container_of((ptr), struct bt_hci_s, device)
88
89struct bt_hci_link_s {
90 struct bt_link_s btlink;
91 uint16_t handle; /* Local */
92};
93
94/* LMP layer emulation */
95#if 0
96static void bt_submit_lmp(struct bt_device_s *bt, int length, uint8_t *data)
97{
98 int resp, resplen, error, op, tr;
99 uint8_t respdata[17];
100
101 if (length < 1)
102 return;
103
104 tr = *data & 1;
105 op = *(data ++) >> 1;
106 resp = LMP_ACCEPTED;
107 resplen = 2;
108 respdata[1] = op;
109 error = 0;
110 length --;
111
112 if (op >= 0x7c) { /* Extended opcode */
113 op |= *(data ++) << 8;
114 resp = LMP_ACCEPTED_EXT;
115 resplen = 4;
116 respdata[0] = op >> 8;
117 respdata[1] = op & 0xff;
118 length --;
119 }
120
121 switch (op) {
122 case LMP_ACCEPTED:
123 /* data[0] Op code
124 */
125 if (length < 1) {
126 error = HCI_UNSUPPORTED_LMP_PARAMETER_VALUE;
127 goto not_accepted;
128 }
129 resp = 0;
130 break;
131
132 case LMP_ACCEPTED_EXT:
133 /* data[0] Escape op code
134 * data[1] Extended op code
135 */
136 if (length < 2) {
137 error = HCI_UNSUPPORTED_LMP_PARAMETER_VALUE;
138 goto not_accepted;
139 }
140 resp = 0;
141 break;
142
143 case LMP_NOT_ACCEPTED:
144 /* data[0] Op code
145 * data[1] Error code
146 */
147 if (length < 2) {
148 error = HCI_UNSUPPORTED_LMP_PARAMETER_VALUE;
149 goto not_accepted;
150 }
151 resp = 0;
152 break;
153
154 case LMP_NOT_ACCEPTED_EXT:
155 /* data[0] Op code
156 * data[1] Extended op code
157 * data[2] Error code
158 */
159 if (length < 3) {
160 error = HCI_UNSUPPORTED_LMP_PARAMETER_VALUE;
161 goto not_accepted;
162 }
163 resp = 0;
164 break;
165
166 case LMP_HOST_CONNECTION_REQ:
167 break;
168
169 case LMP_SETUP_COMPLETE:
170 resp = LMP_SETUP_COMPLETE;
171 resplen = 1;
172 bt->setup = 1;
173 break;
174
175 case LMP_DETACH:
176 /* data[0] Error code
177 */
178 if (length < 1) {
179 error = HCI_UNSUPPORTED_LMP_PARAMETER_VALUE;
180 goto not_accepted;
181 }
182 bt->setup = 0;
183 resp = 0;
184 break;
185
186 case LMP_SUPERVISION_TIMEOUT:
187 /* data[0,1] Supervision timeout
188 */
189 if (length < 2) {
190 error = HCI_UNSUPPORTED_LMP_PARAMETER_VALUE;
191 goto not_accepted;
192 }
193 resp = 0;
194 break;
195
196 case LMP_QUALITY_OF_SERVICE:
197 resp = 0;
198 /* Fall through */
199 case LMP_QOS_REQ:
200 /* data[0,1] Poll interval
201 * data[2] N(BC)
202 */
203 if (length < 3) {
204 error = HCI_UNSUPPORTED_LMP_PARAMETER_VALUE;
205 goto not_accepted;
206 }
207 break;
208
209 case LMP_MAX_SLOT:
210 resp = 0;
211 /* Fall through */
212 case LMP_MAX_SLOT_REQ:
213 /* data[0] Max slots
214 */
215 if (length < 1) {
216 error = HCI_UNSUPPORTED_LMP_PARAMETER_VALUE;
217 goto not_accepted;
218 }
219 break;
220
221 case LMP_AU_RAND:
222 case LMP_IN_RAND:
223 case LMP_COMB_KEY:
224 /* data[0-15] Random number
225 */
226 if (length < 16) {
227 error = HCI_UNSUPPORTED_LMP_PARAMETER_VALUE;
228 goto not_accepted;
229 }
230 if (op == LMP_AU_RAND) {
231 if (bt->key_present) {
232 resp = LMP_SRES;
233 resplen = 5;
234 /* XXX: [Part H] Section 6.1 on page 801 */
235 } else {
236 error = HCI_PIN_OR_KEY_MISSING;
237 goto not_accepted;
238 }
239 } else if (op == LMP_IN_RAND) {
240 error = HCI_PAIRING_NOT_ALLOWED;
241 goto not_accepted;
242 } else {
243 /* XXX: [Part H] Section 3.2 on page 779 */
244 resp = LMP_UNIT_KEY;
245 resplen = 17;
246 memcpy(respdata + 1, bt->key, 16);
247
248 error = HCI_UNIT_LINK_KEY_USED;
249 goto not_accepted;
250 }
251 break;
252
253 case LMP_UNIT_KEY:
254 /* data[0-15] Key
255 */
256 if (length < 16) {
257 error = HCI_UNSUPPORTED_LMP_PARAMETER_VALUE;
258 goto not_accepted;
259 }
260 memcpy(bt->key, data, 16);
261 bt->key_present = 1;
262 break;
263
264 case LMP_SRES:
265 /* data[0-3] Authentication response
266 */
267 if (length < 4) {
268 error = HCI_UNSUPPORTED_LMP_PARAMETER_VALUE;
269 goto not_accepted;
270 }
271 break;
272
273 case LMP_CLKOFFSET_REQ:
274 resp = LMP_CLKOFFSET_RES;
275 resplen = 3;
276 respdata[1] = 0x33;
277 respdata[2] = 0x33;
278 break;
279
280 case LMP_CLKOFFSET_RES:
281 /* data[0,1] Clock offset
282 * (Slave to master only)
283 */
284 if (length < 2) {
285 error = HCI_UNSUPPORTED_LMP_PARAMETER_VALUE;
286 goto not_accepted;
287 }
288 break;
289
290 case LMP_VERSION_REQ:
291 case LMP_VERSION_RES:
292 /* data[0] VersNr
293 * data[1,2] CompId
294 * data[3,4] SubVersNr
295 */
296 if (length < 5) {
297 error = HCI_UNSUPPORTED_LMP_PARAMETER_VALUE;
298 goto not_accepted;
299 }
300 if (op == LMP_VERSION_REQ) {
301 resp = LMP_VERSION_RES;
302 resplen = 6;
303 respdata[1] = 0x20;
304 respdata[2] = 0xff;
305 respdata[3] = 0xff;
306 respdata[4] = 0xff;
307 respdata[5] = 0xff;
308 } else
309 resp = 0;
310 break;
311
312 case LMP_FEATURES_REQ:
313 case LMP_FEATURES_RES:
314 /* data[0-7] Features
315 */
316 if (length < 8) {
317 error = HCI_UNSUPPORTED_LMP_PARAMETER_VALUE;
318 goto not_accepted;
319 }
320 if (op == LMP_FEATURES_REQ) {
321 resp = LMP_FEATURES_RES;
322 resplen = 9;
323 respdata[1] = (bt->lmp_caps >> 0) & 0xff;
324 respdata[2] = (bt->lmp_caps >> 8) & 0xff;
325 respdata[3] = (bt->lmp_caps >> 16) & 0xff;
326 respdata[4] = (bt->lmp_caps >> 24) & 0xff;
327 respdata[5] = (bt->lmp_caps >> 32) & 0xff;
328 respdata[6] = (bt->lmp_caps >> 40) & 0xff;
329 respdata[7] = (bt->lmp_caps >> 48) & 0xff;
330 respdata[8] = (bt->lmp_caps >> 56) & 0xff;
331 } else
332 resp = 0;
333 break;
334
335 case LMP_NAME_REQ:
336 /* data[0] Name offset
337 */
338 if (length < 1) {
339 error = HCI_UNSUPPORTED_LMP_PARAMETER_VALUE;
340 goto not_accepted;
341 }
342 resp = LMP_NAME_RES;
343 resplen = 17;
344 respdata[1] = data[0];
345 respdata[2] = strlen(bt->lmp_name);
346 memset(respdata + 3, 0x00, 14);
347 if (respdata[2] > respdata[1])
348 memcpy(respdata + 3, bt->lmp_name + respdata[1],
349 respdata[2] - respdata[1]);
350 break;
351
352 case LMP_NAME_RES:
353 /* data[0] Name offset
354 * data[1] Name length
355 * data[2-15] Name fragment
356 */
357 if (length < 16) {
358 error = HCI_UNSUPPORTED_LMP_PARAMETER_VALUE;
359 goto not_accepted;
360 }
361 resp = 0;
362 break;
363
364 default:
365 error = HCI_UNKNOWN_LMP_PDU;
366 /* Fall through */
367 not_accepted:
368 if (op >> 8) {
369 resp = LMP_NOT_ACCEPTED_EXT;
370 resplen = 5;
371 respdata[0] = op >> 8;
372 respdata[1] = op & 0xff;
373 respdata[2] = error;
374 } else {
375 resp = LMP_NOT_ACCEPTED;
376 resplen = 3;
377 respdata[0] = op & 0xff;
378 respdata[1] = error;
379 }
380 }
381
382 if (resp == 0)
383 return;
384
385 if (resp >> 8) {
386 respdata[0] = resp >> 8;
387 respdata[1] = resp & 0xff;
388 } else
389 respdata[0] = resp & 0xff;
390
391 respdata[0] <<= 1;
392 respdata[0] |= tr;
393}
394
395static void bt_submit_raw_acl(struct bt_piconet_s *net, int length, uint8_t *data)
396{
397 struct bt_device_s *slave;
398 if (length < 1)
399 return;
400
401 slave = 0;
402#if 0
403 slave = net->slave;
404#endif
405
406 switch (data[0] & 3) {
407 case LLID_ACLC:
408 bt_submit_lmp(slave, length - 1, data + 1);
409 break;
410 case LLID_ACLU_START:
411#if 0
412 bt_sumbit_l2cap(slave, length - 1, data + 1, (data[0] >> 2) & 1);
413 breka;
414#endif
415 default:
416 case LLID_ACLU_CONT:
417 break;
418 }
419}
420#endif
421
422/* HCI layer emulation */
423
424/* Note: we could ignore endianness because unswapped handles will still
425 * be valid as connection identifiers for the guest - they don't have to
426 * be continuously allocated. We do it though, to preserve similar
427 * behaviour between hosts. Some things, like the BD_ADDR cannot be
428 * preserved though (for example if a real hci is used). */
429#define HNDL(raw) cpu_to_le16(raw)
430
431static const uint8_t bt_event_reserved_mask[8] = {
432 0xff, 0x9f, 0xfb, 0xff, 0x07, 0x18, 0x00, 0x00,
433};
434
435
436static void null_hci_send(struct HCIInfo *hci, const uint8_t *data, int len)
437{
438}
439
440static int null_hci_addr_set(struct HCIInfo *hci, const uint8_t *bd_addr)
441{
442 return -ENOTSUP;
443}
444
445struct HCIInfo null_hci = {
446 .cmd_send = null_hci_send,
447 .sco_send = null_hci_send,
448 .acl_send = null_hci_send,
449 .bdaddr_set = null_hci_addr_set,
450};
451
452
453static inline uint8_t *bt_hci_event_start(struct bt_hci_s *hci,
454 int evt, int len)
455{
456 uint8_t *packet, mask;
457 int mask_byte;
458
459 if (len > 255) {
460 error_report("%s: HCI event params too long (%ib)", __func__, len);
461 exit(-1);
462 }
463
464 mask_byte = (evt - 1) >> 3;
465 mask = 1 << ((evt - 1) & 3);
466 if (mask & bt_event_reserved_mask[mask_byte] & ~hci->event_mask[mask_byte])
467 return NULL;
468
469 packet = hci->evt_packet(hci->opaque);
470 packet[0] = evt;
471 packet[1] = len;
472
473 return &packet[2];
474}
475
476static inline void bt_hci_event(struct bt_hci_s *hci, int evt,
477 void *params, int len)
478{
479 uint8_t *packet = bt_hci_event_start(hci, evt, len);
480
481 if (!packet)
482 return;
483
484 if (len)
485 memcpy(packet, params, len);
486
487 hci->evt_submit(hci->opaque, len + 2);
488}
489
490static inline void bt_hci_event_status(struct bt_hci_s *hci, int status)
491{
492 evt_cmd_status params = {
493 .status = status,
494 .ncmd = 1,
495 .opcode = hci->last_cmd,
496 };
497
498 bt_hci_event(hci, EVT_CMD_STATUS, &params, EVT_CMD_STATUS_SIZE);
499}
500
501static inline void bt_hci_event_complete(struct bt_hci_s *hci,
502 void *ret, int len)
503{
504 uint8_t *packet = bt_hci_event_start(hci, EVT_CMD_COMPLETE,
505 len + EVT_CMD_COMPLETE_SIZE);
506 evt_cmd_complete *params = (evt_cmd_complete *) packet;
507
508 if (!packet)
509 return;
510
511 params->ncmd = 1;
512 params->opcode = hci->last_cmd;
513 if (len)
514 memcpy(&packet[EVT_CMD_COMPLETE_SIZE], ret, len);
515
516 hci->evt_submit(hci->opaque, len + EVT_CMD_COMPLETE_SIZE + 2);
517}
518
519static void bt_hci_inquiry_done(void *opaque)
520{
521 struct bt_hci_s *hci = (struct bt_hci_s *) opaque;
522 uint8_t status = HCI_SUCCESS;
523
524 if (!hci->lm.periodic)
525 hci->lm.inquire = 0;
526
527 /* The specification is inconsistent about this one. Page 565 reads
528 * "The event parameters of Inquiry Complete event will have a summary
529 * of the result from the Inquiry process, which reports the number of
530 * nearby Bluetooth devices that responded [so hci->responses].", but
531 * Event Parameters (see page 729) has only Status. */
532 bt_hci_event(hci, EVT_INQUIRY_COMPLETE, &status, 1);
533}
534
535static void bt_hci_inquiry_result_standard(struct bt_hci_s *hci,
536 struct bt_device_s *slave)
537{
538 inquiry_info params = {
539 .num_responses = 1,
540 .bdaddr = BAINIT(&slave->bd_addr),
541 .pscan_rep_mode = 0x00, /* R0 */
542 .pscan_period_mode = 0x00, /* P0 - deprecated */
543 .pscan_mode = 0x00, /* Standard scan - deprecated */
544 .dev_class[0] = slave->class[0],
545 .dev_class[1] = slave->class[1],
546 .dev_class[2] = slave->class[2],
547 /* TODO: return the clkoff *differenece* */
548 .clock_offset = slave->clkoff, /* Note: no swapping */
549 };
550
551 bt_hci_event(hci, EVT_INQUIRY_RESULT, &params, INQUIRY_INFO_SIZE);
552}
553
554static void bt_hci_inquiry_result_with_rssi(struct bt_hci_s *hci,
555 struct bt_device_s *slave)
556{
557 inquiry_info_with_rssi params = {
558 .num_responses = 1,
559 .bdaddr = BAINIT(&slave->bd_addr),
560 .pscan_rep_mode = 0x00, /* R0 */
561 .pscan_period_mode = 0x00, /* P0 - deprecated */
562 .dev_class[0] = slave->class[0],
563 .dev_class[1] = slave->class[1],
564 .dev_class[2] = slave->class[2],
565 /* TODO: return the clkoff *differenece* */
566 .clock_offset = slave->clkoff, /* Note: no swapping */
567 .rssi = DEFAULT_RSSI_DBM,
568 };
569
570 bt_hci_event(hci, EVT_INQUIRY_RESULT_WITH_RSSI,
571 &params, INQUIRY_INFO_WITH_RSSI_SIZE);
572}
573
574static void bt_hci_inquiry_result(struct bt_hci_s *hci,
575 struct bt_device_s *slave)
576{
577 if (!slave->inquiry_scan || !hci->lm.responses_left)
578 return;
579
580 hci->lm.responses_left --;
581 hci->lm.responses ++;
582
583 switch (hci->lm.inquiry_mode) {
584 case 0x00:
585 bt_hci_inquiry_result_standard(hci, slave);
586 return;
587 case 0x01:
588 bt_hci_inquiry_result_with_rssi(hci, slave);
589 return;
590 default:
591 error_report("%s: bad inquiry mode %02x", __func__,
592 hci->lm.inquiry_mode);
593 exit(-1);
594 }
595}
596
597static void bt_hci_mod_timer_1280ms(QEMUTimer *timer, int period)
598{
599 timer_mod(timer, qemu_clock_get_ns(QEMU_CLOCK_VIRTUAL) +
600 (uint64_t)(period << 7) * 10000000);
601}
602
603static void bt_hci_inquiry_start(struct bt_hci_s *hci, int length)
604{
605 struct bt_device_s *slave;
606
607 hci->lm.inquiry_length = length;
608 for (slave = hci->device.net->slave; slave; slave = slave->next)
609 /* Don't uncover ourselves. */
610 if (slave != &hci->device)
611 bt_hci_inquiry_result(hci, slave);
612
613 /* TODO: register for a callback on a new device's addition to the
614 * scatternet so that if it's added before inquiry_length expires,
615 * an Inquiry Result is generated immediately. Alternatively re-loop
616 * through the devices on the inquiry_length expiration and report
617 * devices not seen before. */
618 if (hci->lm.responses_left)
619 bt_hci_mod_timer_1280ms(hci->lm.inquiry_done, hci->lm.inquiry_length);
620 else
621 bt_hci_inquiry_done(hci);
622
623 if (hci->lm.periodic)
624 bt_hci_mod_timer_1280ms(hci->lm.inquiry_next, hci->lm.inquiry_period);
625}
626
627static void bt_hci_inquiry_next(void *opaque)
628{
629 struct bt_hci_s *hci = (struct bt_hci_s *) opaque;
630
631 hci->lm.responses_left += hci->lm.responses;
632 hci->lm.responses = 0;
633 bt_hci_inquiry_start(hci, hci->lm.inquiry_length);
634}
635
636static inline int bt_hci_handle_bad(struct bt_hci_s *hci, uint16_t handle)
637{
638 return !(handle & HCI_HANDLE_OFFSET) ||
639 handle >= (HCI_HANDLE_OFFSET | HCI_HANDLES_MAX) ||
640 !hci->lm.handle[handle & ~HCI_HANDLE_OFFSET].link;
641}
642
643static inline int bt_hci_role_master(struct bt_hci_s *hci, uint16_t handle)
644{
645 return !!(hci->lm.role_bmp & (1 << (handle & ~HCI_HANDLE_OFFSET)));
646}
647
648static inline struct bt_device_s *bt_hci_remote_dev(struct bt_hci_s *hci,
649 uint16_t handle)
650{
651 struct bt_link_s *link = hci->lm.handle[handle & ~HCI_HANDLE_OFFSET].link;
652
653 return bt_hci_role_master(hci, handle) ? link->slave : link->host;
654}
655
656static void bt_hci_mode_tick(void *opaque);
657static void bt_hci_lmp_link_establish(struct bt_hci_s *hci,
658 struct bt_link_s *link, int master)
659{
660 hci->lm.handle[hci->lm.last_handle].link = link;
661
662 if (master) {
663 /* We are the master side of an ACL link */
664 hci->lm.role_bmp |= 1 << hci->lm.last_handle;
665
666 hci->lm.handle[hci->lm.last_handle].lmp_acl_data =
667 link->slave->lmp_acl_data;
668 } else {
669 /* We are the slave side of an ACL link */
670 hci->lm.role_bmp &= ~(1 << hci->lm.last_handle);
671
672 hci->lm.handle[hci->lm.last_handle].lmp_acl_data =
673 link->host->lmp_acl_resp;
674 }
675
676 /* Mode */
677 if (master) {
678 link->acl_mode = acl_active;
679 hci->lm.handle[hci->lm.last_handle].acl_mode_timer =
680 timer_new_ns(QEMU_CLOCK_VIRTUAL, bt_hci_mode_tick, link);
681 }
682}
683
684static void bt_hci_lmp_link_teardown(struct bt_hci_s *hci, uint16_t handle)
685{
686 handle &= ~HCI_HANDLE_OFFSET;
687 hci->lm.handle[handle].link = NULL;
688
689 if (bt_hci_role_master(hci, handle)) {
690 timer_del(hci->lm.handle[handle].acl_mode_timer);
691 timer_free(hci->lm.handle[handle].acl_mode_timer);
692 }
693}
694
695static int bt_hci_connect(struct bt_hci_s *hci, bdaddr_t *bdaddr)
696{
697 struct bt_device_s *slave;
698 struct bt_link_s link;
699
700 for (slave = hci->device.net->slave; slave; slave = slave->next)
701 if (slave->page_scan && !bacmp(&slave->bd_addr, bdaddr))
702 break;
703 if (!slave || slave == &hci->device)
704 return -ENODEV;
705
706 bacpy(&hci->lm.awaiting_bdaddr[hci->lm.connecting ++], &slave->bd_addr);
707
708 link.slave = slave;
709 link.host = &hci->device;
710 link.slave->lmp_connection_request(&link); /* Always last */
711
712 return 0;
713}
714
715static void bt_hci_connection_reject(struct bt_hci_s *hci,
716 struct bt_device_s *host, uint8_t because)
717{
718 struct bt_link_s link = {
719 .slave = &hci->device,
720 .host = host,
721 /* Rest uninitialised */
722 };
723
724 host->reject_reason = because;
725 host->lmp_connection_complete(&link);
726}
727
728static void bt_hci_connection_reject_event(struct bt_hci_s *hci,
729 bdaddr_t *bdaddr)
730{
731 evt_conn_complete params;
732
733 params.status = HCI_NO_CONNECTION;
734 params.handle = 0;
735 bacpy(&params.bdaddr, bdaddr);
736 params.link_type = ACL_LINK;
737 params.encr_mode = 0x00; /* Encryption not required */
738 bt_hci_event(hci, EVT_CONN_COMPLETE, &params, EVT_CONN_COMPLETE_SIZE);
739}
740
741static void bt_hci_connection_accept(struct bt_hci_s *hci,
742 struct bt_device_s *host)
743{
744 struct bt_hci_link_s *link = g_malloc0(sizeof(struct bt_hci_link_s));
745 evt_conn_complete params;
746 uint16_t handle;
747 uint8_t status = HCI_SUCCESS;
748 int tries = HCI_HANDLES_MAX;
749
750 /* Make a connection handle */
751 do {
752 while (hci->lm.handle[++ hci->lm.last_handle].link && -- tries)
753 hci->lm.last_handle &= HCI_HANDLES_MAX - 1;
754 handle = hci->lm.last_handle | HCI_HANDLE_OFFSET;
755 } while ((handle == hci->asb_handle || handle == hci->psb_handle) &&
756 tries);
757
758 if (!tries) {
759 g_free(link);
760 bt_hci_connection_reject(hci, host, HCI_REJECTED_LIMITED_RESOURCES);
761 status = HCI_NO_CONNECTION;
762 goto complete;
763 }
764
765 link->btlink.slave = &hci->device;
766 link->btlink.host = host;
767 link->handle = handle;
768
769 /* Link established */
770 bt_hci_lmp_link_establish(hci, &link->btlink, 0);
771
772complete:
773 params.status = status;
774 params.handle = HNDL(handle);
775 bacpy(&params.bdaddr, &host->bd_addr);
776 params.link_type = ACL_LINK;
777 params.encr_mode = 0x00; /* Encryption not required */
778 bt_hci_event(hci, EVT_CONN_COMPLETE, &params, EVT_CONN_COMPLETE_SIZE);
779
780 /* Neets to be done at the very end because it can trigger a (nested)
781 * disconnected, in case the other and had cancelled the request
782 * locally. */
783 if (status == HCI_SUCCESS) {
784 host->reject_reason = 0;
785 host->lmp_connection_complete(&link->btlink);
786 }
787}
788
789static void bt_hci_lmp_connection_request(struct bt_link_s *link)
790{
791 struct bt_hci_s *hci = hci_from_device(link->slave);
792 evt_conn_request params;
793
794 if (hci->conn_req_host) {
795 bt_hci_connection_reject(hci, link->host,
796 HCI_REJECTED_LIMITED_RESOURCES);
797 return;
798 }
799 hci->conn_req_host = link->host;
800 /* TODO: if masked and auto-accept, then auto-accept,
801 * if masked and not auto-accept, then auto-reject */
802 /* TODO: kick the hci->conn_accept_timer, timeout after
803 * hci->conn_accept_tout * 0.625 msec */
804
805 bacpy(&params.bdaddr, &link->host->bd_addr);
806 memcpy(&params.dev_class, &link->host->class, sizeof(params.dev_class));
807 params.link_type = ACL_LINK;
808 bt_hci_event(hci, EVT_CONN_REQUEST, &params, EVT_CONN_REQUEST_SIZE);
809}
810
811static void bt_hci_conn_accept_timeout(void *opaque)
812{
813 struct bt_hci_s *hci = (struct bt_hci_s *) opaque;
814
815 if (!hci->conn_req_host)
816 /* Already accepted or rejected. If the other end cancelled the
817 * connection request then we still have to reject or accept it
818 * and then we'll get a disconnect. */
819 return;
820
821 /* TODO */
822}
823
824/* Remove from the list of devices which we wanted to connect to and
825 * are awaiting a response from. If the callback sees a response from
826 * a device which is not on the list it will assume it's a connection
827 * that's been cancelled by the host in the meantime and immediately
828 * try to detach the link and send a Connection Complete. */
829static int bt_hci_lmp_connection_ready(struct bt_hci_s *hci,
830 bdaddr_t *bdaddr)
831{
832 int i;
833
834 for (i = 0; i < hci->lm.connecting; i ++)
835 if (!bacmp(&hci->lm.awaiting_bdaddr[i], bdaddr)) {
836 if (i < -- hci->lm.connecting)
837 bacpy(&hci->lm.awaiting_bdaddr[i],
838 &hci->lm.awaiting_bdaddr[hci->lm.connecting]);
839 return 0;
840 }
841
842 return 1;
843}
844
845static void bt_hci_lmp_connection_complete(struct bt_link_s *link)
846{
847 struct bt_hci_s *hci = hci_from_device(link->host);
848 evt_conn_complete params;
849 uint16_t handle;
850 uint8_t status = HCI_SUCCESS;
851 int tries = HCI_HANDLES_MAX;
852
853 if (bt_hci_lmp_connection_ready(hci, &link->slave->bd_addr)) {
854 if (!hci->device.reject_reason)
855 link->slave->lmp_disconnect_slave(link);
856 handle = 0;
857 status = HCI_NO_CONNECTION;
858 goto complete;
859 }
860
861 if (hci->device.reject_reason) {
862 handle = 0;
863 status = hci->device.reject_reason;
864 goto complete;
865 }
866
867 /* Make a connection handle */
868 do {
869 while (hci->lm.handle[++ hci->lm.last_handle].link && -- tries)
870 hci->lm.last_handle &= HCI_HANDLES_MAX - 1;
871 handle = hci->lm.last_handle | HCI_HANDLE_OFFSET;
872 } while ((handle == hci->asb_handle || handle == hci->psb_handle) &&
873 tries);
874
875 if (!tries) {
876 link->slave->lmp_disconnect_slave(link);
877 status = HCI_NO_CONNECTION;
878 goto complete;
879 }
880
881 /* Link established */
882 link->handle = handle;
883 bt_hci_lmp_link_establish(hci, link, 1);
884
885complete:
886 params.status = status;
887 params.handle = HNDL(handle);
888 params.link_type = ACL_LINK;
889 bacpy(&params.bdaddr, &link->slave->bd_addr);
890 params.encr_mode = 0x00; /* Encryption not required */
891 bt_hci_event(hci, EVT_CONN_COMPLETE, &params, EVT_CONN_COMPLETE_SIZE);
892}
893
894static void bt_hci_disconnect(struct bt_hci_s *hci,
895 uint16_t handle, int reason)
896{
897 struct bt_link_s *btlink =
898 hci->lm.handle[handle & ~HCI_HANDLE_OFFSET].link;
899 struct bt_hci_link_s *link;
900 evt_disconn_complete params;
901
902 if (bt_hci_role_master(hci, handle)) {
903 btlink->slave->reject_reason = reason;
904 btlink->slave->lmp_disconnect_slave(btlink);
905 /* The link pointer is invalid from now on */
906
907 goto complete;
908 }
909
910 btlink->host->reject_reason = reason;
911 btlink->host->lmp_disconnect_master(btlink);
912
913 /* We are the slave, we get to clean this burden */
914 link = (struct bt_hci_link_s *) btlink;
915 g_free(link);
916
917complete:
918 bt_hci_lmp_link_teardown(hci, handle);
919
920 params.status = HCI_SUCCESS;
921 params.handle = HNDL(handle);
922 params.reason = HCI_CONNECTION_TERMINATED;
923 bt_hci_event(hci, EVT_DISCONN_COMPLETE,
924 &params, EVT_DISCONN_COMPLETE_SIZE);
925}
926
927/* TODO: use only one function */
928static void bt_hci_lmp_disconnect_host(struct bt_link_s *link)
929{
930 struct bt_hci_s *hci = hci_from_device(link->host);
931 uint16_t handle = link->handle;
932 evt_disconn_complete params;
933
934 bt_hci_lmp_link_teardown(hci, handle);
935
936 params.status = HCI_SUCCESS;
937 params.handle = HNDL(handle);
938 params.reason = hci->device.reject_reason;
939 bt_hci_event(hci, EVT_DISCONN_COMPLETE,
940 &params, EVT_DISCONN_COMPLETE_SIZE);
941}
942
943static void bt_hci_lmp_disconnect_slave(struct bt_link_s *btlink)
944{
945 struct bt_hci_link_s *link = (struct bt_hci_link_s *) btlink;
946 struct bt_hci_s *hci = hci_from_device(btlink->slave);
947 uint16_t handle = link->handle;
948 evt_disconn_complete params;
949
950 g_free(link);
951
952 bt_hci_lmp_link_teardown(hci, handle);
953
954 params.status = HCI_SUCCESS;
955 params.handle = HNDL(handle);
956 params.reason = hci->device.reject_reason;
957 bt_hci_event(hci, EVT_DISCONN_COMPLETE,
958 &params, EVT_DISCONN_COMPLETE_SIZE);
959}
960
961static int bt_hci_name_req(struct bt_hci_s *hci, bdaddr_t *bdaddr)
962{
963 struct bt_device_s *slave;
964 evt_remote_name_req_complete params;
965
966 for (slave = hci->device.net->slave; slave; slave = slave->next)
967 if (slave->page_scan && !bacmp(&slave->bd_addr, bdaddr))
968 break;
969 if (!slave)
970 return -ENODEV;
971
972 bt_hci_event_status(hci, HCI_SUCCESS);
973
974 params.status = HCI_SUCCESS;
975 bacpy(&params.bdaddr, &slave->bd_addr);
976 pstrcpy(params.name, sizeof(params.name), slave->lmp_name ?: "");
977 bt_hci_event(hci, EVT_REMOTE_NAME_REQ_COMPLETE,
978 &params, EVT_REMOTE_NAME_REQ_COMPLETE_SIZE);
979
980 return 0;
981}
982
983static int bt_hci_features_req(struct bt_hci_s *hci, uint16_t handle)
984{
985 struct bt_device_s *slave;
986 evt_read_remote_features_complete params;
987
988 if (bt_hci_handle_bad(hci, handle))
989 return -ENODEV;
990
991 slave = bt_hci_remote_dev(hci, handle);
992
993 bt_hci_event_status(hci, HCI_SUCCESS);
994
995 params.status = HCI_SUCCESS;
996 params.handle = HNDL(handle);
997 params.features[0] = (slave->lmp_caps >> 0) & 0xff;
998 params.features[1] = (slave->lmp_caps >> 8) & 0xff;
999 params.features[2] = (slave->lmp_caps >> 16) & 0xff;
1000 params.features[3] = (slave->lmp_caps >> 24) & 0xff;
1001 params.features[4] = (slave->lmp_caps >> 32) & 0xff;
1002 params.features[5] = (slave->lmp_caps >> 40) & 0xff;
1003 params.features[6] = (slave->lmp_caps >> 48) & 0xff;
1004 params.features[7] = (slave->lmp_caps >> 56) & 0xff;
1005 bt_hci_event(hci, EVT_READ_REMOTE_FEATURES_COMPLETE,
1006 &params, EVT_READ_REMOTE_FEATURES_COMPLETE_SIZE);
1007
1008 return 0;
1009}
1010
1011static int bt_hci_version_req(struct bt_hci_s *hci, uint16_t handle)
1012{
1013 evt_read_remote_version_complete params;
1014
1015 if (bt_hci_handle_bad(hci, handle))
1016 return -ENODEV;
1017
1018 bt_hci_remote_dev(hci, handle);
1019
1020 bt_hci_event_status(hci, HCI_SUCCESS);
1021
1022 params.status = HCI_SUCCESS;
1023 params.handle = HNDL(handle);
1024 params.lmp_ver = 0x03;
1025 params.manufacturer = cpu_to_le16(0xa000);
1026 params.lmp_subver = cpu_to_le16(0xa607);
1027 bt_hci_event(hci, EVT_READ_REMOTE_VERSION_COMPLETE,
1028 &params, EVT_READ_REMOTE_VERSION_COMPLETE_SIZE);
1029
1030 return 0;
1031}
1032
1033static int bt_hci_clkoffset_req(struct bt_hci_s *hci, uint16_t handle)
1034{
1035 struct bt_device_s *slave;
1036 evt_read_clock_offset_complete params;
1037
1038 if (bt_hci_handle_bad(hci, handle))
1039 return -ENODEV;
1040
1041 slave = bt_hci_remote_dev(hci, handle);
1042
1043 bt_hci_event_status(hci, HCI_SUCCESS);
1044
1045 params.status = HCI_SUCCESS;
1046 params.handle = HNDL(handle);
1047 /* TODO: return the clkoff *differenece* */
1048 params.clock_offset = slave->clkoff; /* Note: no swapping */
1049 bt_hci_event(hci, EVT_READ_CLOCK_OFFSET_COMPLETE,
1050 &params, EVT_READ_CLOCK_OFFSET_COMPLETE_SIZE);
1051
1052 return 0;
1053}
1054
1055static void bt_hci_event_mode(struct bt_hci_s *hci, struct bt_link_s *link,
1056 uint16_t handle)
1057{
1058 evt_mode_change params = {
1059 .status = HCI_SUCCESS,
1060 .handle = HNDL(handle),
1061 .mode = link->acl_mode,
1062 .interval = cpu_to_le16(link->acl_interval),
1063 };
1064
1065 bt_hci_event(hci, EVT_MODE_CHANGE, &params, EVT_MODE_CHANGE_SIZE);
1066}
1067
1068static void bt_hci_lmp_mode_change_master(struct bt_hci_s *hci,
1069 struct bt_link_s *link, int mode, uint16_t interval)
1070{
1071 link->acl_mode = mode;
1072 link->acl_interval = interval;
1073
1074 bt_hci_event_mode(hci, link, link->handle);
1075
1076 link->slave->lmp_mode_change(link);
1077}
1078
1079static void bt_hci_lmp_mode_change_slave(struct bt_link_s *btlink)
1080{
1081 struct bt_hci_link_s *link = (struct bt_hci_link_s *) btlink;
1082 struct bt_hci_s *hci = hci_from_device(btlink->slave);
1083
1084 bt_hci_event_mode(hci, btlink, link->handle);
1085}
1086
1087static int bt_hci_mode_change(struct bt_hci_s *hci, uint16_t handle,
1088 int interval, int mode)
1089{
1090 struct bt_hci_master_link_s *link;
1091
1092 if (bt_hci_handle_bad(hci, handle) || !bt_hci_role_master(hci, handle))
1093 return -ENODEV;
1094
1095 link = &hci->lm.handle[handle & ~HCI_HANDLE_OFFSET];
1096 if (link->link->acl_mode != acl_active) {
1097 bt_hci_event_status(hci, HCI_COMMAND_DISALLOWED);
1098 return 0;
1099 }
1100
1101 bt_hci_event_status(hci, HCI_SUCCESS);
1102
1103 timer_mod(link->acl_mode_timer, qemu_clock_get_ns(QEMU_CLOCK_VIRTUAL) +
1104 ((uint64_t)interval * 625) * 1000);
1105 bt_hci_lmp_mode_change_master(hci, link->link, mode, interval);
1106
1107 return 0;
1108}
1109
1110static int bt_hci_mode_cancel(struct bt_hci_s *hci, uint16_t handle, int mode)
1111{
1112 struct bt_hci_master_link_s *link;
1113
1114 if (bt_hci_handle_bad(hci, handle) || !bt_hci_role_master(hci, handle))
1115 return -ENODEV;
1116
1117 link = &hci->lm.handle[handle & ~HCI_HANDLE_OFFSET];
1118 if (link->link->acl_mode != mode) {
1119 bt_hci_event_status(hci, HCI_COMMAND_DISALLOWED);
1120
1121 return 0;
1122 }
1123
1124 bt_hci_event_status(hci, HCI_SUCCESS);
1125
1126 timer_del(link->acl_mode_timer);
1127 bt_hci_lmp_mode_change_master(hci, link->link, acl_active, 0);
1128
1129 return 0;
1130}
1131
1132static void bt_hci_mode_tick(void *opaque)
1133{
1134 struct bt_link_s *link = opaque;
1135 struct bt_hci_s *hci = hci_from_device(link->host);
1136
1137 bt_hci_lmp_mode_change_master(hci, link, acl_active, 0);
1138}
1139
1140static void bt_hci_reset(struct bt_hci_s *hci)
1141{
1142 hci->acl_len = 0;
1143 hci->last_cmd = 0;
1144 hci->lm.connecting = 0;
1145
1146 hci->event_mask[0] = 0xff;
1147 hci->event_mask[1] = 0xff;
1148 hci->event_mask[2] = 0xff;
1149 hci->event_mask[3] = 0xff;
1150 hci->event_mask[4] = 0xff;
1151 hci->event_mask[5] = 0x1f;
1152 hci->event_mask[6] = 0x00;
1153 hci->event_mask[7] = 0x00;
1154 hci->device.inquiry_scan = 0;
1155 hci->device.page_scan = 0;
1156 g_free((void *) hci->device.lmp_name);
1157 hci->device.lmp_name = NULL;
1158 hci->device.class[0] = 0x00;
1159 hci->device.class[1] = 0x00;
1160 hci->device.class[2] = 0x00;
1161 hci->voice_setting = 0x0000;
1162 hci->conn_accept_tout = 0x1f40;
1163 hci->lm.inquiry_mode = 0x00;
1164
1165 hci->psb_handle = 0x000;
1166 hci->asb_handle = 0x000;
1167
1168 /* XXX: timer_del(sl->acl_mode_timer); for all links */
1169 timer_del(hci->lm.inquiry_done);
1170 timer_del(hci->lm.inquiry_next);
1171 timer_del(hci->conn_accept_timer);
1172}
1173
1174static void bt_hci_read_local_version_rp(struct bt_hci_s *hci)
1175{
1176 read_local_version_rp lv = {
1177 .status = HCI_SUCCESS,
1178 .hci_ver = 0x03,
1179 .hci_rev = cpu_to_le16(0xa607),
1180 .lmp_ver = 0x03,
1181 .manufacturer = cpu_to_le16(0xa000),
1182 .lmp_subver = cpu_to_le16(0xa607),
1183 };
1184
1185 bt_hci_event_complete(hci, &lv, READ_LOCAL_VERSION_RP_SIZE);
1186}
1187
1188static void bt_hci_read_local_commands_rp(struct bt_hci_s *hci)
1189{
1190 read_local_commands_rp lc = {
1191 .status = HCI_SUCCESS,
1192 .commands = {
1193 /* Keep updated! */
1194 /* Also, keep in sync with hci->device.lmp_caps in bt_new_hci */
1195 0xbf, 0x80, 0xf9, 0x03, 0xb2, 0xc0, 0x03, 0xc3,
1196 0x00, 0x0f, 0x80, 0x00, 0xc0, 0x00, 0xe8, 0x13,
1197 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
1198 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
1199 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
1200 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
1201 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
1202 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
1203 },
1204 };
1205
1206 bt_hci_event_complete(hci, &lc, READ_LOCAL_COMMANDS_RP_SIZE);
1207}
1208
1209static void bt_hci_read_local_features_rp(struct bt_hci_s *hci)
1210{
1211 read_local_features_rp lf = {
1212 .status = HCI_SUCCESS,
1213 .features = {
1214 (hci->device.lmp_caps >> 0) & 0xff,
1215 (hci->device.lmp_caps >> 8) & 0xff,
1216 (hci->device.lmp_caps >> 16) & 0xff,
1217 (hci->device.lmp_caps >> 24) & 0xff,
1218 (hci->device.lmp_caps >> 32) & 0xff,
1219 (hci->device.lmp_caps >> 40) & 0xff,
1220 (hci->device.lmp_caps >> 48) & 0xff,
1221 (hci->device.lmp_caps >> 56) & 0xff,
1222 },
1223 };
1224
1225 bt_hci_event_complete(hci, &lf, READ_LOCAL_FEATURES_RP_SIZE);
1226}
1227
1228static void bt_hci_read_local_ext_features_rp(struct bt_hci_s *hci, int page)
1229{
1230 read_local_ext_features_rp lef = {
1231 .status = HCI_SUCCESS,
1232 .page_num = page,
1233 .max_page_num = 0x00,
1234 .features = {
1235 /* Keep updated! */
1236 0x5f, 0x35, 0x85, 0x7e, 0x9b, 0x19, 0x00, 0x80,
1237 },
1238 };
1239 if (page)
1240 memset(lef.features, 0, sizeof(lef.features));
1241
1242 bt_hci_event_complete(hci, &lef, READ_LOCAL_EXT_FEATURES_RP_SIZE);
1243}
1244
1245static void bt_hci_read_buffer_size_rp(struct bt_hci_s *hci)
1246{
1247 read_buffer_size_rp bs = {
1248 /* This can be made configurable, for one standard USB dongle HCI
1249 * the four values are cpu_to_le16(0x0180), 0x40,
1250 * cpu_to_le16(0x0008), cpu_to_le16(0x0008). */
1251 .status = HCI_SUCCESS,
1252 .acl_mtu = cpu_to_le16(0x0200),
1253 .sco_mtu = 0,
1254 .acl_max_pkt = cpu_to_le16(0x0001),
1255 .sco_max_pkt = cpu_to_le16(0x0000),
1256 };
1257
1258 bt_hci_event_complete(hci, &bs, READ_BUFFER_SIZE_RP_SIZE);
1259}
1260
1261/* Deprecated in V2.0 (page 661) */
1262static void bt_hci_read_country_code_rp(struct bt_hci_s *hci)
1263{
1264 read_country_code_rp cc ={
1265 .status = HCI_SUCCESS,
1266 .country_code = 0x00, /* North America & Europe^1 and Japan */
1267 };
1268
1269 bt_hci_event_complete(hci, &cc, READ_COUNTRY_CODE_RP_SIZE);
1270
1271 /* ^1. Except France, sorry */
1272}
1273
1274static void bt_hci_read_bd_addr_rp(struct bt_hci_s *hci)
1275{
1276 read_bd_addr_rp ba = {
1277 .status = HCI_SUCCESS,
1278 .bdaddr = BAINIT(&hci->device.bd_addr),
1279 };
1280
1281 bt_hci_event_complete(hci, &ba, READ_BD_ADDR_RP_SIZE);
1282}
1283
1284static int bt_hci_link_quality_rp(struct bt_hci_s *hci, uint16_t handle)
1285{
1286 read_link_quality_rp lq = {
1287 .status = HCI_SUCCESS,
1288 .handle = HNDL(handle),
1289 .link_quality = 0xff,
1290 };
1291
1292 if (bt_hci_handle_bad(hci, handle))
1293 lq.status = HCI_NO_CONNECTION;
1294
1295 bt_hci_event_complete(hci, &lq, READ_LINK_QUALITY_RP_SIZE);
1296 return 0;
1297}
1298
1299/* Generate a Command Complete event with only the Status parameter */
1300static inline void bt_hci_event_complete_status(struct bt_hci_s *hci,
1301 uint8_t status)
1302{
1303 bt_hci_event_complete(hci, &status, 1);
1304}
1305
1306static inline void bt_hci_event_complete_conn_cancel(struct bt_hci_s *hci,
1307 uint8_t status, bdaddr_t *bd_addr)
1308{
1309 create_conn_cancel_rp params = {
1310 .status = status,
1311 .bdaddr = BAINIT(bd_addr),
1312 };
1313
1314 bt_hci_event_complete(hci, &params, CREATE_CONN_CANCEL_RP_SIZE);
1315}
1316
1317static inline void bt_hci_event_auth_complete(struct bt_hci_s *hci,
1318 uint16_t handle)
1319{
1320 evt_auth_complete params = {
1321 .status = HCI_SUCCESS,
1322 .handle = HNDL(handle),
1323 };
1324
1325 bt_hci_event(hci, EVT_AUTH_COMPLETE, &params, EVT_AUTH_COMPLETE_SIZE);
1326}
1327
1328static inline void bt_hci_event_encrypt_change(struct bt_hci_s *hci,
1329 uint16_t handle, uint8_t mode)
1330{
1331 evt_encrypt_change params = {
1332 .status = HCI_SUCCESS,
1333 .handle = HNDL(handle),
1334 .encrypt = mode,
1335 };
1336
1337 bt_hci_event(hci, EVT_ENCRYPT_CHANGE, &params, EVT_ENCRYPT_CHANGE_SIZE);
1338}
1339
1340static inline void bt_hci_event_complete_name_cancel(struct bt_hci_s *hci,
1341 bdaddr_t *bd_addr)
1342{
1343 remote_name_req_cancel_rp params = {
1344 .status = HCI_INVALID_PARAMETERS,
1345 .bdaddr = BAINIT(bd_addr),
1346 };
1347
1348 bt_hci_event_complete(hci, &params, REMOTE_NAME_REQ_CANCEL_RP_SIZE);
1349}
1350
1351static inline void bt_hci_event_read_remote_ext_features(struct bt_hci_s *hci,
1352 uint16_t handle)
1353{
1354 evt_read_remote_ext_features_complete params = {
1355 .status = HCI_UNSUPPORTED_FEATURE,
1356 .handle = HNDL(handle),
1357 /* Rest uninitialised */
1358 };
1359
1360 bt_hci_event(hci, EVT_READ_REMOTE_EXT_FEATURES_COMPLETE,
1361 &params, EVT_READ_REMOTE_EXT_FEATURES_COMPLETE_SIZE);
1362}
1363
1364static inline void bt_hci_event_complete_lmp_handle(struct bt_hci_s *hci,
1365 uint16_t handle)
1366{
1367 read_lmp_handle_rp params = {
1368 .status = HCI_NO_CONNECTION,
1369 .handle = HNDL(handle),
1370 .reserved = 0,
1371 /* Rest uninitialised */
1372 };
1373
1374 bt_hci_event_complete(hci, &params, READ_LMP_HANDLE_RP_SIZE);
1375}
1376
1377static inline void bt_hci_event_complete_role_discovery(struct bt_hci_s *hci,
1378 int status, uint16_t handle, int master)
1379{
1380 role_discovery_rp params = {
1381 .status = status,
1382 .handle = HNDL(handle),
1383 .role = master ? 0x00 : 0x01,
1384 };
1385
1386 bt_hci_event_complete(hci, &params, ROLE_DISCOVERY_RP_SIZE);
1387}
1388
1389static inline void bt_hci_event_complete_flush(struct bt_hci_s *hci,
1390 int status, uint16_t handle)
1391{
1392 flush_rp params = {
1393 .status = status,
1394 .handle = HNDL(handle),
1395 };
1396
1397 bt_hci_event_complete(hci, &params, FLUSH_RP_SIZE);
1398}
1399
1400static inline void bt_hci_event_complete_read_local_name(struct bt_hci_s *hci)
1401{
1402 read_local_name_rp params;
1403 params.status = HCI_SUCCESS;
1404 memset(params.name, 0, sizeof(params.name));
1405 if (hci->device.lmp_name)
1406 pstrcpy(params.name, sizeof(params.name), hci->device.lmp_name);
1407
1408 bt_hci_event_complete(hci, &params, READ_LOCAL_NAME_RP_SIZE);
1409}
1410
1411static inline void bt_hci_event_complete_read_conn_accept_timeout(
1412 struct bt_hci_s *hci)
1413{
1414 read_conn_accept_timeout_rp params = {
1415 .status = HCI_SUCCESS,
1416 .timeout = cpu_to_le16(hci->conn_accept_tout),
1417 };
1418
1419 bt_hci_event_complete(hci, &params, READ_CONN_ACCEPT_TIMEOUT_RP_SIZE);
1420}
1421
1422static inline void bt_hci_event_complete_read_scan_enable(struct bt_hci_s *hci)
1423{
1424 read_scan_enable_rp params = {
1425 .status = HCI_SUCCESS,
1426 .enable =
1427 (hci->device.inquiry_scan ? SCAN_INQUIRY : 0) |
1428 (hci->device.page_scan ? SCAN_PAGE : 0),
1429 };
1430
1431 bt_hci_event_complete(hci, &params, READ_SCAN_ENABLE_RP_SIZE);
1432}
1433
1434static inline void bt_hci_event_complete_read_local_class(struct bt_hci_s *hci)
1435{
1436 read_class_of_dev_rp params;
1437
1438 params.status = HCI_SUCCESS;
1439 memcpy(params.dev_class, hci->device.class, sizeof(params.dev_class));
1440
1441 bt_hci_event_complete(hci, &params, READ_CLASS_OF_DEV_RP_SIZE);
1442}
1443
1444static inline void bt_hci_event_complete_voice_setting(struct bt_hci_s *hci)
1445{
1446 read_voice_setting_rp params = {
1447 .status = HCI_SUCCESS,
1448 .voice_setting = hci->voice_setting, /* Note: no swapping */
1449 };
1450
1451 bt_hci_event_complete(hci, &params, READ_VOICE_SETTING_RP_SIZE);
1452}
1453
1454static inline void bt_hci_event_complete_read_inquiry_mode(
1455 struct bt_hci_s *hci)
1456{
1457 read_inquiry_mode_rp params = {
1458 .status = HCI_SUCCESS,
1459 .mode = hci->lm.inquiry_mode,
1460 };
1461
1462 bt_hci_event_complete(hci, &params, READ_INQUIRY_MODE_RP_SIZE);
1463}
1464
1465static inline void bt_hci_event_num_comp_pkts(struct bt_hci_s *hci,
1466 uint16_t handle, int packets)
1467{
1468 uint16_t buf[EVT_NUM_COMP_PKTS_SIZE(1) / 2 + 1];
1469 evt_num_comp_pkts *params = (void *) ((uint8_t *) buf + 1);
1470
1471 params->num_hndl = 1;
1472 params->connection->handle = HNDL(handle);
1473 params->connection->num_packets = cpu_to_le16(packets);
1474
1475 bt_hci_event(hci, EVT_NUM_COMP_PKTS, params, EVT_NUM_COMP_PKTS_SIZE(1));
1476}
1477
1478static void bt_submit_hci(struct HCIInfo *info,
1479 const uint8_t *data, int length)
1480{
1481 struct bt_hci_s *hci = hci_from_info(info);
1482 uint16_t cmd;
1483 int paramlen, i;
1484
1485 if (length < HCI_COMMAND_HDR_SIZE)
1486 goto short_hci;
1487
1488 memcpy(&hci->last_cmd, data, 2);
1489
1490 cmd = (data[1] << 8) | data[0];
1491 paramlen = data[2];
1492 if (cmd_opcode_ogf(cmd) == 0 || cmd_opcode_ocf(cmd) == 0) /* NOP */
1493 return;
1494
1495 data += HCI_COMMAND_HDR_SIZE;
1496 length -= HCI_COMMAND_HDR_SIZE;
1497
1498 if (paramlen > length)
1499 return;
1500
1501#define PARAM(cmd, param) (((cmd##_cp *) data)->param)
1502#define PARAM16(cmd, param) lduw_le_p(&PARAM(cmd, param))
1503#define PARAMHANDLE(cmd) PARAM16(cmd, handle)
1504#define LENGTH_CHECK(cmd) if (length < sizeof(cmd##_cp)) goto short_hci
1505 /* Note: the supported commands bitmask in bt_hci_read_local_commands_rp
1506 * needs to be updated every time a command is implemented here! */
1507 switch (cmd) {
1508 case cmd_opcode_pack(OGF_LINK_CTL, OCF_INQUIRY):
1509 LENGTH_CHECK(inquiry);
1510
1511 if (PARAM(inquiry, length) < 1) {
1512 bt_hci_event_complete_status(hci, HCI_INVALID_PARAMETERS);
1513 break;
1514 }
1515
1516 hci->lm.inquire = 1;
1517 hci->lm.periodic = 0;
1518 hci->lm.responses_left = PARAM(inquiry, num_rsp) ?: INT_MAX;
1519 hci->lm.responses = 0;
1520 bt_hci_event_status(hci, HCI_SUCCESS);
1521 bt_hci_inquiry_start(hci, PARAM(inquiry, length));
1522 break;
1523
1524 case cmd_opcode_pack(OGF_LINK_CTL, OCF_INQUIRY_CANCEL):
1525 if (!hci->lm.inquire || hci->lm.periodic) {
1526 fprintf(stderr, "%s: Inquiry Cancel should only be issued after "
1527 "the Inquiry command has been issued, a Command "
1528 "Status event has been received for the Inquiry "
1529 "command, and before the Inquiry Complete event "
1530 "occurs", __func__);
1531 bt_hci_event_complete_status(hci, HCI_COMMAND_DISALLOWED);
1532 break;
1533 }
1534
1535 hci->lm.inquire = 0;
1536 timer_del(hci->lm.inquiry_done);
1537 bt_hci_event_complete_status(hci, HCI_SUCCESS);
1538 break;
1539
1540 case cmd_opcode_pack(OGF_LINK_CTL, OCF_PERIODIC_INQUIRY):
1541 LENGTH_CHECK(periodic_inquiry);
1542
1543 if (!(PARAM(periodic_inquiry, length) <
1544 PARAM16(periodic_inquiry, min_period) &&
1545 PARAM16(periodic_inquiry, min_period) <
1546 PARAM16(periodic_inquiry, max_period)) ||
1547 PARAM(periodic_inquiry, length) < 1 ||
1548 PARAM16(periodic_inquiry, min_period) < 2 ||
1549 PARAM16(periodic_inquiry, max_period) < 3) {
1550 bt_hci_event_complete_status(hci, HCI_INVALID_PARAMETERS);
1551 break;
1552 }
1553
1554 hci->lm.inquire = 1;
1555 hci->lm.periodic = 1;
1556 hci->lm.responses_left = PARAM(periodic_inquiry, num_rsp);
1557 hci->lm.responses = 0;
1558 hci->lm.inquiry_period = PARAM16(periodic_inquiry, max_period);
1559 bt_hci_event_complete_status(hci, HCI_SUCCESS);
1560 bt_hci_inquiry_start(hci, PARAM(periodic_inquiry, length));
1561 break;
1562
1563 case cmd_opcode_pack(OGF_LINK_CTL, OCF_EXIT_PERIODIC_INQUIRY):
1564 if (!hci->lm.inquire || !hci->lm.periodic) {
1565 fprintf(stderr, "%s: Inquiry Cancel should only be issued after "
1566 "the Inquiry command has been issued, a Command "
1567 "Status event has been received for the Inquiry "
1568 "command, and before the Inquiry Complete event "
1569 "occurs", __func__);
1570 bt_hci_event_complete_status(hci, HCI_COMMAND_DISALLOWED);
1571 break;
1572 }
1573 hci->lm.inquire = 0;
1574 timer_del(hci->lm.inquiry_done);
1575 timer_del(hci->lm.inquiry_next);
1576 bt_hci_event_complete_status(hci, HCI_SUCCESS);
1577 break;
1578
1579 case cmd_opcode_pack(OGF_LINK_CTL, OCF_CREATE_CONN):
1580 LENGTH_CHECK(create_conn);
1581
1582 if (hci->lm.connecting >= HCI_HANDLES_MAX) {
1583 bt_hci_event_status(hci, HCI_REJECTED_LIMITED_RESOURCES);
1584 break;
1585 }
1586 bt_hci_event_status(hci, HCI_SUCCESS);
1587
1588 if (bt_hci_connect(hci, &PARAM(create_conn, bdaddr)))
1589 bt_hci_connection_reject_event(hci, &PARAM(create_conn, bdaddr));
1590 break;
1591
1592 case cmd_opcode_pack(OGF_LINK_CTL, OCF_DISCONNECT):
1593 LENGTH_CHECK(disconnect);
1594
1595 if (bt_hci_handle_bad(hci, PARAMHANDLE(disconnect))) {
1596 bt_hci_event_status(hci, HCI_NO_CONNECTION);
1597 break;
1598 }
1599
1600 bt_hci_event_status(hci, HCI_SUCCESS);
1601 bt_hci_disconnect(hci, PARAMHANDLE(disconnect),
1602 PARAM(disconnect, reason));
1603 break;
1604
1605 case cmd_opcode_pack(OGF_LINK_CTL, OCF_CREATE_CONN_CANCEL):
1606 LENGTH_CHECK(create_conn_cancel);
1607
1608 if (bt_hci_lmp_connection_ready(hci,
1609 &PARAM(create_conn_cancel, bdaddr))) {
1610 for (i = 0; i < HCI_HANDLES_MAX; i ++)
1611 if (bt_hci_role_master(hci, i) && hci->lm.handle[i].link &&
1612 !bacmp(&hci->lm.handle[i].link->slave->bd_addr,
1613 &PARAM(create_conn_cancel, bdaddr)))
1614 break;
1615
1616 bt_hci_event_complete_conn_cancel(hci, i < HCI_HANDLES_MAX ?
1617 HCI_ACL_CONNECTION_EXISTS : HCI_NO_CONNECTION,
1618 &PARAM(create_conn_cancel, bdaddr));
1619 } else
1620 bt_hci_event_complete_conn_cancel(hci, HCI_SUCCESS,
1621 &PARAM(create_conn_cancel, bdaddr));
1622 break;
1623
1624 case cmd_opcode_pack(OGF_LINK_CTL, OCF_ACCEPT_CONN_REQ):
1625 LENGTH_CHECK(accept_conn_req);
1626
1627 if (!hci->conn_req_host ||
1628 bacmp(&PARAM(accept_conn_req, bdaddr),
1629 &hci->conn_req_host->bd_addr)) {
1630 bt_hci_event_status(hci, HCI_INVALID_PARAMETERS);
1631 break;
1632 }
1633
1634 bt_hci_event_status(hci, HCI_SUCCESS);
1635 bt_hci_connection_accept(hci, hci->conn_req_host);
1636 hci->conn_req_host = NULL;
1637 break;
1638
1639 case cmd_opcode_pack(OGF_LINK_CTL, OCF_REJECT_CONN_REQ):
1640 LENGTH_CHECK(reject_conn_req);
1641
1642 if (!hci->conn_req_host ||
1643 bacmp(&PARAM(reject_conn_req, bdaddr),
1644 &hci->conn_req_host->bd_addr)) {
1645 bt_hci_event_status(hci, HCI_INVALID_PARAMETERS);
1646 break;
1647 }
1648
1649 bt_hci_event_status(hci, HCI_SUCCESS);
1650 bt_hci_connection_reject(hci, hci->conn_req_host,
1651 PARAM(reject_conn_req, reason));
1652 bt_hci_connection_reject_event(hci, &hci->conn_req_host->bd_addr);
1653 hci->conn_req_host = NULL;
1654 break;
1655
1656 case cmd_opcode_pack(OGF_LINK_CTL, OCF_AUTH_REQUESTED):
1657 LENGTH_CHECK(auth_requested);
1658
1659 if (bt_hci_handle_bad(hci, PARAMHANDLE(auth_requested)))
1660 bt_hci_event_status(hci, HCI_NO_CONNECTION);
1661 else {
1662 bt_hci_event_status(hci, HCI_SUCCESS);
1663 bt_hci_event_auth_complete(hci, PARAMHANDLE(auth_requested));
1664 }
1665 break;
1666
1667 case cmd_opcode_pack(OGF_LINK_CTL, OCF_SET_CONN_ENCRYPT):
1668 LENGTH_CHECK(set_conn_encrypt);
1669
1670 if (bt_hci_handle_bad(hci, PARAMHANDLE(set_conn_encrypt)))
1671 bt_hci_event_status(hci, HCI_NO_CONNECTION);
1672 else {
1673 bt_hci_event_status(hci, HCI_SUCCESS);
1674 bt_hci_event_encrypt_change(hci,
1675 PARAMHANDLE(set_conn_encrypt),
1676 PARAM(set_conn_encrypt, encrypt));
1677 }
1678 break;
1679
1680 case cmd_opcode_pack(OGF_LINK_CTL, OCF_REMOTE_NAME_REQ):
1681 LENGTH_CHECK(remote_name_req);
1682
1683 if (bt_hci_name_req(hci, &PARAM(remote_name_req, bdaddr)))
1684 bt_hci_event_status(hci, HCI_NO_CONNECTION);
1685 break;
1686
1687 case cmd_opcode_pack(OGF_LINK_CTL, OCF_REMOTE_NAME_REQ_CANCEL):
1688 LENGTH_CHECK(remote_name_req_cancel);
1689
1690 bt_hci_event_complete_name_cancel(hci,
1691 &PARAM(remote_name_req_cancel, bdaddr));
1692 break;
1693
1694 case cmd_opcode_pack(OGF_LINK_CTL, OCF_READ_REMOTE_FEATURES):
1695 LENGTH_CHECK(read_remote_features);
1696
1697 if (bt_hci_features_req(hci, PARAMHANDLE(read_remote_features)))
1698 bt_hci_event_status(hci, HCI_NO_CONNECTION);
1699 break;
1700
1701 case cmd_opcode_pack(OGF_LINK_CTL, OCF_READ_REMOTE_EXT_FEATURES):
1702 LENGTH_CHECK(read_remote_ext_features);
1703
1704 if (bt_hci_handle_bad(hci, PARAMHANDLE(read_remote_ext_features)))
1705 bt_hci_event_status(hci, HCI_NO_CONNECTION);
1706 else {
1707 bt_hci_event_status(hci, HCI_SUCCESS);
1708 bt_hci_event_read_remote_ext_features(hci,
1709 PARAMHANDLE(read_remote_ext_features));
1710 }
1711 break;
1712
1713 case cmd_opcode_pack(OGF_LINK_CTL, OCF_READ_REMOTE_VERSION):
1714 LENGTH_CHECK(read_remote_version);
1715
1716 if (bt_hci_version_req(hci, PARAMHANDLE(read_remote_version)))
1717 bt_hci_event_status(hci, HCI_NO_CONNECTION);
1718 break;
1719
1720 case cmd_opcode_pack(OGF_LINK_CTL, OCF_READ_CLOCK_OFFSET):
1721 LENGTH_CHECK(read_clock_offset);
1722
1723 if (bt_hci_clkoffset_req(hci, PARAMHANDLE(read_clock_offset)))
1724 bt_hci_event_status(hci, HCI_NO_CONNECTION);
1725 break;
1726
1727 case cmd_opcode_pack(OGF_LINK_CTL, OCF_READ_LMP_HANDLE):
1728 LENGTH_CHECK(read_lmp_handle);
1729
1730 /* TODO: */
1731 bt_hci_event_complete_lmp_handle(hci, PARAMHANDLE(read_lmp_handle));
1732 break;
1733
1734 case cmd_opcode_pack(OGF_LINK_POLICY, OCF_HOLD_MODE):
1735 LENGTH_CHECK(hold_mode);
1736
1737 if (PARAM16(hold_mode, min_interval) >
1738 PARAM16(hold_mode, max_interval) ||
1739 PARAM16(hold_mode, min_interval) < 0x0002 ||
1740 PARAM16(hold_mode, max_interval) > 0xff00 ||
1741 (PARAM16(hold_mode, min_interval) & 1) ||
1742 (PARAM16(hold_mode, max_interval) & 1)) {
1743 bt_hci_event_status(hci, HCI_INVALID_PARAMETERS);
1744 break;
1745 }
1746
1747 if (bt_hci_mode_change(hci, PARAMHANDLE(hold_mode),
1748 PARAM16(hold_mode, max_interval),
1749 acl_hold))
1750 bt_hci_event_status(hci, HCI_NO_CONNECTION);
1751 break;
1752
1753 case cmd_opcode_pack(OGF_LINK_POLICY, OCF_PARK_MODE):
1754 LENGTH_CHECK(park_mode);
1755
1756 if (PARAM16(park_mode, min_interval) >
1757 PARAM16(park_mode, max_interval) ||
1758 PARAM16(park_mode, min_interval) < 0x000e ||
1759 (PARAM16(park_mode, min_interval) & 1) ||
1760 (PARAM16(park_mode, max_interval) & 1)) {
1761 bt_hci_event_status(hci, HCI_INVALID_PARAMETERS);
1762 break;
1763 }
1764
1765 if (bt_hci_mode_change(hci, PARAMHANDLE(park_mode),
1766 PARAM16(park_mode, max_interval),
1767 acl_parked))
1768 bt_hci_event_status(hci, HCI_NO_CONNECTION);
1769 break;
1770
1771 case cmd_opcode_pack(OGF_LINK_POLICY, OCF_EXIT_PARK_MODE):
1772 LENGTH_CHECK(exit_park_mode);
1773
1774 if (bt_hci_mode_cancel(hci, PARAMHANDLE(exit_park_mode),
1775 acl_parked))
1776 bt_hci_event_status(hci, HCI_NO_CONNECTION);
1777 break;
1778
1779 case cmd_opcode_pack(OGF_LINK_POLICY, OCF_ROLE_DISCOVERY):
1780 LENGTH_CHECK(role_discovery);
1781
1782 if (bt_hci_handle_bad(hci, PARAMHANDLE(role_discovery)))
1783 bt_hci_event_complete_role_discovery(hci,
1784 HCI_NO_CONNECTION, PARAMHANDLE(role_discovery), 0);
1785 else
1786 bt_hci_event_complete_role_discovery(hci,
1787 HCI_SUCCESS, PARAMHANDLE(role_discovery),
1788 bt_hci_role_master(hci,
1789 PARAMHANDLE(role_discovery)));
1790 break;
1791
1792 case cmd_opcode_pack(OGF_HOST_CTL, OCF_SET_EVENT_MASK):
1793 LENGTH_CHECK(set_event_mask);
1794
1795 memcpy(hci->event_mask, PARAM(set_event_mask, mask), 8);
1796 bt_hci_event_complete_status(hci, HCI_SUCCESS);
1797 break;
1798
1799 case cmd_opcode_pack(OGF_HOST_CTL, OCF_RESET):
1800 bt_hci_reset(hci);
1801 bt_hci_event_status(hci, HCI_SUCCESS);
1802 break;
1803
1804 case cmd_opcode_pack(OGF_HOST_CTL, OCF_SET_EVENT_FLT):
1805 if (length >= 1 && PARAM(set_event_flt, flt_type) == FLT_CLEAR_ALL)
1806 /* No length check */;
1807 else
1808 LENGTH_CHECK(set_event_flt);
1809
1810 /* Filters are not implemented */
1811 bt_hci_event_complete_status(hci, HCI_SUCCESS);
1812 break;
1813
1814 case cmd_opcode_pack(OGF_HOST_CTL, OCF_FLUSH):
1815 LENGTH_CHECK(flush);
1816
1817 if (bt_hci_handle_bad(hci, PARAMHANDLE(flush)))
1818 bt_hci_event_complete_flush(hci,
1819 HCI_NO_CONNECTION, PARAMHANDLE(flush));
1820 else {
1821 /* TODO: ordering? */
1822 bt_hci_event(hci, EVT_FLUSH_OCCURRED,
1823 &PARAM(flush, handle),
1824 EVT_FLUSH_OCCURRED_SIZE);
1825 bt_hci_event_complete_flush(hci,
1826 HCI_SUCCESS, PARAMHANDLE(flush));
1827 }
1828 break;
1829
1830 case cmd_opcode_pack(OGF_HOST_CTL, OCF_CHANGE_LOCAL_NAME):
1831 LENGTH_CHECK(change_local_name);
1832
1833 g_free((void *) hci->device.lmp_name);
1834 hci->device.lmp_name = g_strndup(PARAM(change_local_name, name),
1835 sizeof(PARAM(change_local_name, name)));
1836 bt_hci_event_complete_status(hci, HCI_SUCCESS);
1837 break;
1838
1839 case cmd_opcode_pack(OGF_HOST_CTL, OCF_READ_LOCAL_NAME):
1840 bt_hci_event_complete_read_local_name(hci);
1841 break;
1842
1843 case cmd_opcode_pack(OGF_HOST_CTL, OCF_READ_CONN_ACCEPT_TIMEOUT):
1844 bt_hci_event_complete_read_conn_accept_timeout(hci);
1845 break;
1846
1847 case cmd_opcode_pack(OGF_HOST_CTL, OCF_WRITE_CONN_ACCEPT_TIMEOUT):
1848 /* TODO */
1849 LENGTH_CHECK(write_conn_accept_timeout);
1850
1851 if (PARAM16(write_conn_accept_timeout, timeout) < 0x0001 ||
1852 PARAM16(write_conn_accept_timeout, timeout) > 0xb540) {
1853 bt_hci_event_complete_status(hci, HCI_INVALID_PARAMETERS);
1854 break;
1855 }
1856
1857 hci->conn_accept_tout = PARAM16(write_conn_accept_timeout, timeout);
1858 bt_hci_event_complete_status(hci, HCI_SUCCESS);
1859 break;
1860
1861 case cmd_opcode_pack(OGF_HOST_CTL, OCF_READ_SCAN_ENABLE):
1862 bt_hci_event_complete_read_scan_enable(hci);
1863 break;
1864
1865 case cmd_opcode_pack(OGF_HOST_CTL, OCF_WRITE_SCAN_ENABLE):
1866 LENGTH_CHECK(write_scan_enable);
1867
1868 /* TODO: check that the remaining bits are all 0 */
1869 hci->device.inquiry_scan =
1870 !!(PARAM(write_scan_enable, scan_enable) & SCAN_INQUIRY);
1871 hci->device.page_scan =
1872 !!(PARAM(write_scan_enable, scan_enable) & SCAN_PAGE);
1873 bt_hci_event_complete_status(hci, HCI_SUCCESS);
1874 break;
1875
1876 case cmd_opcode_pack(OGF_HOST_CTL, OCF_READ_CLASS_OF_DEV):
1877 bt_hci_event_complete_read_local_class(hci);
1878 break;
1879
1880 case cmd_opcode_pack(OGF_HOST_CTL, OCF_WRITE_CLASS_OF_DEV):
1881 LENGTH_CHECK(write_class_of_dev);
1882
1883 memcpy(hci->device.class, PARAM(write_class_of_dev, dev_class),
1884 sizeof(PARAM(write_class_of_dev, dev_class)));
1885 bt_hci_event_complete_status(hci, HCI_SUCCESS);
1886 break;
1887
1888 case cmd_opcode_pack(OGF_HOST_CTL, OCF_READ_VOICE_SETTING):
1889 bt_hci_event_complete_voice_setting(hci);
1890 break;
1891
1892 case cmd_opcode_pack(OGF_HOST_CTL, OCF_WRITE_VOICE_SETTING):
1893 LENGTH_CHECK(write_voice_setting);
1894
1895 hci->voice_setting = PARAM(write_voice_setting, voice_setting);
1896 bt_hci_event_complete_status(hci, HCI_SUCCESS);
1897 break;
1898
1899 case cmd_opcode_pack(OGF_HOST_CTL, OCF_HOST_NUMBER_OF_COMPLETED_PACKETS):
1900 if (length < data[0] * 2 + 1)
1901 goto short_hci;
1902
1903 for (i = 0; i < data[0]; i ++)
1904 if (bt_hci_handle_bad(hci,
1905 data[i * 2 + 1] | (data[i * 2 + 2] << 8)))
1906 bt_hci_event_complete_status(hci, HCI_INVALID_PARAMETERS);
1907 break;
1908
1909 case cmd_opcode_pack(OGF_HOST_CTL, OCF_READ_INQUIRY_MODE):
1910 /* Only if (local_features[3] & 0x40) && (local_commands[12] & 0x40)
1911 * else
1912 * goto unknown_command */
1913 bt_hci_event_complete_read_inquiry_mode(hci);
1914 break;
1915
1916 case cmd_opcode_pack(OGF_HOST_CTL, OCF_WRITE_INQUIRY_MODE):
1917 /* Only if (local_features[3] & 0x40) && (local_commands[12] & 0x80)
1918 * else
1919 * goto unknown_command */
1920 LENGTH_CHECK(write_inquiry_mode);
1921
1922 if (PARAM(write_inquiry_mode, mode) > 0x01) {
1923 bt_hci_event_complete_status(hci, HCI_INVALID_PARAMETERS);
1924 break;
1925 }
1926
1927 hci->lm.inquiry_mode = PARAM(write_inquiry_mode, mode);
1928 bt_hci_event_complete_status(hci, HCI_SUCCESS);
1929 break;
1930
1931 case cmd_opcode_pack(OGF_INFO_PARAM, OCF_READ_LOCAL_VERSION):
1932 bt_hci_read_local_version_rp(hci);
1933 break;
1934
1935 case cmd_opcode_pack(OGF_INFO_PARAM, OCF_READ_LOCAL_COMMANDS):
1936 bt_hci_read_local_commands_rp(hci);
1937 break;
1938
1939 case cmd_opcode_pack(OGF_INFO_PARAM, OCF_READ_LOCAL_FEATURES):
1940 bt_hci_read_local_features_rp(hci);
1941 break;
1942
1943 case cmd_opcode_pack(OGF_INFO_PARAM, OCF_READ_LOCAL_EXT_FEATURES):
1944 LENGTH_CHECK(read_local_ext_features);
1945
1946 bt_hci_read_local_ext_features_rp(hci,
1947 PARAM(read_local_ext_features, page_num));
1948 break;
1949
1950 case cmd_opcode_pack(OGF_INFO_PARAM, OCF_READ_BUFFER_SIZE):
1951 bt_hci_read_buffer_size_rp(hci);
1952 break;
1953
1954 case cmd_opcode_pack(OGF_INFO_PARAM, OCF_READ_COUNTRY_CODE):
1955 bt_hci_read_country_code_rp(hci);
1956 break;
1957
1958 case cmd_opcode_pack(OGF_INFO_PARAM, OCF_READ_BD_ADDR):
1959 bt_hci_read_bd_addr_rp(hci);
1960 break;
1961
1962 case cmd_opcode_pack(OGF_STATUS_PARAM, OCF_READ_LINK_QUALITY):
1963 LENGTH_CHECK(read_link_quality);
1964
1965 bt_hci_link_quality_rp(hci, PARAMHANDLE(read_link_quality));
1966 break;
1967
1968 default:
1969 bt_hci_event_status(hci, HCI_UNKNOWN_COMMAND);
1970 break;
1971
1972 short_hci:
1973 error_report("%s: HCI packet too short (%iB)", __func__, length);
1974 bt_hci_event_status(hci, HCI_INVALID_PARAMETERS);
1975 break;
1976 }
1977}
1978
1979/* We could perform fragmentation here, we can't do "recombination" because
1980 * at this layer the length of the payload is not know ahead, so we only
1981 * know that a packet contained the last fragment of the SDU when the next
1982 * SDU starts. */
1983static inline void bt_hci_lmp_acl_data(struct bt_hci_s *hci, uint16_t handle,
1984 const uint8_t *data, int start, int len)
1985{
1986 struct hci_acl_hdr *pkt = (void *) hci->acl_buf;
1987
1988 /* TODO: packet flags */
1989 /* TODO: avoid memcpy'ing */
1990
1991 if (len + HCI_ACL_HDR_SIZE > sizeof(hci->acl_buf)) {
1992 error_report("%s: can't take ACL packets %i bytes long",
1993 __func__, len);
1994 return;
1995 }
1996 memcpy(hci->acl_buf + HCI_ACL_HDR_SIZE, data, len);
1997
1998 pkt->handle = cpu_to_le16(
1999 acl_handle_pack(handle, start ? ACL_START : ACL_CONT));
2000 pkt->dlen = cpu_to_le16(len);
2001 hci->info.acl_recv(hci->info.opaque,
2002 hci->acl_buf, len + HCI_ACL_HDR_SIZE);
2003}
2004
2005static void bt_hci_lmp_acl_data_slave(struct bt_link_s *btlink,
2006 const uint8_t *data, int start, int len)
2007{
2008 struct bt_hci_link_s *link = (struct bt_hci_link_s *) btlink;
2009
2010 bt_hci_lmp_acl_data(hci_from_device(btlink->slave),
2011 link->handle, data, start, len);
2012}
2013
2014static void bt_hci_lmp_acl_data_host(struct bt_link_s *link,
2015 const uint8_t *data, int start, int len)
2016{
2017 bt_hci_lmp_acl_data(hci_from_device(link->host),
2018 link->handle, data, start, len);
2019}
2020
2021static void bt_submit_acl(struct HCIInfo *info,
2022 const uint8_t *data, int length)
2023{
2024 struct bt_hci_s *hci = hci_from_info(info);
2025 uint16_t handle;
2026 int datalen, flags;
2027 struct bt_link_s *link;
2028
2029 if (length < HCI_ACL_HDR_SIZE) {
2030 error_report("%s: ACL packet too short (%iB)", __func__, length);
2031 return;
2032 }
2033
2034 handle = acl_handle((data[1] << 8) | data[0]);
2035 flags = acl_flags((data[1] << 8) | data[0]);
2036 datalen = (data[3] << 8) | data[2];
2037 data += HCI_ACL_HDR_SIZE;
2038 length -= HCI_ACL_HDR_SIZE;
2039
2040 if (bt_hci_handle_bad(hci, handle)) {
2041 error_report("%s: invalid ACL handle %03x", __func__, handle);
2042 /* TODO: signal an error */
2043 return;
2044 }
2045 handle &= ~HCI_HANDLE_OFFSET;
2046
2047 if (datalen > length) {
2048 error_report("%s: ACL packet too short (%iB < %iB)",
2049 __func__, length, datalen);
2050 return;
2051 }
2052
2053 link = hci->lm.handle[handle].link;
2054
2055 if ((flags & ~3) == ACL_ACTIVE_BCAST) {
2056 if (!hci->asb_handle)
2057 hci->asb_handle = handle;
2058 else if (handle != hci->asb_handle) {
2059 error_report("%s: Bad handle %03x in Active Slave Broadcast",
2060 __func__, handle);
2061 /* TODO: signal an error */
2062 return;
2063 }
2064
2065 /* TODO */
2066 }
2067
2068 if ((flags & ~3) == ACL_PICO_BCAST) {
2069 if (!hci->psb_handle)
2070 hci->psb_handle = handle;
2071 else if (handle != hci->psb_handle) {
2072 error_report("%s: Bad handle %03x in Parked Slave Broadcast",
2073 __func__, handle);
2074 /* TODO: signal an error */
2075 return;
2076 }
2077
2078 /* TODO */
2079 }
2080
2081 /* TODO: increase counter and send EVT_NUM_COMP_PKTS */
2082 bt_hci_event_num_comp_pkts(hci, handle | HCI_HANDLE_OFFSET, 1);
2083
2084 /* Do this last as it can trigger further events even in this HCI */
2085 hci->lm.handle[handle].lmp_acl_data(link, data,
2086 (flags & 3) == ACL_START, length);
2087}
2088
2089static void bt_submit_sco(struct HCIInfo *info,
2090 const uint8_t *data, int length)
2091{
2092 struct bt_hci_s *hci = hci_from_info(info);
2093 uint16_t handle;
2094 int datalen;
2095
2096 if (length < 3)
2097 return;
2098
2099 handle = acl_handle((data[1] << 8) | data[0]);
2100 datalen = data[2];
2101 length -= 3;
2102
2103 if (bt_hci_handle_bad(hci, handle)) {
2104 error_report("%s: invalid SCO handle %03x", __func__, handle);
2105 return;
2106 }
2107
2108 if (datalen > length) {
2109 error_report("%s: SCO packet too short (%iB < %iB)",
2110 __func__, length, datalen);
2111 return;
2112 }
2113
2114 /* TODO */
2115
2116 /* TODO: increase counter and send EVT_NUM_COMP_PKTS if synchronous
2117 * Flow Control is enabled.
2118 * (See Read/Write_Synchronous_Flow_Control_Enable on page 513 and
2119 * page 514.) */
2120}
2121
2122static uint8_t *bt_hci_evt_packet(void *opaque)
2123{
2124 /* TODO: allocate a packet from upper layer */
2125 struct bt_hci_s *s = opaque;
2126
2127 return s->evt_buf;
2128}
2129
2130static void bt_hci_evt_submit(void *opaque, int len)
2131{
2132 /* TODO: notify upper layer */
2133 struct bt_hci_s *s = opaque;
2134
2135 s->info.evt_recv(s->info.opaque, s->evt_buf, len);
2136}
2137
2138static int bt_hci_bdaddr_set(struct HCIInfo *info, const uint8_t *bd_addr)
2139{
2140 struct bt_hci_s *hci = hci_from_info(info);
2141
2142 bacpy(&hci->device.bd_addr, (const bdaddr_t *) bd_addr);
2143 return 0;
2144}
2145
2146static void bt_hci_done(struct HCIInfo *info);
2147static void bt_hci_destroy(struct bt_device_s *dev)
2148{
2149 struct bt_hci_s *hci = hci_from_device(dev);
2150
2151 bt_hci_done(&hci->info);
2152}
2153
2154struct HCIInfo *bt_new_hci(struct bt_scatternet_s *net)
2155{
2156 struct bt_hci_s *s = g_malloc0(sizeof(struct bt_hci_s));
2157
2158 s->lm.inquiry_done = timer_new_ns(QEMU_CLOCK_VIRTUAL, bt_hci_inquiry_done, s);
2159 s->lm.inquiry_next = timer_new_ns(QEMU_CLOCK_VIRTUAL, bt_hci_inquiry_next, s);
2160 s->conn_accept_timer =
2161 timer_new_ns(QEMU_CLOCK_VIRTUAL, bt_hci_conn_accept_timeout, s);
2162
2163 s->evt_packet = bt_hci_evt_packet;
2164 s->evt_submit = bt_hci_evt_submit;
2165 s->opaque = s;
2166
2167 bt_device_init(&s->device, net);
2168 s->device.lmp_connection_request = bt_hci_lmp_connection_request;
2169 s->device.lmp_connection_complete = bt_hci_lmp_connection_complete;
2170 s->device.lmp_disconnect_master = bt_hci_lmp_disconnect_host;
2171 s->device.lmp_disconnect_slave = bt_hci_lmp_disconnect_slave;
2172 s->device.lmp_acl_data = bt_hci_lmp_acl_data_slave;
2173 s->device.lmp_acl_resp = bt_hci_lmp_acl_data_host;
2174 s->device.lmp_mode_change = bt_hci_lmp_mode_change_slave;
2175
2176 /* Keep updated! */
2177 /* Also keep in sync with supported commands bitmask in
2178 * bt_hci_read_local_commands_rp */
2179 s->device.lmp_caps = 0x8000199b7e85355fll;
2180
2181 bt_hci_reset(s);
2182
2183 s->info.cmd_send = bt_submit_hci;
2184 s->info.sco_send = bt_submit_sco;
2185 s->info.acl_send = bt_submit_acl;
2186 s->info.bdaddr_set = bt_hci_bdaddr_set;
2187
2188 s->device.handle_destroy = bt_hci_destroy;
2189
2190 error_setg(&s->replay_blocker, QERR_REPLAY_NOT_SUPPORTED, "-bt hci");
2191 replay_add_blocker(s->replay_blocker);
2192
2193 return &s->info;
2194}
2195
2196struct HCIInfo *hci_init(const char *str)
2197{
2198 char *endp;
2199 struct bt_scatternet_s *vlan = 0;
2200
2201 if (!strcmp(str, "null"))
2202 /* null */
2203 return &null_hci;
2204 else if (!strncmp(str, "host", 4) && (str[4] == '\0' || str[4] == ':'))
2205 /* host[:hciN] */
2206 return bt_host_hci(str[4] ? str + 5 : "hci0");
2207 else if (!strncmp(str, "hci", 3)) {
2208 /* hci[,vlan=n] */
2209 if (str[3]) {
2210 if (!strncmp(str + 3, ",vlan=", 6)) {
2211 vlan = qemu_find_bt_vlan(strtol(str + 9, &endp, 0));
2212 if (*endp)
2213 vlan = 0;
2214 }
2215 } else
2216 vlan = qemu_find_bt_vlan(0);
2217 if (vlan)
2218 return bt_new_hci(vlan);
2219 }
2220
2221 error_report("Unknown bluetooth HCI `%s'.", str);
2222
2223 return 0;
2224}
2225
2226static void bt_hci_done(struct HCIInfo *info)
2227{
2228 struct bt_hci_s *hci = hci_from_info(info);
2229 int handle;
2230
2231 bt_device_done(&hci->device);
2232
2233 g_free((void *) hci->device.lmp_name);
2234
2235 /* Be gentle and send DISCONNECT to all connected peers and those
2236 * currently waiting for us to accept or reject a connection request.
2237 * This frees the links. */
2238 if (hci->conn_req_host) {
2239 bt_hci_connection_reject(hci,
2240 hci->conn_req_host, HCI_OE_POWER_OFF);
2241 return;
2242 }
2243
2244 for (handle = HCI_HANDLE_OFFSET;
2245 handle < (HCI_HANDLE_OFFSET | HCI_HANDLES_MAX); handle ++)
2246 if (!bt_hci_handle_bad(hci, handle))
2247 bt_hci_disconnect(hci, handle, HCI_OE_POWER_OFF);
2248
2249 /* TODO: this is not enough actually, there may be slaves from whom
2250 * we have requested a connection who will soon (or not) respond with
2251 * an accept or a reject, so we should also check if hci->lm.connecting
2252 * is non-zero and if so, avoid freeing the hci but otherwise disappear
2253 * from all qemu social life (e.g. stop scanning and request to be
2254 * removed from s->device.net) and arrange for
2255 * s->device.lmp_connection_complete to free the remaining bits once
2256 * hci->lm.awaiting_bdaddr[] is empty. */
2257
2258 timer_free(hci->lm.inquiry_done);
2259 timer_free(hci->lm.inquiry_next);
2260 timer_free(hci->conn_accept_timer);
2261
2262 g_free(hci);
2263}
2264