.. | .. |
---|
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 */ |
---|