linux/tools/virtio/linux/virtio.h
<<
>>
Prefs
   1/* SPDX-License-Identifier: GPL-2.0 */
   2#ifndef LINUX_VIRTIO_H
   3#define LINUX_VIRTIO_H
   4#include <linux/scatterlist.h>
   5#include <linux/kernel.h>
   6
   7struct device {
   8        void *parent;
   9};
  10
  11struct virtio_device {
  12        struct device dev;
  13        u64 features;
  14};
  15
  16struct virtqueue {
  17        /* TODO: commented as list macros are empty stubs for now.
  18         * Broken but enough for virtio_ring.c
  19         * struct list_head list; */
  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/* Interfaces exported by virtio_ring. */
  29int 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
  36int virtqueue_add_outbuf(struct virtqueue *vq,
  37                         struct scatterlist sg[], unsigned int num,
  38                         void *data,
  39                         gfp_t gfp);
  40
  41int virtqueue_add_inbuf(struct virtqueue *vq,
  42                        struct scatterlist sg[], unsigned int num,
  43                        void *data,
  44                        gfp_t gfp);
  45
  46bool virtqueue_kick(struct virtqueue *vq);
  47
  48void *virtqueue_get_buf(struct virtqueue *vq, unsigned int *len);
  49
  50void virtqueue_disable_cb(struct virtqueue *vq);
  51
  52bool virtqueue_enable_cb(struct virtqueue *vq);
  53bool virtqueue_enable_cb_delayed(struct virtqueue *vq);
  54
  55void *virtqueue_detach_unused_buf(struct virtqueue *vq);
  56struct 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);
  66void vring_del_virtqueue(struct virtqueue *vq);
  67
  68#endif
  69