virtio.h 1.8 KB

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