virtio.h 1.6 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162
  1. #ifndef LINUX_VIRTIO_H
  2. #define LINUX_VIRTIO_H
  3. #include <linux/scatterlist.h>
  4. #include <linux/kernel.h>
  5. struct virtio_device {
  6. void *dev;
  7. u64 features;
  8. };
  9. struct virtqueue {
  10. /* TODO: commented as list macros are empty stubs for now.
  11. * Broken but enough for virtio_ring.c
  12. * struct list_head list; */
  13. void (*callback)(struct virtqueue *vq);
  14. const char *name;
  15. struct virtio_device *vdev;
  16. unsigned int index;
  17. unsigned int num_free;
  18. void *priv;
  19. };
  20. /* Interfaces exported by virtio_ring. */
  21. int virtqueue_add_sgs(struct virtqueue *vq,
  22. struct scatterlist *sgs[],
  23. unsigned int out_sgs,
  24. unsigned int in_sgs,
  25. void *data,
  26. gfp_t gfp);
  27. int virtqueue_add_outbuf(struct virtqueue *vq,
  28. struct scatterlist sg[], unsigned int num,
  29. void *data,
  30. gfp_t gfp);
  31. int virtqueue_add_inbuf(struct virtqueue *vq,
  32. struct scatterlist sg[], unsigned int num,
  33. void *data,
  34. gfp_t gfp);
  35. bool virtqueue_kick(struct virtqueue *vq);
  36. void *virtqueue_get_buf(struct virtqueue *vq, unsigned int *len);
  37. void virtqueue_disable_cb(struct virtqueue *vq);
  38. bool virtqueue_enable_cb(struct virtqueue *vq);
  39. bool virtqueue_enable_cb_delayed(struct virtqueue *vq);
  40. void *virtqueue_detach_unused_buf(struct virtqueue *vq);
  41. struct virtqueue *vring_new_virtqueue(unsigned int index,
  42. unsigned int num,
  43. unsigned int vring_align,
  44. struct virtio_device *vdev,
  45. bool weak_barriers,
  46. void *pages,
  47. bool (*notify)(struct virtqueue *vq),
  48. void (*callback)(struct virtqueue *vq),
  49. const char *name);
  50. void vring_del_virtqueue(struct virtqueue *vq);
  51. #endif