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 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 /* 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. */ 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 69