at v4.7-rc2 62 lines 1.7 kB view raw
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