We need handle this library carefully. Only one library instance will construct the environment.\r
Below 2 global variable can only be used in constructor. They should NOT be used in any other library functions.\r
**/\r
-SMM_LOCK_BOX_CONTEXT mSmmLockBoxContext;\r
-LIST_ENTRY mLockBoxQueue = INITIALIZE_LIST_HEAD_VARIABLE (mLockBoxQueue);\r
+SMM_LOCK_BOX_CONTEXT mSmmLockBoxContext;\r
+LIST_ENTRY mLockBoxQueue = INITIALIZE_LIST_HEAD_VARIABLE (mLockBoxQueue);\r
\r
-BOOLEAN mSmmConfigurationTableInstalled = FALSE;\r
-VOID *mSmmLockBoxRegistrationSmmEndOfDxe = NULL;\r
-VOID *mSmmLockBoxRegistrationSmmReadyToLock = NULL;\r
-VOID *mSmmLockBoxRegistrationEndOfS3Resume = NULL;\r
-BOOLEAN mSmmLockBoxSmmReadyToLock = FALSE;\r
-BOOLEAN mSmmLockBoxDuringS3Resume = FALSE;\r
+BOOLEAN mSmmConfigurationTableInstalled = FALSE;\r
+VOID *mSmmLockBoxRegistrationSmmEndOfDxe = NULL;\r
+VOID *mSmmLockBoxRegistrationSmmReadyToLock = NULL;\r
+VOID *mSmmLockBoxRegistrationEndOfS3Resume = NULL;\r
+BOOLEAN mSmmLockBoxSmmReadyToLock = FALSE;\r
+BOOLEAN mSmmLockBoxDuringS3Resume = FALSE;\r
\r
/**\r
This function return SmmLockBox context from SMST.\r
VOID\r
)\r
{\r
- UINTN Index;\r
+ UINTN Index;\r
\r
//\r
// Check if gEfiSmmLockBoxCommunicationGuid is installed by someone\r
EFI_STATUS\r
EFIAPI\r
SmmLockBoxS3EntryCallBack (\r
- IN EFI_HANDLE DispatchHandle,\r
- IN CONST VOID *Context OPTIONAL,\r
- IN OUT VOID *CommBuffer OPTIONAL,\r
- IN OUT UINTN *CommBufferSize OPTIONAL\r
+ IN EFI_HANDLE DispatchHandle,\r
+ IN CONST VOID *Context OPTIONAL,\r
+ IN OUT VOID *CommBuffer OPTIONAL,\r
+ IN OUT UINTN *CommBufferSize OPTIONAL\r
)\r
{\r
mSmmLockBoxDuringS3Resume = TRUE;\r
IN EFI_HANDLE Handle\r
)\r
{\r
- EFI_STATUS Status;\r
- EFI_SMM_SX_DISPATCH2_PROTOCOL *SxDispatch;\r
- EFI_SMM_SX_REGISTER_CONTEXT EntryRegisterContext;\r
- EFI_HANDLE S3EntryHandle;\r
+ EFI_STATUS Status;\r
+ EFI_SMM_SX_DISPATCH2_PROTOCOL *SxDispatch;\r
+ EFI_SMM_SX_REGISTER_CONTEXT EntryRegisterContext;\r
+ EFI_HANDLE S3EntryHandle;\r
\r
//\r
// Locate SmmSxDispatch2 protocol.\r
//\r
EntryRegisterContext.Type = SxS3;\r
EntryRegisterContext.Phase = SxEntry;\r
- Status = SxDispatch->Register (\r
- SxDispatch,\r
- SmmLockBoxS3EntryCallBack,\r
- &EntryRegisterContext,\r
- &S3EntryHandle\r
- );\r
+ Status = SxDispatch->Register (\r
+ SxDispatch,\r
+ SmmLockBoxS3EntryCallBack,\r
+ &EntryRegisterContext,\r
+ &S3EntryHandle\r
+ );\r
ASSERT_EFI_ERROR (Status);\r
}\r
\r
VOID\r
)\r
{\r
- EFI_STATUS Status;\r
- SMM_LOCK_BOX_CONTEXT *SmmLockBoxContext;\r
+ EFI_STATUS Status;\r
+ SMM_LOCK_BOX_CONTEXT *SmmLockBoxContext;\r
\r
DEBUG ((DEBUG_INFO, "SmmLockBoxSmmLib SmmLockBoxMmConstructor - Enter\n"));\r
\r
//\r
// If no one install this, it means this is first instance. Install it.\r
//\r
- if (sizeof(UINTN) == sizeof(UINT64)) {\r
+ if (sizeof (UINTN) == sizeof (UINT64)) {\r
mSmmLockBoxContext.Signature = SMM_LOCK_BOX_SIGNATURE_64;\r
} else {\r
mSmmLockBoxContext.Signature = SMM_LOCK_BOX_SIGNATURE_32;\r
}\r
+\r
mSmmLockBoxContext.LockBoxDataAddress = (EFI_PHYSICAL_ADDRESS)(UINTN)&mLockBoxQueue;\r
\r
Status = gMmst->MmInstallConfigurationTable (\r
gMmst,\r
&gEfiSmmLockBoxCommunicationGuid,\r
&mSmmLockBoxContext,\r
- sizeof(mSmmLockBoxContext)\r
+ sizeof (mSmmLockBoxContext)\r
);\r
ASSERT_EFI_ERROR (Status);\r
mSmmConfigurationTableInstalled = TRUE;\r
VOID\r
)\r
{\r
- EFI_STATUS Status;\r
+ EFI_STATUS Status;\r
\r
DEBUG ((DEBUG_INFO, "SmmLockBoxSmmLib SmmLockBoxMmDestructor in %a module\n", gEfiCallerBaseName));\r
\r
);\r
ASSERT_EFI_ERROR (Status);\r
}\r
+\r
if (mSmmLockBoxRegistrationSmmEndOfDxe != NULL) {\r
//\r
// Unregister SmmEndOfDxe notification.\r
);\r
ASSERT_EFI_ERROR (Status);\r
}\r
+\r
if (mSmmLockBoxRegistrationEndOfS3Resume != NULL) {\r
//\r
// Unregister EndOfS3Resume notification.\r
VOID\r
)\r
{\r
- SMM_LOCK_BOX_CONTEXT *SmmLockBoxContext;\r
+ SMM_LOCK_BOX_CONTEXT *SmmLockBoxContext;\r
\r
SmmLockBoxContext = InternalGetSmmLockBoxContext ();\r
ASSERT (SmmLockBoxContext != NULL);\r
if (SmmLockBoxContext == NULL) {\r
return NULL;\r
}\r
+\r
return (LIST_ENTRY *)(UINTN)SmmLockBoxContext->LockBoxDataAddress;\r
}\r
\r
**/\r
SMM_LOCK_BOX_DATA *\r
InternalFindLockBoxByGuid (\r
- IN EFI_GUID *Guid\r
+ IN EFI_GUID *Guid\r
)\r
{\r
- LIST_ENTRY *Link;\r
- SMM_LOCK_BOX_DATA *LockBox;\r
- LIST_ENTRY *LockBoxQueue;\r
+ LIST_ENTRY *Link;\r
+ SMM_LOCK_BOX_DATA *LockBox;\r
+ LIST_ENTRY *LockBoxQueue;\r
\r
LockBoxQueue = InternalGetLockBoxQueue ();\r
ASSERT (LockBoxQueue != NULL);\r
\r
for (Link = LockBoxQueue->ForwardLink;\r
Link != LockBoxQueue;\r
- Link = Link->ForwardLink) {\r
+ Link = Link->ForwardLink)\r
+ {\r
LockBox = BASE_CR (\r
Link,\r
SMM_LOCK_BOX_DATA,\r
return LockBox;\r
}\r
}\r
+\r
return NULL;\r
}\r
\r
RETURN_STATUS\r
EFIAPI\r
SaveLockBox (\r
- IN GUID *Guid,\r
- IN VOID *Buffer,\r
- IN UINTN Length\r
+ IN GUID *Guid,\r
+ IN VOID *Buffer,\r
+ IN UINTN Length\r
)\r
{\r
- SMM_LOCK_BOX_DATA *LockBox;\r
- EFI_PHYSICAL_ADDRESS SmramBuffer;\r
- EFI_STATUS Status;\r
- LIST_ENTRY *LockBoxQueue;\r
+ SMM_LOCK_BOX_DATA *LockBox;\r
+ EFI_PHYSICAL_ADDRESS SmramBuffer;\r
+ EFI_STATUS Status;\r
+ LIST_ENTRY *LockBoxQueue;\r
\r
DEBUG ((DEBUG_INFO, "SmmLockBoxSmmLib SaveLockBox - Enter\n"));\r
\r
//\r
Status = gMmst->MmAllocatePool (\r
EfiRuntimeServicesData,\r
- sizeof(*LockBox),\r
+ sizeof (*LockBox),\r
(VOID **)&LockBox\r
);\r
ASSERT_EFI_ERROR (Status);\r
//\r
// Insert LockBox to queue\r
//\r
- LockBox->Signature = SMM_LOCK_BOX_DATA_SIGNATURE;\r
- CopyMem (&LockBox->Guid, Guid, sizeof(EFI_GUID));\r
+ LockBox->Signature = SMM_LOCK_BOX_DATA_SIGNATURE;\r
+ CopyMem (&LockBox->Guid, Guid, sizeof (EFI_GUID));\r
LockBox->Buffer = (EFI_PHYSICAL_ADDRESS)(UINTN)Buffer;\r
LockBox->Length = (UINT64)Length;\r
LockBox->Attributes = 0;\r
RETURN_STATUS\r
EFIAPI\r
SetLockBoxAttributes (\r
- IN GUID *Guid,\r
- IN UINT64 Attributes\r
+ IN GUID *Guid,\r
+ IN UINT64 Attributes\r
)\r
{\r
- SMM_LOCK_BOX_DATA *LockBox;\r
+ SMM_LOCK_BOX_DATA *LockBox;\r
\r
DEBUG ((DEBUG_INFO, "SmmLockBoxSmmLib SetLockBoxAttributes - Enter\n"));\r
\r
// Basic check\r
//\r
if ((Guid == NULL) ||\r
- ((Attributes & ~(LOCK_BOX_ATTRIBUTE_RESTORE_IN_PLACE | LOCK_BOX_ATTRIBUTE_RESTORE_IN_S3_ONLY)) != 0)) {\r
+ ((Attributes & ~(LOCK_BOX_ATTRIBUTE_RESTORE_IN_PLACE | LOCK_BOX_ATTRIBUTE_RESTORE_IN_S3_ONLY)) != 0))\r
+ {\r
DEBUG ((DEBUG_INFO, "SmmLockBoxSmmLib SetLockBoxAttributes - Exit (%r)\n", EFI_INVALID_PARAMETER));\r
return EFI_INVALID_PARAMETER;\r
}\r
\r
if (((Attributes & LOCK_BOX_ATTRIBUTE_RESTORE_IN_PLACE) != 0) &&\r
- ((Attributes & LOCK_BOX_ATTRIBUTE_RESTORE_IN_S3_ONLY) != 0)) {\r
+ ((Attributes & LOCK_BOX_ATTRIBUTE_RESTORE_IN_S3_ONLY) != 0))\r
+ {\r
DEBUG ((DEBUG_INFO, "SmmLockBoxSmmLib SetLockBoxAttributes - Exit (%r)\n", EFI_INVALID_PARAMETER));\r
DEBUG ((DEBUG_INFO, " LOCK_BOX_ATTRIBUTE_RESTORE_IN_PLACE and LOCK_BOX_ATTRIBUTE_RESTORE_IN_S3_ONLY\n\n"));\r
DEBUG ((DEBUG_INFO, " can not be set together\n"));\r
}\r
\r
if ((((Attributes & LOCK_BOX_ATTRIBUTE_RESTORE_IN_PLACE) != 0) &&\r
- ((LockBox->Attributes & LOCK_BOX_ATTRIBUTE_RESTORE_IN_S3_ONLY) != 0)) ||\r
+ ((LockBox->Attributes & LOCK_BOX_ATTRIBUTE_RESTORE_IN_S3_ONLY) != 0)) ||\r
(((LockBox->Attributes & LOCK_BOX_ATTRIBUTE_RESTORE_IN_PLACE) != 0) &&\r
- ((Attributes & LOCK_BOX_ATTRIBUTE_RESTORE_IN_S3_ONLY) != 0))) {\r
+ ((Attributes & LOCK_BOX_ATTRIBUTE_RESTORE_IN_S3_ONLY) != 0)))\r
+ {\r
DEBUG ((DEBUG_INFO, "SmmLockBoxSmmLib SetLockBoxAttributes 0x%lx 0x%lx - Exit (%r)\n", LockBox->Attributes, Attributes, EFI_INVALID_PARAMETER));\r
DEBUG ((DEBUG_INFO, " LOCK_BOX_ATTRIBUTE_RESTORE_IN_PLACE and LOCK_BOX_ATTRIBUTE_RESTORE_IN_S3_ONLY\n\n"));\r
DEBUG ((DEBUG_INFO, " can not be set together\n"));\r
RETURN_STATUS\r
EFIAPI\r
UpdateLockBox (\r
- IN GUID *Guid,\r
- IN UINTN Offset,\r
- IN VOID *Buffer,\r
- IN UINTN Length\r
+ IN GUID *Guid,\r
+ IN UINTN Offset,\r
+ IN VOID *Buffer,\r
+ IN UINTN Length\r
)\r
{\r
- SMM_LOCK_BOX_DATA *LockBox;\r
- EFI_PHYSICAL_ADDRESS SmramBuffer;\r
- EFI_STATUS Status;\r
+ SMM_LOCK_BOX_DATA *LockBox;\r
+ EFI_PHYSICAL_ADDRESS SmramBuffer;\r
+ EFI_STATUS Status;\r
\r
DEBUG ((DEBUG_INFO, "SmmLockBoxSmmLib UpdateLockBox - Enter\n"));\r
\r
// Basic check\r
//\r
if ((Guid == NULL) || (Buffer == NULL) || (Length == 0) ||\r
- (Length > MAX_UINTN - Offset)) {\r
+ (Length > MAX_UINTN - Offset))\r
+ {\r
DEBUG ((DEBUG_INFO, "SmmLockBoxSmmLib UpdateLockBox - Exit (%r)\n", EFI_INVALID_PARAMETER));\r
return EFI_INVALID_PARAMETER;\r
}\r
Offset - (UINTN)LockBox->Length\r
);\r
}\r
+\r
LockBox->Length = Offset + Length;\r
} else {\r
//\r
return EFI_BUFFER_TOO_SMALL;\r
}\r
}\r
+\r
ASSERT ((UINTN)LockBox->SmramBuffer <= (MAX_ADDRESS - Offset));\r
CopyMem ((VOID *)((UINTN)LockBox->SmramBuffer + Offset), Buffer, Length);\r
\r
RETURN_STATUS\r
EFIAPI\r
RestoreLockBox (\r
- IN GUID *Guid,\r
- IN VOID *Buffer OPTIONAL,\r
- IN OUT UINTN *Length OPTIONAL\r
+ IN GUID *Guid,\r
+ IN VOID *Buffer OPTIONAL,\r
+ IN OUT UINTN *Length OPTIONAL\r
)\r
{\r
- SMM_LOCK_BOX_DATA *LockBox;\r
- VOID *RestoreBuffer;\r
+ SMM_LOCK_BOX_DATA *LockBox;\r
+ VOID *RestoreBuffer;\r
\r
DEBUG ((DEBUG_INFO, "SmmLockBoxSmmLib RestoreLockBox - Enter\n"));\r
\r
//\r
if ((Guid == NULL) ||\r
((Buffer == NULL) && (Length != NULL)) ||\r
- ((Buffer != NULL) && (Length == NULL))) {\r
+ ((Buffer != NULL) && (Length == NULL)))\r
+ {\r
DEBUG ((DEBUG_INFO, "SmmLockBoxSmmLib RestoreLockBox - Exit (%r)\n", EFI_INVALID_PARAMETER));\r
return EFI_INVALID_PARAMETER;\r
}\r
\r
if (((LockBox->Attributes & LOCK_BOX_ATTRIBUTE_RESTORE_IN_S3_ONLY) != 0) &&\r
mSmmLockBoxSmmReadyToLock &&\r
- !mSmmLockBoxDuringS3Resume) {\r
+ !mSmmLockBoxDuringS3Resume)\r
+ {\r
//\r
// With LOCK_BOX_ATTRIBUTE_RESTORE_IN_S3_ONLY,\r
// this LockBox can be restored in S3 resume only.\r
DEBUG ((DEBUG_INFO, "SmmLockBoxSmmLib RestoreLockBox - Exit (%r)\n", EFI_WRITE_PROTECTED));\r
return EFI_WRITE_PROTECTED;\r
}\r
+\r
RestoreBuffer = (VOID *)(UINTN)LockBox->Buffer;\r
}\r
\r
DEBUG ((DEBUG_INFO, "SmmLockBoxSmmLib RestoreLockBox - Exit (%r)\n", EFI_BUFFER_TOO_SMALL));\r
return EFI_BUFFER_TOO_SMALL;\r
}\r
+\r
*Length = (UINTN)LockBox->Length;\r
}\r
\r
VOID\r
)\r
{\r
- SMM_LOCK_BOX_DATA *LockBox;\r
- LIST_ENTRY *Link;\r
- LIST_ENTRY *LockBoxQueue;\r
+ SMM_LOCK_BOX_DATA *LockBox;\r
+ LIST_ENTRY *Link;\r
+ LIST_ENTRY *LockBoxQueue;\r
\r
DEBUG ((DEBUG_INFO, "SmmLockBoxSmmLib RestoreAllLockBoxInPlace - Enter\n"));\r
\r
//\r
for (Link = LockBoxQueue->ForwardLink;\r
Link != LockBoxQueue;\r
- Link = Link->ForwardLink) {\r
+ Link = Link->ForwardLink)\r
+ {\r
LockBox = BASE_CR (\r
Link,\r
SMM_LOCK_BOX_DATA,\r
CopyMem ((VOID *)(UINTN)LockBox->Buffer, (VOID *)(UINTN)LockBox->SmramBuffer, (UINTN)LockBox->Length);\r
}\r
}\r
+\r
//\r
// Done\r
//\r