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