zig

fork of https://codeberg.org/ziglang/zig
Log | Files | Refs | README | LICENSE

acrn.h (18955B) - Raw


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