1ddac19f5SJuan Quintela /* 2ddac19f5SJuan Quintela * Virtio 9p PCI Bindings 3ddac19f5SJuan Quintela * 4ddac19f5SJuan Quintela * Copyright IBM, Corp. 2010 5ddac19f5SJuan Quintela * 6ddac19f5SJuan Quintela * Authors: 7ddac19f5SJuan Quintela * Anthony Liguori <aliguori@us.ibm.com> 8ddac19f5SJuan Quintela * 9ddac19f5SJuan Quintela * This work is licensed under the terms of the GNU GPL, version 2. See 10ddac19f5SJuan Quintela * the COPYING file in the top-level directory. 11ddac19f5SJuan Quintela * 12ddac19f5SJuan Quintela * Contributions after 2012-01-13 are licensed under the terms of the 13ddac19f5SJuan Quintela * GNU GPL, version 2 or (at your option) any later version. 14ddac19f5SJuan Quintela */ 15ddac19f5SJuan Quintela 16ddac19f5SJuan Quintela #include "qemu/osdep.h" 17ddac19f5SJuan Quintela 18*e1b1f534SAlex Bennée #include "hw/virtio/virtio-pci.h" 19ddac19f5SJuan Quintela #include "hw/9pfs/virtio-9p.h" 20a27bd6c7SMarkus Armbruster #include "hw/qdev-properties.h" 210b8fa32fSMarkus Armbruster #include "qemu/module.h" 22db1015e9SEduardo Habkost #include "qom/object.h" 23ddac19f5SJuan Quintela 24ddac19f5SJuan Quintela /* 25ddac19f5SJuan Quintela * virtio-9p-pci: This extends VirtioPCIProxy. 26ddac19f5SJuan Quintela */ 27ddac19f5SJuan Quintela 28ddac19f5SJuan Quintela #define TYPE_VIRTIO_9P_PCI "virtio-9p-pci-base" 29db1015e9SEduardo Habkost typedef struct V9fsPCIState V9fsPCIState; 308110fa1dSEduardo Habkost DECLARE_INSTANCE_CHECKER(V9fsPCIState, VIRTIO_9P_PCI, 318110fa1dSEduardo Habkost TYPE_VIRTIO_9P_PCI) 32ddac19f5SJuan Quintela 33db1015e9SEduardo Habkost struct V9fsPCIState { 34ddac19f5SJuan Quintela VirtIOPCIProxy parent_obj; 35ddac19f5SJuan Quintela V9fsVirtioState vdev; 36db1015e9SEduardo Habkost }; 37ddac19f5SJuan Quintela 38ddac19f5SJuan Quintela static void virtio_9p_pci_realize(VirtIOPCIProxy *vpci_dev, Error **errp) 39ddac19f5SJuan Quintela { 40ddac19f5SJuan Quintela V9fsPCIState *dev = VIRTIO_9P_PCI(vpci_dev); 41ddac19f5SJuan Quintela DeviceState *vdev = DEVICE(&dev->vdev); 42ddac19f5SJuan Quintela 4399ba777eSMarkus Armbruster qdev_realize(vdev, BUS(&vpci_dev->bus), errp); 44ddac19f5SJuan Quintela } 45ddac19f5SJuan Quintela 46ddac19f5SJuan Quintela static Property virtio_9p_pci_properties[] = { 47ddac19f5SJuan Quintela DEFINE_PROP_BIT("ioeventfd", VirtIOPCIProxy, flags, 48ddac19f5SJuan Quintela VIRTIO_PCI_FLAG_USE_IOEVENTFD_BIT, true), 49ddac19f5SJuan Quintela DEFINE_PROP_UINT32("vectors", VirtIOPCIProxy, nvectors, 2), 50ddac19f5SJuan Quintela DEFINE_PROP_END_OF_LIST(), 51ddac19f5SJuan Quintela }; 52ddac19f5SJuan Quintela 53ddac19f5SJuan Quintela static void virtio_9p_pci_class_init(ObjectClass *klass, void *data) 54ddac19f5SJuan Quintela { 55ddac19f5SJuan Quintela DeviceClass *dc = DEVICE_CLASS(klass); 56ddac19f5SJuan Quintela PCIDeviceClass *pcidev_k = PCI_DEVICE_CLASS(klass); 57ddac19f5SJuan Quintela VirtioPCIClass *k = VIRTIO_PCI_CLASS(klass); 58ddac19f5SJuan Quintela 59ddac19f5SJuan Quintela k->realize = virtio_9p_pci_realize; 60ddac19f5SJuan Quintela pcidev_k->vendor_id = PCI_VENDOR_ID_REDHAT_QUMRANET; 61ddac19f5SJuan Quintela pcidev_k->device_id = PCI_DEVICE_ID_VIRTIO_9P; 62ddac19f5SJuan Quintela pcidev_k->revision = VIRTIO_PCI_ABI_VERSION; 63ddac19f5SJuan Quintela pcidev_k->class_id = 0x2; 64ddac19f5SJuan Quintela set_bit(DEVICE_CATEGORY_STORAGE, dc->categories); 654f67d30bSMarc-André Lureau device_class_set_props(dc, virtio_9p_pci_properties); 66ddac19f5SJuan Quintela } 67ddac19f5SJuan Quintela 68ddac19f5SJuan Quintela static void virtio_9p_pci_instance_init(Object *obj) 69ddac19f5SJuan Quintela { 70ddac19f5SJuan Quintela V9fsPCIState *dev = VIRTIO_9P_PCI(obj); 71ddac19f5SJuan Quintela 72ddac19f5SJuan Quintela virtio_instance_init_common(obj, &dev->vdev, sizeof(dev->vdev), 73ddac19f5SJuan Quintela TYPE_VIRTIO_9P); 74ddac19f5SJuan Quintela } 75ddac19f5SJuan Quintela 76ddac19f5SJuan Quintela static const VirtioPCIDeviceTypeInfo virtio_9p_pci_info = { 77ddac19f5SJuan Quintela .base_name = TYPE_VIRTIO_9P_PCI, 78ddac19f5SJuan Quintela .generic_name = "virtio-9p-pci", 79ddac19f5SJuan Quintela .transitional_name = "virtio-9p-pci-transitional", 80ddac19f5SJuan Quintela .non_transitional_name = "virtio-9p-pci-non-transitional", 81ddac19f5SJuan Quintela .instance_size = sizeof(V9fsPCIState), 82ddac19f5SJuan Quintela .instance_init = virtio_9p_pci_instance_init, 83ddac19f5SJuan Quintela .class_init = virtio_9p_pci_class_init, 84ddac19f5SJuan Quintela }; 85ddac19f5SJuan Quintela 86ddac19f5SJuan Quintela static void virtio_9p_pci_register(void) 87ddac19f5SJuan Quintela { 88ddac19f5SJuan Quintela virtio_pci_types_register(&virtio_9p_pci_info); 89ddac19f5SJuan Quintela } 90ddac19f5SJuan Quintela 91ddac19f5SJuan Quintela type_init(virtio_9p_pci_register) 92