UefiCpuPkg/PiSmmCpuDxeSmm: Remove SmBases relocation logic
This patch is to remove legacy SmBase relocation in PiSmmCpuDxeSmm Driver. The responsibility for SmBase relocation has been transferred to the SmmRelocationInit interface, which now handles the following tasks: 1. Relocates the SmBase for each processor. 2. Generates the gSmmBaseHobGuid HOB. As a result of this change, the PiSmmCpuDxeSmm driver's role in SMM environment setup is simplified to: 1. Utilize the gSmmBaseHobGuid to determine the SmBase. 2. Perform the ExecuteFirstSmiInit() to do early SMM initialization. Cc: Ray Ni <ray.ni@intel.com> Cc: Zeng Star <star.zeng@intel.com> Cc: Gerd Hoffmann <kraxel@redhat.com> Cc: Rahul Kumar <rahul1.kumar@intel.com> Signed-off-by: Jiaxin Wu <jiaxin.wu@intel.com> Reviewed-by: Ray Ni <ray.ni@intel.com>
This commit is contained in:
@@ -188,14 +188,6 @@ typedef struct {
|
||||
#define PROTECT_MODE_CODE_SEGMENT 0x08
|
||||
#define LONG_MODE_CODE_SEGMENT 0x38
|
||||
|
||||
//
|
||||
// The size 0x20 must be bigger than
|
||||
// the size of template code of SmmInit. Currently,
|
||||
// the size of SmmInit requires the 0x16 Bytes buffer
|
||||
// at least.
|
||||
//
|
||||
#define BACK_BUF_SIZE 0x20
|
||||
|
||||
#define EXCEPTION_VECTOR_NUMBER 0x20
|
||||
|
||||
#define INVALID_APIC_ID 0xFFFFFFFFFFFFFFFFULL
|
||||
@@ -357,12 +349,11 @@ SmmWriteSaveState (
|
||||
);
|
||||
|
||||
/**
|
||||
C function for SMI handler. To change all processor's SMMBase Register.
|
||||
Initialize SMM environment.
|
||||
|
||||
**/
|
||||
VOID
|
||||
EFIAPI
|
||||
SmmInitHandler (
|
||||
InitializeSmm (
|
||||
VOID
|
||||
);
|
||||
|
||||
@@ -375,18 +366,9 @@ ExecuteFirstSmiInit (
|
||||
VOID
|
||||
);
|
||||
|
||||
extern BOOLEAN mSmmRelocated;
|
||||
extern volatile BOOLEAN *mSmmInitialized;
|
||||
extern UINT32 mBspApicId;
|
||||
|
||||
extern CONST UINT8 gcSmmInitTemplate[];
|
||||
extern CONST UINT16 gcSmmInitSize;
|
||||
X86_ASSEMBLY_PATCH_LABEL gPatchSmmCr0;
|
||||
extern UINT32 mSmmCr0;
|
||||
X86_ASSEMBLY_PATCH_LABEL gPatchSmmCr3;
|
||||
extern UINT32 mSmmCr4;
|
||||
X86_ASSEMBLY_PATCH_LABEL gPatchSmmCr4;
|
||||
X86_ASSEMBLY_PATCH_LABEL gPatchSmmInitStack;
|
||||
X86_ASSEMBLY_PATCH_LABEL mPatchCetSupported;
|
||||
extern BOOLEAN mCetSupported;
|
||||
|
||||
@@ -475,7 +457,6 @@ extern UINTN mSmmStackArrayBase;
|
||||
extern UINTN mSmmStackArrayEnd;
|
||||
extern UINTN mSmmStackSize;
|
||||
extern EFI_SMM_CPU_SERVICE_PROTOCOL mSmmCpuService;
|
||||
extern IA32_DESCRIPTOR gcSmiInitGdtr;
|
||||
extern SMM_CPU_SEMAPHORES mSmmCpuSemaphores;
|
||||
extern UINTN mSemaphoreSize;
|
||||
extern SPIN_LOCK *mPFLock;
|
||||
@@ -793,18 +774,6 @@ FindSmramInfo (
|
||||
OUT UINT32 *SmrrSize
|
||||
);
|
||||
|
||||
/**
|
||||
Relocate SmmBases for each processor.
|
||||
|
||||
Execute on first boot and all S3 resumes
|
||||
|
||||
**/
|
||||
VOID
|
||||
EFIAPI
|
||||
SmmRelocateBases (
|
||||
VOID
|
||||
);
|
||||
|
||||
/**
|
||||
Page Fault handler for SMM use.
|
||||
|
||||
@@ -849,22 +818,6 @@ InitMsrSpinLockByIndex (
|
||||
IN UINT32 MsrIndex
|
||||
);
|
||||
|
||||
/**
|
||||
Hook return address of SMM Save State so that semaphore code
|
||||
can be executed immediately after AP exits SMM to indicate to
|
||||
the BSP that an AP has exited SMM after SMBASE relocation.
|
||||
|
||||
@param[in] CpuIndex The processor index.
|
||||
@param[in] RebasedFlag A pointer to a flag that is set to TRUE
|
||||
immediately after AP exits SMM.
|
||||
|
||||
**/
|
||||
VOID
|
||||
SemaphoreHook (
|
||||
IN UINTN CpuIndex,
|
||||
IN volatile BOOLEAN *RebasedFlag
|
||||
);
|
||||
|
||||
/**
|
||||
Configure SMM Code Access Check feature for all processors.
|
||||
SMM Feature Control MSR will be locked after configuration.
|
||||
@@ -874,33 +827,6 @@ ConfigSmmCodeAccessCheck (
|
||||
VOID
|
||||
);
|
||||
|
||||
/**
|
||||
Hook the code executed immediately after an RSM instruction on the currently
|
||||
executing CPU. The mode of code executed immediately after RSM must be
|
||||
detected, and the appropriate hook must be selected. Always clear the auto
|
||||
HALT restart flag if it is set.
|
||||
|
||||
@param[in] CpuIndex The processor index for the currently
|
||||
executing CPU.
|
||||
@param[in] CpuState Pointer to SMRAM Save State Map for the
|
||||
currently executing CPU.
|
||||
@param[in] NewInstructionPointer32 Instruction pointer to use if resuming to
|
||||
32-bit mode from 64-bit SMM.
|
||||
@param[in] NewInstructionPointer Instruction pointer to use if resuming to
|
||||
same mode as SMM.
|
||||
|
||||
@retval The value of the original instruction pointer before it was hooked.
|
||||
|
||||
**/
|
||||
UINT64
|
||||
EFIAPI
|
||||
HookReturnFromSmm (
|
||||
IN UINTN CpuIndex,
|
||||
SMRAM_SAVE_STATE_MAP *CpuState,
|
||||
UINT64 NewInstructionPointer32,
|
||||
UINT64 NewInstructionPointer
|
||||
);
|
||||
|
||||
/**
|
||||
Get the size of the SMI Handler in bytes.
|
||||
|
||||
@@ -1105,22 +1031,6 @@ AllocateCodePages (
|
||||
IN UINTN Pages
|
||||
);
|
||||
|
||||
/**
|
||||
Allocate aligned pages for code.
|
||||
|
||||
@param[in] Pages Number of pages to be allocated.
|
||||
@param[in] Alignment The requested alignment of the allocation.
|
||||
Must be a power of two.
|
||||
If Alignment is zero, then byte alignment is used.
|
||||
|
||||
@return Allocated memory.
|
||||
**/
|
||||
VOID *
|
||||
AllocateAlignedCodePages (
|
||||
IN UINTN Pages,
|
||||
IN UINTN Alignment
|
||||
);
|
||||
|
||||
//
|
||||
// S3 related global variable and function prototype.
|
||||
//
|
||||
@@ -1302,15 +1212,6 @@ EdkiiSmmGetMemoryAttributes (
|
||||
IN UINT64 *Attributes
|
||||
);
|
||||
|
||||
/**
|
||||
This function fixes up the address of the global variable or function
|
||||
referred in SmmInit assembly files to be the absolute address.
|
||||
**/
|
||||
VOID
|
||||
EFIAPI
|
||||
PiSmmCpuSmmInitFixupAddress (
|
||||
);
|
||||
|
||||
/**
|
||||
This function fixes up the address of the global variable or function
|
||||
referred in SmiEntry assembly files to be the absolute address.
|
||||
|
Reference in New Issue
Block a user