+++ /dev/null
-/*++\r
-\r
-Caution: This file is used for Duet platform only, do not use them in real platform.\r
-All variable code, variable metadata, and variable data used by Duet platform are on \r
-disk. They can be changed by user. BIOS is not able to protoect those.\r
-Duet trusts all meta data from disk. If variable code, variable metadata and variable\r
-data is modified in inproper way, the behavior is undefined.\r
-\r
-Copyright (c) 2006 - 2014, Intel Corporation. All rights reserved.<BR>\r
-This program and the accompanying materials\r
-are licensed and made available under the terms and conditions of the BSD License\r
-which accompanies this distribution. The full text of the license may be found at\r
-http://opensource.org/licenses/bsd-license.php\r
-\r
-THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,\r
-WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.\r
-\r
-Module Name:\r
-\r
- MemStorage.c\r
-\r
-Abstract:\r
-\r
- handles variable store/reads with emulated memory\r
-\r
-Revision History\r
-\r
---*/\r
-#include "FSVariable.h"\r
-\r
-VOID\r
-EFIAPI\r
-OnVirtualAddressChangeMs (\r
- IN EFI_EVENT Event,\r
- IN VOID *Context\r
- );\r
-\r
-EFI_STATUS\r
-EFIAPI\r
-MemEraseStore(\r
- IN VARIABLE_STORAGE *This\r
- );\r
-\r
-EFI_STATUS\r
-EFIAPI\r
-MemWriteStore (\r
- IN VARIABLE_STORAGE *This,\r
- IN UINTN Offset,\r
- IN UINTN BufferSize,\r
- IN VOID *Buffer\r
- );\r
-\r
-EFI_STATUS\r
-MemStorageConstructor (\r
- OUT VARIABLE_STORAGE **VarStore,\r
- OUT EFI_EVENT_NOTIFY *GoVirtualEvent,\r
- IN UINTN Size\r
- )\r
-{\r
- EFI_STATUS Status;\r
- VS_DEV *Dev;\r
-\r
- Status = gBS->AllocatePool (EfiRuntimeServicesData, sizeof(VS_DEV), (VOID **) &Dev);\r
- ASSERT_EFI_ERROR (Status);\r
-\r
- ZeroMem (Dev, sizeof(VS_DEV));\r
-\r
- Dev->Signature = VS_DEV_SIGNATURE;\r
- Dev->Size = Size;\r
-\r
- Dev->VarStore.Erase = MemEraseStore;\r
- Dev->VarStore.Write = MemWriteStore;\r
-\r
- Status = gBS->AllocatePool (EfiRuntimeServicesData, Size, (VOID **) &VAR_DATA_PTR (Dev));\r
- ASSERT_EFI_ERROR (Status);\r
-\r
- DEBUG ((EFI_D_ERROR, "VStorage: Size = 0x%x\n", Size));\r
- \r
- *VarStore = &Dev->VarStore;\r
- *GoVirtualEvent = OnVirtualAddressChangeMs;\r
-\r
- return EFI_SUCCESS;\r
-}\r
-\r
-VOID\r
-EFIAPI\r
-OnVirtualAddressChangeMs (\r
- IN EFI_EVENT Event,\r
- IN VOID *Context\r
- )\r
-{\r
- VS_DEV *Dev;\r
-\r
- Dev = DEV_FROM_THIS (Context);\r
-\r
- EfiConvertPointer (0, (VOID **)&VAR_DATA_PTR (Dev));\r
- EfiConvertPointer (0, (VOID **)&Dev->VarStore.Erase);\r
- EfiConvertPointer (0, (VOID **)&Dev->VarStore.Write);\r
-}\r
-\r
-EFI_STATUS\r
-EFIAPI\r
-MemEraseStore(\r
- IN VARIABLE_STORAGE *This\r
- )\r
-{\r
- VS_DEV *Dev;\r
-\r
- Dev = DEV_FROM_THIS(This);\r
- SetMem (VAR_DATA_PTR (Dev), Dev->Size, VAR_DEFAULT_VALUE);\r
- return EFI_SUCCESS;\r
-}\r
-\r
-\r
-EFI_STATUS\r
-EFIAPI\r
-MemWriteStore (\r
- IN VARIABLE_STORAGE *This,\r
- IN UINTN Offset,\r
- IN UINTN BufferSize,\r
- IN VOID *UserBuffer\r
- )\r
-{\r
- VS_DEV *Dev;\r
-\r
- Dev = DEV_FROM_THIS(This);\r
-\r
- ASSERT (Offset + BufferSize < Dev->Size);\r
-\r
- // For better performance\r
- if (VAR_DATA_PTR (Dev) + Offset != UserBuffer) {\r
- CopyMem (VAR_DATA_PTR (Dev) + Offset, UserBuffer, BufferSize);\r
- }\r
- return EFI_SUCCESS;\r
-}\r