On Thu, Oct 17, 2019 at 06:48:34PM +0800, Jason Wang wrote:
- @get_vq_state: Get the state for a virtqueue
@mdev: mediated device
@idx: virtqueue index
Returns virtqueue state (last_avail_idx)
- @get_vq_align: Get the virtqueue align requirement
for the device
@mdev: mediated device
Returns virtqueue algin requirement
- @get_features: Get virtio features supported by the device
@mdev: mediated device
Returns the virtio features support by the
device
- @get_features: Set virtio features supported by the driver
s/get_features/set_features/
configration space
- @get_mdev_features: Get the feature of virtio mdev device
@mdev: mediated device
Returns the mdev features (API) support by
the device.
- @get_generation: Get device generaton
@mdev: mediated device
Returns u32: device generation
- */
+struct virtio_mdev_device_ops {
- /* Virtqueue ops */
- int (*set_vq_address)(struct mdev_device *mdev,
u16 idx, u64 desc_area, u64 driver_area,
u64 device_area);
- void (*set_vq_num)(struct mdev_device *mdev, u16 idx, u32 num);
- void (*kick_vq)(struct mdev_device *mdev, u16 idx);
- void (*set_vq_cb)(struct mdev_device *mdev, u16 idx,
struct virtio_mdev_callback *cb);
- void (*set_vq_ready)(struct mdev_device *mdev, u16 idx, bool ready);
- bool (*get_vq_ready)(struct mdev_device *mdev, u16 idx);
- int (*set_vq_state)(struct mdev_device *mdev, u16 idx, u64 state);
- u64 (*get_vq_state)(struct mdev_device *mdev, u16 idx);
- /* Device ops */
- u16 (*get_vq_align)(struct mdev_device *mdev);
- u64 (*get_features)(struct mdev_device *mdev);
- int (*set_features)(struct mdev_device *mdev, u64 features);
- void (*set_config_cb)(struct mdev_device *mdev,
struct virtio_mdev_callback *cb);
- u16 (*get_vq_num_max)(struct mdev_device *mdev);
- u32 (*get_device_id)(struct mdev_device *mdev);
- u32 (*get_vendor_id)(struct mdev_device *mdev);
- u8 (*get_status)(struct mdev_device *mdev);
- void (*set_status)(struct mdev_device *mdev, u8 status);
- void (*get_config)(struct mdev_device *mdev, unsigned int offset,
void *buf, unsigned int len);
- void (*set_config)(struct mdev_device *mdev, unsigned int offset,
const void *buf, unsigned int len);
- u64 (*get_mdev_features)(struct mdev_device *mdev);
Do we need a .set_mdev_features method as well?
It's not very clear what does mdev_features mean. Does it mean the vhost backend features?
https://github.com/torvalds/linux/blob/0e2adab6cf285c41e825b6c74a3aa61324d11...
- u32 (*get_generation)(struct mdev_device *mdev);
+};
+void mdev_set_virtio_ops(struct mdev_device *mdev,
const struct virtio_mdev_device_ops *virtio_ops);
+#endif
2.19.1