To be able to add more load/store operations, introduce the VIRTIO_ST_CONVERT() macro.
Signed-off-by: Philippe Mathieu-Daudé <phi...@redhat.com> --- include/hw/virtio/virtio-access.h | 32 +++++++++++++++++++++++++++++++ 1 file changed, 32 insertions(+) diff --git a/include/hw/virtio/virtio-access.h b/include/hw/virtio/virtio-access.h index 594247f6e35..a86819ef2fe 100644 --- a/include/hw/virtio/virtio-access.h +++ b/include/hw/virtio/virtio-access.h @@ -68,6 +68,38 @@ static inline rtype virtio_ld ## size ## _phys_cached(VirtIODevice *vdev,\ return ld ## size ## _le_phys_cached(cache, pa);\ } +#define VIRTIO_ST_CONVERT(size, vtype)\ +static inline void virtio_st## size ## _p(VirtIODevice *vdev,\ + void *ptr, vtype v)\ +{\ + if (virtio_access_is_big_endian(vdev)) {\ + st## size ## _be_p(ptr, v);\ + } else {\ + st## size ## _le_p(ptr, v);\ + }\ +}\ +static inline void virtio_st## size ## _phys(VirtIODevice *vdev,\ + hwaddr pa, vtype value)\ +{\ + AddressSpace *dma_as = vdev->dma_as;\ +\ + if (virtio_access_is_big_endian(vdev)) {\ + st## size ## _be_phys(dma_as, pa, value);\ + } else {\ + st## size ## _le_phys(dma_as, pa, value);\ + }\ +}\ +static inline void virtio_st ## size ## _phys_cached(VirtIODevice *vdev,\ + MemoryRegionCache *cache,\ + hwaddr pa, vtype value)\ +{\ + if (virtio_access_is_big_endian(vdev)) {\ + st ## size ## _be_phys_cached(cache, pa, value);\ + } else {\ + st ## size ## _le_phys_cached(cache, pa, value);\ + }\ +} + VIRTIO_LD_CONVERT(uw, uint16_t) static inline uint32_t virtio_ldl_phys(VirtIODevice *vdev, hwaddr pa) -- 2.26.3