diff --git a/UefiCpuPkg/Library/SmmCpuFeaturesLib/SmmCpuFeaturesLib.c b/UefiCpuPkg/Library/SmmCpuFeaturesLib/SmmCpuFeaturesLib.c index 1754f2df5f..31d73cd0b8 100644 --- a/UefiCpuPkg/Library/SmmCpuFeaturesLib/SmmCpuFeaturesLib.c +++ b/UefiCpuPkg/Library/SmmCpuFeaturesLib/SmmCpuFeaturesLib.c @@ -41,6 +41,16 @@ WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED. #define SMM_FEATURES_LIB_IA32_MCA_CAP 0x17D #define SMM_CODE_ACCESS_CHK_BIT BIT58 +/** + Internal worker function that is called to complete CPU initialization at the + end of SmmCpuFeaturesInitializeProcessor() + +**/ +VOID +FinishSmmCpuFeaturesInitializeProcessor ( + VOID + ); + // // Set default value to assume SMRR is not supported // @@ -257,7 +267,7 @@ SmmCpuFeaturesInitializeProcessor ( // Print message and halt if CPU is Monarch // if (IsMonarch) { - DEBUG ((EFI_D_ERROR, "SMM Base/Size does not meet alignment/size requirement!\n")); + DEBUG ((DEBUG_ERROR, "SMM Base/Size does not meet alignment/size requirement!\n")); CpuDeadLoop (); } } else { @@ -296,6 +306,11 @@ SmmCpuFeaturesInitializeProcessor ( } } } + + // + // Call internal worker function that completes the CPU initialization + // + FinishSmmCpuFeaturesInitializeProcessor (); } /** @@ -356,66 +371,6 @@ SmmCpuFeaturesSmmRelocationComplete ( { } -/** - Return the size, in bytes, of a custom SMI Handler in bytes. If 0 is - returned, then a custom SMI handler is not provided by this library, - and the default SMI handler must be used. - - @retval 0 Use the default SMI handler. - @retval > 0 Use the SMI handler installed by SmmCpuFeaturesInstallSmiHandler() - The caller is required to allocate enough SMRAM for each CPU to - support the size of the custom SMI handler. -**/ -UINTN -EFIAPI -SmmCpuFeaturesGetSmiHandlerSize ( - VOID - ) -{ - return 0; -} - -/** - Install a custom SMI handler for the CPU specified by CpuIndex. This function - is only called if SmmCpuFeaturesGetSmiHandlerSize() returns a size is greater - than zero and is called by the CPU that was elected as monarch during System - Management Mode initialization. - - @param[in] CpuIndex The index of the CPU to install the custom SMI handler. - The value must be between 0 and the NumberOfCpus field - in the System Management System Table (SMST). - @param[in] SmBase The SMBASE address for the CPU specified by CpuIndex. - @param[in] SmiStack The stack to use when an SMI is processed by the - the CPU specified by CpuIndex. - @param[in] StackSize The size, in bytes, if the stack used when an SMI is - processed by the CPU specified by CpuIndex. - @param[in] GdtBase The base address of the GDT to use when an SMI is - processed by the CPU specified by CpuIndex. - @param[in] GdtSize The size, in bytes, of the GDT used when an SMI is - processed by the CPU specified by CpuIndex. - @param[in] IdtBase The base address of the IDT to use when an SMI is - processed by the CPU specified by CpuIndex. - @param[in] IdtSize The size, in bytes, of the IDT used when an SMI is - processed by the CPU specified by CpuIndex. - @param[in] Cr3 The base address of the page tables to use when an SMI - is processed by the CPU specified by CpuIndex. -**/ -VOID -EFIAPI -SmmCpuFeaturesInstallSmiHandler ( - IN UINTN CpuIndex, - IN UINT32 SmBase, - IN VOID *SmiStack, - IN UINTN StackSize, - IN UINTN GdtBase, - IN UINTN GdtSize, - IN UINTN IdtBase, - IN UINTN IdtSize, - IN UINT32 Cr3 - ) -{ -} - /** Determines if MTRR registers must be configured to set SMRAM cache-ability when executing in System Management Mode. diff --git a/UefiCpuPkg/Library/SmmCpuFeaturesLib/SmmCpuFeaturesLib.inf b/UefiCpuPkg/Library/SmmCpuFeaturesLib/SmmCpuFeaturesLib.inf index 1735062b17..77908b0366 100644 --- a/UefiCpuPkg/Library/SmmCpuFeaturesLib/SmmCpuFeaturesLib.inf +++ b/UefiCpuPkg/Library/SmmCpuFeaturesLib/SmmCpuFeaturesLib.inf @@ -1,7 +1,7 @@ ## @file # The CPU specific programming for PiSmmCpuDxeSmm module. # -# Copyright (c) 2009 - 2015, Intel Corporation. All rights reserved.
+# Copyright (c) 2009 - 2016, Intel Corporation. All rights reserved.
# This program and the accompanying materials # are licensed and made available under the terms and conditions of the BSD License # which accompanies this distribution. The full text of the license may be found at @@ -24,6 +24,7 @@ [Sources] SmmCpuFeaturesLib.c + SmmCpuFeaturesLibNoStm.c [Packages] MdePkg/MdePkg.dec diff --git a/UefiCpuPkg/Library/SmmCpuFeaturesLib/SmmCpuFeaturesLibNoStm.c b/UefiCpuPkg/Library/SmmCpuFeaturesLib/SmmCpuFeaturesLibNoStm.c new file mode 100644 index 0000000000..e872eec0cd --- /dev/null +++ b/UefiCpuPkg/Library/SmmCpuFeaturesLib/SmmCpuFeaturesLibNoStm.c @@ -0,0 +1,89 @@ +/** @file +The CPU specific programming for PiSmmCpuDxeSmm module when STM support +is not included. + +Copyright (c) 2010 - 2016, Intel Corporation. All rights reserved.
+This program and the accompanying materials +are licensed and made available under the terms and conditions of the BSD License +which accompanies this distribution. The full text of the license may be found at +http://opensource.org/licenses/bsd-license.php + +THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS, +WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED. + +**/ + +#include +#include + +/** + Internal worker function that is called to complete CPU initialization at the + end of SmmCpuFeaturesInitializeProcessor() + +**/ +VOID +FinishSmmCpuFeaturesInitializeProcessor ( + VOID + ) +{ +} + +/** + Return the size, in bytes, of a custom SMI Handler in bytes. If 0 is + returned, then a custom SMI handler is not provided by this library, + and the default SMI handler must be used. + + @retval 0 Use the default SMI handler. + @retval > 0 Use the SMI handler installed by SmmCpuFeaturesInstallSmiHandler() + The caller is required to allocate enough SMRAM for each CPU to + support the size of the custom SMI handler. +**/ +UINTN +EFIAPI +SmmCpuFeaturesGetSmiHandlerSize ( + VOID + ) +{ + return 0; +} + +/** + Install a custom SMI handler for the CPU specified by CpuIndex. This function + is only called if SmmCpuFeaturesGetSmiHandlerSize() returns a size is greater + than zero and is called by the CPU that was elected as monarch during System + Management Mode initialization. + + @param[in] CpuIndex The index of the CPU to install the custom SMI handler. + The value must be between 0 and the NumberOfCpus field + in the System Management System Table (SMST). + @param[in] SmBase The SMBASE address for the CPU specified by CpuIndex. + @param[in] SmiStack The stack to use when an SMI is processed by the + the CPU specified by CpuIndex. + @param[in] StackSize The size, in bytes, if the stack used when an SMI is + processed by the CPU specified by CpuIndex. + @param[in] GdtBase The base address of the GDT to use when an SMI is + processed by the CPU specified by CpuIndex. + @param[in] GdtSize The size, in bytes, of the GDT used when an SMI is + processed by the CPU specified by CpuIndex. + @param[in] IdtBase The base address of the IDT to use when an SMI is + processed by the CPU specified by CpuIndex. + @param[in] IdtSize The size, in bytes, of the IDT used when an SMI is + processed by the CPU specified by CpuIndex. + @param[in] Cr3 The base address of the page tables to use when an SMI + is processed by the CPU specified by CpuIndex. +**/ +VOID +EFIAPI +SmmCpuFeaturesInstallSmiHandler ( + IN UINTN CpuIndex, + IN UINT32 SmBase, + IN VOID *SmiStack, + IN UINTN StackSize, + IN UINTN GdtBase, + IN UINTN GdtSize, + IN UINTN IdtBase, + IN UINTN IdtSize, + IN UINT32 Cr3 + ) +{ +}