-\r
-/**\r
-\r
- This code gets the current status of Variable Store.\r
-\r
- @param VarStoreHeader Pointer to the Variable Store Header.\r
-\r
- @retval EfiRaw Variable store status is raw.\r
- @retval EfiValid Variable store status is valid.\r
- @retval EfiInvalid Variable store status is invalid.\r
-\r
-**/\r
-VARIABLE_STORE_STATUS\r
-GetVariableStoreStatus (\r
- IN VARIABLE_STORE_HEADER *VarStoreHeader\r
- )\r
-{\r
- if ((CompareGuid (&VarStoreHeader->Signature, &gEfiAuthenticatedVariableGuid) ||\r
- CompareGuid (&VarStoreHeader->Signature, &gEfiVariableGuid)) &&\r
- VarStoreHeader->Format == VARIABLE_STORE_FORMATTED &&\r
- VarStoreHeader->State == VARIABLE_STORE_HEALTHY\r
- ) {\r
-\r
- return EfiValid;\r
- } else if (((UINT32 *)(&VarStoreHeader->Signature))[0] == 0xffffffff &&\r
- ((UINT32 *)(&VarStoreHeader->Signature))[1] == 0xffffffff &&\r
- ((UINT32 *)(&VarStoreHeader->Signature))[2] == 0xffffffff &&\r
- ((UINT32 *)(&VarStoreHeader->Signature))[3] == 0xffffffff &&\r
- VarStoreHeader->Size == 0xffffffff &&\r
- VarStoreHeader->Format == 0xff &&\r
- VarStoreHeader->State == 0xff\r
- ) {\r
-\r
- return EfiRaw;\r
- } else {\r
- return EfiInvalid;\r
- }\r
-}\r
-\r
-/**\r
- This code gets the size of variable header.\r
-\r
- @return Size of variable header in bytes in type UINTN.\r
-\r
-**/\r
-UINTN\r
-GetVariableHeaderSize (\r
- VOID\r
- )\r
-{\r
- UINTN Value;\r
-\r
- if (mVariableModuleGlobal->VariableGlobal.AuthFormat) {\r
- Value = sizeof (AUTHENTICATED_VARIABLE_HEADER);\r
- } else {\r
- Value = sizeof (VARIABLE_HEADER);\r
- }\r
-\r
- return Value;\r
-}\r
-\r
-/**\r
-\r
- This code gets the size of name of variable.\r
-\r
- @param Variable Pointer to the Variable Header.\r
-\r
- @return UINTN Size of variable in bytes.\r
-\r
-**/\r
-UINTN\r
-NameSizeOfVariable (\r
- IN VARIABLE_HEADER *Variable\r
- )\r
-{\r
- AUTHENTICATED_VARIABLE_HEADER *AuthVariable;\r
-\r
- AuthVariable = (AUTHENTICATED_VARIABLE_HEADER *) Variable;\r
- if (mVariableModuleGlobal->VariableGlobal.AuthFormat) {\r
- if (AuthVariable->State == (UINT8) (-1) ||\r
- AuthVariable->DataSize == (UINT32) (-1) ||\r
- AuthVariable->NameSize == (UINT32) (-1) ||\r
- AuthVariable->Attributes == (UINT32) (-1)) {\r
- return 0;\r
- }\r
- return (UINTN) AuthVariable->NameSize;\r
- } else {\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
-\r
-/**\r
- This code sets the size of name of variable.\r
-\r
- @param[in] Variable Pointer to the Variable Header.\r
- @param[in] NameSize Name size to set.\r
-\r
-**/\r
-VOID\r
-SetNameSizeOfVariable (\r
- IN VARIABLE_HEADER *Variable,\r
- IN UINTN NameSize\r
- )\r
-{\r
- AUTHENTICATED_VARIABLE_HEADER *AuthVariable;\r
-\r
- AuthVariable = (AUTHENTICATED_VARIABLE_HEADER *) Variable;\r
- if (mVariableModuleGlobal->VariableGlobal.AuthFormat) {\r
- AuthVariable->NameSize = (UINT32) NameSize;\r
- } else {\r
- Variable->NameSize = (UINT32) NameSize;\r
- }\r
-}\r
-\r
-/**\r
-\r
- This code gets the size of variable data.\r
-\r
- @param Variable Pointer to the Variable Header.\r
-\r
- @return Size of variable in bytes.\r
-\r
-**/\r
-UINTN\r
-DataSizeOfVariable (\r
- IN VARIABLE_HEADER *Variable\r
- )\r
-{\r
- AUTHENTICATED_VARIABLE_HEADER *AuthVariable;\r
-\r
- AuthVariable = (AUTHENTICATED_VARIABLE_HEADER *) Variable;\r
- if (mVariableModuleGlobal->VariableGlobal.AuthFormat) {\r
- if (AuthVariable->State == (UINT8) (-1) ||\r
- AuthVariable->DataSize == (UINT32) (-1) ||\r
- AuthVariable->NameSize == (UINT32) (-1) ||\r
- AuthVariable->Attributes == (UINT32) (-1)) {\r
- return 0;\r
- }\r
- return (UINTN) AuthVariable->DataSize;\r
- } else {\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
-\r
-/**\r
- This code sets the size of variable data.\r
-\r
- @param[in] Variable Pointer to the Variable Header.\r
- @param[in] DataSize Data size to set.\r
-\r
-**/\r
-VOID\r
-SetDataSizeOfVariable (\r
- IN VARIABLE_HEADER *Variable,\r
- IN UINTN DataSize\r
- )\r
-{\r
- AUTHENTICATED_VARIABLE_HEADER *AuthVariable;\r
-\r
- AuthVariable = (AUTHENTICATED_VARIABLE_HEADER *) Variable;\r
- if (mVariableModuleGlobal->VariableGlobal.AuthFormat) {\r
- AuthVariable->DataSize = (UINT32) DataSize;\r
- } else {\r
- Variable->DataSize = (UINT32) DataSize;\r
- }\r
-}\r
-\r
-/**\r
-\r
- This code gets the pointer to the variable name.\r
-\r
- @param Variable Pointer to the Variable Header.\r
-\r
- @return Pointer to Variable Name which is Unicode encoding.\r
-\r
-**/\r
-CHAR16 *\r
-GetVariableNamePtr (\r
- IN VARIABLE_HEADER *Variable\r
- )\r
-{\r
- return (CHAR16 *) ((UINTN) Variable + GetVariableHeaderSize ());\r
-}\r
-\r
-/**\r
- This code gets the pointer to the variable guid.\r
-\r
- @param Variable Pointer to the Variable Header.\r
-\r
- @return A EFI_GUID* pointer to Vendor Guid.\r
-\r
-**/\r
-EFI_GUID *\r
-GetVendorGuidPtr (\r
- IN VARIABLE_HEADER *Variable\r
- )\r
-{\r
- AUTHENTICATED_VARIABLE_HEADER *AuthVariable;\r
-\r
- AuthVariable = (AUTHENTICATED_VARIABLE_HEADER *) Variable;\r
- if (mVariableModuleGlobal->VariableGlobal.AuthFormat) {\r
- return &AuthVariable->VendorGuid;\r
- } else {\r
- return &Variable->VendorGuid;\r
- }\r
-}\r
-\r
-/**\r
-\r
- This code gets the pointer to the variable data.\r
-\r
- @param Variable Pointer to the Variable Header.\r
-\r
- @return Pointer to Variable Data.\r
-\r
-**/\r
-UINT8 *\r
-GetVariableDataPtr (\r
- IN VARIABLE_HEADER *Variable\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
-/**\r
- This code gets the variable data offset related to variable header.\r
-\r
- @param Variable Pointer to the Variable Header.\r
-\r
- @return Variable Data offset.\r
-\r
-**/\r
-UINTN\r
-GetVariableDataOffset (\r
- IN VARIABLE_HEADER *Variable\r
- )\r
-{\r
- UINTN Value;\r
-\r
- //\r
- // Be careful about pad size for alignment\r
- //\r
- Value = GetVariableHeaderSize ();\r
- Value += NameSizeOfVariable (Variable);\r
- Value += GET_PAD_SIZE (NameSizeOfVariable (Variable));\r
-\r
- return Value;\r
-}\r
-\r
-/**\r
-\r
- This code gets the pointer to the next variable header.\r
-\r
- @param Variable Pointer to the Variable Header.\r
-\r
- @return Pointer to next variable header.\r
-\r
-**/\r
-VARIABLE_HEADER *\r
-GetNextVariablePtr (\r
- IN VARIABLE_HEADER *Variable\r
- )\r
-{\r
- UINTN Value;\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
-\r
- Gets the pointer to the first variable header in given variable store area.\r
-\r
- @param VarStoreHeader Pointer to the Variable Store Header.\r
-\r
- @return Pointer to the first variable header.\r
-\r
-**/\r
-VARIABLE_HEADER *\r
-GetStartPointer (\r
- IN VARIABLE_STORE_HEADER *VarStoreHeader\r
- )\r
-{\r
- //\r
- // The end of variable store.\r
- //\r
- return (VARIABLE_HEADER *) HEADER_ALIGN (VarStoreHeader + 1);\r
-}\r
-\r
-/**\r
-\r
- Gets the pointer to the end of the variable storage area.\r
-\r
- This function gets pointer to the end of the variable storage\r
- area, according to the input variable store header.\r
-\r
- @param VarStoreHeader Pointer to the Variable Store Header.\r
-\r
- @return Pointer to the end of the variable storage area.\r
-\r
-**/\r
-VARIABLE_HEADER *\r
-GetEndPointer (\r
- IN VARIABLE_STORE_HEADER *VarStoreHeader\r
- )\r
-{\r
- //\r
- // The end of variable store\r
- //\r
- return (VARIABLE_HEADER *) HEADER_ALIGN ((UINTN) VarStoreHeader + VarStoreHeader->Size);\r
-}\r
-\r