2 Functions to deal with Mem buffer
4 Copyright (c) 2005 - 2018, Intel Corporation. All rights reserved. <BR>
5 SPDX-License-Identifier: BSD-2-Clause-Patent
11 extern EFI_HANDLE HImageHandleBackup
;
13 extern HEFI_EDITOR_BUFFER_IMAGE HBufferImage
;
15 extern BOOLEAN HBufferImageNeedRefresh
;
16 extern BOOLEAN HBufferImageOnlyLineNeedRefresh
;
17 extern BOOLEAN HBufferImageMouseNeedRefresh
;
19 extern HEFI_EDITOR_GLOBAL_EDITOR HMainEditor
;
21 HEFI_EDITOR_MEM_IMAGE HMemImage
;
22 HEFI_EDITOR_MEM_IMAGE HMemImageBackupVar
;
25 // for basic initialization of HDiskImage
27 HEFI_EDITOR_MEM_IMAGE HMemImageConst
= {
34 Initialization function for HDiskImage.
36 @retval EFI_SUCCESS The operation was successful.
37 @retval EFI_LOAD_ERROR A load error occured.
47 // basically initialize the HMemImage
49 CopyMem (&HMemImage
, &HMemImageConst
, sizeof (HMemImage
));
51 Status
= gBS
->LocateProtocol (
52 &gEfiCpuIo2ProtocolGuid
,
54 (VOID
**)&HMemImage
.IoFncs
56 if (!EFI_ERROR (Status
)) {
59 return EFI_LOAD_ERROR
;
64 Backup function for HDiskImage. Only a few fields need to be backup.
65 This is for making the Disk buffer refresh as few as possible.
67 @retval EFI_SUCCESS The operation was successful.
74 HMemImageBackupVar
.Offset
= HMemImage
.Offset
;
75 HMemImageBackupVar
.Size
= HMemImage
.Size
;
81 Set FileName field in HFileImage.
83 @param[in] Offset The offset.
84 @param[in] Size The size.
86 @retval EFI_SUCCESS The operation was successful.
87 @retval EFI_OUT_OF_RESOURCES A memory allocation failed.
90 HMemImageSetMemOffsetSize (
96 HMemImage
.Offset
= Offset
;
97 HMemImage
.Size
= Size
;
103 Read a disk from disk into HBufferImage.
105 @param[in] Offset The offset.
106 @param[in] Size The size.
107 @param[in] Recover if is for recover, no information print.
109 @retval EFI_LOAD_ERROR A load error occured.
110 @retval EFI_SUCCESS The operation was successful.
111 @retval EFI_OUT_OF_RESOURCES A memory allocation failed.
124 HEFI_EDITOR_LINE
*Line
;
126 HBufferImage
.BufferType
= FileTypeMemBuffer
;
128 Buffer
= AllocateZeroPool (Size
);
129 if (Buffer
== NULL
) {
130 StatusBarSetStatusString (L
"Read Memory Failed");
131 return EFI_OUT_OF_RESOURCES
;
134 Status
= HMemImage
.IoFncs
->Mem
.Read (
142 if (EFI_ERROR (Status
)) {
144 StatusBarSetStatusString (L
"Memory Specified Not Accessible");
145 return EFI_LOAD_ERROR
;
150 Status
= HBufferImageBufferToList (Buffer
, Size
);
153 if (EFI_ERROR (Status
)) {
154 StatusBarSetStatusString (L
"Read Memory Failed");
158 Status
= HMemImageSetMemOffsetSize (Offset
, Size
);
160 HBufferImage
.DisplayPosition
.Row
= 2;
161 HBufferImage
.DisplayPosition
.Column
= 10;
163 HBufferImage
.MousePosition
.Row
= 2;
164 HBufferImage
.MousePosition
.Column
= 10;
166 HBufferImage
.LowVisibleRow
= 1;
167 HBufferImage
.HighBits
= TRUE
;
169 HBufferImage
.BufferPosition
.Row
= 1;
170 HBufferImage
.BufferPosition
.Column
= 1;
173 Str
= CatSPrint(NULL
, L
"%d Lines Read", HBufferImage
.NumLines
);
175 StatusBarSetStatusString (L
"Read Memory Failed");
176 return EFI_OUT_OF_RESOURCES
;
179 StatusBarSetStatusString (Str
);
180 SHELL_FREE_NON_NULL (Str
);
182 HMainEditor
.SelectStart
= 0;
183 HMainEditor
.SelectEnd
= 0;
190 if (HBufferImage
.Lines
!= NULL
) {
191 HBufferImage
.CurrentLine
= CR (HBufferImage
.ListHead
->ForwardLink
, HEFI_EDITOR_LINE
, Link
, EFI_EDITOR_LINE_LIST
);
194 // create a dummy line
196 Line
= HBufferImageCreateLine ();
198 StatusBarSetStatusString (L
"Read Memory Failed");
199 return EFI_OUT_OF_RESOURCES
;
202 HBufferImage
.CurrentLine
= Line
;
205 HBufferImage
.Modified
= FALSE
;
206 HBufferImageNeedRefresh
= TRUE
;
207 HBufferImageOnlyLineNeedRefresh
= FALSE
;
208 HBufferImageMouseNeedRefresh
= TRUE
;
215 Save lines in HBufferImage to disk.
217 @param[in] Offset The offset.
218 @param[in] Size The size.
220 @retval EFI_LOAD_ERROR A load error occured.
221 @retval EFI_SUCCESS The operation was successful.
222 @retval EFI_OUT_OF_RESOURCES A memory allocation failed.
235 // not modified, so directly return
237 if (HBufferImage
.Modified
== FALSE
) {
241 HBufferImage
.BufferType
= FileTypeMemBuffer
;
243 Buffer
= AllocateZeroPool (Size
);
245 if (Buffer
== NULL
) {
246 return EFI_OUT_OF_RESOURCES
;
249 Status
= HBufferImageListToBuffer (Buffer
, Size
);
250 if (EFI_ERROR (Status
)) {
255 // write back to memory
257 Status
= HMemImage
.IoFncs
->Mem
.Write (
267 if (EFI_ERROR (Status
)) {
268 return EFI_LOAD_ERROR
;
273 HBufferImage
.Modified
= FALSE
;