]>
Commit | Line | Data |
---|---|---|
b2441318 | 1 | /* SPDX-License-Identifier: GPL-2.0 */ |
4e53f78e MT |
2 | #ifndef LINUX_VIRTIO_H |
3 | #define LINUX_VIRTIO_H | |
61d0b5a4 RR |
4 | #include <linux/scatterlist.h> |
5 | #include <linux/kernel.h> | |
4e53f78e | 6 | |
6be3ffaa MT |
7 | struct device { |
8 | void *parent; | |
9 | }; | |
10 | ||
4e53f78e | 11 | struct virtio_device { |
6be3ffaa | 12 | struct device dev; |
d0254773 | 13 | u64 features; |
4e53f78e MT |
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; | |
73640c99 MT |
23 | unsigned int index; |
24 | unsigned int num_free; | |
4e53f78e MT |
25 | void *priv; |
26 | }; | |
27 | ||
4e53f78e | 28 | /* Interfaces exported by virtio_ring. */ |
13816c76 RR |
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 | ||
e538ebaf RR |
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 | ||
d1b8c4c2 | 46 | bool virtqueue_kick(struct virtqueue *vq); |
4e53f78e MT |
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); | |
64d09888 | 53 | bool virtqueue_enable_cb_delayed(struct virtqueue *vq); |
4e53f78e MT |
54 | |
55 | void *virtqueue_detach_unused_buf(struct virtqueue *vq); | |
73640c99 MT |
56 | struct virtqueue *vring_new_virtqueue(unsigned int index, |
57 | unsigned int num, | |
4e53f78e MT |
58 | unsigned int vring_align, |
59 | struct virtio_device *vdev, | |
7b21e34f | 60 | bool weak_barriers, |
0a12ae40 | 61 | bool ctx, |
4e53f78e | 62 | void *pages, |
d1b8c4c2 | 63 | bool (*notify)(struct virtqueue *vq), |
4e53f78e MT |
64 | void (*callback)(struct virtqueue *vq), |
65 | const char *name); | |
66 | void vring_del_virtqueue(struct virtqueue *vq); | |
67 | ||
68 | #endif |