mirror of
https://github.com/acidanthera/audk.git
synced 2025-07-27 07:34:06 +02:00
UefiCpuPkg/CpuS3DataDxe: Move StartupVector allocation to EndOfDxe()
Currently, we will allocate StartupVector buffer under 1MB at entry point function. But some modules may allocate some hard code address under 1MB. For example, LegacyBiosDxe driver tries to manage some legacy range under 640KB. To avoid the conflicts, we move StartupVector buffer allocation to End Of DXE event callback function. v4: Update the Context parameter is used as a pointer to AcpiCpuDataEx, then we needn't to add the global variable. Cc: Michael Kinney <michael.d.kinney@intel.com> Cc: Feng Tian <feng.tian@intel.com> Cc: Giri P Mudusuru <giri.p.mudusuru@intel.com> Cc: Laszlo Ersek <lersek@redhat.com> Contributed-under: TianoCore Contribution Agreement 1.0 Signed-off-by: Jeff Fan <jeff.fan@intel.com> Reviewed-by: Giri P Mudusuru <giri.p.mudusuru@intel.com> Reviewed-by: Michael Kinney <michael.d.kinney@intel.com> Tested-by: Laszlo Ersek <lersek@redhat.com> Tested-by: Michael Kinney <michael.d.kinney@intel.com>
This commit is contained in:
parent
5aa2d57667
commit
65b24ada79
@ -9,7 +9,7 @@ number of CPUs reported by the MP Services Protocol, so this module does not
|
|||||||
support hot plug CPUs. This module can be copied into a CPU specific package
|
support hot plug CPUs. This module can be copied into a CPU specific package
|
||||||
and customized if these additional features are required.
|
and customized if these additional features are required.
|
||||||
|
|
||||||
Copyright (c) 2013 - 2015, Intel Corporation. All rights reserved.<BR>
|
Copyright (c) 2013 - 2016, Intel Corporation. All rights reserved.<BR>
|
||||||
Copyright (c) 2015, Red Hat, Inc.
|
Copyright (c) 2015, Red Hat, Inc.
|
||||||
|
|
||||||
This program and the accompanying materials
|
This program and the accompanying materials
|
||||||
@ -84,20 +84,36 @@ AllocateAcpiNvsMemoryBelow4G (
|
|||||||
/**
|
/**
|
||||||
Callback function executed when the EndOfDxe event group is signaled.
|
Callback function executed when the EndOfDxe event group is signaled.
|
||||||
|
|
||||||
We delay saving the MTRR settings until BDS signals EndOfDxe.
|
We delay allocating StartupVector and saving the MTRR settings until BDS signals EndOfDxe.
|
||||||
|
|
||||||
@param[in] Event Event whose notification function is being invoked.
|
@param[in] Event Event whose notification function is being invoked.
|
||||||
@param[out] Context Pointer to the MTRR_SETTINGS buffer to fill in.
|
@param[out] Context Pointer to the MTRR_SETTINGS buffer to fill in.
|
||||||
**/
|
**/
|
||||||
VOID
|
VOID
|
||||||
EFIAPI
|
EFIAPI
|
||||||
SaveMtrrsOnEndOfDxe (
|
CpuS3DataOnEndOfDxe (
|
||||||
IN EFI_EVENT Event,
|
IN EFI_EVENT Event,
|
||||||
OUT VOID *Context
|
OUT VOID *Context
|
||||||
)
|
)
|
||||||
{
|
{
|
||||||
|
EFI_STATUS Status;
|
||||||
|
ACPI_CPU_DATA_EX *AcpiCpuDataEx;
|
||||||
|
|
||||||
|
AcpiCpuDataEx = (ACPI_CPU_DATA_EX *) Context;
|
||||||
|
//
|
||||||
|
// Allocate a 4KB reserved page below 1MB
|
||||||
|
//
|
||||||
|
AcpiCpuDataEx->AcpiCpuData.StartupVector = BASE_1MB - 1;
|
||||||
|
Status = gBS->AllocatePages (
|
||||||
|
AllocateMaxAddress,
|
||||||
|
EfiReservedMemoryType,
|
||||||
|
1,
|
||||||
|
&AcpiCpuDataEx->AcpiCpuData.StartupVector
|
||||||
|
);
|
||||||
|
ASSERT_EFI_ERROR (Status);
|
||||||
|
|
||||||
DEBUG ((EFI_D_VERBOSE, "%a\n", __FUNCTION__));
|
DEBUG ((EFI_D_VERBOSE, "%a\n", __FUNCTION__));
|
||||||
MtrrGetAllMtrrs (Context);
|
MtrrGetAllMtrrs (&AcpiCpuDataEx->MtrrTable);
|
||||||
|
|
||||||
//
|
//
|
||||||
// Close event, so it will not be invoked again.
|
// Close event, so it will not be invoked again.
|
||||||
@ -161,18 +177,6 @@ CpuS3DataInitialize (
|
|||||||
);
|
);
|
||||||
ASSERT_EFI_ERROR (Status);
|
ASSERT_EFI_ERROR (Status);
|
||||||
|
|
||||||
//
|
|
||||||
// Allocate a 4KB reserved page below 1MB
|
|
||||||
//
|
|
||||||
AcpiCpuData->StartupVector = BASE_1MB - 1;
|
|
||||||
Status = gBS->AllocatePages (
|
|
||||||
AllocateMaxAddress,
|
|
||||||
EfiReservedMemoryType,
|
|
||||||
1,
|
|
||||||
&AcpiCpuData->StartupVector
|
|
||||||
);
|
|
||||||
ASSERT_EFI_ERROR (Status);
|
|
||||||
|
|
||||||
//
|
//
|
||||||
// Get the number of CPUs
|
// Get the number of CPUs
|
||||||
//
|
//
|
||||||
@ -255,13 +259,13 @@ CpuS3DataInitialize (
|
|||||||
|
|
||||||
//
|
//
|
||||||
// Register EFI_END_OF_DXE_EVENT_GROUP_GUID event.
|
// Register EFI_END_OF_DXE_EVENT_GROUP_GUID event.
|
||||||
// The notification function saves MTRRs for ACPI_CPU_DATA
|
// The notification function allocates StartupVector and saves MTRRs for ACPI_CPU_DATA
|
||||||
//
|
//
|
||||||
Status = gBS->CreateEventEx (
|
Status = gBS->CreateEventEx (
|
||||||
EVT_NOTIFY_SIGNAL,
|
EVT_NOTIFY_SIGNAL,
|
||||||
TPL_CALLBACK,
|
TPL_CALLBACK,
|
||||||
SaveMtrrsOnEndOfDxe,
|
CpuS3DataOnEndOfDxe,
|
||||||
&AcpiCpuDataEx->MtrrTable,
|
AcpiCpuData,
|
||||||
&gEfiEndOfDxeEventGroupGuid,
|
&gEfiEndOfDxeEventGroupGuid,
|
||||||
&Event
|
&Event
|
||||||
);
|
);
|
||||||
|
@ -9,7 +9,7 @@
|
|||||||
# support hot plug CPUs. This module can be copied into a CPU specific package
|
# support hot plug CPUs. This module can be copied into a CPU specific package
|
||||||
# and customized if these additional features are required.
|
# and customized if these additional features are required.
|
||||||
#
|
#
|
||||||
# Copyright (c) 2013-2015, Intel Corporation. All rights reserved.<BR>
|
# Copyright (c) 2013-2016, Intel Corporation. All rights reserved.<BR>
|
||||||
# Copyright (c) 2015, Red Hat, Inc.
|
# Copyright (c) 2015, Red Hat, Inc.
|
||||||
#
|
#
|
||||||
# This program and the accompanying materials
|
# This program and the accompanying materials
|
||||||
|
Loading…
x
Reference in New Issue
Block a user