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