xref: /aosp_15_r20/external/kernel-headers/original/uapi/linux/acrn.h (revision f80ad8b4341604f5951dab671d41019a6d7087ce)
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