136f5dc91SSasha Levin #ifndef KVM__VIRTIO_PCI_H 236f5dc91SSasha Levin #define KVM__VIRTIO_PCI_H 336f5dc91SSasha Levin 436f5dc91SSasha Levin #include "kvm/pci.h" 536f5dc91SSasha Levin 636f5dc91SSasha Levin #include <linux/types.h> 736f5dc91SSasha Levin 836f5dc91SSasha Levin #define VIRTIO_PCI_MAX_VQ 3 914bba8a0SAsias He #define VIRTIO_PCI_MAX_CONFIG 1 1036f5dc91SSasha Levin 1136f5dc91SSasha Levin struct kvm; 1236f5dc91SSasha Levin 131599d724SSasha Levin struct virtio_pci_ioevent_param { 1402eca50cSAsias He struct virtio_device *vdev; 151599d724SSasha Levin u32 vq; 161599d724SSasha Levin }; 171599d724SSasha Levin 18*43c81c74SSasha Levin #define VIRTIO_PCI_F_SIGNAL_MSI (1 << 0) 19*43c81c74SSasha Levin 2036f5dc91SSasha Levin struct virtio_pci { 2136f5dc91SSasha Levin struct pci_device_header pci_hdr; 2236f5dc91SSasha Levin void *dev; 2336f5dc91SSasha Levin 2436f5dc91SSasha Levin u16 base_addr; 2536f5dc91SSasha Levin u8 status; 2636f5dc91SSasha Levin u8 isr; 27*43c81c74SSasha Levin u32 features; 2836f5dc91SSasha Levin 2936f5dc91SSasha Levin /* MSI-X */ 3036f5dc91SSasha Levin u16 config_vector; 3136f5dc91SSasha Levin u32 config_gsi; 3236f5dc91SSasha Levin u32 vq_vector[VIRTIO_PCI_MAX_VQ]; 3336f5dc91SSasha Levin u32 gsis[VIRTIO_PCI_MAX_VQ]; 3436f5dc91SSasha Levin u32 msix_io_block; 3506f48103SSasha Levin u64 msix_pba; 3614bba8a0SAsias He struct msix_table msix_table[VIRTIO_PCI_MAX_VQ + VIRTIO_PCI_MAX_CONFIG]; 3736f5dc91SSasha Levin 3836f5dc91SSasha Levin /* virtio queue */ 3936f5dc91SSasha Levin u16 queue_selector; 401599d724SSasha Levin struct virtio_pci_ioevent_param ioeventfds[VIRTIO_PCI_MAX_VQ]; 4136f5dc91SSasha Levin }; 4236f5dc91SSasha Levin 4302eca50cSAsias He int virtio_pci__signal_vq(struct kvm *kvm, struct virtio_device *vdev, u32 vq); 4402eca50cSAsias He int virtio_pci__signal_config(struct kvm *kvm, struct virtio_device *vdev); 4502eca50cSAsias He int virtio_pci__exit(struct kvm *kvm, struct virtio_device *vdev); 4602eca50cSAsias He int virtio_pci__init(struct kvm *kvm, void *dev, struct virtio_device *vdev, 47507e02d8SAsias He int device_id, int subsys_id, int class); 4836f5dc91SSasha Levin 4936f5dc91SSasha Levin #endif 50