at v5.7-rc2 68 lines 1.8 kB view raw
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