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