kvm tools: Add helper to retrieve the field used in virtio config space

This patch adds a helper used to retrieve the type of field used when guest
is writing or reading from virtio config space.

Since the config space is dynamic, it may change during runtime - so we must
calculate it before every read/write.

Signed-off-by: Sasha Levin <levinsasha928@gmail.com>
Signed-off-by: Pekka Enberg <penberg@kernel.org>
This commit is contained in:
Sasha Levin
2011-08-21 13:16:34 +03:00
committed by Will Deacon
parent 4b2e0a7a74
commit c3a79fa1cd
2 changed files with 27 additions and 0 deletions
+6
View File
@@ -12,6 +12,10 @@
#define VIRTIO_IRQ_LOW 0
#define VIRTIO_IRQ_HIGH 1
#define VIRTIO_PCI_O_CONFIG 0
#define VIRTIO_PCI_O_MSIX 1
#define VIRTIO_PCI_O_FEATURES 2
struct virt_queue {
struct vring vring;
u32 pfn;
@@ -56,4 +60,6 @@ u16 virt_queue__get_inout_iov(struct kvm *kvm, struct virt_queue *queue,
void virt_queue__trigger_irq(struct virt_queue *vq, int irq, u8 *isr, struct kvm *kvm);
int virtio__get_dev_specific_field(int offset, bool msix, bool features_hi, u32 *config_off);
#endif /* KVM__VIRTIO_H */
+21
View File
@@ -100,3 +100,24 @@ void virt_queue__trigger_irq(struct virt_queue *vq, int irq, u8 *isr, struct kvm
kvm__irq_line(kvm, irq, VIRTIO_IRQ_HIGH);
}
}
int virtio__get_dev_specific_field(int offset, bool msix, bool features_hi, u32 *config_off)
{
if (msix) {
if (offset < 4)
return VIRTIO_PCI_O_MSIX;
else
offset -= 4;
}
if (features_hi) {
if (offset < 4)
return VIRTIO_PCI_O_FEATURES;
else
offset -= 4;
}
*config_off = offset;
return VIRTIO_PCI_O_CONFIG;
}