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 18ddac19f5SJuan Quintela #include "virtio-pci.h" 19ddac19f5SJuan Quintela #include "hw/9pfs/virtio-9p.h" 20a27bd6c7SMarkus Armbruster #include "hw/qdev-properties.h" 210b8fa32fSMarkus Armbruster #include "qemu/module.h" 22ddac19f5SJuan Quintela 23ddac19f5SJuan Quintela /* 24ddac19f5SJuan Quintela * virtio-9p-pci: This extends VirtioPCIProxy. 25ddac19f5SJuan Quintela */ 26ddac19f5SJuan Quintela 27ddac19f5SJuan Quintela #define TYPE_VIRTIO_9P_PCI "virtio-9p-pci-base" 28ddac19f5SJuan Quintela #define VIRTIO_9P_PCI(obj) \ 29ddac19f5SJuan Quintela OBJECT_CHECK(V9fsPCIState, (obj), TYPE_VIRTIO_9P_PCI) 30ddac19f5SJuan Quintela 31ddac19f5SJuan Quintela typedef struct V9fsPCIState { 32ddac19f5SJuan Quintela VirtIOPCIProxy parent_obj; 33ddac19f5SJuan Quintela V9fsVirtioState vdev; 34ddac19f5SJuan Quintela } V9fsPCIState; 35ddac19f5SJuan Quintela 36ddac19f5SJuan Quintela static void virtio_9p_pci_realize(VirtIOPCIProxy *vpci_dev, Error **errp) 37ddac19f5SJuan Quintela { 38ddac19f5SJuan Quintela V9fsPCIState *dev = VIRTIO_9P_PCI(vpci_dev); 39ddac19f5SJuan Quintela DeviceState *vdev = DEVICE(&dev->vdev); 40ddac19f5SJuan Quintela 41*99ba777eSMarkus Armbruster qdev_realize(vdev, BUS(&vpci_dev->bus), errp); 42ddac19f5SJuan Quintela } 43ddac19f5SJuan Quintela 44ddac19f5SJuan Quintela static Property virtio_9p_pci_properties[] = { 45ddac19f5SJuan Quintela DEFINE_PROP_BIT("ioeventfd", VirtIOPCIProxy, flags, 46ddac19f5SJuan Quintela VIRTIO_PCI_FLAG_USE_IOEVENTFD_BIT, true), 47ddac19f5SJuan Quintela DEFINE_PROP_UINT32("vectors", VirtIOPCIProxy, nvectors, 2), 48ddac19f5SJuan Quintela DEFINE_PROP_END_OF_LIST(), 49ddac19f5SJuan Quintela }; 50ddac19f5SJuan Quintela 51ddac19f5SJuan Quintela static void virtio_9p_pci_class_init(ObjectClass *klass, void *data) 52ddac19f5SJuan Quintela { 53ddac19f5SJuan Quintela DeviceClass *dc = DEVICE_CLASS(klass); 54ddac19f5SJuan Quintela PCIDeviceClass *pcidev_k = PCI_DEVICE_CLASS(klass); 55ddac19f5SJuan Quintela VirtioPCIClass *k = VIRTIO_PCI_CLASS(klass); 56ddac19f5SJuan Quintela 57ddac19f5SJuan Quintela k->realize = virtio_9p_pci_realize; 58ddac19f5SJuan Quintela pcidev_k->vendor_id = PCI_VENDOR_ID_REDHAT_QUMRANET; 59ddac19f5SJuan Quintela pcidev_k->device_id = PCI_DEVICE_ID_VIRTIO_9P; 60ddac19f5SJuan Quintela pcidev_k->revision = VIRTIO_PCI_ABI_VERSION; 61ddac19f5SJuan Quintela pcidev_k->class_id = 0x2; 62ddac19f5SJuan Quintela set_bit(DEVICE_CATEGORY_STORAGE, dc->categories); 634f67d30bSMarc-André Lureau device_class_set_props(dc, virtio_9p_pci_properties); 64ddac19f5SJuan Quintela } 65ddac19f5SJuan Quintela 66ddac19f5SJuan Quintela static void virtio_9p_pci_instance_init(Object *obj) 67ddac19f5SJuan Quintela { 68ddac19f5SJuan Quintela V9fsPCIState *dev = VIRTIO_9P_PCI(obj); 69ddac19f5SJuan Quintela 70ddac19f5SJuan Quintela virtio_instance_init_common(obj, &dev->vdev, sizeof(dev->vdev), 71ddac19f5SJuan Quintela TYPE_VIRTIO_9P); 72ddac19f5SJuan Quintela } 73ddac19f5SJuan Quintela 74ddac19f5SJuan Quintela static const VirtioPCIDeviceTypeInfo virtio_9p_pci_info = { 75ddac19f5SJuan Quintela .base_name = TYPE_VIRTIO_9P_PCI, 76ddac19f5SJuan Quintela .generic_name = "virtio-9p-pci", 77ddac19f5SJuan Quintela .transitional_name = "virtio-9p-pci-transitional", 78ddac19f5SJuan Quintela .non_transitional_name = "virtio-9p-pci-non-transitional", 79ddac19f5SJuan Quintela .instance_size = sizeof(V9fsPCIState), 80ddac19f5SJuan Quintela .instance_init = virtio_9p_pci_instance_init, 81ddac19f5SJuan Quintela .class_init = virtio_9p_pci_class_init, 82ddac19f5SJuan Quintela }; 83ddac19f5SJuan Quintela 84ddac19f5SJuan Quintela static void virtio_9p_pci_register(void) 85ddac19f5SJuan Quintela { 86ddac19f5SJuan Quintela virtio_pci_types_register(&virtio_9p_pci_info); 87ddac19f5SJuan Quintela } 88ddac19f5SJuan Quintela 89ddac19f5SJuan Quintela type_init(virtio_9p_pci_register) 90