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_VDUSE_H_ 8*8d67ca89SAndroid Build Coastguard Worker #define _UAPI_VDUSE_H_ 9*8d67ca89SAndroid Build Coastguard Worker #include <linux/types.h> 10*8d67ca89SAndroid Build Coastguard Worker #define VDUSE_BASE 0x81 11*8d67ca89SAndroid Build Coastguard Worker #define VDUSE_API_VERSION 0 12*8d67ca89SAndroid Build Coastguard Worker #define VDUSE_GET_API_VERSION _IOR(VDUSE_BASE, 0x00, __u64) 13*8d67ca89SAndroid Build Coastguard Worker #define VDUSE_SET_API_VERSION _IOW(VDUSE_BASE, 0x01, __u64) 14*8d67ca89SAndroid Build Coastguard Worker struct vduse_dev_config { 15*8d67ca89SAndroid Build Coastguard Worker #define VDUSE_NAME_MAX 256 16*8d67ca89SAndroid Build Coastguard Worker char name[VDUSE_NAME_MAX]; 17*8d67ca89SAndroid Build Coastguard Worker __u32 vendor_id; 18*8d67ca89SAndroid Build Coastguard Worker __u32 device_id; 19*8d67ca89SAndroid Build Coastguard Worker __u64 features; 20*8d67ca89SAndroid Build Coastguard Worker __u32 vq_num; 21*8d67ca89SAndroid Build Coastguard Worker __u32 vq_align; 22*8d67ca89SAndroid Build Coastguard Worker __u32 reserved[13]; 23*8d67ca89SAndroid Build Coastguard Worker __u32 config_size; 24*8d67ca89SAndroid Build Coastguard Worker __u8 config[]; 25*8d67ca89SAndroid Build Coastguard Worker }; 26*8d67ca89SAndroid Build Coastguard Worker #define VDUSE_CREATE_DEV _IOW(VDUSE_BASE, 0x02, struct vduse_dev_config) 27*8d67ca89SAndroid Build Coastguard Worker #define VDUSE_DESTROY_DEV _IOW(VDUSE_BASE, 0x03, char[VDUSE_NAME_MAX]) 28*8d67ca89SAndroid Build Coastguard Worker struct vduse_iotlb_entry { 29*8d67ca89SAndroid Build Coastguard Worker __u64 offset; 30*8d67ca89SAndroid Build Coastguard Worker __u64 start; 31*8d67ca89SAndroid Build Coastguard Worker __u64 last; 32*8d67ca89SAndroid Build Coastguard Worker #define VDUSE_ACCESS_RO 0x1 33*8d67ca89SAndroid Build Coastguard Worker #define VDUSE_ACCESS_WO 0x2 34*8d67ca89SAndroid Build Coastguard Worker #define VDUSE_ACCESS_RW 0x3 35*8d67ca89SAndroid Build Coastguard Worker __u8 perm; 36*8d67ca89SAndroid Build Coastguard Worker }; 37*8d67ca89SAndroid Build Coastguard Worker #define VDUSE_IOTLB_GET_FD _IOWR(VDUSE_BASE, 0x10, struct vduse_iotlb_entry) 38*8d67ca89SAndroid Build Coastguard Worker #define VDUSE_DEV_GET_FEATURES _IOR(VDUSE_BASE, 0x11, __u64) 39*8d67ca89SAndroid Build Coastguard Worker struct vduse_config_data { 40*8d67ca89SAndroid Build Coastguard Worker __u32 offset; 41*8d67ca89SAndroid Build Coastguard Worker __u32 length; 42*8d67ca89SAndroid Build Coastguard Worker __u8 buffer[]; 43*8d67ca89SAndroid Build Coastguard Worker }; 44*8d67ca89SAndroid Build Coastguard Worker #define VDUSE_DEV_SET_CONFIG _IOW(VDUSE_BASE, 0x12, struct vduse_config_data) 45*8d67ca89SAndroid Build Coastguard Worker #define VDUSE_DEV_INJECT_CONFIG_IRQ _IO(VDUSE_BASE, 0x13) 46*8d67ca89SAndroid Build Coastguard Worker struct vduse_vq_config { 47*8d67ca89SAndroid Build Coastguard Worker __u32 index; 48*8d67ca89SAndroid Build Coastguard Worker __u16 max_size; 49*8d67ca89SAndroid Build Coastguard Worker __u16 reserved[13]; 50*8d67ca89SAndroid Build Coastguard Worker }; 51*8d67ca89SAndroid Build Coastguard Worker #define VDUSE_VQ_SETUP _IOW(VDUSE_BASE, 0x14, struct vduse_vq_config) 52*8d67ca89SAndroid Build Coastguard Worker struct vduse_vq_state_split { 53*8d67ca89SAndroid Build Coastguard Worker __u16 avail_index; 54*8d67ca89SAndroid Build Coastguard Worker }; 55*8d67ca89SAndroid Build Coastguard Worker struct vduse_vq_state_packed { 56*8d67ca89SAndroid Build Coastguard Worker __u16 last_avail_counter; 57*8d67ca89SAndroid Build Coastguard Worker __u16 last_avail_idx; 58*8d67ca89SAndroid Build Coastguard Worker __u16 last_used_counter; 59*8d67ca89SAndroid Build Coastguard Worker __u16 last_used_idx; 60*8d67ca89SAndroid Build Coastguard Worker }; 61*8d67ca89SAndroid Build Coastguard Worker struct vduse_vq_info { 62*8d67ca89SAndroid Build Coastguard Worker __u32 index; 63*8d67ca89SAndroid Build Coastguard Worker __u32 num; 64*8d67ca89SAndroid Build Coastguard Worker __u64 desc_addr; 65*8d67ca89SAndroid Build Coastguard Worker __u64 driver_addr; 66*8d67ca89SAndroid Build Coastguard Worker __u64 device_addr; 67*8d67ca89SAndroid Build Coastguard Worker union { 68*8d67ca89SAndroid Build Coastguard Worker struct vduse_vq_state_split split; 69*8d67ca89SAndroid Build Coastguard Worker struct vduse_vq_state_packed packed; 70*8d67ca89SAndroid Build Coastguard Worker }; 71*8d67ca89SAndroid Build Coastguard Worker __u8 ready; 72*8d67ca89SAndroid Build Coastguard Worker }; 73*8d67ca89SAndroid Build Coastguard Worker #define VDUSE_VQ_GET_INFO _IOWR(VDUSE_BASE, 0x15, struct vduse_vq_info) 74*8d67ca89SAndroid Build Coastguard Worker struct vduse_vq_eventfd { 75*8d67ca89SAndroid Build Coastguard Worker __u32 index; 76*8d67ca89SAndroid Build Coastguard Worker #define VDUSE_EVENTFD_DEASSIGN - 1 77*8d67ca89SAndroid Build Coastguard Worker int fd; 78*8d67ca89SAndroid Build Coastguard Worker }; 79*8d67ca89SAndroid Build Coastguard Worker #define VDUSE_VQ_SETUP_KICKFD _IOW(VDUSE_BASE, 0x16, struct vduse_vq_eventfd) 80*8d67ca89SAndroid Build Coastguard Worker #define VDUSE_VQ_INJECT_IRQ _IOW(VDUSE_BASE, 0x17, __u32) 81*8d67ca89SAndroid Build Coastguard Worker struct vduse_iova_umem { 82*8d67ca89SAndroid Build Coastguard Worker __u64 uaddr; 83*8d67ca89SAndroid Build Coastguard Worker __u64 iova; 84*8d67ca89SAndroid Build Coastguard Worker __u64 size; 85*8d67ca89SAndroid Build Coastguard Worker __u64 reserved[3]; 86*8d67ca89SAndroid Build Coastguard Worker }; 87*8d67ca89SAndroid Build Coastguard Worker #define VDUSE_IOTLB_REG_UMEM _IOW(VDUSE_BASE, 0x18, struct vduse_iova_umem) 88*8d67ca89SAndroid Build Coastguard Worker #define VDUSE_IOTLB_DEREG_UMEM _IOW(VDUSE_BASE, 0x19, struct vduse_iova_umem) 89*8d67ca89SAndroid Build Coastguard Worker struct vduse_iova_info { 90*8d67ca89SAndroid Build Coastguard Worker __u64 start; 91*8d67ca89SAndroid Build Coastguard Worker __u64 last; 92*8d67ca89SAndroid Build Coastguard Worker #define VDUSE_IOVA_CAP_UMEM (1 << 0) 93*8d67ca89SAndroid Build Coastguard Worker __u64 capability; 94*8d67ca89SAndroid Build Coastguard Worker __u64 reserved[3]; 95*8d67ca89SAndroid Build Coastguard Worker }; 96*8d67ca89SAndroid Build Coastguard Worker #define VDUSE_IOTLB_GET_INFO _IOWR(VDUSE_BASE, 0x1a, struct vduse_iova_info) 97*8d67ca89SAndroid Build Coastguard Worker enum vduse_req_type { 98*8d67ca89SAndroid Build Coastguard Worker VDUSE_GET_VQ_STATE, 99*8d67ca89SAndroid Build Coastguard Worker VDUSE_SET_STATUS, 100*8d67ca89SAndroid Build Coastguard Worker VDUSE_UPDATE_IOTLB, 101*8d67ca89SAndroid Build Coastguard Worker }; 102*8d67ca89SAndroid Build Coastguard Worker struct vduse_vq_state { 103*8d67ca89SAndroid Build Coastguard Worker __u32 index; 104*8d67ca89SAndroid Build Coastguard Worker union { 105*8d67ca89SAndroid Build Coastguard Worker struct vduse_vq_state_split split; 106*8d67ca89SAndroid Build Coastguard Worker struct vduse_vq_state_packed packed; 107*8d67ca89SAndroid Build Coastguard Worker }; 108*8d67ca89SAndroid Build Coastguard Worker }; 109*8d67ca89SAndroid Build Coastguard Worker struct vduse_dev_status { 110*8d67ca89SAndroid Build Coastguard Worker __u8 status; 111*8d67ca89SAndroid Build Coastguard Worker }; 112*8d67ca89SAndroid Build Coastguard Worker struct vduse_iova_range { 113*8d67ca89SAndroid Build Coastguard Worker __u64 start; 114*8d67ca89SAndroid Build Coastguard Worker __u64 last; 115*8d67ca89SAndroid Build Coastguard Worker }; 116*8d67ca89SAndroid Build Coastguard Worker struct vduse_dev_request { 117*8d67ca89SAndroid Build Coastguard Worker __u32 type; 118*8d67ca89SAndroid Build Coastguard Worker __u32 request_id; 119*8d67ca89SAndroid Build Coastguard Worker __u32 reserved[4]; 120*8d67ca89SAndroid Build Coastguard Worker union { 121*8d67ca89SAndroid Build Coastguard Worker struct vduse_vq_state vq_state; 122*8d67ca89SAndroid Build Coastguard Worker struct vduse_dev_status s; 123*8d67ca89SAndroid Build Coastguard Worker struct vduse_iova_range iova; 124*8d67ca89SAndroid Build Coastguard Worker __u32 padding[32]; 125*8d67ca89SAndroid Build Coastguard Worker }; 126*8d67ca89SAndroid Build Coastguard Worker }; 127*8d67ca89SAndroid Build Coastguard Worker struct vduse_dev_response { 128*8d67ca89SAndroid Build Coastguard Worker __u32 request_id; 129*8d67ca89SAndroid Build Coastguard Worker #define VDUSE_REQ_RESULT_OK 0x00 130*8d67ca89SAndroid Build Coastguard Worker #define VDUSE_REQ_RESULT_FAILED 0x01 131*8d67ca89SAndroid Build Coastguard Worker __u32 result; 132*8d67ca89SAndroid Build Coastguard Worker __u32 reserved[4]; 133*8d67ca89SAndroid Build Coastguard Worker union { 134*8d67ca89SAndroid Build Coastguard Worker struct vduse_vq_state vq_state; 135*8d67ca89SAndroid Build Coastguard Worker __u32 padding[32]; 136*8d67ca89SAndroid Build Coastguard Worker }; 137*8d67ca89SAndroid Build Coastguard Worker }; 138*8d67ca89SAndroid Build Coastguard Worker #endif 139