.. | .. |
---|
116 | 116 | * ACPI gsi notion of irq. |
---|
117 | 117 | * For IA-64 (APIC model) IOAPIC0: irq 0-23; IOAPIC1: irq 24-47.. |
---|
118 | 118 | * For X86 (standard AT mode) PIC0/1: irq 0-15. IOAPIC0: 0-23.. |
---|
119 | | - * For ARM: See Documentation/virtual/kvm/api.txt |
---|
| 119 | + * For ARM: See Documentation/virt/kvm/api.rst |
---|
120 | 120 | */ |
---|
121 | 121 | union { |
---|
122 | 122 | __u32 irq; |
---|
.. | .. |
---|
188 | 188 | struct kvm_hyperv_exit { |
---|
189 | 189 | #define KVM_EXIT_HYPERV_SYNIC 1 |
---|
190 | 190 | #define KVM_EXIT_HYPERV_HCALL 2 |
---|
| 191 | +#define KVM_EXIT_HYPERV_SYNDBG 3 |
---|
191 | 192 | __u32 type; |
---|
192 | 193 | __u32 pad1; |
---|
193 | 194 | union { |
---|
.. | .. |
---|
203 | 204 | __u64 result; |
---|
204 | 205 | __u64 params[2]; |
---|
205 | 206 | } hcall; |
---|
| 207 | + struct { |
---|
| 208 | + __u32 msr; |
---|
| 209 | + __u32 pad2; |
---|
| 210 | + __u64 control; |
---|
| 211 | + __u64 status; |
---|
| 212 | + __u64 send_page; |
---|
| 213 | + __u64 recv_page; |
---|
| 214 | + __u64 pending_page; |
---|
| 215 | + } syndbg; |
---|
206 | 216 | } u; |
---|
207 | 217 | }; |
---|
208 | 218 | |
---|
.. | .. |
---|
237 | 247 | #define KVM_EXIT_S390_STSI 25 |
---|
238 | 248 | #define KVM_EXIT_IOAPIC_EOI 26 |
---|
239 | 249 | #define KVM_EXIT_HYPERV 27 |
---|
| 250 | +#define KVM_EXIT_ARM_NISV 28 |
---|
| 251 | +#define KVM_EXIT_X86_RDMSR 29 |
---|
| 252 | +#define KVM_EXIT_X86_WRMSR 30 |
---|
240 | 253 | |
---|
241 | 254 | /* For KVM_EXIT_INTERNAL_ERROR */ |
---|
242 | 255 | /* Emulate instruction failed. */ |
---|
.. | .. |
---|
245 | 258 | #define KVM_INTERNAL_ERROR_SIMUL_EX 2 |
---|
246 | 259 | /* Encounter unexpected vm-exit due to delivery event. */ |
---|
247 | 260 | #define KVM_INTERNAL_ERROR_DELIVERY_EV 3 |
---|
| 261 | +/* Encounter unexpected vm-exit reason */ |
---|
| 262 | +#define KVM_INTERNAL_ERROR_UNEXPECTED_EXIT_REASON 4 |
---|
248 | 263 | |
---|
249 | 264 | /* for KVM_RUN, returned by mmap(vcpu_fd, offset=0) */ |
---|
250 | 265 | struct kvm_run { |
---|
.. | .. |
---|
276 | 291 | /* KVM_EXIT_FAIL_ENTRY */ |
---|
277 | 292 | struct { |
---|
278 | 293 | __u64 hardware_entry_failure_reason; |
---|
| 294 | + __u32 cpu; |
---|
279 | 295 | } fail_entry; |
---|
280 | 296 | /* KVM_EXIT_EXCEPTION */ |
---|
281 | 297 | struct { |
---|
.. | .. |
---|
394 | 410 | } eoi; |
---|
395 | 411 | /* KVM_EXIT_HYPERV */ |
---|
396 | 412 | struct kvm_hyperv_exit hyperv; |
---|
| 413 | + /* KVM_EXIT_ARM_NISV */ |
---|
| 414 | + struct { |
---|
| 415 | + __u64 esr_iss; |
---|
| 416 | + __u64 fault_ipa; |
---|
| 417 | + } arm_nisv; |
---|
| 418 | + /* KVM_EXIT_X86_RDMSR / KVM_EXIT_X86_WRMSR */ |
---|
| 419 | + struct { |
---|
| 420 | + __u8 error; /* user -> kernel */ |
---|
| 421 | + __u8 pad[7]; |
---|
| 422 | +#define KVM_MSR_EXIT_REASON_INVAL (1 << 0) |
---|
| 423 | +#define KVM_MSR_EXIT_REASON_UNKNOWN (1 << 1) |
---|
| 424 | +#define KVM_MSR_EXIT_REASON_FILTER (1 << 2) |
---|
| 425 | + __u32 reason; /* kernel -> user */ |
---|
| 426 | + __u32 index; /* kernel -> user */ |
---|
| 427 | + __u64 data; /* kernel <-> user */ |
---|
| 428 | + } msr; |
---|
397 | 429 | /* Fix the size of the union. */ |
---|
398 | 430 | char padding[256]; |
---|
399 | 431 | }; |
---|
.. | .. |
---|
422 | 454 | struct kvm_coalesced_mmio_zone { |
---|
423 | 455 | __u64 addr; |
---|
424 | 456 | __u32 size; |
---|
425 | | - __u32 pad; |
---|
| 457 | + union { |
---|
| 458 | + __u32 pad; |
---|
| 459 | + __u32 pio; |
---|
| 460 | + }; |
---|
426 | 461 | }; |
---|
427 | 462 | |
---|
428 | 463 | struct kvm_coalesced_mmio { |
---|
429 | 464 | __u64 phys_addr; |
---|
430 | 465 | __u32 len; |
---|
431 | | - __u32 pad; |
---|
| 466 | + union { |
---|
| 467 | + __u32 pad; |
---|
| 468 | + __u32 pio; |
---|
| 469 | + }; |
---|
432 | 470 | __u8 data[8]; |
---|
433 | 471 | }; |
---|
434 | 472 | |
---|
.. | .. |
---|
462 | 500 | __u32 size; /* amount of bytes */ |
---|
463 | 501 | __u32 op; /* type of operation */ |
---|
464 | 502 | __u64 buf; /* buffer in userspace */ |
---|
465 | | - __u8 ar; /* the access register number */ |
---|
466 | | - __u8 reserved[31]; /* should be set to 0 */ |
---|
| 503 | + union { |
---|
| 504 | + __u8 ar; /* the access register number */ |
---|
| 505 | + __u32 sida_offset; /* offset into the sida */ |
---|
| 506 | + __u8 reserved[32]; /* should be set to 0 */ |
---|
| 507 | + }; |
---|
467 | 508 | }; |
---|
468 | 509 | /* types for kvm_s390_mem_op->op */ |
---|
469 | 510 | #define KVM_S390_MEMOP_LOGICAL_READ 0 |
---|
470 | 511 | #define KVM_S390_MEMOP_LOGICAL_WRITE 1 |
---|
| 512 | +#define KVM_S390_MEMOP_SIDA_READ 2 |
---|
| 513 | +#define KVM_S390_MEMOP_SIDA_WRITE 3 |
---|
471 | 514 | /* flags for kvm_s390_mem_op->flags */ |
---|
472 | 515 | #define KVM_S390_MEMOP_F_CHECK_ONLY (1ULL << 0) |
---|
473 | 516 | #define KVM_S390_MEMOP_F_INJECT_EXCEPTION (1ULL << 1) |
---|
.. | .. |
---|
482 | 525 | struct kvm_dirty_log { |
---|
483 | 526 | __u32 slot; |
---|
484 | 527 | __u32 padding1; |
---|
| 528 | + union { |
---|
| 529 | + void __user *dirty_bitmap; /* one bit per page */ |
---|
| 530 | + __u64 padding2; |
---|
| 531 | + }; |
---|
| 532 | +}; |
---|
| 533 | + |
---|
| 534 | +/* for KVM_CLEAR_DIRTY_LOG */ |
---|
| 535 | +struct kvm_clear_dirty_log { |
---|
| 536 | + __u32 slot; |
---|
| 537 | + __u32 num_pages; |
---|
| 538 | + __u64 first_page; |
---|
485 | 539 | union { |
---|
486 | 540 | void __user *dirty_bitmap; /* one bit per page */ |
---|
487 | 541 | __u64 padding2; |
---|
.. | .. |
---|
681 | 735 | #define KVM_X86_DISABLE_EXITS_MWAIT (1 << 0) |
---|
682 | 736 | #define KVM_X86_DISABLE_EXITS_HLT (1 << 1) |
---|
683 | 737 | #define KVM_X86_DISABLE_EXITS_PAUSE (1 << 2) |
---|
| 738 | +#define KVM_X86_DISABLE_EXITS_CSTATE (1 << 3) |
---|
684 | 739 | #define KVM_X86_DISABLE_VALID_EXITS (KVM_X86_DISABLE_EXITS_MWAIT | \ |
---|
685 | 740 | KVM_X86_DISABLE_EXITS_HLT | \ |
---|
686 | | - KVM_X86_DISABLE_EXITS_PAUSE) |
---|
| 741 | + KVM_X86_DISABLE_EXITS_PAUSE | \ |
---|
| 742 | + KVM_X86_DISABLE_EXITS_CSTATE) |
---|
687 | 743 | |
---|
688 | 744 | /* for KVM_ENABLE_CAP */ |
---|
689 | 745 | struct kvm_enable_cap { |
---|
.. | .. |
---|
721 | 777 | |
---|
722 | 778 | #define KVM_PPC_PAGE_SIZES_REAL 0x00000001 |
---|
723 | 779 | #define KVM_PPC_1T_SEGMENTS 0x00000002 |
---|
| 780 | +#define KVM_PPC_NO_HASH 0x00000004 |
---|
724 | 781 | |
---|
725 | 782 | struct kvm_ppc_smmu_info { |
---|
726 | 783 | __u64 flags; |
---|
.. | .. |
---|
753 | 810 | |
---|
754 | 811 | #define KVM_S390_SIE_PAGE_OFFSET 1 |
---|
755 | 812 | |
---|
| 813 | +/* |
---|
| 814 | + * On arm64, machine type can be used to request the physical |
---|
| 815 | + * address size for the VM. Bits[7-0] are reserved for the guest |
---|
| 816 | + * PA size shift (i.e, log2(PA_Size)). For backward compatibility, |
---|
| 817 | + * value 0 implies the default IPA size, 40bits. |
---|
| 818 | + */ |
---|
| 819 | +#define KVM_VM_TYPE_ARM_IPA_SIZE_MASK 0xffULL |
---|
| 820 | +#define KVM_VM_TYPE_ARM_IPA_SIZE(x) \ |
---|
| 821 | + ((x) & KVM_VM_TYPE_ARM_IPA_SIZE_MASK) |
---|
756 | 822 | /* |
---|
757 | 823 | * ioctls for /dev/kvm fds: |
---|
758 | 824 | */ |
---|
.. | .. |
---|
956 | 1022 | #define KVM_CAP_NESTED_STATE 157 |
---|
957 | 1023 | #define KVM_CAP_ARM_INJECT_SERROR_ESR 158 |
---|
958 | 1024 | #define KVM_CAP_MSR_PLATFORM_INFO 159 |
---|
| 1025 | +#define KVM_CAP_PPC_NESTED_HV 160 |
---|
| 1026 | +#define KVM_CAP_HYPERV_SEND_IPI 161 |
---|
| 1027 | +#define KVM_CAP_COALESCED_PIO 162 |
---|
| 1028 | +#define KVM_CAP_HYPERV_ENLIGHTENED_VMCS 163 |
---|
| 1029 | +#define KVM_CAP_EXCEPTION_PAYLOAD 164 |
---|
| 1030 | +#define KVM_CAP_ARM_VM_IPA_SIZE 165 |
---|
| 1031 | +#define KVM_CAP_MANUAL_DIRTY_LOG_PROTECT 166 /* Obsolete */ |
---|
| 1032 | +#define KVM_CAP_HYPERV_CPUID 167 |
---|
| 1033 | +#define KVM_CAP_MANUAL_DIRTY_LOG_PROTECT2 168 |
---|
| 1034 | +#define KVM_CAP_PPC_IRQ_XIVE 169 |
---|
| 1035 | +#define KVM_CAP_ARM_SVE 170 |
---|
| 1036 | +#define KVM_CAP_ARM_PTRAUTH_ADDRESS 171 |
---|
| 1037 | +#define KVM_CAP_ARM_PTRAUTH_GENERIC 172 |
---|
| 1038 | +#define KVM_CAP_PMU_EVENT_FILTER 173 |
---|
| 1039 | +#define KVM_CAP_ARM_IRQ_LINE_LAYOUT_2 174 |
---|
| 1040 | +#define KVM_CAP_HYPERV_DIRECT_TLBFLUSH 175 |
---|
| 1041 | +#define KVM_CAP_PPC_GUEST_DEBUG_SSTEP 176 |
---|
| 1042 | +#define KVM_CAP_ARM_NISV_TO_USER 177 |
---|
| 1043 | +#define KVM_CAP_ARM_INJECT_EXT_DABT 178 |
---|
| 1044 | +#define KVM_CAP_S390_VCPU_RESETS 179 |
---|
| 1045 | +#define KVM_CAP_S390_PROTECTED 180 |
---|
| 1046 | +#define KVM_CAP_PPC_SECURE_GUEST 181 |
---|
| 1047 | +#define KVM_CAP_HALT_POLL 182 |
---|
| 1048 | +#define KVM_CAP_ASYNC_PF_INT 183 |
---|
| 1049 | +#define KVM_CAP_LAST_CPU 184 |
---|
| 1050 | +#define KVM_CAP_SMALLER_MAXPHYADDR 185 |
---|
| 1051 | +#define KVM_CAP_S390_DIAG318 186 |
---|
| 1052 | +#define KVM_CAP_STEAL_TIME 187 |
---|
| 1053 | +#define KVM_CAP_X86_USER_SPACE_MSR 188 |
---|
| 1054 | +#define KVM_CAP_X86_MSR_FILTER 189 |
---|
| 1055 | +#define KVM_CAP_ENFORCE_PV_FEATURE_CPUID 190 |
---|
959 | 1056 | |
---|
960 | 1057 | #ifdef KVM_CAP_IRQ_ROUTING |
---|
961 | 1058 | |
---|
.. | .. |
---|
1046 | 1143 | * |
---|
1047 | 1144 | * KVM_IRQFD_FLAG_RESAMPLE indicates resamplefd is valid and specifies |
---|
1048 | 1145 | * the irqfd to operate in resampling mode for level triggered interrupt |
---|
1049 | | - * emulation. See Documentation/virtual/kvm/api.txt. |
---|
| 1146 | + * emulation. See Documentation/virt/kvm/api.rst. |
---|
1050 | 1147 | */ |
---|
1051 | 1148 | #define KVM_IRQFD_FLAG_RESAMPLE (1 << 1) |
---|
1052 | 1149 | |
---|
.. | .. |
---|
1102 | 1199 | #define KVM_REG_S390 0x5000000000000000ULL |
---|
1103 | 1200 | #define KVM_REG_ARM64 0x6000000000000000ULL |
---|
1104 | 1201 | #define KVM_REG_MIPS 0x7000000000000000ULL |
---|
| 1202 | +#define KVM_REG_RISCV 0x8000000000000000ULL |
---|
1105 | 1203 | |
---|
1106 | 1204 | #define KVM_REG_SIZE_SHIFT 52 |
---|
1107 | 1205 | #define KVM_REG_SIZE_MASK 0x00f0000000000000ULL |
---|
.. | .. |
---|
1113 | 1211 | #define KVM_REG_SIZE_U256 0x0050000000000000ULL |
---|
1114 | 1212 | #define KVM_REG_SIZE_U512 0x0060000000000000ULL |
---|
1115 | 1213 | #define KVM_REG_SIZE_U1024 0x0070000000000000ULL |
---|
| 1214 | +#define KVM_REG_SIZE_U2048 0x0080000000000000ULL |
---|
1116 | 1215 | |
---|
1117 | 1216 | struct kvm_reg_list { |
---|
1118 | 1217 | __u64 n; /* number of regs */ |
---|
.. | .. |
---|
1179 | 1278 | #define KVM_DEV_TYPE_ARM_VGIC_V3 KVM_DEV_TYPE_ARM_VGIC_V3 |
---|
1180 | 1279 | KVM_DEV_TYPE_ARM_VGIC_ITS, |
---|
1181 | 1280 | #define KVM_DEV_TYPE_ARM_VGIC_ITS KVM_DEV_TYPE_ARM_VGIC_ITS |
---|
| 1281 | + KVM_DEV_TYPE_XIVE, |
---|
| 1282 | +#define KVM_DEV_TYPE_XIVE KVM_DEV_TYPE_XIVE |
---|
| 1283 | + KVM_DEV_TYPE_ARM_PV_TIME, |
---|
| 1284 | +#define KVM_DEV_TYPE_ARM_PV_TIME KVM_DEV_TYPE_ARM_PV_TIME |
---|
1182 | 1285 | KVM_DEV_TYPE_MAX, |
---|
1183 | 1286 | }; |
---|
1184 | 1287 | |
---|
.. | .. |
---|
1287 | 1390 | #define KVM_PPC_GET_RMMU_INFO _IOW(KVMIO, 0xb0, struct kvm_ppc_rmmu_info) |
---|
1288 | 1391 | /* Available with KVM_CAP_PPC_GET_CPU_CHAR */ |
---|
1289 | 1392 | #define KVM_PPC_GET_CPU_CHAR _IOR(KVMIO, 0xb1, struct kvm_ppc_cpu_char) |
---|
| 1393 | +/* Available with KVM_CAP_PMU_EVENT_FILTER */ |
---|
| 1394 | +#define KVM_SET_PMU_EVENT_FILTER _IOW(KVMIO, 0xb2, struct kvm_pmu_event_filter) |
---|
| 1395 | +#define KVM_PPC_SVM_OFF _IO(KVMIO, 0xb3) |
---|
1290 | 1396 | |
---|
1291 | 1397 | /* ioctl for vm fd */ |
---|
1292 | 1398 | #define KVM_CREATE_DEVICE _IOWR(KVMIO, 0xe0, struct kvm_create_device) |
---|
.. | .. |
---|
1401 | 1507 | /* Available with KVM_CAP_NESTED_STATE */ |
---|
1402 | 1508 | #define KVM_GET_NESTED_STATE _IOWR(KVMIO, 0xbe, struct kvm_nested_state) |
---|
1403 | 1509 | #define KVM_SET_NESTED_STATE _IOW(KVMIO, 0xbf, struct kvm_nested_state) |
---|
| 1510 | + |
---|
| 1511 | +/* Available with KVM_CAP_MANUAL_DIRTY_LOG_PROTECT_2 */ |
---|
| 1512 | +#define KVM_CLEAR_DIRTY_LOG _IOWR(KVMIO, 0xc0, struct kvm_clear_dirty_log) |
---|
| 1513 | + |
---|
| 1514 | +/* Available with KVM_CAP_HYPERV_CPUID */ |
---|
| 1515 | +#define KVM_GET_SUPPORTED_HV_CPUID _IOWR(KVMIO, 0xc1, struct kvm_cpuid2) |
---|
| 1516 | + |
---|
| 1517 | +/* Available with KVM_CAP_ARM_SVE */ |
---|
| 1518 | +#define KVM_ARM_VCPU_FINALIZE _IOW(KVMIO, 0xc2, int) |
---|
| 1519 | + |
---|
| 1520 | +/* Available with KVM_CAP_S390_VCPU_RESETS */ |
---|
| 1521 | +#define KVM_S390_NORMAL_RESET _IO(KVMIO, 0xc3) |
---|
| 1522 | +#define KVM_S390_CLEAR_RESET _IO(KVMIO, 0xc4) |
---|
| 1523 | + |
---|
| 1524 | +struct kvm_s390_pv_sec_parm { |
---|
| 1525 | + __u64 origin; |
---|
| 1526 | + __u64 length; |
---|
| 1527 | +}; |
---|
| 1528 | + |
---|
| 1529 | +struct kvm_s390_pv_unp { |
---|
| 1530 | + __u64 addr; |
---|
| 1531 | + __u64 size; |
---|
| 1532 | + __u64 tweak; |
---|
| 1533 | +}; |
---|
| 1534 | + |
---|
| 1535 | +enum pv_cmd_id { |
---|
| 1536 | + KVM_PV_ENABLE, |
---|
| 1537 | + KVM_PV_DISABLE, |
---|
| 1538 | + KVM_PV_SET_SEC_PARMS, |
---|
| 1539 | + KVM_PV_UNPACK, |
---|
| 1540 | + KVM_PV_VERIFY, |
---|
| 1541 | + KVM_PV_PREP_RESET, |
---|
| 1542 | + KVM_PV_UNSHARE_ALL, |
---|
| 1543 | +}; |
---|
| 1544 | + |
---|
| 1545 | +struct kvm_pv_cmd { |
---|
| 1546 | + __u32 cmd; /* Command to be executed */ |
---|
| 1547 | + __u16 rc; /* Ultravisor return code */ |
---|
| 1548 | + __u16 rrc; /* Ultravisor return reason code */ |
---|
| 1549 | + __u64 data; /* Data or address */ |
---|
| 1550 | + __u32 flags; /* flags for future extensions. Must be 0 for now */ |
---|
| 1551 | + __u32 reserved[3]; |
---|
| 1552 | +}; |
---|
| 1553 | + |
---|
| 1554 | +/* Available with KVM_CAP_S390_PROTECTED */ |
---|
| 1555 | +#define KVM_S390_PV_COMMAND _IOWR(KVMIO, 0xc5, struct kvm_pv_cmd) |
---|
| 1556 | + |
---|
| 1557 | +/* Available with KVM_CAP_X86_MSR_FILTER */ |
---|
| 1558 | +#define KVM_X86_SET_MSR_FILTER _IOW(KVMIO, 0xc6, struct kvm_msr_filter) |
---|
1404 | 1559 | |
---|
1405 | 1560 | /* Secure Encrypted Virtualization command */ |
---|
1406 | 1561 | enum sev_cmd_id { |
---|
.. | .. |
---|
1552 | 1707 | #define KVM_HYPERV_CONN_ID_MASK 0x00ffffff |
---|
1553 | 1708 | #define KVM_HYPERV_EVENTFD_DEASSIGN (1 << 0) |
---|
1554 | 1709 | |
---|
| 1710 | +#define KVM_DIRTY_LOG_MANUAL_PROTECT_ENABLE (1 << 0) |
---|
| 1711 | +#define KVM_DIRTY_LOG_INITIALLY_SET (1 << 1) |
---|
| 1712 | + |
---|
1555 | 1713 | #endif /* __LINUX_KVM_H */ |
---|