blob: ce26caf49450f529f17637e35a31abba4fa7206b [file] [log] [blame]
Elliott Hughes180edef2023-11-02 00:08:05 +00001/*
2 * This file is auto-generated. Modifications will be lost.
3 *
4 * See https://android.googlesource.com/platform/bionic/+/master/libc/kernel/
5 * for more information.
6 */
Ben Cheng655a7c02013-10-16 16:09:24 -07007#ifndef _UAPI_LINUX_VIRTIO_RING_H
8#define _UAPI_LINUX_VIRTIO_RING_H
Christopher Ferris05d08e92016-02-04 13:16:38 -08009#include <stdint.h>
Ben Cheng655a7c02013-10-16 16:09:24 -070010#include <linux/types.h>
Christopher Ferris05d08e92016-02-04 13:16:38 -080011#include <linux/virtio_types.h>
12#define VRING_DESC_F_NEXT 1
Ben Cheng655a7c02013-10-16 16:09:24 -070013#define VRING_DESC_F_WRITE 2
14#define VRING_DESC_F_INDIRECT 4
Christopher Ferrisd842e432019-03-07 10:21:59 -080015#define VRING_PACKED_DESC_F_AVAIL 7
16#define VRING_PACKED_DESC_F_USED 15
Ben Cheng655a7c02013-10-16 16:09:24 -070017#define VRING_USED_F_NO_NOTIFY 1
18#define VRING_AVAIL_F_NO_INTERRUPT 1
Christopher Ferrisd842e432019-03-07 10:21:59 -080019#define VRING_PACKED_EVENT_FLAG_ENABLE 0x0
20#define VRING_PACKED_EVENT_FLAG_DISABLE 0x1
21#define VRING_PACKED_EVENT_FLAG_DESC 0x2
22#define VRING_PACKED_EVENT_F_WRAP_CTR 15
Ben Cheng655a7c02013-10-16 16:09:24 -070023#define VIRTIO_RING_F_INDIRECT_DESC 28
24#define VIRTIO_RING_F_EVENT_IDX 29
Christopher Ferris8177cdf2020-08-03 11:53:55 -070025#define VRING_AVAIL_ALIGN_SIZE 2
26#define VRING_USED_ALIGN_SIZE 4
27#define VRING_DESC_ALIGN_SIZE 16
Ben Cheng655a7c02013-10-16 16:09:24 -070028struct vring_desc {
Christopher Ferris05d08e92016-02-04 13:16:38 -080029 __virtio64 addr;
30 __virtio32 len;
31 __virtio16 flags;
Christopher Ferris05d08e92016-02-04 13:16:38 -080032 __virtio16 next;
Ben Cheng655a7c02013-10-16 16:09:24 -070033};
Ben Cheng655a7c02013-10-16 16:09:24 -070034struct vring_avail {
Christopher Ferris05d08e92016-02-04 13:16:38 -080035 __virtio16 flags;
Christopher Ferris05d08e92016-02-04 13:16:38 -080036 __virtio16 idx;
37 __virtio16 ring[];
Ben Cheng655a7c02013-10-16 16:09:24 -070038};
39struct vring_used_elem {
Christopher Ferris05d08e92016-02-04 13:16:38 -080040 __virtio32 id;
41 __virtio32 len;
Ben Cheng655a7c02013-10-16 16:09:24 -070042};
Christopher Ferris8177cdf2020-08-03 11:53:55 -070043typedef struct vring_used_elem __attribute__((aligned(VRING_USED_ALIGN_SIZE))) vring_used_elem_t;
Ben Cheng655a7c02013-10-16 16:09:24 -070044struct vring_used {
Christopher Ferris05d08e92016-02-04 13:16:38 -080045 __virtio16 flags;
46 __virtio16 idx;
Christopher Ferris8177cdf2020-08-03 11:53:55 -070047 vring_used_elem_t ring[];
Ben Cheng655a7c02013-10-16 16:09:24 -070048};
Christopher Ferris8177cdf2020-08-03 11:53:55 -070049typedef struct vring_desc __attribute__((aligned(VRING_DESC_ALIGN_SIZE))) vring_desc_t;
50typedef struct vring_avail __attribute__((aligned(VRING_AVAIL_ALIGN_SIZE))) vring_avail_t;
51typedef struct vring_used __attribute__((aligned(VRING_USED_ALIGN_SIZE))) vring_used_t;
Ben Cheng655a7c02013-10-16 16:09:24 -070052struct vring {
Tao Baod7db5942015-01-28 10:07:51 -080053 unsigned int num;
Christopher Ferris8177cdf2020-08-03 11:53:55 -070054 vring_desc_t * desc;
55 vring_avail_t * avail;
56 vring_used_t * used;
Ben Cheng655a7c02013-10-16 16:09:24 -070057};
Christopher Ferris8177cdf2020-08-03 11:53:55 -070058#ifndef VIRTIO_RING_NO_LEGACY
Ben Cheng655a7c02013-10-16 16:09:24 -070059#define vring_used_event(vr) ((vr)->avail->ring[(vr)->num])
Christopher Ferris05d08e92016-02-04 13:16:38 -080060#define vring_avail_event(vr) (* (__virtio16 *) & (vr)->used->ring[(vr)->num])
Christopher Ferris8177cdf2020-08-03 11:53:55 -070061#endif
Christopher Ferrisd842e432019-03-07 10:21:59 -080062struct vring_packed_desc_event {
63 __le16 off_wrap;
64 __le16 flags;
65};
66struct vring_packed_desc {
67 __le64 addr;
68 __le32 len;
69 __le16 id;
70 __le16 flags;
71};
Ben Cheng655a7c02013-10-16 16:09:24 -070072#endif