//\r
// Module globals\r
//\r
-static EFI_PEI_READ_ONLY_VARIABLE2_PPI mVariablePpi = {\r
+EFI_PEI_READ_ONLY_VARIABLE2_PPI mVariablePpi = {\r
PeiGetVariable,\r
PeiGetNextVariableName\r
};\r
\r
-static EFI_PEI_PPI_DESCRIPTOR mPpiListVariable = {\r
+EFI_PEI_PPI_DESCRIPTOR mPpiListVariable = {\r
(EFI_PEI_PPI_DESCRIPTOR_PPI | EFI_PEI_PPI_DESCRIPTOR_TERMINATE_LIST),\r
&gEfiPeiReadOnlyVariable2PpiGuid,\r
&mVariablePpi\r
\r
EFI_GUID mEfiVariableIndexTableGuid = EFI_VARIABLE_INDEX_TABLE_GUID;\r
\r
-EFI_STATUS\r
-EFIAPI\r
-PeimInitializeVariableServices (\r
- IN EFI_FFS_FILE_HEADER *FfsHeader,\r
- IN EFI_PEI_SERVICES **PeiServices\r
- )\r
-/*++\r
-\r
-Routine Description:\r
\r
+/**\r
Provide the functionality of the variable services.\r
+ \r
+ @param FileHandle Handle of the file being invoked. \r
+ Type EFI_PEI_FILE_HANDLE is defined in FfsFindNextFile().\r
+ @param PeiServices General purpose services available to every PEIM.\r
\r
-Arguments:\r
-\r
- FfsHeadher - The FFS file header\r
- PeiServices - General purpose services available to every PEIM.\r
-\r
-Returns:\r
-\r
- Status - EFI_SUCCESS if the interface could be successfully\r
- installed\r
+ @retval EFI_SUCCESS If the interface could be successfully installed\r
+ @retval Others Returned from PeiServicesInstallPpi()\r
\r
---*/\r
+**/\r
+EFI_STATUS\r
+EFIAPI\r
+PeimInitializeVariableServices (\r
+ IN EFI_PEI_FILE_HANDLE FileHandle,\r
+ IN CONST EFI_PEI_SERVICES **PeiServices\r
+ )\r
{\r
//\r
// Publish the variable capability to other modules\r
//\r
- return (**PeiServices).InstallPpi ((CONST EFI_PEI_SERVICES **)PeiServices, &mPpiListVariable);\r
+ return PeiServicesInstallPpi (&mPpiListVariable);\r
\r
}\r
\r
-VARIABLE_HEADER *\r
-GetStartPointer (\r
- IN VARIABLE_STORE_HEADER *VarStoreHeader\r
- )\r
-/*++\r
\r
-Routine Description:\r
+/**\r
+ This code gets the pointer to the first variable memory pointer byte.\r
\r
- This code gets the pointer to the first variable memory pointer byte\r
+ @param VarStoreHeader Pointer to the Variable Store Header.\r
\r
-Arguments:\r
+ @return VARIABLE_HEADER* pointer to last unavailable Variable Header.\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
+VARIABLE_HEADER *\r
+GetStartPointer (\r
+ IN VARIABLE_STORE_HEADER *VarStoreHeader\r
+ )\r
{\r
//\r
// The end of variable store\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
+ This code gets the pointer to the last variable memory pointer byte.\r
\r
- VarStoreHeader Pointer to the Variable Store Header.\r
+ @param VarStoreHeader Pointer to the Variable Store Header.\r
\r
-Returns:\r
+ @return VARIABLE_HEADER* pointer to last unavailable Variable Header.\r
\r
- VARIABLE_HEADER* Pointer to last unavailable Variable Header\r
-\r
---*/\r
+**/\r
+VARIABLE_HEADER *\r
+GetEndPointer (\r
+ IN VARIABLE_STORE_HEADER *VarStoreHeader\r
+ )\r
{\r
//\r
// The end of variable store\r
return (VARIABLE_HEADER *) HEADER_ALIGN ((UINTN) VarStoreHeader + VarStoreHeader->Size);\r
}\r
\r
-STATIC\r
-BOOLEAN\r
-EFIAPI\r
-IsValidVariableHeader (\r
- IN VARIABLE_HEADER *Variable\r
- )\r
-/*++\r
-\r
-Routine Description:\r
\r
+/**\r
This code checks if variable header is valid or not.\r
\r
-Arguments:\r
- Variable Pointer to the Variable Header.\r
+ @param Variable Pointer to the Variable Header.\r
\r
-Returns:\r
- TRUE Variable header is valid.\r
- FALSE Variable header is not valid.\r
+ @retval TRUE Variable header is valid.\r
+ @retval FALSE Variable header is not valid.\r
\r
---*/\r
+**/\r
+BOOLEAN\r
+IsValidVariableHeader (\r
+ IN VARIABLE_HEADER *Variable\r
+ )\r
{\r
if (Variable == NULL || Variable->StartId != VARIABLE_DATA ) {\r
return FALSE;\r
}\r
\r
\r
-UINTN\r
-NameSizeOfVariable (\r
- IN VARIABLE_HEADER *Variable\r
- )\r
-/*++\r
-\r
-Routine Description:\r
-\r
+/**\r
This code gets the size of name of variable.\r
\r
-Arguments:\r
+ @param Variable Pointer to the Variable Header.\r
\r
- Variable Pointer to the Variable Header.\r
+ @return Size of variable in bytes in type UINTN.\r
\r
-Returns:\r
-\r
- UINTN Size of variable in bytes\r
-\r
---*/\r
+**/\r
+UINTN\r
+NameSizeOfVariable (\r
+ IN VARIABLE_HEADER *Variable\r
+ )\r
{\r
if (Variable->State == (UINT8) (-1) ||\r
Variable->DataSize == (UINT32) -1 ||\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
+ This code gets the size of data of variable.\r
\r
- Variable Pointer to the Variable Header.\r
+ @param Variable Pointer to the Variable Header.\r
\r
-Returns:\r
+ @return Size of variable in bytes in type UINTN.\r
\r
- UINTN Size of variable in bytes\r
-\r
---*/\r
+**/\r
+UINTN\r
+DataSizeOfVariable (\r
+ IN VARIABLE_HEADER *Variable\r
+ )\r
{\r
if (Variable->State == (UINT8) -1 ||\r
Variable->DataSize == (UINT32) -1 ||\r
return (UINTN) Variable->DataSize;\r
}\r
\r
-CHAR16 *\r
-GetVariableNamePtr (\r
- IN VARIABLE_HEADER *Variable\r
- )\r
-/*++\r
-\r
-Routine Description:\r
-\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
+ @param Variable Pointer to the Variable Header.\r
\r
- CHAR16* Pointer to Variable Name\r
+ @return A CHAR16* pointer to Variable Name.\r
\r
---*/\r
+**/\r
+CHAR16 *\r
+GetVariableNamePtr (\r
+ IN VARIABLE_HEADER *Variable\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
+/**\r
This code gets the pointer to the variable data.\r
\r
-Arguments:\r
+ @param Variable Pointer to the Variable Header.\r
\r
- Variable Pointer to the Variable Header.\r
+ @return A UINT8* pointer to Variable Data.\r
\r
-Returns:\r
-\r
- UINT8* Pointer to Variable Data\r
-\r
---*/\r
+**/\r
+UINT8 *\r
+GetVariableDataPtr (\r
+ IN VARIABLE_HEADER *Variable\r
+ )\r
{\r
UINTN Value;\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
+/**\r
This code gets the pointer to the next variable header.\r
\r
-Arguments:\r
+ @param Variable Pointer to the Variable Header.\r
\r
- Variable Pointer to the Variable Header.\r
+ @return A VARIABLE_HEADER* pointer to next variable header.\r
\r
-Returns:\r
-\r
- VARIABLE_HEADER* Pointer to next variable header.\r
-\r
---*/\r
+**/\r
+VARIABLE_HEADER *\r
+GetNextVariablePtr (\r
+ IN VARIABLE_HEADER *Variable\r
+ )\r
{\r
UINTN Value;\r
\r
return (VARIABLE_HEADER *) HEADER_ALIGN (Value);\r
}\r
\r
+/**\r
+ This code gets the pointer to the variable name.\r
+\r
+ @param VarStoreHeader Pointer to the Variable Store Header.\r
+\r
+ @retval EfiRaw Variable store is raw\r
+ @retval EfiValid Variable store is valid\r
+ @retval EfiInvalid Variable store is invalid\r
\r
-STATIC\r
+**/\r
VARIABLE_STORE_STATUS\r
-EFIAPI\r
GetVariableStoreStatus (\r
IN VARIABLE_STORE_HEADER *VarStoreHeader\r
)\r
-/*++\r
-\r
-Routine Description:\r
-\r
- This code gets the pointer to the variable name.\r
-\r
-Arguments:\r
-\r
- VarStoreHeader Pointer to the Variable Store Header.\r
-\r
-Returns:\r
-\r
- EfiRaw Variable store is raw\r
- EfiValid Variable store is valid\r
- EfiInvalid Variable store is invalid\r
-\r
---*/\r
{\r
if (VarStoreHeader->Signature == VARIABLE_STORE_SIGNATURE &&\r
VarStoreHeader->Format == VARIABLE_STORE_FORMATTED &&\r
}\r
}\r
\r
-STATIC\r
+\r
+/**\r
+ This function compares a variable with variable entries in database.\r
+\r
+ @param Variable Pointer to the variable in our database\r
+ @param VariableName Name of the variable to compare to 'Variable'\r
+ @param VendorGuid GUID of the variable to compare to 'Variable'\r
+ @param PtrTrack Variable Track Pointer structure that contains Variable Information.\r
+\r
+ @retval EFI_SUCCESS Found match variable\r
+ @retval EFI_NOT_FOUND Variable not found\r
+\r
+**/\r
EFI_STATUS\r
CompareWithValidVariable (\r
IN VARIABLE_HEADER *Variable,\r
IN CONST EFI_GUID *VendorGuid,\r
OUT VARIABLE_POINTER_TRACK *PtrTrack\r
)\r
-/*++\r
-\r
-Routine Description:\r
-\r
- This function compares a variable with variable entries in database\r
-\r
-Arguments:\r
-\r
- Variable - Pointer to the variable in our database\r
- VariableName - Name of the variable to compare to 'Variable'\r
- VendorGuid - GUID of the variable to compare to 'Variable'\r
- PtrTrack - Variable Track Pointer structure that contains\r
- Variable Information.\r
-\r
-Returns:\r
-\r
- EFI_SUCCESS - Found match variable\r
- EFI_NOT_FOUND - Variable not found\r
-\r
---*/\r
{\r
VOID *Point;\r
\r
) {\r
ASSERT (NameSizeOfVariable (Variable) != 0);\r
Point = (VOID *) GetVariableNamePtr (Variable);\r
- if (!CompareMem (VariableName, Point, NameSizeOfVariable (Variable))) {\r
+ if (CompareMem (VariableName, Point, NameSizeOfVariable (Variable)) == 0) {\r
PtrTrack->CurrPtr = Variable;\r
return EFI_SUCCESS;\r
}\r
return EFI_NOT_FOUND;\r
}\r
\r
-STATIC\r
+\r
+/**\r
+ This code finds variable in storage blocks (Non-Volatile).\r
+\r
+ @param PeiServices General purpose services available to every PEIM.\r
+ @param VariableName Name of the variable to be found\r
+ @param VendorGuid Vendor GUID to be found.\r
+ @param PtrTrack Variable Track Pointer structure that contains Variable Information.\r
+\r
+ @retval EFI_SUCCESS Variable found successfully\r
+ @retval EFI_NOT_FOUND Variable not found\r
+ @retval EFI_INVALID_PARAMETER Invalid variable name\r
+\r
+**/\r
EFI_STATUS\r
-EFIAPI\r
FindVariable (\r
- IN EFI_PEI_SERVICES **PeiServices,\r
+ IN CONST EFI_PEI_SERVICES **PeiServices,\r
IN CONST CHAR16 *VariableName,\r
IN CONST EFI_GUID *VendorGuid,\r
OUT VARIABLE_POINTER_TRACK *PtrTrack\r
)\r
-/*++\r
-\r
-Routine Description:\r
-\r
- This code finds variable in storage blocks (Non-Volatile)\r
-\r
-Arguments:\r
-\r
- PeiServices - General purpose services available to every PEIM.\r
- VariableName - Name of the variable to be found\r
- VendorGuid - Vendor GUID to be found.\r
- PtrTrack - Variable Track Pointer structure that contains\r
- Variable Information.\r
-\r
-Returns:\r
-\r
- EFI_SUCCESS - Variable found successfully\r
- EFI_NOT_FOUND - Variable not found\r
- EFI_INVALID_PARAMETER - Invalid variable name\r
-\r
---*/\r
{\r
EFI_HOB_GUID_TYPE *GuidHob;\r
VARIABLE_STORE_HEADER *VariableStoreHeader;\r
IndexTable->GoneThrough = 0;\r
} else {\r
IndexTable = GET_GUID_HOB_DATA (GuidHob);\r
- for (Count = 0; Count < IndexTable->Length; Count++)\r
- {\r
+ for (Count = 0; Count < IndexTable->Length; Count++) {\r
MaxIndex = GetVariableByIndex (IndexTable, Count);\r
\r
if (CompareWithValidVariable (MaxIndex, VariableName, VendorGuid, PtrTrack) == EFI_SUCCESS) {\r
}\r
}\r
\r
- if (IndexTable->GoneThrough) {\r
+ if (IndexTable->GoneThrough != 0) {\r
return EFI_NOT_FOUND;\r
}\r
}\r
if (MaxIndex != NULL) {\r
Variable = GetNextVariablePtr (MaxIndex);\r
} else {\r
- if (IndexTable->StartPtr || IndexTable->EndPtr) {\r
+ if ((IndexTable->StartPtr != NULL) || (IndexTable->EndPtr != NULL)) {\r
Variable = IndexTable->StartPtr;\r
} else {\r
VariableBase = (UINT8 *) (UINTN) PcdGet32 (PcdFlashNvStorageVariableBase);\r
//\r
// Record Variable in VariableIndex HOB\r
//\r
- if (IndexTable->Length < VARIABLE_INDEX_TABLE_VOLUME)\r
- {\r
+ if (IndexTable->Length < VARIABLE_INDEX_TABLE_VOLUME) {\r
VariableIndexTableUpdate (IndexTable, Variable);\r
}\r
\r
return EFI_NOT_FOUND;\r
}\r
\r
+/**\r
+ This service retrieves a variable's value using its name and GUID.\r
+\r
+ Read the specified variable from the UEFI variable store. If the Data \r
+ buffer is too small to hold the contents of the variable, the error\r
+ EFI_BUFFER_TOO_SMALL is returned and DataSize is set to the required buffer\r
+ size to obtain the data.\r
+\r
+ @param This A pointer to this instance of the EFI_PEI_READ_ONLY_VARIABLE2_PPI.\r
+ @param VariableName A pointer to a null-terminated string that is the variable's name.\r
+ @param VariableGuid A pointer to an EFI_GUID that is the variable's GUID. The combination of\r
+ VariableGuid and VariableName must be unique.\r
+ @param Attributes If non-NULL, on return, points to the variable's attributes.\r
+ @param DataSize On entry, points to the size in bytes of the Data buffer.\r
+ On return, points to the size of the data returned in Data.\r
+ @param Data Points to the buffer which will hold the returned variable value.\r
+\r
+ @retval EFI_SUCCESS The variable was read successfully.\r
+ @retval EFI_NOT_FOUND The variable could not be found.\r
+ @retval EFI_BUFFER_TOO_SMALL The DataSize is too small for the resulting data. \r
+ DataSize is updated with the size required for \r
+ the specified variable.\r
+ @retval EFI_INVALID_PARAMETER VariableName, VariableGuid, DataSize or Data is NULL.\r
+ @retval EFI_DEVICE_ERROR The variable could not be retrieved because of a device error.\r
+\r
+**/\r
EFI_STATUS\r
EFIAPI\r
PeiGetVariable (\r
IN OUT UINTN *DataSize,\r
OUT VOID *Data\r
)\r
-/*++\r
-\r
-Routine Description:\r
-\r
- Provide the read variable functionality of the variable services.\r
-\r
-Arguments:\r
-\r
- PeiServices - General purpose services available to every PEIM.\r
-\r
- VariableName - The variable name\r
-\r
- VendorGuid - The vendor's GUID\r
-\r
- Attributes - Pointer to the attribute\r
-\r
- DataSize - Size of data\r
-\r
- Data - Pointer to data\r
-\r
-Returns:\r
-\r
- EFI_SUCCESS - The interface could be successfully installed\r
-\r
- EFI_NOT_FOUND - The variable could not be discovered\r
-\r
- EFI_BUFFER_TOO_SMALL - The caller buffer is not large enough\r
-\r
---*/\r
{\r
VARIABLE_POINTER_TRACK Variable;\r
UINTN VarDataSize;\r
EFI_STATUS Status;\r
- EFI_PEI_SERVICES **PeiServices;\r
+ CONST EFI_PEI_SERVICES **PeiServices;\r
\r
PeiServices = GetPeiServicesTablePointer ();\r
if (VariableName == NULL || VariableGuid == NULL || DataSize == NULL) {\r
//\r
VarDataSize = DataSizeOfVariable (Variable.CurrPtr);\r
if (*DataSize >= VarDataSize) {\r
- //\r
- // PO-TKW: Address one checking in this place\r
- //\r
if (Data == NULL) {\r
return EFI_INVALID_PARAMETER;\r
}\r
\r
- (*PeiServices)->CopyMem (Data, GetVariableDataPtr (Variable.CurrPtr), VarDataSize);\r
+ CopyMem (Data, GetVariableDataPtr (Variable.CurrPtr), VarDataSize);\r
\r
if (Attributes != NULL) {\r
*Attributes = Variable.CurrPtr->Attributes;\r
}\r
}\r
\r
+/**\r
+ Return the next variable name and GUID.\r
+\r
+ This function is called multiple times to retrieve the VariableName \r
+ and VariableGuid of all variables currently available in the system. \r
+ On each call, the previous results are passed into the interface, \r
+ and, on return, the interface returns the data for the next \r
+ interface. When the entire variable list has been returned, \r
+ EFI_NOT_FOUND is returned.\r
+\r
+ @param This A pointer to this instance of the EFI_PEI_READ_ONLY_VARIABLE2_PPI.\r
+\r
+ @param VariableNameSize On entry, points to the size of the buffer pointed to by VariableName.\r
+ @param VariableName On entry, a pointer to a null-terminated string that is the variable's name.\r
+ On return, points to the next variable's null-terminated name string.\r
+ @param VariableGuid On entry, a pointer to an UEFI _GUID that is the variable's GUID. \r
+ On return, a pointer to the next variable's GUID.\r
+\r
+ @retval EFI_SUCCESS The variable was read successfully.\r
+ @retval EFI_NOT_FOUND The variable could not be found.\r
+ @retval EFI_BUFFER_TOO_SMALL The VariableNameSize is too small for the resulting\r
+ data. VariableNameSize is updated with the size\r
+ required for the specified variable.\r
+ @retval EFI_INVALID_PARAMETER VariableName, VariableGuid or\r
+ VariableNameSize is NULL.\r
+ @retval EFI_DEVICE_ERROR The variable could not be retrieved because of a device error.\r
+\r
+**/\r
EFI_STATUS\r
EFIAPI\r
PeiGetNextVariableName (\r
IN OUT CHAR16 *VariableName,\r
IN OUT EFI_GUID *VariableGuid\r
)\r
-/*++\r
-\r
-Routine Description:\r
-\r
- Provide the get next variable functionality of the variable services.\r
-\r
-Arguments:\r
-\r
- PeiServices - General purpose services available to every PEIM.\r
- VariabvleNameSize - The variable name's size.\r
- VariableName - A pointer to the variable's name.\r
- VariableGuid - A pointer to the EFI_GUID structure.\r
-\r
- VariableNameSize - Size of the variable name\r
-\r
- VariableName - The variable name\r
-\r
- VendorGuid - The vendor's GUID\r
-\r
-Returns:\r
-\r
- EFI_SUCCESS - The interface could be successfully installed\r
-\r
- EFI_NOT_FOUND - The variable could not be discovered\r
-\r
---*/\r
{\r
VARIABLE_POINTER_TRACK Variable;\r
UINTN VarNameSize;\r
EFI_STATUS Status;\r
- EFI_PEI_SERVICES **PeiServices;\r
+ CONST EFI_PEI_SERVICES **PeiServices;\r
\r
PeiServices = GetPeiServicesTablePointer ();\r
if (VariableName == NULL || VariableGuid == NULL || VariableNameSize == NULL) {\r
\r
VarNameSize = (UINTN) NameSizeOfVariable (Variable.CurrPtr);\r
if (VarNameSize <= *VariableNameSize) {\r
- (*PeiServices)->CopyMem (VariableName, GetVariableNamePtr (Variable.CurrPtr), VarNameSize);\r
+ CopyMem (VariableName, GetVariableNamePtr (Variable.CurrPtr), VarNameSize);\r
\r
- (*PeiServices)->CopyMem (VariableGuid, &Variable.CurrPtr->VendorGuid, sizeof (EFI_GUID));\r
+ CopyMem (VariableGuid, &Variable.CurrPtr->VendorGuid, sizeof (EFI_GUID));\r
\r
Status = EFI_SUCCESS;\r
} else {\r