mirror of
https://github.com/OpenAMP/open-amp.git
synced 2026-09-23 08:34:27 +08:00
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:
committed by
Arnaud Pouliquen
parent
8bd6149dfc
commit
b2f6099fe5
@@ -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
|
||||
|
||||
Reference in New Issue
Block a user