]>
git.proxmox.com Git - mirror_edk2.git/blob - DuetPkg/FSVariable/MemStorage.c
3 Copyright (c) 2006 - 2007, Intel Corporation
4 All rights reserved. This program and the accompanying materials
5 are licensed and made available under the terms and conditions of the BSD License
6 which accompanies this distribution. The full text of the license may be found at
7 http://opensource.org/licenses/bsd-license.php
9 THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,
10 WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.
18 handles variable store/reads with emulated memory
23 #include "FSVariable.h"
27 OnVirtualAddressChangeMs (
35 IN VARIABLE_STORAGE
*This
41 IN VARIABLE_STORAGE
*This
,
48 MemStorageConstructor (
49 OUT VARIABLE_STORAGE
**VarStore
,
50 OUT EFI_EVENT_NOTIFY
*GoVirtualEvent
,
57 Status
= gBS
->AllocatePool (EfiRuntimeServicesData
, sizeof(VS_DEV
), (VOID
**) &Dev
);
58 ASSERT_EFI_ERROR (Status
);
60 ZeroMem (Dev
, sizeof(VS_DEV
));
62 Dev
->Signature
= VS_DEV_SIGNATURE
;
65 Dev
->VarStore
.Erase
= MemEraseStore
;
66 Dev
->VarStore
.Write
= MemWriteStore
;
68 Status
= gBS
->AllocatePool (EfiRuntimeServicesData
, Size
, (VOID
**) &VAR_DATA_PTR (Dev
));
69 ASSERT_EFI_ERROR (Status
);
71 DEBUG ((EFI_D_ERROR
, "VStorage: Size = 0x%x\n", Size
));
73 *VarStore
= &Dev
->VarStore
;
74 *GoVirtualEvent
= OnVirtualAddressChangeMs
;
81 OnVirtualAddressChangeMs (
88 Dev
= DEV_FROM_THIS (Context
);
90 EfiConvertPointer (0, (VOID
**)&VAR_DATA_PTR (Dev
));
91 EfiConvertPointer (0, (VOID
**)&Dev
->VarStore
.Erase
);
92 EfiConvertPointer (0, (VOID
**)&Dev
->VarStore
.Write
);
98 IN VARIABLE_STORAGE
*This
103 Dev
= DEV_FROM_THIS(This
);
104 SetMem (VAR_DATA_PTR (Dev
), Dev
->Size
, VAR_DEFAULT_VALUE
);
112 IN VARIABLE_STORAGE
*This
,
120 Dev
= DEV_FROM_THIS(This
);
122 ASSERT (Offset
+ BufferSize
< Dev
->Size
);
124 // For better performance
125 if (VAR_DATA_PTR (Dev
) + Offset
!= UserBuffer
) {
126 CopyMem (VAR_DATA_PTR (Dev
) + Offset
, UserBuffer
, BufferSize
);