UefiCpuPkg/SmmCpuFeaturesLib: Cleanup library constructors

There's currently two library instances:
  1. SmmCpuFeaturesLib
  2. SmmCpuFeaturesLibStm

There's two constructor functions:
  1. SmmCpuFeaturesLibConstructor()
  2. SmmCpuFeaturesLibStmConstructor()

SmmCpuFeaturesLibConstructor() is called by
SmmCpuFeaturesLibStmConstructor() since the functionality in that
function is required by both library instances.

The declaration for SmmCpuFeaturesLibConstructor() is embedded in
"SmmStm.c" instead of being declared in a header file. Further,
that constructor function is called by the STM specific constructor.

This change moves the common code to a function called
CpuFeaturesLibInitialization() which is declared in an internal
library header file "CpuFeaturesLib.h". Each constructor simply
calls this function to perform the common functionality.

Additionally, SmmCpuFeaturesLibConstructor() is moved from
SmmCpuFeaturesLibNoStm.c into a instance-specific file allowing
SmmCpuFeaturesLibNoStm.c to contain no STM implementation agnostic
to a particular library instance.

Cc: Eric Dong <eric.dong@intel.com>
Cc: Ray Ni <ray.ni@intel.com>
Cc: Laszlo Ersek <lersek@redhat.com>
Cc: Rahul Kumar <rahul1.kumar@intel.com>
Signed-off-by: Michael Kubacki <michael.kubacki@microsoft.com>
Reviewed-by: Laszlo Ersek <lersek@redhat.com>
Message-Id: <20210217213227.1277-4-mikuback@linux.microsoft.com>
Reviewed-by: Eric Dong <eric.dong@intel.com>
This commit is contained in:
Michael Kubacki
2021-02-17 13:32:25 -08:00
committed by mergify[bot]
parent 61dc3b3399
commit 2002e950ea
5 changed files with 54 additions and 32 deletions

View File

@ -9,6 +9,18 @@
#ifndef CPU_FEATURES_LIB_H_ #ifndef CPU_FEATURES_LIB_H_
#define CPU_FEATURES_LIB_H_ #define CPU_FEATURES_LIB_H_
/**
Performs library initialization.
This initialization function contains common functionality shared betwen all
library instance constructors.
**/
VOID
CpuFeaturesLibInitialization (
VOID
);
/** /**
Internal worker function that is called to complete CPU initialization at the Internal worker function that is called to complete CPU initialization at the
end of SmmCpuFeaturesInitializeProcessor(). end of SmmCpuFeaturesInitializeProcessor().

View File

@ -0,0 +1,31 @@
/** @file
Implementation specific to the SmmCpuFeatureLib library instance.
Copyright (c) Microsoft Corporation.<BR>
SPDX-License-Identifier: BSD-2-Clause-Patent
**/
#include <PiSmm.h>
#include "CpuFeaturesLib.h"
/**
The constructor function for the Traditional MM library instance without STM.
@param[in] ImageHandle The firmware allocated handle for the EFI image.
@param[in] SystemTable A pointer to the EFI System Table.
@retval EFI_SUCCESS The constructor always returns EFI_SUCCESS.
**/
EFI_STATUS
EFIAPI
SmmCpuFeaturesLibConstructor (
IN EFI_HANDLE ImageHandle,
IN EFI_SYSTEM_TABLE *SystemTable
)
{
CpuFeaturesLibInitialization ();
return EFI_SUCCESS;
}

View File

@ -18,6 +18,7 @@
[Sources] [Sources]
CpuFeaturesLib.h CpuFeaturesLib.h
SmmCpuFeaturesLib.c
SmmCpuFeaturesLibCommon.c SmmCpuFeaturesLibCommon.c
SmmCpuFeaturesLibNoStm.c SmmCpuFeaturesLibNoStm.c

View File

@ -2,6 +2,7 @@
Implementation shared across all library instances. Implementation shared across all library instances.
Copyright (c) 2010 - 2019, Intel Corporation. All rights reserved.<BR> Copyright (c) 2010 - 2019, Intel Corporation. All rights reserved.<BR>
Copyright (c) Microsoft Corporation.<BR>
SPDX-License-Identifier: BSD-2-Clause-Patent SPDX-License-Identifier: BSD-2-Clause-Patent
**/ **/
@ -63,19 +64,15 @@ BOOLEAN mNeedConfigureMtrrs = TRUE;
BOOLEAN *mSmrrEnabled; BOOLEAN *mSmrrEnabled;
/** /**
The constructor function Performs library initialization.
@param[in] ImageHandle The firmware allocated handle for the EFI image. This initialization function contains common functionality shared betwen all
@param[in] SystemTable A pointer to the EFI System Table. library instance constructors.
@retval EFI_SUCCESS The constructor always returns EFI_SUCCESS.
**/ **/
EFI_STATUS VOID
EFIAPI CpuFeaturesLibInitialization (
SmmCpuFeaturesLibConstructor ( VOID
IN EFI_HANDLE ImageHandle,
IN EFI_SYSTEM_TABLE *SystemTable
) )
{ {
UINT32 RegEax; UINT32 RegEax;
@ -162,8 +159,6 @@ SmmCpuFeaturesLibConstructor (
// //
mSmrrEnabled = (BOOLEAN *)AllocatePool (sizeof (BOOLEAN) * PcdGet32 (PcdCpuMaxLogicalProcessorNumber)); mSmrrEnabled = (BOOLEAN *)AllocatePool (sizeof (BOOLEAN) * PcdGet32 (PcdCpuMaxLogicalProcessorNumber));
ASSERT (mSmrrEnabled != NULL); ASSERT (mSmrrEnabled != NULL);
return EFI_SUCCESS;
} }
/** /**

View File

@ -30,22 +30,6 @@
#define RDWR_ACCS 3 #define RDWR_ACCS 3
#define FULL_ACCS 7 #define FULL_ACCS 7
/**
The constructor function
@param[in] ImageHandle The firmware allocated handle for the EFI image.
@param[in] SystemTable A pointer to the EFI System Table.
@retval EFI_SUCCESS The constructor always returns EFI_SUCCESS.
**/
EFI_STATUS
EFIAPI
SmmCpuFeaturesLibConstructor (
IN EFI_HANDLE ImageHandle,
IN EFI_SYSTEM_TABLE *SystemTable
);
EFI_HANDLE mStmSmmCpuHandle = NULL; EFI_HANDLE mStmSmmCpuHandle = NULL;
BOOLEAN mLockLoadMonitor = FALSE; BOOLEAN mLockLoadMonitor = FALSE;
@ -112,7 +96,7 @@ UINTN mMsegSize = 0;
BOOLEAN mStmConfigurationTableInitialized = FALSE; BOOLEAN mStmConfigurationTableInitialized = FALSE;
/** /**
The constructor function The constructor function for the Traditional MM library instance with STM.
@param[in] ImageHandle The firmware allocated handle for the EFI image. @param[in] ImageHandle The firmware allocated handle for the EFI image.
@param[in] SystemTable A pointer to the EFI System Table. @param[in] SystemTable A pointer to the EFI System Table.
@ -138,10 +122,9 @@ SmmCpuFeaturesLibStmConstructor (
SmmCpuFeaturesLibStmSmiEntryFixupAddress (); SmmCpuFeaturesLibStmSmiEntryFixupAddress ();
// //
// Call the common constructor function // Perform library initialization common across all instances
// //
Status = SmmCpuFeaturesLibConstructor (ImageHandle, SystemTable); CpuFeaturesLibInitialization ();
ASSERT_EFI_ERROR (Status);
// //
// Lookup the MP Services Protocol // Lookup the MP Services Protocol