KVM: Document device assigment API
Adds API documentation for KVM_[DE]ASSIGN_PCI_DEVICE, KVM_[DE]ASSIGN_DEV_IRQ, KVM_SET_GSI_ROUTING, KVM_ASSIGN_SET_MSIX_NR, and KVM_ASSIGN_SET_MSIX_ENTRY. Acked-by: Alex Williamson <alex.williamson@redhat.com> Acked-by: Michael S. Tsirkin <mst@redhat.com> Signed-off-by: Jan Kiszka <jan.kiszka@siemens.com> Signed-off-by: Marcelo Tosatti <mtosatti@redhat.com>
This commit is contained in:
parent
51de271d44
commit
49f4817204
|
@ -1085,6 +1085,184 @@ of 4 instructions that make up a hypercall.
|
||||||
If any additional field gets added to this structure later on, a bit for that
|
If any additional field gets added to this structure later on, a bit for that
|
||||||
additional piece of information will be set in the flags bitmap.
|
additional piece of information will be set in the flags bitmap.
|
||||||
|
|
||||||
|
4.47 KVM_ASSIGN_PCI_DEVICE
|
||||||
|
|
||||||
|
Capability: KVM_CAP_DEVICE_ASSIGNMENT
|
||||||
|
Architectures: x86 ia64
|
||||||
|
Type: vm ioctl
|
||||||
|
Parameters: struct kvm_assigned_pci_dev (in)
|
||||||
|
Returns: 0 on success, -1 on error
|
||||||
|
|
||||||
|
Assigns a host PCI device to the VM.
|
||||||
|
|
||||||
|
struct kvm_assigned_pci_dev {
|
||||||
|
__u32 assigned_dev_id;
|
||||||
|
__u32 busnr;
|
||||||
|
__u32 devfn;
|
||||||
|
__u32 flags;
|
||||||
|
__u32 segnr;
|
||||||
|
union {
|
||||||
|
__u32 reserved[11];
|
||||||
|
};
|
||||||
|
};
|
||||||
|
|
||||||
|
The PCI device is specified by the triple segnr, busnr, and devfn.
|
||||||
|
Identification in succeeding service requests is done via assigned_dev_id. The
|
||||||
|
following flags are specified:
|
||||||
|
|
||||||
|
/* Depends on KVM_CAP_IOMMU */
|
||||||
|
#define KVM_DEV_ASSIGN_ENABLE_IOMMU (1 << 0)
|
||||||
|
|
||||||
|
4.48 KVM_DEASSIGN_PCI_DEVICE
|
||||||
|
|
||||||
|
Capability: KVM_CAP_DEVICE_DEASSIGNMENT
|
||||||
|
Architectures: x86 ia64
|
||||||
|
Type: vm ioctl
|
||||||
|
Parameters: struct kvm_assigned_pci_dev (in)
|
||||||
|
Returns: 0 on success, -1 on error
|
||||||
|
|
||||||
|
Ends PCI device assignment, releasing all associated resources.
|
||||||
|
|
||||||
|
See KVM_CAP_DEVICE_ASSIGNMENT for the data structure. Only assigned_dev_id is
|
||||||
|
used in kvm_assigned_pci_dev to identify the device.
|
||||||
|
|
||||||
|
4.49 KVM_ASSIGN_DEV_IRQ
|
||||||
|
|
||||||
|
Capability: KVM_CAP_ASSIGN_DEV_IRQ
|
||||||
|
Architectures: x86 ia64
|
||||||
|
Type: vm ioctl
|
||||||
|
Parameters: struct kvm_assigned_irq (in)
|
||||||
|
Returns: 0 on success, -1 on error
|
||||||
|
|
||||||
|
Assigns an IRQ to a passed-through device.
|
||||||
|
|
||||||
|
struct kvm_assigned_irq {
|
||||||
|
__u32 assigned_dev_id;
|
||||||
|
__u32 host_irq;
|
||||||
|
__u32 guest_irq;
|
||||||
|
__u32 flags;
|
||||||
|
union {
|
||||||
|
struct {
|
||||||
|
__u32 addr_lo;
|
||||||
|
__u32 addr_hi;
|
||||||
|
__u32 data;
|
||||||
|
} guest_msi;
|
||||||
|
__u32 reserved[12];
|
||||||
|
};
|
||||||
|
};
|
||||||
|
|
||||||
|
The following flags are defined:
|
||||||
|
|
||||||
|
#define KVM_DEV_IRQ_HOST_INTX (1 << 0)
|
||||||
|
#define KVM_DEV_IRQ_HOST_MSI (1 << 1)
|
||||||
|
#define KVM_DEV_IRQ_HOST_MSIX (1 << 2)
|
||||||
|
|
||||||
|
#define KVM_DEV_IRQ_GUEST_INTX (1 << 8)
|
||||||
|
#define KVM_DEV_IRQ_GUEST_MSI (1 << 9)
|
||||||
|
#define KVM_DEV_IRQ_GUEST_MSIX (1 << 10)
|
||||||
|
|
||||||
|
It is not valid to specify multiple types per host or guest IRQ. However, the
|
||||||
|
IRQ type of host and guest can differ or can even be null.
|
||||||
|
|
||||||
|
4.50 KVM_DEASSIGN_DEV_IRQ
|
||||||
|
|
||||||
|
Capability: KVM_CAP_ASSIGN_DEV_IRQ
|
||||||
|
Architectures: x86 ia64
|
||||||
|
Type: vm ioctl
|
||||||
|
Parameters: struct kvm_assigned_irq (in)
|
||||||
|
Returns: 0 on success, -1 on error
|
||||||
|
|
||||||
|
Ends an IRQ assignment to a passed-through device.
|
||||||
|
|
||||||
|
See KVM_ASSIGN_DEV_IRQ for the data structure. The target device is specified
|
||||||
|
by assigned_dev_id, flags must correspond to the IRQ type specified on
|
||||||
|
KVM_ASSIGN_DEV_IRQ. Partial deassignment of host or guest IRQ is allowed.
|
||||||
|
|
||||||
|
4.51 KVM_SET_GSI_ROUTING
|
||||||
|
|
||||||
|
Capability: KVM_CAP_IRQ_ROUTING
|
||||||
|
Architectures: x86 ia64
|
||||||
|
Type: vm ioctl
|
||||||
|
Parameters: struct kvm_irq_routing (in)
|
||||||
|
Returns: 0 on success, -1 on error
|
||||||
|
|
||||||
|
Sets the GSI routing table entries, overwriting any previously set entries.
|
||||||
|
|
||||||
|
struct kvm_irq_routing {
|
||||||
|
__u32 nr;
|
||||||
|
__u32 flags;
|
||||||
|
struct kvm_irq_routing_entry entries[0];
|
||||||
|
};
|
||||||
|
|
||||||
|
No flags are specified so far, the corresponding field must be set to zero.
|
||||||
|
|
||||||
|
struct kvm_irq_routing_entry {
|
||||||
|
__u32 gsi;
|
||||||
|
__u32 type;
|
||||||
|
__u32 flags;
|
||||||
|
__u32 pad;
|
||||||
|
union {
|
||||||
|
struct kvm_irq_routing_irqchip irqchip;
|
||||||
|
struct kvm_irq_routing_msi msi;
|
||||||
|
__u32 pad[8];
|
||||||
|
} u;
|
||||||
|
};
|
||||||
|
|
||||||
|
/* gsi routing entry types */
|
||||||
|
#define KVM_IRQ_ROUTING_IRQCHIP 1
|
||||||
|
#define KVM_IRQ_ROUTING_MSI 2
|
||||||
|
|
||||||
|
No flags are specified so far, the corresponding field must be set to zero.
|
||||||
|
|
||||||
|
struct kvm_irq_routing_irqchip {
|
||||||
|
__u32 irqchip;
|
||||||
|
__u32 pin;
|
||||||
|
};
|
||||||
|
|
||||||
|
struct kvm_irq_routing_msi {
|
||||||
|
__u32 address_lo;
|
||||||
|
__u32 address_hi;
|
||||||
|
__u32 data;
|
||||||
|
__u32 pad;
|
||||||
|
};
|
||||||
|
|
||||||
|
4.52 KVM_ASSIGN_SET_MSIX_NR
|
||||||
|
|
||||||
|
Capability: KVM_CAP_DEVICE_MSIX
|
||||||
|
Architectures: x86 ia64
|
||||||
|
Type: vm ioctl
|
||||||
|
Parameters: struct kvm_assigned_msix_nr (in)
|
||||||
|
Returns: 0 on success, -1 on error
|
||||||
|
|
||||||
|
Set the number of MSI-X interrupts for an assigned device. This service can
|
||||||
|
only be called once in the lifetime of an assigned device.
|
||||||
|
|
||||||
|
struct kvm_assigned_msix_nr {
|
||||||
|
__u32 assigned_dev_id;
|
||||||
|
__u16 entry_nr;
|
||||||
|
__u16 padding;
|
||||||
|
};
|
||||||
|
|
||||||
|
#define KVM_MAX_MSIX_PER_DEV 256
|
||||||
|
|
||||||
|
4.53 KVM_ASSIGN_SET_MSIX_ENTRY
|
||||||
|
|
||||||
|
Capability: KVM_CAP_DEVICE_MSIX
|
||||||
|
Architectures: x86 ia64
|
||||||
|
Type: vm ioctl
|
||||||
|
Parameters: struct kvm_assigned_msix_entry (in)
|
||||||
|
Returns: 0 on success, -1 on error
|
||||||
|
|
||||||
|
Specifies the routing of an MSI-X assigned device interrupt to a GSI. Setting
|
||||||
|
the GSI vector to zero means disabling the interrupt.
|
||||||
|
|
||||||
|
struct kvm_assigned_msix_entry {
|
||||||
|
__u32 assigned_dev_id;
|
||||||
|
__u32 gsi;
|
||||||
|
__u16 entry; /* The index of entry in the MSI-X table */
|
||||||
|
__u16 padding[3];
|
||||||
|
};
|
||||||
|
|
||||||
5. The kvm_run structure
|
5. The kvm_run structure
|
||||||
|
|
||||||
Application code obtains a pointer to the kvm_run structure by
|
Application code obtains a pointer to the kvm_run structure by
|
||||||
|
|
Loading…
Reference in New Issue