bdev/virtio: replace rte_read/write with spdk_mmio

Remove one use of DPDK-specific functions in the virtio initiator code.

Change-Id: I538185270da83674e937dac64c9b1130fab36ac4
Signed-off-by: Daniel Verkamp <daniel.verkamp@intel.com>
Reviewed-on: https://review.gerrithub.io/382074
Tested-by: SPDK Automated Test System <sys_sgsw@intel.com>
Reviewed-by: Jim Harris <james.r.harris@intel.com>
Reviewed-by: Changpeng Liu <changpeng.liu@intel.com>
Reviewed-by: Dariusz Stojaczyk <dariuszx.stojaczyk@intel.com>
This commit is contained in:
Daniel Verkamp 2017-10-10 16:48:21 -07:00 committed by Jim Harris
parent 15e978340d
commit 709f7b0104

View File

@ -38,7 +38,8 @@
#endif #endif
#include <linux/virtio_scsi.h> #include <linux/virtio_scsi.h>
#include <rte_io.h>
#include "spdk/mmio.h"
#include "virtio_pci.h" #include "virtio_pci.h"
#include "virtio_logs.h" #include "virtio_logs.h"
@ -265,8 +266,8 @@ const struct virtio_pci_ops legacy_ops = {
static inline void static inline void
io_write64_twopart(uint64_t val, uint32_t *lo, uint32_t *hi) io_write64_twopart(uint64_t val, uint32_t *lo, uint32_t *hi)
{ {
rte_write32(val & ((1ULL << 32) - 1), lo); spdk_mmio_write_4(lo, val & ((1ULL << 32) - 1));
rte_write32(val >> 32, hi); spdk_mmio_write_4(hi, val >> 32);
} }
static void static void
@ -279,13 +280,13 @@ modern_read_dev_config(struct virtio_dev *dev, size_t offset,
uint8_t old_gen, new_gen; uint8_t old_gen, new_gen;
do { do {
old_gen = rte_read8(&hw->common_cfg->config_generation); old_gen = spdk_mmio_read_1(&hw->common_cfg->config_generation);
p = dst; p = dst;
for (i = 0; i < length; i++) for (i = 0; i < length; i++)
*p++ = rte_read8((uint8_t *)hw->dev_cfg + offset + i); *p++ = spdk_mmio_read_1((uint8_t *)hw->dev_cfg + offset + i);
new_gen = rte_read8(&hw->common_cfg->config_generation); new_gen = spdk_mmio_read_1(&hw->common_cfg->config_generation);
} while (old_gen != new_gen); } while (old_gen != new_gen);
} }
@ -298,7 +299,7 @@ modern_write_dev_config(struct virtio_dev *dev, size_t offset,
const uint8_t *p = src; const uint8_t *p = src;
for (i = 0; i < length; i++) for (i = 0; i < length; i++)
rte_write8((*p++), (((uint8_t *)hw->dev_cfg) + offset + i)); spdk_mmio_write_1(((uint8_t *)hw->dev_cfg) + offset + i, *p++);
} }
static uint64_t static uint64_t
@ -307,11 +308,11 @@ modern_get_features(struct virtio_dev *dev)
struct virtio_hw *hw = virtio_dev_get_hw(dev); struct virtio_hw *hw = virtio_dev_get_hw(dev);
uint32_t features_lo, features_hi; uint32_t features_lo, features_hi;
rte_write32(0, &hw->common_cfg->device_feature_select); spdk_mmio_write_4(&hw->common_cfg->device_feature_select, 0);
features_lo = rte_read32(&hw->common_cfg->device_feature); features_lo = spdk_mmio_read_4(&hw->common_cfg->device_feature);
rte_write32(1, &hw->common_cfg->device_feature_select); spdk_mmio_write_4(&hw->common_cfg->device_feature_select, 1);
features_hi = rte_read32(&hw->common_cfg->device_feature); features_hi = spdk_mmio_read_4(&hw->common_cfg->device_feature);
return ((uint64_t)features_hi << 32) | features_lo; return ((uint64_t)features_hi << 32) | features_lo;
} }
@ -327,13 +328,11 @@ modern_set_features(struct virtio_dev *dev, uint64_t features)
return -1; return -1;
} }
rte_write32(0, &hw->common_cfg->guest_feature_select); spdk_mmio_write_4(&hw->common_cfg->guest_feature_select, 0);
rte_write32(features & ((1ULL << 32) - 1), spdk_mmio_write_4(&hw->common_cfg->guest_feature, features & ((1ULL << 32) - 1));
&hw->common_cfg->guest_feature);
rte_write32(1, &hw->common_cfg->guest_feature_select); spdk_mmio_write_4(&hw->common_cfg->guest_feature_select, 1);
rte_write32(features >> 32, spdk_mmio_write_4(&hw->common_cfg->guest_feature, features >> 32);
&hw->common_cfg->guest_feature);
dev->negotiated_features = features; dev->negotiated_features = features;
@ -345,7 +344,7 @@ modern_get_status(struct virtio_dev *dev)
{ {
struct virtio_hw *hw = virtio_dev_get_hw(dev); struct virtio_hw *hw = virtio_dev_get_hw(dev);
return rte_read8(&hw->common_cfg->device_status); return spdk_mmio_read_1(&hw->common_cfg->device_status);
} }
static void static void
@ -353,7 +352,7 @@ modern_set_status(struct virtio_dev *dev, uint8_t status)
{ {
struct virtio_hw *hw = virtio_dev_get_hw(dev); struct virtio_hw *hw = virtio_dev_get_hw(dev);
rte_write8(status, &hw->common_cfg->device_status); spdk_mmio_write_1(&hw->common_cfg->device_status, status);
} }
static uint8_t static uint8_t
@ -361,7 +360,7 @@ modern_get_isr(struct virtio_dev *dev)
{ {
struct virtio_hw *hw = virtio_dev_get_hw(dev); struct virtio_hw *hw = virtio_dev_get_hw(dev);
return rte_read8(hw->isr); return spdk_mmio_read_1(hw->isr);
} }
static uint16_t static uint16_t
@ -369,8 +368,8 @@ modern_set_config_irq(struct virtio_dev *dev, uint16_t vec)
{ {
struct virtio_hw *hw = virtio_dev_get_hw(dev); struct virtio_hw *hw = virtio_dev_get_hw(dev);
rte_write16(vec, &hw->common_cfg->msix_config); spdk_mmio_write_2(&hw->common_cfg->msix_config, vec);
return rte_read16(&hw->common_cfg->msix_config); return spdk_mmio_read_2(&hw->common_cfg->msix_config);
} }
static uint16_t static uint16_t
@ -378,9 +377,9 @@ modern_set_queue_irq(struct virtio_dev *dev, struct virtqueue *vq, uint16_t vec)
{ {
struct virtio_hw *hw = virtio_dev_get_hw(dev); struct virtio_hw *hw = virtio_dev_get_hw(dev);
rte_write16(vq->vq_queue_index, &hw->common_cfg->queue_select); spdk_mmio_write_2(&hw->common_cfg->queue_select, vq->vq_queue_index);
rte_write16(vec, &hw->common_cfg->queue_msix_vector); spdk_mmio_write_2(&hw->common_cfg->queue_msix_vector, vec);
return rte_read16(&hw->common_cfg->queue_msix_vector); return spdk_mmio_read_2(&hw->common_cfg->queue_msix_vector);
} }
static uint16_t static uint16_t
@ -388,8 +387,8 @@ modern_get_queue_num(struct virtio_dev *dev, uint16_t queue_id)
{ {
struct virtio_hw *hw = virtio_dev_get_hw(dev); struct virtio_hw *hw = virtio_dev_get_hw(dev);
rte_write16(queue_id, &hw->common_cfg->queue_select); spdk_mmio_write_2(&hw->common_cfg->queue_select, queue_id);
return rte_read16(&hw->common_cfg->queue_size); return spdk_mmio_read_2(&hw->common_cfg->queue_size);
} }
static int static int
@ -408,7 +407,7 @@ modern_setup_queue(struct virtio_dev *dev, struct virtqueue *vq)
ring[vq->vq_nentries]), ring[vq->vq_nentries]),
VIRTIO_PCI_VRING_ALIGN); VIRTIO_PCI_VRING_ALIGN);
rte_write16(vq->vq_queue_index, &hw->common_cfg->queue_select); spdk_mmio_write_2(&hw->common_cfg->queue_select, vq->vq_queue_index);
io_write64_twopart(desc_addr, &hw->common_cfg->queue_desc_lo, io_write64_twopart(desc_addr, &hw->common_cfg->queue_desc_lo,
&hw->common_cfg->queue_desc_hi); &hw->common_cfg->queue_desc_hi);
@ -417,11 +416,11 @@ modern_setup_queue(struct virtio_dev *dev, struct virtqueue *vq)
io_write64_twopart(used_addr, &hw->common_cfg->queue_used_lo, io_write64_twopart(used_addr, &hw->common_cfg->queue_used_lo,
&hw->common_cfg->queue_used_hi); &hw->common_cfg->queue_used_hi);
notify_off = rte_read16(&hw->common_cfg->queue_notify_off); notify_off = spdk_mmio_read_2(&hw->common_cfg->queue_notify_off);
vq->notify_addr = (void *)((uint8_t *)hw->notify_base + vq->notify_addr = (void *)((uint8_t *)hw->notify_base +
notify_off * hw->notify_off_multiplier); notify_off * hw->notify_off_multiplier);
rte_write16(1, &hw->common_cfg->queue_enable); spdk_mmio_write_2(&hw->common_cfg->queue_enable, 1);
PMD_INIT_LOG(DEBUG, "queue %u addresses:", vq->vq_queue_index); PMD_INIT_LOG(DEBUG, "queue %u addresses:", vq->vq_queue_index);
PMD_INIT_LOG(DEBUG, "\t desc_addr: %" PRIx64, desc_addr); PMD_INIT_LOG(DEBUG, "\t desc_addr: %" PRIx64, desc_addr);
@ -438,7 +437,7 @@ modern_del_queue(struct virtio_dev *dev, struct virtqueue *vq)
{ {
struct virtio_hw *hw = virtio_dev_get_hw(dev); struct virtio_hw *hw = virtio_dev_get_hw(dev);
rte_write16(vq->vq_queue_index, &hw->common_cfg->queue_select); spdk_mmio_write_2(&hw->common_cfg->queue_select, vq->vq_queue_index);
io_write64_twopart(0, &hw->common_cfg->queue_desc_lo, io_write64_twopart(0, &hw->common_cfg->queue_desc_lo,
&hw->common_cfg->queue_desc_hi); &hw->common_cfg->queue_desc_hi);
@ -447,13 +446,13 @@ modern_del_queue(struct virtio_dev *dev, struct virtqueue *vq)
io_write64_twopart(0, &hw->common_cfg->queue_used_lo, io_write64_twopart(0, &hw->common_cfg->queue_used_lo,
&hw->common_cfg->queue_used_hi); &hw->common_cfg->queue_used_hi);
rte_write16(0, &hw->common_cfg->queue_enable); spdk_mmio_write_2(&hw->common_cfg->queue_enable, 0);
} }
static void static void
modern_notify_queue(struct virtio_dev *dev __rte_unused, struct virtqueue *vq) modern_notify_queue(struct virtio_dev *dev __rte_unused, struct virtqueue *vq)
{ {
rte_write16(vq->vq_queue_index, vq->notify_addr); spdk_mmio_write_2(vq->notify_addr, vq->vq_queue_index);
} }
const struct virtio_pci_ops modern_ops = { const struct virtio_pci_ops modern_ops = {