virtio: initializing and declaring tizen virtio devices are moved 55/23655/3
authorSeokYeon Hwang <syeon.hwang@samsung.com>
Tue, 1 Jul 2014 06:48:10 +0000 (15:48 +0900)
committerSeokYeon Hwang <syeon.hwang@samsung.com>
Tue, 1 Jul 2014 08:21:59 +0000 (17:21 +0900)
Tizen specific virtio devices are moved into "tizen/src/hw/maru_virtio_pci.c".

Change-Id: Ie6664508c02ac07a65aacb7baa6a8bee981f8f25
Signed-off-by: SeokYeon Hwang <syeon.hwang@samsung.com>
hw/virtio/virtio-pci.c
hw/virtio/virtio-pci.h
tizen/src/hw/Makefile.objs
tizen/src/hw/maru_virtio_pci.c [new file with mode: 0644]

index f3b08c780beae211113ec427dee3509bff9dbef9..ce97514b69aeb62f97bcf05b204727d188e4a4e0 100644 (file)
@@ -666,7 +666,7 @@ static void virtio_pci_vq_vector_mask(VirtIOPCIProxy *proxy,
 
     /* If guest supports masking, keep irqfd but mask it.
      * Otherwise, clean it up now.
-     */
+     */ 
     if (k->guest_notifier_mask) {
         k->guest_notifier_mask(vdev, queue_no, true);
     } else {
@@ -1531,449 +1531,6 @@ static const TypeInfo virtio_rng_pci_info = {
     .class_init    = virtio_rng_pci_class_init,
 };
 
-#ifdef CONFIG_MARU
-/* virtio-touchscreen-pci */
-
-static Property virtio_touchscreen_pci_properties[] = {
-    DEFINE_PROP_UINT32(TOUCHSCREEN_OPTION_NAME,
-        VirtIOTouchscreenPCI,vdev.max_finger, DEFAULT_MAX_FINGER),
-    DEFINE_PROP_END_OF_LIST(),
-};
-
-static int virtio_touchscreen_pci_init(VirtIOPCIProxy *vpci_dev)
-{
-    VirtIOTouchscreenPCI *dev = VIRTIO_TOUCHSCREEN_PCI(vpci_dev);
-    DeviceState *vdev = DEVICE(&dev->vdev);
-
-    qdev_set_parent_bus(vdev, BUS(&vpci_dev->bus));
-    if (qdev_init(vdev) < 0) {
-        return -1;
-    }
-    return 0;
-}
-
-static void virtio_touchscreen_pci_class_init(ObjectClass *klass, void *data)
-{
-    DeviceClass *dc = DEVICE_CLASS(klass);
-    VirtioPCIClass *k = VIRTIO_PCI_CLASS(klass);
-    PCIDeviceClass *pcidev_k = PCI_DEVICE_CLASS(klass);
-
-    dc->props = virtio_touchscreen_pci_properties;
-    k->init = virtio_touchscreen_pci_init;
-    pcidev_k->vendor_id = PCI_VENDOR_ID_REDHAT_QUMRANET;
-    pcidev_k->device_id = PCI_DEVICE_ID_VIRTIO_TOUCHSCREEN;
-    pcidev_k->revision = VIRTIO_PCI_ABI_VERSION;
-    pcidev_k->class_id = PCI_CLASS_OTHERS;
-}
-
-static void virtio_touchscreen_pci_instance_init(Object *obj)
-{
-    VirtIOTouchscreenPCI *dev = VIRTIO_TOUCHSCREEN_PCI(obj);
-    object_initialize(&dev->vdev, sizeof(dev->vdev), TYPE_VIRTIO_TOUCHSCREEN);
-    object_property_add_child(obj, "virtio-backend", OBJECT(&dev->vdev), NULL);
-
-    dev->vdev.max_finger = DEFAULT_MAX_FINGER;
-}
-
-static TypeInfo virtio_touchscreen_pci_info = {
-    .name          = TYPE_VIRTIO_TOUCHSCREEN_PCI,
-    .parent        = TYPE_VIRTIO_PCI,
-    .instance_size = sizeof(VirtIOTouchscreenPCI),
-    .instance_init = virtio_touchscreen_pci_instance_init,
-    .class_init    = virtio_touchscreen_pci_class_init,
-};
-
-/* virtio-keyboard-pci */
-
-static int virtio_keyboard_pci_init(VirtIOPCIProxy *vpci_dev)
-{
-    VirtIOKeyboardPCI *dev = VIRTIO_KEYBOARD_PCI(vpci_dev);
-    DeviceState *vdev = DEVICE(&dev->vdev);
-
-    qdev_set_parent_bus(vdev, BUS(&vpci_dev->bus));
-    if (qdev_init(vdev) < 0) {
-        return -1;
-    }
-    return 0;
-}
-
-static void virtio_keyboard_pci_class_init(ObjectClass *klass, void *data)
-{
-//    DeviceClass *dc = DEVICE_CLASS(klass);
-    VirtioPCIClass *k = VIRTIO_PCI_CLASS(klass);
-    PCIDeviceClass *pcidev_k = PCI_DEVICE_CLASS(klass);
-
-    k->init = virtio_keyboard_pci_init;
-    pcidev_k->vendor_id = PCI_VENDOR_ID_REDHAT_QUMRANET;
-    pcidev_k->device_id = PCI_DEVICE_ID_VIRTIO_KEYBOARD;
-    pcidev_k->revision = VIRTIO_PCI_ABI_VERSION;
-    pcidev_k->class_id = PCI_CLASS_OTHERS;
-}
-
-static void virtio_keyboard_pci_instance_init(Object *obj)
-{
-    VirtIOKeyboardPCI *dev = VIRTIO_KEYBOARD_PCI(obj);
-    object_initialize(&dev->vdev, sizeof(dev->vdev), TYPE_VIRTIO_KEYBOARD);
-    object_property_add_child(obj, "virtio-backend", OBJECT(&dev->vdev), NULL);
-}
-
-static TypeInfo virtio_keyboard_pci_info = {
-    .name          = TYPE_VIRTIO_KEYBOARD_PCI,
-    .parent        = TYPE_VIRTIO_PCI,
-    .instance_size = sizeof(VirtIOKeyboardPCI),
-       .instance_init = virtio_keyboard_pci_instance_init,
-    .class_init    = virtio_keyboard_pci_class_init,
-};
-
-/* virtio-esm-pci */
-
-static int virtio_esm_pci_init(VirtIOPCIProxy *vpci_dev)
-{
-    VirtIOESMPCI *dev = VIRTIO_ESM_PCI(vpci_dev);
-    DeviceState *vdev = DEVICE(&dev->vdev);
-
-    qdev_set_parent_bus(vdev, BUS(&vpci_dev->bus));
-    if (qdev_init(vdev) < 0) {
-        return -1;
-    }
-    return 0;
-}
-
-static void virtio_esm_pci_class_init(ObjectClass *klass, void *data)
-{
-//    DeviceClass *dc = DEVICE_CLASS(klass);
-    VirtioPCIClass *k = VIRTIO_PCI_CLASS(klass);
-    PCIDeviceClass *pcidev_k = PCI_DEVICE_CLASS(klass);
-
-    k->init = virtio_esm_pci_init;
-    pcidev_k->vendor_id = PCI_VENDOR_ID_REDHAT_QUMRANET;
-    pcidev_k->device_id = PCI_DEVICE_ID_VIRTIO_ESM;
-    pcidev_k->revision = VIRTIO_PCI_ABI_VERSION;
-    pcidev_k->class_id = PCI_CLASS_OTHERS;
-}
-
-static void virtio_esm_pci_instance_init(Object *obj)
-{
-    VirtIOESMPCI *dev = VIRTIO_ESM_PCI(obj);
-    object_initialize(&dev->vdev, sizeof(dev->vdev), TYPE_VIRTIO_ESM);
-    object_property_add_child(obj, "virtio-backend", OBJECT(&dev->vdev), NULL);
-}
-
-static TypeInfo virtio_esm_pci_info = {
-    .name          = TYPE_VIRTIO_ESM_PCI,
-    .parent        = TYPE_VIRTIO_PCI,
-    .instance_size = sizeof(VirtIOESMPCI),
-       .instance_init = virtio_esm_pci_instance_init,
-    .class_init    = virtio_esm_pci_class_init,
-};
-
-/* virtio-hwkey-pci */
-
-static int virtio_hwkey_pci_init(VirtIOPCIProxy *vpci_dev)
-{
-    VirtIOHWKeyPCI *dev = VIRTIO_HWKEY_PCI(vpci_dev);
-    DeviceState *vdev = DEVICE(&dev->vdev);
-
-    qdev_set_parent_bus(vdev, BUS(&vpci_dev->bus));
-    if (qdev_init(vdev) < 0) {
-        return -1;
-    }
-    return 0;
-}
-
-static void virtio_hwkey_pci_class_init(ObjectClass *klass, void *data)
-{
-//    DeviceClass *dc = DEVICE_CLASS(klass);
-    VirtioPCIClass *k = VIRTIO_PCI_CLASS(klass);
-    PCIDeviceClass *pcidev_k = PCI_DEVICE_CLASS(klass);
-
-    k->init = virtio_hwkey_pci_init;
-    pcidev_k->vendor_id = PCI_VENDOR_ID_REDHAT_QUMRANET;
-    pcidev_k->device_id = PCI_DEVICE_ID_VIRTIO_HWKEY;
-    pcidev_k->revision = VIRTIO_PCI_ABI_VERSION;
-    pcidev_k->class_id = PCI_CLASS_OTHERS;
-}
-
-static void virtio_hwkey_pci_instance_init(Object *obj)
-{
-    VirtIOHWKeyPCI *dev = VIRTIO_HWKEY_PCI(obj);
-    object_initialize(&dev->vdev, sizeof(dev->vdev), TYPE_VIRTIO_HWKEY);
-    object_property_add_child(obj, "virtio-backend", OBJECT(&dev->vdev), NULL);
-}
-
-static TypeInfo virtio_hwkey_pci_info = {
-    .name          = TYPE_VIRTIO_HWKEY_PCI,
-    .parent        = TYPE_VIRTIO_PCI,
-    .instance_size = sizeof(VirtIOHWKeyPCI),
-       .instance_init = virtio_hwkey_pci_instance_init,
-    .class_init    = virtio_hwkey_pci_class_init,
-};
-
-/* virtio-evdi-pci */
-
-static int virtio_evdi_pci_init(VirtIOPCIProxy *vpci_dev)
-{
-    VirtIOEVDIPCI *dev = VIRTIO_EVDI_PCI(vpci_dev);
-    DeviceState *vdev = DEVICE(&dev->vdev);
-
-    qdev_set_parent_bus(vdev, BUS(&vpci_dev->bus));
-    if (qdev_init(vdev) < 0) {
-        return -1;
-    }
-    return 0;
-}
-
-static void virtio_evdi_pci_class_init(ObjectClass *klass, void *data)
-{
-//    DeviceClass *dc = DEVICE_CLASS(klass);
-    VirtioPCIClass *k = VIRTIO_PCI_CLASS(klass);
-    PCIDeviceClass *pcidev_k = PCI_DEVICE_CLASS(klass);
-
-    k->init = virtio_evdi_pci_init;
-    pcidev_k->vendor_id = PCI_VENDOR_ID_REDHAT_QUMRANET;
-    pcidev_k->device_id = PCI_DEVICE_ID_VIRTIO_EVDI;
-    pcidev_k->revision = VIRTIO_PCI_ABI_VERSION;
-    pcidev_k->class_id = PCI_CLASS_OTHERS;
-}
-
-static void virtio_evdi_pci_instance_init(Object *obj)
-{
-    VirtIOEVDIPCI *dev = VIRTIO_EVDI_PCI(obj);
-    object_initialize(&dev->vdev, sizeof(dev->vdev), TYPE_VIRTIO_EVDI);
-    object_property_add_child(obj, "virtio-backend", OBJECT(&dev->vdev), NULL);
-}
-
-static TypeInfo virtio_evdi_pci_info = {
-    .name          = TYPE_VIRTIO_EVDI_PCI,
-    .parent        = TYPE_VIRTIO_PCI,
-    .instance_size = sizeof(VirtIOEVDIPCI),
-       .instance_init = virtio_evdi_pci_instance_init,
-    .class_init    = virtio_evdi_pci_class_init,
-};
-
-/* virtio-sensor-pci */
-
-static int virtio_sensor_pci_init(VirtIOPCIProxy *vpci_dev)
-{
-    VirtIOSENSORPCI *dev = VIRTIO_SENSOR_PCI(vpci_dev);
-    DeviceState *vdev = DEVICE(&dev->vdev);
-
-    qdev_set_parent_bus(vdev, BUS(&vpci_dev->bus));
-    if (qdev_init(vdev) < 0) {
-        return -1;
-    }
-    return 0;
-}
-
-static Property virtio_sensor_pci_properties[] = {
-    DEFINE_PROP_STRING(ATTRIBUTE_NAME_SENSORS, VirtIOSENSORPCI, vdev.sensors),
-    DEFINE_VIRTIO_COMMON_FEATURES(VirtIOPCIProxy, host_features),
-    DEFINE_PROP_END_OF_LIST(),
-};
-
-static void virtio_sensor_pci_class_init(ObjectClass *klass, void *data)
-{
-    DeviceClass *dc = DEVICE_CLASS(klass);
-    VirtioPCIClass *k = VIRTIO_PCI_CLASS(klass);
-    PCIDeviceClass *pcidev_k = PCI_DEVICE_CLASS(klass);
-
-    k->init = virtio_sensor_pci_init;
-    pcidev_k->vendor_id = PCI_VENDOR_ID_REDHAT_QUMRANET;
-    pcidev_k->device_id = PCI_DEVICE_ID_VIRTIO_SENSOR;
-    pcidev_k->revision = VIRTIO_PCI_ABI_VERSION;
-    pcidev_k->class_id = PCI_CLASS_OTHERS;
-    dc->props = virtio_sensor_pci_properties;
-}
-
-static void virtio_sensor_pci_instance_init(Object *obj)
-{
-    VirtIOSENSORPCI *dev = VIRTIO_SENSOR_PCI(obj);
-    object_initialize(&dev->vdev, sizeof(dev->vdev), TYPE_VIRTIO_SENSOR);
-    object_property_add_child(obj, "virtio-backend", OBJECT(&dev->vdev), NULL);
-}
-
-static TypeInfo virtio_sensor_pci_info = {
-    .name          = TYPE_VIRTIO_SENSOR_PCI,
-    .parent        = TYPE_VIRTIO_PCI,
-    .instance_size = sizeof(VirtIOSENSORPCI),
-       .instance_init = virtio_sensor_pci_instance_init,
-    .class_init    = virtio_sensor_pci_class_init,
-};
-
-/* virtio NFC */
-
-static int virtio_nfc_pci_init(VirtIOPCIProxy *vpci_dev)
-{
-    VirtIONFCPCI *dev = VIRTIO_NFC_PCI(vpci_dev);
-    DeviceState *vdev = DEVICE(&dev->vdev);
-
-    qdev_set_parent_bus(vdev, BUS(&vpci_dev->bus));
-    if (qdev_init(vdev) < 0) {
-        return -1;
-    }
-    return 0;
-}
-
-static void virtio_nfc_pci_class_init(ObjectClass *klass, void *data)
-{
-    VirtioPCIClass *k = VIRTIO_PCI_CLASS(klass);
-    PCIDeviceClass *pcidev_k = PCI_DEVICE_CLASS(klass);
-
-    k->init = virtio_nfc_pci_init;
-    pcidev_k->vendor_id = PCI_VENDOR_ID_REDHAT_QUMRANET;
-    pcidev_k->device_id = PCI_DEVICE_ID_VIRTIO_NFC;
-    pcidev_k->revision = VIRTIO_PCI_ABI_VERSION;
-    pcidev_k->class_id = PCI_CLASS_OTHERS;
-}
-
-static void virtio_nfc_pci_instance_init(Object *obj)
-{
-    VirtIONFCPCI *dev = VIRTIO_NFC_PCI(obj);
-    object_initialize(&dev->vdev, sizeof(dev->vdev), TYPE_VIRTIO_NFC);
-    object_property_add_child(obj, "virtio-backend", OBJECT(&dev->vdev), NULL);
-}
-
-static TypeInfo virtio_nfc_pci_info = {
-    .name          = TYPE_VIRTIO_NFC_PCI,
-    .parent        = TYPE_VIRTIO_PCI,
-    .instance_size = sizeof(VirtIONFCPCI),
-       .instance_init = virtio_nfc_pci_instance_init,
-    .class_init    = virtio_nfc_pci_class_init,
-};
-
-/* virtio-jack-pci */
-
-static int virtio_jack_pci_init(VirtIOPCIProxy *vpci_dev)
-{
-    VirtIOJACKPCI *dev = VIRTIO_JACK_PCI(vpci_dev);
-    DeviceState *vdev = DEVICE(&dev->vdev);
-
-    qdev_set_parent_bus(vdev, BUS(&vpci_dev->bus));
-    if (qdev_init(vdev) < 0) {
-        return -1;
-    }
-    return 0;
-}
-
-static Property virtio_jack_pci_properties[] = {
-    DEFINE_PROP_STRING(ATTRIBUTE_NAME_JACKS, VirtIOJACKPCI, vdev.jacks),
-    DEFINE_VIRTIO_COMMON_FEATURES(VirtIOPCIProxy, host_features),
-    DEFINE_PROP_END_OF_LIST(),
-};
-
-static void virtio_jack_pci_class_init(ObjectClass *klass, void *data)
-{
-    DeviceClass *dc = DEVICE_CLASS(klass);
-    VirtioPCIClass *k = VIRTIO_PCI_CLASS(klass);
-    PCIDeviceClass *pcidev_k = PCI_DEVICE_CLASS(klass);
-
-    k->init = virtio_jack_pci_init;
-    pcidev_k->vendor_id = PCI_VENDOR_ID_REDHAT_QUMRANET;
-    pcidev_k->device_id = PCI_DEVICE_ID_VIRTIO_JACK;
-    pcidev_k->revision = VIRTIO_PCI_ABI_VERSION;
-    pcidev_k->class_id = PCI_CLASS_OTHERS;
-    dc->props = virtio_jack_pci_properties;
-}
-
-static void virtio_jack_pci_instance_init(Object *obj)
-{
-    VirtIOJACKPCI *dev = VIRTIO_JACK_PCI(obj);
-    object_initialize(&dev->vdev, sizeof(dev->vdev), TYPE_VIRTIO_JACK);
-    object_property_add_child(obj, "virtio-backend", OBJECT(&dev->vdev), NULL);
-}
-
-static TypeInfo virtio_jack_pci_info = {
-    .name          = TYPE_VIRTIO_JACK_PCI,
-    .parent        = TYPE_VIRTIO_PCI,
-    .instance_size = sizeof(VirtIOJACKPCI),
-    .instance_init = virtio_jack_pci_instance_init,
-    .class_init    = virtio_jack_pci_class_init,
-};
-
-/* virtio-power-pci */
-
-static int virtio_power_pci_init(VirtIOPCIProxy *vpci_dev)
-{
-    VirtIOPOWERPCI *dev = VIRTIO_POWER_PCI(vpci_dev);
-    DeviceState *vdev = DEVICE(&dev->vdev);
-
-    qdev_set_parent_bus(vdev, BUS(&vpci_dev->bus));
-    if (qdev_init(vdev) < 0) {
-        return -1;
-    }
-    return 0;
-}
-
-static void virtio_power_pci_class_init(ObjectClass *klass, void *data)
-{
-    VirtioPCIClass *k = VIRTIO_PCI_CLASS(klass);
-    PCIDeviceClass *pcidev_k = PCI_DEVICE_CLASS(klass);
-
-    k->init = virtio_power_pci_init;
-    pcidev_k->vendor_id = PCI_VENDOR_ID_REDHAT_QUMRANET;
-    pcidev_k->device_id = PCI_DEVICE_ID_VIRTIO_POWER;
-    pcidev_k->revision = VIRTIO_PCI_ABI_VERSION;
-    pcidev_k->class_id = PCI_CLASS_OTHERS;
-}
-
-static void virtio_power_pci_instance_init(Object *obj)
-{
-    VirtIOPOWERPCI *dev = VIRTIO_POWER_PCI(obj);
-    object_initialize(&dev->vdev, sizeof(dev->vdev), TYPE_VIRTIO_POWER);
-    object_property_add_child(obj, "virtio-backend", OBJECT(&dev->vdev), NULL);
-}
-
-static TypeInfo virtio_power_pci_info = {
-    .name          = TYPE_VIRTIO_POWER_PCI,
-    .parent        = TYPE_VIRTIO_PCI,
-    .instance_size = sizeof(VirtIOPOWERPCI),
-    .instance_init = virtio_power_pci_instance_init,
-    .class_init    = virtio_power_pci_class_init,
-};
-
-/* virtio-vmodem-pci */
-
-static int virtio_vmodem_pci_init(VirtIOPCIProxy *vpci_dev)
-{
-    VirtIOVModemPCI *dev = VIRTIO_VMODEM_PCI(vpci_dev);
-    DeviceState *vdev = DEVICE(&dev->vdev);
-
-    qdev_set_parent_bus(vdev, BUS(&vpci_dev->bus));
-    if (qdev_init(vdev) < 0) {
-        return -1;
-    }
-    return 0;
-}
-
-static void virtio_vmodem_pci_class_init(ObjectClass *klass, void *data)
-{
-    VirtioPCIClass *k = VIRTIO_PCI_CLASS(klass);
-    PCIDeviceClass *pcidev_k = PCI_DEVICE_CLASS(klass);
-
-    k->init = virtio_vmodem_pci_init;
-    pcidev_k->vendor_id = PCI_VENDOR_ID_REDHAT_QUMRANET;
-    pcidev_k->device_id = PCI_DEVICE_ID_VIRTIO_VMODEM;
-    pcidev_k->revision = VIRTIO_PCI_ABI_VERSION;
-    pcidev_k->class_id = PCI_CLASS_OTHERS;
-}
-
-static void virtio_vmodem_pci_instance_init(Object *obj)
-{
-    VirtIOVModemPCI *dev = VIRTIO_VMODEM_PCI(obj);
-    object_initialize(&dev->vdev, sizeof(dev->vdev), TYPE_VIRTIO_VMODEM);
-    object_property_add_child(obj, "virtio-backend", OBJECT(&dev->vdev), NULL);
-}
-
-static TypeInfo virtio_vmodem_pci_info = {
-    .name          = TYPE_VIRTIO_VMODEM_PCI,
-    .parent        = TYPE_VIRTIO_PCI,
-    .instance_size = sizeof(VirtIOVModemPCI),
-    .instance_init = virtio_vmodem_pci_instance_init,
-    .class_init    = virtio_vmodem_pci_class_init,
-};
-
-#endif
-
 /* virtio-pci-bus */
 
 static void virtio_pci_bus_new(VirtioBusState *bus, size_t bus_size,
@@ -2031,18 +1588,6 @@ static void virtio_pci_register_types(void)
 #ifdef CONFIG_VHOST_SCSI
     type_register_static(&vhost_scsi_pci_info);
 #endif
-#ifdef CONFIG_MARU
-    type_register_static(&virtio_evdi_pci_info);
-    type_register_static(&virtio_esm_pci_info);
-    type_register_static(&virtio_hwkey_pci_info);
-    type_register_static(&virtio_keyboard_pci_info);
-    type_register_static(&virtio_touchscreen_pci_info);
-    type_register_static(&virtio_sensor_pci_info);
-    type_register_static(&virtio_nfc_pci_info);
-    type_register_static(&virtio_jack_pci_info);
-    type_register_static(&virtio_power_pci_info);
-    type_register_static(&virtio_vmodem_pci_info);
-#endif
 }
 
 type_init(virtio_pci_register_types)
index 96f930f90ddd8096ce7cb87392a15f011e322f51..dc332ae774cc8050a096d53b97c0e00b59c70ea8 100644 (file)
 #include "hw/virtio/vhost-scsi.h"
 #endif
 
-#ifdef CONFIG_MARU
-#include "tizen/src/hw/maru_device_ids.h"
-#include "tizen/src/hw/maru_virtio_evdi.h"
-#include "tizen/src/hw/maru_virtio_esm.h"
-#include "tizen/src/hw/maru_virtio_hwkey.h"
-#include "tizen/src/hw/maru_virtio_keyboard.h"
-#include "tizen/src/hw/maru_virtio_touchscreen.h"
-#include "tizen/src/hw/maru_virtio_sensor.h"
-#include "tizen/src/hw/maru_virtio_jack.h"
-#include "tizen/src/hw/maru_virtio_power.h"
-#include "tizen/src/hw/maru_virtio_nfc.h"
-#include "tizen/src/hw/maru_virtio_vmodem.h"
-#endif
-
 typedef struct VirtIOPCIProxy VirtIOPCIProxy;
 typedef struct VirtIOBlkPCI VirtIOBlkPCI;
 typedef struct VirtIOSCSIPCI VirtIOSCSIPCI;
@@ -54,19 +40,6 @@ typedef struct VirtIONetPCI VirtIONetPCI;
 typedef struct VHostSCSIPCI VHostSCSIPCI;
 typedef struct VirtIORngPCI VirtIORngPCI;
 
-#ifdef CONFIG_MARU
-typedef struct VirtIOTouchscreenPCI VirtIOTouchscreenPCI;
-typedef struct VirtIOEVDIPCI VirtIOEVDIPCI;
-typedef struct VirtIOESMPCI VirtIOESMPCI;
-typedef struct VirtIOHWKeyPCI VirtIOHWKeyPCI;
-typedef struct VirtIOKeyboardPCI VirtIOKeyboardPCI;
-typedef struct VirtIOSENSORPCI VirtIOSENSORPCI;
-typedef struct VirtIONFCPCI VirtIONFCPCI;
-typedef struct VirtIOPOWERPCI VirtIOPOWERPCI;
-typedef struct VirtIOJACKPCI VirtIOJACKPCI;
-typedef struct VirtIOVModemPCI VirtIOVModemPCI;
-#endif
-
 /* virtio-pci-bus */
 
 typedef struct VirtioBusState VirtioPCIBusState;
@@ -226,127 +199,6 @@ struct VirtIORngPCI {
     VirtIORNG vdev;
 };
 
-#ifdef CONFIG_MARU
-
-/*
- * virtio-touchscreen-pci: This extends VirtioPCIProxy.
- */
-#define TYPE_VIRTIO_TOUCHSCREEN_PCI "virtio-touchscreen-pci"
-#define VIRTIO_TOUCHSCREEN_PCI(obj) \
-        OBJECT_CHECK(VirtIOTouchscreenPCI, (obj), TYPE_VIRTIO_TOUCHSCREEN_PCI)
-
-struct VirtIOTouchscreenPCI {
-    VirtIOPCIProxy parent_obj;
-    VirtIOTouchscreen vdev;
-};
-
-/*
- * virtio-keyboard-pci: This extends VirtioPCIProxy.
- */
-#define TYPE_VIRTIO_KEYBOARD_PCI "virtio-keyboard-pci"
-#define VIRTIO_KEYBOARD_PCI(obj) \
-        OBJECT_CHECK(VirtIOKeyboardPCI, (obj), TYPE_VIRTIO_KEYBOARD_PCI)
-
-struct VirtIOKeyboardPCI {
-    VirtIOPCIProxy parent_obj;
-    VirtIOKeyboard vdev;
-};
-
-/*
- * virtio-evdi-pci: This extends VirtioPCIProxy.
- */
-#define TYPE_VIRTIO_EVDI_PCI "virtio-evdi-pci"
-#define VIRTIO_EVDI_PCI(obj) \
-        OBJECT_CHECK(VirtIOEVDIPCI, (obj), TYPE_VIRTIO_EVDI_PCI)
-
-struct VirtIOEVDIPCI {
-    VirtIOPCIProxy parent_obj;
-    VirtIOEVDI vdev;
-};
-
-/*
- * virtio-esm-pci: This extends VirtioPCIProxy.
- */
-#define TYPE_VIRTIO_ESM_PCI "virtio-esm-pci"
-#define VIRTIO_ESM_PCI(obj) \
-        OBJECT_CHECK(VirtIOESMPCI, (obj), TYPE_VIRTIO_ESM_PCI)
-struct VirtIOESMPCI {
-    VirtIOPCIProxy parent_obj;
-    VirtIOESM vdev;
-};
-
-/*
- * virtio-hwkey-pci: This extends VirtioPCIProxy.
- */
-#define TYPE_VIRTIO_HWKEY_PCI "virtio-hwkey-pci"
-#define VIRTIO_HWKEY_PCI(obj) \
-        OBJECT_CHECK(VirtIOHWKeyPCI, (obj), TYPE_VIRTIO_HWKEY_PCI)
-struct VirtIOHWKeyPCI {
-    VirtIOPCIProxy parent_obj;
-    VirtIOHWKey vdev;
-};
-
-/*
- * virtio-sensor-pci: This extends VirtioPCIProxy.
- */
-#define TYPE_VIRTIO_SENSOR_PCI "virtio-sensor-pci"
-#define VIRTIO_SENSOR_PCI(obj) \
-        OBJECT_CHECK(VirtIOSENSORPCI, (obj), TYPE_VIRTIO_SENSOR_PCI)
-
-struct VirtIOSENSORPCI {
-    VirtIOPCIProxy parent_obj;
-    VirtIOSENSOR vdev;
-};
-
-/*
- * virtio-nfc-pci: This extends VirtioPCIProxy.
- */
-#define TYPE_VIRTIO_NFC_PCI "virtio-nfc-pci"
-#define VIRTIO_NFC_PCI(obj) \
-        OBJECT_CHECK(VirtIONFCPCI, (obj), TYPE_VIRTIO_NFC_PCI)
-
-struct VirtIONFCPCI {
-    VirtIOPCIProxy parent_obj;
-    VirtIONFC vdev;
-};
-
-/*
- * virtio-jack-pci: This extends VirtioPCIProxy.
- */
-#define TYPE_VIRTIO_JACK_PCI "virtio-jack-pci"
-#define VIRTIO_JACK_PCI(obj) \
-        OBJECT_CHECK(VirtIOJACKPCI, (obj), TYPE_VIRTIO_JACK_PCI)
-
-struct VirtIOJACKPCI {
-    VirtIOPCIProxy parent_obj;
-    VirtIOJACK vdev;
-};
-
-/*
- * virtio-power-pci: This extends VirtioPCIProxy.
- */
-#define TYPE_VIRTIO_POWER_PCI "virtio-power-pci"
-#define VIRTIO_POWER_PCI(obj) \
-        OBJECT_CHECK(VirtIOPOWERPCI, (obj), TYPE_VIRTIO_POWER_PCI)
-
-struct VirtIOPOWERPCI {
-    VirtIOPCIProxy parent_obj;
-    VirtIOPOWER vdev;
-};
-
-/*
- * virtio-vmodem-pci: This extends VirtioPCIProxy.
- */
-#define TYPE_VIRTIO_VMODEM_PCI "virtio-vmodem-pci"
-#define VIRTIO_VMODEM_PCI(obj) \
-        OBJECT_CHECK(VirtIOVModemPCI, (obj), TYPE_VIRTIO_VMODEM_PCI)
-struct VirtIOVModemPCI {
-    VirtIOPCIProxy parent_obj;
-    VirtIOVModem vdev;
-};
-
-#endif
-
 /* Virtio ABI version, if we increment this, we break the guest driver. */
 #define VIRTIO_PCI_ABI_VERSION          0
 
index 13173ffe99cfd793635d3cceee7b0fce7fe4b76e..42c9dc66bd8910d06dc28d6f343e91a127cd5fda 100644 (file)
@@ -2,6 +2,8 @@ obj-y += maru_board.o maru_pm.o
 
 obj-y += maru_brill_codec.o
 obj-y += maru_brightness.o
+
+obj-y += maru_virtio_pci.o
 obj-y += maru_virtio_touchscreen.o
 obj-y += maru_virtio_esm.o
 obj-y += maru_virtio_evdi.o
diff --git a/tizen/src/hw/maru_virtio_pci.c b/tizen/src/hw/maru_virtio_pci.c
new file mode 100644 (file)
index 0000000..1bc4efb
--- /dev/null
@@ -0,0 +1,625 @@
+/*
+ * Maru virtio pci
+ *
+ * Copyright (C) 2014 Samsung Electronics Co., Ltd. All rights reserved.
+ *
+ * Contact:
+ * SeokYeon Hwang <syeon.hwang@samsung.com>
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program 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 General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA 02110-1301, USA.
+ *
+ * Contributors:
+ * - S-Core Co., Ltd
+ *
+ * refer to hw/virtio/virtio-pci.c
+ */
+
+#include "hw/virtio/virtio-pci.h"
+
+#include "tizen/src/hw/maru_device_ids.h"
+#include "tizen/src/hw/maru_virtio_evdi.h"
+#include "tizen/src/hw/maru_virtio_esm.h"
+#include "tizen/src/hw/maru_virtio_hwkey.h"
+#include "tizen/src/hw/maru_virtio_keyboard.h"
+#include "tizen/src/hw/maru_virtio_touchscreen.h"
+#include "tizen/src/hw/maru_virtio_sensor.h"
+#include "tizen/src/hw/maru_virtio_jack.h"
+#include "tizen/src/hw/maru_virtio_power.h"
+#include "tizen/src/hw/maru_virtio_nfc.h"
+#include "tizen/src/hw/maru_virtio_vmodem.h"
+
+typedef struct VirtIOTouchscreenPCI VirtIOTouchscreenPCI;
+typedef struct VirtIOEVDIPCI VirtIOEVDIPCI;
+typedef struct VirtIOESMPCI VirtIOESMPCI;
+typedef struct VirtIOHWKeyPCI VirtIOHWKeyPCI;
+typedef struct VirtIOKeyboardPCI VirtIOKeyboardPCI;
+typedef struct VirtIOSENSORPCI VirtIOSENSORPCI;
+typedef struct VirtIONFCPCI VirtIONFCPCI;
+typedef struct VirtIOPOWERPCI VirtIOPOWERPCI;
+typedef struct VirtIOJACKPCI VirtIOJACKPCI;
+typedef struct VirtIOVModemPCI VirtIOVModemPCI;
+
+/*
+ * virtio-touchscreen-pci: This extends VirtioPCIProxy.
+ */
+#define TYPE_VIRTIO_TOUCHSCREEN_PCI "virtio-touchscreen-pci"
+#define VIRTIO_TOUCHSCREEN_PCI(obj) \
+        OBJECT_CHECK(VirtIOTouchscreenPCI, (obj), TYPE_VIRTIO_TOUCHSCREEN_PCI)
+
+struct VirtIOTouchscreenPCI {
+    VirtIOPCIProxy parent_obj;
+    VirtIOTouchscreen vdev;
+};
+
+/*
+ * virtio-keyboard-pci: This extends VirtioPCIProxy.
+ */
+#define TYPE_VIRTIO_KEYBOARD_PCI "virtio-keyboard-pci"
+#define VIRTIO_KEYBOARD_PCI(obj) \
+        OBJECT_CHECK(VirtIOKeyboardPCI, (obj), TYPE_VIRTIO_KEYBOARD_PCI)
+
+struct VirtIOKeyboardPCI {
+    VirtIOPCIProxy parent_obj;
+    VirtIOKeyboard vdev;
+};
+
+/*
+ * virtio-evdi-pci: This extends VirtioPCIProxy.
+ */
+#define TYPE_VIRTIO_EVDI_PCI "virtio-evdi-pci"
+#define VIRTIO_EVDI_PCI(obj) \
+        OBJECT_CHECK(VirtIOEVDIPCI, (obj), TYPE_VIRTIO_EVDI_PCI)
+
+struct VirtIOEVDIPCI {
+    VirtIOPCIProxy parent_obj;
+    VirtIOEVDI vdev;
+};
+
+/*
+ * virtio-esm-pci: This extends VirtioPCIProxy.
+ */
+#define TYPE_VIRTIO_ESM_PCI "virtio-esm-pci"
+#define VIRTIO_ESM_PCI(obj) \
+        OBJECT_CHECK(VirtIOESMPCI, (obj), TYPE_VIRTIO_ESM_PCI)
+struct VirtIOESMPCI {
+    VirtIOPCIProxy parent_obj;
+    VirtIOESM vdev;
+};
+
+/*
+ * virtio-hwkey-pci: This extends VirtioPCIProxy.
+ */
+#define TYPE_VIRTIO_HWKEY_PCI "virtio-hwkey-pci"
+#define VIRTIO_HWKEY_PCI(obj) \
+        OBJECT_CHECK(VirtIOHWKeyPCI, (obj), TYPE_VIRTIO_HWKEY_PCI)
+struct VirtIOHWKeyPCI {
+    VirtIOPCIProxy parent_obj;
+    VirtIOHWKey vdev;
+};
+
+/*
+ * virtio-sensor-pci: This extends VirtioPCIProxy.
+ */
+#define TYPE_VIRTIO_SENSOR_PCI "virtio-sensor-pci"
+#define VIRTIO_SENSOR_PCI(obj) \
+        OBJECT_CHECK(VirtIOSENSORPCI, (obj), TYPE_VIRTIO_SENSOR_PCI)
+
+struct VirtIOSENSORPCI {
+    VirtIOPCIProxy parent_obj;
+    VirtIOSENSOR vdev;
+};
+
+/*
+ * virtio-nfc-pci: This extends VirtioPCIProxy.
+ */
+#define TYPE_VIRTIO_NFC_PCI "virtio-nfc-pci"
+#define VIRTIO_NFC_PCI(obj) \
+        OBJECT_CHECK(VirtIONFCPCI, (obj), TYPE_VIRTIO_NFC_PCI)
+
+struct VirtIONFCPCI {
+    VirtIOPCIProxy parent_obj;
+    VirtIONFC vdev;
+};
+
+/*
+ * virtio-jack-pci: This extends VirtioPCIProxy.
+ */
+#define TYPE_VIRTIO_JACK_PCI "virtio-jack-pci"
+#define VIRTIO_JACK_PCI(obj) \
+        OBJECT_CHECK(VirtIOJACKPCI, (obj), TYPE_VIRTIO_JACK_PCI)
+
+struct VirtIOJACKPCI {
+    VirtIOPCIProxy parent_obj;
+    VirtIOJACK vdev;
+};
+
+/*
+ * virtio-power-pci: This extends VirtioPCIProxy.
+ */
+#define TYPE_VIRTIO_POWER_PCI "virtio-power-pci"
+#define VIRTIO_POWER_PCI(obj) \
+        OBJECT_CHECK(VirtIOPOWERPCI, (obj), TYPE_VIRTIO_POWER_PCI)
+
+struct VirtIOPOWERPCI {
+    VirtIOPCIProxy parent_obj;
+    VirtIOPOWER vdev;
+};
+
+/*
+ * virtio-vmodem-pci: This extends VirtioPCIProxy.
+ */
+#define TYPE_VIRTIO_VMODEM_PCI "virtio-vmodem-pci"
+#define VIRTIO_VMODEM_PCI(obj) \
+        OBJECT_CHECK(VirtIOVModemPCI, (obj), TYPE_VIRTIO_VMODEM_PCI)
+struct VirtIOVModemPCI {
+    VirtIOPCIProxy parent_obj;
+    VirtIOVModem vdev;
+};
+
+
+/* virtio-touchscreen-pci */
+
+static Property virtio_touchscreen_pci_properties[] = {
+    DEFINE_PROP_UINT32(TOUCHSCREEN_OPTION_NAME,
+        VirtIOTouchscreenPCI,vdev.max_finger, DEFAULT_MAX_FINGER),
+    DEFINE_PROP_END_OF_LIST(),
+};
+
+static int virtio_touchscreen_pci_init(VirtIOPCIProxy *vpci_dev)
+{
+    VirtIOTouchscreenPCI *dev = VIRTIO_TOUCHSCREEN_PCI(vpci_dev);
+    DeviceState *vdev = DEVICE(&dev->vdev);
+
+    qdev_set_parent_bus(vdev, BUS(&vpci_dev->bus));
+    if (qdev_init(vdev) < 0) {
+        return -1;
+    }
+    return 0;
+}
+
+static void virtio_touchscreen_pci_class_init(ObjectClass *klass, void *data)
+{
+    DeviceClass *dc = DEVICE_CLASS(klass);
+    VirtioPCIClass *k = VIRTIO_PCI_CLASS(klass);
+    PCIDeviceClass *pcidev_k = PCI_DEVICE_CLASS(klass);
+
+    dc->props = virtio_touchscreen_pci_properties;
+    k->init = virtio_touchscreen_pci_init;
+    pcidev_k->vendor_id = PCI_VENDOR_ID_REDHAT_QUMRANET;
+    pcidev_k->device_id = PCI_DEVICE_ID_VIRTIO_TOUCHSCREEN;
+    pcidev_k->revision = VIRTIO_PCI_ABI_VERSION;
+    pcidev_k->class_id = PCI_CLASS_OTHERS;
+}
+
+static void virtio_touchscreen_pci_instance_init(Object *obj)
+{
+    VirtIOTouchscreenPCI *dev = VIRTIO_TOUCHSCREEN_PCI(obj);
+    object_initialize(&dev->vdev, sizeof(dev->vdev), TYPE_VIRTIO_TOUCHSCREEN);
+    object_property_add_child(obj, "virtio-backend", OBJECT(&dev->vdev), NULL);
+
+    dev->vdev.max_finger = DEFAULT_MAX_FINGER;
+}
+
+static TypeInfo virtio_touchscreen_pci_info = {
+    .name          = TYPE_VIRTIO_TOUCHSCREEN_PCI,
+    .parent        = TYPE_VIRTIO_PCI,
+    .instance_size = sizeof(VirtIOTouchscreenPCI),
+    .instance_init = virtio_touchscreen_pci_instance_init,
+    .class_init    = virtio_touchscreen_pci_class_init,
+};
+
+/* virtio-keyboard-pci */
+
+static int virtio_keyboard_pci_init(VirtIOPCIProxy *vpci_dev)
+{
+    VirtIOKeyboardPCI *dev = VIRTIO_KEYBOARD_PCI(vpci_dev);
+    DeviceState *vdev = DEVICE(&dev->vdev);
+
+    qdev_set_parent_bus(vdev, BUS(&vpci_dev->bus));
+    if (qdev_init(vdev) < 0) {
+        return -1;
+    }
+    return 0;
+}
+
+static void virtio_keyboard_pci_class_init(ObjectClass *klass, void *data)
+{
+    VirtioPCIClass *k = VIRTIO_PCI_CLASS(klass);
+    PCIDeviceClass *pcidev_k = PCI_DEVICE_CLASS(klass);
+
+    k->init = virtio_keyboard_pci_init;
+    pcidev_k->vendor_id = PCI_VENDOR_ID_REDHAT_QUMRANET;
+    pcidev_k->device_id = PCI_DEVICE_ID_VIRTIO_KEYBOARD;
+    pcidev_k->revision = VIRTIO_PCI_ABI_VERSION;
+    pcidev_k->class_id = PCI_CLASS_OTHERS;
+}
+
+static void virtio_keyboard_pci_instance_init(Object *obj)
+{
+    VirtIOKeyboardPCI *dev = VIRTIO_KEYBOARD_PCI(obj);
+    object_initialize(&dev->vdev, sizeof(dev->vdev), TYPE_VIRTIO_KEYBOARD);
+    object_property_add_child(obj, "virtio-backend", OBJECT(&dev->vdev), NULL);
+}
+
+static TypeInfo virtio_keyboard_pci_info = {
+    .name          = TYPE_VIRTIO_KEYBOARD_PCI,
+    .parent        = TYPE_VIRTIO_PCI,
+    .instance_size = sizeof(VirtIOKeyboardPCI),
+    .instance_init = virtio_keyboard_pci_instance_init,
+    .class_init    = virtio_keyboard_pci_class_init,
+};
+
+/* virtio-esm-pci */
+
+static int virtio_esm_pci_init(VirtIOPCIProxy *vpci_dev)
+{
+    VirtIOESMPCI *dev = VIRTIO_ESM_PCI(vpci_dev);
+    DeviceState *vdev = DEVICE(&dev->vdev);
+
+    qdev_set_parent_bus(vdev, BUS(&vpci_dev->bus));
+    if (qdev_init(vdev) < 0) {
+        return -1;
+    }
+    return 0;
+}
+
+static void virtio_esm_pci_class_init(ObjectClass *klass, void *data)
+{
+    VirtioPCIClass *k = VIRTIO_PCI_CLASS(klass);
+    PCIDeviceClass *pcidev_k = PCI_DEVICE_CLASS(klass);
+
+    k->init = virtio_esm_pci_init;
+    pcidev_k->vendor_id = PCI_VENDOR_ID_REDHAT_QUMRANET;
+    pcidev_k->device_id = PCI_DEVICE_ID_VIRTIO_ESM;
+    pcidev_k->revision = VIRTIO_PCI_ABI_VERSION;
+    pcidev_k->class_id = PCI_CLASS_OTHERS;
+}
+
+static void virtio_esm_pci_instance_init(Object *obj)
+{
+    VirtIOESMPCI *dev = VIRTIO_ESM_PCI(obj);
+    object_initialize(&dev->vdev, sizeof(dev->vdev), TYPE_VIRTIO_ESM);
+    object_property_add_child(obj, "virtio-backend", OBJECT(&dev->vdev), NULL);
+}
+
+static TypeInfo virtio_esm_pci_info = {
+    .name          = TYPE_VIRTIO_ESM_PCI,
+    .parent        = TYPE_VIRTIO_PCI,
+    .instance_size = sizeof(VirtIOESMPCI),
+    .instance_init = virtio_esm_pci_instance_init,
+    .class_init    = virtio_esm_pci_class_init,
+};
+
+/* virtio-hwkey-pci */
+
+static int virtio_hwkey_pci_init(VirtIOPCIProxy *vpci_dev)
+{
+    VirtIOHWKeyPCI *dev = VIRTIO_HWKEY_PCI(vpci_dev);
+    DeviceState *vdev = DEVICE(&dev->vdev);
+
+    qdev_set_parent_bus(vdev, BUS(&vpci_dev->bus));
+    if (qdev_init(vdev) < 0) {
+        return -1;
+    }
+    return 0;
+}
+
+static void virtio_hwkey_pci_class_init(ObjectClass *klass, void *data)
+{
+//    DeviceClass *dc = DEVICE_CLASS(klass);
+    VirtioPCIClass *k = VIRTIO_PCI_CLASS(klass);
+    PCIDeviceClass *pcidev_k = PCI_DEVICE_CLASS(klass);
+
+    k->init = virtio_hwkey_pci_init;
+    pcidev_k->vendor_id = PCI_VENDOR_ID_REDHAT_QUMRANET;
+    pcidev_k->device_id = PCI_DEVICE_ID_VIRTIO_HWKEY;
+    pcidev_k->revision = VIRTIO_PCI_ABI_VERSION;
+    pcidev_k->class_id = PCI_CLASS_OTHERS;
+}
+
+static void virtio_hwkey_pci_instance_init(Object *obj)
+{
+    VirtIOHWKeyPCI *dev = VIRTIO_HWKEY_PCI(obj);
+    object_initialize(&dev->vdev, sizeof(dev->vdev), TYPE_VIRTIO_HWKEY);
+    object_property_add_child(obj, "virtio-backend", OBJECT(&dev->vdev), NULL);
+}
+
+static TypeInfo virtio_hwkey_pci_info = {
+    .name          = TYPE_VIRTIO_HWKEY_PCI,
+    .parent        = TYPE_VIRTIO_PCI,
+    .instance_size = sizeof(VirtIOHWKeyPCI),
+    .instance_init = virtio_hwkey_pci_instance_init,
+    .class_init    = virtio_hwkey_pci_class_init,
+};
+
+/* virtio-evdi-pci */
+
+static int virtio_evdi_pci_init(VirtIOPCIProxy *vpci_dev)
+{
+    VirtIOEVDIPCI *dev = VIRTIO_EVDI_PCI(vpci_dev);
+    DeviceState *vdev = DEVICE(&dev->vdev);
+
+    qdev_set_parent_bus(vdev, BUS(&vpci_dev->bus));
+    if (qdev_init(vdev) < 0) {
+        return -1;
+    }
+    return 0;
+}
+
+static void virtio_evdi_pci_class_init(ObjectClass *klass, void *data)
+{
+//    DeviceClass *dc = DEVICE_CLASS(klass);
+    VirtioPCIClass *k = VIRTIO_PCI_CLASS(klass);
+    PCIDeviceClass *pcidev_k = PCI_DEVICE_CLASS(klass);
+
+    k->init = virtio_evdi_pci_init;
+    pcidev_k->vendor_id = PCI_VENDOR_ID_REDHAT_QUMRANET;
+    pcidev_k->device_id = PCI_DEVICE_ID_VIRTIO_EVDI;
+    pcidev_k->revision = VIRTIO_PCI_ABI_VERSION;
+    pcidev_k->class_id = PCI_CLASS_OTHERS;
+}
+
+static void virtio_evdi_pci_instance_init(Object *obj)
+{
+    VirtIOEVDIPCI *dev = VIRTIO_EVDI_PCI(obj);
+    object_initialize(&dev->vdev, sizeof(dev->vdev), TYPE_VIRTIO_EVDI);
+    object_property_add_child(obj, "virtio-backend", OBJECT(&dev->vdev), NULL);
+}
+
+static TypeInfo virtio_evdi_pci_info = {
+    .name          = TYPE_VIRTIO_EVDI_PCI,
+    .parent        = TYPE_VIRTIO_PCI,
+    .instance_size = sizeof(VirtIOEVDIPCI),
+    .instance_init = virtio_evdi_pci_instance_init,
+    .class_init    = virtio_evdi_pci_class_init,
+};
+
+/* virtio-sensor-pci */
+
+static int virtio_sensor_pci_init(VirtIOPCIProxy *vpci_dev)
+{
+    VirtIOSENSORPCI *dev = VIRTIO_SENSOR_PCI(vpci_dev);
+    DeviceState *vdev = DEVICE(&dev->vdev);
+
+    qdev_set_parent_bus(vdev, BUS(&vpci_dev->bus));
+    if (qdev_init(vdev) < 0) {
+        return -1;
+    }
+    return 0;
+}
+
+static Property virtio_sensor_pci_properties[] = {
+    DEFINE_PROP_STRING(ATTRIBUTE_NAME_SENSORS, VirtIOSENSORPCI, vdev.sensors),
+    DEFINE_VIRTIO_COMMON_FEATURES(VirtIOPCIProxy, host_features),
+    DEFINE_PROP_END_OF_LIST(),
+};
+
+static void virtio_sensor_pci_class_init(ObjectClass *klass, void *data)
+{
+    DeviceClass *dc = DEVICE_CLASS(klass);
+    VirtioPCIClass *k = VIRTIO_PCI_CLASS(klass);
+    PCIDeviceClass *pcidev_k = PCI_DEVICE_CLASS(klass);
+
+    k->init = virtio_sensor_pci_init;
+    pcidev_k->vendor_id = PCI_VENDOR_ID_REDHAT_QUMRANET;
+    pcidev_k->device_id = PCI_DEVICE_ID_VIRTIO_SENSOR;
+    pcidev_k->revision = VIRTIO_PCI_ABI_VERSION;
+    pcidev_k->class_id = PCI_CLASS_OTHERS;
+    dc->props = virtio_sensor_pci_properties;
+}
+
+static void virtio_sensor_pci_instance_init(Object *obj)
+{
+    VirtIOSENSORPCI *dev = VIRTIO_SENSOR_PCI(obj);
+    object_initialize(&dev->vdev, sizeof(dev->vdev), TYPE_VIRTIO_SENSOR);
+    object_property_add_child(obj, "virtio-backend", OBJECT(&dev->vdev), NULL);
+}
+
+static TypeInfo virtio_sensor_pci_info = {
+    .name          = TYPE_VIRTIO_SENSOR_PCI,
+    .parent        = TYPE_VIRTIO_PCI,
+    .instance_size = sizeof(VirtIOSENSORPCI),
+    .instance_init = virtio_sensor_pci_instance_init,
+    .class_init    = virtio_sensor_pci_class_init,
+};
+
+/* virtio NFC */
+
+static int virtio_nfc_pci_init(VirtIOPCIProxy *vpci_dev)
+{
+    VirtIONFCPCI *dev = VIRTIO_NFC_PCI(vpci_dev);
+    DeviceState *vdev = DEVICE(&dev->vdev);
+
+    qdev_set_parent_bus(vdev, BUS(&vpci_dev->bus));
+    if (qdev_init(vdev) < 0) {
+        return -1;
+    }
+    return 0;
+}
+
+static void virtio_nfc_pci_class_init(ObjectClass *klass, void *data)
+{
+    VirtioPCIClass *k = VIRTIO_PCI_CLASS(klass);
+    PCIDeviceClass *pcidev_k = PCI_DEVICE_CLASS(klass);
+
+    k->init = virtio_nfc_pci_init;
+    pcidev_k->vendor_id = PCI_VENDOR_ID_REDHAT_QUMRANET;
+    pcidev_k->device_id = PCI_DEVICE_ID_VIRTIO_NFC;
+    pcidev_k->revision = VIRTIO_PCI_ABI_VERSION;
+    pcidev_k->class_id = PCI_CLASS_OTHERS;
+}
+
+static void virtio_nfc_pci_instance_init(Object *obj)
+{
+    VirtIONFCPCI *dev = VIRTIO_NFC_PCI(obj);
+    object_initialize(&dev->vdev, sizeof(dev->vdev), TYPE_VIRTIO_NFC);
+    object_property_add_child(obj, "virtio-backend", OBJECT(&dev->vdev), NULL);
+}
+
+static TypeInfo virtio_nfc_pci_info = {
+    .name          = TYPE_VIRTIO_NFC_PCI,
+    .parent        = TYPE_VIRTIO_PCI,
+    .instance_size = sizeof(VirtIONFCPCI),
+    .instance_init = virtio_nfc_pci_instance_init,
+    .class_init    = virtio_nfc_pci_class_init,
+};
+
+/* virtio-jack-pci */
+
+static int virtio_jack_pci_init(VirtIOPCIProxy *vpci_dev)
+{
+    VirtIOJACKPCI *dev = VIRTIO_JACK_PCI(vpci_dev);
+    DeviceState *vdev = DEVICE(&dev->vdev);
+
+    qdev_set_parent_bus(vdev, BUS(&vpci_dev->bus));
+    if (qdev_init(vdev) < 0) {
+        return -1;
+    }
+    return 0;
+}
+
+static Property virtio_jack_pci_properties[] = {
+    DEFINE_PROP_STRING(ATTRIBUTE_NAME_JACKS, VirtIOJACKPCI, vdev.jacks),
+    DEFINE_VIRTIO_COMMON_FEATURES(VirtIOPCIProxy, host_features),
+    DEFINE_PROP_END_OF_LIST(),
+};
+
+static void virtio_jack_pci_class_init(ObjectClass *klass, void *data)
+{
+    DeviceClass *dc = DEVICE_CLASS(klass);
+    VirtioPCIClass *k = VIRTIO_PCI_CLASS(klass);
+    PCIDeviceClass *pcidev_k = PCI_DEVICE_CLASS(klass);
+
+    k->init = virtio_jack_pci_init;
+    pcidev_k->vendor_id = PCI_VENDOR_ID_REDHAT_QUMRANET;
+    pcidev_k->device_id = PCI_DEVICE_ID_VIRTIO_JACK;
+    pcidev_k->revision = VIRTIO_PCI_ABI_VERSION;
+    pcidev_k->class_id = PCI_CLASS_OTHERS;
+    dc->props = virtio_jack_pci_properties;
+}
+
+static void virtio_jack_pci_instance_init(Object *obj)
+{
+    VirtIOJACKPCI *dev = VIRTIO_JACK_PCI(obj);
+    object_initialize(&dev->vdev, sizeof(dev->vdev), TYPE_VIRTIO_JACK);
+    object_property_add_child(obj, "virtio-backend", OBJECT(&dev->vdev), NULL);
+}
+
+static TypeInfo virtio_jack_pci_info = {
+    .name          = TYPE_VIRTIO_JACK_PCI,
+    .parent        = TYPE_VIRTIO_PCI,
+    .instance_size = sizeof(VirtIOJACKPCI),
+    .instance_init = virtio_jack_pci_instance_init,
+    .class_init    = virtio_jack_pci_class_init,
+};
+
+/* virtio-power-pci */
+
+static int virtio_power_pci_init(VirtIOPCIProxy *vpci_dev)
+{
+    VirtIOPOWERPCI *dev = VIRTIO_POWER_PCI(vpci_dev);
+    DeviceState *vdev = DEVICE(&dev->vdev);
+
+    qdev_set_parent_bus(vdev, BUS(&vpci_dev->bus));
+    if (qdev_init(vdev) < 0) {
+        return -1;
+    }
+    return 0;
+}
+
+static void virtio_power_pci_class_init(ObjectClass *klass, void *data)
+{
+    VirtioPCIClass *k = VIRTIO_PCI_CLASS(klass);
+    PCIDeviceClass *pcidev_k = PCI_DEVICE_CLASS(klass);
+
+    k->init = virtio_power_pci_init;
+    pcidev_k->vendor_id = PCI_VENDOR_ID_REDHAT_QUMRANET;
+    pcidev_k->device_id = PCI_DEVICE_ID_VIRTIO_POWER;
+    pcidev_k->revision = VIRTIO_PCI_ABI_VERSION;
+    pcidev_k->class_id = PCI_CLASS_OTHERS;
+}
+
+static void virtio_power_pci_instance_init(Object *obj)
+{
+    VirtIOPOWERPCI *dev = VIRTIO_POWER_PCI(obj);
+    object_initialize(&dev->vdev, sizeof(dev->vdev), TYPE_VIRTIO_POWER);
+    object_property_add_child(obj, "virtio-backend", OBJECT(&dev->vdev), NULL);
+}
+
+static TypeInfo virtio_power_pci_info = {
+    .name          = TYPE_VIRTIO_POWER_PCI,
+    .parent        = TYPE_VIRTIO_PCI,
+    .instance_size = sizeof(VirtIOPOWERPCI),
+    .instance_init = virtio_power_pci_instance_init,
+    .class_init    = virtio_power_pci_class_init,
+};
+
+/* virtio-vmodem-pci */
+
+static int virtio_vmodem_pci_init(VirtIOPCIProxy *vpci_dev)
+{
+    VirtIOVModemPCI *dev = VIRTIO_VMODEM_PCI(vpci_dev);
+    DeviceState *vdev = DEVICE(&dev->vdev);
+
+    qdev_set_parent_bus(vdev, BUS(&vpci_dev->bus));
+    if (qdev_init(vdev) < 0) {
+        return -1;
+    }
+    return 0;
+}
+
+static void virtio_vmodem_pci_class_init(ObjectClass *klass, void *data)
+{
+    VirtioPCIClass *k = VIRTIO_PCI_CLASS(klass);
+    PCIDeviceClass *pcidev_k = PCI_DEVICE_CLASS(klass);
+
+    k->init = virtio_vmodem_pci_init;
+    pcidev_k->vendor_id = PCI_VENDOR_ID_REDHAT_QUMRANET;
+    pcidev_k->device_id = PCI_DEVICE_ID_VIRTIO_VMODEM;
+    pcidev_k->revision = VIRTIO_PCI_ABI_VERSION;
+    pcidev_k->class_id = PCI_CLASS_OTHERS;
+}
+
+static void virtio_vmodem_pci_instance_init(Object *obj)
+{
+    VirtIOVModemPCI *dev = VIRTIO_VMODEM_PCI(obj);
+    object_initialize(&dev->vdev, sizeof(dev->vdev), TYPE_VIRTIO_VMODEM);
+    object_property_add_child(obj, "virtio-backend", OBJECT(&dev->vdev), NULL);
+}
+
+static TypeInfo virtio_vmodem_pci_info = {
+    .name          = TYPE_VIRTIO_VMODEM_PCI,
+    .parent        = TYPE_VIRTIO_PCI,
+    .instance_size = sizeof(VirtIOVModemPCI),
+    .instance_init = virtio_vmodem_pci_instance_init,
+    .class_init    = virtio_vmodem_pci_class_init,
+};
+
+static void maru_virtio_pci_register_types(void)
+{
+    type_register_static(&virtio_evdi_pci_info);
+    type_register_static(&virtio_esm_pci_info);
+    type_register_static(&virtio_hwkey_pci_info);
+    type_register_static(&virtio_keyboard_pci_info);
+    type_register_static(&virtio_touchscreen_pci_info);
+    type_register_static(&virtio_sensor_pci_info);
+    type_register_static(&virtio_nfc_pci_info);
+    type_register_static(&virtio_jack_pci_info);
+    type_register_static(&virtio_power_pci_info);
+    type_register_static(&virtio_vmodem_pci_info);
+}
+
+type_init(maru_virtio_pci_register_types)