]> git.proxmox.com Git - mirror_edk2.git/blame - DuetPkg/FSVariable/MemStorage.c
1. delete Include/Guid/VariableInfo.h
[mirror_edk2.git] / DuetPkg / FSVariable / MemStorage.c
CommitLineData
9071550e 1/*++\r
2\r
3Copyright (c) 2006 - 2007, Intel Corporation\r
4All rights reserved. This program and the accompanying materials\r
5are licensed and made available under the terms and conditions of the BSD License\r
6which accompanies this distribution. The full text of the license may be found at\r
7http://opensource.org/licenses/bsd-license.php\r
8\r
9THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,\r
10WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.\r
11\r
12Module Name:\r
13\r
14 MemStorage.c\r
15\r
16Abstract:\r
17\r
18 handles variable store/reads with emulated memory\r
19\r
20Revision History\r
21\r
22--*/\r
23#include "FSVariable.h"\r
24\r
9071550e 25VOID\r
26EFIAPI\r
e56dd2ce 27OnVirtualAddressChangeMs (\r
9071550e 28 IN EFI_EVENT Event,\r
29 IN VOID *Context\r
30 );\r
31\r
9071550e 32EFI_STATUS\r
33EFIAPI\r
34MemEraseStore(\r
35 IN VARIABLE_STORAGE *This\r
36 );\r
37\r
9071550e 38EFI_STATUS\r
39EFIAPI\r
40MemWriteStore (\r
41 IN VARIABLE_STORAGE *This,\r
42 IN UINTN Offset,\r
43 IN UINTN BufferSize,\r
44 IN VOID *Buffer\r
45 );\r
46\r
47EFI_STATUS\r
48MemStorageConstructor (\r
49 OUT VARIABLE_STORAGE **VarStore,\r
50 OUT EFI_EVENT_NOTIFY *GoVirtualEvent,\r
51 IN UINTN Size\r
52 )\r
53{\r
54 EFI_STATUS Status;\r
55 VS_DEV *Dev;\r
56\r
7c04a679 57 Status = gBS->AllocatePool (EfiRuntimeServicesData, sizeof(VS_DEV), (VOID **) &Dev);\r
9071550e 58 ASSERT_EFI_ERROR (Status);\r
59\r
60 ZeroMem (Dev, sizeof(VS_DEV));\r
61\r
3709c4cd 62 CopyGuid (&Dev->Signature, &gEfiVariableGuid);\r
9071550e 63 Dev->Size = Size;\r
64\r
65 Dev->VarStore.Erase = MemEraseStore;\r
66 Dev->VarStore.Write = MemWriteStore;\r
67\r
7c04a679 68 Status = gBS->AllocatePool (EfiRuntimeServicesData, Size, (VOID **) &VAR_DATA_PTR (Dev));\r
9071550e 69 ASSERT_EFI_ERROR (Status);\r
70\r
71 DEBUG ((EFI_D_ERROR, "VStorage: Size = 0x%x\n", Size));\r
72 \r
73 *VarStore = &Dev->VarStore;\r
e56dd2ce 74 *GoVirtualEvent = OnVirtualAddressChangeMs;\r
9071550e 75\r
76 return EFI_SUCCESS;\r
77}\r
78\r
9071550e 79VOID\r
80EFIAPI\r
e56dd2ce 81OnVirtualAddressChangeMs (\r
9071550e 82 IN EFI_EVENT Event,\r
83 IN VOID *Context\r
84 )\r
85{\r
86 VS_DEV *Dev;\r
87\r
88 Dev = DEV_FROM_THIS (Context);\r
89\r
7c04a679 90 EfiConvertPointer (0, (VOID **)&VAR_DATA_PTR (Dev));\r
91 EfiConvertPointer (0, (VOID **)&Dev->VarStore.Erase);\r
92 EfiConvertPointer (0, (VOID **)&Dev->VarStore.Write);\r
9071550e 93}\r
94\r
9071550e 95EFI_STATUS\r
96EFIAPI\r
97MemEraseStore(\r
98 IN VARIABLE_STORAGE *This\r
99 )\r
100{\r
101 VS_DEV *Dev;\r
102\r
103 Dev = DEV_FROM_THIS(This);\r
104 SetMem (VAR_DATA_PTR (Dev), Dev->Size, VAR_DEFAULT_VALUE);\r
105 return EFI_SUCCESS;\r
106}\r
107\r
108\r
9071550e 109EFI_STATUS\r
110EFIAPI\r
111MemWriteStore (\r
112 IN VARIABLE_STORAGE *This,\r
113 IN UINTN Offset,\r
114 IN UINTN BufferSize,\r
115 IN VOID *UserBuffer\r
116 )\r
117{\r
118 VS_DEV *Dev;\r
119\r
120 Dev = DEV_FROM_THIS(This);\r
121\r
122 ASSERT (Offset + BufferSize < Dev->Size);\r
123\r
124 // For better performance\r
125 if (VAR_DATA_PTR (Dev) + Offset != UserBuffer) {\r
126 CopyMem (VAR_DATA_PTR (Dev) + Offset, UserBuffer, BufferSize);\r
127 }\r
128 return EFI_SUCCESS;\r
129}\r