Statistics
| Branch: | Revision:

root / hw / bt-hci.c @ b1d8e52e

History | View | Annotate | Download (67.7 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 0;
450

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

    
455
    return &packet[2];
456
}
457

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

    
463
    if (!packet)
464
        return;
465

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

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

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

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

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

    
490
    if (!packet)
491
        return;
492

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

    
607
static void bt_hci_inquiry_next(void *opaque)
608
{
609
    struct bt_hci_s *hci = (struct bt_hci_s *) opaque;
610

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

    
692
    return 0;
693
}
694

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

    
704
    host->reject_reason = because;
705
    host->lmp_connection_complete(&link);
706
}
707

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

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

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

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

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

    
745
    link->btlink.slave        = &hci->device;
746
    link->btlink.host        = host;
747
    link->handle = handle;
748

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

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

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

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

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

    
783
    bacpy(&params.bdaddr, &link->host->bd_addr);
784
    memcpy(&params.dev_class, &link->host->class, sizeof(params.dev_class));
785
    params.link_type        = ACL_LINK;
786
    bt_hci_event(hci, EVT_CONN_REQUEST, &params, EVT_CONN_REQUEST_SIZE);
787
    return;
788
}
789

    
790
static void bt_hci_conn_accept_timeout(void *opaque)
791
{
792
    struct bt_hci_s *hci = (struct bt_hci_s *) opaque;
793

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

    
800
    /* TODO */
801
}
802

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

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

    
821
    return 1;
822
}
823

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

    
832
    if (bt_hci_lmp_connection_ready(hci, &link->slave->bd_addr)) {
833
        if (!hci->device.reject_reason)
834
            link->slave->lmp_disconnect_slave(link);
835
        handle = 0;
836
        status = HCI_NO_CONNECTION;
837
        goto complete;
838
    }
839

    
840
    if (hci->device.reject_reason) {
841
        handle = 0;
842
        status = hci->device.reject_reason;
843
        goto complete;
844
    }
845

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

    
854
    if (!tries) {
855
        link->slave->lmp_disconnect_slave(link);
856
        status = HCI_NO_CONNECTION;
857
        goto complete;
858
    }
859

    
860
    /* Link established */
861
    link->handle = handle;
862
    bt_hci_lmp_link_establish(hci, link, 1);
863

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

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

    
881
    if (bt_hci_role_master(hci, handle)) {
882
        btlink->slave->reject_reason = reason;
883
        btlink->slave->lmp_disconnect_slave(btlink);
884
        /* The link pointer is invalid from now on */
885

    
886
        goto complete;
887
    }
888

    
889
    btlink->host->reject_reason = reason;
890
    btlink->host->lmp_disconnect_master(btlink);
891

    
892
    /* We are the slave, we get to clean this burden */
893
    link = (struct bt_hci_link_s *) btlink;
894
    qemu_free(link);
895

    
896
complete:
897
    bt_hci_lmp_link_teardown(hci, handle);
898

    
899
    params.status        = HCI_SUCCESS;
900
    params.handle        = HNDL(handle);
901
    params.reason        = HCI_CONNECTION_TERMINATED;
902
    bt_hci_event(hci, EVT_DISCONN_COMPLETE,
903
                    &params, EVT_DISCONN_COMPLETE_SIZE);
904
}
905

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

    
913
    bt_hci_lmp_link_teardown(hci, handle);
914

    
915
    params.status        = HCI_SUCCESS;
916
    params.handle        = HNDL(handle);
917
    params.reason        = hci->device.reject_reason;
918
    bt_hci_event(hci, EVT_DISCONN_COMPLETE,
919
                    &params, EVT_DISCONN_COMPLETE_SIZE);
920
}
921

    
922
static void bt_hci_lmp_disconnect_slave(struct bt_link_s *btlink)
923
{
924
    struct bt_hci_link_s *link = (struct bt_hci_link_s *) btlink;
925
    struct bt_hci_s *hci = hci_from_device(btlink->slave);
926
    uint16_t handle = link->handle;
927
    evt_disconn_complete params;
928

    
929
    qemu_free(link);
930

    
931
    bt_hci_lmp_link_teardown(hci, handle);
932

    
933
    params.status        = HCI_SUCCESS;
934
    params.handle        = HNDL(handle);
935
    params.reason        = hci->device.reject_reason;
936
    bt_hci_event(hci, EVT_DISCONN_COMPLETE,
937
                    &params, EVT_DISCONN_COMPLETE_SIZE);
938
}
939

    
940
static int bt_hci_name_req(struct bt_hci_s *hci, bdaddr_t *bdaddr)
941
{
942
    struct bt_device_s *slave;
943
    evt_remote_name_req_complete params;
944
    int len;
945

    
946
    for (slave = hci->device.net->slave; slave; slave = slave->next)
947
        if (slave->page_scan && !bacmp(&slave->bd_addr, bdaddr))
948
            break;
949
    if (!slave)
950
        return -ENODEV;
951

    
952
    bt_hci_event_status(hci, HCI_SUCCESS);
953

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

    
962
    return 0;
963
}
964

    
965
static int bt_hci_features_req(struct bt_hci_s *hci, uint16_t handle)
966
{
967
    struct bt_device_s *slave;
968
    evt_read_remote_features_complete params;
969

    
970
    if (bt_hci_handle_bad(hci, handle))
971
        return -ENODEV;
972

    
973
    slave = bt_hci_remote_dev(hci, handle);
974

    
975
    bt_hci_event_status(hci, HCI_SUCCESS);
976

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

    
990
    return 0;
991
}
992

    
993
static int bt_hci_version_req(struct bt_hci_s *hci, uint16_t handle)
994
{
995
    struct bt_device_s *slave;
996
    evt_read_remote_version_complete params;
997

    
998
    if (bt_hci_handle_bad(hci, handle))
999
        return -ENODEV;
1000

    
1001
    slave = bt_hci_remote_dev(hci, handle);
1002

    
1003
    bt_hci_event_status(hci, HCI_SUCCESS);
1004

    
1005
    params.status        = HCI_SUCCESS;
1006
    params.handle        = HNDL(handle);
1007
    params.lmp_ver        = 0x03;
1008
    params.manufacturer        = cpu_to_le16(0xa000);
1009
    params.lmp_subver        = cpu_to_le16(0xa607);
1010
    bt_hci_event(hci, EVT_READ_REMOTE_VERSION_COMPLETE,
1011
                    &params, EVT_READ_REMOTE_VERSION_COMPLETE_SIZE);
1012

    
1013
    return 0;
1014
}
1015

    
1016
static int bt_hci_clkoffset_req(struct bt_hci_s *hci, uint16_t handle)
1017
{
1018
    struct bt_device_s *slave;
1019
    evt_read_clock_offset_complete params;
1020

    
1021
    if (bt_hci_handle_bad(hci, handle))
1022
        return -ENODEV;
1023

    
1024
    slave = bt_hci_remote_dev(hci, handle);
1025

    
1026
    bt_hci_event_status(hci, HCI_SUCCESS);
1027

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

    
1035
    return 0;
1036
}
1037

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

    
1048
    bt_hci_event(hci, EVT_MODE_CHANGE, &params, EVT_MODE_CHANGE_SIZE);
1049
}
1050

    
1051
static void bt_hci_lmp_mode_change_master(struct bt_hci_s *hci,
1052
                struct bt_link_s *link, int mode, uint16_t interval)
1053
{
1054
    link->acl_mode = mode;
1055
    link->acl_interval = interval;
1056

    
1057
    bt_hci_event_mode(hci, link, link->handle);
1058

    
1059
    link->slave->lmp_mode_change(link);
1060
}
1061

    
1062
static void bt_hci_lmp_mode_change_slave(struct bt_link_s *btlink)
1063
{
1064
    struct bt_hci_link_s *link = (struct bt_hci_link_s *) btlink;
1065
    struct bt_hci_s *hci = hci_from_device(btlink->slave);
1066

    
1067
    bt_hci_event_mode(hci, btlink, link->handle);
1068
}
1069

    
1070
static int bt_hci_mode_change(struct bt_hci_s *hci, uint16_t handle,
1071
                int interval, int mode)
1072
{
1073
    struct bt_hci_master_link_s *link;
1074

    
1075
    if (bt_hci_handle_bad(hci, handle) || !bt_hci_role_master(hci, handle))
1076
        return -ENODEV;
1077

    
1078
    link = &hci->lm.handle[handle & ~HCI_HANDLE_OFFSET];
1079
    if (link->link->acl_mode != acl_active) {
1080
        bt_hci_event_status(hci, HCI_COMMAND_DISALLOWED);
1081
        return 0;
1082
    }
1083

    
1084
    bt_hci_event_status(hci, HCI_SUCCESS);
1085

    
1086
    qemu_mod_timer(link->acl_mode_timer, qemu_get_clock(vm_clock) +
1087
                            muldiv64(interval * 625, ticks_per_sec, 1000000));
1088
    bt_hci_lmp_mode_change_master(hci, link->link, mode, interval);
1089

    
1090
    return 0;
1091
}
1092

    
1093
static int bt_hci_mode_cancel(struct bt_hci_s *hci, uint16_t handle, int mode)
1094
{
1095
    struct bt_hci_master_link_s *link;
1096

    
1097
    if (bt_hci_handle_bad(hci, handle) || !bt_hci_role_master(hci, handle))
1098
        return -ENODEV;
1099

    
1100
    link = &hci->lm.handle[handle & ~HCI_HANDLE_OFFSET];
1101
    if (link->link->acl_mode != mode) {
1102
        bt_hci_event_status(hci, HCI_COMMAND_DISALLOWED);
1103

    
1104
        return 0;
1105
    }
1106

    
1107
    bt_hci_event_status(hci, HCI_SUCCESS);
1108

    
1109
    qemu_del_timer(link->acl_mode_timer);
1110
    bt_hci_lmp_mode_change_master(hci, link->link, acl_active, 0);
1111

    
1112
    return 0;
1113
}
1114

    
1115
static void bt_hci_mode_tick(void *opaque)
1116
{
1117
    struct bt_link_s *link = opaque;
1118
    struct bt_hci_s *hci = hci_from_device(link->host);
1119

    
1120
    bt_hci_lmp_mode_change_master(hci, link, acl_active, 0);
1121
}
1122

    
1123
static void bt_hci_reset(struct bt_hci_s *hci)
1124
{
1125
    hci->acl_len = 0;
1126
    hci->last_cmd = 0;
1127
    hci->lm.connecting = 0;
1128

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

    
1149
    hci->psb_handle = 0x000;
1150
    hci->asb_handle = 0x000;
1151

    
1152
    /* XXX: qemu_del_timer(sl->acl_mode_timer); for all links */
1153
    qemu_del_timer(hci->lm.inquiry_done);
1154
    qemu_del_timer(hci->lm.inquiry_next);
1155
    qemu_del_timer(hci->conn_accept_timer);
1156
}
1157

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

    
1169
    bt_hci_event_complete(hci, &lv, READ_LOCAL_VERSION_RP_SIZE);
1170
}
1171

    
1172
static void bt_hci_read_local_commands_rp(struct bt_hci_s *hci)
1173
{
1174
    read_local_commands_rp lc = {
1175
        .status                = HCI_SUCCESS,
1176
        .commands        = {
1177
            /* Keep updated! */
1178
            /* Also, keep in sync with hci->device.lmp_caps in bt_new_hci */
1179
            0xbf, 0x80, 0xf9, 0x03, 0xb2, 0xc0, 0x03, 0xc3,
1180
            0x00, 0x0f, 0x80, 0x00, 0xc0, 0x00, 0xe8, 0x13,
1181
            0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
1182
            0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
1183
            0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
1184
            0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
1185
            0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
1186
            0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
1187
        },
1188
    };
1189

    
1190
    bt_hci_event_complete(hci, &lc, READ_LOCAL_COMMANDS_RP_SIZE);
1191
}
1192

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

    
1209
    bt_hci_event_complete(hci, &lf, READ_LOCAL_FEATURES_RP_SIZE);
1210
}
1211

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

    
1226
    bt_hci_event_complete(hci, &lef, READ_LOCAL_EXT_FEATURES_RP_SIZE);
1227
}
1228

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

    
1242
    bt_hci_event_complete(hci, &bs, READ_BUFFER_SIZE_RP_SIZE);
1243
}
1244

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

    
1253
    bt_hci_event_complete(hci, &cc, READ_COUNTRY_CODE_RP_SIZE);
1254

    
1255
    /* ^1. Except France, sorry */
1256
}
1257

    
1258
static void bt_hci_read_bd_addr_rp(struct bt_hci_s *hci)
1259
{
1260
    read_bd_addr_rp ba = {
1261
        .status = HCI_SUCCESS,
1262
        .bdaddr = BAINIT(&hci->device.bd_addr),
1263
    };
1264

    
1265
    bt_hci_event_complete(hci, &ba, READ_BD_ADDR_RP_SIZE);
1266
}
1267

    
1268
static int bt_hci_link_quality_rp(struct bt_hci_s *hci, uint16_t handle)
1269
{
1270
    read_link_quality_rp lq = {
1271
        .status                = HCI_SUCCESS,
1272
        .handle                = HNDL(handle),
1273
        .link_quality        = 0xff,
1274
    };
1275

    
1276
    if (bt_hci_handle_bad(hci, handle))
1277
        lq.status = HCI_NO_CONNECTION;
1278

    
1279
    bt_hci_event_complete(hci, &lq, READ_LINK_QUALITY_RP_SIZE);
1280
    return 0;
1281
}
1282

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

    
1290
static inline void bt_hci_event_complete_conn_cancel(struct bt_hci_s *hci,
1291
                uint8_t status, bdaddr_t *bd_addr)
1292
{
1293
    create_conn_cancel_rp params = {
1294
        .status = status,
1295
        .bdaddr = BAINIT(bd_addr),
1296
    };
1297

    
1298
    bt_hci_event_complete(hci, &params, CREATE_CONN_CANCEL_RP_SIZE);
1299
}
1300

    
1301
static inline void bt_hci_event_auth_complete(struct bt_hci_s *hci,
1302
                uint16_t handle)
1303
{
1304
    evt_auth_complete params = {
1305
        .status = HCI_SUCCESS,
1306
        .handle = HNDL(handle),
1307
    };
1308

    
1309
    bt_hci_event(hci, EVT_AUTH_COMPLETE, &params, EVT_AUTH_COMPLETE_SIZE);
1310
}
1311

    
1312
static inline void bt_hci_event_encrypt_change(struct bt_hci_s *hci,
1313
                uint16_t handle, uint8_t mode)
1314
{
1315
    evt_encrypt_change params = {
1316
        .status                = HCI_SUCCESS,
1317
        .handle                = HNDL(handle),
1318
        .encrypt        = mode,
1319
    };
1320

    
1321
    bt_hci_event(hci, EVT_ENCRYPT_CHANGE, &params, EVT_ENCRYPT_CHANGE_SIZE);
1322
}
1323

    
1324
static inline void bt_hci_event_complete_name_cancel(struct bt_hci_s *hci,
1325
                bdaddr_t *bd_addr)
1326
{
1327
    remote_name_req_cancel_rp params = {
1328
        .status = HCI_INVALID_PARAMETERS,
1329
        .bdaddr = BAINIT(bd_addr),
1330
    };
1331

    
1332
    bt_hci_event_complete(hci, &params, REMOTE_NAME_REQ_CANCEL_RP_SIZE);
1333
}
1334

    
1335
static inline void bt_hci_event_read_remote_ext_features(struct bt_hci_s *hci,
1336
                uint16_t handle)
1337
{
1338
    evt_read_remote_ext_features_complete params = {
1339
        .status = HCI_UNSUPPORTED_FEATURE,
1340
        .handle = HNDL(handle),
1341
        /* Rest uninitialised */
1342
    };
1343

    
1344
    bt_hci_event(hci, EVT_READ_REMOTE_EXT_FEATURES_COMPLETE,
1345
                    &params, EVT_READ_REMOTE_EXT_FEATURES_COMPLETE_SIZE);
1346
}
1347

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

    
1358
    bt_hci_event_complete(hci, &params, READ_LMP_HANDLE_RP_SIZE);
1359
}
1360

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

    
1370
    bt_hci_event_complete(hci, &params, ROLE_DISCOVERY_RP_SIZE);
1371
}
1372

    
1373
static inline void bt_hci_event_complete_flush(struct bt_hci_s *hci,
1374
                int status, uint16_t handle)
1375
{
1376
    flush_rp params = {
1377
        .status                = status,
1378
        .handle                = HNDL(handle),
1379
    };
1380

    
1381
    bt_hci_event_complete(hci, &params, FLUSH_RP_SIZE);
1382
}
1383

    
1384
static inline void bt_hci_event_complete_read_local_name(struct bt_hci_s *hci)
1385
{
1386
    read_local_name_rp params;
1387
    params.status = HCI_SUCCESS;
1388
    memset(params.name, 0, sizeof(params.name));
1389
    if (hci->device.lmp_name)
1390
        pstrcpy(params.name, sizeof(params.name), hci->device.lmp_name);
1391

    
1392
    bt_hci_event_complete(hci, &params, READ_LOCAL_NAME_RP_SIZE);
1393
}
1394

    
1395
static inline void bt_hci_event_complete_read_conn_accept_timeout(
1396
                struct bt_hci_s *hci)
1397
{
1398
    read_conn_accept_timeout_rp params = {
1399
        .status                = HCI_SUCCESS,
1400
        .timeout        = cpu_to_le16(hci->conn_accept_tout),
1401
    };
1402

    
1403
    bt_hci_event_complete(hci, &params, READ_CONN_ACCEPT_TIMEOUT_RP_SIZE);
1404
}
1405

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

    
1415
    bt_hci_event_complete(hci, &params, READ_SCAN_ENABLE_RP_SIZE);
1416
}
1417

    
1418
static inline void bt_hci_event_complete_read_local_class(struct bt_hci_s *hci)
1419
{
1420
    read_class_of_dev_rp params;
1421

    
1422
    params.status = HCI_SUCCESS;
1423
    memcpy(params.dev_class, hci->device.class, sizeof(params.dev_class));
1424

    
1425
    bt_hci_event_complete(hci, &params, READ_CLASS_OF_DEV_RP_SIZE);
1426
}
1427

    
1428
static inline void bt_hci_event_complete_voice_setting(struct bt_hci_s *hci)
1429
{
1430
    read_voice_setting_rp params = {
1431
        .status                = HCI_SUCCESS,
1432
        .voice_setting        = hci->voice_setting,        /* Note: no swapping */
1433
    };
1434

    
1435
    bt_hci_event_complete(hci, &params, READ_VOICE_SETTING_RP_SIZE);
1436
}
1437

    
1438
static inline void bt_hci_event_complete_read_inquiry_mode(
1439
                struct bt_hci_s *hci)
1440
{
1441
    read_inquiry_mode_rp params = {
1442
        .status                = HCI_SUCCESS,
1443
        .mode                = hci->lm.inquiry_mode,
1444
    };
1445

    
1446
    bt_hci_event_complete(hci, &params, READ_INQUIRY_MODE_RP_SIZE);
1447
}
1448

    
1449
static inline void bt_hci_event_num_comp_pkts(struct bt_hci_s *hci,
1450
                uint16_t handle, int packets)
1451
{
1452
    uint16_t buf[EVT_NUM_COMP_PKTS_SIZE(1) / 2 + 1];
1453
    evt_num_comp_pkts *params = (void *) ((uint8_t *) buf + 1);
1454

    
1455
    params->num_hndl                        = 1;
1456
    params->connection->handle                = HNDL(handle);
1457
    params->connection->num_packets        = cpu_to_le16(packets);
1458

    
1459
    bt_hci_event(hci, EVT_NUM_COMP_PKTS, params, EVT_NUM_COMP_PKTS_SIZE(1));
1460
}
1461

    
1462
static void bt_submit_hci(struct HCIInfo *info,
1463
                const uint8_t *data, int length)
1464
{
1465
    struct bt_hci_s *hci = hci_from_info(info);
1466
    uint16_t cmd;
1467
    int paramlen, i;
1468

    
1469
    if (length < HCI_COMMAND_HDR_SIZE)
1470
        goto short_hci;
1471

    
1472
    memcpy(&hci->last_cmd, data, 2);
1473

    
1474
    cmd = (data[1] << 8) | data[0];
1475
    paramlen = data[2];
1476
    if (cmd_opcode_ogf(cmd) == 0 || cmd_opcode_ocf(cmd) == 0)        /* NOP */
1477
        return;
1478

    
1479
    data += HCI_COMMAND_HDR_SIZE;
1480
    length -= HCI_COMMAND_HDR_SIZE;
1481

    
1482
    if (paramlen > length)
1483
        return;
1484

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

    
1495
        if (PARAM(inquiry, length) < 1) {
1496
            bt_hci_event_complete_status(hci, HCI_INVALID_PARAMETERS);
1497
            break;
1498
        }
1499

    
1500
        hci->lm.inquire = 1;
1501
        hci->lm.periodic = 0;
1502
        hci->lm.responses_left = PARAM(inquiry, num_rsp) ?: INT_MAX;
1503
        hci->lm.responses = 0;
1504
        bt_hci_event_status(hci, HCI_SUCCESS);
1505
        bt_hci_inquiry_start(hci, PARAM(inquiry, length));
1506
        break;
1507

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

    
1519
        hci->lm.inquire = 0;
1520
        qemu_del_timer(hci->lm.inquiry_done);
1521
        bt_hci_event_complete_status(hci, HCI_SUCCESS);
1522
        break;
1523

    
1524
    case cmd_opcode_pack(OGF_LINK_CTL, OCF_PERIODIC_INQUIRY):
1525
        LENGTH_CHECK(periodic_inquiry);
1526

    
1527
        if (!(PARAM(periodic_inquiry, length) <
1528
                                PARAM16(periodic_inquiry, min_period) &&
1529
                                PARAM16(periodic_inquiry, min_period) <
1530
                                PARAM16(periodic_inquiry, max_period)) ||
1531
                        PARAM(periodic_inquiry, length) < 1 ||
1532
                        PARAM16(periodic_inquiry, min_period) < 2 ||
1533
                        PARAM16(periodic_inquiry, max_period) < 3) {
1534
            bt_hci_event_complete_status(hci, HCI_INVALID_PARAMETERS);
1535
            break;
1536
        }
1537

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

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

    
1563
    case cmd_opcode_pack(OGF_LINK_CTL, OCF_CREATE_CONN):
1564
        LENGTH_CHECK(create_conn);
1565

    
1566
        if (hci->lm.connecting >= HCI_HANDLES_MAX) {
1567
            bt_hci_event_status(hci, HCI_REJECTED_LIMITED_RESOURCES);
1568
            break;
1569
        }
1570
        bt_hci_event_status(hci, HCI_SUCCESS);
1571

    
1572
        if (bt_hci_connect(hci, &PARAM(create_conn, bdaddr)))
1573
            bt_hci_connection_reject_event(hci, &PARAM(create_conn, bdaddr));
1574
        break;
1575

    
1576
    case cmd_opcode_pack(OGF_LINK_CTL, OCF_DISCONNECT):
1577
        LENGTH_CHECK(disconnect);
1578

    
1579
        if (bt_hci_handle_bad(hci, PARAMHANDLE(disconnect))) {
1580
            bt_hci_event_status(hci, HCI_NO_CONNECTION);
1581
            break;
1582
        }
1583

    
1584
        bt_hci_event_status(hci, HCI_SUCCESS);
1585
        bt_hci_disconnect(hci, PARAMHANDLE(disconnect),
1586
                        PARAM(disconnect, reason));
1587
        break;
1588

    
1589
    case cmd_opcode_pack(OGF_LINK_CTL, OCF_CREATE_CONN_CANCEL):
1590
        LENGTH_CHECK(create_conn_cancel);
1591

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

    
1600
            bt_hci_event_complete_conn_cancel(hci, i < HCI_HANDLES_MAX ?
1601
                            HCI_ACL_CONNECTION_EXISTS : HCI_NO_CONNECTION,
1602
                            &PARAM(create_conn_cancel, bdaddr));
1603
        } else
1604
            bt_hci_event_complete_conn_cancel(hci, HCI_SUCCESS,
1605
                            &PARAM(create_conn_cancel, bdaddr));
1606
        break;
1607

    
1608
    case cmd_opcode_pack(OGF_LINK_CTL, OCF_ACCEPT_CONN_REQ):
1609
        LENGTH_CHECK(accept_conn_req);
1610

    
1611
        if (!hci->conn_req_host ||
1612
                        bacmp(&PARAM(accept_conn_req, bdaddr),
1613
                                &hci->conn_req_host->bd_addr)) {
1614
            bt_hci_event_status(hci, HCI_INVALID_PARAMETERS);
1615
            break;
1616
        }
1617

    
1618
        bt_hci_event_status(hci, HCI_SUCCESS);
1619
        bt_hci_connection_accept(hci, hci->conn_req_host);
1620
        hci->conn_req_host = 0;
1621
        break;
1622

    
1623
    case cmd_opcode_pack(OGF_LINK_CTL, OCF_REJECT_CONN_REQ):
1624
        LENGTH_CHECK(reject_conn_req);
1625

    
1626
        if (!hci->conn_req_host ||
1627
                        bacmp(&PARAM(reject_conn_req, bdaddr),
1628
                                &hci->conn_req_host->bd_addr)) {
1629
            bt_hci_event_status(hci, HCI_INVALID_PARAMETERS);
1630
            break;
1631
        }
1632

    
1633
        bt_hci_event_status(hci, HCI_SUCCESS);
1634
        bt_hci_connection_reject(hci, hci->conn_req_host,
1635
                        PARAM(reject_conn_req, reason));
1636
        bt_hci_connection_reject_event(hci, &hci->conn_req_host->bd_addr);
1637
        hci->conn_req_host = 0;
1638
        break;
1639

    
1640
    case cmd_opcode_pack(OGF_LINK_CTL, OCF_AUTH_REQUESTED):
1641
        LENGTH_CHECK(auth_requested);
1642

    
1643
        if (bt_hci_handle_bad(hci, PARAMHANDLE(auth_requested)))
1644
            bt_hci_event_status(hci, HCI_NO_CONNECTION);
1645
        else {
1646
            bt_hci_event_status(hci, HCI_SUCCESS);
1647
            bt_hci_event_auth_complete(hci, PARAMHANDLE(auth_requested));
1648
        }
1649
        break;
1650

    
1651
    case cmd_opcode_pack(OGF_LINK_CTL, OCF_SET_CONN_ENCRYPT):
1652
        LENGTH_CHECK(set_conn_encrypt);
1653

    
1654
        if (bt_hci_handle_bad(hci, PARAMHANDLE(set_conn_encrypt)))
1655
            bt_hci_event_status(hci, HCI_NO_CONNECTION);
1656
        else {
1657
            bt_hci_event_status(hci, HCI_SUCCESS);
1658
            bt_hci_event_encrypt_change(hci,
1659
                            PARAMHANDLE(set_conn_encrypt),
1660
                            PARAM(set_conn_encrypt, encrypt));
1661
        }
1662
        break;
1663

    
1664
    case cmd_opcode_pack(OGF_LINK_CTL, OCF_REMOTE_NAME_REQ):
1665
        LENGTH_CHECK(remote_name_req);
1666

    
1667
        if (bt_hci_name_req(hci, &PARAM(remote_name_req, bdaddr)))
1668
            bt_hci_event_status(hci, HCI_NO_CONNECTION);
1669
        break;
1670

    
1671
    case cmd_opcode_pack(OGF_LINK_CTL, OCF_REMOTE_NAME_REQ_CANCEL):
1672
        LENGTH_CHECK(remote_name_req_cancel);
1673

    
1674
        bt_hci_event_complete_name_cancel(hci,
1675
                        &PARAM(remote_name_req_cancel, bdaddr));
1676
        break;
1677

    
1678
    case cmd_opcode_pack(OGF_LINK_CTL, OCF_READ_REMOTE_FEATURES):
1679
        LENGTH_CHECK(read_remote_features);
1680

    
1681
        if (bt_hci_features_req(hci, PARAMHANDLE(read_remote_features)))
1682
            bt_hci_event_status(hci, HCI_NO_CONNECTION);
1683
        break;
1684

    
1685
    case cmd_opcode_pack(OGF_LINK_CTL, OCF_READ_REMOTE_EXT_FEATURES):
1686
        LENGTH_CHECK(read_remote_ext_features);
1687

    
1688
        if (bt_hci_handle_bad(hci, PARAMHANDLE(read_remote_ext_features)))
1689
            bt_hci_event_status(hci, HCI_NO_CONNECTION);
1690
        else {
1691
            bt_hci_event_status(hci, HCI_SUCCESS);
1692
            bt_hci_event_read_remote_ext_features(hci,
1693
                            PARAMHANDLE(read_remote_ext_features));
1694
        }
1695
        break;
1696

    
1697
    case cmd_opcode_pack(OGF_LINK_CTL, OCF_READ_REMOTE_VERSION):
1698
        LENGTH_CHECK(read_remote_version);
1699

    
1700
        if (bt_hci_version_req(hci, PARAMHANDLE(read_remote_version)))
1701
            bt_hci_event_status(hci, HCI_NO_CONNECTION);
1702
        break;
1703

    
1704
    case cmd_opcode_pack(OGF_LINK_CTL, OCF_READ_CLOCK_OFFSET):
1705
        LENGTH_CHECK(read_clock_offset);
1706

    
1707
        if (bt_hci_clkoffset_req(hci, PARAMHANDLE(read_clock_offset)))
1708
            bt_hci_event_status(hci, HCI_NO_CONNECTION);
1709
        break;
1710

    
1711
    case cmd_opcode_pack(OGF_LINK_CTL, OCF_READ_LMP_HANDLE):
1712
        LENGTH_CHECK(read_lmp_handle);
1713

    
1714
        /* TODO: */
1715
        bt_hci_event_complete_lmp_handle(hci, PARAMHANDLE(read_lmp_handle));
1716
        break;
1717

    
1718
    case cmd_opcode_pack(OGF_LINK_POLICY, OCF_HOLD_MODE):
1719
        LENGTH_CHECK(hold_mode);
1720

    
1721
        if (PARAM16(hold_mode, min_interval) >
1722
                        PARAM16(hold_mode, max_interval) ||
1723
                        PARAM16(hold_mode, min_interval) < 0x0002 ||
1724
                        PARAM16(hold_mode, max_interval) > 0xff00 ||
1725
                        (PARAM16(hold_mode, min_interval) & 1) ||
1726
                        (PARAM16(hold_mode, max_interval) & 1)) {
1727
            bt_hci_event_status(hci, HCI_INVALID_PARAMETERS);
1728
            break;
1729
        }
1730

    
1731
        if (bt_hci_mode_change(hci, PARAMHANDLE(hold_mode),
1732
                                PARAM16(hold_mode, max_interval),
1733
                                acl_hold))
1734
            bt_hci_event_status(hci, HCI_NO_CONNECTION);
1735
        break;
1736

    
1737
    case cmd_opcode_pack(OGF_LINK_POLICY, OCF_PARK_MODE):
1738
        LENGTH_CHECK(park_mode);
1739

    
1740
        if (PARAM16(park_mode, min_interval) >
1741
                        PARAM16(park_mode, max_interval) ||
1742
                        PARAM16(park_mode, min_interval) < 0x000e ||
1743
                        (PARAM16(park_mode, min_interval) & 1) ||
1744
                        (PARAM16(park_mode, max_interval) & 1)) {
1745
            bt_hci_event_status(hci, HCI_INVALID_PARAMETERS);
1746
            break;
1747
        }
1748

    
1749
        if (bt_hci_mode_change(hci, PARAMHANDLE(park_mode),
1750
                                PARAM16(park_mode, max_interval),
1751
                                acl_parked))
1752
            bt_hci_event_status(hci, HCI_NO_CONNECTION);
1753
        break;
1754

    
1755
    case cmd_opcode_pack(OGF_LINK_POLICY, OCF_EXIT_PARK_MODE):
1756
        LENGTH_CHECK(exit_park_mode);
1757

    
1758
        if (bt_hci_mode_cancel(hci, PARAMHANDLE(exit_park_mode),
1759
                                acl_parked))
1760
            bt_hci_event_status(hci, HCI_NO_CONNECTION);
1761
        break;
1762

    
1763
    case cmd_opcode_pack(OGF_LINK_POLICY, OCF_ROLE_DISCOVERY):
1764
        LENGTH_CHECK(role_discovery);
1765

    
1766
        if (bt_hci_handle_bad(hci, PARAMHANDLE(role_discovery)))
1767
            bt_hci_event_complete_role_discovery(hci,
1768
                            HCI_NO_CONNECTION, PARAMHANDLE(role_discovery), 0);
1769
        else
1770
            bt_hci_event_complete_role_discovery(hci,
1771
                            HCI_SUCCESS, PARAMHANDLE(role_discovery),
1772
                            bt_hci_role_master(hci,
1773
                                    PARAMHANDLE(role_discovery)));
1774
        break;
1775

    
1776
    case cmd_opcode_pack(OGF_HOST_CTL, OCF_SET_EVENT_MASK):
1777
        LENGTH_CHECK(set_event_mask);
1778

    
1779
        memcpy(hci->event_mask, PARAM(set_event_mask, mask), 8);
1780
        bt_hci_event_complete_status(hci, HCI_SUCCESS);
1781
        break;
1782

    
1783
    case cmd_opcode_pack(OGF_HOST_CTL, OCF_RESET):
1784
        bt_hci_reset(hci);
1785
        bt_hci_event_status(hci, HCI_SUCCESS);
1786
        break;
1787

    
1788
    case cmd_opcode_pack(OGF_HOST_CTL, OCF_SET_EVENT_FLT):
1789
        if (length >= 1 && PARAM(set_event_flt, flt_type) == FLT_CLEAR_ALL)
1790
            /* No length check */;
1791
        else
1792
            LENGTH_CHECK(set_event_flt);
1793

    
1794
        /* Filters are not implemented */
1795
        bt_hci_event_complete_status(hci, HCI_SUCCESS);
1796
        break;
1797

    
1798
    case cmd_opcode_pack(OGF_HOST_CTL, OCF_FLUSH):
1799
        LENGTH_CHECK(flush);
1800

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

    
1814
    case cmd_opcode_pack(OGF_HOST_CTL, OCF_CHANGE_LOCAL_NAME):
1815
        LENGTH_CHECK(change_local_name);
1816

    
1817
        if (hci->device.lmp_name)
1818
            qemu_free((void *) hci->device.lmp_name);
1819
        hci->device.lmp_name = pstrdup(PARAM(change_local_name, name),
1820
                        sizeof(PARAM(change_local_name, name)));
1821
        bt_hci_event_complete_status(hci, HCI_SUCCESS);
1822
        break;
1823

    
1824
    case cmd_opcode_pack(OGF_HOST_CTL, OCF_READ_LOCAL_NAME):
1825
        bt_hci_event_complete_read_local_name(hci);
1826
        break;
1827

    
1828
    case cmd_opcode_pack(OGF_HOST_CTL, OCF_READ_CONN_ACCEPT_TIMEOUT):
1829
        bt_hci_event_complete_read_conn_accept_timeout(hci);
1830
        break;
1831

    
1832
    case cmd_opcode_pack(OGF_HOST_CTL, OCF_WRITE_CONN_ACCEPT_TIMEOUT):
1833
        /* TODO */
1834
        LENGTH_CHECK(write_conn_accept_timeout);
1835

    
1836
        if (PARAM16(write_conn_accept_timeout, timeout) < 0x0001 ||
1837
                        PARAM16(write_conn_accept_timeout, timeout) > 0xb540) {
1838
            bt_hci_event_complete_status(hci, HCI_INVALID_PARAMETERS);
1839
            break;
1840
        }
1841

    
1842
        hci->conn_accept_tout = PARAM16(write_conn_accept_timeout, timeout);
1843
        bt_hci_event_complete_status(hci, HCI_SUCCESS);
1844
        break;
1845

    
1846
    case cmd_opcode_pack(OGF_HOST_CTL, OCF_READ_SCAN_ENABLE):
1847
        bt_hci_event_complete_read_scan_enable(hci);
1848
        break;
1849

    
1850
    case cmd_opcode_pack(OGF_HOST_CTL, OCF_WRITE_SCAN_ENABLE):
1851
        LENGTH_CHECK(write_scan_enable);
1852

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

    
1861
    case cmd_opcode_pack(OGF_HOST_CTL, OCF_READ_CLASS_OF_DEV):
1862
        bt_hci_event_complete_read_local_class(hci);
1863
        break;
1864

    
1865
    case cmd_opcode_pack(OGF_HOST_CTL, OCF_WRITE_CLASS_OF_DEV):
1866
        LENGTH_CHECK(write_class_of_dev);
1867

    
1868
        memcpy(hci->device.class, PARAM(write_class_of_dev, dev_class),
1869
                        sizeof(PARAM(write_class_of_dev, dev_class)));
1870
        bt_hci_event_complete_status(hci, HCI_SUCCESS);
1871
        break;
1872

    
1873
    case cmd_opcode_pack(OGF_HOST_CTL, OCF_READ_VOICE_SETTING):
1874
        bt_hci_event_complete_voice_setting(hci);
1875
        break;
1876

    
1877
    case cmd_opcode_pack(OGF_HOST_CTL, OCF_WRITE_VOICE_SETTING):
1878
        LENGTH_CHECK(write_voice_setting);
1879

    
1880
        hci->voice_setting = PARAM(write_voice_setting, voice_setting);
1881
        bt_hci_event_complete_status(hci, HCI_SUCCESS);
1882
        break;
1883

    
1884
    case cmd_opcode_pack(OGF_HOST_CTL, OCF_HOST_NUMBER_OF_COMPLETED_PACKETS):
1885
        if (length < data[0] * 2 + 1)
1886
            goto short_hci;
1887

    
1888
        for (i = 0; i < data[0]; i ++)
1889
            if (bt_hci_handle_bad(hci,
1890
                                    data[i * 2 + 1] | (data[i * 2 + 2] << 8)))
1891
                bt_hci_event_complete_status(hci, HCI_INVALID_PARAMETERS);
1892
        break;
1893

    
1894
    case cmd_opcode_pack(OGF_HOST_CTL, OCF_READ_INQUIRY_MODE):
1895
        /* Only if (local_features[3] & 0x40) && (local_commands[12] & 0x40)
1896
         * else
1897
         *     goto unknown_command */
1898
        bt_hci_event_complete_read_inquiry_mode(hci);
1899
        break;
1900

    
1901
    case cmd_opcode_pack(OGF_HOST_CTL, OCF_WRITE_INQUIRY_MODE):
1902
        /* Only if (local_features[3] & 0x40) && (local_commands[12] & 0x80)
1903
         * else
1904
         *     goto unknown_command */
1905
        LENGTH_CHECK(write_inquiry_mode);
1906

    
1907
        if (PARAM(write_inquiry_mode, mode) > 0x01) {
1908
            bt_hci_event_complete_status(hci, HCI_INVALID_PARAMETERS);
1909
            break;
1910
        }
1911

    
1912
        hci->lm.inquiry_mode = PARAM(write_inquiry_mode, mode);
1913
        bt_hci_event_complete_status(hci, HCI_SUCCESS);
1914
        break;
1915

    
1916
    case cmd_opcode_pack(OGF_INFO_PARAM, OCF_READ_LOCAL_VERSION):
1917
        bt_hci_read_local_version_rp(hci);
1918
        break;
1919

    
1920
    case cmd_opcode_pack(OGF_INFO_PARAM, OCF_READ_LOCAL_COMMANDS):
1921
        bt_hci_read_local_commands_rp(hci);
1922
        break;
1923

    
1924
    case cmd_opcode_pack(OGF_INFO_PARAM, OCF_READ_LOCAL_FEATURES):
1925
        bt_hci_read_local_features_rp(hci);
1926
        break;
1927

    
1928
    case cmd_opcode_pack(OGF_INFO_PARAM, OCF_READ_LOCAL_EXT_FEATURES):
1929
        LENGTH_CHECK(read_local_ext_features);
1930

    
1931
        bt_hci_read_local_ext_features_rp(hci,
1932
                        PARAM(read_local_ext_features, page_num));
1933
        break;
1934

    
1935
    case cmd_opcode_pack(OGF_INFO_PARAM, OCF_READ_BUFFER_SIZE):
1936
        bt_hci_read_buffer_size_rp(hci);
1937
        break;
1938

    
1939
    case cmd_opcode_pack(OGF_INFO_PARAM, OCF_READ_COUNTRY_CODE):
1940
        bt_hci_read_country_code_rp(hci);
1941
        break;
1942

    
1943
    case cmd_opcode_pack(OGF_INFO_PARAM, OCF_READ_BD_ADDR):
1944
        bt_hci_read_bd_addr_rp(hci);
1945
        break;
1946

    
1947
    case cmd_opcode_pack(OGF_STATUS_PARAM, OCF_READ_LINK_QUALITY):
1948
        LENGTH_CHECK(read_link_quality);
1949

    
1950
        bt_hci_link_quality_rp(hci, PARAMHANDLE(read_link_quality));
1951
        break;
1952

    
1953
    default:
1954
        bt_hci_event_status(hci, HCI_UNKNOWN_COMMAND);
1955
        break;
1956

    
1957
    short_hci:
1958
        fprintf(stderr, "%s: HCI packet too short (%iB)\n",
1959
                        __FUNCTION__, length);
1960
        bt_hci_event_status(hci, HCI_INVALID_PARAMETERS);
1961
        break;
1962
    }
1963
}
1964

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

    
1974
    /* TODO: packet flags */
1975
    /* TODO: avoid memcpy'ing */
1976

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

    
1984
    pkt->handle = cpu_to_le16(
1985
                    acl_handle_pack(handle, start ? ACL_START : ACL_CONT));
1986
    pkt->dlen = cpu_to_le16(len);
1987
    hci->info.acl_recv(hci->info.opaque,
1988
                    hci->acl_buf, len + HCI_ACL_HDR_SIZE);
1989
}
1990

    
1991
static void bt_hci_lmp_acl_data_slave(struct bt_link_s *btlink,
1992
                const uint8_t *data, int start, int len)
1993
{
1994
    struct bt_hci_link_s *link = (struct bt_hci_link_s *) btlink;
1995

    
1996
    bt_hci_lmp_acl_data(hci_from_device(btlink->slave),
1997
                    link->handle, data, start, len);
1998
}
1999

    
2000
static void bt_hci_lmp_acl_data_host(struct bt_link_s *link,
2001
                const uint8_t *data, int start, int len)
2002
{
2003
    bt_hci_lmp_acl_data(hci_from_device(link->host),
2004
                    link->handle, data, start, len);
2005
}
2006

    
2007
static void bt_submit_acl(struct HCIInfo *info,
2008
                const uint8_t *data, int length)
2009
{
2010
    struct bt_hci_s *hci = hci_from_info(info);
2011
    uint16_t handle;
2012
    int datalen, flags;
2013
    struct bt_link_s *link;
2014

    
2015
    if (length < HCI_ACL_HDR_SIZE) {
2016
        fprintf(stderr, "%s: ACL packet too short (%iB)\n",
2017
                        __FUNCTION__, length);
2018
        return;
2019
    }
2020

    
2021
    handle = acl_handle((data[1] << 8) | data[0]);
2022
    flags = acl_flags((data[1] << 8) | data[0]);
2023
    datalen = (data[3] << 8) | data[2];
2024
    data += HCI_ACL_HDR_SIZE;
2025
    length -= HCI_ACL_HDR_SIZE;
2026

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

    
2035
    if (datalen > length) {
2036
        fprintf(stderr, "%s: ACL packet too short (%iB < %iB)\n",
2037
                        __FUNCTION__, length, datalen);
2038
        return;
2039
    }
2040

    
2041
    link = hci->lm.handle[handle].link;
2042

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

    
2053
        /* TODO */
2054
    }
2055

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

    
2066
        /* TODO */
2067
    }
2068

    
2069
    /* TODO: increase counter and send EVT_NUM_COMP_PKTS */
2070
    bt_hci_event_num_comp_pkts(hci, handle | HCI_HANDLE_OFFSET, 1);
2071

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

    
2077
static void bt_submit_sco(struct HCIInfo *info,
2078
                const uint8_t *data, int length)
2079
{
2080
    struct bt_hci_s *hci = hci_from_info(info);
2081
    struct bt_link_s *link;
2082
    uint16_t handle;
2083
    int datalen;
2084

    
2085
    if (length < 3)
2086
        return;
2087

    
2088
    handle = acl_handle((data[1] << 8) | data[0]);
2089
    datalen = data[2];
2090
    data += 3;
2091
    length -= 3;
2092

    
2093
    if (bt_hci_handle_bad(hci, handle)) {
2094
        fprintf(stderr, "%s: invalid SCO handle %03x\n",
2095
                        __FUNCTION__, handle);
2096
        return;
2097
    }
2098
    handle &= ~HCI_HANDLE_OFFSET;
2099

    
2100
    if (datalen > length) {
2101
        fprintf(stderr, "%s: SCO packet too short (%iB < %iB)\n",
2102
                        __FUNCTION__, length, datalen);
2103
        return;
2104
    }
2105

    
2106
    link = hci->lm.handle[handle].link;
2107
    /* TODO */
2108

    
2109
    /* TODO: increase counter and send EVT_NUM_COMP_PKTS if synchronous
2110
     * Flow Control is enabled.
2111
     * (See Read/Write_Synchronous_Flow_Control_Enable on page 513 and
2112
     * page 514.)  */
2113
}
2114

    
2115
static uint8_t *bt_hci_evt_packet(void *opaque)
2116
{
2117
    /* TODO: allocate a packet from upper layer */
2118
    struct bt_hci_s *s = opaque;
2119

    
2120
    return s->evt_buf;
2121
}
2122

    
2123
static void bt_hci_evt_submit(void *opaque, int len)
2124
{
2125
    /* TODO: notify upper layer */
2126
    struct bt_hci_s *s = opaque;
2127

    
2128
    return s->info.evt_recv(s->info.opaque, s->evt_buf, len);
2129
}
2130

    
2131
static int bt_hci_bdaddr_set(struct HCIInfo *info, const uint8_t *bd_addr)
2132
{
2133
    struct bt_hci_s *hci = hci_from_info(info);
2134

    
2135
    bacpy(&hci->device.bd_addr, (const bdaddr_t *) bd_addr);
2136
    return 0;
2137
}
2138

    
2139
static void bt_hci_done(struct HCIInfo *info);
2140
static void bt_hci_destroy(struct bt_device_s *dev)
2141
{
2142
    struct bt_hci_s *hci = hci_from_device(dev);
2143

    
2144
    return bt_hci_done(&hci->info);
2145
}
2146

    
2147
struct HCIInfo *bt_new_hci(struct bt_scatternet_s *net)
2148
{
2149
    struct bt_hci_s *s = qemu_mallocz(sizeof(struct bt_hci_s));
2150

    
2151
    s->lm.inquiry_done = qemu_new_timer(vm_clock, bt_hci_inquiry_done, s);
2152
    s->lm.inquiry_next = qemu_new_timer(vm_clock, bt_hci_inquiry_next, s);
2153
    s->conn_accept_timer =
2154
            qemu_new_timer(vm_clock, bt_hci_conn_accept_timeout, s);
2155

    
2156
    s->evt_packet = bt_hci_evt_packet;
2157
    s->evt_submit = bt_hci_evt_submit;
2158
    s->opaque = s;
2159

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

    
2169
    /* Keep updated! */
2170
    /* Also keep in sync with supported commands bitmask in
2171
     * bt_hci_read_local_commands_rp */
2172
    s->device.lmp_caps = 0x8000199b7e85355fll;
2173

    
2174
    bt_hci_reset(s);
2175

    
2176
    s->info.cmd_send = bt_submit_hci;
2177
    s->info.sco_send = bt_submit_sco;
2178
    s->info.acl_send = bt_submit_acl;
2179
    s->info.bdaddr_set = bt_hci_bdaddr_set;
2180

    
2181
    s->device.handle_destroy = bt_hci_destroy;
2182

    
2183
    return &s->info;
2184
}
2185

    
2186
static void bt_hci_done(struct HCIInfo *info)
2187
{
2188
    struct bt_hci_s *hci = hci_from_info(info);
2189
    int handle;
2190

    
2191
    bt_device_done(&hci->device);
2192

    
2193
    if (hci->device.lmp_name)
2194
        qemu_free((void *) hci->device.lmp_name);
2195

    
2196
    /* Be gentle and send DISCONNECT to all connected peers and those
2197
     * currently waiting for us to accept or reject a connection request.
2198
     * This frees the links.  */
2199
    if (hci->conn_req_host)
2200
        return bt_hci_connection_reject(hci,
2201
                        hci->conn_req_host, HCI_OE_POWER_OFF);
2202

    
2203
    for (handle = HCI_HANDLE_OFFSET;
2204
                    handle < (HCI_HANDLE_OFFSET | HCI_HANDLES_MAX); handle ++)
2205
        if (!bt_hci_handle_bad(hci, handle))
2206
            bt_hci_disconnect(hci, handle, HCI_OE_POWER_OFF);
2207

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

    
2217
    qemu_free_timer(hci->lm.inquiry_done);
2218
    qemu_free_timer(hci->lm.inquiry_next);
2219
    qemu_free_timer(hci->conn_accept_timer);
2220

    
2221
    qemu_free(hci);
2222
}