blob: 2dc8c828808b767fec150fad3845b05959197711 [file] [log] [blame]
Christopher Ferris2abfa9e2021-11-01 16:26:06 -07001/****************************************************************************
2 ****************************************************************************
3 ***
4 *** This header was automatically generated from a Linux kernel header
5 *** of the same name, to make information necessary for userspace to
6 *** call into the kernel available to libc. It contains only constants,
7 *** structures, and macros generated from the original header, and thus,
8 *** contains no copyrightable information.
9 ***
10 *** To edit the content of this header, modify the corresponding
11 *** source file (e.g. under external/kernel-headers/original/) then
12 *** run bionic/libc/kernel/tools/update_all.py
13 ***
14 *** Any manual change here will be lost the next time this script will
15 *** be run. You've been warned!
16 ***
17 ****************************************************************************
18 ****************************************************************************/
19#ifndef _UAPI_VDUSE_H_
20#define _UAPI_VDUSE_H_
21#include <linux/types.h>
22#define VDUSE_BASE 0x81
23#define VDUSE_API_VERSION 0
24#define VDUSE_GET_API_VERSION _IOR(VDUSE_BASE, 0x00, __u64)
25#define VDUSE_SET_API_VERSION _IOW(VDUSE_BASE, 0x01, __u64)
26struct vduse_dev_config {
27#define VDUSE_NAME_MAX 256
28 char name[VDUSE_NAME_MAX];
29 __u32 vendor_id;
30 __u32 device_id;
31 __u64 features;
32 __u32 vq_num;
33 __u32 vq_align;
34 __u32 reserved[13];
35 __u32 config_size;
36 __u8 config[];
37};
38#define VDUSE_CREATE_DEV _IOW(VDUSE_BASE, 0x02, struct vduse_dev_config)
39#define VDUSE_DESTROY_DEV _IOW(VDUSE_BASE, 0x03, char[VDUSE_NAME_MAX])
40struct vduse_iotlb_entry {
41 __u64 offset;
42 __u64 start;
43 __u64 last;
44#define VDUSE_ACCESS_RO 0x1
45#define VDUSE_ACCESS_WO 0x2
46#define VDUSE_ACCESS_RW 0x3
47 __u8 perm;
48};
49#define VDUSE_IOTLB_GET_FD _IOWR(VDUSE_BASE, 0x10, struct vduse_iotlb_entry)
50#define VDUSE_DEV_GET_FEATURES _IOR(VDUSE_BASE, 0x11, __u64)
51struct vduse_config_data {
52 __u32 offset;
53 __u32 length;
54 __u8 buffer[];
55};
56#define VDUSE_DEV_SET_CONFIG _IOW(VDUSE_BASE, 0x12, struct vduse_config_data)
57#define VDUSE_DEV_INJECT_CONFIG_IRQ _IO(VDUSE_BASE, 0x13)
58struct vduse_vq_config {
59 __u32 index;
60 __u16 max_size;
61 __u16 reserved[13];
62};
63#define VDUSE_VQ_SETUP _IOW(VDUSE_BASE, 0x14, struct vduse_vq_config)
64struct vduse_vq_state_split {
65 __u16 avail_index;
66};
67struct vduse_vq_state_packed {
68 __u16 last_avail_counter;
69 __u16 last_avail_idx;
70 __u16 last_used_counter;
71 __u16 last_used_idx;
72};
73struct vduse_vq_info {
74 __u32 index;
75 __u32 num;
76 __u64 desc_addr;
77 __u64 driver_addr;
78 __u64 device_addr;
79 union {
80 struct vduse_vq_state_split split;
81 struct vduse_vq_state_packed packed;
82 };
83 __u8 ready;
84};
85#define VDUSE_VQ_GET_INFO _IOWR(VDUSE_BASE, 0x15, struct vduse_vq_info)
86struct vduse_vq_eventfd {
87 __u32 index;
88#define VDUSE_EVENTFD_DEASSIGN - 1
89 int fd;
90};
91#define VDUSE_VQ_SETUP_KICKFD _IOW(VDUSE_BASE, 0x16, struct vduse_vq_eventfd)
92#define VDUSE_VQ_INJECT_IRQ _IOW(VDUSE_BASE, 0x17, __u32)
93enum vduse_req_type {
94 VDUSE_GET_VQ_STATE,
95 VDUSE_SET_STATUS,
96 VDUSE_UPDATE_IOTLB,
97};
98struct vduse_vq_state {
99 __u32 index;
100 union {
101 struct vduse_vq_state_split split;
102 struct vduse_vq_state_packed packed;
103 };
104};
105struct vduse_dev_status {
106 __u8 status;
107};
108struct vduse_iova_range {
109 __u64 start;
110 __u64 last;
111};
112struct vduse_dev_request {
113 __u32 type;
114 __u32 request_id;
115 __u32 reserved[4];
116 union {
117 struct vduse_vq_state vq_state;
118 struct vduse_dev_status s;
119 struct vduse_iova_range iova;
120 __u32 padding[32];
121 };
122};
123struct vduse_dev_response {
124 __u32 request_id;
125#define VDUSE_REQ_RESULT_OK 0x00
126#define VDUSE_REQ_RESULT_FAILED 0x01
127 __u32 result;
128 __u32 reserved[4];
129 union {
130 struct vduse_vq_state vq_state;
131 __u32 padding[32];
132 };
133};
134#endif