Introduce rpmsg operations to make byte conversion specific to the virtIO transport layer, therefore avoiding the protocol code from being aware of the virtIO transport specification. Signed-off-by: Mathieu Poirier <mathieu.poirier@xxxxxxxxxx> --- drivers/rpmsg/virtio_rpmsg_bus.c | 36 ++++++++++++++++++++++++++++++++ 1 file changed, 36 insertions(+) diff --git a/drivers/rpmsg/virtio_rpmsg_bus.c b/drivers/rpmsg/virtio_rpmsg_bus.c index 1c0be0ee790c..15cc383a85cc 100644 --- a/drivers/rpmsg/virtio_rpmsg_bus.c +++ b/drivers/rpmsg/virtio_rpmsg_bus.c @@ -157,6 +157,38 @@ static struct rpmsg_endpoint *__rpmsg_create_ept(struct virtproc_info *vrp, return NULL; } +static u16 virtio_rpmsg_transport16_to_cpu(struct rpmsg_device *rpdev, u16 val) +{ + struct virtio_rpmsg_channel *vch = to_virtio_rpmsg_channel(rpdev); + struct virtproc_info *vrp = vch->vrp; + + return virtio16_to_cpu(vrp->vdev, val); +} + +static u16 virtio_rpmsg_cpu_to_transport16(struct rpmsg_device *rpdev, u16 val) +{ + struct virtio_rpmsg_channel *vch = to_virtio_rpmsg_channel(rpdev); + struct virtproc_info *vrp = vch->vrp; + + return cpu_to_virtio16(vrp->vdev, val); +} + +static u32 virtio_rpmsg_transport32_to_cpu(struct rpmsg_device *rpdev, u32 val) +{ + struct virtio_rpmsg_channel *vch = to_virtio_rpmsg_channel(rpdev); + struct virtproc_info *vrp = vch->vrp; + + return virtio32_to_cpu(vrp->vdev, val); +} + +static u32 virtio_rpmsg_cpu_to_transport32(struct rpmsg_device *rpdev, u32 val) +{ + struct virtio_rpmsg_channel *vch = to_virtio_rpmsg_channel(rpdev); + struct virtproc_info *vrp = vch->vrp; + + return cpu_to_virtio32(vrp->vdev, val); +} + static struct rpmsg_device * virtio_rpmsg_create_channel(struct rpmsg_device *rpdev, struct rpmsg_channel_info *chinfo) @@ -268,6 +300,10 @@ static int virtio_rpmsg_announce_destroy(struct rpmsg_device *rpdev) } static const struct rpmsg_device_ops virtio_rpmsg_ops = { + .transport16_to_cpu = virtio_rpmsg_transport16_to_cpu, + .cpu_to_transport16 = virtio_rpmsg_cpu_to_transport16, + .transport32_to_cpu = virtio_rpmsg_transport32_to_cpu, + .cpu_to_transport32 = virtio_rpmsg_cpu_to_transport32, .create_channel = virtio_rpmsg_create_channel, .release_channel = virtio_rpmsg_release_channel, .create_ept = virtio_rpmsg_create_ept, -- 2.25.1