\r
}\r
\r
-STATIC\r
VARIABLE_HEADER *\r
-GetNextVariablePtr (\r
- IN VARIABLE_HEADER *Variable\r
+GetStartPointer (\r
+ IN VARIABLE_STORE_HEADER *VarStoreHeader\r
)\r
/*++\r
\r
Routine Description:\r
\r
- This code checks if variable header is valid or not.\r
+ This code gets the pointer to the first variable memory pointer byte\r
\r
Arguments:\r
- Variable Pointer to the Variable Header.\r
+\r
+ VarStoreHeader Pointer to the Variable Store Header.\r
\r
Returns:\r
- TRUE Variable header is valid.\r
- FALSE Variable header is not valid.\r
+\r
+ VARIABLE_HEADER* Pointer to last unavailable Variable Header\r
+\r
+--*/\r
+{\r
+ //\r
+ // The end of variable store\r
+ //\r
+ return (VARIABLE_HEADER *) HEADER_ALIGN (VarStoreHeader + 1);\r
+}\r
+\r
+VARIABLE_HEADER *\r
+GetEndPointer (\r
+ IN VARIABLE_STORE_HEADER *VarStoreHeader\r
+ )\r
+/*++\r
+\r
+Routine Description:\r
+\r
+ This code gets the pointer to the last variable memory pointer byte\r
+\r
+Arguments:\r
+\r
+ VarStoreHeader Pointer to the Variable Store Header.\r
+\r
+Returns:\r
+\r
+ VARIABLE_HEADER* Pointer to last unavailable Variable Header\r
\r
--*/\r
{\r
- return (VARIABLE_HEADER *) HEADER_ALIGN ((UINTN) GET_VARIABLE_DATA_PTR (Variable) + DATASIZE_OF_VARIABLE (Variable) + GET_PAD_SIZE (DATASIZE_OF_VARIABLE (Variable)));\r
+ //\r
+ // The end of variable store\r
+ //\r
+ return (VARIABLE_HEADER *) HEADER_ALIGN ((UINTN) VarStoreHeader + VarStoreHeader->Size);\r
}\r
\r
STATIC\r
return TRUE;\r
}\r
\r
+\r
+UINTN\r
+NameSizeOfVariable (\r
+ IN VARIABLE_HEADER *Variable\r
+ )\r
+/*++\r
+\r
+Routine Description:\r
+\r
+ This code gets the size of name of variable.\r
+\r
+Arguments:\r
+\r
+ Variable Pointer to the Variable Header.\r
+\r
+Returns:\r
+\r
+ UINTN Size of variable in bytes\r
+\r
+--*/\r
+{\r
+ if (Variable->State == (UINT8) (-1) ||\r
+ Variable->DataSize == (UINT32) -1 ||\r
+ Variable->NameSize == (UINT32) -1 ||\r
+ Variable->Attributes == (UINT32) -1) {\r
+ return 0;\r
+ }\r
+ return (UINTN) Variable->NameSize;\r
+}\r
+\r
+UINTN\r
+DataSizeOfVariable (\r
+ IN VARIABLE_HEADER *Variable\r
+ )\r
+/*++\r
+\r
+Routine Description:\r
+\r
+ This code gets the size of name of variable.\r
+\r
+Arguments:\r
+\r
+ Variable Pointer to the Variable Header.\r
+\r
+Returns:\r
+\r
+ UINTN Size of variable in bytes\r
+\r
+--*/\r
+{\r
+ if (Variable->State == (UINT8) -1 ||\r
+ Variable->DataSize == (UINT32) -1 ||\r
+ Variable->NameSize == (UINT32) -1 ||\r
+ Variable->Attributes == (UINT32) -1) {\r
+ return 0;\r
+ }\r
+ return (UINTN) Variable->DataSize;\r
+}\r
+\r
+CHAR16 *\r
+GetVariableNamePtr (\r
+ IN VARIABLE_HEADER *Variable\r
+ )\r
+/*++\r
+\r
+Routine Description:\r
+\r
+ This code gets the pointer to the variable name.\r
+\r
+Arguments:\r
+\r
+ Variable Pointer to the Variable Header.\r
+\r
+Returns:\r
+\r
+ CHAR16* Pointer to Variable Name\r
+\r
+--*/\r
+{\r
+\r
+ return (CHAR16 *) (Variable + 1);\r
+}\r
+\r
+\r
+UINT8 *\r
+GetVariableDataPtr (\r
+ IN VARIABLE_HEADER *Variable\r
+ )\r
+/*++\r
+\r
+Routine Description:\r
+\r
+ This code gets the pointer to the variable data.\r
+\r
+Arguments:\r
+\r
+ Variable Pointer to the Variable Header.\r
+\r
+Returns:\r
+\r
+ UINT8* Pointer to Variable Data\r
+\r
+--*/\r
+{\r
+ UINTN Value;\r
+ \r
+ //\r
+ // Be careful about pad size for alignment\r
+ //\r
+ Value = (UINTN) GetVariableNamePtr (Variable);\r
+ Value += NameSizeOfVariable (Variable);\r
+ Value += GET_PAD_SIZE (NameSizeOfVariable (Variable));\r
+\r
+ return (UINT8 *) Value;\r
+}\r
+\r
+VARIABLE_HEADER *\r
+GetNextVariablePtr (\r
+ IN VARIABLE_HEADER *Variable\r
+ )\r
+/*++\r
+\r
+Routine Description:\r
+\r
+ This code gets the pointer to the next variable header.\r
+\r
+Arguments:\r
+\r
+ Variable Pointer to the Variable Header.\r
+\r
+Returns:\r
+\r
+ VARIABLE_HEADER* Pointer to next variable header.\r
+\r
+--*/\r
+{\r
+ UINTN Value;\r
+\r
+ if (!IsValidVariableHeader (Variable)) {\r
+ return NULL;\r
+ }\r
+\r
+ Value = (UINTN) GetVariableDataPtr (Variable);\r
+ Value += DataSizeOfVariable (Variable);\r
+ Value += GET_PAD_SIZE (DataSizeOfVariable (Variable));\r
+\r
+ //\r
+ // Be careful about pad size for alignment\r
+ //\r
+ return (VARIABLE_HEADER *) HEADER_ALIGN (Value);\r
+}\r
+\r
+\r
STATIC\r
VARIABLE_STORE_STATUS\r
EFIAPI\r
\r
--*/\r
{\r
+ VOID *Point;\r
+\r
if (VariableName[0] == 0) {\r
PtrTrack->CurrPtr = Variable;\r
return EFI_SUCCESS;\r
(((INT32 *) VendorGuid)[2] == ((INT32 *) &Variable->VendorGuid)[2]) &&\r
(((INT32 *) VendorGuid)[3] == ((INT32 *) &Variable->VendorGuid)[3])\r
) {\r
- ASSERT (NAMESIZE_OF_VARIABLE (Variable) != 0);\r
- if (!CompareMem (VariableName, GET_VARIABLE_NAME_PTR (Variable), NAMESIZE_OF_VARIABLE (Variable))) {\r
+ ASSERT (NameSizeOfVariable (Variable) != 0);\r
+ Point = (VOID *) GetVariableNamePtr (Variable);\r
+ if (!CompareMem (VariableName, Point, NameSizeOfVariable (Variable))) {\r
PtrTrack->CurrPtr = Variable;\r
return EFI_SUCCESS;\r
}\r
for (Count = 0; Count < IndexTable->Length; Count++)\r
{\r
MaxIndex = GetVariableByIndex (IndexTable, Count);\r
+\r
if (CompareWithValidVariable (MaxIndex, VariableName, VendorGuid, PtrTrack) == EFI_SUCCESS) {\r
PtrTrack->StartPtr = IndexTable->StartPtr;\r
PtrTrack->EndPtr = IndexTable->EndPtr;\r
//\r
// Find the variable by walk through non-volatile variable store\r
//\r
- IndexTable->StartPtr = (VARIABLE_HEADER *) (VariableStoreHeader + 1);\r
- IndexTable->EndPtr = (VARIABLE_HEADER *) ((UINTN) VariableStoreHeader + VariableStoreHeader->Size);\r
+ IndexTable->StartPtr = GetStartPointer (VariableStoreHeader);\r
+ IndexTable->EndPtr = GetEndPointer (VariableStoreHeader);\r
\r
//\r
// Start Pointers for the variable.\r
//\r
// Get data size\r
//\r
- VarDataSize = DATASIZE_OF_VARIABLE (Variable.CurrPtr);\r
+ VarDataSize = DataSizeOfVariable (Variable.CurrPtr);\r
if (*DataSize >= VarDataSize) {\r
- (*PeiServices)->CopyMem (Data, GET_VARIABLE_DATA_PTR (Variable.CurrPtr), VarDataSize);\r
+ (*PeiServices)->CopyMem (Data, GetVariableDataPtr (Variable.CurrPtr), VarDataSize);\r
\r
if (Attributes != NULL) {\r
*Attributes = Variable.CurrPtr->Attributes;\r
while (!(Variable.CurrPtr >= Variable.EndPtr || Variable.CurrPtr == NULL)) {\r
if (IsValidVariableHeader (Variable.CurrPtr)) {\r
if (Variable.CurrPtr->State == VAR_ADDED) {\r
- ASSERT (NAMESIZE_OF_VARIABLE (Variable.CurrPtr) != 0);\r
+ ASSERT (NameSizeOfVariable (Variable.CurrPtr) != 0);\r
\r
- VarNameSize = (UINTN) NAMESIZE_OF_VARIABLE (Variable.CurrPtr);\r
+ VarNameSize = (UINTN) NameSizeOfVariable (Variable.CurrPtr);\r
if (VarNameSize <= *VariableNameSize) {\r
- (*PeiServices)->CopyMem (VariableName, GET_VARIABLE_NAME_PTR (Variable.CurrPtr), VarNameSize);\r
+ (*PeiServices)->CopyMem (VariableName, GetVariableNamePtr (Variable.CurrPtr), VarNameSize);\r
\r
(*PeiServices)->CopyMem (VendorGuid, &Variable.CurrPtr->VendorGuid, sizeof (EFI_GUID));\r
\r