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

kvm tools: Use definitions from kernel headers



Instead of redefining virtio pci constants (or not using them at all), use
constants from kernel header.

Acked-and-tested-by: default avatarIngo Molnar <mingo@elte.hu>
Signed-off-by: default avatarSasha Levin <levinsasha928@gmail.com>
Signed-off-by: default avatarPekka Enberg <penberg@kernel.org>
parent aaf0b445
......@@ -16,4 +16,7 @@
#define PCI_SUBSYSTEM_ID_VIRTIO_CONSOLE 0x0003
#define PCI_SUBSYSTEM_ID_VIRTIO_RNG 0x0004
#define PCI_VENDOR_ID_REDHAT_QUMRANET 0x1af4
#define PCI_SUBSYSTEM_VENDOR_ID_REDHAT_QUMRANET 0x1af4
#endif /* VIRTIO_PCI_DEV_H_ */
/*
* Virtio PCI driver
*
* This module allows virtio devices to be used over a virtual PCI device.
* This can be used with QEMU based VMMs like KVM or Xen.
*
* Copyright IBM Corp. 2007
*
* Authors:
* Anthony Liguori <aliguori@us.ibm.com>
*
* This header is BSD licensed so anyone can use the definitions to implement
* compatible drivers/servers.
*/
#ifndef _LINUX_VIRTIO_PCI_H
#define _LINUX_VIRTIO_PCI_H
/* A 32-bit r/o bitmask of the features supported by the host */
#define VIRTIO_PCI_HOST_FEATURES 0
/* A 32-bit r/w bitmask of features activated by the guest */
#define VIRTIO_PCI_GUEST_FEATURES 4
/* A 32-bit r/w PFN for the currently selected queue */
#define VIRTIO_PCI_QUEUE_PFN 8
/* A 16-bit r/o queue size for the currently selected queue */
#define VIRTIO_PCI_QUEUE_NUM 12
/* A 16-bit r/w queue selector */
#define VIRTIO_PCI_QUEUE_SEL 14
/* A 16-bit r/w queue notifier */
#define VIRTIO_PCI_QUEUE_NOTIFY 16
/* An 8-bit device status register */
#define VIRTIO_PCI_STATUS 18
/*
* An 8-bit r/o interrupt status register.
*
* Reading the value will return the current contents of
* the ISR and will also clear it. This is effectively
* a read-and-acknowledge.
*/
#define VIRTIO_PCI_ISR 19
/*
* MSI-X registers: only enabled if MSI-X is enabled.
*/
/* A 16-bit vector for configuration changes */
#define VIRTIO_MSI_CONFIG_VECTOR 20
/* A 16-bit vector for selected queue notifications */
#define VIRTIO_MSI_QUEUE_VECTOR 22
/* Vector value used to disable MSI for queue */
#define VIRTIO_MSI_NO_VECTOR 0xffff
/*
* Config space size.
*/
#define VIRTIO_PCI_CONFIG_NOMSI 20
#define VIRTIO_PCI_CONFIG_MSI 24
/*
* Virtio config space constants.
*/
#define PCI_VENDOR_ID_REDHAT_QUMRANET 0x1af4
#define PCI_SUBSYSTEM_VENDOR_ID_REDHAT_QUMRANET 0x1af4
#endif /* _LINUX_VIRTIO_PCI_H */
......@@ -2,6 +2,7 @@
#define KVM__VIRTIO_H
#include <linux/virtio_ring.h>
#include <linux/virtio_pci.h>
#include <linux/types.h>
#include <sys/uio.h>
......@@ -43,7 +44,7 @@ static inline bool virt_queue__available(struct virt_queue *vq)
*/
static inline void *guest_pfn_to_host(struct kvm *kvm, u32 pfn)
{
return guest_flat_to_host(kvm, (unsigned long)pfn << 12);
return guest_flat_to_host(kvm, (unsigned long)pfn << VIRTIO_PCI_QUEUE_ADDR_SHIFT);
}
struct vring_used_elem *virt_queue__set_used_elem(struct virt_queue *queue, u32 head, u32 len);
......
#include "kvm/virtio-blk.h"
#include "kvm/virtio-pci.h"
#include "kvm/virtio-pci-dev.h"
#include "kvm/irq.h"
#include "kvm/disk-image.h"
......@@ -58,7 +57,7 @@ static bool virtio_blk_dev_in(struct blk_dev *bdev, void *data, unsigned long of
if (size != 1 || count != 1)
return false;
ioport__write8(data, config_space[offset - VIRTIO_PCI_CONFIG_NOMSI]);
ioport__write8(data, config_space[offset - VIRTIO_MSI_CONFIG_VECTOR]);
return true;
}
......@@ -199,7 +198,7 @@ static bool virtio_blk_pci_io_out(struct kvm *self, u16 port, void *data, int si
queue->pfn = ioport__read32(data);
p = guest_pfn_to_host(self, queue->pfn);
vring_init(&queue->vring, VIRTIO_BLK_QUEUE_SIZE, p, 4096);
vring_init(&queue->vring, VIRTIO_BLK_QUEUE_SIZE, p, VIRTIO_PCI_VRING_ALIGN);
*job = (struct blk_dev_job) {
.vq = queue,
......
#include "kvm/virtio-console.h"
#include "kvm/virtio-pci.h"
#include "kvm/virtio-pci-dev.h"
#include "kvm/disk-image.h"
#include "kvm/virtio.h"
......@@ -104,10 +103,10 @@ static bool virtio_console_pci_io_device_specific_in(void *data, unsigned long o
if (size != 1 || count != 1)
return false;
if ((offset - VIRTIO_PCI_CONFIG_NOMSI) > sizeof(struct virtio_console_config))
error("config offset is too big: %li", offset - VIRTIO_PCI_CONFIG_NOMSI);
if ((offset - VIRTIO_MSI_CONFIG_VECTOR) > sizeof(struct virtio_console_config))
error("config offset is too big: %li", offset - VIRTIO_MSI_CONFIG_VECTOR);
ioport__write8(data, config_space[offset - VIRTIO_PCI_CONFIG_NOMSI]);
ioport__write8(data, config_space[offset - VIRTIO_MSI_CONFIG_VECTOR]);
return true;
}
......@@ -201,7 +200,7 @@ static bool virtio_console_pci_io_out(struct kvm *self, u16 port, void *data, in
queue->pfn = ioport__read32(data);
p = guest_pfn_to_host(self, queue->pfn);
vring_init(&queue->vring, VIRTIO_CONSOLE_QUEUE_SIZE, p, 4096);
vring_init(&queue->vring, VIRTIO_CONSOLE_QUEUE_SIZE, p, VIRTIO_PCI_VRING_ALIGN);
if (cdev.queue_selector == VIRTIO_CONSOLE_TX_QUEUE)
cdev.jobs[cdev.queue_selector] = thread_pool__add_job(self, virtio_console_handle_callback, queue);
......
#include "kvm/virtio-net.h"
#include "kvm/virtio-pci.h"
#include "kvm/virtio-pci-dev.h"
#include "kvm/virtio.h"
#include "kvm/ioport.h"
......@@ -154,10 +153,10 @@ static bool virtio_net_pci_io_device_specific_in(void *data, unsigned long offse
if (size != 1 || count != 1)
return false;
if ((offset - VIRTIO_PCI_CONFIG_NOMSI) > sizeof(struct virtio_net_config))
error("config offset is too big: %li", offset - VIRTIO_PCI_CONFIG_NOMSI);
if ((offset - VIRTIO_MSI_CONFIG_VECTOR) > sizeof(struct virtio_net_config))
error("config offset is too big: %li", offset - VIRTIO_MSI_CONFIG_VECTOR);
ioport__write8(data, config_space[offset - VIRTIO_PCI_CONFIG_NOMSI]);
ioport__write8(data, config_space[offset - VIRTIO_MSI_CONFIG_VECTOR]);
return true;
}
......@@ -247,7 +246,7 @@ static bool virtio_net_pci_io_out(struct kvm *self, u16 port, void *data, int si
queue->pfn = ioport__read32(data);
p = guest_pfn_to_host(self, queue->pfn);
vring_init(&queue->vring, VIRTIO_NET_QUEUE_SIZE, p, 4096);
vring_init(&queue->vring, VIRTIO_NET_QUEUE_SIZE, p, VIRTIO_PCI_VRING_ALIGN);
break;
}
......
#include "kvm/virtio-rng.h"
#include "kvm/virtio-pci.h"
#include "kvm/virtio-pci-dev.h"
#include "kvm/disk-image.h"
......@@ -131,7 +130,7 @@ static bool virtio_rng_pci_io_out(struct kvm *kvm, u16 port, void *data, int siz
queue->pfn = ioport__read32(data);
p = guest_pfn_to_host(kvm, queue->pfn);
vring_init(&queue->vring, VIRTIO_RNG_QUEUE_SIZE, p, 4096);
vring_init(&queue->vring, VIRTIO_RNG_QUEUE_SIZE, p, VIRTIO_PCI_VRING_ALIGN);
rdev.jobs[rdev.queue_selector] = thread_pool__add_job(kvm, virtio_rng_do_io, queue);
......
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