Statistics
| Branch: | Revision:

root / hw / bt-hci.c @ 99a0949b

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, see <http://www.gnu.org/licenses/>.
19
 */
20

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

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

    
33
    uint8_t acl_buf[4096];
34
    int acl_len;
35

    
36
    uint16_t asb_handle;
37
    uint16_t psb_handle;
38

    
39
    int last_cmd;        /* Note: Always little-endian */
40

    
41
    struct bt_device_s *conn_req_host;
42

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

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

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

    
73
    struct HCIInfo info;
74
    struct bt_device_s device;
75
};
76

    
77
#define DEFAULT_RSSI_DBM        20
78

    
79
#define hci_from_info(ptr)        container_of((ptr), struct bt_hci_s, info)
80
#define hci_from_device(ptr)        container_of((ptr), struct bt_hci_s, device)
81

    
82
struct bt_hci_link_s {
83
    struct bt_link_s btlink;
84
    uint16_t handle;        /* Local */
85
};
86

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

94
    if (length < 1)
95
        return;
96

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

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

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

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

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

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

159
    case LMP_HOST_CONNECTION_REQ:
160
        break;
161

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

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

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

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

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

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

241
            error = HCI_UNIT_LINK_KEY_USED;
242
            goto not_accepted;
243
        }
244
        break;
245

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

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

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

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

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

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

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

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

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

375
    if (resp == 0)
376
        return;
377

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

384
    respdata[0] <<= 1;
385
    respdata[0] |= tr;
386
}
387

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

394
    slave = 0;
395
#if 0
396
    slave = net->slave;
397
#endif
398

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

    
415
/* HCI layer emulation */
416

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

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

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

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

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

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

    
453
    return &packet[2];
454
}
455

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

    
461
    if (!packet)
462
        return;
463

    
464
    if (len)
465
        memcpy(packet, params, len);
466

    
467
    hci->evt_submit(hci->opaque, len + 2);
468
}
469

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

    
478
    bt_hci_event(hci, EVT_CMD_STATUS, &params, EVT_CMD_STATUS_SIZE);
479
}
480

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

    
488
    if (!packet)
489
        return;
490

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

    
496
    hci->evt_submit(hci->opaque, len + EVT_CMD_COMPLETE_SIZE + 2);
497
}
498

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

    
504
    if (!hci->lm.periodic)
505
        hci->lm.inquire = 0;
506

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

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

    
531
    bt_hci_event(hci, EVT_INQUIRY_RESULT, &params, INQUIRY_INFO_SIZE);
532
}
533

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

    
550
    bt_hci_event(hci, EVT_INQUIRY_RESULT_WITH_RSSI,
551
                    &params, INQUIRY_INFO_WITH_RSSI_SIZE);
552
}
553

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

    
560
    hci->lm.responses_left --;
561
    hci->lm.responses ++;
562

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

    
675
static int bt_hci_connect(struct bt_hci_s *hci, a_bdaddr *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
                a_bdaddr *bdaddr)
710
{
711
    evt_conn_complete params;
712

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

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

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

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

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

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

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

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

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

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

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

    
792
static void bt_hci_conn_accept_timeout(void *opaque)
793
{
794
    struct bt_hci_s *hci = (struct bt_hci_s *) opaque;
795

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

    
802
    /* TODO */
803
}
804

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

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

    
823
    return 1;
824
}
825

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

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

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

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

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

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

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

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

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

    
888
        goto complete;
889
    }
890

    
891
    btlink->host->reject_reason = reason;
892
    btlink->host->lmp_disconnect_master(btlink);
893

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

    
898
complete:
899
    bt_hci_lmp_link_teardown(hci, handle);
900

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

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

    
915
    bt_hci_lmp_link_teardown(hci, handle);
916

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

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

    
931
    qemu_free(link);
932

    
933
    bt_hci_lmp_link_teardown(hci, handle);
934

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

    
942
static int bt_hci_name_req(struct bt_hci_s *hci, a_bdaddr *bdaddr)
943
{
944
    struct bt_device_s *slave;
945
    evt_remote_name_req_complete params;
946
    int len;
947

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

    
954
    bt_hci_event_status(hci, HCI_SUCCESS);
955

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

    
964
    return 0;
965
}
966

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

    
972
    if (bt_hci_handle_bad(hci, handle))
973
        return -ENODEV;
974

    
975
    slave = bt_hci_remote_dev(hci, handle);
976

    
977
    bt_hci_event_status(hci, HCI_SUCCESS);
978

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

    
992
    return 0;
993
}
994

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

    
1000
    if (bt_hci_handle_bad(hci, handle))
1001
        return -ENODEV;
1002

    
1003
    slave = bt_hci_remote_dev(hci, handle);
1004

    
1005
    bt_hci_event_status(hci, HCI_SUCCESS);
1006

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

    
1015
    return 0;
1016
}
1017

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

    
1023
    if (bt_hci_handle_bad(hci, handle))
1024
        return -ENODEV;
1025

    
1026
    slave = bt_hci_remote_dev(hci, handle);
1027

    
1028
    bt_hci_event_status(hci, HCI_SUCCESS);
1029

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

    
1037
    return 0;
1038
}
1039

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

    
1050
    bt_hci_event(hci, EVT_MODE_CHANGE, &params, EVT_MODE_CHANGE_SIZE);
1051
}
1052

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

    
1059
    bt_hci_event_mode(hci, link, link->handle);
1060

    
1061
    link->slave->lmp_mode_change(link);
1062
}
1063

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

    
1069
    bt_hci_event_mode(hci, btlink, link->handle);
1070
}
1071

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

    
1077
    if (bt_hci_handle_bad(hci, handle) || !bt_hci_role_master(hci, handle))
1078
        return -ENODEV;
1079

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

    
1086
    bt_hci_event_status(hci, HCI_SUCCESS);
1087

    
1088
    qemu_mod_timer(link->acl_mode_timer, qemu_get_clock(vm_clock) +
1089
                   muldiv64(interval * 625, get_ticks_per_sec(), 1000000));
1090
    bt_hci_lmp_mode_change_master(hci, link->link, mode, interval);
1091

    
1092
    return 0;
1093
}
1094

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

    
1099
    if (bt_hci_handle_bad(hci, handle) || !bt_hci_role_master(hci, handle))
1100
        return -ENODEV;
1101

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

    
1106
        return 0;
1107
    }
1108

    
1109
    bt_hci_event_status(hci, HCI_SUCCESS);
1110

    
1111
    qemu_del_timer(link->acl_mode_timer);
1112
    bt_hci_lmp_mode_change_master(hci, link->link, acl_active, 0);
1113

    
1114
    return 0;
1115
}
1116

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

    
1122
    bt_hci_lmp_mode_change_master(hci, link, acl_active, 0);
1123
}
1124

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

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

    
1151
    hci->psb_handle = 0x000;
1152
    hci->asb_handle = 0x000;
1153

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

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

    
1171
    bt_hci_event_complete(hci, &lv, READ_LOCAL_VERSION_RP_SIZE);
1172
}
1173

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

    
1192
    bt_hci_event_complete(hci, &lc, READ_LOCAL_COMMANDS_RP_SIZE);
1193
}
1194

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

    
1211
    bt_hci_event_complete(hci, &lf, READ_LOCAL_FEATURES_RP_SIZE);
1212
}
1213

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

    
1228
    bt_hci_event_complete(hci, &lef, READ_LOCAL_EXT_FEATURES_RP_SIZE);
1229
}
1230

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

    
1244
    bt_hci_event_complete(hci, &bs, READ_BUFFER_SIZE_RP_SIZE);
1245
}
1246

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

    
1255
    bt_hci_event_complete(hci, &cc, READ_COUNTRY_CODE_RP_SIZE);
1256

    
1257
    /* ^1. Except France, sorry */
1258
}
1259

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

    
1267
    bt_hci_event_complete(hci, &ba, READ_BD_ADDR_RP_SIZE);
1268
}
1269

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

    
1278
    if (bt_hci_handle_bad(hci, handle))
1279
        lq.status = HCI_NO_CONNECTION;
1280

    
1281
    bt_hci_event_complete(hci, &lq, READ_LINK_QUALITY_RP_SIZE);
1282
    return 0;
1283
}
1284

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

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

    
1300
    bt_hci_event_complete(hci, &params, CREATE_CONN_CANCEL_RP_SIZE);
1301
}
1302

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

    
1311
    bt_hci_event(hci, EVT_AUTH_COMPLETE, &params, EVT_AUTH_COMPLETE_SIZE);
1312
}
1313

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

    
1323
    bt_hci_event(hci, EVT_ENCRYPT_CHANGE, &params, EVT_ENCRYPT_CHANGE_SIZE);
1324
}
1325

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

    
1334
    bt_hci_event_complete(hci, &params, REMOTE_NAME_REQ_CANCEL_RP_SIZE);
1335
}
1336

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

    
1346
    bt_hci_event(hci, EVT_READ_REMOTE_EXT_FEATURES_COMPLETE,
1347
                    &params, EVT_READ_REMOTE_EXT_FEATURES_COMPLETE_SIZE);
1348
}
1349

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

    
1360
    bt_hci_event_complete(hci, &params, READ_LMP_HANDLE_RP_SIZE);
1361
}
1362

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

    
1372
    bt_hci_event_complete(hci, &params, ROLE_DISCOVERY_RP_SIZE);
1373
}
1374

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

    
1383
    bt_hci_event_complete(hci, &params, FLUSH_RP_SIZE);
1384
}
1385

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

    
1394
    bt_hci_event_complete(hci, &params, READ_LOCAL_NAME_RP_SIZE);
1395
}
1396

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

    
1405
    bt_hci_event_complete(hci, &params, READ_CONN_ACCEPT_TIMEOUT_RP_SIZE);
1406
}
1407

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

    
1417
    bt_hci_event_complete(hci, &params, READ_SCAN_ENABLE_RP_SIZE);
1418
}
1419

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

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

    
1427
    bt_hci_event_complete(hci, &params, READ_CLASS_OF_DEV_RP_SIZE);
1428
}
1429

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

    
1437
    bt_hci_event_complete(hci, &params, READ_VOICE_SETTING_RP_SIZE);
1438
}
1439

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

    
1448
    bt_hci_event_complete(hci, &params, READ_INQUIRY_MODE_RP_SIZE);
1449
}
1450

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

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

    
1461
    bt_hci_event(hci, EVT_NUM_COMP_PKTS, params, EVT_NUM_COMP_PKTS_SIZE(1));
1462
}
1463

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

    
1471
    if (length < HCI_COMMAND_HDR_SIZE)
1472
        goto short_hci;
1473

    
1474
    memcpy(&hci->last_cmd, data, 2);
1475

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

    
1481
    data += HCI_COMMAND_HDR_SIZE;
1482
    length -= HCI_COMMAND_HDR_SIZE;
1483

    
1484
    if (paramlen > length)
1485
        return;
1486

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

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

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

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

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

    
1526
    case cmd_opcode_pack(OGF_LINK_CTL, OCF_PERIODIC_INQUIRY):
1527
        LENGTH_CHECK(periodic_inquiry);
1528

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

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

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

    
1565
    case cmd_opcode_pack(OGF_LINK_CTL, OCF_CREATE_CONN):
1566
        LENGTH_CHECK(create_conn);
1567

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

    
1574
        if (bt_hci_connect(hci, &PARAM(create_conn, bdaddr)))
1575
            bt_hci_connection_reject_event(hci, &PARAM(create_conn, bdaddr));
1576
        break;
1577

    
1578
    case cmd_opcode_pack(OGF_LINK_CTL, OCF_DISCONNECT):
1579
        LENGTH_CHECK(disconnect);
1580

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

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

    
1591
    case cmd_opcode_pack(OGF_LINK_CTL, OCF_CREATE_CONN_CANCEL):
1592
        LENGTH_CHECK(create_conn_cancel);
1593

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

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

    
1610
    case cmd_opcode_pack(OGF_LINK_CTL, OCF_ACCEPT_CONN_REQ):
1611
        LENGTH_CHECK(accept_conn_req);
1612

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

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

    
1625
    case cmd_opcode_pack(OGF_LINK_CTL, OCF_REJECT_CONN_REQ):
1626
        LENGTH_CHECK(reject_conn_req);
1627

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

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

    
1642
    case cmd_opcode_pack(OGF_LINK_CTL, OCF_AUTH_REQUESTED):
1643
        LENGTH_CHECK(auth_requested);
1644

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

    
1653
    case cmd_opcode_pack(OGF_LINK_CTL, OCF_SET_CONN_ENCRYPT):
1654
        LENGTH_CHECK(set_conn_encrypt);
1655

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

    
1666
    case cmd_opcode_pack(OGF_LINK_CTL, OCF_REMOTE_NAME_REQ):
1667
        LENGTH_CHECK(remote_name_req);
1668

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

    
1673
    case cmd_opcode_pack(OGF_LINK_CTL, OCF_REMOTE_NAME_REQ_CANCEL):
1674
        LENGTH_CHECK(remote_name_req_cancel);
1675

    
1676
        bt_hci_event_complete_name_cancel(hci,
1677
                        &PARAM(remote_name_req_cancel, bdaddr));
1678
        break;
1679

    
1680
    case cmd_opcode_pack(OGF_LINK_CTL, OCF_READ_REMOTE_FEATURES):
1681
        LENGTH_CHECK(read_remote_features);
1682

    
1683
        if (bt_hci_features_req(hci, PARAMHANDLE(read_remote_features)))
1684
            bt_hci_event_status(hci, HCI_NO_CONNECTION);
1685
        break;
1686

    
1687
    case cmd_opcode_pack(OGF_LINK_CTL, OCF_READ_REMOTE_EXT_FEATURES):
1688
        LENGTH_CHECK(read_remote_ext_features);
1689

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

    
1699
    case cmd_opcode_pack(OGF_LINK_CTL, OCF_READ_REMOTE_VERSION):
1700
        LENGTH_CHECK(read_remote_version);
1701

    
1702
        if (bt_hci_version_req(hci, PARAMHANDLE(read_remote_version)))
1703
            bt_hci_event_status(hci, HCI_NO_CONNECTION);
1704
        break;
1705

    
1706
    case cmd_opcode_pack(OGF_LINK_CTL, OCF_READ_CLOCK_OFFSET):
1707
        LENGTH_CHECK(read_clock_offset);
1708

    
1709
        if (bt_hci_clkoffset_req(hci, PARAMHANDLE(read_clock_offset)))
1710
            bt_hci_event_status(hci, HCI_NO_CONNECTION);
1711
        break;
1712

    
1713
    case cmd_opcode_pack(OGF_LINK_CTL, OCF_READ_LMP_HANDLE):
1714
        LENGTH_CHECK(read_lmp_handle);
1715

    
1716
        /* TODO: */
1717
        bt_hci_event_complete_lmp_handle(hci, PARAMHANDLE(read_lmp_handle));
1718
        break;
1719

    
1720
    case cmd_opcode_pack(OGF_LINK_POLICY, OCF_HOLD_MODE):
1721
        LENGTH_CHECK(hold_mode);
1722

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

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

    
1739
    case cmd_opcode_pack(OGF_LINK_POLICY, OCF_PARK_MODE):
1740
        LENGTH_CHECK(park_mode);
1741

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

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

    
1757
    case cmd_opcode_pack(OGF_LINK_POLICY, OCF_EXIT_PARK_MODE):
1758
        LENGTH_CHECK(exit_park_mode);
1759

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

    
1765
    case cmd_opcode_pack(OGF_LINK_POLICY, OCF_ROLE_DISCOVERY):
1766
        LENGTH_CHECK(role_discovery);
1767

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

    
1778
    case cmd_opcode_pack(OGF_HOST_CTL, OCF_SET_EVENT_MASK):
1779
        LENGTH_CHECK(set_event_mask);
1780

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

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

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

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

    
1800
    case cmd_opcode_pack(OGF_HOST_CTL, OCF_FLUSH):
1801
        LENGTH_CHECK(flush);
1802

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

    
1816
    case cmd_opcode_pack(OGF_HOST_CTL, OCF_CHANGE_LOCAL_NAME):
1817
        LENGTH_CHECK(change_local_name);
1818

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

    
1826
    case cmd_opcode_pack(OGF_HOST_CTL, OCF_READ_LOCAL_NAME):
1827
        bt_hci_event_complete_read_local_name(hci);
1828
        break;
1829

    
1830
    case cmd_opcode_pack(OGF_HOST_CTL, OCF_READ_CONN_ACCEPT_TIMEOUT):
1831
        bt_hci_event_complete_read_conn_accept_timeout(hci);
1832
        break;
1833

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

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

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

    
1848
    case cmd_opcode_pack(OGF_HOST_CTL, OCF_READ_SCAN_ENABLE):
1849
        bt_hci_event_complete_read_scan_enable(hci);
1850
        break;
1851

    
1852
    case cmd_opcode_pack(OGF_HOST_CTL, OCF_WRITE_SCAN_ENABLE):
1853
        LENGTH_CHECK(write_scan_enable);
1854

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

    
1863
    case cmd_opcode_pack(OGF_HOST_CTL, OCF_READ_CLASS_OF_DEV):
1864
        bt_hci_event_complete_read_local_class(hci);
1865
        break;
1866

    
1867
    case cmd_opcode_pack(OGF_HOST_CTL, OCF_WRITE_CLASS_OF_DEV):
1868
        LENGTH_CHECK(write_class_of_dev);
1869

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

    
1875
    case cmd_opcode_pack(OGF_HOST_CTL, OCF_READ_VOICE_SETTING):
1876
        bt_hci_event_complete_voice_setting(hci);
1877
        break;
1878

    
1879
    case cmd_opcode_pack(OGF_HOST_CTL, OCF_WRITE_VOICE_SETTING):
1880
        LENGTH_CHECK(write_voice_setting);
1881

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

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

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

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

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

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

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

    
1918
    case cmd_opcode_pack(OGF_INFO_PARAM, OCF_READ_LOCAL_VERSION):
1919
        bt_hci_read_local_version_rp(hci);
1920
        break;
1921

    
1922
    case cmd_opcode_pack(OGF_INFO_PARAM, OCF_READ_LOCAL_COMMANDS):
1923
        bt_hci_read_local_commands_rp(hci);
1924
        break;
1925

    
1926
    case cmd_opcode_pack(OGF_INFO_PARAM, OCF_READ_LOCAL_FEATURES):
1927
        bt_hci_read_local_features_rp(hci);
1928
        break;
1929

    
1930
    case cmd_opcode_pack(OGF_INFO_PARAM, OCF_READ_LOCAL_EXT_FEATURES):
1931
        LENGTH_CHECK(read_local_ext_features);
1932

    
1933
        bt_hci_read_local_ext_features_rp(hci,
1934
                        PARAM(read_local_ext_features, page_num));
1935
        break;
1936

    
1937
    case cmd_opcode_pack(OGF_INFO_PARAM, OCF_READ_BUFFER_SIZE):
1938
        bt_hci_read_buffer_size_rp(hci);
1939
        break;
1940

    
1941
    case cmd_opcode_pack(OGF_INFO_PARAM, OCF_READ_COUNTRY_CODE):
1942
        bt_hci_read_country_code_rp(hci);
1943
        break;
1944

    
1945
    case cmd_opcode_pack(OGF_INFO_PARAM, OCF_READ_BD_ADDR):
1946
        bt_hci_read_bd_addr_rp(hci);
1947
        break;
1948

    
1949
    case cmd_opcode_pack(OGF_STATUS_PARAM, OCF_READ_LINK_QUALITY):
1950
        LENGTH_CHECK(read_link_quality);
1951

    
1952
        bt_hci_link_quality_rp(hci, PARAMHANDLE(read_link_quality));
1953
        break;
1954

    
1955
    default:
1956
        bt_hci_event_status(hci, HCI_UNKNOWN_COMMAND);
1957
        break;
1958

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

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

    
1976
    /* TODO: packet flags */
1977
    /* TODO: avoid memcpy'ing */
1978

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

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

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

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

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

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

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

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

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

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

    
2043
    link = hci->lm.handle[handle].link;
2044

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

    
2055
        /* TODO */
2056
    }
2057

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

    
2068
        /* TODO */
2069
    }
2070

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

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

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

    
2087
    if (length < 3)
2088
        return;
2089

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

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

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

    
2108
    link = hci->lm.handle[handle].link;
2109
    /* TODO */
2110

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

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

    
2122
    return s->evt_buf;
2123
}
2124

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

    
2130
    s->info.evt_recv(s->info.opaque, s->evt_buf, len);
2131
}
2132

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

    
2137
    bacpy(&hci->device.bd_addr, (const a_bdaddr *) bd_addr);
2138
    return 0;
2139
}
2140

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

    
2146
    bt_hci_done(&hci->info);
2147
}
2148

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

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

    
2158
    s->evt_packet = bt_hci_evt_packet;
2159
    s->evt_submit = bt_hci_evt_submit;
2160
    s->opaque = s;
2161

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

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

    
2176
    bt_hci_reset(s);
2177

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

    
2183
    s->device.handle_destroy = bt_hci_destroy;
2184

    
2185
    return &s->info;
2186
}
2187

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

    
2193
    bt_device_done(&hci->device);
2194

    
2195
    if (hci->device.lmp_name)
2196
        qemu_free((void *) hci->device.lmp_name);
2197

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

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

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

    
2221
    qemu_free_timer(hci->lm.inquiry_done);
2222
    qemu_free_timer(hci->lm.inquiry_next);
2223
    qemu_free_timer(hci->conn_accept_timer);
2224

    
2225
    qemu_free(hci);
2226
}