Re: [Qemu-devel] [PATCH v3 12/16] virtio: split virtio net bits rom virtio-pci
On Thu, Dec 13, 2018 at 10:00:53PM +0100, Juan Quintela wrote: > Reviewed-by: Thomas Huth > Reviewed-by: Laurent Vivier > Signed-off-by: Juan Quintela > --- > hw/virtio/Makefile.objs| 1 + > hw/virtio/virtio-net-pci.c | 96 ++ > hw/virtio/virtio-pci.c | 57 -- > hw/virtio/virtio-pci.h | 14 -- > tests/Makefile.include | 2 +- > 5 files changed, 98 insertions(+), 72 deletions(-) > create mode 100644 hw/virtio/virtio-net-pci.c > > diff --git a/hw/virtio/Makefile.objs b/hw/virtio/Makefile.objs > index 557ad06231..4c31acb017 100644 > --- a/hw/virtio/Makefile.objs > +++ b/hw/virtio/Makefile.objs > @@ -23,6 +23,7 @@ obj-$(CONFIG_VIRTIO_BALLOON) += virtio-balloon-pci.o > obj-$(CONFIG_VIRTIO_9P) += virtio-9p-pci.o > obj-$(CONFIG_VIRTIO_SCSI) += virtio-scsi-pci.o > obj-$(CONFIG_VIRTIO_BLK) += virtio-blk-pci.o > +obj-$(CONFIG_VIRTIO_NET) += virtio-net-pci.o > endif > endif s/rom/from/ in the subject for patch 10, 11, 12 and 13. Reviewed-by: Wei Xu > > diff --git a/hw/virtio/virtio-net-pci.c b/hw/virtio/virtio-net-pci.c > new file mode 100644 > index 00..0b676f078d > --- /dev/null > +++ b/hw/virtio/virtio-net-pci.c > @@ -0,0 +1,96 @@ > +/* > + * Virtio net PCI Bindings > + * > + * Copyright IBM, Corp. 2007 > + * Copyright (c) 2009 CodeSourcery > + * > + * Authors: > + * Anthony Liguori > + * Paul Brook > + * > + * This work is licensed under the terms of the GNU GPL, version 2. See > + * the COPYING file in the top-level directory. > + * > + * Contributions after 2012-01-13 are licensed under the terms of the > + * GNU GPL, version 2 or (at your option) any later version. > + */ > + > +#include "qemu/osdep.h" > + > +#include "hw/virtio/virtio-net.h" > +#include "virtio-pci.h" > +#include "qapi/error.h" > + > +typedef struct VirtIONetPCI VirtIONetPCI; > + > +/* > + * virtio-net-pci: This extends VirtioPCIProxy. > + */ > +#define TYPE_VIRTIO_NET_PCI "virtio-net-pci" > +#define VIRTIO_NET_PCI(obj) \ > +OBJECT_CHECK(VirtIONetPCI, (obj), TYPE_VIRTIO_NET_PCI) > + > +struct VirtIONetPCI { > +VirtIOPCIProxy parent_obj; > +VirtIONet vdev; > +}; > + > +static Property virtio_net_properties[] = { > +DEFINE_PROP_BIT("ioeventfd", VirtIOPCIProxy, flags, > +VIRTIO_PCI_FLAG_USE_IOEVENTFD_BIT, true), > +DEFINE_PROP_UINT32("vectors", VirtIOPCIProxy, nvectors, 3), > +DEFINE_PROP_END_OF_LIST(), > +}; > + > +static void virtio_net_pci_realize(VirtIOPCIProxy *vpci_dev, Error **errp) > +{ > +DeviceState *qdev = DEVICE(vpci_dev); > +VirtIONetPCI *dev = VIRTIO_NET_PCI(vpci_dev); > +DeviceState *vdev = DEVICE(>vdev); > + > +virtio_net_set_netclient_name(>vdev, qdev->id, > + object_get_typename(OBJECT(qdev))); > +qdev_set_parent_bus(vdev, BUS(_dev->bus)); > +object_property_set_bool(OBJECT(vdev), true, "realized", errp); > +} > + > +static void virtio_net_pci_class_init(ObjectClass *klass, void *data) > +{ > +DeviceClass *dc = DEVICE_CLASS(klass); > +PCIDeviceClass *k = PCI_DEVICE_CLASS(klass); > +VirtioPCIClass *vpciklass = VIRTIO_PCI_CLASS(klass); > + > +k->romfile = "efi-virtio.rom"; > +k->vendor_id = PCI_VENDOR_ID_REDHAT_QUMRANET; > +k->device_id = PCI_DEVICE_ID_VIRTIO_NET; > +k->revision = VIRTIO_PCI_ABI_VERSION; > +k->class_id = PCI_CLASS_NETWORK_ETHERNET; > +set_bit(DEVICE_CATEGORY_NETWORK, dc->categories); > +dc->props = virtio_net_properties; > +vpciklass->realize = virtio_net_pci_realize; > +} > + > +static void virtio_net_pci_instance_init(Object *obj) > +{ > +VirtIONetPCI *dev = VIRTIO_NET_PCI(obj); > + > +virtio_instance_init_common(obj, >vdev, sizeof(dev->vdev), > +TYPE_VIRTIO_NET); > +object_property_add_alias(obj, "bootindex", OBJECT(>vdev), > + "bootindex", _abort); > +} > + > +static const TypeInfo virtio_net_pci_info = { > +.name = TYPE_VIRTIO_NET_PCI, > +.parent= TYPE_VIRTIO_PCI, > +.instance_size = sizeof(VirtIONetPCI), > +.instance_init = virtio_net_pci_instance_init, > +.class_init= virtio_net_pci_class_init, > +}; > + > +static void virtio_net_pci_register(void) > +{ > +type_register_static(_net_pci_info); > +} > + > +type_init(virtio_net_pci_register) > diff --git a/hw/virtio/virtio-pci.c b/hw/virtio/virtio-pci.c > index 4fe71a56c8..cb03bfa597 100644 > --- a/hw/virtio/virtio-pci.c > +++ b/hw/virtio/virtio-pci.c > @@ -19,7 +19,6 @@ > > #include "standard-headers/linux/virtio_pci.h" > #include "hw/virtio/virtio.h" > -#include "hw/virtio/virtio-net.h" > #include "hw/virtio/virtio-serial.h" > #include "hw/pci/pci.h" > #include "qapi/error.h" > @@ -1966,61 +1965,6 @@ static const TypeInfo virtio_serial_pci_info = { > .class_init= virtio_serial_pci_class_init, > }; > > -/* virtio-net-pci */ > - > -static Property
[Qemu-devel] [PATCH v3 12/16] virtio: split virtio net bits rom virtio-pci
Reviewed-by: Thomas Huth Reviewed-by: Laurent Vivier Signed-off-by: Juan Quintela --- hw/virtio/Makefile.objs| 1 + hw/virtio/virtio-net-pci.c | 96 ++ hw/virtio/virtio-pci.c | 57 -- hw/virtio/virtio-pci.h | 14 -- tests/Makefile.include | 2 +- 5 files changed, 98 insertions(+), 72 deletions(-) create mode 100644 hw/virtio/virtio-net-pci.c diff --git a/hw/virtio/Makefile.objs b/hw/virtio/Makefile.objs index 557ad06231..4c31acb017 100644 --- a/hw/virtio/Makefile.objs +++ b/hw/virtio/Makefile.objs @@ -23,6 +23,7 @@ obj-$(CONFIG_VIRTIO_BALLOON) += virtio-balloon-pci.o obj-$(CONFIG_VIRTIO_9P) += virtio-9p-pci.o obj-$(CONFIG_VIRTIO_SCSI) += virtio-scsi-pci.o obj-$(CONFIG_VIRTIO_BLK) += virtio-blk-pci.o +obj-$(CONFIG_VIRTIO_NET) += virtio-net-pci.o endif endif diff --git a/hw/virtio/virtio-net-pci.c b/hw/virtio/virtio-net-pci.c new file mode 100644 index 00..0b676f078d --- /dev/null +++ b/hw/virtio/virtio-net-pci.c @@ -0,0 +1,96 @@ +/* + * Virtio net PCI Bindings + * + * Copyright IBM, Corp. 2007 + * Copyright (c) 2009 CodeSourcery + * + * Authors: + * Anthony Liguori + * Paul Brook + * + * This work is licensed under the terms of the GNU GPL, version 2. See + * the COPYING file in the top-level directory. + * + * Contributions after 2012-01-13 are licensed under the terms of the + * GNU GPL, version 2 or (at your option) any later version. + */ + +#include "qemu/osdep.h" + +#include "hw/virtio/virtio-net.h" +#include "virtio-pci.h" +#include "qapi/error.h" + +typedef struct VirtIONetPCI VirtIONetPCI; + +/* + * virtio-net-pci: This extends VirtioPCIProxy. + */ +#define TYPE_VIRTIO_NET_PCI "virtio-net-pci" +#define VIRTIO_NET_PCI(obj) \ +OBJECT_CHECK(VirtIONetPCI, (obj), TYPE_VIRTIO_NET_PCI) + +struct VirtIONetPCI { +VirtIOPCIProxy parent_obj; +VirtIONet vdev; +}; + +static Property virtio_net_properties[] = { +DEFINE_PROP_BIT("ioeventfd", VirtIOPCIProxy, flags, +VIRTIO_PCI_FLAG_USE_IOEVENTFD_BIT, true), +DEFINE_PROP_UINT32("vectors", VirtIOPCIProxy, nvectors, 3), +DEFINE_PROP_END_OF_LIST(), +}; + +static void virtio_net_pci_realize(VirtIOPCIProxy *vpci_dev, Error **errp) +{ +DeviceState *qdev = DEVICE(vpci_dev); +VirtIONetPCI *dev = VIRTIO_NET_PCI(vpci_dev); +DeviceState *vdev = DEVICE(>vdev); + +virtio_net_set_netclient_name(>vdev, qdev->id, + object_get_typename(OBJECT(qdev))); +qdev_set_parent_bus(vdev, BUS(_dev->bus)); +object_property_set_bool(OBJECT(vdev), true, "realized", errp); +} + +static void virtio_net_pci_class_init(ObjectClass *klass, void *data) +{ +DeviceClass *dc = DEVICE_CLASS(klass); +PCIDeviceClass *k = PCI_DEVICE_CLASS(klass); +VirtioPCIClass *vpciklass = VIRTIO_PCI_CLASS(klass); + +k->romfile = "efi-virtio.rom"; +k->vendor_id = PCI_VENDOR_ID_REDHAT_QUMRANET; +k->device_id = PCI_DEVICE_ID_VIRTIO_NET; +k->revision = VIRTIO_PCI_ABI_VERSION; +k->class_id = PCI_CLASS_NETWORK_ETHERNET; +set_bit(DEVICE_CATEGORY_NETWORK, dc->categories); +dc->props = virtio_net_properties; +vpciklass->realize = virtio_net_pci_realize; +} + +static void virtio_net_pci_instance_init(Object *obj) +{ +VirtIONetPCI *dev = VIRTIO_NET_PCI(obj); + +virtio_instance_init_common(obj, >vdev, sizeof(dev->vdev), +TYPE_VIRTIO_NET); +object_property_add_alias(obj, "bootindex", OBJECT(>vdev), + "bootindex", _abort); +} + +static const TypeInfo virtio_net_pci_info = { +.name = TYPE_VIRTIO_NET_PCI, +.parent= TYPE_VIRTIO_PCI, +.instance_size = sizeof(VirtIONetPCI), +.instance_init = virtio_net_pci_instance_init, +.class_init= virtio_net_pci_class_init, +}; + +static void virtio_net_pci_register(void) +{ +type_register_static(_net_pci_info); +} + +type_init(virtio_net_pci_register) diff --git a/hw/virtio/virtio-pci.c b/hw/virtio/virtio-pci.c index 4fe71a56c8..cb03bfa597 100644 --- a/hw/virtio/virtio-pci.c +++ b/hw/virtio/virtio-pci.c @@ -19,7 +19,6 @@ #include "standard-headers/linux/virtio_pci.h" #include "hw/virtio/virtio.h" -#include "hw/virtio/virtio-net.h" #include "hw/virtio/virtio-serial.h" #include "hw/pci/pci.h" #include "qapi/error.h" @@ -1966,61 +1965,6 @@ static const TypeInfo virtio_serial_pci_info = { .class_init= virtio_serial_pci_class_init, }; -/* virtio-net-pci */ - -static Property virtio_net_properties[] = { -DEFINE_PROP_BIT("ioeventfd", VirtIOPCIProxy, flags, -VIRTIO_PCI_FLAG_USE_IOEVENTFD_BIT, true), -DEFINE_PROP_UINT32("vectors", VirtIOPCIProxy, nvectors, 3), -DEFINE_PROP_END_OF_LIST(), -}; - -static void virtio_net_pci_realize(VirtIOPCIProxy *vpci_dev, Error **errp) -{ -DeviceState *qdev = DEVICE(vpci_dev); -VirtIONetPCI *dev = VIRTIO_NET_PCI(vpci_dev); -DeviceState *vdev =