Implement BlGetEfiVariable() and BlSetEfiVariable() routines
This commit is contained in:
parent
713f826387
commit
ee23cd90cb
@ -103,6 +103,54 @@ BlGetConfigurationTable(IN PEFI_GUID TableGuid,
|
|||||||
return STATUS_EFI_NOT_FOUND;
|
return STATUS_EFI_NOT_FOUND;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Gets the value of the EFI variable.
|
||||||
|
*
|
||||||
|
* @param Vendor
|
||||||
|
* Supplies a pointer to the unique vendor GUID.
|
||||||
|
*
|
||||||
|
* @param VariableName
|
||||||
|
* Supplies a pointer to tge NULL-terminated string containing the variable name.
|
||||||
|
*
|
||||||
|
* @param VariableValue
|
||||||
|
* Supplies a pointer to the buffer, where the variable value will be stored.
|
||||||
|
*
|
||||||
|
* @return This routine returns a status code.
|
||||||
|
*
|
||||||
|
* @since XT 1.0
|
||||||
|
*/
|
||||||
|
XTCDECL
|
||||||
|
EFI_STATUS
|
||||||
|
BlGetEfiVariable(IN PEFI_GUID Vendor,
|
||||||
|
IN PWCHAR VariableName,
|
||||||
|
OUT PVOID *VariableValue)
|
||||||
|
{
|
||||||
|
EFI_STATUS Status;
|
||||||
|
PVOID Buffer;
|
||||||
|
UINT_PTR Size;
|
||||||
|
|
||||||
|
/* Allocate a buffer for storing a variable's value */
|
||||||
|
Size = EFI_MAXIMUM_VARIABLE_SIZE * sizeof(PWCHAR);
|
||||||
|
Status = BlAllocateMemoryPool(Size, (PVOID*)&Buffer);
|
||||||
|
if(Status != STATUS_EFI_SUCCESS)
|
||||||
|
{
|
||||||
|
/* Memory allocation failure */
|
||||||
|
return Status;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Attempt to get variable value */
|
||||||
|
Status = EfiSystemTable->RuntimeServices->GetVariable(VariableName, Vendor, NULL, &Size, Buffer);
|
||||||
|
if(Status != STATUS_EFI_SUCCESS)
|
||||||
|
{
|
||||||
|
/* Failed to get variable, probably not found such one */
|
||||||
|
return Status;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Get variable value and return success */
|
||||||
|
*VariableValue = Buffer;
|
||||||
|
return STATUS_EFI_SUCCESS;
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Returns a random value based on the initialized RNG buffer.
|
* Returns a random value based on the initialized RNG buffer.
|
||||||
*
|
*
|
||||||
@ -250,6 +298,39 @@ BlRebootSystem()
|
|||||||
return EfiSystemTable->RuntimeServices->ResetSystem(EfiResetCold, STATUS_EFI_SUCCESS, 0, NULL);
|
return EfiSystemTable->RuntimeServices->ResetSystem(EfiResetCold, STATUS_EFI_SUCCESS, 0, NULL);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Sets a value of an EFI variable.
|
||||||
|
*
|
||||||
|
* @param Vendor
|
||||||
|
* Supplies a pointer to the unique vendor GUID.
|
||||||
|
*
|
||||||
|
* @param VariableName
|
||||||
|
* Supplies a pointer to tge NULL-terminated string containing the variable name.
|
||||||
|
*
|
||||||
|
* @param VariableValue
|
||||||
|
* Supplies the contents of the variable.
|
||||||
|
*
|
||||||
|
* @param Size
|
||||||
|
* Supplies the size of the variable data buffer.
|
||||||
|
*
|
||||||
|
* @return This routine returns a status code.
|
||||||
|
*
|
||||||
|
* @since XT 1.0
|
||||||
|
*/
|
||||||
|
XTCDECL
|
||||||
|
EFI_STATUS
|
||||||
|
BlSetEfiVariable(IN PEFI_GUID Vendor,
|
||||||
|
IN PWCHAR VariableName,
|
||||||
|
IN PVOID VariableValue,
|
||||||
|
IN UINT_PTR Size)
|
||||||
|
{
|
||||||
|
ULONG Attributes;
|
||||||
|
|
||||||
|
/* Set EFI variable */
|
||||||
|
Attributes = EFI_VARIABLE_NON_VOLATILE | EFI_VARIABLE_BOOTSERVICE_ACCESS | EFI_VARIABLE_RUNTIME_ACCESS;
|
||||||
|
return EfiSystemTable->RuntimeServices->SetVariable(VariableName, Vendor, Attributes, Size, VariableValue);
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Shuts down the machine.
|
* Shuts down the machine.
|
||||||
*
|
*
|
||||||
|
@ -137,6 +137,12 @@ EFI_STATUS
|
|||||||
BlGetEfiPath(IN PWCHAR SystemPath,
|
BlGetEfiPath(IN PWCHAR SystemPath,
|
||||||
OUT PWCHAR *EfiPath);
|
OUT PWCHAR *EfiPath);
|
||||||
|
|
||||||
|
XTCDECL
|
||||||
|
EFI_STATUS
|
||||||
|
BlGetEfiVariable(IN PEFI_GUID Vendor,
|
||||||
|
IN PWCHAR VariableName,
|
||||||
|
OUT PVOID *VariableValue);
|
||||||
|
|
||||||
XTCDECL
|
XTCDECL
|
||||||
VOID
|
VOID
|
||||||
BlGetMappingsCount(IN PXTBL_PAGE_MAPPING PageMap,
|
BlGetMappingsCount(IN PXTBL_PAGE_MAPPING PageMap,
|
||||||
@ -327,6 +333,13 @@ VOID
|
|||||||
BlSetCursorPosition(IN ULONGLONG PosX,
|
BlSetCursorPosition(IN ULONGLONG PosX,
|
||||||
IN ULONGLONG PosY);
|
IN ULONGLONG PosY);
|
||||||
|
|
||||||
|
XTCDECL
|
||||||
|
EFI_STATUS
|
||||||
|
BlSetEfiVariable(IN PEFI_GUID Vendor,
|
||||||
|
IN PWCHAR VariableName,
|
||||||
|
IN PVOID VariableValue,
|
||||||
|
IN UINT_PTR Size);
|
||||||
|
|
||||||
XTCDECL
|
XTCDECL
|
||||||
EFI_STATUS
|
EFI_STATUS
|
||||||
BlShutdownSystem();
|
BlShutdownSystem();
|
||||||
|
Loading…
Reference in New Issue
Block a user