| .. | .. |
|---|
| 192 | 192 | __u32 indices[0]; |
|---|
| 193 | 193 | }; |
|---|
| 194 | 194 | |
|---|
| 195 | +/* Maximum size of any access bitmap in bytes */ |
|---|
| 196 | +#define KVM_MSR_FILTER_MAX_BITMAP_SIZE 0x600 |
|---|
| 197 | + |
|---|
| 198 | +/* for KVM_X86_SET_MSR_FILTER */ |
|---|
| 199 | +struct kvm_msr_filter_range { |
|---|
| 200 | +#define KVM_MSR_FILTER_READ (1 << 0) |
|---|
| 201 | +#define KVM_MSR_FILTER_WRITE (1 << 1) |
|---|
| 202 | + __u32 flags; |
|---|
| 203 | + __u32 nmsrs; /* number of msrs in bitmap */ |
|---|
| 204 | + __u32 base; /* MSR index the bitmap starts at */ |
|---|
| 205 | + __u8 *bitmap; /* a 1 bit allows the operations in flags, 0 denies */ |
|---|
| 206 | +}; |
|---|
| 207 | + |
|---|
| 208 | +#define KVM_MSR_FILTER_MAX_RANGES 16 |
|---|
| 209 | +struct kvm_msr_filter { |
|---|
| 210 | +#define KVM_MSR_FILTER_DEFAULT_ALLOW (0 << 0) |
|---|
| 211 | +#define KVM_MSR_FILTER_DEFAULT_DENY (1 << 0) |
|---|
| 212 | + __u32 flags; |
|---|
| 213 | + struct kvm_msr_filter_range ranges[KVM_MSR_FILTER_MAX_RANGES]; |
|---|
| 214 | +}; |
|---|
| 195 | 215 | |
|---|
| 196 | 216 | struct kvm_cpuid_entry { |
|---|
| 197 | 217 | __u32 function; |
|---|
| .. | .. |
|---|
| 288 | 308 | #define KVM_VCPUEVENT_VALID_SIPI_VECTOR 0x00000002 |
|---|
| 289 | 309 | #define KVM_VCPUEVENT_VALID_SHADOW 0x00000004 |
|---|
| 290 | 310 | #define KVM_VCPUEVENT_VALID_SMM 0x00000008 |
|---|
| 311 | +#define KVM_VCPUEVENT_VALID_PAYLOAD 0x00000010 |
|---|
| 291 | 312 | |
|---|
| 292 | 313 | /* Interrupt shadow states */ |
|---|
| 293 | 314 | #define KVM_X86_SHADOW_INT_MOV_SS 0x01 |
|---|
| .. | .. |
|---|
| 299 | 320 | __u8 injected; |
|---|
| 300 | 321 | __u8 nr; |
|---|
| 301 | 322 | __u8 has_error_code; |
|---|
| 302 | | - __u8 pad; |
|---|
| 323 | + __u8 pending; |
|---|
| 303 | 324 | __u32 error_code; |
|---|
| 304 | 325 | } exception; |
|---|
| 305 | 326 | struct { |
|---|
| .. | .. |
|---|
| 322 | 343 | __u8 smm_inside_nmi; |
|---|
| 323 | 344 | __u8 latched_init; |
|---|
| 324 | 345 | } smi; |
|---|
| 325 | | - __u32 reserved[9]; |
|---|
| 346 | + __u8 reserved[27]; |
|---|
| 347 | + __u8 exception_has_payload; |
|---|
| 348 | + __u64 exception_payload; |
|---|
| 326 | 349 | }; |
|---|
| 327 | 350 | |
|---|
| 328 | 351 | /* for KVM_GET/SET_DEBUGREGS */ |
|---|
| .. | .. |
|---|
| 375 | 398 | struct kvm_vcpu_events events; |
|---|
| 376 | 399 | }; |
|---|
| 377 | 400 | |
|---|
| 378 | | -#define KVM_X86_QUIRK_LINT0_REENABLED (1 << 0) |
|---|
| 379 | | -#define KVM_X86_QUIRK_CD_NW_CLEARED (1 << 1) |
|---|
| 380 | | -#define KVM_X86_QUIRK_LAPIC_MMIO_HOLE (1 << 2) |
|---|
| 401 | +#define KVM_X86_QUIRK_LINT0_REENABLED (1 << 0) |
|---|
| 402 | +#define KVM_X86_QUIRK_CD_NW_CLEARED (1 << 1) |
|---|
| 403 | +#define KVM_X86_QUIRK_LAPIC_MMIO_HOLE (1 << 2) |
|---|
| 404 | +#define KVM_X86_QUIRK_OUT_7E_INC_RIP (1 << 3) |
|---|
| 405 | +#define KVM_X86_QUIRK_MISC_ENABLE_NO_MWAIT (1 << 4) |
|---|
| 406 | + |
|---|
| 407 | +#define KVM_STATE_NESTED_FORMAT_VMX 0 |
|---|
| 408 | +#define KVM_STATE_NESTED_FORMAT_SVM 1 |
|---|
| 381 | 409 | |
|---|
| 382 | 410 | #define KVM_STATE_NESTED_GUEST_MODE 0x00000001 |
|---|
| 383 | 411 | #define KVM_STATE_NESTED_RUN_PENDING 0x00000002 |
|---|
| 412 | +#define KVM_STATE_NESTED_EVMCS 0x00000004 |
|---|
| 413 | +#define KVM_STATE_NESTED_MTF_PENDING 0x00000008 |
|---|
| 414 | +#define KVM_STATE_NESTED_GIF_SET 0x00000100 |
|---|
| 384 | 415 | |
|---|
| 385 | 416 | #define KVM_STATE_NESTED_SMM_GUEST_MODE 0x00000001 |
|---|
| 386 | 417 | #define KVM_STATE_NESTED_SMM_VMXON 0x00000002 |
|---|
| 387 | 418 | |
|---|
| 388 | | -struct kvm_vmx_nested_state { |
|---|
| 419 | +#define KVM_STATE_NESTED_VMX_VMCS_SIZE 0x1000 |
|---|
| 420 | + |
|---|
| 421 | +#define KVM_STATE_NESTED_SVM_VMCB_SIZE 0x1000 |
|---|
| 422 | + |
|---|
| 423 | +#define KVM_STATE_VMX_PREEMPTION_TIMER_DEADLINE 0x00000001 |
|---|
| 424 | + |
|---|
| 425 | +struct kvm_vmx_nested_state_data { |
|---|
| 426 | + __u8 vmcs12[KVM_STATE_NESTED_VMX_VMCS_SIZE]; |
|---|
| 427 | + __u8 shadow_vmcs12[KVM_STATE_NESTED_VMX_VMCS_SIZE]; |
|---|
| 428 | +}; |
|---|
| 429 | + |
|---|
| 430 | +struct kvm_vmx_nested_state_hdr { |
|---|
| 389 | 431 | __u64 vmxon_pa; |
|---|
| 390 | | - __u64 vmcs_pa; |
|---|
| 432 | + __u64 vmcs12_pa; |
|---|
| 391 | 433 | |
|---|
| 392 | 434 | struct { |
|---|
| 393 | 435 | __u16 flags; |
|---|
| 394 | 436 | } smm; |
|---|
| 437 | + |
|---|
| 438 | + __u32 flags; |
|---|
| 439 | + __u64 preemption_timer_deadline; |
|---|
| 440 | +}; |
|---|
| 441 | + |
|---|
| 442 | +struct kvm_svm_nested_state_data { |
|---|
| 443 | + /* Save area only used if KVM_STATE_NESTED_RUN_PENDING. */ |
|---|
| 444 | + __u8 vmcb12[KVM_STATE_NESTED_SVM_VMCB_SIZE]; |
|---|
| 445 | +}; |
|---|
| 446 | + |
|---|
| 447 | +struct kvm_svm_nested_state_hdr { |
|---|
| 448 | + __u64 vmcb_pa; |
|---|
| 395 | 449 | }; |
|---|
| 396 | 450 | |
|---|
| 397 | 451 | /* for KVM_CAP_NESTED_STATE */ |
|---|
| 398 | 452 | struct kvm_nested_state { |
|---|
| 399 | | - /* KVM_STATE_* flags */ |
|---|
| 400 | 453 | __u16 flags; |
|---|
| 401 | | - |
|---|
| 402 | | - /* 0 for VMX, 1 for SVM. */ |
|---|
| 403 | 454 | __u16 format; |
|---|
| 404 | | - |
|---|
| 405 | | - /* 128 for SVM, 128 + VMCS size for VMX. */ |
|---|
| 406 | 455 | __u32 size; |
|---|
| 407 | 456 | |
|---|
| 408 | 457 | union { |
|---|
| 409 | | - /* VMXON, VMCS */ |
|---|
| 410 | | - struct kvm_vmx_nested_state vmx; |
|---|
| 458 | + struct kvm_vmx_nested_state_hdr vmx; |
|---|
| 459 | + struct kvm_svm_nested_state_hdr svm; |
|---|
| 411 | 460 | |
|---|
| 412 | 461 | /* Pad the header to 128 bytes. */ |
|---|
| 413 | 462 | __u8 pad[120]; |
|---|
| 414 | | - }; |
|---|
| 463 | + } hdr; |
|---|
| 415 | 464 | |
|---|
| 416 | | - __u8 data[0]; |
|---|
| 465 | + /* |
|---|
| 466 | + * Define data region as 0 bytes to preserve backwards-compatability |
|---|
| 467 | + * to old definition of kvm_nested_state in order to avoid changing |
|---|
| 468 | + * KVM_{GET,PUT}_NESTED_STATE ioctl values. |
|---|
| 469 | + */ |
|---|
| 470 | + union { |
|---|
| 471 | + struct kvm_vmx_nested_state_data vmx[0]; |
|---|
| 472 | + struct kvm_svm_nested_state_data svm[0]; |
|---|
| 473 | + } data; |
|---|
| 417 | 474 | }; |
|---|
| 418 | 475 | |
|---|
| 476 | +/* for KVM_CAP_PMU_EVENT_FILTER */ |
|---|
| 477 | +struct kvm_pmu_event_filter { |
|---|
| 478 | + __u32 action; |
|---|
| 479 | + __u32 nevents; |
|---|
| 480 | + __u32 fixed_counter_bitmap; |
|---|
| 481 | + __u32 flags; |
|---|
| 482 | + __u32 pad[4]; |
|---|
| 483 | + __u64 events[0]; |
|---|
| 484 | +}; |
|---|
| 485 | + |
|---|
| 486 | +#define KVM_PMU_EVENT_ALLOW 0 |
|---|
| 487 | +#define KVM_PMU_EVENT_DENY 1 |
|---|
| 488 | + |
|---|
| 419 | 489 | #endif /* _ASM_X86_KVM_H */ |
|---|