On 8/28/20 9:19 PM, Sai Pavan Boddu wrote: > Move pci specific devices to new file. This set the environment to move all > pci specific hooks in hcd-xhci.c to hcd-xhci-pci.c. > > Signed-off-by: Sai Pavan Boddu <sai.pavan.bo...@xilinx.com> > --- > hw/usb/Kconfig | 6 +++++ > hw/usb/Makefile.objs | 1 + > hw/usb/hcd-xhci-pci.c | 66 > +++++++++++++++++++++++++++++++++++++++++++++++++++ > hw/usb/hcd-xhci.c | 41 ++------------------------------ > hw/usb/hcd-xhci.h | 3 +++ > 5 files changed, 78 insertions(+), 39 deletions(-) > create mode 100644 hw/usb/hcd-xhci-pci.c > > diff --git a/hw/usb/Kconfig b/hw/usb/Kconfig > index d4d8c37..d9965c1 100644 > --- a/hw/usb/Kconfig > +++ b/hw/usb/Kconfig > @@ -36,6 +36,12 @@ config USB_XHCI > depends on PCI > select USB > > +config USB_XHCI_PCI > + bool > + default y if PCI_DEVICES > + depends on PCI > + select USB_XHCI > + > config USB_XHCI_NEC > bool > default y if PCI_DEVICES > diff --git a/hw/usb/Makefile.objs b/hw/usb/Makefile.objs > index e342ff5..029b040 100644 > --- a/hw/usb/Makefile.objs > +++ b/hw/usb/Makefile.objs > @@ -11,6 +11,7 @@ common-obj-$(CONFIG_USB_EHCI_PCI) += hcd-ehci-pci.o > common-obj-$(CONFIG_USB_EHCI_SYSBUS) += hcd-ehci-sysbus.o > common-obj-$(CONFIG_USB_XHCI) += hcd-xhci.o > common-obj-$(CONFIG_USB_XHCI_NEC) += hcd-xhci-nec.o > +common-obj-$(CONFIG_USB_XHCI_PCI) += hcd-xhci-pci.o > common-obj-$(CONFIG_USB_MUSB) += hcd-musb.o > common-obj-$(CONFIG_USB_DWC2) += hcd-dwc2.o > > diff --git a/hw/usb/hcd-xhci-pci.c b/hw/usb/hcd-xhci-pci.c > new file mode 100644 > index 0000000..1562757 > --- /dev/null > +++ b/hw/usb/hcd-xhci-pci.c > @@ -0,0 +1,66 @@ > +/* > + * USB xHCI controller with PCI bus emulation > + * > + * SPDX-FileCopyrightText: 2011 Securiforest > + * SPDX-FileContributor: Hector Martin <hec...@marcansoft.com> > + * SPDX-sourceInfo: Based on usb-ohci.c, emulates Renesas NEC USB 3.0 > + * SPDX-FileCopyrightText: 2020 Xilinx > + * SPDX-FileContributor: Sai Pavan Boddu <sai.pavan.bo...@xilinx.com> > + * SPDX-sourceInfo: Moved the pci specific content for hcd-xhci.c to > + * hcd-xhci-pci.c > + * > + * This library is free software; you can redistribute it and/or > + * modify it under the terms of the GNU Lesser General Public > + * License as published by the Free Software Foundation; either > + * version 2 of the License, or (at your option) any later version. > + * > + * This library is distributed in the hope that it will be useful, > + * but WITHOUT ANY WARRANTY; without even the implied warranty of > + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU > + * Lesser General Public License for more details. > + * > + * You should have received a copy of the GNU Lesser General Public > + * License along with this library; if not, see > <http://www.gnu.org/licenses/>. > + */ > +#include "qemu/osdep.h" > +#include "hw/pci/pci.h" > +#include "hw/qdev-properties.h" > +#include "hw/pci/msi.h" > +#include "hw/pci/msix.h" > +#include "hcd-xhci.h" > +#include "trace.h" > +#include "qapi/error.h" > + > +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 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) > +{ > + type_register_static(&qemu_xhci_info); > +} > + > +type_init(xhci_register_types) > diff --git a/hw/usb/hcd-xhci.c b/hw/usb/hcd-xhci.c > index 2590f7a..b15c53b 100644 > --- a/hw/usb/hcd-xhci.c > +++ b/hw/usb/hcd-xhci.c > @@ -23,7 +23,6 @@ > #include "qemu/timer.h" > #include "qemu/module.h" > #include "qemu/queue.h" > -#include "hw/usb.h" > #include "migration/vmstate.h" > #include "hw/pci/pci.h" > #include "hw/qdev-properties.h" > @@ -429,12 +428,12 @@ static const char *ep_state_name(uint32_t state) > ARRAY_SIZE(ep_state_names)); > } > > -static bool xhci_get_flag(XHCIState *xhci, enum xhci_flags bit) > +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) > +void xhci_set_flag(XHCIState *xhci, enum xhci_flags bit) > { > xhci->flags |= (1 << bit); > } > @@ -3692,13 +3691,6 @@ static Property xhci_properties[] = { > DEFINE_PROP_END_OF_LIST(), > }; > > -static void xhci_instance_init(Object *obj) > -{ > - /* QEMU_PCI_CAP_EXPRESS initialization does not depend on QEMU command > - * line, therefore, no need to wait to realize like other devices */ > - PCI_DEVICE(obj)->cap_present |= QEMU_PCI_CAP_EXPRESS;
What happened to this flag? > -} > - > static void xhci_class_init(ObjectClass *klass, void *data) > { > PCIDeviceClass *k = PCI_DEVICE_CLASS(klass); > @@ -3718,7 +3710,6 @@ static const TypeInfo xhci_info = { > .parent = TYPE_PCI_DEVICE, > .instance_size = sizeof(XHCIState), > .class_init = xhci_class_init, > - .instance_init = xhci_instance_init, > .abstract = true, > .interfaces = (InterfaceInfo[]) { > { INTERFACE_PCIE_DEVICE }, > @@ -3727,37 +3718,9 @@ static const TypeInfo xhci_info = { > }, > }; > > -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 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) > { > type_register_static(&xhci_info); > - type_register_static(&qemu_xhci_info); > } > > type_init(xhci_register_types) > diff --git a/hw/usb/hcd-xhci.h b/hw/usb/hcd-xhci.h > index edbd926..dd5fcd4 100644 > --- a/hw/usb/hcd-xhci.h > +++ b/hw/usb/hcd-xhci.h > @@ -23,6 +23,7 @@ > #define HW_USB_HCD_XHCI_H > > #include "sysemu/dma.h" > +#include "hw/usb.h" > > #define TYPE_XHCI "base-xhci" > #define TYPE_NEC_XHCI "nec-usb-xhci" > @@ -232,4 +233,6 @@ struct XHCIState { > bool nec_quirks; > }; > > +bool xhci_get_flag(XHCIState *xhci, enum xhci_flags bit); > +void xhci_set_flag(XHCIState *xhci, enum xhci_flags bit); > #endif >