hv: mmio_dev: add mmio device pass through support

Add mmio device pass through support for pre-launched VM.
When we pass through a MMIO device to pre-launched VM, we would remove its
resource from the SOS. Now these resources only include the MMIO regions.

Tracked-On: #5053
Acked-by: Eddie Dong <eddie.dong@intel.com>
Signed-off-by: Li Fei1 <fei1.li@intel.com>
This commit is contained in:
Li Fei1 2020-07-16 17:20:21 +08:00 committed by wenlingz
parent f13d5c25b6
commit acc69007e2
2 changed files with 14 additions and 0 deletions

View File

@ -32,6 +32,7 @@
#include <pci_dev.h>
#include <vacpi.h>
#include <platform_caps.h>
#include <mmio_dev.h>
vm_sw_loader_t vm_sw_loader;
@ -257,6 +258,10 @@ static void prepare_prelaunched_vm_memmap(struct acrn_vm *vm, const struct acrn_
remaining_hpa_size = vm_config->memory.size_hpa2;
}
}
for (i = 0U; i < MAX_MMIO_DEV_NUM; i++) {
(void)assign_mmio_dev(vm, &vm_config->mmiodevs[i]);
}
}
/**
@ -328,6 +333,10 @@ static void prepare_sos_vm_memmap(struct acrn_vm *vm)
if (vm_config->load_order == PRE_LAUNCHED_VM) {
ept_del_mr(vm, pml4_page, vm_config->memory.start_hpa, vm_config->memory.size);
}
for (i = 0U; i < MAX_MMIO_DEV_NUM; i++) {
(void)deassign_mmio_dev(vm, &vm_config->mmiodevs[i]);
}
}
/* unmap AP trampoline code for security

View File

@ -14,6 +14,7 @@
#include <vm_uuids.h>
#include <vm_configurations.h>
#include <sgx.h>
#include <acrn_hv_defs.h>
#define CONFIG_MAX_VM_NUM (PRE_VM_NUM + SOS_VM_NUM + MAX_POST_VM_NUM)
@ -33,6 +34,8 @@
#define PCI_DEV_TYPE_HVEMUL (1U << 1U)
#define PCI_DEV_TYPE_SOSEMUL (1U << 2U)
#define MAX_MMIO_DEV_NUM 2U
#define CONFIG_SOS_VM .load_order = SOS_VM, \
.uuid = SOS_VM_UUID, \
.severity = SEVERITY_SOS, \
@ -174,6 +177,8 @@ struct acrn_vm_config {
*/
struct vuart_config vuart[MAX_VUART_NUM_PER_VM];/* vuart configuration for VM */
struct acrn_mmiodev mmiodevs[MAX_MMIO_DEV_NUM];
} __aligned(8);
struct acrn_vm_config *get_vm_config(uint16_t vm_id);