]> Git Repo - qemu.git/blob - hw/bt-hci.c
Merge remote-tracking branch 'stefanha/trivial-patches' into staging
[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  <[email protected]>
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         bdaddr_t 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_ns(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_ns(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, 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 = g_malloc0(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         g_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                 bdaddr_t *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     g_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     g_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, bdaddr_t *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     evt_read_remote_version_complete params;
998
999     if (bt_hci_handle_bad(hci, handle))
1000         return -ENODEV;
1001
1002     bt_hci_remote_dev(hci, handle);
1003
1004     bt_hci_event_status(hci, HCI_SUCCESS);
1005
1006     params.status       = HCI_SUCCESS;
1007     params.handle       = HNDL(handle);
1008     params.lmp_ver      = 0x03;
1009     params.manufacturer = cpu_to_le16(0xa000);
1010     params.lmp_subver   = cpu_to_le16(0xa607);
1011     bt_hci_event(hci, EVT_READ_REMOTE_VERSION_COMPLETE,
1012                     &params, EVT_READ_REMOTE_VERSION_COMPLETE_SIZE);
1013
1014     return 0;
1015 }
1016
1017 static int bt_hci_clkoffset_req(struct bt_hci_s *hci, uint16_t handle)
1018 {
1019     struct bt_device_s *slave;
1020     evt_read_clock_offset_complete params;
1021
1022     if (bt_hci_handle_bad(hci, handle))
1023         return -ENODEV;
1024
1025     slave = bt_hci_remote_dev(hci, handle);
1026
1027     bt_hci_event_status(hci, HCI_SUCCESS);
1028
1029     params.status       = HCI_SUCCESS;
1030     params.handle       = HNDL(handle);
1031     /* TODO: return the clkoff *differenece* */
1032     params.clock_offset = slave->clkoff;        /* Note: no swapping */
1033     bt_hci_event(hci, EVT_READ_CLOCK_OFFSET_COMPLETE,
1034                     &params, EVT_READ_CLOCK_OFFSET_COMPLETE_SIZE);
1035
1036     return 0;
1037 }
1038
1039 static void bt_hci_event_mode(struct bt_hci_s *hci, struct bt_link_s *link,
1040                 uint16_t handle)
1041 {
1042     evt_mode_change params = {
1043         .status         = HCI_SUCCESS,
1044         .handle         = HNDL(handle),
1045         .mode           = link->acl_mode,
1046         .interval       = cpu_to_le16(link->acl_interval),
1047     };
1048
1049     bt_hci_event(hci, EVT_MODE_CHANGE, &params, EVT_MODE_CHANGE_SIZE);
1050 }
1051
1052 static void bt_hci_lmp_mode_change_master(struct bt_hci_s *hci,
1053                 struct bt_link_s *link, int mode, uint16_t interval)
1054 {
1055     link->acl_mode = mode;
1056     link->acl_interval = interval;
1057
1058     bt_hci_event_mode(hci, link, link->handle);
1059
1060     link->slave->lmp_mode_change(link);
1061 }
1062
1063 static void bt_hci_lmp_mode_change_slave(struct bt_link_s *btlink)
1064 {
1065     struct bt_hci_link_s *link = (struct bt_hci_link_s *) btlink;
1066     struct bt_hci_s *hci = hci_from_device(btlink->slave);
1067
1068     bt_hci_event_mode(hci, btlink, link->handle);
1069 }
1070
1071 static int bt_hci_mode_change(struct bt_hci_s *hci, uint16_t handle,
1072                 int interval, int mode)
1073 {
1074     struct bt_hci_master_link_s *link;
1075
1076     if (bt_hci_handle_bad(hci, handle) || !bt_hci_role_master(hci, handle))
1077         return -ENODEV;
1078
1079     link = &hci->lm.handle[handle & ~HCI_HANDLE_OFFSET];
1080     if (link->link->acl_mode != acl_active) {
1081         bt_hci_event_status(hci, HCI_COMMAND_DISALLOWED);
1082         return 0;
1083     }
1084
1085     bt_hci_event_status(hci, HCI_SUCCESS);
1086
1087     qemu_mod_timer(link->acl_mode_timer, qemu_get_clock_ns(vm_clock) +
1088                    muldiv64(interval * 625, get_ticks_per_sec(), 1000000));
1089     bt_hci_lmp_mode_change_master(hci, link->link, mode, interval);
1090
1091     return 0;
1092 }
1093
1094 static int bt_hci_mode_cancel(struct bt_hci_s *hci, uint16_t handle, int mode)
1095 {
1096     struct bt_hci_master_link_s *link;
1097
1098     if (bt_hci_handle_bad(hci, handle) || !bt_hci_role_master(hci, handle))
1099         return -ENODEV;
1100
1101     link = &hci->lm.handle[handle & ~HCI_HANDLE_OFFSET];
1102     if (link->link->acl_mode != mode) {
1103         bt_hci_event_status(hci, HCI_COMMAND_DISALLOWED);
1104
1105         return 0;
1106     }
1107
1108     bt_hci_event_status(hci, HCI_SUCCESS);
1109
1110     qemu_del_timer(link->acl_mode_timer);
1111     bt_hci_lmp_mode_change_master(hci, link->link, acl_active, 0);
1112
1113     return 0;
1114 }
1115
1116 static void bt_hci_mode_tick(void *opaque)
1117 {
1118     struct bt_link_s *link = opaque;
1119     struct bt_hci_s *hci = hci_from_device(link->host);
1120
1121     bt_hci_lmp_mode_change_master(hci, link, acl_active, 0);
1122 }
1123
1124 static void bt_hci_reset(struct bt_hci_s *hci)
1125 {
1126     hci->acl_len = 0;
1127     hci->last_cmd = 0;
1128     hci->lm.connecting = 0;
1129
1130     hci->event_mask[0] = 0xff;
1131     hci->event_mask[1] = 0xff;
1132     hci->event_mask[2] = 0xff;
1133     hci->event_mask[3] = 0xff;
1134     hci->event_mask[4] = 0xff;
1135     hci->event_mask[5] = 0x1f;
1136     hci->event_mask[6] = 0x00;
1137     hci->event_mask[7] = 0x00;
1138     hci->device.inquiry_scan = 0;
1139     hci->device.page_scan = 0;
1140     if (hci->device.lmp_name)
1141         g_free((void *) hci->device.lmp_name);
1142     hci->device.lmp_name = NULL;
1143     hci->device.class[0] = 0x00;
1144     hci->device.class[1] = 0x00;
1145     hci->device.class[2] = 0x00;
1146     hci->voice_setting = 0x0000;
1147     hci->conn_accept_tout = 0x1f40;
1148     hci->lm.inquiry_mode = 0x00;
1149
1150     hci->psb_handle = 0x000;
1151     hci->asb_handle = 0x000;
1152
1153     /* XXX: qemu_del_timer(sl->acl_mode_timer); for all links */
1154     qemu_del_timer(hci->lm.inquiry_done);
1155     qemu_del_timer(hci->lm.inquiry_next);
1156     qemu_del_timer(hci->conn_accept_timer);
1157 }
1158
1159 static void bt_hci_read_local_version_rp(struct bt_hci_s *hci)
1160 {
1161     read_local_version_rp lv = {
1162         .status         = HCI_SUCCESS,
1163         .hci_ver        = 0x03,
1164         .hci_rev        = cpu_to_le16(0xa607),
1165         .lmp_ver        = 0x03,
1166         .manufacturer   = cpu_to_le16(0xa000),
1167         .lmp_subver     = cpu_to_le16(0xa607),
1168     };
1169
1170     bt_hci_event_complete(hci, &lv, READ_LOCAL_VERSION_RP_SIZE);
1171 }
1172
1173 static void bt_hci_read_local_commands_rp(struct bt_hci_s *hci)
1174 {
1175     read_local_commands_rp lc = {
1176         .status         = HCI_SUCCESS,
1177         .commands       = {
1178             /* Keep updated! */
1179             /* Also, keep in sync with hci->device.lmp_caps in bt_new_hci */
1180             0xbf, 0x80, 0xf9, 0x03, 0xb2, 0xc0, 0x03, 0xc3,
1181             0x00, 0x0f, 0x80, 0x00, 0xc0, 0x00, 0xe8, 0x13,
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             0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
1188         },
1189     };
1190
1191     bt_hci_event_complete(hci, &lc, READ_LOCAL_COMMANDS_RP_SIZE);
1192 }
1193
1194 static void bt_hci_read_local_features_rp(struct bt_hci_s *hci)
1195 {
1196     read_local_features_rp lf = {
1197         .status         = HCI_SUCCESS,
1198         .features       = {
1199             (hci->device.lmp_caps >>  0) & 0xff,
1200             (hci->device.lmp_caps >>  8) & 0xff,
1201             (hci->device.lmp_caps >> 16) & 0xff,
1202             (hci->device.lmp_caps >> 24) & 0xff,
1203             (hci->device.lmp_caps >> 32) & 0xff,
1204             (hci->device.lmp_caps >> 40) & 0xff,
1205             (hci->device.lmp_caps >> 48) & 0xff,
1206             (hci->device.lmp_caps >> 56) & 0xff,
1207         },
1208     };
1209
1210     bt_hci_event_complete(hci, &lf, READ_LOCAL_FEATURES_RP_SIZE);
1211 }
1212
1213 static void bt_hci_read_local_ext_features_rp(struct bt_hci_s *hci, int page)
1214 {
1215     read_local_ext_features_rp lef = {
1216         .status         = HCI_SUCCESS,
1217         .page_num       = page,
1218         .max_page_num   = 0x00,
1219         .features       = {
1220             /* Keep updated! */
1221             0x5f, 0x35, 0x85, 0x7e, 0x9b, 0x19, 0x00, 0x80,
1222         },
1223     };
1224     if (page)
1225         memset(lef.features, 0, sizeof(lef.features));
1226
1227     bt_hci_event_complete(hci, &lef, READ_LOCAL_EXT_FEATURES_RP_SIZE);
1228 }
1229
1230 static void bt_hci_read_buffer_size_rp(struct bt_hci_s *hci)
1231 {
1232     read_buffer_size_rp bs = {
1233         /* This can be made configurable, for one standard USB dongle HCI
1234          * the four values are cpu_to_le16(0x0180), 0x40,
1235          * cpu_to_le16(0x0008), cpu_to_le16(0x0008).  */
1236         .status         = HCI_SUCCESS,
1237         .acl_mtu        = cpu_to_le16(0x0200),
1238         .sco_mtu        = 0,
1239         .acl_max_pkt    = cpu_to_le16(0x0001),
1240         .sco_max_pkt    = cpu_to_le16(0x0000),
1241     };
1242
1243     bt_hci_event_complete(hci, &bs, READ_BUFFER_SIZE_RP_SIZE);
1244 }
1245
1246 /* Deprecated in V2.0 (page 661) */
1247 static void bt_hci_read_country_code_rp(struct bt_hci_s *hci)
1248 {
1249     read_country_code_rp cc ={
1250         .status         = HCI_SUCCESS,
1251         .country_code   = 0x00, /* North America & Europe^1 and Japan */
1252     };
1253
1254     bt_hci_event_complete(hci, &cc, READ_COUNTRY_CODE_RP_SIZE);
1255
1256     /* ^1. Except France, sorry */
1257 }
1258
1259 static void bt_hci_read_bd_addr_rp(struct bt_hci_s *hci)
1260 {
1261     read_bd_addr_rp ba = {
1262         .status = HCI_SUCCESS,
1263         .bdaddr = BAINIT(&hci->device.bd_addr),
1264     };
1265
1266     bt_hci_event_complete(hci, &ba, READ_BD_ADDR_RP_SIZE);
1267 }
1268
1269 static int bt_hci_link_quality_rp(struct bt_hci_s *hci, uint16_t handle)
1270 {
1271     read_link_quality_rp lq = {
1272         .status         = HCI_SUCCESS,
1273         .handle         = HNDL(handle),
1274         .link_quality   = 0xff,
1275     };
1276
1277     if (bt_hci_handle_bad(hci, handle))
1278         lq.status = HCI_NO_CONNECTION;
1279
1280     bt_hci_event_complete(hci, &lq, READ_LINK_QUALITY_RP_SIZE);
1281     return 0;
1282 }
1283
1284 /* Generate a Command Complete event with only the Status parameter */
1285 static inline void bt_hci_event_complete_status(struct bt_hci_s *hci,
1286                 uint8_t status)
1287 {
1288     bt_hci_event_complete(hci, &status, 1);
1289 }
1290
1291 static inline void bt_hci_event_complete_conn_cancel(struct bt_hci_s *hci,
1292                 uint8_t status, bdaddr_t *bd_addr)
1293 {
1294     create_conn_cancel_rp params = {
1295         .status = status,
1296         .bdaddr = BAINIT(bd_addr),
1297     };
1298
1299     bt_hci_event_complete(hci, &params, CREATE_CONN_CANCEL_RP_SIZE);
1300 }
1301
1302 static inline void bt_hci_event_auth_complete(struct bt_hci_s *hci,
1303                 uint16_t handle)
1304 {
1305     evt_auth_complete params = {
1306         .status = HCI_SUCCESS,
1307         .handle = HNDL(handle),
1308     };
1309
1310     bt_hci_event(hci, EVT_AUTH_COMPLETE, &params, EVT_AUTH_COMPLETE_SIZE);
1311 }
1312
1313 static inline void bt_hci_event_encrypt_change(struct bt_hci_s *hci,
1314                 uint16_t handle, uint8_t mode)
1315 {
1316     evt_encrypt_change params = {
1317         .status         = HCI_SUCCESS,
1318         .handle         = HNDL(handle),
1319         .encrypt        = mode,
1320     };
1321
1322     bt_hci_event(hci, EVT_ENCRYPT_CHANGE, &params, EVT_ENCRYPT_CHANGE_SIZE);
1323 }
1324
1325 static inline void bt_hci_event_complete_name_cancel(struct bt_hci_s *hci,
1326                 bdaddr_t *bd_addr)
1327 {
1328     remote_name_req_cancel_rp params = {
1329         .status = HCI_INVALID_PARAMETERS,
1330         .bdaddr = BAINIT(bd_addr),
1331     };
1332
1333     bt_hci_event_complete(hci, &params, REMOTE_NAME_REQ_CANCEL_RP_SIZE);
1334 }
1335
1336 static inline void bt_hci_event_read_remote_ext_features(struct bt_hci_s *hci,
1337                 uint16_t handle)
1338 {
1339     evt_read_remote_ext_features_complete params = {
1340         .status = HCI_UNSUPPORTED_FEATURE,
1341         .handle = HNDL(handle),
1342         /* Rest uninitialised */
1343     };
1344
1345     bt_hci_event(hci, EVT_READ_REMOTE_EXT_FEATURES_COMPLETE,
1346                     &params, EVT_READ_REMOTE_EXT_FEATURES_COMPLETE_SIZE);
1347 }
1348
1349 static inline void bt_hci_event_complete_lmp_handle(struct bt_hci_s *hci,
1350                 uint16_t handle)
1351 {
1352     read_lmp_handle_rp params = {
1353         .status         = HCI_NO_CONNECTION,
1354         .handle         = HNDL(handle),
1355         .reserved       = 0,
1356         /* Rest uninitialised */
1357     };
1358
1359     bt_hci_event_complete(hci, &params, READ_LMP_HANDLE_RP_SIZE);
1360 }
1361
1362 static inline void bt_hci_event_complete_role_discovery(struct bt_hci_s *hci,
1363                 int status, uint16_t handle, int master)
1364 {
1365     role_discovery_rp params = {
1366         .status         = status,
1367         .handle         = HNDL(handle),
1368         .role           = master ? 0x00 : 0x01,
1369     };
1370
1371     bt_hci_event_complete(hci, &params, ROLE_DISCOVERY_RP_SIZE);
1372 }
1373
1374 static inline void bt_hci_event_complete_flush(struct bt_hci_s *hci,
1375                 int status, uint16_t handle)
1376 {
1377     flush_rp params = {
1378         .status         = status,
1379         .handle         = HNDL(handle),
1380     };
1381
1382     bt_hci_event_complete(hci, &params, FLUSH_RP_SIZE);
1383 }
1384
1385 static inline void bt_hci_event_complete_read_local_name(struct bt_hci_s *hci)
1386 {
1387     read_local_name_rp params;
1388     params.status = HCI_SUCCESS;
1389     memset(params.name, 0, sizeof(params.name));
1390     if (hci->device.lmp_name)
1391         strncpy(params.name, hci->device.lmp_name, sizeof(params.name));
1392
1393     bt_hci_event_complete(hci, &params, READ_LOCAL_NAME_RP_SIZE);
1394 }
1395
1396 static inline void bt_hci_event_complete_read_conn_accept_timeout(
1397                 struct bt_hci_s *hci)
1398 {
1399     read_conn_accept_timeout_rp params = {
1400         .status         = HCI_SUCCESS,
1401         .timeout        = cpu_to_le16(hci->conn_accept_tout),
1402     };
1403
1404     bt_hci_event_complete(hci, &params, READ_CONN_ACCEPT_TIMEOUT_RP_SIZE);
1405 }
1406
1407 static inline void bt_hci_event_complete_read_scan_enable(struct bt_hci_s *hci)
1408 {
1409     read_scan_enable_rp params = {
1410         .status = HCI_SUCCESS,
1411         .enable =
1412                 (hci->device.inquiry_scan ? SCAN_INQUIRY : 0) |
1413                 (hci->device.page_scan ? SCAN_PAGE : 0),
1414     };
1415
1416     bt_hci_event_complete(hci, &params, READ_SCAN_ENABLE_RP_SIZE);
1417 }
1418
1419 static inline void bt_hci_event_complete_read_local_class(struct bt_hci_s *hci)
1420 {
1421     read_class_of_dev_rp params;
1422
1423     params.status = HCI_SUCCESS;
1424     memcpy(params.dev_class, hci->device.class, sizeof(params.dev_class));
1425
1426     bt_hci_event_complete(hci, &params, READ_CLASS_OF_DEV_RP_SIZE);
1427 }
1428
1429 static inline void bt_hci_event_complete_voice_setting(struct bt_hci_s *hci)
1430 {
1431     read_voice_setting_rp params = {
1432         .status         = HCI_SUCCESS,
1433         .voice_setting  = hci->voice_setting,   /* Note: no swapping */
1434     };
1435
1436     bt_hci_event_complete(hci, &params, READ_VOICE_SETTING_RP_SIZE);
1437 }
1438
1439 static inline void bt_hci_event_complete_read_inquiry_mode(
1440                 struct bt_hci_s *hci)
1441 {
1442     read_inquiry_mode_rp params = {
1443         .status         = HCI_SUCCESS,
1444         .mode           = hci->lm.inquiry_mode,
1445     };
1446
1447     bt_hci_event_complete(hci, &params, READ_INQUIRY_MODE_RP_SIZE);
1448 }
1449
1450 static inline void bt_hci_event_num_comp_pkts(struct bt_hci_s *hci,
1451                 uint16_t handle, int packets)
1452 {
1453     uint16_t buf[EVT_NUM_COMP_PKTS_SIZE(1) / 2 + 1];
1454     evt_num_comp_pkts *params = (void *) ((uint8_t *) buf + 1);
1455
1456     params->num_hndl                    = 1;
1457     params->connection->handle          = HNDL(handle);
1458     params->connection->num_packets     = cpu_to_le16(packets);
1459
1460     bt_hci_event(hci, EVT_NUM_COMP_PKTS, params, EVT_NUM_COMP_PKTS_SIZE(1));
1461 }
1462
1463 static void bt_submit_hci(struct HCIInfo *info,
1464                 const uint8_t *data, int length)
1465 {
1466     struct bt_hci_s *hci = hci_from_info(info);
1467     uint16_t cmd;
1468     int paramlen, i;
1469
1470     if (length < HCI_COMMAND_HDR_SIZE)
1471         goto short_hci;
1472
1473     memcpy(&hci->last_cmd, data, 2);
1474
1475     cmd = (data[1] << 8) | data[0];
1476     paramlen = data[2];
1477     if (cmd_opcode_ogf(cmd) == 0 || cmd_opcode_ocf(cmd) == 0)   /* NOP */
1478         return;
1479
1480     data += HCI_COMMAND_HDR_SIZE;
1481     length -= HCI_COMMAND_HDR_SIZE;
1482
1483     if (paramlen > length)
1484         return;
1485
1486 #define PARAM(cmd, param)       (((cmd##_cp *) data)->param)
1487 #define PARAM16(cmd, param)     le16_to_cpup(&PARAM(cmd, param))
1488 #define PARAMHANDLE(cmd)        HNDL(PARAM(cmd, handle))
1489 #define LENGTH_CHECK(cmd)       if (length < sizeof(cmd##_cp)) goto short_hci
1490     /* Note: the supported commands bitmask in bt_hci_read_local_commands_rp
1491      * needs to be updated every time a command is implemented here!  */
1492     switch (cmd) {
1493     case cmd_opcode_pack(OGF_LINK_CTL, OCF_INQUIRY):
1494         LENGTH_CHECK(inquiry);
1495
1496         if (PARAM(inquiry, length) < 1) {
1497             bt_hci_event_complete_status(hci, HCI_INVALID_PARAMETERS);
1498             break;
1499         }
1500
1501         hci->lm.inquire = 1;
1502         hci->lm.periodic = 0;
1503         hci->lm.responses_left = PARAM(inquiry, num_rsp) ?: INT_MAX;
1504         hci->lm.responses = 0;
1505         bt_hci_event_status(hci, HCI_SUCCESS);
1506         bt_hci_inquiry_start(hci, PARAM(inquiry, length));
1507         break;
1508
1509     case cmd_opcode_pack(OGF_LINK_CTL, OCF_INQUIRY_CANCEL):
1510         if (!hci->lm.inquire || hci->lm.periodic) {
1511             fprintf(stderr, "%s: Inquiry Cancel should only be issued after "
1512                             "the Inquiry command has been issued, a Command "
1513                             "Status event has been received for the Inquiry "
1514                             "command, and before the Inquiry Complete event "
1515                             "occurs", __FUNCTION__);
1516             bt_hci_event_complete_status(hci, HCI_COMMAND_DISALLOWED);
1517             break;
1518         }
1519
1520         hci->lm.inquire = 0;
1521         qemu_del_timer(hci->lm.inquiry_done);
1522         bt_hci_event_complete_status(hci, HCI_SUCCESS);
1523         break;
1524
1525     case cmd_opcode_pack(OGF_LINK_CTL, OCF_PERIODIC_INQUIRY):
1526         LENGTH_CHECK(periodic_inquiry);
1527
1528         if (!(PARAM(periodic_inquiry, length) <
1529                                 PARAM16(periodic_inquiry, min_period) &&
1530                                 PARAM16(periodic_inquiry, min_period) <
1531                                 PARAM16(periodic_inquiry, max_period)) ||
1532                         PARAM(periodic_inquiry, length) < 1 ||
1533                         PARAM16(periodic_inquiry, min_period) < 2 ||
1534                         PARAM16(periodic_inquiry, max_period) < 3) {
1535             bt_hci_event_complete_status(hci, HCI_INVALID_PARAMETERS);
1536             break;
1537         }
1538
1539         hci->lm.inquire = 1;
1540         hci->lm.periodic = 1;
1541         hci->lm.responses_left = PARAM(periodic_inquiry, num_rsp);
1542         hci->lm.responses = 0;
1543         hci->lm.inquiry_period = PARAM16(periodic_inquiry, max_period);
1544         bt_hci_event_complete_status(hci, HCI_SUCCESS);
1545         bt_hci_inquiry_start(hci, PARAM(periodic_inquiry, length));
1546         break;
1547
1548     case cmd_opcode_pack(OGF_LINK_CTL, OCF_EXIT_PERIODIC_INQUIRY):
1549         if (!hci->lm.inquire || !hci->lm.periodic) {
1550             fprintf(stderr, "%s: Inquiry Cancel should only be issued after "
1551                             "the Inquiry command has been issued, a Command "
1552                             "Status event has been received for the Inquiry "
1553                             "command, and before the Inquiry Complete event "
1554                             "occurs", __FUNCTION__);
1555             bt_hci_event_complete_status(hci, HCI_COMMAND_DISALLOWED);
1556             break;
1557         }
1558         hci->lm.inquire = 0;
1559         qemu_del_timer(hci->lm.inquiry_done);
1560         qemu_del_timer(hci->lm.inquiry_next);
1561         bt_hci_event_complete_status(hci, HCI_SUCCESS);
1562         break;
1563
1564     case cmd_opcode_pack(OGF_LINK_CTL, OCF_CREATE_CONN):
1565         LENGTH_CHECK(create_conn);
1566
1567         if (hci->lm.connecting >= HCI_HANDLES_MAX) {
1568             bt_hci_event_status(hci, HCI_REJECTED_LIMITED_RESOURCES);
1569             break;
1570         }
1571         bt_hci_event_status(hci, HCI_SUCCESS);
1572
1573         if (bt_hci_connect(hci, &PARAM(create_conn, bdaddr)))
1574             bt_hci_connection_reject_event(hci, &PARAM(create_conn, bdaddr));
1575         break;
1576
1577     case cmd_opcode_pack(OGF_LINK_CTL, OCF_DISCONNECT):
1578         LENGTH_CHECK(disconnect);
1579
1580         if (bt_hci_handle_bad(hci, PARAMHANDLE(disconnect))) {
1581             bt_hci_event_status(hci, HCI_NO_CONNECTION);
1582             break;
1583         }
1584
1585         bt_hci_event_status(hci, HCI_SUCCESS);
1586         bt_hci_disconnect(hci, PARAMHANDLE(disconnect),
1587                         PARAM(disconnect, reason));
1588         break;
1589
1590     case cmd_opcode_pack(OGF_LINK_CTL, OCF_CREATE_CONN_CANCEL):
1591         LENGTH_CHECK(create_conn_cancel);
1592
1593         if (bt_hci_lmp_connection_ready(hci,
1594                                 &PARAM(create_conn_cancel, bdaddr))) {
1595             for (i = 0; i < HCI_HANDLES_MAX; i ++)
1596                 if (bt_hci_role_master(hci, i) && hci->lm.handle[i].link &&
1597                                 !bacmp(&hci->lm.handle[i].link->slave->bd_addr,
1598                                         &PARAM(create_conn_cancel, bdaddr)))
1599                    break;
1600
1601             bt_hci_event_complete_conn_cancel(hci, i < HCI_HANDLES_MAX ?
1602                             HCI_ACL_CONNECTION_EXISTS : HCI_NO_CONNECTION,
1603                             &PARAM(create_conn_cancel, bdaddr));
1604         } else
1605             bt_hci_event_complete_conn_cancel(hci, HCI_SUCCESS,
1606                             &PARAM(create_conn_cancel, bdaddr));
1607         break;
1608
1609     case cmd_opcode_pack(OGF_LINK_CTL, OCF_ACCEPT_CONN_REQ):
1610         LENGTH_CHECK(accept_conn_req);
1611
1612         if (!hci->conn_req_host ||
1613                         bacmp(&PARAM(accept_conn_req, bdaddr),
1614                                 &hci->conn_req_host->bd_addr)) {
1615             bt_hci_event_status(hci, HCI_INVALID_PARAMETERS);
1616             break;
1617         }
1618
1619         bt_hci_event_status(hci, HCI_SUCCESS);
1620         bt_hci_connection_accept(hci, hci->conn_req_host);
1621         hci->conn_req_host = NULL;
1622         break;
1623
1624     case cmd_opcode_pack(OGF_LINK_CTL, OCF_REJECT_CONN_REQ):
1625         LENGTH_CHECK(reject_conn_req);
1626
1627         if (!hci->conn_req_host ||
1628                         bacmp(&PARAM(reject_conn_req, bdaddr),
1629                                 &hci->conn_req_host->bd_addr)) {
1630             bt_hci_event_status(hci, HCI_INVALID_PARAMETERS);
1631             break;
1632         }
1633
1634         bt_hci_event_status(hci, HCI_SUCCESS);
1635         bt_hci_connection_reject(hci, hci->conn_req_host,
1636                         PARAM(reject_conn_req, reason));
1637         bt_hci_connection_reject_event(hci, &hci->conn_req_host->bd_addr);
1638         hci->conn_req_host = NULL;
1639         break;
1640
1641     case cmd_opcode_pack(OGF_LINK_CTL, OCF_AUTH_REQUESTED):
1642         LENGTH_CHECK(auth_requested);
1643
1644         if (bt_hci_handle_bad(hci, PARAMHANDLE(auth_requested)))
1645             bt_hci_event_status(hci, HCI_NO_CONNECTION);
1646         else {
1647             bt_hci_event_status(hci, HCI_SUCCESS);
1648             bt_hci_event_auth_complete(hci, PARAMHANDLE(auth_requested));
1649         }
1650         break;
1651
1652     case cmd_opcode_pack(OGF_LINK_CTL, OCF_SET_CONN_ENCRYPT):
1653         LENGTH_CHECK(set_conn_encrypt);
1654
1655         if (bt_hci_handle_bad(hci, PARAMHANDLE(set_conn_encrypt)))
1656             bt_hci_event_status(hci, HCI_NO_CONNECTION);
1657         else {
1658             bt_hci_event_status(hci, HCI_SUCCESS);
1659             bt_hci_event_encrypt_change(hci,
1660                             PARAMHANDLE(set_conn_encrypt),
1661                             PARAM(set_conn_encrypt, encrypt));
1662         }
1663         break;
1664
1665     case cmd_opcode_pack(OGF_LINK_CTL, OCF_REMOTE_NAME_REQ):
1666         LENGTH_CHECK(remote_name_req);
1667
1668         if (bt_hci_name_req(hci, &PARAM(remote_name_req, bdaddr)))
1669             bt_hci_event_status(hci, HCI_NO_CONNECTION);
1670         break;
1671
1672     case cmd_opcode_pack(OGF_LINK_CTL, OCF_REMOTE_NAME_REQ_CANCEL):
1673         LENGTH_CHECK(remote_name_req_cancel);
1674
1675         bt_hci_event_complete_name_cancel(hci,
1676                         &PARAM(remote_name_req_cancel, bdaddr));
1677         break;
1678
1679     case cmd_opcode_pack(OGF_LINK_CTL, OCF_READ_REMOTE_FEATURES):
1680         LENGTH_CHECK(read_remote_features);
1681
1682         if (bt_hci_features_req(hci, PARAMHANDLE(read_remote_features)))
1683             bt_hci_event_status(hci, HCI_NO_CONNECTION);
1684         break;
1685
1686     case cmd_opcode_pack(OGF_LINK_CTL, OCF_READ_REMOTE_EXT_FEATURES):
1687         LENGTH_CHECK(read_remote_ext_features);
1688
1689         if (bt_hci_handle_bad(hci, PARAMHANDLE(read_remote_ext_features)))
1690             bt_hci_event_status(hci, HCI_NO_CONNECTION);
1691         else {
1692             bt_hci_event_status(hci, HCI_SUCCESS);
1693             bt_hci_event_read_remote_ext_features(hci,
1694                             PARAMHANDLE(read_remote_ext_features));
1695         }
1696         break;
1697
1698     case cmd_opcode_pack(OGF_LINK_CTL, OCF_READ_REMOTE_VERSION):
1699         LENGTH_CHECK(read_remote_version);
1700
1701         if (bt_hci_version_req(hci, PARAMHANDLE(read_remote_version)))
1702             bt_hci_event_status(hci, HCI_NO_CONNECTION);
1703         break;
1704
1705     case cmd_opcode_pack(OGF_LINK_CTL, OCF_READ_CLOCK_OFFSET):
1706         LENGTH_CHECK(read_clock_offset);
1707
1708         if (bt_hci_clkoffset_req(hci, PARAMHANDLE(read_clock_offset)))
1709             bt_hci_event_status(hci, HCI_NO_CONNECTION);
1710         break;
1711
1712     case cmd_opcode_pack(OGF_LINK_CTL, OCF_READ_LMP_HANDLE):
1713         LENGTH_CHECK(read_lmp_handle);
1714
1715         /* TODO: */
1716         bt_hci_event_complete_lmp_handle(hci, PARAMHANDLE(read_lmp_handle));
1717         break;
1718
1719     case cmd_opcode_pack(OGF_LINK_POLICY, OCF_HOLD_MODE):
1720         LENGTH_CHECK(hold_mode);
1721
1722         if (PARAM16(hold_mode, min_interval) >
1723                         PARAM16(hold_mode, max_interval) ||
1724                         PARAM16(hold_mode, min_interval) < 0x0002 ||
1725                         PARAM16(hold_mode, max_interval) > 0xff00 ||
1726                         (PARAM16(hold_mode, min_interval) & 1) ||
1727                         (PARAM16(hold_mode, max_interval) & 1)) {
1728             bt_hci_event_status(hci, HCI_INVALID_PARAMETERS);
1729             break;
1730         }
1731
1732         if (bt_hci_mode_change(hci, PARAMHANDLE(hold_mode),
1733                                 PARAM16(hold_mode, max_interval),
1734                                 acl_hold))
1735             bt_hci_event_status(hci, HCI_NO_CONNECTION);
1736         break;
1737
1738     case cmd_opcode_pack(OGF_LINK_POLICY, OCF_PARK_MODE):
1739         LENGTH_CHECK(park_mode);
1740
1741         if (PARAM16(park_mode, min_interval) >
1742                         PARAM16(park_mode, max_interval) ||
1743                         PARAM16(park_mode, min_interval) < 0x000e ||
1744                         (PARAM16(park_mode, min_interval) & 1) ||
1745                         (PARAM16(park_mode, max_interval) & 1)) {
1746             bt_hci_event_status(hci, HCI_INVALID_PARAMETERS);
1747             break;
1748         }
1749
1750         if (bt_hci_mode_change(hci, PARAMHANDLE(park_mode),
1751                                 PARAM16(park_mode, max_interval),
1752                                 acl_parked))
1753             bt_hci_event_status(hci, HCI_NO_CONNECTION);
1754         break;
1755
1756     case cmd_opcode_pack(OGF_LINK_POLICY, OCF_EXIT_PARK_MODE):
1757         LENGTH_CHECK(exit_park_mode);
1758
1759         if (bt_hci_mode_cancel(hci, PARAMHANDLE(exit_park_mode),
1760                                 acl_parked))
1761             bt_hci_event_status(hci, HCI_NO_CONNECTION);
1762         break;
1763
1764     case cmd_opcode_pack(OGF_LINK_POLICY, OCF_ROLE_DISCOVERY):
1765         LENGTH_CHECK(role_discovery);
1766
1767         if (bt_hci_handle_bad(hci, PARAMHANDLE(role_discovery)))
1768             bt_hci_event_complete_role_discovery(hci,
1769                             HCI_NO_CONNECTION, PARAMHANDLE(role_discovery), 0);
1770         else
1771             bt_hci_event_complete_role_discovery(hci,
1772                             HCI_SUCCESS, PARAMHANDLE(role_discovery),
1773                             bt_hci_role_master(hci,
1774                                     PARAMHANDLE(role_discovery)));
1775         break;
1776
1777     case cmd_opcode_pack(OGF_HOST_CTL, OCF_SET_EVENT_MASK):
1778         LENGTH_CHECK(set_event_mask);
1779
1780         memcpy(hci->event_mask, PARAM(set_event_mask, mask), 8);
1781         bt_hci_event_complete_status(hci, HCI_SUCCESS);
1782         break;
1783
1784     case cmd_opcode_pack(OGF_HOST_CTL, OCF_RESET):
1785         bt_hci_reset(hci);
1786         bt_hci_event_status(hci, HCI_SUCCESS);
1787         break;
1788
1789     case cmd_opcode_pack(OGF_HOST_CTL, OCF_SET_EVENT_FLT):
1790         if (length >= 1 && PARAM(set_event_flt, flt_type) == FLT_CLEAR_ALL)
1791             /* No length check */;
1792         else
1793             LENGTH_CHECK(set_event_flt);
1794
1795         /* Filters are not implemented */
1796         bt_hci_event_complete_status(hci, HCI_SUCCESS);
1797         break;
1798
1799     case cmd_opcode_pack(OGF_HOST_CTL, OCF_FLUSH):
1800         LENGTH_CHECK(flush);
1801
1802         if (bt_hci_handle_bad(hci, PARAMHANDLE(flush)))
1803             bt_hci_event_complete_flush(hci,
1804                             HCI_NO_CONNECTION, PARAMHANDLE(flush));
1805         else {
1806             /* TODO: ordering? */
1807             bt_hci_event(hci, EVT_FLUSH_OCCURRED,
1808                             &PARAM(flush, handle),
1809                             EVT_FLUSH_OCCURRED_SIZE);
1810             bt_hci_event_complete_flush(hci,
1811                             HCI_SUCCESS, PARAMHANDLE(flush));
1812         }
1813         break;
1814
1815     case cmd_opcode_pack(OGF_HOST_CTL, OCF_CHANGE_LOCAL_NAME):
1816         LENGTH_CHECK(change_local_name);
1817
1818         if (hci->device.lmp_name)
1819             g_free((void *) hci->device.lmp_name);
1820         hci->device.lmp_name = g_strndup(PARAM(change_local_name, name),
1821                         sizeof(PARAM(change_local_name, name)));
1822         bt_hci_event_complete_status(hci, HCI_SUCCESS);
1823         break;
1824
1825     case cmd_opcode_pack(OGF_HOST_CTL, OCF_READ_LOCAL_NAME):
1826         bt_hci_event_complete_read_local_name(hci);
1827         break;
1828
1829     case cmd_opcode_pack(OGF_HOST_CTL, OCF_READ_CONN_ACCEPT_TIMEOUT):
1830         bt_hci_event_complete_read_conn_accept_timeout(hci);
1831         break;
1832
1833     case cmd_opcode_pack(OGF_HOST_CTL, OCF_WRITE_CONN_ACCEPT_TIMEOUT):
1834         /* TODO */
1835         LENGTH_CHECK(write_conn_accept_timeout);
1836
1837         if (PARAM16(write_conn_accept_timeout, timeout) < 0x0001 ||
1838                         PARAM16(write_conn_accept_timeout, timeout) > 0xb540) {
1839             bt_hci_event_complete_status(hci, HCI_INVALID_PARAMETERS);
1840             break;
1841         }
1842
1843         hci->conn_accept_tout = PARAM16(write_conn_accept_timeout, timeout);
1844         bt_hci_event_complete_status(hci, HCI_SUCCESS);
1845         break;
1846
1847     case cmd_opcode_pack(OGF_HOST_CTL, OCF_READ_SCAN_ENABLE):
1848         bt_hci_event_complete_read_scan_enable(hci);
1849         break;
1850
1851     case cmd_opcode_pack(OGF_HOST_CTL, OCF_WRITE_SCAN_ENABLE):
1852         LENGTH_CHECK(write_scan_enable);
1853
1854         /* TODO: check that the remaining bits are all 0 */
1855         hci->device.inquiry_scan =
1856                 !!(PARAM(write_scan_enable, scan_enable) & SCAN_INQUIRY);
1857         hci->device.page_scan =
1858                 !!(PARAM(write_scan_enable, scan_enable) & SCAN_PAGE);
1859         bt_hci_event_complete_status(hci, HCI_SUCCESS);
1860         break;
1861
1862     case cmd_opcode_pack(OGF_HOST_CTL, OCF_READ_CLASS_OF_DEV):
1863         bt_hci_event_complete_read_local_class(hci);
1864         break;
1865
1866     case cmd_opcode_pack(OGF_HOST_CTL, OCF_WRITE_CLASS_OF_DEV):
1867         LENGTH_CHECK(write_class_of_dev);
1868
1869         memcpy(hci->device.class, PARAM(write_class_of_dev, dev_class),
1870                         sizeof(PARAM(write_class_of_dev, dev_class)));
1871         bt_hci_event_complete_status(hci, HCI_SUCCESS);
1872         break;
1873
1874     case cmd_opcode_pack(OGF_HOST_CTL, OCF_READ_VOICE_SETTING):
1875         bt_hci_event_complete_voice_setting(hci);
1876         break;
1877
1878     case cmd_opcode_pack(OGF_HOST_CTL, OCF_WRITE_VOICE_SETTING):
1879         LENGTH_CHECK(write_voice_setting);
1880
1881         hci->voice_setting = PARAM(write_voice_setting, voice_setting);
1882         bt_hci_event_complete_status(hci, HCI_SUCCESS);
1883         break;
1884
1885     case cmd_opcode_pack(OGF_HOST_CTL, OCF_HOST_NUMBER_OF_COMPLETED_PACKETS):
1886         if (length < data[0] * 2 + 1)
1887             goto short_hci;
1888
1889         for (i = 0; i < data[0]; i ++)
1890             if (bt_hci_handle_bad(hci,
1891                                     data[i * 2 + 1] | (data[i * 2 + 2] << 8)))
1892                 bt_hci_event_complete_status(hci, HCI_INVALID_PARAMETERS);
1893         break;
1894
1895     case cmd_opcode_pack(OGF_HOST_CTL, OCF_READ_INQUIRY_MODE):
1896         /* Only if (local_features[3] & 0x40) && (local_commands[12] & 0x40)
1897          * else
1898          *     goto unknown_command */
1899         bt_hci_event_complete_read_inquiry_mode(hci);
1900         break;
1901
1902     case cmd_opcode_pack(OGF_HOST_CTL, OCF_WRITE_INQUIRY_MODE):
1903         /* Only if (local_features[3] & 0x40) && (local_commands[12] & 0x80)
1904          * else
1905          *     goto unknown_command */
1906         LENGTH_CHECK(write_inquiry_mode);
1907
1908         if (PARAM(write_inquiry_mode, mode) > 0x01) {
1909             bt_hci_event_complete_status(hci, HCI_INVALID_PARAMETERS);
1910             break;
1911         }
1912
1913         hci->lm.inquiry_mode = PARAM(write_inquiry_mode, mode);
1914         bt_hci_event_complete_status(hci, HCI_SUCCESS);
1915         break;
1916
1917     case cmd_opcode_pack(OGF_INFO_PARAM, OCF_READ_LOCAL_VERSION):
1918         bt_hci_read_local_version_rp(hci);
1919         break;
1920
1921     case cmd_opcode_pack(OGF_INFO_PARAM, OCF_READ_LOCAL_COMMANDS):
1922         bt_hci_read_local_commands_rp(hci);
1923         break;
1924
1925     case cmd_opcode_pack(OGF_INFO_PARAM, OCF_READ_LOCAL_FEATURES):
1926         bt_hci_read_local_features_rp(hci);
1927         break;
1928
1929     case cmd_opcode_pack(OGF_INFO_PARAM, OCF_READ_LOCAL_EXT_FEATURES):
1930         LENGTH_CHECK(read_local_ext_features);
1931
1932         bt_hci_read_local_ext_features_rp(hci,
1933                         PARAM(read_local_ext_features, page_num));
1934         break;
1935
1936     case cmd_opcode_pack(OGF_INFO_PARAM, OCF_READ_BUFFER_SIZE):
1937         bt_hci_read_buffer_size_rp(hci);
1938         break;
1939
1940     case cmd_opcode_pack(OGF_INFO_PARAM, OCF_READ_COUNTRY_CODE):
1941         bt_hci_read_country_code_rp(hci);
1942         break;
1943
1944     case cmd_opcode_pack(OGF_INFO_PARAM, OCF_READ_BD_ADDR):
1945         bt_hci_read_bd_addr_rp(hci);
1946         break;
1947
1948     case cmd_opcode_pack(OGF_STATUS_PARAM, OCF_READ_LINK_QUALITY):
1949         LENGTH_CHECK(read_link_quality);
1950
1951         bt_hci_link_quality_rp(hci, PARAMHANDLE(read_link_quality));
1952         break;
1953
1954     default:
1955         bt_hci_event_status(hci, HCI_UNKNOWN_COMMAND);
1956         break;
1957
1958     short_hci:
1959         fprintf(stderr, "%s: HCI packet too short (%iB)\n",
1960                         __FUNCTION__, length);
1961         bt_hci_event_status(hci, HCI_INVALID_PARAMETERS);
1962         break;
1963     }
1964 }
1965
1966 /* We could perform fragmentation here, we can't do "recombination" because
1967  * at this layer the length of the payload is not know ahead, so we only
1968  * know that a packet contained the last fragment of the SDU when the next
1969  * SDU starts.  */
1970 static inline void bt_hci_lmp_acl_data(struct bt_hci_s *hci, uint16_t handle,
1971                 const uint8_t *data, int start, int len)
1972 {
1973     struct hci_acl_hdr *pkt = (void *) hci->acl_buf;
1974
1975     /* TODO: packet flags */
1976     /* TODO: avoid memcpy'ing */
1977
1978     if (len + HCI_ACL_HDR_SIZE > sizeof(hci->acl_buf)) {
1979         fprintf(stderr, "%s: can't take ACL packets %i bytes long\n",
1980                         __FUNCTION__, len);
1981         return;
1982     }
1983     memcpy(hci->acl_buf + HCI_ACL_HDR_SIZE, data, len);
1984
1985     pkt->handle = cpu_to_le16(
1986                     acl_handle_pack(handle, start ? ACL_START : ACL_CONT));
1987     pkt->dlen = cpu_to_le16(len);
1988     hci->info.acl_recv(hci->info.opaque,
1989                     hci->acl_buf, len + HCI_ACL_HDR_SIZE);
1990 }
1991
1992 static void bt_hci_lmp_acl_data_slave(struct bt_link_s *btlink,
1993                 const uint8_t *data, int start, int len)
1994 {
1995     struct bt_hci_link_s *link = (struct bt_hci_link_s *) btlink;
1996
1997     bt_hci_lmp_acl_data(hci_from_device(btlink->slave),
1998                     link->handle, data, start, len);
1999 }
2000
2001 static void bt_hci_lmp_acl_data_host(struct bt_link_s *link,
2002                 const uint8_t *data, int start, int len)
2003 {
2004     bt_hci_lmp_acl_data(hci_from_device(link->host),
2005                     link->handle, data, start, len);
2006 }
2007
2008 static void bt_submit_acl(struct HCIInfo *info,
2009                 const uint8_t *data, int length)
2010 {
2011     struct bt_hci_s *hci = hci_from_info(info);
2012     uint16_t handle;
2013     int datalen, flags;
2014     struct bt_link_s *link;
2015
2016     if (length < HCI_ACL_HDR_SIZE) {
2017         fprintf(stderr, "%s: ACL packet too short (%iB)\n",
2018                         __FUNCTION__, length);
2019         return;
2020     }
2021
2022     handle = acl_handle((data[1] << 8) | data[0]);
2023     flags = acl_flags((data[1] << 8) | data[0]);
2024     datalen = (data[3] << 8) | data[2];
2025     data += HCI_ACL_HDR_SIZE;
2026     length -= HCI_ACL_HDR_SIZE;
2027
2028     if (bt_hci_handle_bad(hci, handle)) {
2029         fprintf(stderr, "%s: invalid ACL handle %03x\n",
2030                         __FUNCTION__, handle);
2031         /* TODO: signal an error */
2032         return;
2033     }
2034     handle &= ~HCI_HANDLE_OFFSET;
2035
2036     if (datalen > length) {
2037         fprintf(stderr, "%s: ACL packet too short (%iB < %iB)\n",
2038                         __FUNCTION__, length, datalen);
2039         return;
2040     }
2041
2042     link = hci->lm.handle[handle].link;
2043
2044     if ((flags & ~3) == ACL_ACTIVE_BCAST) {
2045         if (!hci->asb_handle)
2046             hci->asb_handle = handle;
2047         else if (handle != hci->asb_handle) {
2048             fprintf(stderr, "%s: Bad handle %03x in Active Slave Broadcast\n",
2049                             __FUNCTION__, handle);
2050             /* TODO: signal an error */
2051             return;
2052         }
2053
2054         /* TODO */
2055     }
2056
2057     if ((flags & ~3) == ACL_PICO_BCAST) {
2058         if (!hci->psb_handle)
2059             hci->psb_handle = handle;
2060         else if (handle != hci->psb_handle) {
2061             fprintf(stderr, "%s: Bad handle %03x in Parked Slave Broadcast\n",
2062                             __FUNCTION__, handle);
2063             /* TODO: signal an error */
2064             return;
2065         }
2066
2067         /* TODO */
2068     }
2069
2070     /* TODO: increase counter and send EVT_NUM_COMP_PKTS */
2071     bt_hci_event_num_comp_pkts(hci, handle | HCI_HANDLE_OFFSET, 1);
2072
2073     /* Do this last as it can trigger further events even in this HCI */
2074     hci->lm.handle[handle].lmp_acl_data(link, data,
2075                     (flags & 3) == ACL_START, length);
2076 }
2077
2078 static void bt_submit_sco(struct HCIInfo *info,
2079                 const uint8_t *data, int length)
2080 {
2081     struct bt_hci_s *hci = hci_from_info(info);
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     length -= 3;
2091
2092     if (bt_hci_handle_bad(hci, handle)) {
2093         fprintf(stderr, "%s: invalid SCO handle %03x\n",
2094                         __FUNCTION__, handle);
2095         return;
2096     }
2097
2098     if (datalen > length) {
2099         fprintf(stderr, "%s: SCO packet too short (%iB < %iB)\n",
2100                         __FUNCTION__, length, datalen);
2101         return;
2102     }
2103
2104     /* TODO */
2105
2106     /* TODO: increase counter and send EVT_NUM_COMP_PKTS if synchronous
2107      * Flow Control is enabled.
2108      * (See Read/Write_Synchronous_Flow_Control_Enable on page 513 and
2109      * page 514.)  */
2110 }
2111
2112 static uint8_t *bt_hci_evt_packet(void *opaque)
2113 {
2114     /* TODO: allocate a packet from upper layer */
2115     struct bt_hci_s *s = opaque;
2116
2117     return s->evt_buf;
2118 }
2119
2120 static void bt_hci_evt_submit(void *opaque, int len)
2121 {
2122     /* TODO: notify upper layer */
2123     struct bt_hci_s *s = opaque;
2124
2125     s->info.evt_recv(s->info.opaque, s->evt_buf, len);
2126 }
2127
2128 static int bt_hci_bdaddr_set(struct HCIInfo *info, const uint8_t *bd_addr)
2129 {
2130     struct bt_hci_s *hci = hci_from_info(info);
2131
2132     bacpy(&hci->device.bd_addr, (const bdaddr_t *) bd_addr);
2133     return 0;
2134 }
2135
2136 static void bt_hci_done(struct HCIInfo *info);
2137 static void bt_hci_destroy(struct bt_device_s *dev)
2138 {
2139     struct bt_hci_s *hci = hci_from_device(dev);
2140
2141     bt_hci_done(&hci->info);
2142 }
2143
2144 struct HCIInfo *bt_new_hci(struct bt_scatternet_s *net)
2145 {
2146     struct bt_hci_s *s = g_malloc0(sizeof(struct bt_hci_s));
2147
2148     s->lm.inquiry_done = qemu_new_timer_ns(vm_clock, bt_hci_inquiry_done, s);
2149     s->lm.inquiry_next = qemu_new_timer_ns(vm_clock, bt_hci_inquiry_next, s);
2150     s->conn_accept_timer =
2151             qemu_new_timer_ns(vm_clock, bt_hci_conn_accept_timeout, s);
2152
2153     s->evt_packet = bt_hci_evt_packet;
2154     s->evt_submit = bt_hci_evt_submit;
2155     s->opaque = s;
2156
2157     bt_device_init(&s->device, net);
2158     s->device.lmp_connection_request = bt_hci_lmp_connection_request;
2159     s->device.lmp_connection_complete = bt_hci_lmp_connection_complete;
2160     s->device.lmp_disconnect_master = bt_hci_lmp_disconnect_host;
2161     s->device.lmp_disconnect_slave = bt_hci_lmp_disconnect_slave;
2162     s->device.lmp_acl_data = bt_hci_lmp_acl_data_slave;
2163     s->device.lmp_acl_resp = bt_hci_lmp_acl_data_host;
2164     s->device.lmp_mode_change = bt_hci_lmp_mode_change_slave;
2165
2166     /* Keep updated! */
2167     /* Also keep in sync with supported commands bitmask in
2168      * bt_hci_read_local_commands_rp */
2169     s->device.lmp_caps = 0x8000199b7e85355fll;
2170
2171     bt_hci_reset(s);
2172
2173     s->info.cmd_send = bt_submit_hci;
2174     s->info.sco_send = bt_submit_sco;
2175     s->info.acl_send = bt_submit_acl;
2176     s->info.bdaddr_set = bt_hci_bdaddr_set;
2177
2178     s->device.handle_destroy = bt_hci_destroy;
2179
2180     return &s->info;
2181 }
2182
2183 static void bt_hci_done(struct HCIInfo *info)
2184 {
2185     struct bt_hci_s *hci = hci_from_info(info);
2186     int handle;
2187
2188     bt_device_done(&hci->device);
2189
2190     if (hci->device.lmp_name)
2191         g_free((void *) hci->device.lmp_name);
2192
2193     /* Be gentle and send DISCONNECT to all connected peers and those
2194      * currently waiting for us to accept or reject a connection request.
2195      * This frees the links.  */
2196     if (hci->conn_req_host) {
2197         bt_hci_connection_reject(hci,
2198                                  hci->conn_req_host, HCI_OE_POWER_OFF);
2199         return;
2200     }
2201
2202     for (handle = HCI_HANDLE_OFFSET;
2203                     handle < (HCI_HANDLE_OFFSET | HCI_HANDLES_MAX); handle ++)
2204         if (!bt_hci_handle_bad(hci, handle))
2205             bt_hci_disconnect(hci, handle, HCI_OE_POWER_OFF);
2206
2207     /* TODO: this is not enough actually, there may be slaves from whom
2208      * we have requested a connection who will soon (or not) respond with
2209      * an accept or a reject, so we should also check if hci->lm.connecting
2210      * is non-zero and if so, avoid freeing the hci but otherwise disappear
2211      * from all qemu social life (e.g. stop scanning and request to be
2212      * removed from s->device.net) and arrange for
2213      * s->device.lmp_connection_complete to free the remaining bits once
2214      * hci->lm.awaiting_bdaddr[] is empty.  */
2215
2216     qemu_free_timer(hci->lm.inquiry_done);
2217     qemu_free_timer(hci->lm.inquiry_next);
2218     qemu_free_timer(hci->conn_accept_timer);
2219
2220     g_free(hci);
2221 }
This page took 0.14465 seconds and 4 git commands to generate.