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