Statistics
| Branch: | Revision:

root / hw / bt-hci.c @ 7442511c

History | View | Annotate | Download (67.8 kB)

1
/*
2
 * QEMU Bluetooth HCI logic.
3
 *
4
 * Copyright (C) 2007 OpenMoko, Inc.
5
 * Copyright (C) 2008 Andrzej Zaborowski  <balrog@zabor.org>
6
 *
7
 * This program is free software; you can redistribute it and/or
8
 * modify it under the terms of the GNU General Public License as
9
 * published by the Free Software Foundation; either version 2 of
10
 * the License, or (at your option) any later version.
11
 *
12
 * This program is distributed in the hope that it will be useful,
13
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
14
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
15
 * GNU General Public License for more details.
16
 *
17
 * You should have received a copy of the GNU General Public License
18
 * along with this program; if not, write to the Free Software
19
 * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston,
20
 * MA  02110-1301  USA
21
 */
22

    
23
#include "qemu-common.h"
24
#include "qemu-timer.h"
25
#include "usb.h"
26
#include "net.h"
27
#include "bt.h"
28

    
29
struct bt_hci_s {
30
    uint8_t *(*evt_packet)(void *opaque);
31
    void (*evt_submit)(void *opaque, int len);
32
    void *opaque;
33
    uint8_t evt_buf[256];
34

    
35
    uint8_t acl_buf[4096];
36
    int acl_len;
37

    
38
    uint16_t asb_handle;
39
    uint16_t psb_handle;
40

    
41
    int last_cmd;        /* Note: Always little-endian */
42

    
43
    struct bt_device_s *conn_req_host;
44

    
45
    struct {
46
        int inquire;
47
        int periodic;
48
        int responses_left;
49
        int responses;
50
        QEMUTimer *inquiry_done;
51
        QEMUTimer *inquiry_next;
52
        int inquiry_length;
53
        int inquiry_period;
54
        int inquiry_mode;
55

    
56
#define HCI_HANDLE_OFFSET        0x20
57
#define HCI_HANDLES_MAX                0x10
58
        struct bt_hci_master_link_s {
59
            struct bt_link_s *link;
60
            void (*lmp_acl_data)(struct bt_link_s *link,
61
                            const uint8_t *data, int start, int len);
62
            QEMUTimer *acl_mode_timer;
63
        } handle[HCI_HANDLES_MAX];
64
        uint32_t role_bmp;
65
        int last_handle;
66
        int connecting;
67
        bdaddr_t awaiting_bdaddr[HCI_HANDLES_MAX];
68
    } lm;
69

    
70
    uint8_t event_mask[8];
71
    uint16_t voice_setting;        /* Notw: Always little-endian */
72
    uint16_t conn_accept_tout;
73
    QEMUTimer *conn_accept_timer;
74

    
75
    struct HCIInfo info;
76
    struct bt_device_s device;
77
};
78

    
79
#define DEFAULT_RSSI_DBM        20
80

    
81
#define hci_from_info(ptr)        container_of((ptr), struct bt_hci_s, info)
82
#define hci_from_device(ptr)        container_of((ptr), struct bt_hci_s, device)
83

    
84
struct bt_hci_link_s {
85
    struct bt_link_s btlink;
86
    uint16_t handle;        /* Local */
87
};
88

    
89
/* LMP layer emulation */
90
#if 0
91
static void bt_submit_lmp(struct bt_device_s *bt, int length, uint8_t *data)
92
{
93
    int resp, resplen, error, op, tr;
94
    uint8_t respdata[17];
95

96
    if (length < 1)
97
        return;
98

99
    tr = *data & 1;
100
    op = *(data ++) >> 1;
101
    resp = LMP_ACCEPTED;
102
    resplen = 2;
103
    respdata[1] = op;
104
    error = 0;
105
    length --;
106

107
    if (op >= 0x7c) {        /* Extended opcode */
108
        op |= *(data ++) << 8;
109
        resp = LMP_ACCEPTED_EXT;
110
        resplen = 4;
111
        respdata[0] = op >> 8;
112
        respdata[1] = op & 0xff;
113
        length --;
114
    }
115

116
    switch (op) {
117
    case LMP_ACCEPTED:
118
        /* data[0]        Op code
119
         */
120
        if (length < 1) {
121
            error = HCI_UNSUPPORTED_LMP_PARAMETER_VALUE;
122
            goto not_accepted;
123
        }
124
        resp = 0;
125
        break;
126

127
    case LMP_ACCEPTED_EXT:
128
        /* data[0]        Escape op code
129
         * data[1]        Extended op code
130
         */
131
        if (length < 2) {
132
            error = HCI_UNSUPPORTED_LMP_PARAMETER_VALUE;
133
            goto not_accepted;
134
        }
135
        resp = 0;
136
        break;
137

138
    case LMP_NOT_ACCEPTED:
139
        /* data[0]        Op code
140
         * data[1]        Error code
141
         */
142
        if (length < 2) {
143
            error = HCI_UNSUPPORTED_LMP_PARAMETER_VALUE;
144
            goto not_accepted;
145
        }
146
        resp = 0;
147
        break;
148

149
    case LMP_NOT_ACCEPTED_EXT:
150
        /* data[0]        Op code
151
         * data[1]        Extended op code
152
         * data[2]        Error code
153
         */
154
        if (length < 3) {
155
            error = HCI_UNSUPPORTED_LMP_PARAMETER_VALUE;
156
            goto not_accepted;
157
        }
158
        resp = 0;
159
        break;
160

161
    case LMP_HOST_CONNECTION_REQ:
162
        break;
163

164
    case LMP_SETUP_COMPLETE:
165
        resp = LMP_SETUP_COMPLETE;
166
        resplen = 1;
167
        bt->setup = 1;
168
        break;
169

170
    case LMP_DETACH:
171
        /* data[0]        Error code
172
         */
173
        if (length < 1) {
174
            error = HCI_UNSUPPORTED_LMP_PARAMETER_VALUE;
175
            goto not_accepted;
176
        }
177
        bt->setup = 0;
178
        resp = 0;
179
        break;
180

181
    case LMP_SUPERVISION_TIMEOUT:
182
        /* data[0,1]        Supervision timeout
183
         */
184
        if (length < 2) {
185
            error = HCI_UNSUPPORTED_LMP_PARAMETER_VALUE;
186
            goto not_accepted;
187
        }
188
        resp = 0;
189
        break;
190

191
    case LMP_QUALITY_OF_SERVICE:
192
        resp = 0;
193
        /* Fall through */
194
    case LMP_QOS_REQ:
195
        /* data[0,1]        Poll interval
196
         * data[2]        N(BC)
197
         */
198
        if (length < 3) {
199
            error = HCI_UNSUPPORTED_LMP_PARAMETER_VALUE;
200
            goto not_accepted;
201
        }
202
        break;
203

204
    case LMP_MAX_SLOT:
205
        resp = 0;
206
        /* Fall through */
207
    case LMP_MAX_SLOT_REQ:
208
        /* data[0]        Max slots
209
         */
210
        if (length < 1) {
211
            error = HCI_UNSUPPORTED_LMP_PARAMETER_VALUE;
212
            goto not_accepted;
213
        }
214
        break;
215

216
    case LMP_AU_RAND:
217
    case LMP_IN_RAND:
218
    case LMP_COMB_KEY:
219
        /* data[0-15]        Random number
220
         */
221
        if (length < 16) {
222
            error = HCI_UNSUPPORTED_LMP_PARAMETER_VALUE;
223
            goto not_accepted;
224
        }
225
        if (op == LMP_AU_RAND) {
226
            if (bt->key_present) {
227
                resp = LMP_SRES;
228
                resplen = 5;
229
                /* XXX: [Part H] Section 6.1 on page 801 */
230
            } else {
231
                error = HCI_PIN_OR_KEY_MISSING;
232
                goto not_accepted;
233
            }
234
        } else if (op == LMP_IN_RAND) {
235
            error = HCI_PAIRING_NOT_ALLOWED;
236
            goto not_accepted;
237
        } else {
238
            /* XXX: [Part H] Section 3.2 on page 779 */
239
            resp = LMP_UNIT_KEY;
240
            resplen = 17;
241
            memcpy(respdata + 1, bt->key, 16);
242

243
            error = HCI_UNIT_LINK_KEY_USED;
244
            goto not_accepted;
245
        }
246
        break;
247

248
    case LMP_UNIT_KEY:
249
        /* data[0-15]        Key
250
         */
251
        if (length < 16) {
252
            error = HCI_UNSUPPORTED_LMP_PARAMETER_VALUE;
253
            goto not_accepted;
254
        }
255
        memcpy(bt->key, data, 16);
256
        bt->key_present = 1;
257
        break;
258

259
    case LMP_SRES:
260
        /* data[0-3]        Authentication response
261
         */
262
        if (length < 4) {
263
            error = HCI_UNSUPPORTED_LMP_PARAMETER_VALUE;
264
            goto not_accepted;
265
        }
266
        break;
267

268
    case LMP_CLKOFFSET_REQ:
269
        resp = LMP_CLKOFFSET_RES;
270
        resplen = 3;
271
        respdata[1] = 0x33;
272
        respdata[2] = 0x33;
273
        break;
274

275
    case LMP_CLKOFFSET_RES:
276
        /* data[0,1]        Clock offset
277
         * (Slave to master only)
278
         */
279
        if (length < 2) {
280
            error = HCI_UNSUPPORTED_LMP_PARAMETER_VALUE;
281
            goto not_accepted;
282
        }
283
        break;
284

285
    case LMP_VERSION_REQ:
286
    case LMP_VERSION_RES:
287
        /* data[0]        VersNr
288
         * data[1,2]        CompId
289
         * data[3,4]        SubVersNr
290
         */
291
        if (length < 5) {
292
            error = HCI_UNSUPPORTED_LMP_PARAMETER_VALUE;
293
            goto not_accepted;
294
        }
295
        if (op == LMP_VERSION_REQ) {
296
            resp = LMP_VERSION_RES;
297
            resplen = 6;
298
            respdata[1] = 0x20;
299
            respdata[2] = 0xff;
300
            respdata[3] = 0xff;
301
            respdata[4] = 0xff;
302
            respdata[5] = 0xff;
303
        } else
304
            resp = 0;
305
        break;
306

307
    case LMP_FEATURES_REQ:
308
    case LMP_FEATURES_RES:
309
        /* data[0-7]        Features
310
         */
311
        if (length < 8) {
312
            error = HCI_UNSUPPORTED_LMP_PARAMETER_VALUE;
313
            goto not_accepted;
314
        }
315
        if (op == LMP_FEATURES_REQ) {
316
            resp = LMP_FEATURES_RES;
317
            resplen = 9;
318
            respdata[1] = (bt->lmp_caps >> 0) & 0xff;
319
            respdata[2] = (bt->lmp_caps >> 8) & 0xff;
320
            respdata[3] = (bt->lmp_caps >> 16) & 0xff;
321
            respdata[4] = (bt->lmp_caps >> 24) & 0xff;
322
            respdata[5] = (bt->lmp_caps >> 32) & 0xff;
323
            respdata[6] = (bt->lmp_caps >> 40) & 0xff;
324
            respdata[7] = (bt->lmp_caps >> 48) & 0xff;
325
            respdata[8] = (bt->lmp_caps >> 56) & 0xff;
326
        } else
327
            resp = 0;
328
        break;
329

330
    case LMP_NAME_REQ:
331
        /* data[0]        Name offset
332
         */
333
        if (length < 1) {
334
            error = HCI_UNSUPPORTED_LMP_PARAMETER_VALUE;
335
            goto not_accepted;
336
        }
337
        resp = LMP_NAME_RES;
338
        resplen = 17;
339
        respdata[1] = data[0];
340
        respdata[2] = strlen(bt->lmp_name);
341
        memset(respdata + 3, 0x00, 14);
342
        if (respdata[2] > respdata[1])
343
            memcpy(respdata + 3, bt->lmp_name + respdata[1],
344
                            respdata[2] - respdata[1]);
345
        break;
346

347
    case LMP_NAME_RES:
348
        /* data[0]        Name offset
349
         * data[1]        Name length
350
         * data[2-15]        Name fragment
351
         */
352
        if (length < 16) {
353
            error = HCI_UNSUPPORTED_LMP_PARAMETER_VALUE;
354
            goto not_accepted;
355
        }
356
        resp = 0;
357
        break;
358

359
    default:
360
        error = HCI_UNKNOWN_LMP_PDU;
361
        /* Fall through */
362
    not_accepted:
363
        if (op >> 8) {
364
            resp = LMP_NOT_ACCEPTED_EXT;
365
            resplen = 5;
366
            respdata[0] = op >> 8;
367
            respdata[1] = op & 0xff;
368
            respdata[2] = error;
369
        } else {
370
            resp = LMP_NOT_ACCEPTED;
371
            resplen = 3;
372
            respdata[0] = op & 0xff;
373
            respdata[1] = error;
374
        }
375
    }
376

377
    if (resp == 0)
378
        return;
379

380
    if (resp >> 8) {
381
        respdata[0] = resp >> 8;
382
        respdata[1] = resp & 0xff;
383
    } else
384
        respdata[0] = resp & 0xff;
385

386
    respdata[0] <<= 1;
387
    respdata[0] |= tr;
388
}
389

390
static void bt_submit_raw_acl(struct bt_piconet_s *net, int length, uint8_t *data)
391
{
392
    struct bt_device_s *slave;
393
    if (length < 1)
394
        return;
395

396
    slave = 0;
397
#if 0
398
    slave = net->slave;
399
#endif
400

    
401
    switch (data[0] & 3) {
402
    case LLID_ACLC:
403
        bt_submit_lmp(slave, length - 1, data + 1);
404
        break;
405
    case LLID_ACLU_START:
406
#if 0
407
        bt_sumbit_l2cap(slave, length - 1, data + 1, (data[0] >> 2) & 1);
408
        breka;
409
#endif
410
    default:
411
    case LLID_ACLU_CONT:
412
        break;
413
    }
414
}
415
#endif
416

    
417
/* HCI layer emulation */
418

    
419
/* Note: we could ignore endiannes because unswapped handles will still
420
 * be valid as connection identifiers for the guest - they don't have to
421
 * be continuously allocated.  We do it though, to preserve similar
422
 * behaviour between hosts.  Some things, like the BD_ADDR cannot be
423
 * preserved though (for example if a real hci is used).  */
424
#ifdef WORDS_BIGENDIAN
425
# define HNDL(raw)        bswap16(raw)
426
#else
427
# define HNDL(raw)        (raw)
428
#endif
429

    
430
static const uint8_t bt_event_reserved_mask[8] = {
431
    0xff, 0x9f, 0xfb, 0xff, 0x07, 0x18, 0x00, 0x00,
432
};
433

    
434
static inline uint8_t *bt_hci_event_start(struct bt_hci_s *hci,
435
                int evt, int len)
436
{
437
    uint8_t *packet, mask;
438
    int mask_byte;
439

    
440
    if (len > 255) {
441
        fprintf(stderr, "%s: HCI event params too long (%ib)\n",
442
                        __FUNCTION__, len);
443
        exit(-1);
444
    }
445

    
446
    mask_byte = (evt - 1) >> 3;
447
    mask = 1 << ((evt - 1) & 3);
448
    if (mask & bt_event_reserved_mask[mask_byte] & ~hci->event_mask[mask_byte])
449
        return NULL;
450

    
451
    packet = hci->evt_packet(hci->opaque);
452
    packet[0] = evt;
453
    packet[1] = len;
454

    
455
    return &packet[2];
456
}
457

    
458
static inline void bt_hci_event(struct bt_hci_s *hci, int evt,
459
                void *params, int len)
460
{
461
    uint8_t *packet = bt_hci_event_start(hci, evt, len);
462

    
463
    if (!packet)
464
        return;
465

    
466
    if (len)
467
        memcpy(packet, params, len);
468

    
469
    hci->evt_submit(hci->opaque, len + 2);
470
}
471

    
472
static inline void bt_hci_event_status(struct bt_hci_s *hci, int status)
473
{
474
    evt_cmd_status params = {
475
        .status        = status,
476
        .ncmd        = 1,
477
        .opcode        = hci->last_cmd,
478
    };
479

    
480
    bt_hci_event(hci, EVT_CMD_STATUS, &params, EVT_CMD_STATUS_SIZE);
481
}
482

    
483
static inline void bt_hci_event_complete(struct bt_hci_s *hci,
484
                void *ret, int len)
485
{
486
    uint8_t *packet = bt_hci_event_start(hci, EVT_CMD_COMPLETE,
487
                    len + EVT_CMD_COMPLETE_SIZE);
488
    evt_cmd_complete *params = (evt_cmd_complete *) packet;
489

    
490
    if (!packet)
491
        return;
492

    
493
    params->ncmd        = 1;
494
    params->opcode        = hci->last_cmd;
495
    if (len)
496
        memcpy(&packet[EVT_CMD_COMPLETE_SIZE], ret, len);
497

    
498
    hci->evt_submit(hci->opaque, len + EVT_CMD_COMPLETE_SIZE + 2);
499
}
500

    
501
static void bt_hci_inquiry_done(void *opaque)
502
{
503
    struct bt_hci_s *hci = (struct bt_hci_s *) opaque;
504
    uint8_t status = HCI_SUCCESS;
505

    
506
    if (!hci->lm.periodic)
507
        hci->lm.inquire = 0;
508

    
509
    /* The specification is inconsistent about this one.  Page 565 reads
510
     * "The event parameters of Inquiry Complete event will have a summary
511
     * of the result from the Inquiry process, which reports the number of
512
     * nearby Bluetooth devices that responded [so hci->responses].", but
513
     * Event Parameters (see page 729) has only Status.  */
514
    bt_hci_event(hci, EVT_INQUIRY_COMPLETE, &status, 1);
515
}
516

    
517
static void bt_hci_inquiry_result_standard(struct bt_hci_s *hci,
518
                struct bt_device_s *slave)
519
{
520
    inquiry_info params = {
521
        .num_responses                = 1,
522
        .bdaddr                        = BAINIT(&slave->bd_addr),
523
        .pscan_rep_mode                = 0x00,        /* R0 */
524
        .pscan_period_mode        = 0x00,        /* P0 - deprecated */
525
        .pscan_mode                = 0x00,        /* Standard scan - deprecated */
526
        .dev_class[0]                = slave->class[0],
527
        .dev_class[1]                = slave->class[1],
528
        .dev_class[2]                = slave->class[2],
529
        /* TODO: return the clkoff *differenece* */
530
        .clock_offset                = slave->clkoff,        /* Note: no swapping */
531
    };
532

    
533
    bt_hci_event(hci, EVT_INQUIRY_RESULT, &params, INQUIRY_INFO_SIZE);
534
}
535

    
536
static void bt_hci_inquiry_result_with_rssi(struct bt_hci_s *hci,
537
                struct bt_device_s *slave)
538
{
539
    inquiry_info_with_rssi params = {
540
        .num_responses                = 1,
541
        .bdaddr                        = BAINIT(&slave->bd_addr),
542
        .pscan_rep_mode                = 0x00,        /* R0 */
543
        .pscan_period_mode        = 0x00,        /* P0 - deprecated */
544
        .dev_class[0]                = slave->class[0],
545
        .dev_class[1]                = slave->class[1],
546
        .dev_class[2]                = slave->class[2],
547
        /* TODO: return the clkoff *differenece* */
548
        .clock_offset                = slave->clkoff,        /* Note: no swapping */
549
        .rssi                        = DEFAULT_RSSI_DBM,
550
    };
551

    
552
    bt_hci_event(hci, EVT_INQUIRY_RESULT_WITH_RSSI,
553
                    &params, INQUIRY_INFO_WITH_RSSI_SIZE);
554
}
555

    
556
static void bt_hci_inquiry_result(struct bt_hci_s *hci,
557
                struct bt_device_s *slave)
558
{
559
    if (!slave->inquiry_scan || !hci->lm.responses_left)
560
        return;
561

    
562
    hci->lm.responses_left --;
563
    hci->lm.responses ++;
564

    
565
    switch (hci->lm.inquiry_mode) {
566
    case 0x00:
567
        bt_hci_inquiry_result_standard(hci, slave);
568
        return;
569
    case 0x01:
570
        bt_hci_inquiry_result_with_rssi(hci, slave);
571
        return;
572
    default:
573
        fprintf(stderr, "%s: bad inquiry mode %02x\n", __FUNCTION__,
574
                        hci->lm.inquiry_mode);
575
        exit(-1);
576
    }
577
}
578

    
579
static void bt_hci_mod_timer_1280ms(QEMUTimer *timer, int period)
580
{
581
    qemu_mod_timer(timer, qemu_get_clock(vm_clock) +
582
                    muldiv64(period << 7, ticks_per_sec, 100));
583
}
584

    
585
static void bt_hci_inquiry_start(struct bt_hci_s *hci, int length)
586
{
587
    struct bt_device_s *slave;
588

    
589
    hci->lm.inquiry_length = length;
590
    for (slave = hci->device.net->slave; slave; slave = slave->next)
591
        /* Don't uncover ourselves.  */
592
        if (slave != &hci->device)
593
            bt_hci_inquiry_result(hci, slave);
594

    
595
    /* TODO: register for a callback on a new device's addition to the
596
     * scatternet so that if it's added before inquiry_length expires,
597
     * an Inquiry Result is generated immediately.  Alternatively re-loop
598
     * through the devices on the inquiry_length expiration and report
599
     * devices not seen before.  */
600
    if (hci->lm.responses_left)
601
        bt_hci_mod_timer_1280ms(hci->lm.inquiry_done, hci->lm.inquiry_length);
602
    else
603
        bt_hci_inquiry_done(hci);
604

    
605
    if (hci->lm.periodic)
606
        bt_hci_mod_timer_1280ms(hci->lm.inquiry_next, hci->lm.inquiry_period);
607
}
608

    
609
static void bt_hci_inquiry_next(void *opaque)
610
{
611
    struct bt_hci_s *hci = (struct bt_hci_s *) opaque;
612

    
613
    hci->lm.responses_left += hci->lm.responses;
614
    hci->lm.responses = 0;
615
    bt_hci_inquiry_start(hci,  hci->lm.inquiry_length);
616
}
617

    
618
static inline int bt_hci_handle_bad(struct bt_hci_s *hci, uint16_t handle)
619
{
620
    return !(handle & HCI_HANDLE_OFFSET) ||
621
            handle >= (HCI_HANDLE_OFFSET | HCI_HANDLES_MAX) ||
622
            !hci->lm.handle[handle & ~HCI_HANDLE_OFFSET].link;
623
}
624

    
625
static inline int bt_hci_role_master(struct bt_hci_s *hci, uint16_t handle)
626
{
627
    return !!(hci->lm.role_bmp & (1 << (handle & ~HCI_HANDLE_OFFSET)));
628
}
629

    
630
static inline struct bt_device_s *bt_hci_remote_dev(struct bt_hci_s *hci,
631
                uint16_t handle)
632
{
633
    struct bt_link_s *link = hci->lm.handle[handle & ~HCI_HANDLE_OFFSET].link;
634

    
635
    return bt_hci_role_master(hci, handle) ? link->slave : link->host;
636
}
637

    
638
static void bt_hci_mode_tick(void *opaque);
639
static void bt_hci_lmp_link_establish(struct bt_hci_s *hci,
640
                struct bt_link_s *link, int master)
641
{
642
    hci->lm.handle[hci->lm.last_handle].link = link;
643

    
644
    if (master) {
645
        /* We are the master side of an ACL link */
646
        hci->lm.role_bmp |= 1 << hci->lm.last_handle;
647

    
648
        hci->lm.handle[hci->lm.last_handle].lmp_acl_data =
649
                link->slave->lmp_acl_data;
650
    } else {
651
        /* We are the slave side of an ACL link */
652
        hci->lm.role_bmp &= ~(1 << hci->lm.last_handle);
653

    
654
        hci->lm.handle[hci->lm.last_handle].lmp_acl_data =
655
                link->host->lmp_acl_resp;
656
    }
657

    
658
    /* Mode */
659
    if (master) {
660
        link->acl_mode = acl_active;
661
        hci->lm.handle[hci->lm.last_handle].acl_mode_timer =
662
                qemu_new_timer(vm_clock, bt_hci_mode_tick, link);
663
    }
664
}
665

    
666
static void bt_hci_lmp_link_teardown(struct bt_hci_s *hci, uint16_t handle)
667
{
668
    handle &= ~HCI_HANDLE_OFFSET;
669
    hci->lm.handle[handle].link = NULL;
670

    
671
    if (bt_hci_role_master(hci, handle)) {
672
        qemu_del_timer(hci->lm.handle[handle].acl_mode_timer);
673
        qemu_free_timer(hci->lm.handle[handle].acl_mode_timer);
674
    }
675
}
676

    
677
static int bt_hci_connect(struct bt_hci_s *hci, bdaddr_t *bdaddr)
678
{
679
    struct bt_device_s *slave;
680
    struct bt_link_s link;
681

    
682
    for (slave = hci->device.net->slave; slave; slave = slave->next)
683
        if (slave->page_scan && !bacmp(&slave->bd_addr, bdaddr))
684
            break;
685
    if (!slave || slave == &hci->device)
686
        return -ENODEV;
687

    
688
    bacpy(&hci->lm.awaiting_bdaddr[hci->lm.connecting ++], &slave->bd_addr);
689

    
690
    link.slave = slave;
691
    link.host = &hci->device;
692
    link.slave->lmp_connection_request(&link);        /* Always last */
693

    
694
    return 0;
695
}
696

    
697
static void bt_hci_connection_reject(struct bt_hci_s *hci,
698
                struct bt_device_s *host, uint8_t because)
699
{
700
    struct bt_link_s link = {
701
        .slave        = &hci->device,
702
        .host        = host,
703
        /* Rest uninitialised */
704
    };
705

    
706
    host->reject_reason = because;
707
    host->lmp_connection_complete(&link);
708
}
709

    
710
static void bt_hci_connection_reject_event(struct bt_hci_s *hci,
711
                bdaddr_t *bdaddr)
712
{
713
    evt_conn_complete params;
714

    
715
    params.status        = HCI_NO_CONNECTION;
716
    params.handle        = 0;
717
    bacpy(&params.bdaddr, bdaddr);
718
    params.link_type        = ACL_LINK;
719
    params.encr_mode        = 0x00;                /* Encryption not required */
720
    bt_hci_event(hci, EVT_CONN_COMPLETE, &params, EVT_CONN_COMPLETE_SIZE);
721
}
722

    
723
static void bt_hci_connection_accept(struct bt_hci_s *hci,
724
                struct bt_device_s *host)
725
{
726
    struct bt_hci_link_s *link = qemu_mallocz(sizeof(struct bt_hci_link_s));
727
    evt_conn_complete params;
728
    uint16_t handle;
729
    uint8_t status = HCI_SUCCESS;
730
    int tries = HCI_HANDLES_MAX;
731

    
732
    /* Make a connection handle */
733
    do {
734
        while (hci->lm.handle[++ hci->lm.last_handle].link && -- tries)
735
            hci->lm.last_handle &= HCI_HANDLES_MAX - 1;
736
        handle = hci->lm.last_handle | HCI_HANDLE_OFFSET;
737
    } while ((handle == hci->asb_handle || handle == hci->psb_handle) &&
738
            tries);
739

    
740
    if (!tries) {
741
        qemu_free(link);
742
        bt_hci_connection_reject(hci, host, HCI_REJECTED_LIMITED_RESOURCES);
743
        status = HCI_NO_CONNECTION;
744
        goto complete;
745
    }
746

    
747
    link->btlink.slave        = &hci->device;
748
    link->btlink.host        = host;
749
    link->handle = handle;
750

    
751
    /* Link established */
752
    bt_hci_lmp_link_establish(hci, &link->btlink, 0);
753

    
754
complete:
755
    params.status        = status;
756
    params.handle        = HNDL(handle);
757
    bacpy(&params.bdaddr, &host->bd_addr);
758
    params.link_type        = ACL_LINK;
759
    params.encr_mode        = 0x00;                /* Encryption not required */
760
    bt_hci_event(hci, EVT_CONN_COMPLETE, &params, EVT_CONN_COMPLETE_SIZE);
761

    
762
    /* Neets to be done at the very end because it can trigger a (nested)
763
     * disconnected, in case the other and had cancelled the request
764
     * locally.  */
765
    if (status == HCI_SUCCESS) {
766
        host->reject_reason = 0;
767
        host->lmp_connection_complete(&link->btlink);
768
    }
769
}
770

    
771
static void bt_hci_lmp_connection_request(struct bt_link_s *link)
772
{
773
    struct bt_hci_s *hci = hci_from_device(link->slave);
774
    evt_conn_request params;
775

    
776
    if (hci->conn_req_host) {
777
        bt_hci_connection_reject(hci, link->host,
778
                                 HCI_REJECTED_LIMITED_RESOURCES);
779
        return;
780
    }
781
    hci->conn_req_host = link->host;
782
    /* TODO: if masked and auto-accept, then auto-accept,
783
     * if masked and not auto-accept, then auto-reject */
784
    /* TODO: kick the hci->conn_accept_timer, timeout after
785
     * hci->conn_accept_tout * 0.625 msec */
786

    
787
    bacpy(&params.bdaddr, &link->host->bd_addr);
788
    memcpy(&params.dev_class, &link->host->class, sizeof(params.dev_class));
789
    params.link_type        = ACL_LINK;
790
    bt_hci_event(hci, EVT_CONN_REQUEST, &params, EVT_CONN_REQUEST_SIZE);
791
    return;
792
}
793

    
794
static void bt_hci_conn_accept_timeout(void *opaque)
795
{
796
    struct bt_hci_s *hci = (struct bt_hci_s *) opaque;
797

    
798
    if (!hci->conn_req_host)
799
        /* Already accepted or rejected.  If the other end cancelled the
800
         * connection request then we still have to reject or accept it
801
         * and then we'll get a disconnect.  */
802
        return;
803

    
804
    /* TODO */
805
}
806

    
807
/* Remove from the list of devices which we wanted to connect to and
808
 * are awaiting a response from.  If the callback sees a response from
809
 * a device which is not on the list it will assume it's a connection
810
 * that's been cancelled by the host in the meantime and immediately
811
 * try to detach the link and send a Connection Complete.  */
812
static int bt_hci_lmp_connection_ready(struct bt_hci_s *hci,
813
                bdaddr_t *bdaddr)
814
{
815
    int i;
816

    
817
    for (i = 0; i < hci->lm.connecting; i ++)
818
        if (!bacmp(&hci->lm.awaiting_bdaddr[i], bdaddr)) {
819
            if (i < -- hci->lm.connecting)
820
                bacpy(&hci->lm.awaiting_bdaddr[i],
821
                                &hci->lm.awaiting_bdaddr[hci->lm.connecting]);
822
            return 0;
823
        }
824

    
825
    return 1;
826
}
827

    
828
static void bt_hci_lmp_connection_complete(struct bt_link_s *link)
829
{
830
    struct bt_hci_s *hci = hci_from_device(link->host);
831
    evt_conn_complete params;
832
    uint16_t handle;
833
    uint8_t status = HCI_SUCCESS;
834
    int tries = HCI_HANDLES_MAX;
835

    
836
    if (bt_hci_lmp_connection_ready(hci, &link->slave->bd_addr)) {
837
        if (!hci->device.reject_reason)
838
            link->slave->lmp_disconnect_slave(link);
839
        handle = 0;
840
        status = HCI_NO_CONNECTION;
841
        goto complete;
842
    }
843

    
844
    if (hci->device.reject_reason) {
845
        handle = 0;
846
        status = hci->device.reject_reason;
847
        goto complete;
848
    }
849

    
850
    /* Make a connection handle */
851
    do {
852
        while (hci->lm.handle[++ hci->lm.last_handle].link && -- tries)
853
            hci->lm.last_handle &= HCI_HANDLES_MAX - 1;
854
        handle = hci->lm.last_handle | HCI_HANDLE_OFFSET;
855
    } while ((handle == hci->asb_handle || handle == hci->psb_handle) &&
856
            tries);
857

    
858
    if (!tries) {
859
        link->slave->lmp_disconnect_slave(link);
860
        status = HCI_NO_CONNECTION;
861
        goto complete;
862
    }
863

    
864
    /* Link established */
865
    link->handle = handle;
866
    bt_hci_lmp_link_establish(hci, link, 1);
867

    
868
complete:
869
    params.status        = status;
870
    params.handle        = HNDL(handle);
871
    params.link_type        = ACL_LINK;
872
    bacpy(&params.bdaddr, &link->slave->bd_addr);
873
    params.encr_mode        = 0x00;                /* Encryption not required */
874
    bt_hci_event(hci, EVT_CONN_COMPLETE, &params, EVT_CONN_COMPLETE_SIZE);
875
}
876

    
877
static void bt_hci_disconnect(struct bt_hci_s *hci,
878
                uint16_t handle, int reason)
879
{
880
    struct bt_link_s *btlink =
881
            hci->lm.handle[handle & ~HCI_HANDLE_OFFSET].link;
882
    struct bt_hci_link_s *link;
883
    evt_disconn_complete params;
884

    
885
    if (bt_hci_role_master(hci, handle)) {
886
        btlink->slave->reject_reason = reason;
887
        btlink->slave->lmp_disconnect_slave(btlink);
888
        /* The link pointer is invalid from now on */
889

    
890
        goto complete;
891
    }
892

    
893
    btlink->host->reject_reason = reason;
894
    btlink->host->lmp_disconnect_master(btlink);
895

    
896
    /* We are the slave, we get to clean this burden */
897
    link = (struct bt_hci_link_s *) btlink;
898
    qemu_free(link);
899

    
900
complete:
901
    bt_hci_lmp_link_teardown(hci, handle);
902

    
903
    params.status        = HCI_SUCCESS;
904
    params.handle        = HNDL(handle);
905
    params.reason        = HCI_CONNECTION_TERMINATED;
906
    bt_hci_event(hci, EVT_DISCONN_COMPLETE,
907
                    &params, EVT_DISCONN_COMPLETE_SIZE);
908
}
909

    
910
/* TODO: use only one function */
911
static void bt_hci_lmp_disconnect_host(struct bt_link_s *link)
912
{
913
    struct bt_hci_s *hci = hci_from_device(link->host);
914
    uint16_t handle = link->handle;
915
    evt_disconn_complete params;
916

    
917
    bt_hci_lmp_link_teardown(hci, handle);
918

    
919
    params.status        = HCI_SUCCESS;
920
    params.handle        = HNDL(handle);
921
    params.reason        = hci->device.reject_reason;
922
    bt_hci_event(hci, EVT_DISCONN_COMPLETE,
923
                    &params, EVT_DISCONN_COMPLETE_SIZE);
924
}
925

    
926
static void bt_hci_lmp_disconnect_slave(struct bt_link_s *btlink)
927
{
928
    struct bt_hci_link_s *link = (struct bt_hci_link_s *) btlink;
929
    struct bt_hci_s *hci = hci_from_device(btlink->slave);
930
    uint16_t handle = link->handle;
931
    evt_disconn_complete params;
932

    
933
    qemu_free(link);
934

    
935
    bt_hci_lmp_link_teardown(hci, handle);
936

    
937
    params.status        = HCI_SUCCESS;
938
    params.handle        = HNDL(handle);
939
    params.reason        = hci->device.reject_reason;
940
    bt_hci_event(hci, EVT_DISCONN_COMPLETE,
941
                    &params, EVT_DISCONN_COMPLETE_SIZE);
942
}
943

    
944
static int bt_hci_name_req(struct bt_hci_s *hci, bdaddr_t *bdaddr)
945
{
946
    struct bt_device_s *slave;
947
    evt_remote_name_req_complete params;
948
    int len;
949

    
950
    for (slave = hci->device.net->slave; slave; slave = slave->next)
951
        if (slave->page_scan && !bacmp(&slave->bd_addr, bdaddr))
952
            break;
953
    if (!slave)
954
        return -ENODEV;
955

    
956
    bt_hci_event_status(hci, HCI_SUCCESS);
957

    
958
    params.status       = HCI_SUCCESS;
959
    bacpy(&params.bdaddr, &slave->bd_addr);
960
    len = snprintf(params.name, sizeof(params.name),
961
                    "%s", slave->lmp_name ?: "");
962
    memset(params.name + len, 0, sizeof(params.name) - len);
963
    bt_hci_event(hci, EVT_REMOTE_NAME_REQ_COMPLETE,
964
                    &params, EVT_REMOTE_NAME_REQ_COMPLETE_SIZE);
965

    
966
    return 0;
967
}
968

    
969
static int bt_hci_features_req(struct bt_hci_s *hci, uint16_t handle)
970
{
971
    struct bt_device_s *slave;
972
    evt_read_remote_features_complete params;
973

    
974
    if (bt_hci_handle_bad(hci, handle))
975
        return -ENODEV;
976

    
977
    slave = bt_hci_remote_dev(hci, handle);
978

    
979
    bt_hci_event_status(hci, HCI_SUCCESS);
980

    
981
    params.status        = HCI_SUCCESS;
982
    params.handle        = HNDL(handle);
983
    params.features[0]        = (slave->lmp_caps >>  0) & 0xff;
984
    params.features[1]        = (slave->lmp_caps >>  8) & 0xff;
985
    params.features[2]        = (slave->lmp_caps >> 16) & 0xff;
986
    params.features[3]        = (slave->lmp_caps >> 24) & 0xff;
987
    params.features[4]        = (slave->lmp_caps >> 32) & 0xff;
988
    params.features[5]        = (slave->lmp_caps >> 40) & 0xff;
989
    params.features[6]        = (slave->lmp_caps >> 48) & 0xff;
990
    params.features[7]        = (slave->lmp_caps >> 56) & 0xff;
991
    bt_hci_event(hci, EVT_READ_REMOTE_FEATURES_COMPLETE,
992
                    &params, EVT_READ_REMOTE_FEATURES_COMPLETE_SIZE);
993

    
994
    return 0;
995
}
996

    
997
static int bt_hci_version_req(struct bt_hci_s *hci, uint16_t handle)
998
{
999
    struct bt_device_s *slave;
1000
    evt_read_remote_version_complete params;
1001

    
1002
    if (bt_hci_handle_bad(hci, handle))
1003
        return -ENODEV;
1004

    
1005
    slave = bt_hci_remote_dev(hci, handle);
1006

    
1007
    bt_hci_event_status(hci, HCI_SUCCESS);
1008

    
1009
    params.status        = HCI_SUCCESS;
1010
    params.handle        = HNDL(handle);
1011
    params.lmp_ver        = 0x03;
1012
    params.manufacturer        = cpu_to_le16(0xa000);
1013
    params.lmp_subver        = cpu_to_le16(0xa607);
1014
    bt_hci_event(hci, EVT_READ_REMOTE_VERSION_COMPLETE,
1015
                    &params, EVT_READ_REMOTE_VERSION_COMPLETE_SIZE);
1016

    
1017
    return 0;
1018
}
1019

    
1020
static int bt_hci_clkoffset_req(struct bt_hci_s *hci, uint16_t handle)
1021
{
1022
    struct bt_device_s *slave;
1023
    evt_read_clock_offset_complete params;
1024

    
1025
    if (bt_hci_handle_bad(hci, handle))
1026
        return -ENODEV;
1027

    
1028
    slave = bt_hci_remote_dev(hci, handle);
1029

    
1030
    bt_hci_event_status(hci, HCI_SUCCESS);
1031

    
1032
    params.status        = HCI_SUCCESS;
1033
    params.handle        = HNDL(handle);
1034
    /* TODO: return the clkoff *differenece* */
1035
    params.clock_offset        = slave->clkoff;        /* Note: no swapping */
1036
    bt_hci_event(hci, EVT_READ_CLOCK_OFFSET_COMPLETE,
1037
                    &params, EVT_READ_CLOCK_OFFSET_COMPLETE_SIZE);
1038

    
1039
    return 0;
1040
}
1041

    
1042
static void bt_hci_event_mode(struct bt_hci_s *hci, struct bt_link_s *link,
1043
                uint16_t handle)
1044
{
1045
    evt_mode_change params = {
1046
        .status                = HCI_SUCCESS,
1047
        .handle                = HNDL(handle),
1048
        .mode                = link->acl_mode,
1049
        .interval        = cpu_to_le16(link->acl_interval),
1050
    };
1051

    
1052
    bt_hci_event(hci, EVT_MODE_CHANGE, &params, EVT_MODE_CHANGE_SIZE);
1053
}
1054

    
1055
static void bt_hci_lmp_mode_change_master(struct bt_hci_s *hci,
1056
                struct bt_link_s *link, int mode, uint16_t interval)
1057
{
1058
    link->acl_mode = mode;
1059
    link->acl_interval = interval;
1060

    
1061
    bt_hci_event_mode(hci, link, link->handle);
1062

    
1063
    link->slave->lmp_mode_change(link);
1064
}
1065

    
1066
static void bt_hci_lmp_mode_change_slave(struct bt_link_s *btlink)
1067
{
1068
    struct bt_hci_link_s *link = (struct bt_hci_link_s *) btlink;
1069
    struct bt_hci_s *hci = hci_from_device(btlink->slave);
1070

    
1071
    bt_hci_event_mode(hci, btlink, link->handle);
1072
}
1073

    
1074
static int bt_hci_mode_change(struct bt_hci_s *hci, uint16_t handle,
1075
                int interval, int mode)
1076
{
1077
    struct bt_hci_master_link_s *link;
1078

    
1079
    if (bt_hci_handle_bad(hci, handle) || !bt_hci_role_master(hci, handle))
1080
        return -ENODEV;
1081

    
1082
    link = &hci->lm.handle[handle & ~HCI_HANDLE_OFFSET];
1083
    if (link->link->acl_mode != acl_active) {
1084
        bt_hci_event_status(hci, HCI_COMMAND_DISALLOWED);
1085
        return 0;
1086
    }
1087

    
1088
    bt_hci_event_status(hci, HCI_SUCCESS);
1089

    
1090
    qemu_mod_timer(link->acl_mode_timer, qemu_get_clock(vm_clock) +
1091
                            muldiv64(interval * 625, ticks_per_sec, 1000000));
1092
    bt_hci_lmp_mode_change_master(hci, link->link, mode, interval);
1093

    
1094
    return 0;
1095
}
1096

    
1097
static int bt_hci_mode_cancel(struct bt_hci_s *hci, uint16_t handle, int mode)
1098
{
1099
    struct bt_hci_master_link_s *link;
1100

    
1101
    if (bt_hci_handle_bad(hci, handle) || !bt_hci_role_master(hci, handle))
1102
        return -ENODEV;
1103

    
1104
    link = &hci->lm.handle[handle & ~HCI_HANDLE_OFFSET];
1105
    if (link->link->acl_mode != mode) {
1106
        bt_hci_event_status(hci, HCI_COMMAND_DISALLOWED);
1107

    
1108
        return 0;
1109
    }
1110

    
1111
    bt_hci_event_status(hci, HCI_SUCCESS);
1112

    
1113
    qemu_del_timer(link->acl_mode_timer);
1114
    bt_hci_lmp_mode_change_master(hci, link->link, acl_active, 0);
1115

    
1116
    return 0;
1117
}
1118

    
1119
static void bt_hci_mode_tick(void *opaque)
1120
{
1121
    struct bt_link_s *link = opaque;
1122
    struct bt_hci_s *hci = hci_from_device(link->host);
1123

    
1124
    bt_hci_lmp_mode_change_master(hci, link, acl_active, 0);
1125
}
1126

    
1127
static void bt_hci_reset(struct bt_hci_s *hci)
1128
{
1129
    hci->acl_len = 0;
1130
    hci->last_cmd = 0;
1131
    hci->lm.connecting = 0;
1132

    
1133
    hci->event_mask[0] = 0xff;
1134
    hci->event_mask[1] = 0xff;
1135
    hci->event_mask[2] = 0xff;
1136
    hci->event_mask[3] = 0xff;
1137
    hci->event_mask[4] = 0xff;
1138
    hci->event_mask[5] = 0x1f;
1139
    hci->event_mask[6] = 0x00;
1140
    hci->event_mask[7] = 0x00;
1141
    hci->device.inquiry_scan = 0;
1142
    hci->device.page_scan = 0;
1143
    if (hci->device.lmp_name)
1144
        qemu_free((void *) hci->device.lmp_name);
1145
    hci->device.lmp_name = NULL;
1146
    hci->device.class[0] = 0x00;
1147
    hci->device.class[1] = 0x00;
1148
    hci->device.class[2] = 0x00;
1149
    hci->voice_setting = 0x0000;
1150
    hci->conn_accept_tout = 0x1f40;
1151
    hci->lm.inquiry_mode = 0x00;
1152

    
1153
    hci->psb_handle = 0x000;
1154
    hci->asb_handle = 0x000;
1155

    
1156
    /* XXX: qemu_del_timer(sl->acl_mode_timer); for all links */
1157
    qemu_del_timer(hci->lm.inquiry_done);
1158
    qemu_del_timer(hci->lm.inquiry_next);
1159
    qemu_del_timer(hci->conn_accept_timer);
1160
}
1161

    
1162
static void bt_hci_read_local_version_rp(struct bt_hci_s *hci)
1163
{
1164
    read_local_version_rp lv = {
1165
        .status                = HCI_SUCCESS,
1166
        .hci_ver        = 0x03,
1167
        .hci_rev        = cpu_to_le16(0xa607),
1168
        .lmp_ver        = 0x03,
1169
        .manufacturer        = cpu_to_le16(0xa000),
1170
        .lmp_subver        = cpu_to_le16(0xa607),
1171
    };
1172

    
1173
    bt_hci_event_complete(hci, &lv, READ_LOCAL_VERSION_RP_SIZE);
1174
}
1175

    
1176
static void bt_hci_read_local_commands_rp(struct bt_hci_s *hci)
1177
{
1178
    read_local_commands_rp lc = {
1179
        .status                = HCI_SUCCESS,
1180
        .commands        = {
1181
            /* Keep updated! */
1182
            /* Also, keep in sync with hci->device.lmp_caps in bt_new_hci */
1183
            0xbf, 0x80, 0xf9, 0x03, 0xb2, 0xc0, 0x03, 0xc3,
1184
            0x00, 0x0f, 0x80, 0x00, 0xc0, 0x00, 0xe8, 0x13,
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
            0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
1190
            0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
1191
        },
1192
    };
1193

    
1194
    bt_hci_event_complete(hci, &lc, READ_LOCAL_COMMANDS_RP_SIZE);
1195
}
1196

    
1197
static void bt_hci_read_local_features_rp(struct bt_hci_s *hci)
1198
{
1199
    read_local_features_rp lf = {
1200
        .status                = HCI_SUCCESS,
1201
        .features        = {
1202
            (hci->device.lmp_caps >>  0) & 0xff,
1203
            (hci->device.lmp_caps >>  8) & 0xff,
1204
            (hci->device.lmp_caps >> 16) & 0xff,
1205
            (hci->device.lmp_caps >> 24) & 0xff,
1206
            (hci->device.lmp_caps >> 32) & 0xff,
1207
            (hci->device.lmp_caps >> 40) & 0xff,
1208
            (hci->device.lmp_caps >> 48) & 0xff,
1209
            (hci->device.lmp_caps >> 56) & 0xff,
1210
        },
1211
    };
1212

    
1213
    bt_hci_event_complete(hci, &lf, READ_LOCAL_FEATURES_RP_SIZE);
1214
}
1215

    
1216
static void bt_hci_read_local_ext_features_rp(struct bt_hci_s *hci, int page)
1217
{
1218
    read_local_ext_features_rp lef = {
1219
        .status                = HCI_SUCCESS,
1220
        .page_num        = page,
1221
        .max_page_num        = 0x00,
1222
        .features        = {
1223
            /* Keep updated! */
1224
            0x5f, 0x35, 0x85, 0x7e, 0x9b, 0x19, 0x00, 0x80,
1225
        },
1226
    };
1227
    if (page)
1228
        memset(lef.features, 0, sizeof(lef.features));
1229

    
1230
    bt_hci_event_complete(hci, &lef, READ_LOCAL_EXT_FEATURES_RP_SIZE);
1231
}
1232

    
1233
static void bt_hci_read_buffer_size_rp(struct bt_hci_s *hci)
1234
{
1235
    read_buffer_size_rp bs = {
1236
        /* This can be made configurable, for one standard USB dongle HCI
1237
         * the four values are cpu_to_le16(0x0180), 0x40,
1238
         * cpu_to_le16(0x0008), cpu_to_le16(0x0008).  */
1239
        .status                = HCI_SUCCESS,
1240
        .acl_mtu        = cpu_to_le16(0x0200),
1241
        .sco_mtu        = 0,
1242
        .acl_max_pkt        = cpu_to_le16(0x0001),
1243
        .sco_max_pkt        = cpu_to_le16(0x0000),
1244
    };
1245

    
1246
    bt_hci_event_complete(hci, &bs, READ_BUFFER_SIZE_RP_SIZE);
1247
}
1248

    
1249
/* Deprecated in V2.0 (page 661) */
1250
static void bt_hci_read_country_code_rp(struct bt_hci_s *hci)
1251
{
1252
    read_country_code_rp cc ={
1253
        .status                = HCI_SUCCESS,
1254
        .country_code        = 0x00,        /* North America & Europe^1 and Japan */
1255
    };
1256

    
1257
    bt_hci_event_complete(hci, &cc, READ_COUNTRY_CODE_RP_SIZE);
1258

    
1259
    /* ^1. Except France, sorry */
1260
}
1261

    
1262
static void bt_hci_read_bd_addr_rp(struct bt_hci_s *hci)
1263
{
1264
    read_bd_addr_rp ba = {
1265
        .status = HCI_SUCCESS,
1266
        .bdaddr = BAINIT(&hci->device.bd_addr),
1267
    };
1268

    
1269
    bt_hci_event_complete(hci, &ba, READ_BD_ADDR_RP_SIZE);
1270
}
1271

    
1272
static int bt_hci_link_quality_rp(struct bt_hci_s *hci, uint16_t handle)
1273
{
1274
    read_link_quality_rp lq = {
1275
        .status                = HCI_SUCCESS,
1276
        .handle                = HNDL(handle),
1277
        .link_quality        = 0xff,
1278
    };
1279

    
1280
    if (bt_hci_handle_bad(hci, handle))
1281
        lq.status = HCI_NO_CONNECTION;
1282

    
1283
    bt_hci_event_complete(hci, &lq, READ_LINK_QUALITY_RP_SIZE);
1284
    return 0;
1285
}
1286

    
1287
/* Generate a Command Complete event with only the Status parameter */
1288
static inline void bt_hci_event_complete_status(struct bt_hci_s *hci,
1289
                uint8_t status)
1290
{
1291
    bt_hci_event_complete(hci, &status, 1);
1292
}
1293

    
1294
static inline void bt_hci_event_complete_conn_cancel(struct bt_hci_s *hci,
1295
                uint8_t status, bdaddr_t *bd_addr)
1296
{
1297
    create_conn_cancel_rp params = {
1298
        .status = status,
1299
        .bdaddr = BAINIT(bd_addr),
1300
    };
1301

    
1302
    bt_hci_event_complete(hci, &params, CREATE_CONN_CANCEL_RP_SIZE);
1303
}
1304

    
1305
static inline void bt_hci_event_auth_complete(struct bt_hci_s *hci,
1306
                uint16_t handle)
1307
{
1308
    evt_auth_complete params = {
1309
        .status = HCI_SUCCESS,
1310
        .handle = HNDL(handle),
1311
    };
1312

    
1313
    bt_hci_event(hci, EVT_AUTH_COMPLETE, &params, EVT_AUTH_COMPLETE_SIZE);
1314
}
1315

    
1316
static inline void bt_hci_event_encrypt_change(struct bt_hci_s *hci,
1317
                uint16_t handle, uint8_t mode)
1318
{
1319
    evt_encrypt_change params = {
1320
        .status                = HCI_SUCCESS,
1321
        .handle                = HNDL(handle),
1322
        .encrypt        = mode,
1323
    };
1324

    
1325
    bt_hci_event(hci, EVT_ENCRYPT_CHANGE, &params, EVT_ENCRYPT_CHANGE_SIZE);
1326
}
1327

    
1328
static inline void bt_hci_event_complete_name_cancel(struct bt_hci_s *hci,
1329
                bdaddr_t *bd_addr)
1330
{
1331
    remote_name_req_cancel_rp params = {
1332
        .status = HCI_INVALID_PARAMETERS,
1333
        .bdaddr = BAINIT(bd_addr),
1334
    };
1335

    
1336
    bt_hci_event_complete(hci, &params, REMOTE_NAME_REQ_CANCEL_RP_SIZE);
1337
}
1338

    
1339
static inline void bt_hci_event_read_remote_ext_features(struct bt_hci_s *hci,
1340
                uint16_t handle)
1341
{
1342
    evt_read_remote_ext_features_complete params = {
1343
        .status = HCI_UNSUPPORTED_FEATURE,
1344
        .handle = HNDL(handle),
1345
        /* Rest uninitialised */
1346
    };
1347

    
1348
    bt_hci_event(hci, EVT_READ_REMOTE_EXT_FEATURES_COMPLETE,
1349
                    &params, EVT_READ_REMOTE_EXT_FEATURES_COMPLETE_SIZE);
1350
}
1351

    
1352
static inline void bt_hci_event_complete_lmp_handle(struct bt_hci_s *hci,
1353
                uint16_t handle)
1354
{
1355
    read_lmp_handle_rp params = {
1356
        .status                = HCI_NO_CONNECTION,
1357
        .handle                = HNDL(handle),
1358
        .reserved        = 0,
1359
        /* Rest uninitialised */
1360
    };
1361

    
1362
    bt_hci_event_complete(hci, &params, READ_LMP_HANDLE_RP_SIZE);
1363
}
1364

    
1365
static inline void bt_hci_event_complete_role_discovery(struct bt_hci_s *hci,
1366
                int status, uint16_t handle, int master)
1367
{
1368
    role_discovery_rp params = {
1369
        .status                = status,
1370
        .handle                = HNDL(handle),
1371
        .role                = master ? 0x00 : 0x01,
1372
    };
1373

    
1374
    bt_hci_event_complete(hci, &params, ROLE_DISCOVERY_RP_SIZE);
1375
}
1376

    
1377
static inline void bt_hci_event_complete_flush(struct bt_hci_s *hci,
1378
                int status, uint16_t handle)
1379
{
1380
    flush_rp params = {
1381
        .status                = status,
1382
        .handle                = HNDL(handle),
1383
    };
1384

    
1385
    bt_hci_event_complete(hci, &params, FLUSH_RP_SIZE);
1386
}
1387

    
1388
static inline void bt_hci_event_complete_read_local_name(struct bt_hci_s *hci)
1389
{
1390
    read_local_name_rp params;
1391
    params.status = HCI_SUCCESS;
1392
    memset(params.name, 0, sizeof(params.name));
1393
    if (hci->device.lmp_name)
1394
        strncpy(params.name, hci->device.lmp_name, sizeof(params.name));
1395

    
1396
    bt_hci_event_complete(hci, &params, READ_LOCAL_NAME_RP_SIZE);
1397
}
1398

    
1399
static inline void bt_hci_event_complete_read_conn_accept_timeout(
1400
                struct bt_hci_s *hci)
1401
{
1402
    read_conn_accept_timeout_rp params = {
1403
        .status                = HCI_SUCCESS,
1404
        .timeout        = cpu_to_le16(hci->conn_accept_tout),
1405
    };
1406

    
1407
    bt_hci_event_complete(hci, &params, READ_CONN_ACCEPT_TIMEOUT_RP_SIZE);
1408
}
1409

    
1410
static inline void bt_hci_event_complete_read_scan_enable(struct bt_hci_s *hci)
1411
{
1412
    read_scan_enable_rp params = {
1413
        .status = HCI_SUCCESS,
1414
        .enable =
1415
                (hci->device.inquiry_scan ? SCAN_INQUIRY : 0) |
1416
                (hci->device.page_scan ? SCAN_PAGE : 0),
1417
    };
1418

    
1419
    bt_hci_event_complete(hci, &params, READ_SCAN_ENABLE_RP_SIZE);
1420
}
1421

    
1422
static inline void bt_hci_event_complete_read_local_class(struct bt_hci_s *hci)
1423
{
1424
    read_class_of_dev_rp params;
1425

    
1426
    params.status = HCI_SUCCESS;
1427
    memcpy(params.dev_class, hci->device.class, sizeof(params.dev_class));
1428

    
1429
    bt_hci_event_complete(hci, &params, READ_CLASS_OF_DEV_RP_SIZE);
1430
}
1431

    
1432
static inline void bt_hci_event_complete_voice_setting(struct bt_hci_s *hci)
1433
{
1434
    read_voice_setting_rp params = {
1435
        .status                = HCI_SUCCESS,
1436
        .voice_setting        = hci->voice_setting,        /* Note: no swapping */
1437
    };
1438

    
1439
    bt_hci_event_complete(hci, &params, READ_VOICE_SETTING_RP_SIZE);
1440
}
1441

    
1442
static inline void bt_hci_event_complete_read_inquiry_mode(
1443
                struct bt_hci_s *hci)
1444
{
1445
    read_inquiry_mode_rp params = {
1446
        .status                = HCI_SUCCESS,
1447
        .mode                = hci->lm.inquiry_mode,
1448
    };
1449

    
1450
    bt_hci_event_complete(hci, &params, READ_INQUIRY_MODE_RP_SIZE);
1451
}
1452

    
1453
static inline void bt_hci_event_num_comp_pkts(struct bt_hci_s *hci,
1454
                uint16_t handle, int packets)
1455
{
1456
    uint16_t buf[EVT_NUM_COMP_PKTS_SIZE(1) / 2 + 1];
1457
    evt_num_comp_pkts *params = (void *) ((uint8_t *) buf + 1);
1458

    
1459
    params->num_hndl                        = 1;
1460
    params->connection->handle                = HNDL(handle);
1461
    params->connection->num_packets        = cpu_to_le16(packets);
1462

    
1463
    bt_hci_event(hci, EVT_NUM_COMP_PKTS, params, EVT_NUM_COMP_PKTS_SIZE(1));
1464
}
1465

    
1466
static void bt_submit_hci(struct HCIInfo *info,
1467
                const uint8_t *data, int length)
1468
{
1469
    struct bt_hci_s *hci = hci_from_info(info);
1470
    uint16_t cmd;
1471
    int paramlen, i;
1472

    
1473
    if (length < HCI_COMMAND_HDR_SIZE)
1474
        goto short_hci;
1475

    
1476
    memcpy(&hci->last_cmd, data, 2);
1477

    
1478
    cmd = (data[1] << 8) | data[0];
1479
    paramlen = data[2];
1480
    if (cmd_opcode_ogf(cmd) == 0 || cmd_opcode_ocf(cmd) == 0)        /* NOP */
1481
        return;
1482

    
1483
    data += HCI_COMMAND_HDR_SIZE;
1484
    length -= HCI_COMMAND_HDR_SIZE;
1485

    
1486
    if (paramlen > length)
1487
        return;
1488

    
1489
#define PARAM(cmd, param)        (((cmd##_cp *) data)->param)
1490
#define PARAM16(cmd, param)        le16_to_cpup(&PARAM(cmd, param))
1491
#define PARAMHANDLE(cmd)        HNDL(PARAM(cmd, handle))
1492
#define LENGTH_CHECK(cmd)        if (length < sizeof(cmd##_cp)) goto short_hci
1493
    /* Note: the supported commands bitmask in bt_hci_read_local_commands_rp
1494
     * needs to be updated every time a command is implemented here!  */
1495
    switch (cmd) {
1496
    case cmd_opcode_pack(OGF_LINK_CTL, OCF_INQUIRY):
1497
        LENGTH_CHECK(inquiry);
1498

    
1499
        if (PARAM(inquiry, length) < 1) {
1500
            bt_hci_event_complete_status(hci, HCI_INVALID_PARAMETERS);
1501
            break;
1502
        }
1503

    
1504
        hci->lm.inquire = 1;
1505
        hci->lm.periodic = 0;
1506
        hci->lm.responses_left = PARAM(inquiry, num_rsp) ?: INT_MAX;
1507
        hci->lm.responses = 0;
1508
        bt_hci_event_status(hci, HCI_SUCCESS);
1509
        bt_hci_inquiry_start(hci, PARAM(inquiry, length));
1510
        break;
1511

    
1512
    case cmd_opcode_pack(OGF_LINK_CTL, OCF_INQUIRY_CANCEL):
1513
        if (!hci->lm.inquire || hci->lm.periodic) {
1514
            fprintf(stderr, "%s: Inquiry Cancel should only be issued after "
1515
                            "the Inquiry command has been issued, a Command "
1516
                            "Status event has been received for the Inquiry "
1517
                            "command, and before the Inquiry Complete event "
1518
                            "occurs", __FUNCTION__);
1519
            bt_hci_event_complete_status(hci, HCI_COMMAND_DISALLOWED);
1520
            break;
1521
        }
1522

    
1523
        hci->lm.inquire = 0;
1524
        qemu_del_timer(hci->lm.inquiry_done);
1525
        bt_hci_event_complete_status(hci, HCI_SUCCESS);
1526
        break;
1527

    
1528
    case cmd_opcode_pack(OGF_LINK_CTL, OCF_PERIODIC_INQUIRY):
1529
        LENGTH_CHECK(periodic_inquiry);
1530

    
1531
        if (!(PARAM(periodic_inquiry, length) <
1532
                                PARAM16(periodic_inquiry, min_period) &&
1533
                                PARAM16(periodic_inquiry, min_period) <
1534
                                PARAM16(periodic_inquiry, max_period)) ||
1535
                        PARAM(periodic_inquiry, length) < 1 ||
1536
                        PARAM16(periodic_inquiry, min_period) < 2 ||
1537
                        PARAM16(periodic_inquiry, max_period) < 3) {
1538
            bt_hci_event_complete_status(hci, HCI_INVALID_PARAMETERS);
1539
            break;
1540
        }
1541

    
1542
        hci->lm.inquire = 1;
1543
        hci->lm.periodic = 1;
1544
        hci->lm.responses_left = PARAM(periodic_inquiry, num_rsp);
1545
        hci->lm.responses = 0;
1546
        hci->lm.inquiry_period = PARAM16(periodic_inquiry, max_period);
1547
        bt_hci_event_complete_status(hci, HCI_SUCCESS);
1548
        bt_hci_inquiry_start(hci, PARAM(periodic_inquiry, length));
1549
        break;
1550

    
1551
    case cmd_opcode_pack(OGF_LINK_CTL, OCF_EXIT_PERIODIC_INQUIRY):
1552
        if (!hci->lm.inquire || !hci->lm.periodic) {
1553
            fprintf(stderr, "%s: Inquiry Cancel should only be issued after "
1554
                            "the Inquiry command has been issued, a Command "
1555
                            "Status event has been received for the Inquiry "
1556
                            "command, and before the Inquiry Complete event "
1557
                            "occurs", __FUNCTION__);
1558
            bt_hci_event_complete_status(hci, HCI_COMMAND_DISALLOWED);
1559
            break;
1560
        }
1561
        hci->lm.inquire = 0;
1562
        qemu_del_timer(hci->lm.inquiry_done);
1563
        qemu_del_timer(hci->lm.inquiry_next);
1564
        bt_hci_event_complete_status(hci, HCI_SUCCESS);
1565
        break;
1566

    
1567
    case cmd_opcode_pack(OGF_LINK_CTL, OCF_CREATE_CONN):
1568
        LENGTH_CHECK(create_conn);
1569

    
1570
        if (hci->lm.connecting >= HCI_HANDLES_MAX) {
1571
            bt_hci_event_status(hci, HCI_REJECTED_LIMITED_RESOURCES);
1572
            break;
1573
        }
1574
        bt_hci_event_status(hci, HCI_SUCCESS);
1575

    
1576
        if (bt_hci_connect(hci, &PARAM(create_conn, bdaddr)))
1577
            bt_hci_connection_reject_event(hci, &PARAM(create_conn, bdaddr));
1578
        break;
1579

    
1580
    case cmd_opcode_pack(OGF_LINK_CTL, OCF_DISCONNECT):
1581
        LENGTH_CHECK(disconnect);
1582

    
1583
        if (bt_hci_handle_bad(hci, PARAMHANDLE(disconnect))) {
1584
            bt_hci_event_status(hci, HCI_NO_CONNECTION);
1585
            break;
1586
        }
1587

    
1588
        bt_hci_event_status(hci, HCI_SUCCESS);
1589
        bt_hci_disconnect(hci, PARAMHANDLE(disconnect),
1590
                        PARAM(disconnect, reason));
1591
        break;
1592

    
1593
    case cmd_opcode_pack(OGF_LINK_CTL, OCF_CREATE_CONN_CANCEL):
1594
        LENGTH_CHECK(create_conn_cancel);
1595

    
1596
        if (bt_hci_lmp_connection_ready(hci,
1597
                                &PARAM(create_conn_cancel, bdaddr))) {
1598
            for (i = 0; i < HCI_HANDLES_MAX; i ++)
1599
                if (bt_hci_role_master(hci, i) && hci->lm.handle[i].link &&
1600
                                !bacmp(&hci->lm.handle[i].link->slave->bd_addr,
1601
                                        &PARAM(create_conn_cancel, bdaddr)))
1602
                   break;
1603

    
1604
            bt_hci_event_complete_conn_cancel(hci, i < HCI_HANDLES_MAX ?
1605
                            HCI_ACL_CONNECTION_EXISTS : HCI_NO_CONNECTION,
1606
                            &PARAM(create_conn_cancel, bdaddr));
1607
        } else
1608
            bt_hci_event_complete_conn_cancel(hci, HCI_SUCCESS,
1609
                            &PARAM(create_conn_cancel, bdaddr));
1610
        break;
1611

    
1612
    case cmd_opcode_pack(OGF_LINK_CTL, OCF_ACCEPT_CONN_REQ):
1613
        LENGTH_CHECK(accept_conn_req);
1614

    
1615
        if (!hci->conn_req_host ||
1616
                        bacmp(&PARAM(accept_conn_req, bdaddr),
1617
                                &hci->conn_req_host->bd_addr)) {
1618
            bt_hci_event_status(hci, HCI_INVALID_PARAMETERS);
1619
            break;
1620
        }
1621

    
1622
        bt_hci_event_status(hci, HCI_SUCCESS);
1623
        bt_hci_connection_accept(hci, hci->conn_req_host);
1624
        hci->conn_req_host = NULL;
1625
        break;
1626

    
1627
    case cmd_opcode_pack(OGF_LINK_CTL, OCF_REJECT_CONN_REQ):
1628
        LENGTH_CHECK(reject_conn_req);
1629

    
1630
        if (!hci->conn_req_host ||
1631
                        bacmp(&PARAM(reject_conn_req, bdaddr),
1632
                                &hci->conn_req_host->bd_addr)) {
1633
            bt_hci_event_status(hci, HCI_INVALID_PARAMETERS);
1634
            break;
1635
        }
1636

    
1637
        bt_hci_event_status(hci, HCI_SUCCESS);
1638
        bt_hci_connection_reject(hci, hci->conn_req_host,
1639
                        PARAM(reject_conn_req, reason));
1640
        bt_hci_connection_reject_event(hci, &hci->conn_req_host->bd_addr);
1641
        hci->conn_req_host = NULL;
1642
        break;
1643

    
1644
    case cmd_opcode_pack(OGF_LINK_CTL, OCF_AUTH_REQUESTED):
1645
        LENGTH_CHECK(auth_requested);
1646

    
1647
        if (bt_hci_handle_bad(hci, PARAMHANDLE(auth_requested)))
1648
            bt_hci_event_status(hci, HCI_NO_CONNECTION);
1649
        else {
1650
            bt_hci_event_status(hci, HCI_SUCCESS);
1651
            bt_hci_event_auth_complete(hci, PARAMHANDLE(auth_requested));
1652
        }
1653
        break;
1654

    
1655
    case cmd_opcode_pack(OGF_LINK_CTL, OCF_SET_CONN_ENCRYPT):
1656
        LENGTH_CHECK(set_conn_encrypt);
1657

    
1658
        if (bt_hci_handle_bad(hci, PARAMHANDLE(set_conn_encrypt)))
1659
            bt_hci_event_status(hci, HCI_NO_CONNECTION);
1660
        else {
1661
            bt_hci_event_status(hci, HCI_SUCCESS);
1662
            bt_hci_event_encrypt_change(hci,
1663
                            PARAMHANDLE(set_conn_encrypt),
1664
                            PARAM(set_conn_encrypt, encrypt));
1665
        }
1666
        break;
1667

    
1668
    case cmd_opcode_pack(OGF_LINK_CTL, OCF_REMOTE_NAME_REQ):
1669
        LENGTH_CHECK(remote_name_req);
1670

    
1671
        if (bt_hci_name_req(hci, &PARAM(remote_name_req, bdaddr)))
1672
            bt_hci_event_status(hci, HCI_NO_CONNECTION);
1673
        break;
1674

    
1675
    case cmd_opcode_pack(OGF_LINK_CTL, OCF_REMOTE_NAME_REQ_CANCEL):
1676
        LENGTH_CHECK(remote_name_req_cancel);
1677

    
1678
        bt_hci_event_complete_name_cancel(hci,
1679
                        &PARAM(remote_name_req_cancel, bdaddr));
1680
        break;
1681

    
1682
    case cmd_opcode_pack(OGF_LINK_CTL, OCF_READ_REMOTE_FEATURES):
1683
        LENGTH_CHECK(read_remote_features);
1684

    
1685
        if (bt_hci_features_req(hci, PARAMHANDLE(read_remote_features)))
1686
            bt_hci_event_status(hci, HCI_NO_CONNECTION);
1687
        break;
1688

    
1689
    case cmd_opcode_pack(OGF_LINK_CTL, OCF_READ_REMOTE_EXT_FEATURES):
1690
        LENGTH_CHECK(read_remote_ext_features);
1691

    
1692
        if (bt_hci_handle_bad(hci, PARAMHANDLE(read_remote_ext_features)))
1693
            bt_hci_event_status(hci, HCI_NO_CONNECTION);
1694
        else {
1695
            bt_hci_event_status(hci, HCI_SUCCESS);
1696
            bt_hci_event_read_remote_ext_features(hci,
1697
                            PARAMHANDLE(read_remote_ext_features));
1698
        }
1699
        break;
1700

    
1701
    case cmd_opcode_pack(OGF_LINK_CTL, OCF_READ_REMOTE_VERSION):
1702
        LENGTH_CHECK(read_remote_version);
1703

    
1704
        if (bt_hci_version_req(hci, PARAMHANDLE(read_remote_version)))
1705
            bt_hci_event_status(hci, HCI_NO_CONNECTION);
1706
        break;
1707

    
1708
    case cmd_opcode_pack(OGF_LINK_CTL, OCF_READ_CLOCK_OFFSET):
1709
        LENGTH_CHECK(read_clock_offset);
1710

    
1711
        if (bt_hci_clkoffset_req(hci, PARAMHANDLE(read_clock_offset)))
1712
            bt_hci_event_status(hci, HCI_NO_CONNECTION);
1713
        break;
1714

    
1715
    case cmd_opcode_pack(OGF_LINK_CTL, OCF_READ_LMP_HANDLE):
1716
        LENGTH_CHECK(read_lmp_handle);
1717

    
1718
        /* TODO: */
1719
        bt_hci_event_complete_lmp_handle(hci, PARAMHANDLE(read_lmp_handle));
1720
        break;
1721

    
1722
    case cmd_opcode_pack(OGF_LINK_POLICY, OCF_HOLD_MODE):
1723
        LENGTH_CHECK(hold_mode);
1724

    
1725
        if (PARAM16(hold_mode, min_interval) >
1726
                        PARAM16(hold_mode, max_interval) ||
1727
                        PARAM16(hold_mode, min_interval) < 0x0002 ||
1728
                        PARAM16(hold_mode, max_interval) > 0xff00 ||
1729
                        (PARAM16(hold_mode, min_interval) & 1) ||
1730
                        (PARAM16(hold_mode, max_interval) & 1)) {
1731
            bt_hci_event_status(hci, HCI_INVALID_PARAMETERS);
1732
            break;
1733
        }
1734

    
1735
        if (bt_hci_mode_change(hci, PARAMHANDLE(hold_mode),
1736
                                PARAM16(hold_mode, max_interval),
1737
                                acl_hold))
1738
            bt_hci_event_status(hci, HCI_NO_CONNECTION);
1739
        break;
1740

    
1741
    case cmd_opcode_pack(OGF_LINK_POLICY, OCF_PARK_MODE):
1742
        LENGTH_CHECK(park_mode);
1743

    
1744
        if (PARAM16(park_mode, min_interval) >
1745
                        PARAM16(park_mode, max_interval) ||
1746
                        PARAM16(park_mode, min_interval) < 0x000e ||
1747
                        (PARAM16(park_mode, min_interval) & 1) ||
1748
                        (PARAM16(park_mode, max_interval) & 1)) {
1749
            bt_hci_event_status(hci, HCI_INVALID_PARAMETERS);
1750
            break;
1751
        }
1752

    
1753
        if (bt_hci_mode_change(hci, PARAMHANDLE(park_mode),
1754
                                PARAM16(park_mode, max_interval),
1755
                                acl_parked))
1756
            bt_hci_event_status(hci, HCI_NO_CONNECTION);
1757
        break;
1758

    
1759
    case cmd_opcode_pack(OGF_LINK_POLICY, OCF_EXIT_PARK_MODE):
1760
        LENGTH_CHECK(exit_park_mode);
1761

    
1762
        if (bt_hci_mode_cancel(hci, PARAMHANDLE(exit_park_mode),
1763
                                acl_parked))
1764
            bt_hci_event_status(hci, HCI_NO_CONNECTION);
1765
        break;
1766

    
1767
    case cmd_opcode_pack(OGF_LINK_POLICY, OCF_ROLE_DISCOVERY):
1768
        LENGTH_CHECK(role_discovery);
1769

    
1770
        if (bt_hci_handle_bad(hci, PARAMHANDLE(role_discovery)))
1771
            bt_hci_event_complete_role_discovery(hci,
1772
                            HCI_NO_CONNECTION, PARAMHANDLE(role_discovery), 0);
1773
        else
1774
            bt_hci_event_complete_role_discovery(hci,
1775
                            HCI_SUCCESS, PARAMHANDLE(role_discovery),
1776
                            bt_hci_role_master(hci,
1777
                                    PARAMHANDLE(role_discovery)));
1778
        break;
1779

    
1780
    case cmd_opcode_pack(OGF_HOST_CTL, OCF_SET_EVENT_MASK):
1781
        LENGTH_CHECK(set_event_mask);
1782

    
1783
        memcpy(hci->event_mask, PARAM(set_event_mask, mask), 8);
1784
        bt_hci_event_complete_status(hci, HCI_SUCCESS);
1785
        break;
1786

    
1787
    case cmd_opcode_pack(OGF_HOST_CTL, OCF_RESET):
1788
        bt_hci_reset(hci);
1789
        bt_hci_event_status(hci, HCI_SUCCESS);
1790
        break;
1791

    
1792
    case cmd_opcode_pack(OGF_HOST_CTL, OCF_SET_EVENT_FLT):
1793
        if (length >= 1 && PARAM(set_event_flt, flt_type) == FLT_CLEAR_ALL)
1794
            /* No length check */;
1795
        else
1796
            LENGTH_CHECK(set_event_flt);
1797

    
1798
        /* Filters are not implemented */
1799
        bt_hci_event_complete_status(hci, HCI_SUCCESS);
1800
        break;
1801

    
1802
    case cmd_opcode_pack(OGF_HOST_CTL, OCF_FLUSH):
1803
        LENGTH_CHECK(flush);
1804

    
1805
        if (bt_hci_handle_bad(hci, PARAMHANDLE(flush)))
1806
            bt_hci_event_complete_flush(hci,
1807
                            HCI_NO_CONNECTION, PARAMHANDLE(flush));
1808
        else {
1809
            /* TODO: ordering? */
1810
            bt_hci_event(hci, EVT_FLUSH_OCCURRED,
1811
                            &PARAM(flush, handle),
1812
                            EVT_FLUSH_OCCURRED_SIZE);
1813
            bt_hci_event_complete_flush(hci,
1814
                            HCI_SUCCESS, PARAMHANDLE(flush));
1815
        }
1816
        break;
1817

    
1818
    case cmd_opcode_pack(OGF_HOST_CTL, OCF_CHANGE_LOCAL_NAME):
1819
        LENGTH_CHECK(change_local_name);
1820

    
1821
        if (hci->device.lmp_name)
1822
            qemu_free((void *) hci->device.lmp_name);
1823
        hci->device.lmp_name = qemu_strndup(PARAM(change_local_name, name),
1824
                        sizeof(PARAM(change_local_name, name)));
1825
        bt_hci_event_complete_status(hci, HCI_SUCCESS);
1826
        break;
1827

    
1828
    case cmd_opcode_pack(OGF_HOST_CTL, OCF_READ_LOCAL_NAME):
1829
        bt_hci_event_complete_read_local_name(hci);
1830
        break;
1831

    
1832
    case cmd_opcode_pack(OGF_HOST_CTL, OCF_READ_CONN_ACCEPT_TIMEOUT):
1833
        bt_hci_event_complete_read_conn_accept_timeout(hci);
1834
        break;
1835

    
1836
    case cmd_opcode_pack(OGF_HOST_CTL, OCF_WRITE_CONN_ACCEPT_TIMEOUT):
1837
        /* TODO */
1838
        LENGTH_CHECK(write_conn_accept_timeout);
1839

    
1840
        if (PARAM16(write_conn_accept_timeout, timeout) < 0x0001 ||
1841
                        PARAM16(write_conn_accept_timeout, timeout) > 0xb540) {
1842
            bt_hci_event_complete_status(hci, HCI_INVALID_PARAMETERS);
1843
            break;
1844
        }
1845

    
1846
        hci->conn_accept_tout = PARAM16(write_conn_accept_timeout, timeout);
1847
        bt_hci_event_complete_status(hci, HCI_SUCCESS);
1848
        break;
1849

    
1850
    case cmd_opcode_pack(OGF_HOST_CTL, OCF_READ_SCAN_ENABLE):
1851
        bt_hci_event_complete_read_scan_enable(hci);
1852
        break;
1853

    
1854
    case cmd_opcode_pack(OGF_HOST_CTL, OCF_WRITE_SCAN_ENABLE):
1855
        LENGTH_CHECK(write_scan_enable);
1856

    
1857
        /* TODO: check that the remaining bits are all 0 */
1858
        hci->device.inquiry_scan =
1859
                !!(PARAM(write_scan_enable, scan_enable) & SCAN_INQUIRY);
1860
        hci->device.page_scan =
1861
                !!(PARAM(write_scan_enable, scan_enable) & SCAN_PAGE);
1862
        bt_hci_event_complete_status(hci, HCI_SUCCESS);
1863
        break;
1864

    
1865
    case cmd_opcode_pack(OGF_HOST_CTL, OCF_READ_CLASS_OF_DEV):
1866
        bt_hci_event_complete_read_local_class(hci);
1867
        break;
1868

    
1869
    case cmd_opcode_pack(OGF_HOST_CTL, OCF_WRITE_CLASS_OF_DEV):
1870
        LENGTH_CHECK(write_class_of_dev);
1871

    
1872
        memcpy(hci->device.class, PARAM(write_class_of_dev, dev_class),
1873
                        sizeof(PARAM(write_class_of_dev, dev_class)));
1874
        bt_hci_event_complete_status(hci, HCI_SUCCESS);
1875
        break;
1876

    
1877
    case cmd_opcode_pack(OGF_HOST_CTL, OCF_READ_VOICE_SETTING):
1878
        bt_hci_event_complete_voice_setting(hci);
1879
        break;
1880

    
1881
    case cmd_opcode_pack(OGF_HOST_CTL, OCF_WRITE_VOICE_SETTING):
1882
        LENGTH_CHECK(write_voice_setting);
1883

    
1884
        hci->voice_setting = PARAM(write_voice_setting, voice_setting);
1885
        bt_hci_event_complete_status(hci, HCI_SUCCESS);
1886
        break;
1887

    
1888
    case cmd_opcode_pack(OGF_HOST_CTL, OCF_HOST_NUMBER_OF_COMPLETED_PACKETS):
1889
        if (length < data[0] * 2 + 1)
1890
            goto short_hci;
1891

    
1892
        for (i = 0; i < data[0]; i ++)
1893
            if (bt_hci_handle_bad(hci,
1894
                                    data[i * 2 + 1] | (data[i * 2 + 2] << 8)))
1895
                bt_hci_event_complete_status(hci, HCI_INVALID_PARAMETERS);
1896
        break;
1897

    
1898
    case cmd_opcode_pack(OGF_HOST_CTL, OCF_READ_INQUIRY_MODE):
1899
        /* Only if (local_features[3] & 0x40) && (local_commands[12] & 0x40)
1900
         * else
1901
         *     goto unknown_command */
1902
        bt_hci_event_complete_read_inquiry_mode(hci);
1903
        break;
1904

    
1905
    case cmd_opcode_pack(OGF_HOST_CTL, OCF_WRITE_INQUIRY_MODE):
1906
        /* Only if (local_features[3] & 0x40) && (local_commands[12] & 0x80)
1907
         * else
1908
         *     goto unknown_command */
1909
        LENGTH_CHECK(write_inquiry_mode);
1910

    
1911
        if (PARAM(write_inquiry_mode, mode) > 0x01) {
1912
            bt_hci_event_complete_status(hci, HCI_INVALID_PARAMETERS);
1913
            break;
1914
        }
1915

    
1916
        hci->lm.inquiry_mode = PARAM(write_inquiry_mode, mode);
1917
        bt_hci_event_complete_status(hci, HCI_SUCCESS);
1918
        break;
1919

    
1920
    case cmd_opcode_pack(OGF_INFO_PARAM, OCF_READ_LOCAL_VERSION):
1921
        bt_hci_read_local_version_rp(hci);
1922
        break;
1923

    
1924
    case cmd_opcode_pack(OGF_INFO_PARAM, OCF_READ_LOCAL_COMMANDS):
1925
        bt_hci_read_local_commands_rp(hci);
1926
        break;
1927

    
1928
    case cmd_opcode_pack(OGF_INFO_PARAM, OCF_READ_LOCAL_FEATURES):
1929
        bt_hci_read_local_features_rp(hci);
1930
        break;
1931

    
1932
    case cmd_opcode_pack(OGF_INFO_PARAM, OCF_READ_LOCAL_EXT_FEATURES):
1933
        LENGTH_CHECK(read_local_ext_features);
1934

    
1935
        bt_hci_read_local_ext_features_rp(hci,
1936
                        PARAM(read_local_ext_features, page_num));
1937
        break;
1938

    
1939
    case cmd_opcode_pack(OGF_INFO_PARAM, OCF_READ_BUFFER_SIZE):
1940
        bt_hci_read_buffer_size_rp(hci);
1941
        break;
1942

    
1943
    case cmd_opcode_pack(OGF_INFO_PARAM, OCF_READ_COUNTRY_CODE):
1944
        bt_hci_read_country_code_rp(hci);
1945
        break;
1946

    
1947
    case cmd_opcode_pack(OGF_INFO_PARAM, OCF_READ_BD_ADDR):
1948
        bt_hci_read_bd_addr_rp(hci);
1949
        break;
1950

    
1951
    case cmd_opcode_pack(OGF_STATUS_PARAM, OCF_READ_LINK_QUALITY):
1952
        LENGTH_CHECK(read_link_quality);
1953

    
1954
        bt_hci_link_quality_rp(hci, PARAMHANDLE(read_link_quality));
1955
        break;
1956

    
1957
    default:
1958
        bt_hci_event_status(hci, HCI_UNKNOWN_COMMAND);
1959
        break;
1960

    
1961
    short_hci:
1962
        fprintf(stderr, "%s: HCI packet too short (%iB)\n",
1963
                        __FUNCTION__, length);
1964
        bt_hci_event_status(hci, HCI_INVALID_PARAMETERS);
1965
        break;
1966
    }
1967
}
1968

    
1969
/* We could perform fragmentation here, we can't do "recombination" because
1970
 * at this layer the length of the payload is not know ahead, so we only
1971
 * know that a packet contained the last fragment of the SDU when the next
1972
 * SDU starts.  */
1973
static inline void bt_hci_lmp_acl_data(struct bt_hci_s *hci, uint16_t handle,
1974
                const uint8_t *data, int start, int len)
1975
{
1976
    struct hci_acl_hdr *pkt = (void *) hci->acl_buf;
1977

    
1978
    /* TODO: packet flags */
1979
    /* TODO: avoid memcpy'ing */
1980

    
1981
    if (len + HCI_ACL_HDR_SIZE > sizeof(hci->acl_buf)) {
1982
        fprintf(stderr, "%s: can't take ACL packets %i bytes long\n",
1983
                        __FUNCTION__, len);
1984
        return;
1985
    }
1986
    memcpy(hci->acl_buf + HCI_ACL_HDR_SIZE, data, len);
1987

    
1988
    pkt->handle = cpu_to_le16(
1989
                    acl_handle_pack(handle, start ? ACL_START : ACL_CONT));
1990
    pkt->dlen = cpu_to_le16(len);
1991
    hci->info.acl_recv(hci->info.opaque,
1992
                    hci->acl_buf, len + HCI_ACL_HDR_SIZE);
1993
}
1994

    
1995
static void bt_hci_lmp_acl_data_slave(struct bt_link_s *btlink,
1996
                const uint8_t *data, int start, int len)
1997
{
1998
    struct bt_hci_link_s *link = (struct bt_hci_link_s *) btlink;
1999

    
2000
    bt_hci_lmp_acl_data(hci_from_device(btlink->slave),
2001
                    link->handle, data, start, len);
2002
}
2003

    
2004
static void bt_hci_lmp_acl_data_host(struct bt_link_s *link,
2005
                const uint8_t *data, int start, int len)
2006
{
2007
    bt_hci_lmp_acl_data(hci_from_device(link->host),
2008
                    link->handle, data, start, len);
2009
}
2010

    
2011
static void bt_submit_acl(struct HCIInfo *info,
2012
                const uint8_t *data, int length)
2013
{
2014
    struct bt_hci_s *hci = hci_from_info(info);
2015
    uint16_t handle;
2016
    int datalen, flags;
2017
    struct bt_link_s *link;
2018

    
2019
    if (length < HCI_ACL_HDR_SIZE) {
2020
        fprintf(stderr, "%s: ACL packet too short (%iB)\n",
2021
                        __FUNCTION__, length);
2022
        return;
2023
    }
2024

    
2025
    handle = acl_handle((data[1] << 8) | data[0]);
2026
    flags = acl_flags((data[1] << 8) | data[0]);
2027
    datalen = (data[3] << 8) | data[2];
2028
    data += HCI_ACL_HDR_SIZE;
2029
    length -= HCI_ACL_HDR_SIZE;
2030

    
2031
    if (bt_hci_handle_bad(hci, handle)) {
2032
        fprintf(stderr, "%s: invalid ACL handle %03x\n",
2033
                        __FUNCTION__, handle);
2034
        /* TODO: signal an error */
2035
        return;
2036
    }
2037
    handle &= ~HCI_HANDLE_OFFSET;
2038

    
2039
    if (datalen > length) {
2040
        fprintf(stderr, "%s: ACL packet too short (%iB < %iB)\n",
2041
                        __FUNCTION__, length, datalen);
2042
        return;
2043
    }
2044

    
2045
    link = hci->lm.handle[handle].link;
2046

    
2047
    if ((flags & ~3) == ACL_ACTIVE_BCAST) {
2048
        if (!hci->asb_handle)
2049
            hci->asb_handle = handle;
2050
        else if (handle != hci->asb_handle) {
2051
            fprintf(stderr, "%s: Bad handle %03x in Active Slave Broadcast\n",
2052
                            __FUNCTION__, handle);
2053
            /* TODO: signal an error */
2054
            return;
2055
        }
2056

    
2057
        /* TODO */
2058
    }
2059

    
2060
    if ((flags & ~3) == ACL_PICO_BCAST) {
2061
        if (!hci->psb_handle)
2062
            hci->psb_handle = handle;
2063
        else if (handle != hci->psb_handle) {
2064
            fprintf(stderr, "%s: Bad handle %03x in Parked Slave Broadcast\n",
2065
                            __FUNCTION__, handle);
2066
            /* TODO: signal an error */
2067
            return;
2068
        }
2069

    
2070
        /* TODO */
2071
    }
2072

    
2073
    /* TODO: increase counter and send EVT_NUM_COMP_PKTS */
2074
    bt_hci_event_num_comp_pkts(hci, handle | HCI_HANDLE_OFFSET, 1);
2075

    
2076
    /* Do this last as it can trigger further events even in this HCI */
2077
    hci->lm.handle[handle].lmp_acl_data(link, data,
2078
                    (flags & 3) == ACL_START, length);
2079
}
2080

    
2081
static void bt_submit_sco(struct HCIInfo *info,
2082
                const uint8_t *data, int length)
2083
{
2084
    struct bt_hci_s *hci = hci_from_info(info);
2085
    struct bt_link_s *link;
2086
    uint16_t handle;
2087
    int datalen;
2088

    
2089
    if (length < 3)
2090
        return;
2091

    
2092
    handle = acl_handle((data[1] << 8) | data[0]);
2093
    datalen = data[2];
2094
    data += 3;
2095
    length -= 3;
2096

    
2097
    if (bt_hci_handle_bad(hci, handle)) {
2098
        fprintf(stderr, "%s: invalid SCO handle %03x\n",
2099
                        __FUNCTION__, handle);
2100
        return;
2101
    }
2102
    handle &= ~HCI_HANDLE_OFFSET;
2103

    
2104
    if (datalen > length) {
2105
        fprintf(stderr, "%s: SCO packet too short (%iB < %iB)\n",
2106
                        __FUNCTION__, length, datalen);
2107
        return;
2108
    }
2109

    
2110
    link = hci->lm.handle[handle].link;
2111
    /* TODO */
2112

    
2113
    /* TODO: increase counter and send EVT_NUM_COMP_PKTS if synchronous
2114
     * Flow Control is enabled.
2115
     * (See Read/Write_Synchronous_Flow_Control_Enable on page 513 and
2116
     * page 514.)  */
2117
}
2118

    
2119
static uint8_t *bt_hci_evt_packet(void *opaque)
2120
{
2121
    /* TODO: allocate a packet from upper layer */
2122
    struct bt_hci_s *s = opaque;
2123

    
2124
    return s->evt_buf;
2125
}
2126

    
2127
static void bt_hci_evt_submit(void *opaque, int len)
2128
{
2129
    /* TODO: notify upper layer */
2130
    struct bt_hci_s *s = opaque;
2131

    
2132
    s->info.evt_recv(s->info.opaque, s->evt_buf, len);
2133
}
2134

    
2135
static int bt_hci_bdaddr_set(struct HCIInfo *info, const uint8_t *bd_addr)
2136
{
2137
    struct bt_hci_s *hci = hci_from_info(info);
2138

    
2139
    bacpy(&hci->device.bd_addr, (const bdaddr_t *) bd_addr);
2140
    return 0;
2141
}
2142

    
2143
static void bt_hci_done(struct HCIInfo *info);
2144
static void bt_hci_destroy(struct bt_device_s *dev)
2145
{
2146
    struct bt_hci_s *hci = hci_from_device(dev);
2147

    
2148
    bt_hci_done(&hci->info);
2149
}
2150

    
2151
struct HCIInfo *bt_new_hci(struct bt_scatternet_s *net)
2152
{
2153
    struct bt_hci_s *s = qemu_mallocz(sizeof(struct bt_hci_s));
2154

    
2155
    s->lm.inquiry_done = qemu_new_timer(vm_clock, bt_hci_inquiry_done, s);
2156
    s->lm.inquiry_next = qemu_new_timer(vm_clock, bt_hci_inquiry_next, s);
2157
    s->conn_accept_timer =
2158
            qemu_new_timer(vm_clock, bt_hci_conn_accept_timeout, s);
2159

    
2160
    s->evt_packet = bt_hci_evt_packet;
2161
    s->evt_submit = bt_hci_evt_submit;
2162
    s->opaque = s;
2163

    
2164
    bt_device_init(&s->device, net);
2165
    s->device.lmp_connection_request = bt_hci_lmp_connection_request;
2166
    s->device.lmp_connection_complete = bt_hci_lmp_connection_complete;
2167
    s->device.lmp_disconnect_master = bt_hci_lmp_disconnect_host;
2168
    s->device.lmp_disconnect_slave = bt_hci_lmp_disconnect_slave;
2169
    s->device.lmp_acl_data = bt_hci_lmp_acl_data_slave;
2170
    s->device.lmp_acl_resp = bt_hci_lmp_acl_data_host;
2171
    s->device.lmp_mode_change = bt_hci_lmp_mode_change_slave;
2172

    
2173
    /* Keep updated! */
2174
    /* Also keep in sync with supported commands bitmask in
2175
     * bt_hci_read_local_commands_rp */
2176
    s->device.lmp_caps = 0x8000199b7e85355fll;
2177

    
2178
    bt_hci_reset(s);
2179

    
2180
    s->info.cmd_send = bt_submit_hci;
2181
    s->info.sco_send = bt_submit_sco;
2182
    s->info.acl_send = bt_submit_acl;
2183
    s->info.bdaddr_set = bt_hci_bdaddr_set;
2184

    
2185
    s->device.handle_destroy = bt_hci_destroy;
2186

    
2187
    return &s->info;
2188
}
2189

    
2190
static void bt_hci_done(struct HCIInfo *info)
2191
{
2192
    struct bt_hci_s *hci = hci_from_info(info);
2193
    int handle;
2194

    
2195
    bt_device_done(&hci->device);
2196

    
2197
    if (hci->device.lmp_name)
2198
        qemu_free((void *) hci->device.lmp_name);
2199

    
2200
    /* Be gentle and send DISCONNECT to all connected peers and those
2201
     * currently waiting for us to accept or reject a connection request.
2202
     * This frees the links.  */
2203
    if (hci->conn_req_host) {
2204
        bt_hci_connection_reject(hci,
2205
                                 hci->conn_req_host, HCI_OE_POWER_OFF);
2206
        return;
2207
    }
2208

    
2209
    for (handle = HCI_HANDLE_OFFSET;
2210
                    handle < (HCI_HANDLE_OFFSET | HCI_HANDLES_MAX); handle ++)
2211
        if (!bt_hci_handle_bad(hci, handle))
2212
            bt_hci_disconnect(hci, handle, HCI_OE_POWER_OFF);
2213

    
2214
    /* TODO: this is not enough actually, there may be slaves from whom
2215
     * we have requested a connection who will soon (or not) respond with
2216
     * an accept or a reject, so we should also check if hci->lm.connecting
2217
     * is non-zero and if so, avoid freeing the hci but otherwise disappear
2218
     * from all qemu social life (e.g. stop scanning and request to be
2219
     * removed from s->device.net) and arrange for
2220
     * s->device.lmp_connection_complete to free the remaining bits once
2221
     * hci->lm.awaiting_bdaddr[] is empty.  */
2222

    
2223
    qemu_free_timer(hci->lm.inquiry_done);
2224
    qemu_free_timer(hci->lm.inquiry_next);
2225
    qemu_free_timer(hci->conn_accept_timer);
2226

    
2227
    qemu_free(hci);
2228
}