diff options
Diffstat (limited to 'include/linux/kvm.h')
| -rw-r--r-- | include/linux/kvm.h | 46 |
1 files changed, 40 insertions, 6 deletions
diff --git a/include/linux/kvm.h b/include/linux/kvm.h index 8cc137911b34..3db5d8d37485 100644 --- a/include/linux/kvm.h +++ b/include/linux/kvm.h | |||
| @@ -119,7 +119,7 @@ struct kvm_run { | |||
| 119 | __u32 error_code; | 119 | __u32 error_code; |
| 120 | } ex; | 120 | } ex; |
| 121 | /* KVM_EXIT_IO */ | 121 | /* KVM_EXIT_IO */ |
| 122 | struct kvm_io { | 122 | struct { |
| 123 | #define KVM_EXIT_IO_IN 0 | 123 | #define KVM_EXIT_IO_IN 0 |
| 124 | #define KVM_EXIT_IO_OUT 1 | 124 | #define KVM_EXIT_IO_OUT 1 |
| 125 | __u8 direction; | 125 | __u8 direction; |
| @@ -224,10 +224,10 @@ struct kvm_interrupt { | |||
| 224 | /* for KVM_GET_DIRTY_LOG */ | 224 | /* for KVM_GET_DIRTY_LOG */ |
| 225 | struct kvm_dirty_log { | 225 | struct kvm_dirty_log { |
| 226 | __u32 slot; | 226 | __u32 slot; |
| 227 | __u32 padding; | 227 | __u32 padding1; |
| 228 | union { | 228 | union { |
| 229 | void __user *dirty_bitmap; /* one bit per page */ | 229 | void __user *dirty_bitmap; /* one bit per page */ |
| 230 | __u64 padding; | 230 | __u64 padding2; |
| 231 | }; | 231 | }; |
| 232 | }; | 232 | }; |
| 233 | 233 | ||
| @@ -409,6 +409,10 @@ struct kvm_trace_rec { | |||
| 409 | #ifdef __KVM_HAVE_DEVICE_ASSIGNMENT | 409 | #ifdef __KVM_HAVE_DEVICE_ASSIGNMENT |
| 410 | #define KVM_CAP_DEVICE_DEASSIGNMENT 27 | 410 | #define KVM_CAP_DEVICE_DEASSIGNMENT 27 |
| 411 | #endif | 411 | #endif |
| 412 | #ifdef __KVM_HAVE_MSIX | ||
| 413 | #define KVM_CAP_DEVICE_MSIX 28 | ||
| 414 | #endif | ||
| 415 | #define KVM_CAP_ASSIGN_DEV_IRQ 29 | ||
| 412 | /* Another bug in KVM_SET_USER_MEMORY_REGION fixed: */ | 416 | /* Another bug in KVM_SET_USER_MEMORY_REGION fixed: */ |
| 413 | #define KVM_CAP_JOIN_MEMORY_REGIONS_WORKS 30 | 417 | #define KVM_CAP_JOIN_MEMORY_REGIONS_WORKS 30 |
| 414 | 418 | ||
| @@ -482,11 +486,18 @@ struct kvm_irq_routing { | |||
| 482 | #define KVM_ASSIGN_PCI_DEVICE _IOR(KVMIO, 0x69, \ | 486 | #define KVM_ASSIGN_PCI_DEVICE _IOR(KVMIO, 0x69, \ |
| 483 | struct kvm_assigned_pci_dev) | 487 | struct kvm_assigned_pci_dev) |
| 484 | #define KVM_SET_GSI_ROUTING _IOW(KVMIO, 0x6a, struct kvm_irq_routing) | 488 | #define KVM_SET_GSI_ROUTING _IOW(KVMIO, 0x6a, struct kvm_irq_routing) |
| 489 | /* deprecated, replaced by KVM_ASSIGN_DEV_IRQ */ | ||
| 485 | #define KVM_ASSIGN_IRQ _IOR(KVMIO, 0x70, \ | 490 | #define KVM_ASSIGN_IRQ _IOR(KVMIO, 0x70, \ |
| 486 | struct kvm_assigned_irq) | 491 | struct kvm_assigned_irq) |
| 492 | #define KVM_ASSIGN_DEV_IRQ _IOW(KVMIO, 0x70, struct kvm_assigned_irq) | ||
| 487 | #define KVM_REINJECT_CONTROL _IO(KVMIO, 0x71) | 493 | #define KVM_REINJECT_CONTROL _IO(KVMIO, 0x71) |
| 488 | #define KVM_DEASSIGN_PCI_DEVICE _IOW(KVMIO, 0x72, \ | 494 | #define KVM_DEASSIGN_PCI_DEVICE _IOW(KVMIO, 0x72, \ |
| 489 | struct kvm_assigned_pci_dev) | 495 | struct kvm_assigned_pci_dev) |
| 496 | #define KVM_ASSIGN_SET_MSIX_NR \ | ||
| 497 | _IOW(KVMIO, 0x73, struct kvm_assigned_msix_nr) | ||
| 498 | #define KVM_ASSIGN_SET_MSIX_ENTRY \ | ||
| 499 | _IOW(KVMIO, 0x74, struct kvm_assigned_msix_entry) | ||
| 500 | #define KVM_DEASSIGN_DEV_IRQ _IOW(KVMIO, 0x75, struct kvm_assigned_irq) | ||
| 490 | 501 | ||
| 491 | /* | 502 | /* |
| 492 | * ioctls for vcpu fds | 503 | * ioctls for vcpu fds |
| @@ -577,6 +588,8 @@ struct kvm_debug_guest { | |||
| 577 | #define KVM_TRC_STLB_INVAL (KVM_TRC_HANDLER + 0x18) | 588 | #define KVM_TRC_STLB_INVAL (KVM_TRC_HANDLER + 0x18) |
| 578 | #define KVM_TRC_PPC_INSTR (KVM_TRC_HANDLER + 0x19) | 589 | #define KVM_TRC_PPC_INSTR (KVM_TRC_HANDLER + 0x19) |
| 579 | 590 | ||
| 591 | #define KVM_DEV_ASSIGN_ENABLE_IOMMU (1 << 0) | ||
| 592 | |||
| 580 | struct kvm_assigned_pci_dev { | 593 | struct kvm_assigned_pci_dev { |
| 581 | __u32 assigned_dev_id; | 594 | __u32 assigned_dev_id; |
| 582 | __u32 busnr; | 595 | __u32 busnr; |
| @@ -587,6 +600,17 @@ struct kvm_assigned_pci_dev { | |||
| 587 | }; | 600 | }; |
| 588 | }; | 601 | }; |
| 589 | 602 | ||
| 603 | #define KVM_DEV_IRQ_HOST_INTX (1 << 0) | ||
| 604 | #define KVM_DEV_IRQ_HOST_MSI (1 << 1) | ||
| 605 | #define KVM_DEV_IRQ_HOST_MSIX (1 << 2) | ||
| 606 | |||
| 607 | #define KVM_DEV_IRQ_GUEST_INTX (1 << 8) | ||
| 608 | #define KVM_DEV_IRQ_GUEST_MSI (1 << 9) | ||
| 609 | #define KVM_DEV_IRQ_GUEST_MSIX (1 << 10) | ||
| 610 | |||
| 611 | #define KVM_DEV_IRQ_HOST_MASK 0x00ff | ||
| 612 | #define KVM_DEV_IRQ_GUEST_MASK 0xff00 | ||
| 613 | |||
| 590 | struct kvm_assigned_irq { | 614 | struct kvm_assigned_irq { |
| 591 | __u32 assigned_dev_id; | 615 | __u32 assigned_dev_id; |
| 592 | __u32 host_irq; | 616 | __u32 host_irq; |
| @@ -602,9 +626,19 @@ struct kvm_assigned_irq { | |||
| 602 | }; | 626 | }; |
| 603 | }; | 627 | }; |
| 604 | 628 | ||
| 605 | #define KVM_DEV_ASSIGN_ENABLE_IOMMU (1 << 0) | ||
| 606 | 629 | ||
| 607 | #define KVM_DEV_IRQ_ASSIGN_MSI_ACTION KVM_DEV_IRQ_ASSIGN_ENABLE_MSI | 630 | struct kvm_assigned_msix_nr { |
| 608 | #define KVM_DEV_IRQ_ASSIGN_ENABLE_MSI (1 << 0) | 631 | __u32 assigned_dev_id; |
| 632 | __u16 entry_nr; | ||
| 633 | __u16 padding; | ||
| 634 | }; | ||
| 635 | |||
| 636 | #define KVM_MAX_MSIX_PER_DEV 512 | ||
| 637 | struct kvm_assigned_msix_entry { | ||
| 638 | __u32 assigned_dev_id; | ||
| 639 | __u32 gsi; | ||
| 640 | __u16 entry; /* The index of entry in the MSI-X table */ | ||
| 641 | __u16 padding[3]; | ||
| 642 | }; | ||
| 609 | 643 | ||
| 610 | #endif | 644 | #endif |
