xref: /aosp_15_r20/bionic/libc/kernel/uapi/linux/virtio_ring.h (revision 8d67ca893c1523eb926b9080dbe4e2ffd2a27ba1)
1*8d67ca89SAndroid Build Coastguard Worker /*
2*8d67ca89SAndroid Build Coastguard Worker  * This file is auto-generated. Modifications will be lost.
3*8d67ca89SAndroid Build Coastguard Worker  *
4*8d67ca89SAndroid Build Coastguard Worker  * See https://android.googlesource.com/platform/bionic/+/master/libc/kernel/
5*8d67ca89SAndroid Build Coastguard Worker  * for more information.
6*8d67ca89SAndroid Build Coastguard Worker  */
7*8d67ca89SAndroid Build Coastguard Worker #ifndef _UAPI_LINUX_VIRTIO_RING_H
8*8d67ca89SAndroid Build Coastguard Worker #define _UAPI_LINUX_VIRTIO_RING_H
9*8d67ca89SAndroid Build Coastguard Worker #include <stdint.h>
10*8d67ca89SAndroid Build Coastguard Worker #include <linux/types.h>
11*8d67ca89SAndroid Build Coastguard Worker #include <linux/virtio_types.h>
12*8d67ca89SAndroid Build Coastguard Worker #define VRING_DESC_F_NEXT 1
13*8d67ca89SAndroid Build Coastguard Worker #define VRING_DESC_F_WRITE 2
14*8d67ca89SAndroid Build Coastguard Worker #define VRING_DESC_F_INDIRECT 4
15*8d67ca89SAndroid Build Coastguard Worker #define VRING_PACKED_DESC_F_AVAIL 7
16*8d67ca89SAndroid Build Coastguard Worker #define VRING_PACKED_DESC_F_USED 15
17*8d67ca89SAndroid Build Coastguard Worker #define VRING_USED_F_NO_NOTIFY 1
18*8d67ca89SAndroid Build Coastguard Worker #define VRING_AVAIL_F_NO_INTERRUPT 1
19*8d67ca89SAndroid Build Coastguard Worker #define VRING_PACKED_EVENT_FLAG_ENABLE 0x0
20*8d67ca89SAndroid Build Coastguard Worker #define VRING_PACKED_EVENT_FLAG_DISABLE 0x1
21*8d67ca89SAndroid Build Coastguard Worker #define VRING_PACKED_EVENT_FLAG_DESC 0x2
22*8d67ca89SAndroid Build Coastguard Worker #define VRING_PACKED_EVENT_F_WRAP_CTR 15
23*8d67ca89SAndroid Build Coastguard Worker #define VIRTIO_RING_F_INDIRECT_DESC 28
24*8d67ca89SAndroid Build Coastguard Worker #define VIRTIO_RING_F_EVENT_IDX 29
25*8d67ca89SAndroid Build Coastguard Worker #define VRING_AVAIL_ALIGN_SIZE 2
26*8d67ca89SAndroid Build Coastguard Worker #define VRING_USED_ALIGN_SIZE 4
27*8d67ca89SAndroid Build Coastguard Worker #define VRING_DESC_ALIGN_SIZE 16
28*8d67ca89SAndroid Build Coastguard Worker struct vring_desc {
29*8d67ca89SAndroid Build Coastguard Worker   __virtio64 addr;
30*8d67ca89SAndroid Build Coastguard Worker   __virtio32 len;
31*8d67ca89SAndroid Build Coastguard Worker   __virtio16 flags;
32*8d67ca89SAndroid Build Coastguard Worker   __virtio16 next;
33*8d67ca89SAndroid Build Coastguard Worker };
34*8d67ca89SAndroid Build Coastguard Worker struct vring_avail {
35*8d67ca89SAndroid Build Coastguard Worker   __virtio16 flags;
36*8d67ca89SAndroid Build Coastguard Worker   __virtio16 idx;
37*8d67ca89SAndroid Build Coastguard Worker   __virtio16 ring[];
38*8d67ca89SAndroid Build Coastguard Worker };
39*8d67ca89SAndroid Build Coastguard Worker struct vring_used_elem {
40*8d67ca89SAndroid Build Coastguard Worker   __virtio32 id;
41*8d67ca89SAndroid Build Coastguard Worker   __virtio32 len;
42*8d67ca89SAndroid Build Coastguard Worker };
43*8d67ca89SAndroid Build Coastguard Worker typedef struct vring_used_elem __attribute__((aligned(VRING_USED_ALIGN_SIZE))) vring_used_elem_t;
44*8d67ca89SAndroid Build Coastguard Worker struct vring_used {
45*8d67ca89SAndroid Build Coastguard Worker   __virtio16 flags;
46*8d67ca89SAndroid Build Coastguard Worker   __virtio16 idx;
47*8d67ca89SAndroid Build Coastguard Worker   vring_used_elem_t ring[];
48*8d67ca89SAndroid Build Coastguard Worker };
49*8d67ca89SAndroid Build Coastguard Worker typedef struct vring_desc __attribute__((aligned(VRING_DESC_ALIGN_SIZE))) vring_desc_t;
50*8d67ca89SAndroid Build Coastguard Worker typedef struct vring_avail __attribute__((aligned(VRING_AVAIL_ALIGN_SIZE))) vring_avail_t;
51*8d67ca89SAndroid Build Coastguard Worker typedef struct vring_used __attribute__((aligned(VRING_USED_ALIGN_SIZE))) vring_used_t;
52*8d67ca89SAndroid Build Coastguard Worker struct vring {
53*8d67ca89SAndroid Build Coastguard Worker   unsigned int num;
54*8d67ca89SAndroid Build Coastguard Worker   vring_desc_t * desc;
55*8d67ca89SAndroid Build Coastguard Worker   vring_avail_t * avail;
56*8d67ca89SAndroid Build Coastguard Worker   vring_used_t * used;
57*8d67ca89SAndroid Build Coastguard Worker };
58*8d67ca89SAndroid Build Coastguard Worker #ifndef VIRTIO_RING_NO_LEGACY
59*8d67ca89SAndroid Build Coastguard Worker #define vring_used_event(vr) ((vr)->avail->ring[(vr)->num])
60*8d67ca89SAndroid Build Coastguard Worker #define vring_avail_event(vr) (* (__virtio16 *) & (vr)->used->ring[(vr)->num])
61*8d67ca89SAndroid Build Coastguard Worker #endif
62*8d67ca89SAndroid Build Coastguard Worker struct vring_packed_desc_event {
63*8d67ca89SAndroid Build Coastguard Worker   __le16 off_wrap;
64*8d67ca89SAndroid Build Coastguard Worker   __le16 flags;
65*8d67ca89SAndroid Build Coastguard Worker };
66*8d67ca89SAndroid Build Coastguard Worker struct vring_packed_desc {
67*8d67ca89SAndroid Build Coastguard Worker   __le64 addr;
68*8d67ca89SAndroid Build Coastguard Worker   __le32 len;
69*8d67ca89SAndroid Build Coastguard Worker   __le16 id;
70*8d67ca89SAndroid Build Coastguard Worker   __le16 flags;
71*8d67ca89SAndroid Build Coastguard Worker };
72*8d67ca89SAndroid Build Coastguard Worker #endif
73