Revision 806b6024 hw/usb-bt.c
b/hw/usb-bt.c | ||
---|---|---|
617 | 617 |
qemu_free(s); |
618 | 618 |
} |
619 | 619 |
|
620 |
static int usb_bt_initfn(USBDevice *dev) |
|
621 |
{ |
|
622 |
struct USBBtState *s = DO_UPCAST(struct USBBtState, dev, dev); |
|
623 |
s->dev.speed = USB_SPEED_HIGH; |
|
624 |
return 0; |
|
625 |
} |
|
626 |
|
|
620 | 627 |
USBDevice *usb_bt_init(HCIInfo *hci) |
621 | 628 |
{ |
629 |
USBDevice *dev; |
|
622 | 630 |
struct USBBtState *s; |
623 | 631 |
|
624 | 632 |
if (!hci) |
625 | 633 |
return NULL; |
626 |
s = qemu_mallocz(sizeof(struct USBBtState)); |
|
634 |
dev = usb_create_simple(NULL /* FIXME */, "QEMU BT dongle"); |
|
635 |
s = DO_UPCAST(struct USBBtState, dev, dev); |
|
627 | 636 |
s->dev.opaque = s; |
628 |
s->dev.speed = USB_SPEED_HIGH; |
|
629 |
s->dev.handle_packet = usb_generic_handle_packet; |
|
630 |
pstrcpy(s->dev.devname, sizeof(s->dev.devname), "QEMU BT dongle"); |
|
631 |
|
|
632 |
s->dev.handle_reset = usb_bt_handle_reset; |
|
633 |
s->dev.handle_control = usb_bt_handle_control; |
|
634 |
s->dev.handle_data = usb_bt_handle_data; |
|
635 |
s->dev.handle_destroy = usb_bt_handle_destroy; |
|
636 | 637 |
|
637 | 638 |
s->hci = hci; |
638 | 639 |
s->hci->opaque = s; |
... | ... | |
641 | 642 |
|
642 | 643 |
usb_bt_handle_reset(&s->dev); |
643 | 644 |
|
644 |
return &s->dev; |
|
645 |
return dev; |
|
646 |
} |
|
647 |
|
|
648 |
static struct USBDeviceInfo bt_info = { |
|
649 |
.qdev.name = "QEMU BT dongle", |
|
650 |
.qdev.size = sizeof(struct USBBtState), |
|
651 |
.init = usb_bt_initfn, |
|
652 |
.handle_packet = usb_generic_handle_packet, |
|
653 |
.handle_reset = usb_bt_handle_reset, |
|
654 |
.handle_control = usb_bt_handle_control, |
|
655 |
.handle_data = usb_bt_handle_data, |
|
656 |
.handle_destroy = usb_bt_handle_destroy, |
|
657 |
}; |
|
658 |
|
|
659 |
static void usb_bt_register_devices(void) |
|
660 |
{ |
|
661 |
usb_qdev_register(&bt_info); |
|
645 | 662 |
} |
663 |
device_init(usb_bt_register_devices) |
Also available in: Unified diff