\r
#include <BlSupportSmm.h>\r
\r
-PLD_S3_COMMUNICATION mPldS3Hob;\r
-EFI_SMRAM_HOB_DESCRIPTOR_BLOCK *mSmramHob = NULL;\r
-PLD_SMM_REGISTERS *mSmmRegisterHob = NULL;;\r
-UINT64 mSmmFeatureControl = 0;\r
+PLD_S3_COMMUNICATION mPldS3Hob;\r
+EFI_SMRAM_HOB_DESCRIPTOR_BLOCK *mSmramHob = NULL;\r
+PLD_SMM_REGISTERS *mSmmRegisterHob = NULL;\r
+UINT64 mSmmFeatureControl = 0;\r
\r
/**\r
Save SMM rebase and SMI handler information to SMM communication area\r
**/\r
EFI_STATUS\r
SaveSmmInfoForS3 (\r
- IN UINT8 BlSwSmiHandlerInput\r
+ IN UINT8 BlSwSmiHandlerInput\r
)\r
{\r
- EFI_STATUS Status;\r
- EFI_PROCESSOR_INFORMATION ProcessorInfo;\r
- EFI_MP_SERVICES_PROTOCOL *MpService;\r
- CPU_SMMBASE *SmmBaseInfo;\r
- PLD_TO_BL_SMM_INFO *PldSmmInfo;\r
- UINTN Index;\r
-\r
- PldSmmInfo = (PLD_TO_BL_SMM_INFO *)(UINTN)mPldS3Hob.CommBuffer.PhysicalStart;\r
+ EFI_STATUS Status;\r
+ EFI_PROCESSOR_INFORMATION ProcessorInfo;\r
+ EFI_MP_SERVICES_PROTOCOL *MpService;\r
+ CPU_SMMBASE *SmmBaseInfo;\r
+ PLD_TO_BL_SMM_INFO *PldSmmInfo;\r
+ UINTN Index;\r
+\r
+ PldSmmInfo = (PLD_TO_BL_SMM_INFO *)(UINTN)mPldS3Hob.CommBuffer.PhysicalStart;\r
PldSmmInfo->Header.Header.HobLength = (UINT16)(sizeof (PLD_TO_BL_SMM_INFO) + gSmst->NumberOfCpus * sizeof (CPU_SMMBASE));\r
for (Index = 0; Index < mSmramHob->NumberOfSmmReservedRegions; Index++) {\r
if ((mPldS3Hob.CommBuffer.PhysicalStart >= mSmramHob->Descriptor[Index].PhysicalStart) &&\r
- (mPldS3Hob.CommBuffer.PhysicalStart < mSmramHob->Descriptor[Index].PhysicalStart + mSmramHob->Descriptor[Index].PhysicalSize)) {\r
+ (mPldS3Hob.CommBuffer.PhysicalStart < mSmramHob->Descriptor[Index].PhysicalStart + mSmramHob->Descriptor[Index].PhysicalSize))\r
+ {\r
break;\r
}\r
}\r
+\r
if (Index == mSmramHob->NumberOfSmmReservedRegions) {\r
return EFI_NOT_FOUND;\r
}\r
// Save APIC ID and SMM base\r
//\r
Status = gBS->LocateProtocol (&gEfiMpServiceProtocolGuid, NULL, (VOID **)&MpService);\r
- if (EFI_ERROR(Status)) {\r
+ if (EFI_ERROR (Status)) {\r
return Status;\r
}\r
- PldSmmInfo->S3Info.CpuCount = (UINT32)gSmst->NumberOfCpus;\r
- SmmBaseInfo = &PldSmmInfo->S3Info.SmmBase[0];\r
+\r
+ PldSmmInfo->S3Info.CpuCount = (UINT32)gSmst->NumberOfCpus;\r
+ SmmBaseInfo = &PldSmmInfo->S3Info.SmmBase[0];\r
for (Index = 0; Index < gSmst->NumberOfCpus; Index++) {\r
Status = MpService->GetProcessorInfo (MpService, Index, &ProcessorInfo);\r
- if (EFI_ERROR(Status)) {\r
+ if (EFI_ERROR (Status)) {\r
return Status;\r
}\r
\r
return EFI_SUCCESS;\r
}\r
\r
-\r
/**\r
Get specified SMI register based on given register ID\r
\r
**/\r
PLD_GENERIC_REGISTER *\r
GetRegisterById (\r
- UINT64 Id\r
+ UINT64 Id\r
)\r
{\r
- UINT32 Index;\r
+ UINT32 Index;\r
\r
for (Index = 0; Index < mSmmRegisterHob->Count; Index++) {\r
if (mSmmRegisterHob->Registers[Index].Id == Id) {\r
return &mSmmRegisterHob->Registers[Index];\r
}\r
}\r
+\r
return NULL;\r
}\r
\r
VOID\r
)\r
{\r
- PLD_GENERIC_REGISTER *SmiLockReg;\r
+ PLD_GENERIC_REGISTER *SmiLockReg;\r
\r
- DEBUG ((DEBUG_ERROR, "LockSmiGlobalEn .....\n"));\r
+ DEBUG ((DEBUG_ERROR, "LockSmiGlobalEn .....\n"));\r
\r
SmiLockReg = GetRegisterById (REGISTER_ID_SMI_GBL_EN_LOCK);\r
if (SmiLockReg == NULL) {\r
(SmiLockReg->Address.Address != 0) &&\r
(SmiLockReg->Address.RegisterBitWidth == 1) &&\r
(SmiLockReg->Address.AddressSpaceId == EFI_ACPI_3_0_SYSTEM_MEMORY) &&\r
- (SmiLockReg->Value == 1)) {\r
+ (SmiLockReg->Value == 1))\r
+ {\r
DEBUG ((DEBUG_ERROR, "LockSmiGlobalEn ....is locked\n"));\r
\r
MmioOr32 ((UINT32)SmiLockReg->Address.Address, 1 << SmiLockReg->Address.RegisterBitOffset);\r
VOID\r
)\r
{\r
-\r
if (mSmmFeatureControl != 0) {\r
return;\r
}\r
\r
- mSmmFeatureControl = AsmReadMsr64(MSR_SMM_FEATURE_CONTROL);\r
+ mSmmFeatureControl = AsmReadMsr64 (MSR_SMM_FEATURE_CONTROL);\r
if ((mSmmFeatureControl & 0x5) != 0x5) {\r
//\r
// Set Lock bit [BIT0] for this register and SMM code check enable bit [BIT2]\r
//\r
AsmWriteMsr64 (MSR_SMM_FEATURE_CONTROL, mSmmFeatureControl | 0x5);\r
}\r
- mSmmFeatureControl = AsmReadMsr64(MSR_SMM_FEATURE_CONTROL);\r
-}\r
-\r
\r
+ mSmmFeatureControl = AsmReadMsr64 (MSR_SMM_FEATURE_CONTROL);\r
+}\r
\r
/**\r
Function to program SMRR base and mask.\r
**/\r
VOID\r
SetSmrr (\r
- IN VOID *ProcedureArgument\r
+ IN VOID *ProcedureArgument\r
)\r
{\r
if (ProcedureArgument != NULL) {\r
VOID\r
)\r
{\r
- EFI_STATUS Status;\r
- SMRR_BASE_MASK Arguments;\r
- UINTN Index;\r
- UINT32 SmmBase;\r
- UINT32 SmmSize;\r
+ EFI_STATUS Status;\r
+ SMRR_BASE_MASK Arguments;\r
+ UINTN Index;\r
+ UINT32 SmmBase;\r
+ UINT32 SmmSize;\r
\r
if ((AsmReadMsr64 (MSR_IA32_SMRR_PHYSBASE) != 0) && ((AsmReadMsr64 (MSR_IA32_SMRR_PHYSMASK) & BIT11) != 0)) {\r
return;\r
DEBUG ((DEBUG_ERROR, "%d SMM ranges are not supported.\n", mSmramHob->NumberOfSmmReservedRegions));\r
return;\r
} else if (mSmramHob->NumberOfSmmReservedRegions == 2) {\r
- if ((mSmramHob->Descriptor[1].PhysicalStart + mSmramHob->Descriptor[1].PhysicalSize) == SmmBase){\r
+ if ((mSmramHob->Descriptor[1].PhysicalStart + mSmramHob->Descriptor[1].PhysicalSize) == SmmBase) {\r
SmmBase = (UINT32)(UINTN)mSmramHob->Descriptor[1].PhysicalStart;\r
} else if (mSmramHob->Descriptor[1].PhysicalStart != (SmmBase + SmmSize)) {\r
DEBUG ((DEBUG_ERROR, "Two SMM regions are not continous.\n"));\r
return;\r
}\r
+\r
SmmSize += (UINT32)(UINTN)mSmramHob->Descriptor[1].PhysicalSize;\r
}\r
\r
if ((SmmBase == 0) || (SmmSize < SIZE_4KB)) {\r
DEBUG ((DEBUG_ERROR, "Invalid SMM range.\n"));\r
- return ;\r
+ return;\r
}\r
\r
//\r
//\r
if ((SmmSize != GetPowerOfTwo32 (SmmSize)) || ((SmmBase & ~(SmmSize - 1)) != SmmBase)) {\r
DEBUG ((DEBUG_ERROR, " Invalid SMM range.\n"));\r
- return ;\r
+ return;\r
}\r
\r
//\r
//\r
// Program smrr base and mask on BSP first and then on APs\r
//\r
- SetSmrr(&Arguments);\r
+ SetSmrr (&Arguments);\r
for (Index = 0; Index < gSmst->NumberOfCpus; Index++) {\r
if (Index != gSmst->CurrentlyExecutingCpu) {\r
Status = gSmst->SmmStartupThisAp (SetSmrr, Index, (VOID *)&Arguments);\r
- if (EFI_ERROR(Status)) {\r
+ if (EFI_ERROR (Status)) {\r
DEBUG ((DEBUG_ERROR, "Programming SMRR on AP# %d status: %r\n", Index, Status));\r
}\r
}\r
}\r
}\r
\r
-\r
/**\r
Software SMI callback for restoring SMRR base and mask in S3 path.\r
\r
EFI_STATUS\r
EFIAPI\r
BlSwSmiHandler (\r
- IN EFI_HANDLE DispatchHandle,\r
- IN CONST VOID *Context,\r
- IN OUT VOID *CommBuffer,\r
- IN OUT UINTN *CommBufferSize\r
+ IN EFI_HANDLE DispatchHandle,\r
+ IN CONST VOID *Context,\r
+ IN OUT VOID *CommBuffer,\r
+ IN OUT UINTN *CommBufferSize\r
)\r
{\r
SetSmrrOnS3 ();\r
return EFI_SUCCESS;\r
}\r
\r
-\r
/**\r
Lock SMI in this SMM ready to lock event.\r
\r
EFI_STATUS\r
EFIAPI\r
BlSupportSmmReadyToLockCallback (\r
- IN CONST EFI_GUID *Protocol,\r
- IN VOID *Interface,\r
- IN EFI_HANDLE Handle\r
+ IN CONST EFI_GUID *Protocol,\r
+ IN VOID *Interface,\r
+ IN EFI_HANDLE Handle\r
)\r
{\r
//\r
return EFI_SUCCESS;\r
}\r
\r
-\r
/**\r
The driver's entry point.\r
\r
EFI_STATUS\r
EFIAPI\r
BlSupportSmm (\r
- IN EFI_HANDLE ImageHandle,\r
- IN EFI_SYSTEM_TABLE *SystemTable\r
+ IN EFI_HANDLE ImageHandle,\r
+ IN EFI_SYSTEM_TABLE *SystemTable\r
)\r
{\r
EFI_STATUS Status;\r
//\r
GuidHob = GetFirstGuidHob (&gS3CommunicationGuid);\r
if (GuidHob != NULL) {\r
- SmmHob = (VOID *) (GET_GUID_HOB_DATA(GuidHob));\r
- CopyMem (&mPldS3Hob, SmmHob, GET_GUID_HOB_DATA_SIZE(GuidHob));\r
+ SmmHob = (VOID *)(GET_GUID_HOB_DATA (GuidHob));\r
+ CopyMem (&mPldS3Hob, SmmHob, GET_GUID_HOB_DATA_SIZE (GuidHob));\r
} else {\r
return EFI_NOT_FOUND;\r
}\r
//\r
GuidHob = GetFirstGuidHob (&gEfiSmmSmramMemoryGuid);\r
if (GuidHob != NULL) {\r
- SmmHob = (VOID *) (GET_GUID_HOB_DATA(GuidHob));\r
- mSmramHob = AllocatePool (GET_GUID_HOB_DATA_SIZE(GuidHob));\r
+ SmmHob = (VOID *)(GET_GUID_HOB_DATA (GuidHob));\r
+ mSmramHob = AllocatePool (GET_GUID_HOB_DATA_SIZE (GuidHob));\r
if (mSmramHob == NULL) {\r
return EFI_OUT_OF_RESOURCES;\r
}\r
- CopyMem (mSmramHob, SmmHob, GET_GUID_HOB_DATA_SIZE(GuidHob));\r
+\r
+ CopyMem (mSmramHob, SmmHob, GET_GUID_HOB_DATA_SIZE (GuidHob));\r
} else {\r
return EFI_NOT_FOUND;\r
}\r
//\r
GuidHob = GetFirstGuidHob (&gSmmRegisterInfoGuid);\r
if (GuidHob != NULL) {\r
- SmmHob = (VOID *) (GET_GUID_HOB_DATA(GuidHob));\r
- mSmmRegisterHob = AllocatePool (GET_GUID_HOB_DATA_SIZE(GuidHob));\r
+ SmmHob = (VOID *)(GET_GUID_HOB_DATA (GuidHob));\r
+ mSmmRegisterHob = AllocatePool (GET_GUID_HOB_DATA_SIZE (GuidHob));\r
if (mSmmRegisterHob == NULL) {\r
return EFI_OUT_OF_RESOURCES;\r
}\r
- CopyMem (mSmmRegisterHob, SmmHob, GET_GUID_HOB_DATA_SIZE(GuidHob));\r
+\r
+ CopyMem (mSmmRegisterHob, SmmHob, GET_GUID_HOB_DATA_SIZE (GuidHob));\r
} else {\r
return EFI_NOT_FOUND;\r
}\r
//\r
// Get the Sw dispatch protocol and register SMI handler.\r
//\r
- Status = gSmst->SmmLocateProtocol (&gEfiSmmSwDispatch2ProtocolGuid, NULL, (VOID**)&SwDispatch);\r
+ Status = gSmst->SmmLocateProtocol (&gEfiSmmSwDispatch2ProtocolGuid, NULL, (VOID **)&SwDispatch);\r
if (EFI_ERROR (Status)) {\r
return Status;\r
}\r
- SwContext.SwSmiInputValue = (UINTN) -1;\r
- Status = SwDispatch->Register (SwDispatch, BlSwSmiHandler, &SwContext, &SwHandle);\r
+\r
+ SwContext.SwSmiInputValue = (UINTN)-1;\r
+ Status = SwDispatch->Register (SwDispatch, BlSwSmiHandler, &SwContext, &SwHandle);\r
if (EFI_ERROR (Status)) {\r
DEBUG ((DEBUG_ERROR, "Registering S3 smi handler failed: %r\n", Status));\r
return Status;\r
\r
return EFI_SUCCESS;\r
}\r
-\r