| /*++ | |
| Caution: This file is used for Duet platform only, do not use them in real platform. | |
| All variable code, variable metadata, and variable data used by Duet platform are on | |
| disk. They can be changed by user. BIOS is not able to protoect those. | |
| Duet trusts all meta data from disk. If variable code, variable metadata and variable | |
| data is modified in inproper way, the behavior is undefined. | |
| Copyright (c) 2006 - 2014, 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. | |
| Module Name: | |
| FSVariable.h | |
| Abstract: | |
| --*/ | |
| #ifndef _FS_VARIABLE_H | |
| #define _FS_VARIABLE_H | |
| // | |
| // Statements that include other header files | |
| // | |
| #include <PiDxe.h> | |
| #include <Library/BaseLib.h> | |
| #include <Library/PcdLib.h> | |
| #include <Library/BaseMemoryLib.h> | |
| #include <Library/MemoryAllocationLib.h> | |
| #include <Library/UefiBootServicesTableLib.h> | |
| #include <Library/UefiRuntimeLib.h> | |
| #include <Library/DebugLib.h> | |
| #include <Library/UefiLib.h> | |
| #include <Library/HobLib.h> | |
| #include <Library/DxeServicesTableLib.h> | |
| #include <Library/DevicePathLib.h> | |
| #include <Guid/HobList.h> | |
| #include <Guid/FlashMapHob.h> | |
| #include <Guid/VariableFormat.h> | |
| #include <Guid/GlobalVariable.h> | |
| #include <Protocol/Variable.h> | |
| #include <Protocol/VariableWrite.h> | |
| #include <Protocol/SimpleFileSystem.h> | |
| #include <Protocol/BlockIo.h> | |
| #include "EfiFlashMap.h" | |
| #include "VariableStorage.h" | |
| #define VOLATILE_VARIABLE_STORE_SIZE FixedPcdGet32(PcdVariableStoreSize) | |
| #define VARIABLE_SCRATCH_SIZE MAX(FixedPcdGet32(PcdMaxVariableSize), FixedPcdGet32(PcdMaxHardwareErrorVariableSize)) | |
| #define VARIABLE_RECLAIM_THRESHOLD (1024) | |
| /// | |
| /// The size of a 3 character ISO639 language code. | |
| /// | |
| #define ISO_639_2_ENTRY_SIZE 3 | |
| #define GET_VARIABLE_NAME_PTR(a) (CHAR16 *) ((UINTN) (a) + sizeof (VARIABLE_HEADER)) | |
| typedef enum { | |
| Physical, | |
| Virtual | |
| } VARIABLE_POINTER_TYPE; | |
| typedef enum { | |
| NonVolatile, | |
| Volatile, | |
| MaxType | |
| } VARIABLE_STORAGE_TYPE; | |
| typedef struct { | |
| VARIABLE_HEADER *CurrPtr; | |
| VARIABLE_HEADER *EndPtr; | |
| VARIABLE_HEADER *StartPtr; | |
| VARIABLE_STORAGE_TYPE Type; | |
| } VARIABLE_POINTER_TRACK; | |
| #define VARIABLE_MEMBER_OFFSET(Member, StartOffset) \ | |
| ( sizeof (VARIABLE_STORE_HEADER) + (StartOffset) + \ | |
| (UINTN) ((UINT8 *) &((VARIABLE_HEADER*) 0)->Member - (UINT8 *) &((VARIABLE_HEADER*) 0)->StartId) \ | |
| ) | |
| typedef struct { | |
| EFI_EVENT_NOTIFY GoVirtualChildEvent[MaxType]; | |
| VARIABLE_STORAGE *VariableStore[MaxType]; // Instance of VariableStorage | |
| VOID *VariableBase[MaxType]; // Start address of variable storage | |
| UINTN LastVariableOffset[MaxType]; // The position to write new variable to (index from VariableBase) | |
| VOID *Scratch; // Buffer used during reclaim | |
| UINTN CommonVariableTotalSize; | |
| UINTN HwErrVariableTotalSize; | |
| CHAR8 *PlatformLangCodes; | |
| CHAR8 *LangCodes; | |
| CHAR8 *PlatformLang; | |
| CHAR8 Lang[ISO_639_2_ENTRY_SIZE + 1]; | |
| } VARIABLE_GLOBAL; | |
| // | |
| // Functions | |
| // | |
| EFI_STATUS | |
| EFIAPI | |
| VariableServiceInitialize ( | |
| IN EFI_HANDLE ImageHandle, | |
| IN EFI_SYSTEM_TABLE *SystemTable | |
| ); | |
| VOID | |
| EFIAPI | |
| VariableClassAddressChangeEvent ( | |
| IN EFI_EVENT Event, | |
| IN VOID *Context | |
| ); | |
| EFI_STATUS | |
| EFIAPI | |
| DuetGetVariable ( | |
| IN CHAR16 *VariableName, | |
| IN EFI_GUID *VendorGuid, | |
| OUT UINT32 *Attributes OPTIONAL, | |
| IN OUT UINTN *DataSize, | |
| OUT VOID *Data | |
| ); | |
| EFI_STATUS | |
| EFIAPI | |
| GetNextVariableName ( | |
| IN OUT UINTN *VariableNameSize, | |
| IN OUT CHAR16 *VariableName, | |
| IN OUT EFI_GUID *VendorGuid | |
| ); | |
| EFI_STATUS | |
| EFIAPI | |
| SetVariable ( | |
| IN CHAR16 *VariableName, | |
| IN EFI_GUID *VendorGuid, | |
| IN UINT32 Attributes, | |
| IN UINTN DataSize, | |
| IN VOID *Data | |
| ); | |
| EFI_STATUS | |
| EFIAPI | |
| QueryVariableInfo ( | |
| IN UINT32 Attributes, | |
| OUT UINT64 *MaximumVariableStorageSize, | |
| OUT UINT64 *RemainingVariableStorageSize, | |
| OUT UINT64 *MaximumVariableSize | |
| ); | |
| #endif |