1*b30d05adSPekka Enberg #include "kvm/blk-virtio.h" 2*b30d05adSPekka Enberg 3*b30d05adSPekka Enberg #include "kvm/ioport.h" 4*b30d05adSPekka Enberg #include "kvm/pci.h" 5*b30d05adSPekka Enberg 6*b30d05adSPekka Enberg #define PCI_VENDOR_ID_REDHAT_QUMRANET 0x1af4 7*b30d05adSPekka Enberg #define PCI_DEVICE_ID_VIRTIO_BLK 0x1001 8*b30d05adSPekka Enberg #define PCI_SUBSYSTEM_VENDOR_ID_REDHAT_QUMRANET 0x1af4 9*b30d05adSPekka Enberg #define PCI_SUBSYSTEM_ID_VIRTIO_BLK 0x0002 10*b30d05adSPekka Enberg 11*b30d05adSPekka Enberg static struct pci_device_header virtio_device = { 12*b30d05adSPekka Enberg .vendor_id = PCI_VENDOR_ID_REDHAT_QUMRANET, 13*b30d05adSPekka Enberg .device_id = PCI_DEVICE_ID_VIRTIO_BLK, 14*b30d05adSPekka Enberg .header_type = PCI_HEADER_TYPE_NORMAL, 15*b30d05adSPekka Enberg .revision_id = 0, 16*b30d05adSPekka Enberg .class = 0x010000, 17*b30d05adSPekka Enberg .subsys_vendor_id = PCI_SUBSYSTEM_VENDOR_ID_REDHAT_QUMRANET, 18*b30d05adSPekka Enberg .subsys_id = PCI_SUBSYSTEM_ID_VIRTIO_BLK, 19*b30d05adSPekka Enberg .bar[0] = IOPORT_VIRTIO | PCI_BASE_ADDRESS_SPACE_IO, 20*b30d05adSPekka Enberg }; 21*b30d05adSPekka Enberg 22*b30d05adSPekka Enberg static bool virtio_in(struct kvm *self, uint16_t port, void *data, int size, uint32_t count) 23*b30d05adSPekka Enberg { 24*b30d05adSPekka Enberg return true; 25*b30d05adSPekka Enberg } 26*b30d05adSPekka Enberg 27*b30d05adSPekka Enberg static bool virtio_out(struct kvm *self, uint16_t port, void *data, int size, uint32_t count) 28*b30d05adSPekka Enberg { 29*b30d05adSPekka Enberg return true; 30*b30d05adSPekka Enberg } 31*b30d05adSPekka Enberg 32*b30d05adSPekka Enberg static struct ioport_operations virtio_io_ops = { 33*b30d05adSPekka Enberg .io_in = virtio_in, 34*b30d05adSPekka Enberg .io_out = virtio_out, 35*b30d05adSPekka Enberg }; 36*b30d05adSPekka Enberg 37*b30d05adSPekka Enberg void blk_virtio__init(void) 38*b30d05adSPekka Enberg { 39*b30d05adSPekka Enberg pci__register(&virtio_device, 1); 40*b30d05adSPekka Enberg 41*b30d05adSPekka Enberg ioport__register(IOPORT_VIRTIO, &virtio_io_ops); 42*b30d05adSPekka Enberg } 43