libqos: Change use of pointers to uint64_t in virtio

Convert use of pointers in functions of virtio to uint64_t in order to make it
platform-independent.

Add casting from pointers (in PCI functions) to uint64_t and vice versa through
uintptr_t.

Signed-off-by: Marc Marí <marc.mari.barcelo@gmail.com>
Reviewed-by: Stefan Hajnoczi <stefanha@redhat.com>
Message-id: 1424812915-25728-2-git-send-email-marc.mari.barcelo@gmail.com
Signed-off-by: Stefan Hajnoczi <stefanha@redhat.com>
Signed-off-by: Kevin Wolf <kwolf@redhat.com>
This commit is contained in:
Marc Marí 2015-02-24 22:21:51 +01:00 committed by Kevin Wolf
parent a209f4615c
commit 728312b8c8
4 changed files with 37 additions and 28 deletions

View File

@ -60,25 +60,25 @@ static void qvirtio_pci_assign_device(QVirtioDevice *d, void *data)
*vpcidev = (QVirtioPCIDevice *)d; *vpcidev = (QVirtioPCIDevice *)d;
} }
static uint8_t qvirtio_pci_config_readb(QVirtioDevice *d, void *addr) static uint8_t qvirtio_pci_config_readb(QVirtioDevice *d, uint64_t addr)
{ {
QVirtioPCIDevice *dev = (QVirtioPCIDevice *)d; QVirtioPCIDevice *dev = (QVirtioPCIDevice *)d;
return qpci_io_readb(dev->pdev, addr); return qpci_io_readb(dev->pdev, (void *)(uintptr_t)addr);
} }
static uint16_t qvirtio_pci_config_readw(QVirtioDevice *d, void *addr) static uint16_t qvirtio_pci_config_readw(QVirtioDevice *d, uint64_t addr)
{ {
QVirtioPCIDevice *dev = (QVirtioPCIDevice *)d; QVirtioPCIDevice *dev = (QVirtioPCIDevice *)d;
return qpci_io_readw(dev->pdev, addr); return qpci_io_readw(dev->pdev, (void *)(uintptr_t)addr);
} }
static uint32_t qvirtio_pci_config_readl(QVirtioDevice *d, void *addr) static uint32_t qvirtio_pci_config_readl(QVirtioDevice *d, uint64_t addr)
{ {
QVirtioPCIDevice *dev = (QVirtioPCIDevice *)d; QVirtioPCIDevice *dev = (QVirtioPCIDevice *)d;
return qpci_io_readl(dev->pdev, addr); return qpci_io_readl(dev->pdev, (void *)(uintptr_t)addr);
} }
static uint64_t qvirtio_pci_config_readq(QVirtioDevice *d, void *addr) static uint64_t qvirtio_pci_config_readq(QVirtioDevice *d, uint64_t addr)
{ {
QVirtioPCIDevice *dev = (QVirtioPCIDevice *)d; QVirtioPCIDevice *dev = (QVirtioPCIDevice *)d;
int i; int i;
@ -86,11 +86,13 @@ static uint64_t qvirtio_pci_config_readq(QVirtioDevice *d, void *addr)
if (qtest_big_endian()) { if (qtest_big_endian()) {
for (i = 0; i < 8; ++i) { for (i = 0; i < 8; ++i) {
u64 |= (uint64_t)qpci_io_readb(dev->pdev, addr + i) << (7 - i) * 8; u64 |= (uint64_t)qpci_io_readb(dev->pdev,
(void *)(uintptr_t)addr + i) << (7 - i) * 8;
} }
} else { } else {
for (i = 0; i < 8; ++i) { for (i = 0; i < 8; ++i) {
u64 |= (uint64_t)qpci_io_readb(dev->pdev, addr + i) << i * 8; u64 |= (uint64_t)qpci_io_readb(dev->pdev,
(void *)(uintptr_t)addr + i) << i * 8;
} }
} }

View File

@ -12,25 +12,25 @@
#include "libqos/virtio.h" #include "libqos/virtio.h"
uint8_t qvirtio_config_readb(const QVirtioBus *bus, QVirtioDevice *d, uint8_t qvirtio_config_readb(const QVirtioBus *bus, QVirtioDevice *d,
void *addr) uint64_t addr)
{ {
return bus->config_readb(d, addr); return bus->config_readb(d, addr);
} }
uint16_t qvirtio_config_readw(const QVirtioBus *bus, QVirtioDevice *d, uint16_t qvirtio_config_readw(const QVirtioBus *bus, QVirtioDevice *d,
void *addr) uint64_t addr)
{ {
return bus->config_readw(d, addr); return bus->config_readw(d, addr);
} }
uint32_t qvirtio_config_readl(const QVirtioBus *bus, QVirtioDevice *d, uint32_t qvirtio_config_readl(const QVirtioBus *bus, QVirtioDevice *d,
void *addr) uint64_t addr)
{ {
return bus->config_readl(d, addr); return bus->config_readl(d, addr);
} }
uint64_t qvirtio_config_readq(const QVirtioBus *bus, QVirtioDevice *d, uint64_t qvirtio_config_readq(const QVirtioBus *bus, QVirtioDevice *d,
void *addr) uint64_t addr)
{ {
return bus->config_readq(d, addr); return bus->config_readq(d, addr);
} }

View File

@ -93,10 +93,10 @@ typedef struct QVRingIndirectDesc {
} QVRingIndirectDesc; } QVRingIndirectDesc;
typedef struct QVirtioBus { typedef struct QVirtioBus {
uint8_t (*config_readb)(QVirtioDevice *d, void *addr); uint8_t (*config_readb)(QVirtioDevice *d, uint64_t addr);
uint16_t (*config_readw)(QVirtioDevice *d, void *addr); uint16_t (*config_readw)(QVirtioDevice *d, uint64_t addr);
uint32_t (*config_readl)(QVirtioDevice *d, void *addr); uint32_t (*config_readl)(QVirtioDevice *d, uint64_t addr);
uint64_t (*config_readq)(QVirtioDevice *d, void *addr); uint64_t (*config_readq)(QVirtioDevice *d, uint64_t addr);
/* Get features of the device */ /* Get features of the device */
uint32_t (*get_features)(QVirtioDevice *d); uint32_t (*get_features)(QVirtioDevice *d);
@ -144,13 +144,13 @@ static inline uint32_t qvring_size(uint32_t num, uint32_t align)
} }
uint8_t qvirtio_config_readb(const QVirtioBus *bus, QVirtioDevice *d, uint8_t qvirtio_config_readb(const QVirtioBus *bus, QVirtioDevice *d,
void *addr); uint64_t addr);
uint16_t qvirtio_config_readw(const QVirtioBus *bus, QVirtioDevice *d, uint16_t qvirtio_config_readw(const QVirtioBus *bus, QVirtioDevice *d,
void *addr); uint64_t addr);
uint32_t qvirtio_config_readl(const QVirtioBus *bus, QVirtioDevice *d, uint32_t qvirtio_config_readl(const QVirtioBus *bus, QVirtioDevice *d,
void *addr); uint64_t addr);
uint64_t qvirtio_config_readq(const QVirtioBus *bus, QVirtioDevice *d, uint64_t qvirtio_config_readq(const QVirtioBus *bus, QVirtioDevice *d,
void *addr); uint64_t addr);
uint32_t qvirtio_get_features(const QVirtioBus *bus, QVirtioDevice *d); uint32_t qvirtio_get_features(const QVirtioBus *bus, QVirtioDevice *d);
void qvirtio_set_features(const QVirtioBus *bus, QVirtioDevice *d, void qvirtio_set_features(const QVirtioBus *bus, QVirtioDevice *d,
uint32_t features); uint32_t features);

View File

@ -157,7 +157,8 @@ static void pci_basic(void)
/* MSI-X is not enabled */ /* MSI-X is not enabled */
addr = dev->addr + QVIRTIO_DEVICE_SPECIFIC_NO_MSIX; addr = dev->addr + QVIRTIO_DEVICE_SPECIFIC_NO_MSIX;
capacity = qvirtio_config_readq(&qvirtio_pci, &dev->vdev, addr); capacity = qvirtio_config_readq(&qvirtio_pci, &dev->vdev,
(uint64_t)(uintptr_t)addr);
g_assert_cmpint(capacity, ==, TEST_IMAGE_SIZE / 512); g_assert_cmpint(capacity, ==, TEST_IMAGE_SIZE / 512);
features = qvirtio_get_features(&qvirtio_pci, &dev->vdev); features = qvirtio_get_features(&qvirtio_pci, &dev->vdev);
@ -303,7 +304,8 @@ static void pci_indirect(void)
/* MSI-X is not enabled */ /* MSI-X is not enabled */
addr = dev->addr + QVIRTIO_DEVICE_SPECIFIC_NO_MSIX; addr = dev->addr + QVIRTIO_DEVICE_SPECIFIC_NO_MSIX;
capacity = qvirtio_config_readq(&qvirtio_pci, &dev->vdev, addr); capacity = qvirtio_config_readq(&qvirtio_pci, &dev->vdev,
(uint64_t)(uintptr_t)addr);
g_assert_cmpint(capacity, ==, TEST_IMAGE_SIZE / 512); g_assert_cmpint(capacity, ==, TEST_IMAGE_SIZE / 512);
features = qvirtio_get_features(&qvirtio_pci, &dev->vdev); features = qvirtio_get_features(&qvirtio_pci, &dev->vdev);
@ -394,7 +396,8 @@ static void pci_config(void)
/* MSI-X is not enabled */ /* MSI-X is not enabled */
addr = dev->addr + QVIRTIO_DEVICE_SPECIFIC_NO_MSIX; addr = dev->addr + QVIRTIO_DEVICE_SPECIFIC_NO_MSIX;
capacity = qvirtio_config_readq(&qvirtio_pci, &dev->vdev, addr); capacity = qvirtio_config_readq(&qvirtio_pci, &dev->vdev,
(uint64_t)(uintptr_t)addr);
g_assert_cmpint(capacity, ==, TEST_IMAGE_SIZE / 512); g_assert_cmpint(capacity, ==, TEST_IMAGE_SIZE / 512);
qvirtio_set_driver_ok(&qvirtio_pci, &dev->vdev); qvirtio_set_driver_ok(&qvirtio_pci, &dev->vdev);
@ -403,7 +406,8 @@ static void pci_config(void)
" 'size': %d } }", n_size); " 'size': %d } }", n_size);
qvirtio_wait_config_isr(&qvirtio_pci, &dev->vdev, QVIRTIO_BLK_TIMEOUT_US); qvirtio_wait_config_isr(&qvirtio_pci, &dev->vdev, QVIRTIO_BLK_TIMEOUT_US);
capacity = qvirtio_config_readq(&qvirtio_pci, &dev->vdev, addr); capacity = qvirtio_config_readq(&qvirtio_pci, &dev->vdev,
(uint64_t)(uintptr_t)addr);
g_assert_cmpint(capacity, ==, n_size / 512); g_assert_cmpint(capacity, ==, n_size / 512);
qvirtio_pci_device_disable(dev); qvirtio_pci_device_disable(dev);
@ -438,7 +442,8 @@ static void pci_msix(void)
/* MSI-X is enabled */ /* MSI-X is enabled */
addr = dev->addr + QVIRTIO_DEVICE_SPECIFIC_MSIX; addr = dev->addr + QVIRTIO_DEVICE_SPECIFIC_MSIX;
capacity = qvirtio_config_readq(&qvirtio_pci, &dev->vdev, addr); capacity = qvirtio_config_readq(&qvirtio_pci, &dev->vdev,
(uint64_t)(uintptr_t)addr);
g_assert_cmpint(capacity, ==, TEST_IMAGE_SIZE / 512); g_assert_cmpint(capacity, ==, TEST_IMAGE_SIZE / 512);
features = qvirtio_get_features(&qvirtio_pci, &dev->vdev); features = qvirtio_get_features(&qvirtio_pci, &dev->vdev);
@ -458,7 +463,8 @@ static void pci_msix(void)
qvirtio_wait_config_isr(&qvirtio_pci, &dev->vdev, QVIRTIO_BLK_TIMEOUT_US); qvirtio_wait_config_isr(&qvirtio_pci, &dev->vdev, QVIRTIO_BLK_TIMEOUT_US);
capacity = qvirtio_config_readq(&qvirtio_pci, &dev->vdev, addr); capacity = qvirtio_config_readq(&qvirtio_pci, &dev->vdev,
(uint64_t)(uintptr_t)addr);
g_assert_cmpint(capacity, ==, n_size / 512); g_assert_cmpint(capacity, ==, n_size / 512);
/* Write request */ /* Write request */
@ -547,7 +553,8 @@ static void pci_idx(void)
/* MSI-X is enabled */ /* MSI-X is enabled */
addr = dev->addr + QVIRTIO_DEVICE_SPECIFIC_MSIX; addr = dev->addr + QVIRTIO_DEVICE_SPECIFIC_MSIX;
capacity = qvirtio_config_readq(&qvirtio_pci, &dev->vdev, addr); capacity = qvirtio_config_readq(&qvirtio_pci, &dev->vdev,
(uint64_t)(uintptr_t)addr);
g_assert_cmpint(capacity, ==, TEST_IMAGE_SIZE / 512); g_assert_cmpint(capacity, ==, TEST_IMAGE_SIZE / 512);
features = qvirtio_get_features(&qvirtio_pci, &dev->vdev); features = qvirtio_get_features(&qvirtio_pci, &dev->vdev);