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 #include <linux/spinlock.h> 7 8 struct device { 9 void *parent; 10 }; 11 12 struct virtio_device { 13 struct device dev; 14 u64 features; 15 struct list_head vqs; 16 spinlock_t vqs_list_lock; 17 const struct virtio_config_ops *config; 18 }; 19 20 struct virtqueue { 21 struct list_head list; 22 void (*callback)(struct virtqueue *vq); 23 const char *name; 24 struct virtio_device *vdev; 25 unsigned int index; 26 unsigned int num_free; 27 unsigned int num_max; 28 void *priv; 29 bool reset; 30 }; 31 32 /* Interfaces exported by virtio_ring. */ 33 int virtqueue_add_sgs(struct virtqueue *vq, 34 struct scatterlist *sgs[], 35 unsigned int out_sgs, 36 unsigned int in_sgs, 37 void *data, 38 gfp_t gfp); 39 40 int virtqueue_add_outbuf(struct virtqueue *vq, 41 struct scatterlist sg[], unsigned int num, 42 void *data, 43 gfp_t gfp); 44 45 int virtqueue_add_inbuf(struct virtqueue *vq, 46 struct scatterlist sg[], unsigned int num, 47 void *data, 48 gfp_t gfp); 49 50 bool virtqueue_kick(struct virtqueue *vq); 51 52 void *virtqueue_get_buf(struct virtqueue *vq, unsigned int *len); 53 54 void virtqueue_disable_cb(struct virtqueue *vq); 55 56 bool virtqueue_enable_cb(struct virtqueue *vq); 57 bool virtqueue_enable_cb_delayed(struct virtqueue *vq); 58 59 void *virtqueue_detach_unused_buf(struct virtqueue *vq); 60 struct virtqueue *vring_new_virtqueue(unsigned int index, 61 unsigned int num, 62 unsigned int vring_align, 63 struct virtio_device *vdev, 64 bool weak_barriers, 65 bool ctx, 66 void *pages, 67 bool (*notify)(struct virtqueue *vq), 68 void (*callback)(struct virtqueue *vq), 69 const char *name); 70 void vring_del_virtqueue(struct virtqueue *vq); 71 72 #endif 73
Linux® is a registered trademark of Linus Torvalds in the United States and other countries.
TOMOYO® is a registered trademark of NTT DATA CORPORATION.