1*f80ad8b4SAndroid Build Coastguard Worker /* SPDX-License-Identifier: GPL-2.0 WITH Linux-syscall-note */ 2*f80ad8b4SAndroid Build Coastguard Worker /* 3*f80ad8b4SAndroid Build Coastguard Worker * Userspace interface for /dev/acrn_hsm - ACRN Hypervisor Service Module 4*f80ad8b4SAndroid Build Coastguard Worker * 5*f80ad8b4SAndroid Build Coastguard Worker * This file can be used by applications that need to communicate with the HSM 6*f80ad8b4SAndroid Build Coastguard Worker * via the ioctl interface. 7*f80ad8b4SAndroid Build Coastguard Worker * 8*f80ad8b4SAndroid Build Coastguard Worker * Copyright (C) 2021 Intel Corporation. All rights reserved. 9*f80ad8b4SAndroid Build Coastguard Worker */ 10*f80ad8b4SAndroid Build Coastguard Worker 11*f80ad8b4SAndroid Build Coastguard Worker #ifndef _UAPI_ACRN_H 12*f80ad8b4SAndroid Build Coastguard Worker #define _UAPI_ACRN_H 13*f80ad8b4SAndroid Build Coastguard Worker 14*f80ad8b4SAndroid Build Coastguard Worker #include <linux/types.h> 15*f80ad8b4SAndroid Build Coastguard Worker 16*f80ad8b4SAndroid Build Coastguard Worker #define ACRN_IO_REQUEST_MAX 16 17*f80ad8b4SAndroid Build Coastguard Worker 18*f80ad8b4SAndroid Build Coastguard Worker #define ACRN_IOREQ_STATE_PENDING 0 19*f80ad8b4SAndroid Build Coastguard Worker #define ACRN_IOREQ_STATE_COMPLETE 1 20*f80ad8b4SAndroid Build Coastguard Worker #define ACRN_IOREQ_STATE_PROCESSING 2 21*f80ad8b4SAndroid Build Coastguard Worker #define ACRN_IOREQ_STATE_FREE 3 22*f80ad8b4SAndroid Build Coastguard Worker 23*f80ad8b4SAndroid Build Coastguard Worker #define ACRN_IOREQ_TYPE_PORTIO 0 24*f80ad8b4SAndroid Build Coastguard Worker #define ACRN_IOREQ_TYPE_MMIO 1 25*f80ad8b4SAndroid Build Coastguard Worker #define ACRN_IOREQ_TYPE_PCICFG 2 26*f80ad8b4SAndroid Build Coastguard Worker 27*f80ad8b4SAndroid Build Coastguard Worker #define ACRN_IOREQ_DIR_READ 0 28*f80ad8b4SAndroid Build Coastguard Worker #define ACRN_IOREQ_DIR_WRITE 1 29*f80ad8b4SAndroid Build Coastguard Worker 30*f80ad8b4SAndroid Build Coastguard Worker /** 31*f80ad8b4SAndroid Build Coastguard Worker * struct acrn_mmio_request - Info of a MMIO I/O request 32*f80ad8b4SAndroid Build Coastguard Worker * @direction: Access direction of this request (ACRN_IOREQ_DIR_*) 33*f80ad8b4SAndroid Build Coastguard Worker * @reserved: Reserved for alignment and should be 0 34*f80ad8b4SAndroid Build Coastguard Worker * @address: Access address of this MMIO I/O request 35*f80ad8b4SAndroid Build Coastguard Worker * @size: Access size of this MMIO I/O request 36*f80ad8b4SAndroid Build Coastguard Worker * @value: Read/write value of this MMIO I/O request 37*f80ad8b4SAndroid Build Coastguard Worker */ 38*f80ad8b4SAndroid Build Coastguard Worker struct acrn_mmio_request { 39*f80ad8b4SAndroid Build Coastguard Worker __u32 direction; 40*f80ad8b4SAndroid Build Coastguard Worker __u32 reserved; 41*f80ad8b4SAndroid Build Coastguard Worker __u64 address; 42*f80ad8b4SAndroid Build Coastguard Worker __u64 size; 43*f80ad8b4SAndroid Build Coastguard Worker __u64 value; 44*f80ad8b4SAndroid Build Coastguard Worker }; 45*f80ad8b4SAndroid Build Coastguard Worker 46*f80ad8b4SAndroid Build Coastguard Worker /** 47*f80ad8b4SAndroid Build Coastguard Worker * struct acrn_pio_request - Info of a PIO I/O request 48*f80ad8b4SAndroid Build Coastguard Worker * @direction: Access direction of this request (ACRN_IOREQ_DIR_*) 49*f80ad8b4SAndroid Build Coastguard Worker * @reserved: Reserved for alignment and should be 0 50*f80ad8b4SAndroid Build Coastguard Worker * @address: Access address of this PIO I/O request 51*f80ad8b4SAndroid Build Coastguard Worker * @size: Access size of this PIO I/O request 52*f80ad8b4SAndroid Build Coastguard Worker * @value: Read/write value of this PIO I/O request 53*f80ad8b4SAndroid Build Coastguard Worker */ 54*f80ad8b4SAndroid Build Coastguard Worker struct acrn_pio_request { 55*f80ad8b4SAndroid Build Coastguard Worker __u32 direction; 56*f80ad8b4SAndroid Build Coastguard Worker __u32 reserved; 57*f80ad8b4SAndroid Build Coastguard Worker __u64 address; 58*f80ad8b4SAndroid Build Coastguard Worker __u64 size; 59*f80ad8b4SAndroid Build Coastguard Worker __u32 value; 60*f80ad8b4SAndroid Build Coastguard Worker }; 61*f80ad8b4SAndroid Build Coastguard Worker 62*f80ad8b4SAndroid Build Coastguard Worker /** 63*f80ad8b4SAndroid Build Coastguard Worker * struct acrn_pci_request - Info of a PCI I/O request 64*f80ad8b4SAndroid Build Coastguard Worker * @direction: Access direction of this request (ACRN_IOREQ_DIR_*) 65*f80ad8b4SAndroid Build Coastguard Worker * @reserved: Reserved for alignment and should be 0 66*f80ad8b4SAndroid Build Coastguard Worker * @size: Access size of this PCI I/O request 67*f80ad8b4SAndroid Build Coastguard Worker * @value: Read/write value of this PIO I/O request 68*f80ad8b4SAndroid Build Coastguard Worker * @bus: PCI bus value of this PCI I/O request 69*f80ad8b4SAndroid Build Coastguard Worker * @dev: PCI device value of this PCI I/O request 70*f80ad8b4SAndroid Build Coastguard Worker * @func: PCI function value of this PCI I/O request 71*f80ad8b4SAndroid Build Coastguard Worker * @reg: PCI config space offset of this PCI I/O request 72*f80ad8b4SAndroid Build Coastguard Worker * 73*f80ad8b4SAndroid Build Coastguard Worker * Need keep same header layout with &struct acrn_pio_request. 74*f80ad8b4SAndroid Build Coastguard Worker */ 75*f80ad8b4SAndroid Build Coastguard Worker struct acrn_pci_request { 76*f80ad8b4SAndroid Build Coastguard Worker __u32 direction; 77*f80ad8b4SAndroid Build Coastguard Worker __u32 reserved[3]; 78*f80ad8b4SAndroid Build Coastguard Worker __u64 size; 79*f80ad8b4SAndroid Build Coastguard Worker __u32 value; 80*f80ad8b4SAndroid Build Coastguard Worker __u32 bus; 81*f80ad8b4SAndroid Build Coastguard Worker __u32 dev; 82*f80ad8b4SAndroid Build Coastguard Worker __u32 func; 83*f80ad8b4SAndroid Build Coastguard Worker __u32 reg; 84*f80ad8b4SAndroid Build Coastguard Worker }; 85*f80ad8b4SAndroid Build Coastguard Worker 86*f80ad8b4SAndroid Build Coastguard Worker /** 87*f80ad8b4SAndroid Build Coastguard Worker * struct acrn_io_request - 256-byte ACRN I/O request 88*f80ad8b4SAndroid Build Coastguard Worker * @type: Type of this request (ACRN_IOREQ_TYPE_*). 89*f80ad8b4SAndroid Build Coastguard Worker * @completion_polling: Polling flag. Hypervisor will poll completion of the 90*f80ad8b4SAndroid Build Coastguard Worker * I/O request if this flag set. 91*f80ad8b4SAndroid Build Coastguard Worker * @reserved0: Reserved fields. 92*f80ad8b4SAndroid Build Coastguard Worker * @reqs: Union of different types of request. Byte offset: 64. 93*f80ad8b4SAndroid Build Coastguard Worker * @reqs.pio_request: PIO request data of the I/O request. 94*f80ad8b4SAndroid Build Coastguard Worker * @reqs.pci_request: PCI configuration space request data of the I/O request. 95*f80ad8b4SAndroid Build Coastguard Worker * @reqs.mmio_request: MMIO request data of the I/O request. 96*f80ad8b4SAndroid Build Coastguard Worker * @reqs.data: Raw data of the I/O request. 97*f80ad8b4SAndroid Build Coastguard Worker * @reserved1: Reserved fields. 98*f80ad8b4SAndroid Build Coastguard Worker * @kernel_handled: Flag indicates this request need be handled in kernel. 99*f80ad8b4SAndroid Build Coastguard Worker * @processed: The status of this request (ACRN_IOREQ_STATE_*). 100*f80ad8b4SAndroid Build Coastguard Worker * 101*f80ad8b4SAndroid Build Coastguard Worker * The state transitions of ACRN I/O request: 102*f80ad8b4SAndroid Build Coastguard Worker * 103*f80ad8b4SAndroid Build Coastguard Worker * FREE -> PENDING -> PROCESSING -> COMPLETE -> FREE -> ... 104*f80ad8b4SAndroid Build Coastguard Worker * 105*f80ad8b4SAndroid Build Coastguard Worker * An I/O request in COMPLETE or FREE state is owned by the hypervisor. HSM and 106*f80ad8b4SAndroid Build Coastguard Worker * ACRN userspace are in charge of processing the others. 107*f80ad8b4SAndroid Build Coastguard Worker * 108*f80ad8b4SAndroid Build Coastguard Worker * On basis of the states illustrated above, a typical lifecycle of ACRN IO 109*f80ad8b4SAndroid Build Coastguard Worker * request would look like: 110*f80ad8b4SAndroid Build Coastguard Worker * 111*f80ad8b4SAndroid Build Coastguard Worker * Flow (assume the initial state is FREE) 112*f80ad8b4SAndroid Build Coastguard Worker * | 113*f80ad8b4SAndroid Build Coastguard Worker * | Service VM vCPU 0 Service VM vCPU x User vCPU y 114*f80ad8b4SAndroid Build Coastguard Worker * | 115*f80ad8b4SAndroid Build Coastguard Worker * | hypervisor: 116*f80ad8b4SAndroid Build Coastguard Worker * | fills in type, addr, etc. 117*f80ad8b4SAndroid Build Coastguard Worker * | pauses the User VM vCPU y 118*f80ad8b4SAndroid Build Coastguard Worker * | sets the state to PENDING (a) 119*f80ad8b4SAndroid Build Coastguard Worker * | fires an upcall to Service VM 120*f80ad8b4SAndroid Build Coastguard Worker * | 121*f80ad8b4SAndroid Build Coastguard Worker * | HSM: 122*f80ad8b4SAndroid Build Coastguard Worker * | scans for PENDING requests 123*f80ad8b4SAndroid Build Coastguard Worker * | sets the states to PROCESSING (b) 124*f80ad8b4SAndroid Build Coastguard Worker * | assigns the requests to clients (c) 125*f80ad8b4SAndroid Build Coastguard Worker * V 126*f80ad8b4SAndroid Build Coastguard Worker * | client: 127*f80ad8b4SAndroid Build Coastguard Worker * | scans for the assigned requests 128*f80ad8b4SAndroid Build Coastguard Worker * | handles the requests (d) 129*f80ad8b4SAndroid Build Coastguard Worker * | HSM: 130*f80ad8b4SAndroid Build Coastguard Worker * | sets states to COMPLETE 131*f80ad8b4SAndroid Build Coastguard Worker * | notifies the hypervisor 132*f80ad8b4SAndroid Build Coastguard Worker * | 133*f80ad8b4SAndroid Build Coastguard Worker * | hypervisor: 134*f80ad8b4SAndroid Build Coastguard Worker * | resumes User VM vCPU y (e) 135*f80ad8b4SAndroid Build Coastguard Worker * | 136*f80ad8b4SAndroid Build Coastguard Worker * | hypervisor: 137*f80ad8b4SAndroid Build Coastguard Worker * | post handling (f) 138*f80ad8b4SAndroid Build Coastguard Worker * V sets states to FREE 139*f80ad8b4SAndroid Build Coastguard Worker * 140*f80ad8b4SAndroid Build Coastguard Worker * Note that the procedures (a) to (f) in the illustration above require to be 141*f80ad8b4SAndroid Build Coastguard Worker * strictly processed in the order. One vCPU cannot trigger another request of 142*f80ad8b4SAndroid Build Coastguard Worker * I/O emulation before completing the previous one. 143*f80ad8b4SAndroid Build Coastguard Worker * 144*f80ad8b4SAndroid Build Coastguard Worker * Atomic and barriers are required when HSM and hypervisor accessing the state 145*f80ad8b4SAndroid Build Coastguard Worker * of &struct acrn_io_request. 146*f80ad8b4SAndroid Build Coastguard Worker * 147*f80ad8b4SAndroid Build Coastguard Worker */ 148*f80ad8b4SAndroid Build Coastguard Worker struct acrn_io_request { 149*f80ad8b4SAndroid Build Coastguard Worker __u32 type; 150*f80ad8b4SAndroid Build Coastguard Worker __u32 completion_polling; 151*f80ad8b4SAndroid Build Coastguard Worker __u32 reserved0[14]; 152*f80ad8b4SAndroid Build Coastguard Worker union { 153*f80ad8b4SAndroid Build Coastguard Worker struct acrn_pio_request pio_request; 154*f80ad8b4SAndroid Build Coastguard Worker struct acrn_pci_request pci_request; 155*f80ad8b4SAndroid Build Coastguard Worker struct acrn_mmio_request mmio_request; 156*f80ad8b4SAndroid Build Coastguard Worker __u64 data[8]; 157*f80ad8b4SAndroid Build Coastguard Worker } reqs; 158*f80ad8b4SAndroid Build Coastguard Worker __u32 reserved1; 159*f80ad8b4SAndroid Build Coastguard Worker __u32 kernel_handled; 160*f80ad8b4SAndroid Build Coastguard Worker __u32 processed; 161*f80ad8b4SAndroid Build Coastguard Worker } __attribute__((aligned(256))); 162*f80ad8b4SAndroid Build Coastguard Worker 163*f80ad8b4SAndroid Build Coastguard Worker struct acrn_io_request_buffer { 164*f80ad8b4SAndroid Build Coastguard Worker union { 165*f80ad8b4SAndroid Build Coastguard Worker struct acrn_io_request req_slot[ACRN_IO_REQUEST_MAX]; 166*f80ad8b4SAndroid Build Coastguard Worker __u8 reserved[4096]; 167*f80ad8b4SAndroid Build Coastguard Worker }; 168*f80ad8b4SAndroid Build Coastguard Worker }; 169*f80ad8b4SAndroid Build Coastguard Worker 170*f80ad8b4SAndroid Build Coastguard Worker /** 171*f80ad8b4SAndroid Build Coastguard Worker * struct acrn_ioreq_notify - The structure of ioreq completion notification 172*f80ad8b4SAndroid Build Coastguard Worker * @vmid: User VM ID 173*f80ad8b4SAndroid Build Coastguard Worker * @reserved: Reserved and should be 0 174*f80ad8b4SAndroid Build Coastguard Worker * @vcpu: vCPU ID 175*f80ad8b4SAndroid Build Coastguard Worker */ 176*f80ad8b4SAndroid Build Coastguard Worker struct acrn_ioreq_notify { 177*f80ad8b4SAndroid Build Coastguard Worker __u16 vmid; 178*f80ad8b4SAndroid Build Coastguard Worker __u16 reserved; 179*f80ad8b4SAndroid Build Coastguard Worker __u32 vcpu; 180*f80ad8b4SAndroid Build Coastguard Worker }; 181*f80ad8b4SAndroid Build Coastguard Worker 182*f80ad8b4SAndroid Build Coastguard Worker /** 183*f80ad8b4SAndroid Build Coastguard Worker * struct acrn_vm_creation - Info to create a User VM 184*f80ad8b4SAndroid Build Coastguard Worker * @vmid: User VM ID returned from the hypervisor 185*f80ad8b4SAndroid Build Coastguard Worker * @reserved0: Reserved and must be 0 186*f80ad8b4SAndroid Build Coastguard Worker * @vcpu_num: Number of vCPU in the VM. Return from hypervisor. 187*f80ad8b4SAndroid Build Coastguard Worker * @reserved1: Reserved and must be 0 188*f80ad8b4SAndroid Build Coastguard Worker * @uuid: Empty space never to be used again (used to be UUID of the VM) 189*f80ad8b4SAndroid Build Coastguard Worker * @vm_flag: Flag of the VM creating. Pass to hypervisor directly. 190*f80ad8b4SAndroid Build Coastguard Worker * @ioreq_buf: Service VM GPA of I/O request buffer. Pass to 191*f80ad8b4SAndroid Build Coastguard Worker * hypervisor directly. 192*f80ad8b4SAndroid Build Coastguard Worker * @cpu_affinity: CPU affinity of the VM. Pass to hypervisor directly. 193*f80ad8b4SAndroid Build Coastguard Worker * It's a bitmap which indicates CPUs used by the VM. 194*f80ad8b4SAndroid Build Coastguard Worker */ 195*f80ad8b4SAndroid Build Coastguard Worker struct acrn_vm_creation { 196*f80ad8b4SAndroid Build Coastguard Worker __u16 vmid; 197*f80ad8b4SAndroid Build Coastguard Worker __u16 reserved0; 198*f80ad8b4SAndroid Build Coastguard Worker __u16 vcpu_num; 199*f80ad8b4SAndroid Build Coastguard Worker __u16 reserved1; 200*f80ad8b4SAndroid Build Coastguard Worker __u8 uuid[16]; 201*f80ad8b4SAndroid Build Coastguard Worker __u64 vm_flag; 202*f80ad8b4SAndroid Build Coastguard Worker __u64 ioreq_buf; 203*f80ad8b4SAndroid Build Coastguard Worker __u64 cpu_affinity; 204*f80ad8b4SAndroid Build Coastguard Worker }; 205*f80ad8b4SAndroid Build Coastguard Worker 206*f80ad8b4SAndroid Build Coastguard Worker /** 207*f80ad8b4SAndroid Build Coastguard Worker * struct acrn_gp_regs - General registers of a User VM 208*f80ad8b4SAndroid Build Coastguard Worker * @rax: Value of register RAX 209*f80ad8b4SAndroid Build Coastguard Worker * @rcx: Value of register RCX 210*f80ad8b4SAndroid Build Coastguard Worker * @rdx: Value of register RDX 211*f80ad8b4SAndroid Build Coastguard Worker * @rbx: Value of register RBX 212*f80ad8b4SAndroid Build Coastguard Worker * @rsp: Value of register RSP 213*f80ad8b4SAndroid Build Coastguard Worker * @rbp: Value of register RBP 214*f80ad8b4SAndroid Build Coastguard Worker * @rsi: Value of register RSI 215*f80ad8b4SAndroid Build Coastguard Worker * @rdi: Value of register RDI 216*f80ad8b4SAndroid Build Coastguard Worker * @r8: Value of register R8 217*f80ad8b4SAndroid Build Coastguard Worker * @r9: Value of register R9 218*f80ad8b4SAndroid Build Coastguard Worker * @r10: Value of register R10 219*f80ad8b4SAndroid Build Coastguard Worker * @r11: Value of register R11 220*f80ad8b4SAndroid Build Coastguard Worker * @r12: Value of register R12 221*f80ad8b4SAndroid Build Coastguard Worker * @r13: Value of register R13 222*f80ad8b4SAndroid Build Coastguard Worker * @r14: Value of register R14 223*f80ad8b4SAndroid Build Coastguard Worker * @r15: Value of register R15 224*f80ad8b4SAndroid Build Coastguard Worker */ 225*f80ad8b4SAndroid Build Coastguard Worker struct acrn_gp_regs { 226*f80ad8b4SAndroid Build Coastguard Worker __le64 rax; 227*f80ad8b4SAndroid Build Coastguard Worker __le64 rcx; 228*f80ad8b4SAndroid Build Coastguard Worker __le64 rdx; 229*f80ad8b4SAndroid Build Coastguard Worker __le64 rbx; 230*f80ad8b4SAndroid Build Coastguard Worker __le64 rsp; 231*f80ad8b4SAndroid Build Coastguard Worker __le64 rbp; 232*f80ad8b4SAndroid Build Coastguard Worker __le64 rsi; 233*f80ad8b4SAndroid Build Coastguard Worker __le64 rdi; 234*f80ad8b4SAndroid Build Coastguard Worker __le64 r8; 235*f80ad8b4SAndroid Build Coastguard Worker __le64 r9; 236*f80ad8b4SAndroid Build Coastguard Worker __le64 r10; 237*f80ad8b4SAndroid Build Coastguard Worker __le64 r11; 238*f80ad8b4SAndroid Build Coastguard Worker __le64 r12; 239*f80ad8b4SAndroid Build Coastguard Worker __le64 r13; 240*f80ad8b4SAndroid Build Coastguard Worker __le64 r14; 241*f80ad8b4SAndroid Build Coastguard Worker __le64 r15; 242*f80ad8b4SAndroid Build Coastguard Worker }; 243*f80ad8b4SAndroid Build Coastguard Worker 244*f80ad8b4SAndroid Build Coastguard Worker /** 245*f80ad8b4SAndroid Build Coastguard Worker * struct acrn_descriptor_ptr - Segment descriptor table of a User VM. 246*f80ad8b4SAndroid Build Coastguard Worker * @limit: Limit field. 247*f80ad8b4SAndroid Build Coastguard Worker * @base: Base field. 248*f80ad8b4SAndroid Build Coastguard Worker * @reserved: Reserved and must be 0. 249*f80ad8b4SAndroid Build Coastguard Worker */ 250*f80ad8b4SAndroid Build Coastguard Worker struct acrn_descriptor_ptr { 251*f80ad8b4SAndroid Build Coastguard Worker __le16 limit; 252*f80ad8b4SAndroid Build Coastguard Worker __le64 base; 253*f80ad8b4SAndroid Build Coastguard Worker __le16 reserved[3]; 254*f80ad8b4SAndroid Build Coastguard Worker } __attribute__ ((__packed__)); 255*f80ad8b4SAndroid Build Coastguard Worker 256*f80ad8b4SAndroid Build Coastguard Worker /** 257*f80ad8b4SAndroid Build Coastguard Worker * struct acrn_regs - Registers structure of a User VM 258*f80ad8b4SAndroid Build Coastguard Worker * @gprs: General registers 259*f80ad8b4SAndroid Build Coastguard Worker * @gdt: Global Descriptor Table 260*f80ad8b4SAndroid Build Coastguard Worker * @idt: Interrupt Descriptor Table 261*f80ad8b4SAndroid Build Coastguard Worker * @rip: Value of register RIP 262*f80ad8b4SAndroid Build Coastguard Worker * @cs_base: Base of code segment selector 263*f80ad8b4SAndroid Build Coastguard Worker * @cr0: Value of register CR0 264*f80ad8b4SAndroid Build Coastguard Worker * @cr4: Value of register CR4 265*f80ad8b4SAndroid Build Coastguard Worker * @cr3: Value of register CR3 266*f80ad8b4SAndroid Build Coastguard Worker * @ia32_efer: Value of IA32_EFER MSR 267*f80ad8b4SAndroid Build Coastguard Worker * @rflags: Value of regsiter RFLAGS 268*f80ad8b4SAndroid Build Coastguard Worker * @reserved_64: Reserved and must be 0 269*f80ad8b4SAndroid Build Coastguard Worker * @cs_ar: Attribute field of code segment selector 270*f80ad8b4SAndroid Build Coastguard Worker * @cs_limit: Limit field of code segment selector 271*f80ad8b4SAndroid Build Coastguard Worker * @reserved_32: Reserved and must be 0 272*f80ad8b4SAndroid Build Coastguard Worker * @cs_sel: Value of code segment selector 273*f80ad8b4SAndroid Build Coastguard Worker * @ss_sel: Value of stack segment selector 274*f80ad8b4SAndroid Build Coastguard Worker * @ds_sel: Value of data segment selector 275*f80ad8b4SAndroid Build Coastguard Worker * @es_sel: Value of extra segment selector 276*f80ad8b4SAndroid Build Coastguard Worker * @fs_sel: Value of FS selector 277*f80ad8b4SAndroid Build Coastguard Worker * @gs_sel: Value of GS selector 278*f80ad8b4SAndroid Build Coastguard Worker * @ldt_sel: Value of LDT descriptor selector 279*f80ad8b4SAndroid Build Coastguard Worker * @tr_sel: Value of TSS descriptor selector 280*f80ad8b4SAndroid Build Coastguard Worker */ 281*f80ad8b4SAndroid Build Coastguard Worker struct acrn_regs { 282*f80ad8b4SAndroid Build Coastguard Worker struct acrn_gp_regs gprs; 283*f80ad8b4SAndroid Build Coastguard Worker struct acrn_descriptor_ptr gdt; 284*f80ad8b4SAndroid Build Coastguard Worker struct acrn_descriptor_ptr idt; 285*f80ad8b4SAndroid Build Coastguard Worker 286*f80ad8b4SAndroid Build Coastguard Worker __le64 rip; 287*f80ad8b4SAndroid Build Coastguard Worker __le64 cs_base; 288*f80ad8b4SAndroid Build Coastguard Worker __le64 cr0; 289*f80ad8b4SAndroid Build Coastguard Worker __le64 cr4; 290*f80ad8b4SAndroid Build Coastguard Worker __le64 cr3; 291*f80ad8b4SAndroid Build Coastguard Worker __le64 ia32_efer; 292*f80ad8b4SAndroid Build Coastguard Worker __le64 rflags; 293*f80ad8b4SAndroid Build Coastguard Worker __le64 reserved_64[4]; 294*f80ad8b4SAndroid Build Coastguard Worker 295*f80ad8b4SAndroid Build Coastguard Worker __le32 cs_ar; 296*f80ad8b4SAndroid Build Coastguard Worker __le32 cs_limit; 297*f80ad8b4SAndroid Build Coastguard Worker __le32 reserved_32[3]; 298*f80ad8b4SAndroid Build Coastguard Worker 299*f80ad8b4SAndroid Build Coastguard Worker __le16 cs_sel; 300*f80ad8b4SAndroid Build Coastguard Worker __le16 ss_sel; 301*f80ad8b4SAndroid Build Coastguard Worker __le16 ds_sel; 302*f80ad8b4SAndroid Build Coastguard Worker __le16 es_sel; 303*f80ad8b4SAndroid Build Coastguard Worker __le16 fs_sel; 304*f80ad8b4SAndroid Build Coastguard Worker __le16 gs_sel; 305*f80ad8b4SAndroid Build Coastguard Worker __le16 ldt_sel; 306*f80ad8b4SAndroid Build Coastguard Worker __le16 tr_sel; 307*f80ad8b4SAndroid Build Coastguard Worker }; 308*f80ad8b4SAndroid Build Coastguard Worker 309*f80ad8b4SAndroid Build Coastguard Worker /** 310*f80ad8b4SAndroid Build Coastguard Worker * struct acrn_vcpu_regs - Info of vCPU registers state 311*f80ad8b4SAndroid Build Coastguard Worker * @vcpu_id: vCPU ID 312*f80ad8b4SAndroid Build Coastguard Worker * @reserved: Reserved and must be 0 313*f80ad8b4SAndroid Build Coastguard Worker * @vcpu_regs: vCPU registers state 314*f80ad8b4SAndroid Build Coastguard Worker * 315*f80ad8b4SAndroid Build Coastguard Worker * This structure will be passed to hypervisor directly. 316*f80ad8b4SAndroid Build Coastguard Worker */ 317*f80ad8b4SAndroid Build Coastguard Worker struct acrn_vcpu_regs { 318*f80ad8b4SAndroid Build Coastguard Worker __u16 vcpu_id; 319*f80ad8b4SAndroid Build Coastguard Worker __u16 reserved[3]; 320*f80ad8b4SAndroid Build Coastguard Worker struct acrn_regs vcpu_regs; 321*f80ad8b4SAndroid Build Coastguard Worker }; 322*f80ad8b4SAndroid Build Coastguard Worker 323*f80ad8b4SAndroid Build Coastguard Worker #define ACRN_MEM_ACCESS_RIGHT_MASK 0x00000007U 324*f80ad8b4SAndroid Build Coastguard Worker #define ACRN_MEM_ACCESS_READ 0x00000001U 325*f80ad8b4SAndroid Build Coastguard Worker #define ACRN_MEM_ACCESS_WRITE 0x00000002U 326*f80ad8b4SAndroid Build Coastguard Worker #define ACRN_MEM_ACCESS_EXEC 0x00000004U 327*f80ad8b4SAndroid Build Coastguard Worker #define ACRN_MEM_ACCESS_RWX (ACRN_MEM_ACCESS_READ | \ 328*f80ad8b4SAndroid Build Coastguard Worker ACRN_MEM_ACCESS_WRITE | \ 329*f80ad8b4SAndroid Build Coastguard Worker ACRN_MEM_ACCESS_EXEC) 330*f80ad8b4SAndroid Build Coastguard Worker 331*f80ad8b4SAndroid Build Coastguard Worker #define ACRN_MEM_TYPE_MASK 0x000007C0U 332*f80ad8b4SAndroid Build Coastguard Worker #define ACRN_MEM_TYPE_WB 0x00000040U 333*f80ad8b4SAndroid Build Coastguard Worker #define ACRN_MEM_TYPE_WT 0x00000080U 334*f80ad8b4SAndroid Build Coastguard Worker #define ACRN_MEM_TYPE_UC 0x00000100U 335*f80ad8b4SAndroid Build Coastguard Worker #define ACRN_MEM_TYPE_WC 0x00000200U 336*f80ad8b4SAndroid Build Coastguard Worker #define ACRN_MEM_TYPE_WP 0x00000400U 337*f80ad8b4SAndroid Build Coastguard Worker 338*f80ad8b4SAndroid Build Coastguard Worker /* Memory mapping types */ 339*f80ad8b4SAndroid Build Coastguard Worker #define ACRN_MEMMAP_RAM 0 340*f80ad8b4SAndroid Build Coastguard Worker #define ACRN_MEMMAP_MMIO 1 341*f80ad8b4SAndroid Build Coastguard Worker 342*f80ad8b4SAndroid Build Coastguard Worker /** 343*f80ad8b4SAndroid Build Coastguard Worker * struct acrn_vm_memmap - A EPT memory mapping info for a User VM. 344*f80ad8b4SAndroid Build Coastguard Worker * @type: Type of the memory mapping (ACRM_MEMMAP_*). 345*f80ad8b4SAndroid Build Coastguard Worker * Pass to hypervisor directly. 346*f80ad8b4SAndroid Build Coastguard Worker * @attr: Attribute of the memory mapping. 347*f80ad8b4SAndroid Build Coastguard Worker * Pass to hypervisor directly. 348*f80ad8b4SAndroid Build Coastguard Worker * @user_vm_pa: Physical address of User VM. 349*f80ad8b4SAndroid Build Coastguard Worker * Pass to hypervisor directly. 350*f80ad8b4SAndroid Build Coastguard Worker * @service_vm_pa: Physical address of Service VM. 351*f80ad8b4SAndroid Build Coastguard Worker * Pass to hypervisor directly. 352*f80ad8b4SAndroid Build Coastguard Worker * @vma_base: VMA address of Service VM. Pass to hypervisor directly. 353*f80ad8b4SAndroid Build Coastguard Worker * @len: Length of the memory mapping. 354*f80ad8b4SAndroid Build Coastguard Worker * Pass to hypervisor directly. 355*f80ad8b4SAndroid Build Coastguard Worker */ 356*f80ad8b4SAndroid Build Coastguard Worker struct acrn_vm_memmap { 357*f80ad8b4SAndroid Build Coastguard Worker __u32 type; 358*f80ad8b4SAndroid Build Coastguard Worker __u32 attr; 359*f80ad8b4SAndroid Build Coastguard Worker __u64 user_vm_pa; 360*f80ad8b4SAndroid Build Coastguard Worker union { 361*f80ad8b4SAndroid Build Coastguard Worker __u64 service_vm_pa; 362*f80ad8b4SAndroid Build Coastguard Worker __u64 vma_base; 363*f80ad8b4SAndroid Build Coastguard Worker }; 364*f80ad8b4SAndroid Build Coastguard Worker __u64 len; 365*f80ad8b4SAndroid Build Coastguard Worker }; 366*f80ad8b4SAndroid Build Coastguard Worker 367*f80ad8b4SAndroid Build Coastguard Worker /* Type of interrupt of a passthrough device */ 368*f80ad8b4SAndroid Build Coastguard Worker #define ACRN_PTDEV_IRQ_INTX 0 369*f80ad8b4SAndroid Build Coastguard Worker #define ACRN_PTDEV_IRQ_MSI 1 370*f80ad8b4SAndroid Build Coastguard Worker #define ACRN_PTDEV_IRQ_MSIX 2 371*f80ad8b4SAndroid Build Coastguard Worker /** 372*f80ad8b4SAndroid Build Coastguard Worker * struct acrn_ptdev_irq - Interrupt data of a passthrough device. 373*f80ad8b4SAndroid Build Coastguard Worker * @type: Type (ACRN_PTDEV_IRQ_*) 374*f80ad8b4SAndroid Build Coastguard Worker * @virt_bdf: Virtual Bus/Device/Function 375*f80ad8b4SAndroid Build Coastguard Worker * @phys_bdf: Physical Bus/Device/Function 376*f80ad8b4SAndroid Build Coastguard Worker * @intx: Info of interrupt 377*f80ad8b4SAndroid Build Coastguard Worker * @intx.virt_pin: Virtual IOAPIC pin 378*f80ad8b4SAndroid Build Coastguard Worker * @intx.phys_pin: Physical IOAPIC pin 379*f80ad8b4SAndroid Build Coastguard Worker * @intx.is_pic_pin: Is PIC pin or not 380*f80ad8b4SAndroid Build Coastguard Worker * 381*f80ad8b4SAndroid Build Coastguard Worker * This structure will be passed to hypervisor directly. 382*f80ad8b4SAndroid Build Coastguard Worker */ 383*f80ad8b4SAndroid Build Coastguard Worker struct acrn_ptdev_irq { 384*f80ad8b4SAndroid Build Coastguard Worker __u32 type; 385*f80ad8b4SAndroid Build Coastguard Worker __u16 virt_bdf; 386*f80ad8b4SAndroid Build Coastguard Worker __u16 phys_bdf; 387*f80ad8b4SAndroid Build Coastguard Worker 388*f80ad8b4SAndroid Build Coastguard Worker struct { 389*f80ad8b4SAndroid Build Coastguard Worker __u32 virt_pin; 390*f80ad8b4SAndroid Build Coastguard Worker __u32 phys_pin; 391*f80ad8b4SAndroid Build Coastguard Worker __u32 is_pic_pin; 392*f80ad8b4SAndroid Build Coastguard Worker } intx; 393*f80ad8b4SAndroid Build Coastguard Worker }; 394*f80ad8b4SAndroid Build Coastguard Worker 395*f80ad8b4SAndroid Build Coastguard Worker /* Type of PCI device assignment */ 396*f80ad8b4SAndroid Build Coastguard Worker #define ACRN_PTDEV_QUIRK_ASSIGN (1U << 0) 397*f80ad8b4SAndroid Build Coastguard Worker 398*f80ad8b4SAndroid Build Coastguard Worker #define ACRN_MMIODEV_RES_NUM 3 399*f80ad8b4SAndroid Build Coastguard Worker #define ACRN_PCI_NUM_BARS 6 400*f80ad8b4SAndroid Build Coastguard Worker /** 401*f80ad8b4SAndroid Build Coastguard Worker * struct acrn_pcidev - Info for assigning or de-assigning a PCI device 402*f80ad8b4SAndroid Build Coastguard Worker * @type: Type of the assignment 403*f80ad8b4SAndroid Build Coastguard Worker * @virt_bdf: Virtual Bus/Device/Function 404*f80ad8b4SAndroid Build Coastguard Worker * @phys_bdf: Physical Bus/Device/Function 405*f80ad8b4SAndroid Build Coastguard Worker * @intr_line: PCI interrupt line 406*f80ad8b4SAndroid Build Coastguard Worker * @intr_pin: PCI interrupt pin 407*f80ad8b4SAndroid Build Coastguard Worker * @bar: PCI BARs. 408*f80ad8b4SAndroid Build Coastguard Worker * 409*f80ad8b4SAndroid Build Coastguard Worker * This structure will be passed to hypervisor directly. 410*f80ad8b4SAndroid Build Coastguard Worker */ 411*f80ad8b4SAndroid Build Coastguard Worker struct acrn_pcidev { 412*f80ad8b4SAndroid Build Coastguard Worker __u32 type; 413*f80ad8b4SAndroid Build Coastguard Worker __u16 virt_bdf; 414*f80ad8b4SAndroid Build Coastguard Worker __u16 phys_bdf; 415*f80ad8b4SAndroid Build Coastguard Worker __u8 intr_line; 416*f80ad8b4SAndroid Build Coastguard Worker __u8 intr_pin; 417*f80ad8b4SAndroid Build Coastguard Worker __u32 bar[ACRN_PCI_NUM_BARS]; 418*f80ad8b4SAndroid Build Coastguard Worker }; 419*f80ad8b4SAndroid Build Coastguard Worker 420*f80ad8b4SAndroid Build Coastguard Worker /** 421*f80ad8b4SAndroid Build Coastguard Worker * struct acrn_mmiodev - Info for assigning or de-assigning a MMIO device 422*f80ad8b4SAndroid Build Coastguard Worker * @name: Name of the MMIO device. 423*f80ad8b4SAndroid Build Coastguard Worker * @res[].user_vm_pa: Physical address of User VM of the MMIO region 424*f80ad8b4SAndroid Build Coastguard Worker * for the MMIO device. 425*f80ad8b4SAndroid Build Coastguard Worker * @res[].service_vm_pa: Physical address of Service VM of the MMIO 426*f80ad8b4SAndroid Build Coastguard Worker * region for the MMIO device. 427*f80ad8b4SAndroid Build Coastguard Worker * @res[].size: Size of the MMIO region for the MMIO device. 428*f80ad8b4SAndroid Build Coastguard Worker * @res[].mem_type: Memory type of the MMIO region for the MMIO 429*f80ad8b4SAndroid Build Coastguard Worker * device. 430*f80ad8b4SAndroid Build Coastguard Worker * 431*f80ad8b4SAndroid Build Coastguard Worker * This structure will be passed to hypervisor directly. 432*f80ad8b4SAndroid Build Coastguard Worker */ 433*f80ad8b4SAndroid Build Coastguard Worker struct acrn_mmiodev { 434*f80ad8b4SAndroid Build Coastguard Worker __u8 name[8]; 435*f80ad8b4SAndroid Build Coastguard Worker struct { 436*f80ad8b4SAndroid Build Coastguard Worker __u64 user_vm_pa; 437*f80ad8b4SAndroid Build Coastguard Worker __u64 service_vm_pa; 438*f80ad8b4SAndroid Build Coastguard Worker __u64 size; 439*f80ad8b4SAndroid Build Coastguard Worker __u64 mem_type; 440*f80ad8b4SAndroid Build Coastguard Worker } res[ACRN_MMIODEV_RES_NUM]; 441*f80ad8b4SAndroid Build Coastguard Worker }; 442*f80ad8b4SAndroid Build Coastguard Worker 443*f80ad8b4SAndroid Build Coastguard Worker /** 444*f80ad8b4SAndroid Build Coastguard Worker * struct acrn_vdev - Info for creating or destroying a virtual device 445*f80ad8b4SAndroid Build Coastguard Worker * @id: Union of identifier of the virtual device 446*f80ad8b4SAndroid Build Coastguard Worker * @id.value: Raw data of the identifier 447*f80ad8b4SAndroid Build Coastguard Worker * @id.fields.vendor: Vendor id of the virtual PCI device 448*f80ad8b4SAndroid Build Coastguard Worker * @id.fields.device: Device id of the virtual PCI device 449*f80ad8b4SAndroid Build Coastguard Worker * @id.fields.legacy_id: ID of the virtual device if not a PCI device 450*f80ad8b4SAndroid Build Coastguard Worker * @slot: Virtual Bus/Device/Function of the virtual 451*f80ad8b4SAndroid Build Coastguard Worker * device 452*f80ad8b4SAndroid Build Coastguard Worker * @io_base: IO resource base address of the virtual device 453*f80ad8b4SAndroid Build Coastguard Worker * @io_size: IO resource size of the virtual device 454*f80ad8b4SAndroid Build Coastguard Worker * @args: Arguments for the virtual device creation 455*f80ad8b4SAndroid Build Coastguard Worker * 456*f80ad8b4SAndroid Build Coastguard Worker * The created virtual device can be a PCI device or a legacy device (e.g. 457*f80ad8b4SAndroid Build Coastguard Worker * a virtual UART controller) and it is emulated by the hypervisor. This 458*f80ad8b4SAndroid Build Coastguard Worker * structure will be passed to hypervisor directly. 459*f80ad8b4SAndroid Build Coastguard Worker */ 460*f80ad8b4SAndroid Build Coastguard Worker struct acrn_vdev { 461*f80ad8b4SAndroid Build Coastguard Worker /* 462*f80ad8b4SAndroid Build Coastguard Worker * the identifier of the device, the low 32 bits represent the vendor 463*f80ad8b4SAndroid Build Coastguard Worker * id and device id of PCI device and the high 32 bits represent the 464*f80ad8b4SAndroid Build Coastguard Worker * device number of the legacy device 465*f80ad8b4SAndroid Build Coastguard Worker */ 466*f80ad8b4SAndroid Build Coastguard Worker union { 467*f80ad8b4SAndroid Build Coastguard Worker __u64 value; 468*f80ad8b4SAndroid Build Coastguard Worker struct { 469*f80ad8b4SAndroid Build Coastguard Worker __le16 vendor; 470*f80ad8b4SAndroid Build Coastguard Worker __le16 device; 471*f80ad8b4SAndroid Build Coastguard Worker __le32 legacy_id; 472*f80ad8b4SAndroid Build Coastguard Worker } fields; 473*f80ad8b4SAndroid Build Coastguard Worker } id; 474*f80ad8b4SAndroid Build Coastguard Worker 475*f80ad8b4SAndroid Build Coastguard Worker __u64 slot; 476*f80ad8b4SAndroid Build Coastguard Worker __u32 io_addr[ACRN_PCI_NUM_BARS]; 477*f80ad8b4SAndroid Build Coastguard Worker __u32 io_size[ACRN_PCI_NUM_BARS]; 478*f80ad8b4SAndroid Build Coastguard Worker __u8 args[128]; 479*f80ad8b4SAndroid Build Coastguard Worker }; 480*f80ad8b4SAndroid Build Coastguard Worker 481*f80ad8b4SAndroid Build Coastguard Worker /** 482*f80ad8b4SAndroid Build Coastguard Worker * struct acrn_msi_entry - Info for injecting a MSI interrupt to a VM 483*f80ad8b4SAndroid Build Coastguard Worker * @msi_addr: MSI addr[19:12] with dest vCPU ID 484*f80ad8b4SAndroid Build Coastguard Worker * @msi_data: MSI data[7:0] with vector 485*f80ad8b4SAndroid Build Coastguard Worker */ 486*f80ad8b4SAndroid Build Coastguard Worker struct acrn_msi_entry { 487*f80ad8b4SAndroid Build Coastguard Worker __u64 msi_addr; 488*f80ad8b4SAndroid Build Coastguard Worker __u64 msi_data; 489*f80ad8b4SAndroid Build Coastguard Worker }; 490*f80ad8b4SAndroid Build Coastguard Worker 491*f80ad8b4SAndroid Build Coastguard Worker struct acrn_acpi_generic_address { 492*f80ad8b4SAndroid Build Coastguard Worker __u8 space_id; 493*f80ad8b4SAndroid Build Coastguard Worker __u8 bit_width; 494*f80ad8b4SAndroid Build Coastguard Worker __u8 bit_offset; 495*f80ad8b4SAndroid Build Coastguard Worker __u8 access_size; 496*f80ad8b4SAndroid Build Coastguard Worker __u64 address; 497*f80ad8b4SAndroid Build Coastguard Worker } __attribute__ ((__packed__)); 498*f80ad8b4SAndroid Build Coastguard Worker 499*f80ad8b4SAndroid Build Coastguard Worker /** 500*f80ad8b4SAndroid Build Coastguard Worker * struct acrn_cstate_data - A C state package defined in ACPI 501*f80ad8b4SAndroid Build Coastguard Worker * @cx_reg: Register of the C state object 502*f80ad8b4SAndroid Build Coastguard Worker * @type: Type of the C state object 503*f80ad8b4SAndroid Build Coastguard Worker * @latency: The worst-case latency to enter and exit this C state 504*f80ad8b4SAndroid Build Coastguard Worker * @power: The average power consumption when in this C state 505*f80ad8b4SAndroid Build Coastguard Worker */ 506*f80ad8b4SAndroid Build Coastguard Worker struct acrn_cstate_data { 507*f80ad8b4SAndroid Build Coastguard Worker struct acrn_acpi_generic_address cx_reg; 508*f80ad8b4SAndroid Build Coastguard Worker __u8 type; 509*f80ad8b4SAndroid Build Coastguard Worker __u32 latency; 510*f80ad8b4SAndroid Build Coastguard Worker __u64 power; 511*f80ad8b4SAndroid Build Coastguard Worker }; 512*f80ad8b4SAndroid Build Coastguard Worker 513*f80ad8b4SAndroid Build Coastguard Worker /** 514*f80ad8b4SAndroid Build Coastguard Worker * struct acrn_pstate_data - A P state package defined in ACPI 515*f80ad8b4SAndroid Build Coastguard Worker * @core_frequency: CPU frequency (in MHz). 516*f80ad8b4SAndroid Build Coastguard Worker * @power: Power dissipation (in milliwatts). 517*f80ad8b4SAndroid Build Coastguard Worker * @transition_latency: The worst-case latency in microseconds that CPU is 518*f80ad8b4SAndroid Build Coastguard Worker * unavailable during a transition from any P state to 519*f80ad8b4SAndroid Build Coastguard Worker * this P state. 520*f80ad8b4SAndroid Build Coastguard Worker * @bus_master_latency: The worst-case latency in microseconds that Bus Masters 521*f80ad8b4SAndroid Build Coastguard Worker * are prevented from accessing memory during a transition 522*f80ad8b4SAndroid Build Coastguard Worker * from any P state to this P state. 523*f80ad8b4SAndroid Build Coastguard Worker * @control: The value to be written to Performance Control Register 524*f80ad8b4SAndroid Build Coastguard Worker * @status: Transition status. 525*f80ad8b4SAndroid Build Coastguard Worker */ 526*f80ad8b4SAndroid Build Coastguard Worker struct acrn_pstate_data { 527*f80ad8b4SAndroid Build Coastguard Worker __u64 core_frequency; 528*f80ad8b4SAndroid Build Coastguard Worker __u64 power; 529*f80ad8b4SAndroid Build Coastguard Worker __u64 transition_latency; 530*f80ad8b4SAndroid Build Coastguard Worker __u64 bus_master_latency; 531*f80ad8b4SAndroid Build Coastguard Worker __u64 control; 532*f80ad8b4SAndroid Build Coastguard Worker __u64 status; 533*f80ad8b4SAndroid Build Coastguard Worker }; 534*f80ad8b4SAndroid Build Coastguard Worker 535*f80ad8b4SAndroid Build Coastguard Worker #define PMCMD_TYPE_MASK 0x000000ff 536*f80ad8b4SAndroid Build Coastguard Worker enum acrn_pm_cmd_type { 537*f80ad8b4SAndroid Build Coastguard Worker ACRN_PMCMD_GET_PX_CNT, 538*f80ad8b4SAndroid Build Coastguard Worker ACRN_PMCMD_GET_PX_DATA, 539*f80ad8b4SAndroid Build Coastguard Worker ACRN_PMCMD_GET_CX_CNT, 540*f80ad8b4SAndroid Build Coastguard Worker ACRN_PMCMD_GET_CX_DATA, 541*f80ad8b4SAndroid Build Coastguard Worker }; 542*f80ad8b4SAndroid Build Coastguard Worker 543*f80ad8b4SAndroid Build Coastguard Worker #define ACRN_IOEVENTFD_FLAG_PIO 0x01 544*f80ad8b4SAndroid Build Coastguard Worker #define ACRN_IOEVENTFD_FLAG_DATAMATCH 0x02 545*f80ad8b4SAndroid Build Coastguard Worker #define ACRN_IOEVENTFD_FLAG_DEASSIGN 0x04 546*f80ad8b4SAndroid Build Coastguard Worker /** 547*f80ad8b4SAndroid Build Coastguard Worker * struct acrn_ioeventfd - Data to operate a &struct hsm_ioeventfd 548*f80ad8b4SAndroid Build Coastguard Worker * @fd: The fd of eventfd associated with a hsm_ioeventfd 549*f80ad8b4SAndroid Build Coastguard Worker * @flags: Logical-OR of ACRN_IOEVENTFD_FLAG_* 550*f80ad8b4SAndroid Build Coastguard Worker * @addr: The start address of IO range of ioeventfd 551*f80ad8b4SAndroid Build Coastguard Worker * @len: The length of IO range of ioeventfd 552*f80ad8b4SAndroid Build Coastguard Worker * @reserved: Reserved and should be 0 553*f80ad8b4SAndroid Build Coastguard Worker * @data: Data for data matching 554*f80ad8b4SAndroid Build Coastguard Worker * 555*f80ad8b4SAndroid Build Coastguard Worker * Without flag ACRN_IOEVENTFD_FLAG_DEASSIGN, ioctl ACRN_IOCTL_IOEVENTFD 556*f80ad8b4SAndroid Build Coastguard Worker * creates a &struct hsm_ioeventfd with properties originated from &struct 557*f80ad8b4SAndroid Build Coastguard Worker * acrn_ioeventfd. With flag ACRN_IOEVENTFD_FLAG_DEASSIGN, ioctl 558*f80ad8b4SAndroid Build Coastguard Worker * ACRN_IOCTL_IOEVENTFD destroys the &struct hsm_ioeventfd matching the fd. 559*f80ad8b4SAndroid Build Coastguard Worker */ 560*f80ad8b4SAndroid Build Coastguard Worker struct acrn_ioeventfd { 561*f80ad8b4SAndroid Build Coastguard Worker __u32 fd; 562*f80ad8b4SAndroid Build Coastguard Worker __u32 flags; 563*f80ad8b4SAndroid Build Coastguard Worker __u64 addr; 564*f80ad8b4SAndroid Build Coastguard Worker __u32 len; 565*f80ad8b4SAndroid Build Coastguard Worker __u32 reserved; 566*f80ad8b4SAndroid Build Coastguard Worker __u64 data; 567*f80ad8b4SAndroid Build Coastguard Worker }; 568*f80ad8b4SAndroid Build Coastguard Worker 569*f80ad8b4SAndroid Build Coastguard Worker #define ACRN_IRQFD_FLAG_DEASSIGN 0x01 570*f80ad8b4SAndroid Build Coastguard Worker /** 571*f80ad8b4SAndroid Build Coastguard Worker * struct acrn_irqfd - Data to operate a &struct hsm_irqfd 572*f80ad8b4SAndroid Build Coastguard Worker * @fd: The fd of eventfd associated with a hsm_irqfd 573*f80ad8b4SAndroid Build Coastguard Worker * @flags: Logical-OR of ACRN_IRQFD_FLAG_* 574*f80ad8b4SAndroid Build Coastguard Worker * @msi: Info of MSI associated with the irqfd 575*f80ad8b4SAndroid Build Coastguard Worker */ 576*f80ad8b4SAndroid Build Coastguard Worker struct acrn_irqfd { 577*f80ad8b4SAndroid Build Coastguard Worker __s32 fd; 578*f80ad8b4SAndroid Build Coastguard Worker __u32 flags; 579*f80ad8b4SAndroid Build Coastguard Worker struct acrn_msi_entry msi; 580*f80ad8b4SAndroid Build Coastguard Worker }; 581*f80ad8b4SAndroid Build Coastguard Worker 582*f80ad8b4SAndroid Build Coastguard Worker /* The ioctl type, documented in ioctl-number.rst */ 583*f80ad8b4SAndroid Build Coastguard Worker #define ACRN_IOCTL_TYPE 0xA2 584*f80ad8b4SAndroid Build Coastguard Worker 585*f80ad8b4SAndroid Build Coastguard Worker /* 586*f80ad8b4SAndroid Build Coastguard Worker * Common IOCTL IDs definition for ACRN userspace 587*f80ad8b4SAndroid Build Coastguard Worker */ 588*f80ad8b4SAndroid Build Coastguard Worker #define ACRN_IOCTL_CREATE_VM \ 589*f80ad8b4SAndroid Build Coastguard Worker _IOWR(ACRN_IOCTL_TYPE, 0x10, struct acrn_vm_creation) 590*f80ad8b4SAndroid Build Coastguard Worker #define ACRN_IOCTL_DESTROY_VM \ 591*f80ad8b4SAndroid Build Coastguard Worker _IO(ACRN_IOCTL_TYPE, 0x11) 592*f80ad8b4SAndroid Build Coastguard Worker #define ACRN_IOCTL_START_VM \ 593*f80ad8b4SAndroid Build Coastguard Worker _IO(ACRN_IOCTL_TYPE, 0x12) 594*f80ad8b4SAndroid Build Coastguard Worker #define ACRN_IOCTL_PAUSE_VM \ 595*f80ad8b4SAndroid Build Coastguard Worker _IO(ACRN_IOCTL_TYPE, 0x13) 596*f80ad8b4SAndroid Build Coastguard Worker #define ACRN_IOCTL_RESET_VM \ 597*f80ad8b4SAndroid Build Coastguard Worker _IO(ACRN_IOCTL_TYPE, 0x15) 598*f80ad8b4SAndroid Build Coastguard Worker #define ACRN_IOCTL_SET_VCPU_REGS \ 599*f80ad8b4SAndroid Build Coastguard Worker _IOW(ACRN_IOCTL_TYPE, 0x16, struct acrn_vcpu_regs) 600*f80ad8b4SAndroid Build Coastguard Worker 601*f80ad8b4SAndroid Build Coastguard Worker #define ACRN_IOCTL_INJECT_MSI \ 602*f80ad8b4SAndroid Build Coastguard Worker _IOW(ACRN_IOCTL_TYPE, 0x23, struct acrn_msi_entry) 603*f80ad8b4SAndroid Build Coastguard Worker #define ACRN_IOCTL_VM_INTR_MONITOR \ 604*f80ad8b4SAndroid Build Coastguard Worker _IOW(ACRN_IOCTL_TYPE, 0x24, unsigned long) 605*f80ad8b4SAndroid Build Coastguard Worker #define ACRN_IOCTL_SET_IRQLINE \ 606*f80ad8b4SAndroid Build Coastguard Worker _IOW(ACRN_IOCTL_TYPE, 0x25, __u64) 607*f80ad8b4SAndroid Build Coastguard Worker 608*f80ad8b4SAndroid Build Coastguard Worker #define ACRN_IOCTL_NOTIFY_REQUEST_FINISH \ 609*f80ad8b4SAndroid Build Coastguard Worker _IOW(ACRN_IOCTL_TYPE, 0x31, struct acrn_ioreq_notify) 610*f80ad8b4SAndroid Build Coastguard Worker #define ACRN_IOCTL_CREATE_IOREQ_CLIENT \ 611*f80ad8b4SAndroid Build Coastguard Worker _IO(ACRN_IOCTL_TYPE, 0x32) 612*f80ad8b4SAndroid Build Coastguard Worker #define ACRN_IOCTL_ATTACH_IOREQ_CLIENT \ 613*f80ad8b4SAndroid Build Coastguard Worker _IO(ACRN_IOCTL_TYPE, 0x33) 614*f80ad8b4SAndroid Build Coastguard Worker #define ACRN_IOCTL_DESTROY_IOREQ_CLIENT \ 615*f80ad8b4SAndroid Build Coastguard Worker _IO(ACRN_IOCTL_TYPE, 0x34) 616*f80ad8b4SAndroid Build Coastguard Worker #define ACRN_IOCTL_CLEAR_VM_IOREQ \ 617*f80ad8b4SAndroid Build Coastguard Worker _IO(ACRN_IOCTL_TYPE, 0x35) 618*f80ad8b4SAndroid Build Coastguard Worker 619*f80ad8b4SAndroid Build Coastguard Worker #define ACRN_IOCTL_SET_MEMSEG \ 620*f80ad8b4SAndroid Build Coastguard Worker _IOW(ACRN_IOCTL_TYPE, 0x41, struct acrn_vm_memmap) 621*f80ad8b4SAndroid Build Coastguard Worker #define ACRN_IOCTL_UNSET_MEMSEG \ 622*f80ad8b4SAndroid Build Coastguard Worker _IOW(ACRN_IOCTL_TYPE, 0x42, struct acrn_vm_memmap) 623*f80ad8b4SAndroid Build Coastguard Worker 624*f80ad8b4SAndroid Build Coastguard Worker #define ACRN_IOCTL_SET_PTDEV_INTR \ 625*f80ad8b4SAndroid Build Coastguard Worker _IOW(ACRN_IOCTL_TYPE, 0x53, struct acrn_ptdev_irq) 626*f80ad8b4SAndroid Build Coastguard Worker #define ACRN_IOCTL_RESET_PTDEV_INTR \ 627*f80ad8b4SAndroid Build Coastguard Worker _IOW(ACRN_IOCTL_TYPE, 0x54, struct acrn_ptdev_irq) 628*f80ad8b4SAndroid Build Coastguard Worker #define ACRN_IOCTL_ASSIGN_PCIDEV \ 629*f80ad8b4SAndroid Build Coastguard Worker _IOW(ACRN_IOCTL_TYPE, 0x55, struct acrn_pcidev) 630*f80ad8b4SAndroid Build Coastguard Worker #define ACRN_IOCTL_DEASSIGN_PCIDEV \ 631*f80ad8b4SAndroid Build Coastguard Worker _IOW(ACRN_IOCTL_TYPE, 0x56, struct acrn_pcidev) 632*f80ad8b4SAndroid Build Coastguard Worker #define ACRN_IOCTL_ASSIGN_MMIODEV \ 633*f80ad8b4SAndroid Build Coastguard Worker _IOW(ACRN_IOCTL_TYPE, 0x57, struct acrn_mmiodev) 634*f80ad8b4SAndroid Build Coastguard Worker #define ACRN_IOCTL_DEASSIGN_MMIODEV \ 635*f80ad8b4SAndroid Build Coastguard Worker _IOW(ACRN_IOCTL_TYPE, 0x58, struct acrn_mmiodev) 636*f80ad8b4SAndroid Build Coastguard Worker #define ACRN_IOCTL_CREATE_VDEV \ 637*f80ad8b4SAndroid Build Coastguard Worker _IOW(ACRN_IOCTL_TYPE, 0x59, struct acrn_vdev) 638*f80ad8b4SAndroid Build Coastguard Worker #define ACRN_IOCTL_DESTROY_VDEV \ 639*f80ad8b4SAndroid Build Coastguard Worker _IOW(ACRN_IOCTL_TYPE, 0x5A, struct acrn_vdev) 640*f80ad8b4SAndroid Build Coastguard Worker 641*f80ad8b4SAndroid Build Coastguard Worker #define ACRN_IOCTL_PM_GET_CPU_STATE \ 642*f80ad8b4SAndroid Build Coastguard Worker _IOWR(ACRN_IOCTL_TYPE, 0x60, __u64) 643*f80ad8b4SAndroid Build Coastguard Worker 644*f80ad8b4SAndroid Build Coastguard Worker #define ACRN_IOCTL_IOEVENTFD \ 645*f80ad8b4SAndroid Build Coastguard Worker _IOW(ACRN_IOCTL_TYPE, 0x70, struct acrn_ioeventfd) 646*f80ad8b4SAndroid Build Coastguard Worker #define ACRN_IOCTL_IRQFD \ 647*f80ad8b4SAndroid Build Coastguard Worker _IOW(ACRN_IOCTL_TYPE, 0x71, struct acrn_irqfd) 648*f80ad8b4SAndroid Build Coastguard Worker 649*f80ad8b4SAndroid Build Coastguard Worker #endif /* _UAPI_ACRN_H */ 650