cachepc-linux

Fork of AMDESE/linux with modifications for CachePC side-channel attack
git clone https://git.sinitax.com/sinitax/cachepc-linux
Log | Files | Refs | README | LICENSE | sfeed.txt

acrn.h (18975B)


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