From: Igor Mitsyanko <i.mitsyanko@samsung.com>
To: qemu-devel@nongnu.org
Cc: peter.crosthwaite@xilinx.com, walimisdev@gmail.com, kraxel@redhat.com
Subject: Re: [Qemu-devel] [PATCH RFT 1/5] usb/ehci: Clean up SysBus and PCI EHCI split
Date: Mon, 03 Dec 2012 22:35:22 +0400 [thread overview]
Message-ID: <50BCF0EA.1020405@samsung.com> (raw)
In-Reply-To: <1354417042-8818-2-git-send-email-andreas.faerber@web.de>
On 12/02/2012 06:57 AM, Andreas Färber wrote:
> SysBus EHCI was introduced in a hurry before 1.3 Soft Freeze.
> To use QOM casts in place of DO_UPCAST() / FROM_SYSBUS(), we need an
> identifying type. Introduce generic abstract base types for PCI and
> SysBus EHCI to allow multiple types to access the shared fields.
>
> The VMSTATE_PCI_DEVICE() macro does not play nice with the QOM
> parent_obj naming convention, so defer that cleanup.
>
> Signed-off-by: Andreas Färber <andreas.faerber@web.de>
> Cc: Peter Crosthwaite <peter.crosthwaite@xilinx.com>
> ---
> hw/usb/hcd-ehci-pci.c | 37 ++++++++++++++++++++++++++++---------
> hw/usb/hcd-ehci-sysbus.c | 20 ++++++++++++++++----
> 2 Dateien geändert, 44 Zeilen hinzugefügt(+), 13 Zeilen entfernt(-)
>
> diff --git a/hw/usb/hcd-ehci-pci.c b/hw/usb/hcd-ehci-pci.c
> index 41dbb53..bb1a197 100644
> --- a/hw/usb/hcd-ehci-pci.c
> +++ b/hw/usb/hcd-ehci-pci.c
> @@ -19,8 +19,12 @@
> #include "hw/pci.h"
> #include "range.h"
>
> +#define TYPE_PCI_EHCI "pci-ehci-usb"
> +#define PCI_EHCI(obj) OBJECT_CHECK(EHCIPCIState, (obj), TYPE_PCI_EHCI)
> +
> typedef struct EHCIPCIState {
> PCIDevice pcidev;
> +
> EHCIState ehci;
> } EHCIPCIState;
>
> @@ -33,7 +37,7 @@ typedef struct EHCIPCIInfo {
>
> static int usb_ehci_pci_initfn(PCIDevice *dev)
> {
> - EHCIPCIState *i = DO_UPCAST(EHCIPCIState, pcidev, dev);
> + EHCIPCIState *i = PCI_EHCI(dev);
> EHCIState *s = &i->ehci;
> uint8_t *pci_conf = dev->config;
>
> @@ -83,7 +87,7 @@ static int usb_ehci_pci_initfn(PCIDevice *dev)
> static void usb_ehci_pci_write_config(PCIDevice *dev, uint32_t addr,
> uint32_t val, int l)
> {
> - EHCIPCIState *i = DO_UPCAST(EHCIPCIState, pcidev, dev);
> + EHCIPCIState *i = PCI_EHCI(dev);
> bool busmaster;
>
> pci_default_write_config(dev, addr, val, l);
> @@ -115,12 +119,8 @@ static void ehci_class_init(ObjectClass *klass, void *data)
> {
> DeviceClass *dc = DEVICE_CLASS(klass);
> PCIDeviceClass *k = PCI_DEVICE_CLASS(klass);
> - EHCIPCIInfo *i = data;
>
> k->init = usb_ehci_pci_initfn;
> - k->vendor_id = i->vendor_id;
> - k->device_id = i->device_id;
> - k->revision = i->revision;
> k->class_id = PCI_CLASS_SERIAL_USB;
> k->config_write = usb_ehci_pci_write_config;
> k->no_hotplug = 1;
> @@ -128,6 +128,24 @@ static void ehci_class_init(ObjectClass *klass, void *data)
> dc->props = ehci_pci_properties;
> }
>
> +static const TypeInfo ehci_pci_type_info = {
> + .name = TYPE_PCI_EHCI,
> + .parent = TYPE_PCI_DEVICE,
> + .instance_size = sizeof(EHCIPCIState),
> + .abstract = true,
> + .class_init = ehci_class_init,
> +};
> +
> +static void ehci_data_class_init(ObjectClass *klass, void *data)
> +{
> + PCIDeviceClass *k = PCI_DEVICE_CLASS(klass);
> + EHCIPCIInfo *i = data;
> +
> + k->vendor_id = i->vendor_id;
> + k->device_id = i->device_id;
> + k->revision = i->revision;
> +}
> +
> static struct EHCIPCIInfo ehci_pci_info[] = {
> {
> .name = "usb-ehci",
> @@ -150,12 +168,13 @@ static struct EHCIPCIInfo ehci_pci_info[] = {
> static void ehci_pci_register_types(void)
> {
> TypeInfo ehci_type_info = {
> - .parent = TYPE_PCI_DEVICE,
> - .instance_size = sizeof(EHCIPCIState),
> - .class_init = ehci_class_init,
> + .parent = TYPE_PCI_EHCI,
> + .class_init = ehci_data_class_init,
> };
> int i;
>
> + type_register_static(&ehci_pci_type_info);
> +
> for (i = 0; i < ARRAY_SIZE(ehci_pci_info); i++) {
> ehci_type_info.name = ehci_pci_info[i].name;
> ehci_type_info.class_data = ehci_pci_info + i;
> diff --git a/hw/usb/hcd-ehci-sysbus.c b/hw/usb/hcd-ehci-sysbus.c
> index 803df92..c7b68b2 100644
> --- a/hw/usb/hcd-ehci-sysbus.c
> +++ b/hw/usb/hcd-ehci-sysbus.c
> @@ -18,8 +18,13 @@
> #include "hw/usb/hcd-ehci.h"
> #include "hw/sysbus.h"
>
> +#define TYPE_SYS_BUS_EHCI "sysbus-ehci-usb"
> +#define SYS_BUS_EHCI(obj) \
> + OBJECT_CHECK(EHCISysBusState, (obj), TYPE_SYS_BUS_EHCI)
> +
> typedef struct EHCISysBusState {
> - SysBusDevice busdev;
> + SysBusDevice parent_obj;
> +
> EHCIState ehci;
> } EHCISysBusState;
>
> @@ -40,7 +45,7 @@ static Property ehci_sysbus_properties[] = {
>
> static int usb_ehci_sysbus_initfn(SysBusDevice *dev)
> {
> - EHCISysBusState *i = FROM_SYSBUS(EHCISysBusState, dev);
> + EHCISysBusState *i = SYS_BUS_EHCI(dev);
> EHCIState *s = &i->ehci;
>
> s->capsbase = 0x100;
> @@ -63,15 +68,22 @@ static void ehci_sysbus_class_init(ObjectClass *klass, void *data)
> dc->props = ehci_sysbus_properties;
> }
>
> -TypeInfo ehci_xlnx_type_info = {
> - .name = "xlnx,ps7-usb",
> +static const TypeInfo ehci_type_info = {
> + .name = TYPE_SYS_BUS_EHCI,
> .parent = TYPE_SYS_BUS_DEVICE,
> .instance_size = sizeof(EHCISysBusState),
> + .abstract = true,
> .class_init = ehci_sysbus_class_init,
> };
>
> +static const TypeInfo ehci_xlnx_type_info = {
> + .name = "xlnx,ps7-usb",
> + .parent = TYPE_SYS_BUS_EHCI,
> +};
> +
> static void ehci_sysbus_register_types(void)
> {
> + type_register_static(&ehci_type_info);
> type_register_static(&ehci_xlnx_type_info);
> }
>
>
Reviewed-by: Igor Mitsyanko <i.mitsyanko@samsung.com>
--
Mitsyanko Igor
ASWG, Moscow R&D center, Samsung Electronics
email: i.mitsyanko@samsung.com
next prev parent reply other threads:[~2012-12-03 18:35 UTC|newest]
Thread overview: 21+ messages / expand[flat|nested] mbox.gz Atom feed top
2012-12-02 2:57 [Qemu-devel] [PATCH RFT 0/5] usb: Clean up and extend SysBus EHCI Andreas Färber
2012-12-02 2:57 ` [Qemu-devel] [PATCH RFT 1/5] usb/ehci: Clean up SysBus and PCI EHCI split Andreas Färber
2012-12-03 18:35 ` Igor Mitsyanko [this message]
2012-12-02 2:57 ` [Qemu-devel] [PATCH RFT 2/5] usb/ehci: Move capsbase and opregbase into SysBus EHCI class Andreas Färber
2012-12-03 18:38 ` Igor Mitsyanko
2012-12-02 2:57 ` [Qemu-devel] [PATCH RFT 3/5] usb/ehci: Add SysBus EHCI device for Exynos4210 Andreas Färber
2012-12-03 18:51 ` Igor Mitsyanko
2012-12-04 0:19 ` walimis
2012-12-04 7:14 ` walimis
2012-12-02 2:57 ` [Qemu-devel] [PATCH RFT 4/5] exynos4210: Add EHCI support Andreas Färber
2012-12-03 18:52 ` Igor Mitsyanko
2012-12-02 2:57 ` [Qemu-devel] [PATCH RFT 5/5] usb/ehci: Add Tegra2 SysBus EHCI device Andreas Färber
2012-12-02 10:34 ` [Qemu-devel] [PATCH RFT 0/5] usb: Clean up and extend SysBus EHCI walimis
2012-12-02 16:27 ` Andreas Färber
2012-12-03 3:24 ` walimis
2012-12-03 6:59 ` Gerd Hoffmann
2012-12-03 11:58 ` walimis
2012-12-03 12:10 ` Peter Maydell
2012-12-03 12:38 ` walimis
2012-12-03 13:37 ` Gerd Hoffmann
2012-12-03 13:39 ` Peter Maydell
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=50BCF0EA.1020405@samsung.com \
--to=i.mitsyanko@samsung.com \
--cc=kraxel@redhat.com \
--cc=peter.crosthwaite@xilinx.com \
--cc=qemu-devel@nongnu.org \
--cc=walimisdev@gmail.com \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.