]> git.proxmox.com Git - mirror_edk2.git/blame_incremental - DuetPkg/FSVariable/MemStorage.c
Move Varialbe common definitions (GET_PAD_SIZE and HEADER_ALIGN macro) into MdeModule...
[mirror_edk2.git] / DuetPkg / FSVariable / MemStorage.c
... / ...
CommitLineData
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
25VOID\r
26EFIAPI\r
27OnVirtualAddressChangeMs (\r
28 IN EFI_EVENT Event,\r
29 IN VOID *Context\r
30 );\r
31\r
32EFI_STATUS\r
33EFIAPI\r
34MemEraseStore(\r
35 IN VARIABLE_STORAGE *This\r
36 );\r
37\r
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
57 Status = gBS->AllocatePool (EfiRuntimeServicesData, sizeof(VS_DEV), (VOID **) &Dev);\r
58 ASSERT_EFI_ERROR (Status);\r
59\r
60 ZeroMem (Dev, sizeof(VS_DEV));\r
61\r
62 Dev->Signature = VARIABLE_STORE_SIGNATURE;\r
63 Dev->Size = Size;\r
64\r
65 Dev->VarStore.Erase = MemEraseStore;\r
66 Dev->VarStore.Write = MemWriteStore;\r
67\r
68 Status = gBS->AllocatePool (EfiRuntimeServicesData, Size, (VOID **) &VAR_DATA_PTR (Dev));\r
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
74 *GoVirtualEvent = OnVirtualAddressChangeMs;\r
75\r
76 return EFI_SUCCESS;\r
77}\r
78\r
79VOID\r
80EFIAPI\r
81OnVirtualAddressChangeMs (\r
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
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
93}\r
94\r
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
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