virtio: should use size matched operation to read virtio config space

1. Use virtio_read_config_bytes() to read the string types in
rpmsg-virtio and virtio-net;
2. Use virtio_read_config_member() to read the elements in
virtio-snd configuration space;

Signed-off-by: Bowen Wang <wangbowen6@xiaomi.com>
This commit is contained in:
Bowen Wang
2025-07-07 21:05:13 +08:00
committed by Alan C. Assis
parent d1ae87a97a
commit 521fcd964d
3 changed files with 25 additions and 16 deletions
+16 -12
View File
@@ -642,21 +642,25 @@ int rpmsg_virtio_probe(FAR struct virtio_device *vdev)
DEBUGASSERT(virtio_has_feature(vdev, VIRTIO_RPMSG_F_CPUNAME));
if (vdev->role == VIRTIO_DEV_DRIVER)
{
virtio_read_config(vdev, offsetof(struct fw_rsc_config, host_cpuname),
priv->rpmsg.local_cpuname,
VIRTIO_RPMSG_CPUNAME_SIZE);
virtio_read_config(vdev,
offsetof(struct fw_rsc_config, remote_cpuname),
priv->rpmsg.cpuname, VIRTIO_RPMSG_CPUNAME_SIZE);
virtio_read_config_bytes(vdev, offsetof(struct fw_rsc_config,
host_cpuname),
priv->rpmsg.local_cpuname,
VIRTIO_RPMSG_CPUNAME_SIZE);
virtio_read_config_bytes(vdev, offsetof(struct fw_rsc_config,
remote_cpuname),
priv->rpmsg.cpuname,
VIRTIO_RPMSG_CPUNAME_SIZE);
}
else
{
virtio_read_config(vdev, offsetof(struct fw_rsc_config, host_cpuname),
priv->rpmsg.cpuname, VIRTIO_RPMSG_CPUNAME_SIZE);
virtio_read_config(vdev,
offsetof(struct fw_rsc_config, remote_cpuname),
priv->rpmsg.local_cpuname,
VIRTIO_RPMSG_CPUNAME_SIZE);
virtio_read_config_bytes(vdev, offsetof(struct fw_rsc_config,
host_cpuname),
priv->rpmsg.cpuname,
VIRTIO_RPMSG_CPUNAME_SIZE);
virtio_read_config_bytes(vdev, offsetof(struct fw_rsc_config,
remote_cpuname),
priv->rpmsg.local_cpuname,
VIRTIO_RPMSG_CPUNAME_SIZE);
}
/* Register the rpmsg to rpmsg framework */
+3 -2
View File
@@ -614,8 +614,9 @@ static void virtio_net_set_macaddr(FAR struct virtio_net_priv_s *priv)
if (virtio_has_feature(vdev, VIRTIO_NET_F_MAC))
{
virtio_read_config(vdev, offsetof(struct virtio_net_config_s, mac),
mac, IFHWADDRLEN);
virtio_read_config_bytes(vdev,
offsetof(struct virtio_net_config_s, mac),
mac, IFHWADDRLEN);
}
else
{
+6 -2
View File
@@ -1107,8 +1107,12 @@ static int virtio_snd_init(FAR struct virtio_snd_s *priv)
virtio_set_status(priv->vdev, VIRTIO_CONFIG_STATUS_DRIVER_OK);
virtio_read_config(priv->vdev, 0, &priv->config,
sizeof(struct virtio_snd_config));
virtio_read_config_member(priv->vdev, struct virtio_snd_config, jacks,
&priv->config.jacks);
virtio_read_config_member(priv->vdev, struct virtio_snd_config, streams,
&priv->config.streams);
virtio_read_config_member(priv->vdev, struct virtio_snd_config, chmaps,
&priv->config.chmaps);
vrtinfo("jacks:%"PRIu32" streams:%"PRIu32" chmap:%"PRIu32"\n",
priv->config.jacks, priv->config.streams, priv->config.chmaps);