usb: ohci bugfix, switch core to unrealize, xhci property cleanup
-----BEGIN PGP SIGNATURE----- Version: GnuPG v2.0.22 (GNU/Linux) iQIcBAABAgAGBQJYrwHVAAoJEEy22O7T6HE4tlQP/23j2jKcqveKXDqaXai1HEDl kGpJe8eeLicb3ID3sdGsbQ4HAoeLmrKSPsFZNDb6lA4kTAKxBpUNugaa3xwPZx1F od2nfYfslQTYx/jV5Cbowj8d4H9KemKc8UB75B9vUiM5oS7icR17l/XvSzeLETSw pUR6G4snWEBnezuh5eAdMfbZgqFhKaPhw4a0jzLmMse8N4mFMHfWD/LSdq21Xg5L es/7T4etBEu+7TmJ7rGBxE3XaHTT9wjz30q6+qgfP0WPlf+IYE7GbxK02b0kifk4 mA2iOo4PzE44cv4Cj/ZK0s7TNNcHm5nEcx0j9na9cRXZgplq4LmkpJFTA0JDI1qW OBd4D3fs5nT+Y/WXu/5BChDALzJyN2SBd1hHy6hjY4o7PtobAM5ciBBDiMGsET/G djOibJqID4g0cL2BxkDa402kSkyY+/P+XDVvpHlm/6UBwrDfATvi4EwH//smA50P 5ZKiNy9J/iGjSt/jbFG3blIgBOCpzmqNHY2JEq/xqy/DghInXU8VG4Un9baZI7V5 HIrxYnot2fkVZGbIdm0z7Ghy3zn1ytv1jDo3HUzvWSSA+4dZYDIM23XdGqY6vwdR MCoHuzJ2V20kGmJFcI5Yo++AMO0JntMUWZjcWGa+2cS8vM4Uq+mP9r9IaSjaW6b6 hqngPAMi/93obSWjxV8Y =GbTj -----END PGP SIGNATURE----- Merge remote-tracking branch 'remotes/kraxel/tags/pull-usb-20170223-1' into staging usb: ohci bugfix, switch core to unrealize, xhci property cleanup # gpg: Signature made Thu 23 Feb 2017 15:37:57 GMT # gpg: using RSA key 0x4CB6D8EED3E87138 # gpg: Good signature from "Gerd Hoffmann (work) <kraxel@redhat.com>" # gpg: aka "Gerd Hoffmann <gerd@kraxel.org>" # gpg: aka "Gerd Hoffmann (private) <kraxel@gmail.com>" # Primary key fingerprint: A032 8CFF B93A 17A7 9901 FE7D 4CB6 D8EE D3E8 7138 * remotes/kraxel/tags/pull-usb-20170223-1: xhci: properties cleanup usb: ohci: fix error return code in servicing td usb: replace handle_destroy with unrealize Signed-off-by: Peter Maydell <peter.maydell@linaro.org>
This commit is contained in:
commit
5842b55fd4
@ -136,11 +136,12 @@ USBDevice *usb_device_find_device(USBDevice *dev, uint8_t addr)
|
||||
return NULL;
|
||||
}
|
||||
|
||||
static void usb_device_handle_destroy(USBDevice *dev)
|
||||
static void usb_device_unrealize(USBDevice *dev, Error **errp)
|
||||
{
|
||||
USBDeviceClass *klass = USB_DEVICE_GET_CLASS(dev);
|
||||
if (klass->handle_destroy) {
|
||||
klass->handle_destroy(dev);
|
||||
|
||||
if (klass->unrealize) {
|
||||
klass->unrealize(dev, errp);
|
||||
}
|
||||
}
|
||||
|
||||
@ -291,7 +292,7 @@ static void usb_qdev_unrealize(DeviceState *qdev, Error **errp)
|
||||
if (dev->attached) {
|
||||
usb_device_detach(dev);
|
||||
}
|
||||
usb_device_handle_destroy(dev);
|
||||
usb_device_unrealize(dev, errp);
|
||||
if (dev->port) {
|
||||
usb_release_port(dev);
|
||||
}
|
||||
|
@ -617,7 +617,7 @@ static void usb_audio_handle_data(USBDevice *dev, USBPacket *p)
|
||||
}
|
||||
}
|
||||
|
||||
static void usb_audio_handle_destroy(USBDevice *dev)
|
||||
static void usb_audio_unrealize(USBDevice *dev, Error **errp)
|
||||
{
|
||||
USBAudioState *s = USB_AUDIO(dev);
|
||||
|
||||
@ -683,7 +683,7 @@ static void usb_audio_class_init(ObjectClass *klass, void *data)
|
||||
k->handle_reset = usb_audio_handle_reset;
|
||||
k->handle_control = usb_audio_handle_control;
|
||||
k->handle_data = usb_audio_handle_data;
|
||||
k->handle_destroy = usb_audio_handle_destroy;
|
||||
k->unrealize = usb_audio_unrealize;
|
||||
k->set_interface = usb_audio_set_interface;
|
||||
}
|
||||
|
||||
|
@ -496,7 +496,7 @@ static void usb_bt_out_hci_packet_acl(void *opaque,
|
||||
usb_bt_fifo_enqueue(&s->acl, data, len);
|
||||
}
|
||||
|
||||
static void usb_bt_handle_destroy(USBDevice *dev)
|
||||
static void usb_bt_unrealize(USBDevice *dev, Error **errp)
|
||||
{
|
||||
struct USBBtState *s = (struct USBBtState *) dev->opaque;
|
||||
|
||||
@ -559,7 +559,7 @@ static void usb_bt_class_initfn(ObjectClass *klass, void *data)
|
||||
uc->handle_reset = usb_bt_handle_reset;
|
||||
uc->handle_control = usb_bt_handle_control;
|
||||
uc->handle_data = usb_bt_handle_data;
|
||||
uc->handle_destroy = usb_bt_handle_destroy;
|
||||
uc->unrealize = usb_bt_unrealize;
|
||||
dc->vmsd = &vmstate_usb_bt;
|
||||
set_bit(DEVICE_CATEGORY_NETWORK, dc->categories);
|
||||
}
|
||||
|
@ -690,7 +690,7 @@ static void usb_hid_handle_data(USBDevice *dev, USBPacket *p)
|
||||
}
|
||||
}
|
||||
|
||||
static void usb_hid_handle_destroy(USBDevice *dev)
|
||||
static void usb_hid_unrealize(USBDevice *dev, Error **errp)
|
||||
{
|
||||
USBHIDState *us = USB_HID(dev);
|
||||
|
||||
@ -785,7 +785,7 @@ static void usb_hid_class_initfn(ObjectClass *klass, void *data)
|
||||
uc->handle_reset = usb_hid_handle_reset;
|
||||
uc->handle_control = usb_hid_handle_control;
|
||||
uc->handle_data = usb_hid_handle_data;
|
||||
uc->handle_destroy = usb_hid_handle_destroy;
|
||||
uc->unrealize = usb_hid_unrealize;
|
||||
uc->handle_attach = usb_desc_attach;
|
||||
}
|
||||
|
||||
|
@ -497,7 +497,7 @@ static void usb_hub_handle_data(USBDevice *dev, USBPacket *p)
|
||||
}
|
||||
}
|
||||
|
||||
static void usb_hub_handle_destroy(USBDevice *dev)
|
||||
static void usb_hub_unrealize(USBDevice *dev, Error **errp)
|
||||
{
|
||||
USBHubState *s = (USBHubState *)dev;
|
||||
int i;
|
||||
@ -575,7 +575,7 @@ static void usb_hub_class_initfn(ObjectClass *klass, void *data)
|
||||
uc->handle_reset = usb_hub_handle_reset;
|
||||
uc->handle_control = usb_hub_handle_control;
|
||||
uc->handle_data = usb_hub_handle_data;
|
||||
uc->handle_destroy = usb_hub_handle_destroy;
|
||||
uc->unrealize = usb_hub_unrealize;
|
||||
set_bit(DEVICE_CATEGORY_BRIDGE, dc->categories);
|
||||
dc->fw_name = "hub";
|
||||
dc->vmsd = &vmstate_usb_hub;
|
||||
|
@ -1324,7 +1324,7 @@ static void usbnet_cleanup(NetClientState *nc)
|
||||
s->nic = NULL;
|
||||
}
|
||||
|
||||
static void usb_net_handle_destroy(USBDevice *dev)
|
||||
static void usb_net_unrealize(USBDevice *dev, Error **errp)
|
||||
{
|
||||
USBNetState *s = (USBNetState *) dev;
|
||||
|
||||
@ -1428,7 +1428,7 @@ static void usb_net_class_initfn(ObjectClass *klass, void *data)
|
||||
uc->handle_reset = usb_net_handle_reset;
|
||||
uc->handle_control = usb_net_handle_control;
|
||||
uc->handle_data = usb_net_handle_data;
|
||||
uc->handle_destroy = usb_net_handle_destroy;
|
||||
uc->unrealize = usb_net_unrealize;
|
||||
set_bit(DEVICE_CATEGORY_NETWORK, dc->categories);
|
||||
dc->fw_name = "network";
|
||||
dc->vmsd = &vmstate_usb_net;
|
||||
|
@ -1163,7 +1163,7 @@ static void ccid_handle_data(USBDevice *dev, USBPacket *p)
|
||||
}
|
||||
}
|
||||
|
||||
static void ccid_handle_destroy(USBDevice *dev)
|
||||
static void ccid_unrealize(USBDevice *dev, Error **errp)
|
||||
{
|
||||
USBCCIDState *s = USB_CCID_DEV(dev);
|
||||
|
||||
@ -1470,7 +1470,7 @@ static void ccid_class_initfn(ObjectClass *klass, void *data)
|
||||
uc->handle_reset = ccid_handle_reset;
|
||||
uc->handle_control = ccid_handle_control;
|
||||
uc->handle_data = ccid_handle_data;
|
||||
uc->handle_destroy = ccid_handle_destroy;
|
||||
uc->unrealize = ccid_unrealize;
|
||||
dc->desc = "CCID Rev 1.1 smartcard reader";
|
||||
dc->vmsd = &ccid_vmstate;
|
||||
dc->props = ccid_properties;
|
||||
|
@ -891,7 +891,7 @@ static void usb_uas_handle_data(USBDevice *dev, USBPacket *p)
|
||||
}
|
||||
}
|
||||
|
||||
static void usb_uas_handle_destroy(USBDevice *dev)
|
||||
static void usb_uas_unrealize(USBDevice *dev, Error **errp)
|
||||
{
|
||||
UASDevice *uas = USB_UAS(dev);
|
||||
|
||||
@ -944,7 +944,7 @@ static void usb_uas_class_initfn(ObjectClass *klass, void *data)
|
||||
uc->handle_reset = usb_uas_handle_reset;
|
||||
uc->handle_control = usb_uas_handle_control;
|
||||
uc->handle_data = usb_uas_handle_data;
|
||||
uc->handle_destroy = usb_uas_handle_destroy;
|
||||
uc->unrealize = usb_uas_unrealize;
|
||||
uc->attached_settable = true;
|
||||
set_bit(DEVICE_CATEGORY_STORAGE, dc->categories);
|
||||
dc->fw_name = "storage";
|
||||
|
@ -329,7 +329,7 @@ static void usb_wacom_handle_data(USBDevice *dev, USBPacket *p)
|
||||
}
|
||||
}
|
||||
|
||||
static void usb_wacom_handle_destroy(USBDevice *dev)
|
||||
static void usb_wacom_unrealize(USBDevice *dev, Error **errp)
|
||||
{
|
||||
USBWacomState *s = (USBWacomState *) dev;
|
||||
|
||||
@ -364,7 +364,7 @@ static void usb_wacom_class_init(ObjectClass *klass, void *data)
|
||||
uc->handle_reset = usb_wacom_handle_reset;
|
||||
uc->handle_control = usb_wacom_handle_control;
|
||||
uc->handle_data = usb_wacom_handle_data;
|
||||
uc->handle_destroy = usb_wacom_handle_destroy;
|
||||
uc->unrealize = usb_wacom_unrealize;
|
||||
set_bit(DEVICE_CATEGORY_INPUT, dc->categories);
|
||||
dc->desc = "QEMU PenPartner Tablet";
|
||||
dc->vmsd = &vmstate_usb_wacom;
|
||||
|
@ -1001,7 +1001,7 @@ static int ohci_service_td(OHCIState *ohci, struct ohci_ed *ed)
|
||||
if (ohci_read_td(ohci, addr, &td)) {
|
||||
trace_usb_ohci_td_read_error(addr);
|
||||
ohci_die(ohci);
|
||||
return 0;
|
||||
return 1;
|
||||
}
|
||||
|
||||
dir = OHCI_BM(ed->flags, ED_D);
|
||||
|
@ -635,6 +635,11 @@ static bool xhci_get_flag(XHCIState *xhci, enum xhci_flags bit)
|
||||
return xhci->flags & (1 << bit);
|
||||
}
|
||||
|
||||
static void xhci_set_flag(XHCIState *xhci, enum xhci_flags bit)
|
||||
{
|
||||
xhci->flags |= (1 << bit);
|
||||
}
|
||||
|
||||
static uint64_t xhci_mfindex_get(XHCIState *xhci)
|
||||
{
|
||||
int64_t now = qemu_clock_get_ns(QEMU_CLOCK_VIRTUAL);
|
||||
@ -3839,17 +3844,21 @@ static const VMStateDescription vmstate_xhci = {
|
||||
}
|
||||
};
|
||||
|
||||
static Property xhci_properties[] = {
|
||||
static Property nec_xhci_properties[] = {
|
||||
DEFINE_PROP_ON_OFF_AUTO("msi", XHCIState, msi, ON_OFF_AUTO_AUTO),
|
||||
DEFINE_PROP_ON_OFF_AUTO("msix", XHCIState, msix, ON_OFF_AUTO_AUTO),
|
||||
DEFINE_PROP_BIT("superspeed-ports-first",
|
||||
XHCIState, flags, XHCI_FLAG_SS_FIRST, true),
|
||||
DEFINE_PROP_BIT("force-pcie-endcap", XHCIState, flags,
|
||||
XHCI_FLAG_FORCE_PCIE_ENDCAP, false),
|
||||
DEFINE_PROP_BIT("streams", XHCIState, flags,
|
||||
XHCI_FLAG_ENABLE_STREAMS, true),
|
||||
DEFINE_PROP_UINT32("intrs", XHCIState, numintrs, MAXINTRS),
|
||||
DEFINE_PROP_UINT32("slots", XHCIState, numslots, MAXSLOTS),
|
||||
DEFINE_PROP_END_OF_LIST(),
|
||||
};
|
||||
|
||||
static Property xhci_properties[] = {
|
||||
DEFINE_PROP_BIT("streams", XHCIState, flags,
|
||||
XHCI_FLAG_ENABLE_STREAMS, true),
|
||||
DEFINE_PROP_UINT32("p2", XHCIState, numports_2, 4),
|
||||
DEFINE_PROP_UINT32("p3", XHCIState, numports_3, 4),
|
||||
DEFINE_PROP_END_OF_LIST(),
|
||||
@ -3881,7 +3890,9 @@ static const TypeInfo xhci_info = {
|
||||
static void nec_xhci_class_init(ObjectClass *klass, void *data)
|
||||
{
|
||||
PCIDeviceClass *k = PCI_DEVICE_CLASS(klass);
|
||||
DeviceClass *dc = DEVICE_CLASS(klass);
|
||||
|
||||
dc->props = nec_xhci_properties;
|
||||
k->vendor_id = PCI_VENDOR_ID_NEC;
|
||||
k->device_id = PCI_DEVICE_ID_NEC_UPD720200;
|
||||
k->revision = 0x03;
|
||||
@ -3902,10 +3913,22 @@ static void qemu_xhci_class_init(ObjectClass *klass, void *data)
|
||||
k->revision = 0x01;
|
||||
}
|
||||
|
||||
static void qemu_xhci_instance_init(Object *obj)
|
||||
{
|
||||
XHCIState *xhci = XHCI(obj);
|
||||
|
||||
xhci->msi = ON_OFF_AUTO_OFF;
|
||||
xhci->msix = ON_OFF_AUTO_AUTO;
|
||||
xhci->numintrs = MAXINTRS;
|
||||
xhci->numslots = MAXSLOTS;
|
||||
xhci_set_flag(xhci, XHCI_FLAG_SS_FIRST);
|
||||
}
|
||||
|
||||
static const TypeInfo qemu_xhci_info = {
|
||||
.name = TYPE_QEMU_XHCI,
|
||||
.parent = TYPE_XHCI,
|
||||
.class_init = qemu_xhci_class_init,
|
||||
.instance_init = qemu_xhci_instance_init,
|
||||
};
|
||||
|
||||
static void xhci_register_types(void)
|
||||
|
@ -1065,7 +1065,7 @@ static void usb_host_instance_init(Object *obj)
|
||||
&udev->qdev, NULL);
|
||||
}
|
||||
|
||||
static void usb_host_handle_destroy(USBDevice *udev)
|
||||
static void usb_host_unrealize(USBDevice *udev, Error **errp)
|
||||
{
|
||||
USBHostDevice *s = USB_HOST_DEVICE(udev);
|
||||
|
||||
@ -1568,7 +1568,7 @@ static void usb_host_class_initfn(ObjectClass *klass, void *data)
|
||||
uc->handle_data = usb_host_handle_data;
|
||||
uc->handle_control = usb_host_handle_control;
|
||||
uc->handle_reset = usb_host_handle_reset;
|
||||
uc->handle_destroy = usb_host_handle_destroy;
|
||||
uc->unrealize = usb_host_unrealize;
|
||||
uc->flush_ep_queue = usb_host_flush_ep_queue;
|
||||
uc->alloc_streams = usb_host_alloc_streams;
|
||||
uc->free_streams = usb_host_free_streams;
|
||||
|
@ -1427,7 +1427,7 @@ static void usbredir_cleanup_device_queues(USBRedirDevice *dev)
|
||||
}
|
||||
}
|
||||
|
||||
static void usbredir_handle_destroy(USBDevice *udev)
|
||||
static void usbredir_unrealize(USBDevice *udev, Error **errp)
|
||||
{
|
||||
USBRedirDevice *dev = USB_REDIRECT(udev);
|
||||
Chardev *chr = qemu_chr_fe_get_driver(&dev->cs);
|
||||
@ -2513,7 +2513,7 @@ static void usbredir_class_initfn(ObjectClass *klass, void *data)
|
||||
|
||||
uc->realize = usbredir_realize;
|
||||
uc->product_desc = "USB Redirection Device";
|
||||
uc->handle_destroy = usbredir_handle_destroy;
|
||||
uc->unrealize = usbredir_unrealize;
|
||||
uc->cancel_packet = usbredir_cancel_packet;
|
||||
uc->handle_reset = usbredir_handle_reset;
|
||||
uc->handle_data = usbredir_handle_data;
|
||||
|
@ -290,11 +290,6 @@ typedef struct USBDeviceClass {
|
||||
*/
|
||||
void (*cancel_packet)(USBDevice *dev, USBPacket *p);
|
||||
|
||||
/*
|
||||
* Called when device is destroyed.
|
||||
*/
|
||||
void (*handle_destroy)(USBDevice *dev);
|
||||
|
||||
/*
|
||||
* Attach the device
|
||||
*/
|
||||
|
Loading…
Reference in New Issue
Block a user