]> git.proxmox.com Git - mirror_edk2.git/blame - MdeModulePkg/Include/Guid/MemoryProfile.h
Merge branch 'master' of https://github.com/tianocore/edk2
[mirror_edk2.git] / MdeModulePkg / Include / Guid / MemoryProfile.h
CommitLineData
84edd20b
SZ
1/** @file\r
2 Memory profile data structure.\r
3\r
73e0de62 4 Copyright (c) 2014 - 2016, Intel Corporation. All rights reserved.<BR>\r
84edd20b
SZ
5 This program and the accompanying materials\r
6 are licensed and made available under the terms and conditions of the BSD License\r
7 which accompanies this distribution. The full text of the license may be found at\r
8 http://opensource.org/licenses/bsd-license.php\r
9\r
10 THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,\r
11 WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.\r
12\r
13**/\r
14\r
15#ifndef _MEMORY_PROFILE_H_\r
16#define _MEMORY_PROFILE_H_\r
17\r
94092aa6
SZ
18#include <Pi/PiFirmwareFile.h>\r
19\r
84edd20b 20//\r
db9b00f1 21// For BIOS MemoryType (0 ~ EfiMaxMemoryType - 1), it is recorded in UsageByType[MemoryType]. (Each valid entry has one entry)\r
84edd20b 22// For OS MemoryType (0x80000000 ~ 0xFFFFFFFF), it is recorded in UsageByType[EfiMaxMemoryType]. (All types are combined into one entry)\r
db9b00f1 23// For OEM MemoryType (0x70000000 ~ 0x7FFFFFFF), it is recorded in UsageByType[EfiMaxMemoryType + 1]. (All types are combined into one entry)\r
84edd20b
SZ
24//\r
25\r
26typedef struct {\r
27 UINT32 Signature;\r
28 UINT16 Length;\r
29 UINT16 Revision;\r
30} MEMORY_PROFILE_COMMON_HEADER;\r
31\r
32#define MEMORY_PROFILE_CONTEXT_SIGNATURE SIGNATURE_32 ('M','P','C','T')\r
db9b00f1 33#define MEMORY_PROFILE_CONTEXT_REVISION 0x0002\r
84edd20b
SZ
34\r
35typedef struct {\r
36 MEMORY_PROFILE_COMMON_HEADER Header;\r
37 UINT64 CurrentTotalUsage;\r
38 UINT64 PeakTotalUsage;\r
db9b00f1
SZ
39 UINT64 CurrentTotalUsageByType[EfiMaxMemoryType + 2];\r
40 UINT64 PeakTotalUsageByType[EfiMaxMemoryType + 2];\r
84edd20b
SZ
41 UINT64 TotalImageSize;\r
42 UINT32 ImageCount;\r
43 UINT32 SequenceCount;\r
44} MEMORY_PROFILE_CONTEXT;\r
45\r
46#define MEMORY_PROFILE_DRIVER_INFO_SIGNATURE SIGNATURE_32 ('M','P','D','I')\r
94092aa6 47#define MEMORY_PROFILE_DRIVER_INFO_REVISION 0x0003\r
84edd20b
SZ
48\r
49typedef struct {\r
50 MEMORY_PROFILE_COMMON_HEADER Header;\r
51 EFI_GUID FileName;\r
52 PHYSICAL_ADDRESS ImageBase;\r
53 UINT64 ImageSize;\r
54 PHYSICAL_ADDRESS EntryPoint;\r
55 UINT16 ImageSubsystem;\r
56 EFI_FV_FILETYPE FileType;\r
57 UINT8 Reserved[1];\r
58 UINT32 AllocRecordCount;\r
59 UINT64 CurrentUsage;\r
60 UINT64 PeakUsage;\r
db9b00f1
SZ
61 UINT64 CurrentUsageByType[EfiMaxMemoryType + 2];\r
62 UINT64 PeakUsageByType[EfiMaxMemoryType + 2];\r
94092aa6
SZ
63 UINT16 PdbStringOffset;\r
64 UINT8 Reserved2[6];\r
65//CHAR8 PdbString[];\r
84edd20b
SZ
66} MEMORY_PROFILE_DRIVER_INFO;\r
67\r
68typedef enum {\r
69 MemoryProfileActionAllocatePages = 1,\r
70 MemoryProfileActionFreePages = 2,\r
71 MemoryProfileActionAllocatePool = 3,\r
72 MemoryProfileActionFreePool = 4,\r
73} MEMORY_PROFILE_ACTION;\r
74\r
94092aa6
SZ
75//\r
76// Below is the detailed MEMORY_PROFILE_ACTION definition.\r
77//\r
78// 31 15 9 8 8 7 7 6 6 5-4 3 - 0\r
79// +----------------------------------------------+\r
80// |User | |Lib| |Re|Copy|Zero|Align|Type|Basic|\r
81// +----------------------------------------------+\r
82//\r
83\r
84//\r
85// Basic Action\r
86// 1 : AllocatePages\r
87// 2 : FreePages\r
88// 3 : AllocatePool\r
89// 4 : FreePool\r
90//\r
91#define MEMORY_PROFILE_ACTION_BASIC_MASK 0xF\r
92\r
93//\r
94// Extension\r
95//\r
96#define MEMORY_PROFILE_ACTION_EXTENSION_MASK 0xFFF0\r
97#define MEMORY_PROFILE_ACTION_EXTENSION_LIB_MASK 0x8000\r
98#define MEMORY_PROFILE_ACTION_EXTENSION_REALLOC_MASK 0x0200\r
99#define MEMORY_PROFILE_ACTION_EXTENSION_COPY_MASK 0x0100\r
100#define MEMORY_PROFILE_ACTION_EXTENSION_ZERO_MASK 0x0080\r
101#define MEMORY_PROFILE_ACTION_EXTENSION_ALIGN_MASK 0x0040\r
102#define MEMORY_PROFILE_ACTION_EXTENSION_MEM_TYPE_MASK 0x0030\r
103#define MEMORY_PROFILE_ACTION_EXTENSION_MEM_TYPE_BASIC 0x0000\r
104#define MEMORY_PROFILE_ACTION_EXTENSION_MEM_TYPE_RUNTIME 0x0010\r
105#define MEMORY_PROFILE_ACTION_EXTENSION_MEM_TYPE_RESERVED 0x0020\r
106\r
107//\r
108// Extension (used by memory allocation lib)\r
109//\r
110#define MEMORY_PROFILE_ACTION_LIB_ALLOCATE_PAGES 0x8001\r
111#define MEMORY_PROFILE_ACTION_LIB_ALLOCATE_RUNTIME_PAGES 0x8011\r
112#define MEMORY_PROFILE_ACTION_LIB_ALLOCATE_RESERVED_PAGES 0x8021\r
113#define MEMORY_PROFILE_ACTION_LIB_FREE_PAGES 0x8002\r
114#define MEMORY_PROFILE_ACTION_LIB_ALLOCATE_ALIGNED_PAGES 0x8041\r
115#define MEMORY_PROFILE_ACTION_LIB_ALLOCATE_ALIGNED_RUNTIME_PAGES 0x8051\r
116#define MEMORY_PROFILE_ACTION_LIB_ALLOCATE_ALIGNED_RESERVED_PAGES 0x8061\r
117#define MEMORY_PROFILE_ACTION_LIB_FREE_ALIGNED_PAGES 0x8042\r
118#define MEMORY_PROFILE_ACTION_LIB_ALLOCATE_POOL 0x8003\r
119#define MEMORY_PROFILE_ACTION_LIB_ALLOCATE_RUNTIME_POOL 0x8013\r
120#define MEMORY_PROFILE_ACTION_LIB_ALLOCATE_RESERVED_POOL 0x8023\r
121#define MEMORY_PROFILE_ACTION_LIB_FREE_POOL 0x8004\r
122#define MEMORY_PROFILE_ACTION_LIB_ALLOCATE_ZERO_POOL 0x8083\r
123#define MEMORY_PROFILE_ACTION_LIB_ALLOCATE_RUNTIME_ZERO_POOL 0x8093\r
124#define MEMORY_PROFILE_ACTION_LIB_ALLOCATE_RESERVED_ZERO_POOL 0x80a3\r
125#define MEMORY_PROFILE_ACTION_LIB_ALLOCATE_COPY_POOL 0x8103\r
126#define MEMORY_PROFILE_ACTION_LIB_ALLOCATE_RUNTIME_COPY_POOL 0x8113\r
127#define MEMORY_PROFILE_ACTION_LIB_ALLOCATE_RESERVED_COPY_POOL 0x8123\r
128#define MEMORY_PROFILE_ACTION_LIB_REALLOCATE_POOL 0x8203\r
129#define MEMORY_PROFILE_ACTION_LIB_REALLOCATE_RUNTIME_POOL 0x8213\r
130#define MEMORY_PROFILE_ACTION_LIB_REALLOCATE_RESERVED_POOL 0x8223\r
131\r
132//\r
133// User defined: 0x80000000~0xFFFFFFFF\r
134//\r
135// NOTE: User defined action MUST OR the basic action,\r
136// so that core can know the action is allocate or free,\r
137// and the type is pages (can be freed partially)\r
138// or pool (cannot be freed partially).\r
139//\r
140#define MEMORY_PROFILE_ACTION_USER_DEFINED_MASK 0x80000000\r
141\r
84edd20b 142#define MEMORY_PROFILE_ALLOC_INFO_SIGNATURE SIGNATURE_32 ('M','P','A','I')\r
94092aa6 143#define MEMORY_PROFILE_ALLOC_INFO_REVISION 0x0002\r
84edd20b
SZ
144\r
145typedef struct {\r
146 MEMORY_PROFILE_COMMON_HEADER Header;\r
147 PHYSICAL_ADDRESS CallerAddress;\r
148 UINT32 SequenceId;\r
149 UINT8 Reserved[4];\r
150 MEMORY_PROFILE_ACTION Action;\r
151 EFI_MEMORY_TYPE MemoryType;\r
152 PHYSICAL_ADDRESS Buffer;\r
153 UINT64 Size;\r
94092aa6
SZ
154 UINT16 ActionStringOffset;\r
155 UINT8 Reserved2[6];\r
156//CHAR8 ActionString[];\r
84edd20b
SZ
157} MEMORY_PROFILE_ALLOC_INFO;\r
158\r
159#define MEMORY_PROFILE_DESCRIPTOR_SIGNATURE SIGNATURE_32 ('M','P','D','R')\r
160#define MEMORY_PROFILE_DESCRIPTOR_REVISION 0x0001\r
161\r
162typedef struct {\r
163 MEMORY_PROFILE_COMMON_HEADER Header;\r
164 PHYSICAL_ADDRESS Address;\r
165 UINT64 Size;\r
166} MEMORY_PROFILE_DESCRIPTOR;\r
167\r
168#define MEMORY_PROFILE_FREE_MEMORY_SIGNATURE SIGNATURE_32 ('M','P','R','M')\r
169#define MEMORY_PROFILE_FREE_MEMORY_REVISION 0x0001\r
170\r
171typedef struct {\r
172 MEMORY_PROFILE_COMMON_HEADER Header;\r
173 UINT64 TotalFreeMemoryPages;\r
174 UINT32 FreeMemoryEntryCount;\r
175 UINT8 Reserved[4];\r
176 //MEMORY_PROFILE_DESCRIPTOR MemoryDescriptor[FreeMemoryEntryCount];\r
177} MEMORY_PROFILE_FREE_MEMORY;\r
178\r
179#define MEMORY_PROFILE_MEMORY_RANGE_SIGNATURE SIGNATURE_32 ('M','P','M','R')\r
180#define MEMORY_PROFILE_MEMORY_RANGE_REVISION 0x0001\r
181\r
182typedef struct {\r
183 MEMORY_PROFILE_COMMON_HEADER Header;\r
184 UINT32 MemoryRangeCount;\r
185 UINT8 Reserved[4];\r
186 //MEMORY_PROFILE_DESCRIPTOR MemoryDescriptor[MemoryRangeCount];\r
187} MEMORY_PROFILE_MEMORY_RANGE;\r
188\r
189//\r
190// UEFI memory profile layout:\r
191// +--------------------------------+\r
192// | CONTEXT |\r
193// +--------------------------------+\r
194// | DRIVER_INFO(1) |\r
195// +--------------------------------+\r
196// | ALLOC_INFO(1, 1) |\r
197// +--------------------------------+\r
198// | ALLOC_INFO(1, m1) |\r
199// +--------------------------------+\r
200// | DRIVER_INFO(n) |\r
201// +--------------------------------+\r
202// | ALLOC_INFO(n, 1) |\r
203// +--------------------------------+\r
204// | ALLOC_INFO(n, mn) |\r
205// +--------------------------------+\r
206//\r
207\r
208typedef struct _EDKII_MEMORY_PROFILE_PROTOCOL EDKII_MEMORY_PROFILE_PROTOCOL;\r
209\r
210/**\r
211 Get memory profile data.\r
212\r
213 @param[in] This The EDKII_MEMORY_PROFILE_PROTOCOL instance.\r
214 @param[in, out] ProfileSize On entry, points to the size in bytes of the ProfileBuffer.\r
215 On return, points to the size of the data returned in ProfileBuffer.\r
216 @param[out] ProfileBuffer Profile buffer.\r
217 \r
218 @return EFI_SUCCESS Get the memory profile data successfully.\r
94092aa6 219 @return EFI_UNSUPPORTED Memory profile is unsupported.\r
84edd20b
SZ
220 @return EFI_BUFFER_TO_SMALL The ProfileSize is too small for the resulting data. \r
221 ProfileSize is updated with the size required.\r
222\r
223**/\r
224typedef\r
225EFI_STATUS\r
226(EFIAPI *EDKII_MEMORY_PROFILE_GET_DATA)(\r
227 IN EDKII_MEMORY_PROFILE_PROTOCOL *This,\r
228 IN OUT UINT64 *ProfileSize,\r
229 OUT VOID *ProfileBuffer\r
230 );\r
231\r
232/**\r
233 Register image to memory profile.\r
234\r
235 @param[in] This The EDKII_MEMORY_PROFILE_PROTOCOL instance.\r
236 @param[in] FilePath File path of the image.\r
237 @param[in] ImageBase Image base address.\r
238 @param[in] ImageSize Image size.\r
239 @param[in] FileType File type of the image.\r
240\r
94092aa6
SZ
241 @return EFI_SUCCESS Register successfully.\r
242 @return EFI_UNSUPPORTED Memory profile is unsupported,\r
243 or memory profile for the image is not required.\r
244 @return EFI_OUT_OF_RESOURCES No enough resource for this register.\r
84edd20b
SZ
245\r
246**/\r
247typedef\r
248EFI_STATUS\r
249(EFIAPI *EDKII_MEMORY_PROFILE_REGISTER_IMAGE)(\r
250 IN EDKII_MEMORY_PROFILE_PROTOCOL *This,\r
251 IN EFI_DEVICE_PATH_PROTOCOL *FilePath,\r
252 IN PHYSICAL_ADDRESS ImageBase,\r
253 IN UINT64 ImageSize,\r
254 IN EFI_FV_FILETYPE FileType\r
255 );\r
256\r
257/**\r
258 Unregister image from memory profile.\r
259\r
260 @param[in] This The EDKII_MEMORY_PROFILE_PROTOCOL instance.\r
261 @param[in] FilePath File path of the image.\r
262 @param[in] ImageBase Image base address.\r
263 @param[in] ImageSize Image size.\r
264\r
94092aa6
SZ
265 @return EFI_SUCCESS Unregister successfully.\r
266 @return EFI_UNSUPPORTED Memory profile is unsupported,\r
267 or memory profile for the image is not required.\r
84edd20b
SZ
268 @return EFI_NOT_FOUND The image is not found.\r
269\r
270**/\r
271typedef\r
272EFI_STATUS\r
273(EFIAPI *EDKII_MEMORY_PROFILE_UNREGISTER_IMAGE)(\r
274 IN EDKII_MEMORY_PROFILE_PROTOCOL *This,\r
275 IN EFI_DEVICE_PATH_PROTOCOL *FilePath,\r
276 IN PHYSICAL_ADDRESS ImageBase,\r
277 IN UINT64 ImageSize\r
278 );\r
279\r
94092aa6
SZ
280#define MEMORY_PROFILE_RECORDING_ENABLE TRUE\r
281#define MEMORY_PROFILE_RECORDING_DISABLE FALSE\r
282\r
283/**\r
284 Get memory profile recording state.\r
285\r
286 @param[in] This The EDKII_MEMORY_PROFILE_PROTOCOL instance.\r
287 @param[out] RecordingState Recording state.\r
288\r
289 @return EFI_SUCCESS Memory profile recording state is returned.\r
290 @return EFI_UNSUPPORTED Memory profile is unsupported.\r
291 @return EFI_INVALID_PARAMETER RecordingState is NULL.\r
292\r
293**/\r
294typedef\r
295EFI_STATUS\r
296(EFIAPI *EDKII_MEMORY_PROFILE_GET_RECORDING_STATE) (\r
297 IN EDKII_MEMORY_PROFILE_PROTOCOL *This,\r
298 OUT BOOLEAN *RecordingState\r
299 );\r
300\r
301/**\r
302 Set memory profile recording state.\r
303\r
304 @param[in] This The EDKII_MEMORY_PROFILE_PROTOCOL instance.\r
305 @param[in] RecordingState Recording state.\r
306\r
307 @return EFI_SUCCESS Set memory profile recording state successfully.\r
308 @return EFI_UNSUPPORTED Memory profile is unsupported.\r
309\r
310**/\r
311typedef\r
312EFI_STATUS\r
313(EFIAPI *EDKII_MEMORY_PROFILE_SET_RECORDING_STATE) (\r
314 IN EDKII_MEMORY_PROFILE_PROTOCOL *This,\r
315 IN BOOLEAN RecordingState\r
316 );\r
317\r
318/**\r
319 Record memory profile of multilevel caller.\r
320\r
321 @param[in] This The EDKII_MEMORY_PROFILE_PROTOCOL instance.\r
322 @param[in] CallerAddress Address of caller.\r
323 @param[in] Action Memory profile action.\r
324 @param[in] MemoryType Memory type.\r
325 EfiMaxMemoryType means the MemoryType is unknown.\r
326 @param[in] Buffer Buffer address.\r
327 @param[in] Size Buffer size.\r
328 @param[in] ActionString String for memory profile action.\r
329 Only needed for user defined allocate action.\r
330\r
331 @return EFI_SUCCESS Memory profile is updated.\r
332 @return EFI_UNSUPPORTED Memory profile is unsupported,\r
333 or memory profile for the image is not required,\r
334 or memory profile for the memory type is not required.\r
335 @return EFI_ACCESS_DENIED It is during memory profile data getting.\r
336 @return EFI_ABORTED Memory profile recording is not enabled.\r
337 @return EFI_OUT_OF_RESOURCES No enough resource to update memory profile for allocate action.\r
338 @return EFI_NOT_FOUND No matched allocate info found for free action.\r
339\r
340**/\r
341typedef\r
342EFI_STATUS\r
343(EFIAPI *EDKII_MEMORY_PROFILE_RECORD) (\r
344 IN EDKII_MEMORY_PROFILE_PROTOCOL *This,\r
345 IN PHYSICAL_ADDRESS CallerAddress,\r
346 IN MEMORY_PROFILE_ACTION Action,\r
347 IN EFI_MEMORY_TYPE MemoryType,\r
348 IN VOID *Buffer,\r
349 IN UINTN Size,\r
350 IN CHAR8 *ActionString OPTIONAL\r
351 );\r
352\r
84edd20b 353struct _EDKII_MEMORY_PROFILE_PROTOCOL {\r
94092aa6
SZ
354 EDKII_MEMORY_PROFILE_GET_DATA GetData;\r
355 EDKII_MEMORY_PROFILE_REGISTER_IMAGE RegisterImage;\r
356 EDKII_MEMORY_PROFILE_UNREGISTER_IMAGE UnregisterImage;\r
357 EDKII_MEMORY_PROFILE_GET_RECORDING_STATE GetRecordingState;\r
358 EDKII_MEMORY_PROFILE_SET_RECORDING_STATE SetRecordingState;\r
359 EDKII_MEMORY_PROFILE_RECORD Record;\r
84edd20b
SZ
360};\r
361\r
362//\r
363// SMRAM profile layout:\r
364// +--------------------------------+\r
365// | CONTEXT |\r
366// +--------------------------------+\r
367// | DRIVER_INFO(1) |\r
368// +--------------------------------+\r
369// | ALLOC_INFO(1, 1) |\r
370// +--------------------------------+\r
371// | ALLOC_INFO(1, m1) |\r
372// +--------------------------------+\r
373// | DRIVER_INFO(n) |\r
374// +--------------------------------+\r
375// | ALLOC_INFO(n, 1) |\r
376// +--------------------------------+\r
377// | ALLOC_INFO(n, mn) |\r
378// +--------------------------------+\r
379// | FREE_MEMORY |\r
380// +--------------------------------+\r
381// | FREE MEMORY DESCRIPTOR(1) |\r
382// +--------------------------------+\r
383// | FREE MEMORY DESCRIPTOR(p) |\r
384// +--------------------------------+\r
385// | MEMORY_RANGE |\r
386// +--------------------------------+\r
387// | MEMORY RANGE DESCRIPTOR(1) |\r
388// +--------------------------------+\r
389// | MEMORY RANGE DESCRIPTOR(q) |\r
390// +--------------------------------+\r
391//\r
392\r
393//\r
394// SMRAM profile command\r
395//\r
73e0de62
SZ
396#define SMRAM_PROFILE_COMMAND_GET_PROFILE_INFO 0x1\r
397#define SMRAM_PROFILE_COMMAND_GET_PROFILE_DATA 0x2\r
84edd20b
SZ
398//\r
399// Below 2 commands are now used by ECP only and only valid before SmmReadyToLock\r
400//\r
73e0de62
SZ
401#define SMRAM_PROFILE_COMMAND_REGISTER_IMAGE 0x3\r
402#define SMRAM_PROFILE_COMMAND_UNREGISTER_IMAGE 0x4\r
403\r
404#define SMRAM_PROFILE_COMMAND_GET_PROFILE_DATA_BY_OFFSET 0x5\r
94092aa6
SZ
405#define SMRAM_PROFILE_COMMAND_GET_RECORDING_STATE 0x6\r
406#define SMRAM_PROFILE_COMMAND_SET_RECORDING_STATE 0x7\r
84edd20b
SZ
407\r
408typedef struct {\r
409 UINT32 Command;\r
410 UINT32 DataLength;\r
411 UINT64 ReturnStatus;\r
412} SMRAM_PROFILE_PARAMETER_HEADER;\r
413\r
414typedef struct {\r
415 SMRAM_PROFILE_PARAMETER_HEADER Header;\r
416 UINT64 ProfileSize;\r
417} SMRAM_PROFILE_PARAMETER_GET_PROFILE_INFO;\r
418\r
419typedef struct {\r
420 SMRAM_PROFILE_PARAMETER_HEADER Header;\r
421 UINT64 ProfileSize;\r
422 PHYSICAL_ADDRESS ProfileBuffer;\r
423} SMRAM_PROFILE_PARAMETER_GET_PROFILE_DATA;\r
424\r
73e0de62
SZ
425typedef struct {\r
426 SMRAM_PROFILE_PARAMETER_HEADER Header;\r
427 //\r
428 // On input, profile buffer size.\r
429 // On output, actual profile data size copied.\r
430 //\r
431 UINT64 ProfileSize;\r
432 PHYSICAL_ADDRESS ProfileBuffer;\r
433 //\r
434 // On input, profile buffer offset to copy.\r
435 // On output, next time profile buffer offset to copy.\r
436 //\r
437 UINT64 ProfileOffset;\r
438} SMRAM_PROFILE_PARAMETER_GET_PROFILE_DATA_BY_OFFSET;\r
439\r
94092aa6
SZ
440typedef struct {\r
441 SMRAM_PROFILE_PARAMETER_HEADER Header;\r
442 BOOLEAN RecordingState;\r
443} SMRAM_PROFILE_PARAMETER_RECORDING_STATE;\r
444\r
84edd20b
SZ
445typedef struct {\r
446 SMRAM_PROFILE_PARAMETER_HEADER Header;\r
447 EFI_GUID FileName;\r
448 PHYSICAL_ADDRESS ImageBuffer;\r
449 UINT64 NumberOfPage;\r
450} SMRAM_PROFILE_PARAMETER_REGISTER_IMAGE;\r
451\r
452typedef struct {\r
453 SMRAM_PROFILE_PARAMETER_HEADER Header;\r
454 EFI_GUID FileName;\r
455 PHYSICAL_ADDRESS ImageBuffer;\r
456 UINT64 NumberOfPage;\r
457} SMRAM_PROFILE_PARAMETER_UNREGISTER_IMAGE;\r
458\r
459\r
460#define EDKII_MEMORY_PROFILE_GUID { \\r
94092aa6 461 0x821c9a09, 0x541a, 0x40f6, { 0x9f, 0x43, 0xa, 0xd1, 0x93, 0xa1, 0x2c, 0xfe } \\r
84edd20b
SZ
462}\r
463\r
464extern EFI_GUID gEdkiiMemoryProfileGuid;\r
465\r
94092aa6
SZ
466typedef EDKII_MEMORY_PROFILE_PROTOCOL EDKII_SMM_MEMORY_PROFILE_PROTOCOL;\r
467\r
468#define EDKII_SMM_MEMORY_PROFILE_GUID { \\r
469 0xe22bbcca, 0x516a, 0x46a8, { 0x80, 0xe2, 0x67, 0x45, 0xe8, 0x36, 0x93, 0xbd } \\r
470}\r
471\r
472extern EFI_GUID gEdkiiSmmMemoryProfileGuid;\r
473\r
84edd20b
SZ
474#endif\r
475\r