Re: [Qemu-devel] [PATCH 2/4] xhci: add qemu xhci controller
On 02/06/2017 01:55 PM, Gerd Hoffmann wrote: Turn existing TYPE_XHCI into an abstract base class. Create two child classes, TYPE_NEC_XHCI (same name as old xhci controller) and TYPE_QEMU_XHCI (using an ID from our namespace). Signed-off-by: Gerd Hoffmann--- docs/specs/pci-ids.txt | 1 + hw/usb/hcd-xhci.c | 40 include/hw/pci/pci.h | 1 + 3 files changed, 38 insertions(+), 4 deletions(-) diff --git a/docs/specs/pci-ids.txt b/docs/specs/pci-ids.txt index 16fdb0c..95adee0 100644 --- a/docs/specs/pci-ids.txt +++ b/docs/specs/pci-ids.txt @@ -61,6 +61,7 @@ PCI devices (other than virtio): 1b36:0009 PCI Expander Bridge (-device pxb) 1b36:000a PCI-PCI bridge (multiseat) 1b36:000b PCIe Expander Bridge (-device pxb-pcie) +1b36:000d PCI xhci usb host adapter All these devices are documented in docs/specs. diff --git a/hw/usb/hcd-xhci.c b/hw/usb/hcd-xhci.c index 74184ac..887bb39 100644 --- a/hw/usb/hcd-xhci.c +++ b/hw/usb/hcd-xhci.c @@ -487,7 +487,9 @@ struct XHCIState { XHCIRing cmd_ring; }; -#define TYPE_XHCI "nec-usb-xhci" +#define TYPE_XHCI "base-xhci" +#define TYPE_NEC_XHCI "nec-usb-xhci" +#define TYPE_QEMU_XHCI "qemu-xhci" #define XHCI(obj) \ OBJECT_CHECK(XHCIState, (obj), TYPE_XHCI) @@ -3868,10 +3870,7 @@ static void xhci_class_init(ObjectClass *klass, void *data) set_bit(DEVICE_CATEGORY_USB, dc->categories); k->realize = usb_xhci_realize; k->exit = usb_xhci_exit; -k->vendor_id= PCI_VENDOR_ID_NEC; -k->device_id= PCI_DEVICE_ID_NEC_UPD720200; k->class_id = PCI_CLASS_SERIAL_USB; -k->revision = 0x03; k->is_express = 1; } @@ -3880,11 +3879,44 @@ static const TypeInfo xhci_info = { .parent= TYPE_PCI_DEVICE, .instance_size = sizeof(XHCIState), .class_init= xhci_class_init, +.abstract = true, +}; + +static void nec_xhci_class_init(ObjectClass *klass, void *data) +{ +PCIDeviceClass *k = PCI_DEVICE_CLASS(klass); + +k->vendor_id= PCI_VENDOR_ID_NEC; +k->device_id= PCI_DEVICE_ID_NEC_UPD720200; +k->revision = 0x03; +} + +static const TypeInfo nec_xhci_info = { +.name = TYPE_NEC_XHCI, +.parent= TYPE_XHCI, +.class_init= nec_xhci_class_init, +}; + +static void qemu_xhci_class_init(ObjectClass *klass, void *data) +{ +PCIDeviceClass *k = PCI_DEVICE_CLASS(klass); + +k->vendor_id= PCI_VENDOR_ID_REDHAT; +k->device_id= PCI_DEVICE_ID_REDHAT_XHCI; +k->revision = 0x01; +} + +static const TypeInfo qemu_xhci_info = { +.name = TYPE_QEMU_XHCI, +.parent= TYPE_XHCI, +.class_init= qemu_xhci_class_init, }; static void xhci_register_types(void) { type_register_static(_info); +type_register_static(_xhci_info); +type_register_static(_xhci_info); } type_init(xhci_register_types) diff --git a/include/hw/pci/pci.h b/include/hw/pci/pci.h index cbc1fdf..05ef14b 100644 --- a/include/hw/pci/pci.h +++ b/include/hw/pci/pci.h @@ -97,6 +97,7 @@ #define PCI_DEVICE_ID_REDHAT_BRIDGE_SEAT 0x000a #define PCI_DEVICE_ID_REDHAT_PXB_PCIE0x000b #define PCI_DEVICE_ID_REDHAT_PCIE_RP 0x000c +#define PCI_DEVICE_ID_REDHAT_XHCI0x000d #define PCI_DEVICE_ID_REDHAT_QXL 0x0100 #define FMT_PCIBUS PRIx64 Reviewed-by: Marcel Apfelbaum Thanks, Marcel
[Qemu-devel] [PATCH 2/4] xhci: add qemu xhci controller
Turn existing TYPE_XHCI into an abstract base class. Create two child classes, TYPE_NEC_XHCI (same name as old xhci controller) and TYPE_QEMU_XHCI (using an ID from our namespace). Signed-off-by: Gerd Hoffmann--- docs/specs/pci-ids.txt | 1 + hw/usb/hcd-xhci.c | 40 include/hw/pci/pci.h | 1 + 3 files changed, 38 insertions(+), 4 deletions(-) diff --git a/docs/specs/pci-ids.txt b/docs/specs/pci-ids.txt index 16fdb0c..95adee0 100644 --- a/docs/specs/pci-ids.txt +++ b/docs/specs/pci-ids.txt @@ -61,6 +61,7 @@ PCI devices (other than virtio): 1b36:0009 PCI Expander Bridge (-device pxb) 1b36:000a PCI-PCI bridge (multiseat) 1b36:000b PCIe Expander Bridge (-device pxb-pcie) +1b36:000d PCI xhci usb host adapter All these devices are documented in docs/specs. diff --git a/hw/usb/hcd-xhci.c b/hw/usb/hcd-xhci.c index 74184ac..887bb39 100644 --- a/hw/usb/hcd-xhci.c +++ b/hw/usb/hcd-xhci.c @@ -487,7 +487,9 @@ struct XHCIState { XHCIRing cmd_ring; }; -#define TYPE_XHCI "nec-usb-xhci" +#define TYPE_XHCI "base-xhci" +#define TYPE_NEC_XHCI "nec-usb-xhci" +#define TYPE_QEMU_XHCI "qemu-xhci" #define XHCI(obj) \ OBJECT_CHECK(XHCIState, (obj), TYPE_XHCI) @@ -3868,10 +3870,7 @@ static void xhci_class_init(ObjectClass *klass, void *data) set_bit(DEVICE_CATEGORY_USB, dc->categories); k->realize = usb_xhci_realize; k->exit = usb_xhci_exit; -k->vendor_id= PCI_VENDOR_ID_NEC; -k->device_id= PCI_DEVICE_ID_NEC_UPD720200; k->class_id = PCI_CLASS_SERIAL_USB; -k->revision = 0x03; k->is_express = 1; } @@ -3880,11 +3879,44 @@ static const TypeInfo xhci_info = { .parent= TYPE_PCI_DEVICE, .instance_size = sizeof(XHCIState), .class_init= xhci_class_init, +.abstract = true, +}; + +static void nec_xhci_class_init(ObjectClass *klass, void *data) +{ +PCIDeviceClass *k = PCI_DEVICE_CLASS(klass); + +k->vendor_id= PCI_VENDOR_ID_NEC; +k->device_id= PCI_DEVICE_ID_NEC_UPD720200; +k->revision = 0x03; +} + +static const TypeInfo nec_xhci_info = { +.name = TYPE_NEC_XHCI, +.parent= TYPE_XHCI, +.class_init= nec_xhci_class_init, +}; + +static void qemu_xhci_class_init(ObjectClass *klass, void *data) +{ +PCIDeviceClass *k = PCI_DEVICE_CLASS(klass); + +k->vendor_id= PCI_VENDOR_ID_REDHAT; +k->device_id= PCI_DEVICE_ID_REDHAT_XHCI; +k->revision = 0x01; +} + +static const TypeInfo qemu_xhci_info = { +.name = TYPE_QEMU_XHCI, +.parent= TYPE_XHCI, +.class_init= qemu_xhci_class_init, }; static void xhci_register_types(void) { type_register_static(_info); +type_register_static(_xhci_info); +type_register_static(_xhci_info); } type_init(xhci_register_types) diff --git a/include/hw/pci/pci.h b/include/hw/pci/pci.h index cbc1fdf..05ef14b 100644 --- a/include/hw/pci/pci.h +++ b/include/hw/pci/pci.h @@ -97,6 +97,7 @@ #define PCI_DEVICE_ID_REDHAT_BRIDGE_SEAT 0x000a #define PCI_DEVICE_ID_REDHAT_PXB_PCIE0x000b #define PCI_DEVICE_ID_REDHAT_PCIE_RP 0x000c +#define PCI_DEVICE_ID_REDHAT_XHCI0x000d #define PCI_DEVICE_ID_REDHAT_QXL 0x0100 #define FMT_PCIBUS PRIx64 -- 1.8.3.1