mirror of
https://github.com/acidanthera/audk.git
synced 2025-07-27 07:34:06 +02:00
MdeModulePkg/Variable: Parameterize VARIABLE_INFO_ENTRY buffer
UpdateVariableInfo () currently accepts parameters regarding updates to be made to a global variable of type VARIABLE_INFO_ENTRY. This change passes the structure by pointer to UpdateVariableInfo () so structures other than the fixed global variable can be updated. Cc: Dandan Bi <dandan.bi@intel.com> Cc: Ard Biesheuvel <ard.biesheuvel@linaro.org> Cc: Eric Dong <eric.dong@intel.com> Cc: Laszlo Ersek <lersek@redhat.com> Cc: Liming Gao <liming.gao@intel.com> Cc: Michael D Kinney <michael.d.kinney@intel.com> Cc: Ray Ni <ray.ni@intel.com> Cc: Jian J Wang <jian.j.wang@intel.com> Cc: Hao A Wu <hao.a.wu@intel.com> Cc: Jiewen Yao <jiewen.yao@intel.com> Signed-off-by: Michael Kubacki <michael.a.kubacki@intel.com> Reviewed-by: Jian J Wang <jian.j.wang@intel.com> Reviewed-by: Hao A Wu <hao.a.wu@intel.com>
This commit is contained in:
parent
f8ff4cca7c
commit
8d53adbee9
@ -1641,7 +1641,7 @@ UpdateVariable (
|
|||||||
// go to delete this variable in variable HOB and
|
// go to delete this variable in variable HOB and
|
||||||
// try to flush other variables from HOB to flash.
|
// try to flush other variables from HOB to flash.
|
||||||
//
|
//
|
||||||
UpdateVariableInfo (VariableName, VendorGuid, FALSE, FALSE, FALSE, TRUE, FALSE);
|
UpdateVariableInfo (VariableName, VendorGuid, FALSE, FALSE, FALSE, TRUE, FALSE, &gVariableInfo);
|
||||||
FlushHobVariableToFlash (VariableName, VendorGuid);
|
FlushHobVariableToFlash (VariableName, VendorGuid);
|
||||||
return EFI_SUCCESS;
|
return EFI_SUCCESS;
|
||||||
}
|
}
|
||||||
@ -1758,7 +1758,7 @@ UpdateVariable (
|
|||||||
&State
|
&State
|
||||||
);
|
);
|
||||||
if (!EFI_ERROR (Status)) {
|
if (!EFI_ERROR (Status)) {
|
||||||
UpdateVariableInfo (VariableName, VendorGuid, Variable->Volatile, FALSE, FALSE, TRUE, FALSE);
|
UpdateVariableInfo (VariableName, VendorGuid, Variable->Volatile, FALSE, FALSE, TRUE, FALSE, &gVariableInfo);
|
||||||
if (!Variable->Volatile) {
|
if (!Variable->Volatile) {
|
||||||
CacheVariable->CurrPtr->State = State;
|
CacheVariable->CurrPtr->State = State;
|
||||||
FlushHobVariableToFlash (VariableName, VendorGuid);
|
FlushHobVariableToFlash (VariableName, VendorGuid);
|
||||||
@ -1777,7 +1777,7 @@ UpdateVariable (
|
|||||||
//
|
//
|
||||||
// Variable content unchanged and no need to update timestamp, just return.
|
// Variable content unchanged and no need to update timestamp, just return.
|
||||||
//
|
//
|
||||||
UpdateVariableInfo (VariableName, VendorGuid, Variable->Volatile, FALSE, TRUE, FALSE, FALSE);
|
UpdateVariableInfo (VariableName, VendorGuid, Variable->Volatile, FALSE, TRUE, FALSE, FALSE, &gVariableInfo);
|
||||||
Status = EFI_SUCCESS;
|
Status = EFI_SUCCESS;
|
||||||
goto Done;
|
goto Done;
|
||||||
} else if ((CacheVariable->CurrPtr->State == VAR_ADDED) ||
|
} else if ((CacheVariable->CurrPtr->State == VAR_ADDED) ||
|
||||||
@ -2006,7 +2006,7 @@ UpdateVariable (
|
|||||||
CacheVariable->CurrPtr = (VARIABLE_HEADER *)((UINTN) CacheVariable->StartPtr + ((UINTN) Variable->CurrPtr - (UINTN) Variable->StartPtr));
|
CacheVariable->CurrPtr = (VARIABLE_HEADER *)((UINTN) CacheVariable->StartPtr + ((UINTN) Variable->CurrPtr - (UINTN) Variable->StartPtr));
|
||||||
CacheVariable->InDeletedTransitionPtr = NULL;
|
CacheVariable->InDeletedTransitionPtr = NULL;
|
||||||
}
|
}
|
||||||
UpdateVariableInfo (VariableName, VendorGuid, FALSE, FALSE, TRUE, FALSE, FALSE);
|
UpdateVariableInfo (VariableName, VendorGuid, FALSE, FALSE, TRUE, FALSE, FALSE, &gVariableInfo);
|
||||||
FlushHobVariableToFlash (VariableName, VendorGuid);
|
FlushHobVariableToFlash (VariableName, VendorGuid);
|
||||||
} else {
|
} else {
|
||||||
if (IsCommonUserVariable && ((VarSize + mVariableModuleGlobal->CommonUserVariableTotalSize) > mVariableModuleGlobal->CommonMaxUserVariableSpace)) {
|
if (IsCommonUserVariable && ((VarSize + mVariableModuleGlobal->CommonUserVariableTotalSize) > mVariableModuleGlobal->CommonMaxUserVariableSpace)) {
|
||||||
@ -2156,7 +2156,7 @@ UpdateVariable (
|
|||||||
CacheVariable->CurrPtr = (VARIABLE_HEADER *)((UINTN) CacheVariable->StartPtr + ((UINTN) Variable->CurrPtr - (UINTN) Variable->StartPtr));
|
CacheVariable->CurrPtr = (VARIABLE_HEADER *)((UINTN) CacheVariable->StartPtr + ((UINTN) Variable->CurrPtr - (UINTN) Variable->StartPtr));
|
||||||
CacheVariable->InDeletedTransitionPtr = NULL;
|
CacheVariable->InDeletedTransitionPtr = NULL;
|
||||||
}
|
}
|
||||||
UpdateVariableInfo (VariableName, VendorGuid, TRUE, FALSE, TRUE, FALSE, FALSE);
|
UpdateVariableInfo (VariableName, VendorGuid, TRUE, FALSE, TRUE, FALSE, FALSE, &gVariableInfo);
|
||||||
}
|
}
|
||||||
goto Done;
|
goto Done;
|
||||||
}
|
}
|
||||||
@ -2227,7 +2227,7 @@ UpdateVariable (
|
|||||||
}
|
}
|
||||||
|
|
||||||
if (!EFI_ERROR (Status)) {
|
if (!EFI_ERROR (Status)) {
|
||||||
UpdateVariableInfo (VariableName, VendorGuid, Volatile, FALSE, TRUE, FALSE, FALSE);
|
UpdateVariableInfo (VariableName, VendorGuid, Volatile, FALSE, TRUE, FALSE, FALSE, &gVariableInfo);
|
||||||
if (!Volatile) {
|
if (!Volatile) {
|
||||||
FlushHobVariableToFlash (VariableName, VendorGuid);
|
FlushHobVariableToFlash (VariableName, VendorGuid);
|
||||||
}
|
}
|
||||||
@ -2306,7 +2306,7 @@ VariableServiceGetVariable (
|
|||||||
}
|
}
|
||||||
|
|
||||||
*DataSize = VarDataSize;
|
*DataSize = VarDataSize;
|
||||||
UpdateVariableInfo (VariableName, VendorGuid, Variable.Volatile, TRUE, FALSE, FALSE, FALSE);
|
UpdateVariableInfo (VariableName, VendorGuid, Variable.Volatile, TRUE, FALSE, FALSE, FALSE, &gVariableInfo);
|
||||||
|
|
||||||
Status = EFI_SUCCESS;
|
Status = EFI_SUCCESS;
|
||||||
goto Done;
|
goto Done;
|
||||||
|
@ -660,13 +660,14 @@ Done:
|
|||||||
the transaction. Data is allocated by this routine, but never
|
the transaction. Data is allocated by this routine, but never
|
||||||
freed.
|
freed.
|
||||||
|
|
||||||
@param[in] VariableName Name of the Variable to track.
|
@param[in] VariableName Name of the Variable to track.
|
||||||
@param[in] VendorGuid Guid of the Variable to track.
|
@param[in] VendorGuid Guid of the Variable to track.
|
||||||
@param[in] Volatile TRUE if volatile FALSE if non-volatile.
|
@param[in] Volatile TRUE if volatile FALSE if non-volatile.
|
||||||
@param[in] Read TRUE if GetVariable() was called.
|
@param[in] Read TRUE if GetVariable() was called.
|
||||||
@param[in] Write TRUE if SetVariable() was called.
|
@param[in] Write TRUE if SetVariable() was called.
|
||||||
@param[in] Delete TRUE if deleted via SetVariable().
|
@param[in] Delete TRUE if deleted via SetVariable().
|
||||||
@param[in] Cache TRUE for a cache hit.
|
@param[in] Cache TRUE for a cache hit.
|
||||||
|
@param[in,out] VariableInfo Pointer to a pointer of VARIABLE_INFO_ENTRY structures.
|
||||||
|
|
||||||
**/
|
**/
|
||||||
VOID
|
VOID
|
||||||
@ -677,35 +678,38 @@ UpdateVariableInfo (
|
|||||||
IN BOOLEAN Read,
|
IN BOOLEAN Read,
|
||||||
IN BOOLEAN Write,
|
IN BOOLEAN Write,
|
||||||
IN BOOLEAN Delete,
|
IN BOOLEAN Delete,
|
||||||
IN BOOLEAN Cache
|
IN BOOLEAN Cache,
|
||||||
|
IN OUT VARIABLE_INFO_ENTRY **VariableInfo
|
||||||
)
|
)
|
||||||
{
|
{
|
||||||
VARIABLE_INFO_ENTRY *Entry;
|
VARIABLE_INFO_ENTRY *Entry;
|
||||||
|
|
||||||
if (FeaturePcdGet (PcdVariableCollectStatistics)) {
|
if (FeaturePcdGet (PcdVariableCollectStatistics)) {
|
||||||
|
if (VariableName == NULL || VendorGuid == NULL || VariableInfo == NULL) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
if (AtRuntime ()) {
|
if (AtRuntime ()) {
|
||||||
// Don't collect statistics at runtime.
|
// Don't collect statistics at runtime.
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (gVariableInfo == NULL) {
|
if (*VariableInfo == NULL) {
|
||||||
//
|
//
|
||||||
// On the first call allocate a entry and place a pointer to it in
|
// On the first call allocate a entry and place a pointer to it in
|
||||||
// the EFI System Table.
|
// the EFI System Table.
|
||||||
//
|
//
|
||||||
gVariableInfo = AllocateZeroPool (sizeof (VARIABLE_INFO_ENTRY));
|
*VariableInfo = AllocateZeroPool (sizeof (VARIABLE_INFO_ENTRY));
|
||||||
ASSERT (gVariableInfo != NULL);
|
ASSERT (*VariableInfo != NULL);
|
||||||
|
|
||||||
CopyGuid (&gVariableInfo->VendorGuid, VendorGuid);
|
CopyGuid (&(*VariableInfo)->VendorGuid, VendorGuid);
|
||||||
gVariableInfo->Name = AllocateZeroPool (StrSize (VariableName));
|
(*VariableInfo)->Name = AllocateZeroPool (StrSize (VariableName));
|
||||||
ASSERT (gVariableInfo->Name != NULL);
|
ASSERT ((*VariableInfo)->Name != NULL);
|
||||||
StrCpyS (gVariableInfo->Name, StrSize(VariableName)/sizeof(CHAR16), VariableName);
|
StrCpyS ((*VariableInfo)->Name, StrSize(VariableName)/sizeof(CHAR16), VariableName);
|
||||||
gVariableInfo->Volatile = Volatile;
|
(*VariableInfo)->Volatile = Volatile;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
for (Entry = gVariableInfo; Entry != NULL; Entry = Entry->Next) {
|
for (Entry = (*VariableInfo); Entry != NULL; Entry = Entry->Next) {
|
||||||
if (CompareGuid (VendorGuid, &Entry->VendorGuid)) {
|
if (CompareGuid (VendorGuid, &Entry->VendorGuid)) {
|
||||||
if (StrCmp (VariableName, Entry->Name) == 0) {
|
if (StrCmp (VariableName, Entry->Name) == 0) {
|
||||||
if (Read) {
|
if (Read) {
|
||||||
@ -739,7 +743,6 @@ UpdateVariableInfo (
|
|||||||
StrCpyS (Entry->Next->Name, StrSize(VariableName)/sizeof(CHAR16), VariableName);
|
StrCpyS (Entry->Next->Name, StrSize(VariableName)/sizeof(CHAR16), VariableName);
|
||||||
Entry->Next->Volatile = Volatile;
|
Entry->Next->Volatile = Volatile;
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -286,13 +286,14 @@ VariableServiceGetNextVariableInternal (
|
|||||||
the transaction. Data is allocated by this routine, but never
|
the transaction. Data is allocated by this routine, but never
|
||||||
freed.
|
freed.
|
||||||
|
|
||||||
@param[in] VariableName Name of the Variable to track.
|
@param[in] VariableName Name of the Variable to track.
|
||||||
@param[in] VendorGuid Guid of the Variable to track.
|
@param[in] VendorGuid Guid of the Variable to track.
|
||||||
@param[in] Volatile TRUE if volatile FALSE if non-volatile.
|
@param[in] Volatile TRUE if volatile FALSE if non-volatile.
|
||||||
@param[in] Read TRUE if GetVariable() was called.
|
@param[in] Read TRUE if GetVariable() was called.
|
||||||
@param[in] Write TRUE if SetVariable() was called.
|
@param[in] Write TRUE if SetVariable() was called.
|
||||||
@param[in] Delete TRUE if deleted via SetVariable().
|
@param[in] Delete TRUE if deleted via SetVariable().
|
||||||
@param[in] Cache TRUE for a cache hit.
|
@param[in] Cache TRUE for a cache hit.
|
||||||
|
@param[in,out] VariableInfo Pointer to a pointer of VARIABLE_INFO_ENTRY structures.
|
||||||
|
|
||||||
**/
|
**/
|
||||||
VOID
|
VOID
|
||||||
@ -303,7 +304,8 @@ UpdateVariableInfo (
|
|||||||
IN BOOLEAN Read,
|
IN BOOLEAN Read,
|
||||||
IN BOOLEAN Write,
|
IN BOOLEAN Write,
|
||||||
IN BOOLEAN Delete,
|
IN BOOLEAN Delete,
|
||||||
IN BOOLEAN Cache
|
IN BOOLEAN Cache,
|
||||||
|
IN OUT VARIABLE_INFO_ENTRY **VariableInfo
|
||||||
);
|
);
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
|
Loading…
x
Reference in New Issue
Block a user