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