diff --git a/hypervisor/Makefile b/hypervisor/Makefile index ccf78b3a3..cde5fb99f 100644 --- a/hypervisor/Makefile +++ b/hypervisor/Makefile @@ -245,7 +245,6 @@ VP_BASE_C_SRCS += arch/x86/guest/ucode.c VP_BASE_C_SRCS += boot/guest/vboot_info.c VP_BASE_C_SRCS += common/hv_main.c VP_BASE_C_SRCS += common/vm_load.c -VP_BASE_C_SRCS += arch/x86/configs/vmptable.c VP_BASE_C_SRCS += arch/x86/configs/pci_dev.c VP_BASE_C_SRCS += arch/x86/configs/vacpi.c VP_BASE_C_SRCS += arch/x86/configs/$(CONFIG_BOARD)/ve820.c diff --git a/hypervisor/arch/x86/configs/vmptable.c b/hypervisor/arch/x86/configs/vmptable.c deleted file mode 100644 index 9dcd0edcf..000000000 --- a/hypervisor/arch/x86/configs/vmptable.c +++ /dev/null @@ -1,142 +0,0 @@ -/* - * Copyright (C) 2018 Intel Corporation. All rights reserved. - * - * SPDX-License-Identifier: BSD-3-Clause - */ - -#include -#include -#include -#include - -static struct mptable_info vm_mptables[CONFIG_MAX_VM_NUM]; - -static struct mptable_info mptable_template = { - .mpfp = { - .signature = MPFP_SIG, - .pap = MPTABLE_BASE + sizeof(struct mpfps), - .length = 1U, - .spec_rev = MP_SPECREV, - }, - .mpch = { - .signature = MPCH_SIG, - .spec_rev = MP_SPECREV, - .oem_id = MPCH_OEMID, - .product_id = MPCH_PRODID, - .apic_address = LAPIC_BASE, - }, - .bus_entry_array = { - { - .type = MPCT_ENTRY_BUS, - .bus_id = 0U, - .bus_type = MPE_BUSNAME_PCI, - }, - { - .type = MPCT_ENTRY_BUS, - .bus_id = 1U, - .bus_type = MPE_BUSNAME_ISA, - }, - }, - .int_entry_array = { - { - .type = MPCT_ENTRY_LOCAL_INT, - .int_type = INTENTRY_TYPE_EXTINT, - .int_flags = INTENTRY_FLAGS_POLARITY_CONFORM \ - | INTENTRY_FLAGS_TRIGGER_CONFORM, - .dst_apic_id = 0xFFU, - .dst_apic_int = 0U, - }, - { - .type = MPCT_ENTRY_LOCAL_INT, - .int_type = INTENTRY_TYPE_NMI, - .int_flags = INTENTRY_FLAGS_POLARITY_CONFORM \ - | INTENTRY_FLAGS_TRIGGER_CONFORM, - .dst_apic_id = 0xFFU, - .dst_apic_int = 1U, - }, - }, -}; - -static struct proc_entry proc_entry_template = { - .type = MPCT_ENTRY_PROCESSOR, - .apic_version = LAPIC_VERSION_NUM, - .cpu_flags = PROCENTRY_FLAG_EN, - .cpu_signature = MPEP_SIG, - .feature_flags = MPEP_FEATURES -}; - -static uint8_t mpt_compute_checksum(const void *base, size_t len) -{ - uint8_t sum = 0U; - size_t length; - const uint8_t *bytes = (const uint8_t *)base; - - for (length = len; length > 0U; length--) { - sum += *bytes; - bytes++; - } - - return (~sum) + 1U; -} - -/** - * @pre vm != NULL - * @pre vm->vm_id < CONFIG_MAX_VM_NUM - */ -int32_t mptable_build(struct acrn_vm *vm) -{ - struct mpcth *mpch; - struct mpfps *mpfp; - struct mptable_info *mpinfo; - size_t mptable_length; - uint16_t i; - uint16_t vcpu_num; - int32_t ret = 0; - uint64_t pcpu_bitmap = 0U; - struct mptable_info *mptable; - struct acrn_vm_config *vm_config; - - vm_config = get_vm_config(vm->vm_id); - mptable = &vm_mptables[vm->vm_id]; - vcpu_num = vm->hw.created_vcpus; - pcpu_bitmap = vm_config->pcpu_bitmap; - (void)memcpy_s((void *)mptable, sizeof(struct mptable_info), - (const void *)&mptable_template, sizeof(struct mptable_info)); - - mptable->mpch.entry_count = vcpu_num + MPE_NUM_BUSES + MPEII_NUM_LOCAL_IRQ; - mptable->mpch.base_table_length = (uint16_t)sizeof(struct mpcth) - + vcpu_num * (uint16_t)sizeof(struct proc_entry) - + MPE_NUM_BUSES * (uint16_t)sizeof(struct bus_entry) - + MPEII_NUM_LOCAL_IRQ * (uint16_t)sizeof(struct int_entry); - - mptable_length = sizeof(struct mpfps) + (uint32_t)mptable->mpch.base_table_length; - if (mptable_length <= MPTABLE_MAX_LENGTH) { - for (i = 0U; i < vcpu_num; i++) { - uint16_t pcpu_id = ffs64(pcpu_bitmap); - - (void)memcpy_s((void *)(mptable->proc_entry_array + i), sizeof(struct proc_entry), - (const void *)&proc_entry_template, sizeof(struct proc_entry)); - mptable->proc_entry_array[i].apic_id = (uint8_t) i; - if (i == 0U) { - mptable->proc_entry_array[i].cpu_flags |= PROCENTRY_FLAG_BP; - } - bitmap_clear_lock(pcpu_id, &pcpu_bitmap); - } - - /* Copy mptable info into guest memory */ - (void)copy_to_gpa(vm, (void *)mptable, MPTABLE_BASE, mptable_length); - - mpinfo = (struct mptable_info *) gpa2hva(vm, MPTABLE_BASE); - stac(); - mpfp = &mpinfo->mpfp; - mpfp->checksum = mpt_compute_checksum(mpfp, sizeof(struct mpfps)); - mpch = &mpinfo->mpch; - mpch->checksum = mpt_compute_checksum(mpch, mpch->base_table_length); - clac(); - ret = 0; - } else { - ret = -1; - } - - return ret; -} diff --git a/hypervisor/arch/x86/guest/vm.c b/hypervisor/arch/x86/guest/vm.c index 9469ade99..9104828c8 100644 --- a/hypervisor/arch/x86/guest/vm.c +++ b/hypervisor/arch/x86/guest/vm.c @@ -742,7 +742,6 @@ void prepare_vm(uint16_t vm_id, struct acrn_vm_config *vm_config) if (err == 0) { if (is_prelaunched_vm(vm)) { - (void)mptable_build(vm); build_vacpi(vm); } diff --git a/hypervisor/include/arch/x86/vm_config.h b/hypervisor/include/arch/x86/vm_config.h index c4d21e29f..1e073ebd6 100644 --- a/hypervisor/include/arch/x86/vm_config.h +++ b/hypervisor/include/arch/x86/vm_config.h @@ -11,7 +11,6 @@ #include #include #include -#include #include #include #include diff --git a/hypervisor/include/dm/mptable.h b/hypervisor/include/dm/mptable.h deleted file mode 100644 index dd189da06..000000000 --- a/hypervisor/include/dm/mptable.h +++ /dev/null @@ -1,151 +0,0 @@ -/* - * Copyright (C) 2018 Intel Corporation. All rights reserved. - * - * SPDX-License-Identifier: BSD-3-Clause - */ - -/************************************************************************ - * - * FILE NAME - * - * mptable.h - * - * DESCRIPTION - * - * This file defines API and extern variable for VM mptable info - * - ************************************************************************/ -/**********************************/ -/* EXTERNAL VARIABLES */ -/**********************************/ -#ifndef MPTABLE_H -#define MPTABLE_H - -#define MPTABLE_BASE 0xF0000U - -/* - * floating pointer length + maximum length of configuration table - * ACRN uses contiguous guest memory from 0xF0000 to place floating pointer - * structure and config table. Maximum length of config table is 64K. So the - * maximum length of combined floating pointer and config table can go up to - * 64K + 16 bytes.Since we are left with only 64K from 0xF0000 to 0x100000(1MB) - * max length is limited to 64K. - */ -#define MPTABLE_MAX_LENGTH 65536U - -#define LAPIC_VERSION_NUM 16U - -#define MP_SPECREV 4U -#define MPFP_SIG "_MP_" - -/* Configuration header defines */ -#define MPCH_SIG "PCMP" -#define MPCH_OEMID "ACRN " -#define MPCH_OEMID_LEN 8U -#define MPCH_PRODID "Hypervisor " -#define MPCH_PRODID_LEN 12U - -/* Processor entry defines */ -#define MPEP_SIG_FAMILY 6U -#define MPEP_SIG_MODEL 26U -#define MPEP_SIG_STEPPING 5U -#define MPEP_SIG \ - ((MPEP_SIG_FAMILY << 8U) | \ - (MPEP_SIG_MODEL << 4U) | \ - (MPEP_SIG_STEPPING)) - -#define MPEP_FEATURES 0xBFEBFBFFU /* XXX Intel i7 */ - -/* Number of local intr entries */ -#define MPEII_NUM_LOCAL_IRQ 2U - -/* Bus entry defines */ -#define MPE_NUM_BUSES 2U -#define MPE_BUSNAME_LEN 6U -#define MPE_BUSNAME_ISA "ISA " -#define MPE_BUSNAME_PCI "PCI " - -/* Base table entries */ - -#define MPCT_ENTRY_PROCESSOR 0U -#define MPCT_ENTRY_BUS 1U -#define MPCT_ENTRY_LOCAL_INT 4U - -#define PROCENTRY_FLAG_EN 0x01U -#define PROCENTRY_FLAG_BP 0x02U - -#define INTENTRY_TYPE_NMI 1U -#define INTENTRY_TYPE_EXTINT 3U - -#define INTENTRY_FLAGS_POLARITY_CONFORM 0x0U -#define INTENTRY_FLAGS_TRIGGER_CONFORM 0x0U - -/* MP Floating Pointer Structure */ -struct mpfps { - char signature[4]; - uint32_t pap; - uint8_t length; - uint8_t spec_rev; - uint8_t checksum; - uint8_t config_type; - uint8_t mpfb2; - uint8_t mpfb3; - uint8_t mpfb4; - uint8_t mpfb5; -} __packed; - -/* MP Configuration Table Header */ -struct mpcth { - char signature[4]; - uint16_t base_table_length; - uint8_t spec_rev; - uint8_t checksum; - char oem_id[8]; - char product_id[12]; - uint32_t oem_table_pointer; - uint16_t oem_table_size; - uint16_t entry_count; - uint32_t apic_address; - uint16_t extended_table_length; - uint8_t extended_table_checksum; - uint8_t reserved; -} __packed; - -struct proc_entry { - uint8_t type; - uint8_t apic_id; - uint8_t apic_version; - uint8_t cpu_flags; - uint32_t cpu_signature; - uint32_t feature_flags; - uint32_t reserved1; - uint32_t reserved2; -} __packed; - -struct bus_entry { - uint8_t type; - uint8_t bus_id; - char bus_type[6]; -} __packed; - -struct int_entry { - uint8_t type; - uint8_t int_type; - uint16_t int_flags; - uint8_t src_bus_id; - uint8_t src_bus_irq; - uint8_t dst_apic_id; - uint8_t dst_apic_int; -} __packed; - -struct mptable_info { - struct mpfps mpfp; - struct mpcth mpch; - struct bus_entry bus_entry_array[MPE_NUM_BUSES]; - struct int_entry int_entry_array[MPEII_NUM_LOCAL_IRQ]; - struct proc_entry proc_entry_array[CONFIG_MAX_PCPU_NUM]; -}; - -int32_t mptable_build(struct acrn_vm *vm); - -#endif /* MPTABLE_H */