Hi Philippe, > -----Original Message----- > From: Philippe Mathieu-Daudé <phi...@redhat.com> > Sent: Tuesday, September 1, 2020 10:08 PM > To: Sai Pavan Boddu <saip...@xilinx.com>; Peter Maydell > <peter.mayd...@linaro.org>; Markus Armbruster <arm...@redhat.com>; > 'Marc-André Lureau' <marcandre.lur...@redhat.com>; Paolo Bonzini > <pbonz...@redhat.com>; Gerd Hoffmann <kra...@redhat.com>; Edgar > Iglesias <edg...@xilinx.com>; Francisco Eduardo Iglesias > <figle...@xilinx.com> > Cc: qemu-devel@nongnu.org; Alistair Francis <alistair.fran...@wdc.com>; > Eduardo Habkost <ehabk...@redhat.com>; Ying Fang > <fangyi...@huawei.com>; Vikram Garhwal <f...@xilinx.com>; Paul > Zimmerman <pauld...@gmail.com> > Subject: Re: [PATCH v4 2/7] usb/hcd-xhci: Move qemu-xhci device to hcd- > xhci-pci.c > > 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? [Sai Pavan Boddu] During a patch split this has been moved into patch 3/7. I would make these changes come into one patch.
Regards, Sai Pavan > > > -} > > - > > 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 > >