summaryrefslogtreecommitdiffstats
path: root/OvmfPkg/Library/NvVarsFileLib/VarBuffer.c
diff options
context:
space:
mode:
Diffstat (limited to 'OvmfPkg/Library/NvVarsFileLib/VarBuffer.c')
-rw-r--r--OvmfPkg/Library/NvVarsFileLib/VarBuffer.c345
1 files changed, 0 insertions, 345 deletions
diff --git a/OvmfPkg/Library/NvVarsFileLib/VarBuffer.c b/OvmfPkg/Library/NvVarsFileLib/VarBuffer.c
deleted file mode 100644
index 7f42b4304e..0000000000
--- a/OvmfPkg/Library/NvVarsFileLib/VarBuffer.c
+++ /dev/null
@@ -1,345 +0,0 @@
-/** @file
- File System Access
-
- Copyright (c) 2004 - 2009, Intel Corporation. All rights reserved.<BR>
- This program and the accompanying materials
- are licensed and made available under the terms and conditions of the BSD License
- which accompanies this distribution. The full text of the license may be found at
- http://opensource.org/licenses/bsd-license.php
-
- THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,
- WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.
-
-**/
-
-#include "NvVarsFileLib.h"
-
-#include <Library/BaseMemoryLib.h>
-#include <Library/DebugLib.h>
-#include <Library/MemoryAllocationLib.h>
-#include <Library/UefiRuntimeServicesTableLib.h>
-
-
-/**
- Writes the variable into the file so it can be restored from
- the file on future boots of the system.
-
- @param[in] File - The file to write to
- @param[in] Name - Variable name string
- @param[in] NameSize - Size of Name in bytes
- @param[in] Guid - GUID of variable
- @param[in] Attributes - Attributes of variable
- @param[in] Data - Buffer containing Data for variable
- @param[in] DataSize - Size of Data in bytes
-
- @return EFI_STATUS based on the success or failure of the operation
-
-**/
-EFI_STATUS
-PackVariableIntoFile (
- IN EFI_FILE_HANDLE File,
- IN CHAR16 *Name,
- IN UINT32 NameSize,
- IN EFI_GUID *Guid,
- IN UINT32 Attributes,
- IN VOID *Data,
- IN UINT32 DataSize
- )
-{
- EFI_STATUS Status;
- UINTN WriteSize;
-
- WriteSize = sizeof (NameSize);
- Status = FileHandleWrite (File, &WriteSize, &NameSize);
- if (EFI_ERROR (Status)) {
- return Status;
- }
-
- WriteSize = NameSize;
- Status = FileHandleWrite (File, &WriteSize, (VOID*) Name);
- if (EFI_ERROR (Status)) {
- return Status;
- }
-
- WriteSize = sizeof (*Guid);
- Status = FileHandleWrite (File, &WriteSize, (VOID*) Guid);
- if (EFI_ERROR (Status)) {
- return Status;
- }
-
- WriteSize = sizeof (Attributes);
- Status = FileHandleWrite (File, &WriteSize, &Attributes);
- if (EFI_ERROR (Status)) {
- return Status;
- }
-
- WriteSize = sizeof (DataSize);
- Status = FileHandleWrite (File, &WriteSize, &DataSize);
- if (EFI_ERROR (Status)) {
- return Status;
- }
-
- WriteSize = DataSize;
- Status = FileHandleWrite (File, &WriteSize, Data);
-
- return Status;
-}
-
-
-/**
- Unpacks the next variable from the NvVars file data
-
- @param[in] Buffer - Buffer pointing to the next variable instance
- On subsequent calls, the pointer should be incremented
- by the returned SizeUsed value.
- @param[in] MaxSize - Max allowable size for the variable data
- On subsequent calls, this should be decremented
- by the returned SizeUsed value.
- @param[out] Name - Variable name string (address in Buffer)
- @param[out] NameSize - Size of Name in bytes
- @param[out] Guid - GUID of variable (address in Buffer)
- @param[out] Attributes - Attributes of variable
- @param[out] Data - Buffer containing Data for variable (address in Buffer)
- @param[out] DataSize - Size of Data in bytes
- @param[out] SizeUsed - Total size used for this variable instance in Buffer
-
- @return EFI_STATUS based on the success or failure of the operation
-
-**/
-EFI_STATUS
-UnpackVariableFromBuffer (
- IN VOID *Buffer,
- IN UINTN MaxSize,
- OUT CHAR16 **Name,
- OUT UINT32 *NameSize,
- OUT EFI_GUID **Guid,
- OUT UINT32 *Attributes,
- OUT UINT32 *DataSize,
- OUT VOID **Data,
- OUT UINTN *SizeUsed
- )
-{
- UINT8 *BytePtr;
- UINTN Offset;
-
- BytePtr = (UINT8*)Buffer;
- Offset = 0;
-
- *NameSize = *(UINT32*) (BytePtr + Offset);
- Offset = Offset + sizeof (UINT32);
-
- if (Offset > MaxSize) {
- return EFI_INVALID_PARAMETER;
- }
-
- *Name = (CHAR16*) (BytePtr + Offset);
- Offset = Offset + *(UINT32*)BytePtr;
- if (Offset > MaxSize) {
- return EFI_INVALID_PARAMETER;
- }
-
- *Guid = (EFI_GUID*) (BytePtr + Offset);
- Offset = Offset + sizeof (EFI_GUID);
- if (Offset > MaxSize) {
- return EFI_INVALID_PARAMETER;
- }
-
- *Attributes = *(UINT32*) (BytePtr + Offset);
- Offset = Offset + sizeof (UINT32);
- if (Offset > MaxSize) {
- return EFI_INVALID_PARAMETER;
- }
-
- *DataSize = *(UINT32*) (BytePtr + Offset);
- Offset = Offset + sizeof (UINT32);
- if (Offset > MaxSize) {
- return EFI_INVALID_PARAMETER;
- }
-
- *Data = (VOID*) (BytePtr + Offset);
- Offset = Offset + *DataSize;
- if (Offset > MaxSize) {
- return EFI_INVALID_PARAMETER;
- }
-
- *SizeUsed = Offset;
-
- return EFI_SUCCESS;
-}
-
-
-/**
- Examines the NvVars file contents, and updates variables based on it.
-
- @param[in] Buffer - Buffer with NvVars data
- @param[in] MaxSize - Size of Buffer in bytes
- @param[in] DryRun - If TRUE, then no variable modifications should be made
- (If TRUE, the Buffer is still parsed for validity.)
-
- @return EFI_STATUS based on the success or failure of the operation
-
-**/
-EFI_STATUS
-UnpackVariablesFromBuffer (
- IN VOID *Buffer,
- IN UINTN MaxSize,
- IN BOOLEAN DryRun
- )
-{
- EFI_STATUS Status;
- UINTN Count;
- UINTN TotalSizeUsed;
- UINTN SizeUsed;
-
- CHAR16 *Name;
- UINT32 NameSize;
- CHAR16 *AlignedName;
- UINT32 AlignedNameMaxSize;
- EFI_GUID *Guid;
- UINT32 Attributes;
- UINT32 DataSize;
- VOID *Data;
-
- AlignedName = NULL;
- AlignedNameMaxSize = 0;
-
- for (
- Status = EFI_SUCCESS, Count = 0, TotalSizeUsed = 0;
- !EFI_ERROR (Status) && (TotalSizeUsed < MaxSize);
- ) {
- Status = UnpackVariableFromBuffer (
- (VOID*) ((UINT8*) Buffer + TotalSizeUsed),
- (MaxSize - TotalSizeUsed),
- &Name,
- &NameSize,
- &Guid,
- &Attributes,
- &DataSize,
- &Data,
- &SizeUsed
- );
- if (EFI_ERROR (Status)) {
- return Status;
- }
-
- //
- // We copy the name to a separately allocated buffer,
- // to be sure it is 16-bit aligned.
- //
- if (NameSize > AlignedNameMaxSize) {
- if (AlignedName != NULL) {
- FreePool (AlignedName);
- }
- AlignedName = AllocatePool (NameSize);
- }
- if (AlignedName == NULL) {
- return EFI_OUT_OF_RESOURCES;
- }
- CopyMem (AlignedName, Name, NameSize);
-
- DEBUG ((
- EFI_D_INFO,
- "Unpacked variable %g:%s\n",
- Guid,
- AlignedName
- ));
-
- TotalSizeUsed = TotalSizeUsed + SizeUsed;
-
- DEBUG ((
- EFI_D_INFO,
- "TotalSizeUsed(%d); MaxSize(%d)\n",
- TotalSizeUsed,
- MaxSize
- ));
-
- if (!DryRun) {
- //
- // Set the variable contents
- //
- gRT->SetVariable (
- AlignedName,
- Guid,
- Attributes,
- DataSize,
- Data
- );
-
- Count++;
-
- DEBUG ((
- EFI_D_INFO,
- "Restored variable %g:%s\n",
- Guid,
- AlignedName
- ));
- }
-
- }
-
- if (AlignedName != NULL) {
- FreePool (AlignedName);
- }
-
- //
- // Make sure the entire buffer was used, or else return an error
- //
- if (TotalSizeUsed != MaxSize) {
- DEBUG ((
- EFI_D_INFO,
- "TotalSizeUsed(%d) != MaxSize(%d)\n",
- TotalSizeUsed,
- MaxSize
- ));
- return EFI_INVALID_PARAMETER;
- }
-
- if (Count > 0) {
- DEBUG ((
- EFI_D_INFO,
- "Restored %d Variables\n",
- Count
- ));
- }
-
- return EFI_SUCCESS;
-}
-
-
-/**
- Examines the NvVars file contents, and updates variables based on it.
-
- @param[in] VarsBuffer - Buffer with NvVars data
- @param[in] VarsBufferSize - Size of VarsBuffer in bytes
-
- @return EFI_STATUS based on the success or failure of the operation
-
-**/
-EFI_STATUS
-SetVariablesFromBuffer (
- IN VOID *VarsBuffer,
- IN UINTN VarsBufferSize
- )
-{
- EFI_STATUS Status;
-
- //
- // First test to make sure the entire buffer is in a good state
- //
- Status = UnpackVariablesFromBuffer (VarsBuffer, VarsBufferSize, TRUE);
- if (EFI_ERROR (Status)) {
- DEBUG ((EFI_D_INFO, "NvVars buffer format was invalid\n"));
- return Status;
- }
-
- //
- // Now, actually restore the variables.
- //
- Status = UnpackVariablesFromBuffer (VarsBuffer, VarsBufferSize, FALSE);
- if (EFI_ERROR (Status)) {
- return Status;
- }
-
- return Status;
-}
-