Commit c3a79fa1 authored by Sasha Levin's avatar Sasha Levin Committed by Will Deacon
Browse files

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: default avatarSasha Levin <levinsasha928@gmail.com>
Signed-off-by: default avatarPekka Enberg <penberg@kernel.org>
parent 4b2e0a7a
......@@ -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 */
......@@ -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;
}
Supports Markdown
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment