lib: virtio: add new api virtio_has_feature()

virtio_has_feature() can be easily used to check if the virtio device
support a specific feature.

And assgin feature to vdev->feature for virtio device role when get
features, so the virtio device side can use virtio_has_featrue() to
check weather the virtio device support a feature.

Signed-off-by: Bowen Wang <wangbowen6@xiaomi.com>
This commit is contained in:
Bowen Wang
2025-02-05 09:09:48 +01:00
committed by Arnaud Pouliquen
parent 8bd6149dfc
commit b2f6099fe5
+25
View File
@@ -449,6 +449,9 @@ static inline int virtio_get_features(struct virtio_device *vdev,
return -ENXIO;
*features = vdev->func->get_features(vdev);
if (VIRTIO_ROLE_IS_DEVICE(vdev))
vdev->features = *features;
return 0;
}
@@ -565,6 +568,28 @@ static inline int virtio_free_buf(struct virtio_device *vdev, void *buf)
return 0;
}
/**
* @brief Check if the virtio device support a specific feature.
*
* @param vdev Pointer to device structure.
* @param feature_bit Feature bit to check.
*
* @return true if the feature is supported, otherwise false.
*/
static inline bool virtio_has_feature(struct virtio_device *vdev,
unsigned int feature_bit)
{
uint32_t features;
if (!vdev && feature_bit >= sizeof(features) * 8)
return false;
if (!vdev->features)
virtio_get_features(vdev, &features);
return (vdev->features & (1UL << feature_bit)) != 0;
}
#if defined __cplusplus
}
#endif