kvm tools: MSI-X fixes
[linux-2.6/next.git] / tools / kvm / include / kvm / virtio-pci.h
blobce44e846c8f5798e405e95d266a31ceaf3481cf0
1 #ifndef KVM__VIRTIO_PCI_H
2 #define KVM__VIRTIO_PCI_H
4 #include "kvm/pci.h"
6 #include <linux/types.h>
8 #define VIRTIO_PCI_MAX_VQ 3
10 struct kvm;
12 struct virtio_pci_ops {
13 void (*set_config)(struct kvm *kvm, void *dev, u8 data, u32 offset);
14 u8 (*get_config)(struct kvm *kvm, void *dev, u32 offset);
16 u32 (*get_host_features)(struct kvm *kvm, void *dev);
17 void (*set_guest_features)(struct kvm *kvm, void *dev, u32 features);
19 int (*init_vq)(struct kvm *kvm, void *dev, u32 vq, u32 pfn);
20 int (*notify_vq)(struct kvm *kvm, void *dev, u32 vq);
21 int (*get_pfn_vq)(struct kvm *kvm, void *dev, u32 vq);
22 int (*get_size_vq)(struct kvm *kvm, void *dev, u32 vq);
25 struct virtio_pci_ioevent_param {
26 struct virtio_pci *vpci;
27 u32 vq;
30 struct virtio_pci {
31 struct pci_device_header pci_hdr;
32 struct virtio_pci_ops ops;
33 void *dev;
35 u16 base_addr;
36 u8 status;
37 u8 isr;
39 /* MSI-X */
40 u16 config_vector;
41 u32 config_gsi;
42 u32 vq_vector[VIRTIO_PCI_MAX_VQ];
43 u32 gsis[VIRTIO_PCI_MAX_VQ];
44 u32 msix_io_block;
45 u32 msix_pba_block;
46 u64 msix_pba;
47 struct msix_table msix_table[VIRTIO_PCI_MAX_VQ + 1];
49 /* virtio queue */
50 u16 queue_selector;
51 struct virtio_pci_ioevent_param ioeventfds[VIRTIO_PCI_MAX_VQ];
54 int virtio_pci__init(struct kvm *kvm, struct virtio_pci *vpci, void *dev,
55 int device_id, int subsys_id);
56 int virtio_pci__signal_vq(struct kvm *kvm, struct virtio_pci *vpci, u32 vq);
57 int virtio_pci__signal_config(struct kvm *kvm, struct virtio_pci *vpci);
59 #endif