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 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 /* _UAPI_ACRN_H */ 650