[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[Qemu-devel] [PATCH v6 10/16] hw/vfio: calxeda xgmac device
From: |
Eric Auger |
Subject: |
[Qemu-devel] [PATCH v6 10/16] hw/vfio: calxeda xgmac device |
Date: |
Tue, 9 Sep 2014 08:31:10 +0100 |
The platform device class has become abstract. The device can be be
instantiated on command line using such option.
-device vfio-calxeda-xgmac,host="fff51000.ethernet"
compat string is hardcoded in the code except if user overrides it
Signed-off-by: Eric Auger <address@hidden>
---
v5 -> v6
- back again following Alex Graf advises
- fix a bug related to compat override
v4 -> v5:
removed since device tree was moved to hw/arm/dyn_sysbus_devtree.c
v4: creation for device tree specialization
---
hw/vfio/Makefile.objs | 1 +
hw/vfio/calxeda_xgmac.c | 57 ++++++++++++++++++++++++++++++++++++
include/hw/vfio/vfio-calxeda-xgmac.h | 41 ++++++++++++++++++++++++++
3 files changed, 99 insertions(+)
create mode 100644 hw/vfio/calxeda_xgmac.c
create mode 100644 include/hw/vfio/vfio-calxeda-xgmac.h
diff --git a/hw/vfio/Makefile.objs b/hw/vfio/Makefile.objs
index c5c76fe..913ab14 100644
--- a/hw/vfio/Makefile.objs
+++ b/hw/vfio/Makefile.objs
@@ -2,4 +2,5 @@ ifeq ($(CONFIG_LINUX), y)
obj-$(CONFIG_SOFTMMU) += common.o
obj-$(CONFIG_PCI) += pci.o
obj-$(CONFIG_SOFTMMU) += platform.o
+obj-$(CONFIG_SOFTMMU) += calxeda_xgmac.o
endif
diff --git a/hw/vfio/calxeda_xgmac.c b/hw/vfio/calxeda_xgmac.c
new file mode 100644
index 0000000..5e655ae
--- /dev/null
+++ b/hw/vfio/calxeda_xgmac.c
@@ -0,0 +1,57 @@
+/*
+ * calxeda xgmac example VFIO device
+ *
+ * Copyright Linaro Limited, 2014
+ *
+ * Authors:
+ * Eric Auger <address@hidden>
+ *
+ * This work is licensed under the terms of the GNU GPL, version 2. See
+ * the COPYING file in the top-level directory.
+ *
+ */
+
+#include "hw/vfio/vfio-calxeda-xgmac.h"
+
+static void calxeda_xgmac_realize(DeviceState *dev, Error **errp)
+{
+ VFIOPlatformDevice *vdev = VFIO_PLATFORM_DEVICE(dev);
+ VFIOCalxedaXgmacDeviceClass *k = VFIO_CALXEDA_XGMAC_DEVICE_GET_CLASS(dev);
+ const char compat[] = "calxeda,hb-xgmac";
+
+ if (vdev->compat == NULL) {
+ vdev->compat = g_strdup(compat);
+ } /* else use user-provided compat string */
+
+ k->parent_realize(dev, errp);
+}
+
+static const VMStateDescription vfio_platform_vmstate = {
+ .name = TYPE_VFIO_CALXEDA_XGMAC,
+ .unmigratable = 1,
+};
+
+static void vfio_calxeda_xgmac_class_init(ObjectClass *klass, void *data)
+{
+ DeviceClass *dc = DEVICE_CLASS(klass);
+ VFIOCalxedaXgmacDeviceClass *vcxc =
+ VFIO_CALXEDA_XGMAC_DEVICE_CLASS(klass);
+ vcxc->parent_realize = dc->realize;
+ dc->realize = calxeda_xgmac_realize;
+ dc->desc = "VFIO Calxeda XGMAC";
+}
+
+static const TypeInfo vfio_calxeda_xgmac_dev_info = {
+ .name = TYPE_VFIO_CALXEDA_XGMAC,
+ .parent = TYPE_VFIO_PLATFORM,
+ .instance_size = sizeof(VFIOCalxedaXgmacDevice),
+ .class_init = vfio_calxeda_xgmac_class_init,
+ .class_size = sizeof(VFIOCalxedaXgmacDeviceClass),
+};
+
+static void register_calxeda_xgmac_dev_type(void)
+{
+ type_register_static(&vfio_calxeda_xgmac_dev_info);
+}
+
+type_init(register_calxeda_xgmac_dev_type)
diff --git a/include/hw/vfio/vfio-calxeda-xgmac.h
b/include/hw/vfio/vfio-calxeda-xgmac.h
new file mode 100644
index 0000000..1529cf5
--- /dev/null
+++ b/include/hw/vfio/vfio-calxeda-xgmac.h
@@ -0,0 +1,41 @@
+/*
+ * VFIO calxeda xgmac device
+ *
+ * Copyright Linaro Limited, 2014
+ *
+ * Authors:
+ * Eric Auger <address@hidden>
+ *
+ * This work is licensed under the terms of the GNU GPL, version 2. See
+ * the COPYING file in the top-level directory.
+ *
+ */
+
+#ifndef HW_VFIO_VFIO_CALXEDA_XGMAC_H
+#define HW_VFIO_VFIO_CALXEDA_XGMAC_H
+
+#include "hw/vfio/vfio-platform.h"
+
+#define TYPE_VFIO_CALXEDA_XGMAC "vfio-calxeda-xgmac"
+
+typedef struct VFIOCalxedaXgmacDevice {
+ VFIOPlatformDevice vdev;
+} VFIOCalxedaXgmacDevice;
+
+typedef struct VFIOCalxedaXgmacDeviceClass {
+ /*< private >*/
+ VFIOPlatformDeviceClass parent_class;
+ /*< public >*/
+ DeviceRealize parent_realize;
+} VFIOCalxedaXgmacDeviceClass;
+
+#define VFIO_CALXEDA_XGMAC_DEVICE(obj) \
+ OBJECT_CHECK(VFIOCalxedaXgmacDevice, (obj), TYPE_VFIO_CALXEDA_XGMAC)
+#define VFIO_CALXEDA_XGMAC_DEVICE_CLASS(klass) \
+ OBJECT_CLASS_CHECK(VFIOCalxedaXgmacDeviceClass, (klass), \
+ TYPE_VFIO_CALXEDA_XGMAC)
+#define VFIO_CALXEDA_XGMAC_DEVICE_GET_CLASS(obj) \
+ OBJECT_GET_CLASS(VFIOCalxedaXgmacDeviceClass, (obj), \
+ TYPE_VFIO_CALXEDA_XGMAC)
+
+#endif
--
1.8.3.2
- [Qemu-devel] [PATCH v6 04/16] hw/vfio/pci: Introduce VFIORegion, (continued)
- [Qemu-devel] [PATCH v6 04/16] hw/vfio/pci: Introduce VFIORegion, Eric Auger, 2014/09/09
- [Qemu-devel] [PATCH v6 05/16] hw/vfio/pci: split vfio_get_device, Eric Auger, 2014/09/09
- [Qemu-devel] [PATCH v6 06/16] hw/vfio/pci: rename group_list into vfio_group_list, Eric Auger, 2014/09/09
- [Qemu-devel] [PATCH v6 07/16] hw/vfio/pci: use name field in format strings, Eric Auger, 2014/09/09
- [Qemu-devel] [PATCH v6 08/16] hw/vfio: create common module, Eric Auger, 2014/09/09
[Qemu-devel] [PATCH v6 09/16] hw/vfio/platform: add vfio-platform support, Eric Auger, 2014/09/09
[Qemu-devel] [PATCH v6 10/16] hw/vfio: calxeda xgmac device,
Eric Auger <=
[Qemu-devel] [PATCH v6 11/16] hw/arm/dyn_sysbus_devtree: enable vfio-calxeda-xgmac dynamic instantiation, Eric Auger, 2014/09/09
[Qemu-devel] [PATCH v6 13/16] hw/vfio/platform: Add irqfd support, Eric Auger, 2014/09/09
[Qemu-devel] [PATCH v6 12/16] vfio/platform: add fake injection modality, Eric Auger, 2014/09/09
[Qemu-devel] [PATCH v6 14/16] linux-headers: Update KVM headers from linux-next tag ToBeFilled, Eric Auger, 2014/09/09
[Qemu-devel] [PATCH v6 15/16] VFIO: COMMON: vfio_kvm_device_fd moved in the common header, Eric Auger, 2014/09/09
[Qemu-devel] [PATCH v6 16/16] VFIO: PLATFORM: add forwarded irq support, Eric Auger, 2014/09/09
Re: [Qemu-devel] [PATCH v6 00/16] KVM platform device passthrough, Alex Williamson, 2014/09/11