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