]> git.proxmox.com Git - mirror_edk2.git/blame - MdeModulePkg/Include/Guid/MemoryProfile.h
MdeModulePkg: Add RamDiskDxe driver implementation
[mirror_edk2.git] / MdeModulePkg / Include / Guid / MemoryProfile.h
CommitLineData
84edd20b
SZ
1/** @file\r
2 Memory profile data structure.\r
3\r
db9b00f1 4 Copyright (c) 2014 - 2015, 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
18//\r
db9b00f1 19// For BIOS MemoryType (0 ~ EfiMaxMemoryType - 1), it is recorded in UsageByType[MemoryType]. (Each valid entry has one entry)\r
84edd20b 20// For OS MemoryType (0x80000000 ~ 0xFFFFFFFF), it is recorded in UsageByType[EfiMaxMemoryType]. (All types are combined into one entry)\r
db9b00f1 21// For OEM MemoryType (0x70000000 ~ 0x7FFFFFFF), it is recorded in UsageByType[EfiMaxMemoryType + 1]. (All types are combined into one entry)\r
84edd20b
SZ
22//\r
23\r
24typedef struct {\r
25 UINT32 Signature;\r
26 UINT16 Length;\r
27 UINT16 Revision;\r
28} MEMORY_PROFILE_COMMON_HEADER;\r
29\r
30#define MEMORY_PROFILE_CONTEXT_SIGNATURE SIGNATURE_32 ('M','P','C','T')\r
db9b00f1 31#define MEMORY_PROFILE_CONTEXT_REVISION 0x0002\r
84edd20b
SZ
32\r
33typedef struct {\r
34 MEMORY_PROFILE_COMMON_HEADER Header;\r
35 UINT64 CurrentTotalUsage;\r
36 UINT64 PeakTotalUsage;\r
db9b00f1
SZ
37 UINT64 CurrentTotalUsageByType[EfiMaxMemoryType + 2];\r
38 UINT64 PeakTotalUsageByType[EfiMaxMemoryType + 2];\r
84edd20b
SZ
39 UINT64 TotalImageSize;\r
40 UINT32 ImageCount;\r
41 UINT32 SequenceCount;\r
42} MEMORY_PROFILE_CONTEXT;\r
43\r
44#define MEMORY_PROFILE_DRIVER_INFO_SIGNATURE SIGNATURE_32 ('M','P','D','I')\r
db9b00f1 45#define MEMORY_PROFILE_DRIVER_INFO_REVISION 0x0002\r
84edd20b
SZ
46\r
47typedef struct {\r
48 MEMORY_PROFILE_COMMON_HEADER Header;\r
49 EFI_GUID FileName;\r
50 PHYSICAL_ADDRESS ImageBase;\r
51 UINT64 ImageSize;\r
52 PHYSICAL_ADDRESS EntryPoint;\r
53 UINT16 ImageSubsystem;\r
54 EFI_FV_FILETYPE FileType;\r
55 UINT8 Reserved[1];\r
56 UINT32 AllocRecordCount;\r
57 UINT64 CurrentUsage;\r
58 UINT64 PeakUsage;\r
db9b00f1
SZ
59 UINT64 CurrentUsageByType[EfiMaxMemoryType + 2];\r
60 UINT64 PeakUsageByType[EfiMaxMemoryType + 2];\r
84edd20b
SZ
61} MEMORY_PROFILE_DRIVER_INFO;\r
62\r
63typedef enum {\r
64 MemoryProfileActionAllocatePages = 1,\r
65 MemoryProfileActionFreePages = 2,\r
66 MemoryProfileActionAllocatePool = 3,\r
67 MemoryProfileActionFreePool = 4,\r
68} MEMORY_PROFILE_ACTION;\r
69\r
70#define MEMORY_PROFILE_ALLOC_INFO_SIGNATURE SIGNATURE_32 ('M','P','A','I')\r
71#define MEMORY_PROFILE_ALLOC_INFO_REVISION 0x0001\r
72\r
73typedef struct {\r
74 MEMORY_PROFILE_COMMON_HEADER Header;\r
75 PHYSICAL_ADDRESS CallerAddress;\r
76 UINT32 SequenceId;\r
77 UINT8 Reserved[4];\r
78 MEMORY_PROFILE_ACTION Action;\r
79 EFI_MEMORY_TYPE MemoryType;\r
80 PHYSICAL_ADDRESS Buffer;\r
81 UINT64 Size;\r
82} MEMORY_PROFILE_ALLOC_INFO;\r
83\r
84#define MEMORY_PROFILE_DESCRIPTOR_SIGNATURE SIGNATURE_32 ('M','P','D','R')\r
85#define MEMORY_PROFILE_DESCRIPTOR_REVISION 0x0001\r
86\r
87typedef struct {\r
88 MEMORY_PROFILE_COMMON_HEADER Header;\r
89 PHYSICAL_ADDRESS Address;\r
90 UINT64 Size;\r
91} MEMORY_PROFILE_DESCRIPTOR;\r
92\r
93#define MEMORY_PROFILE_FREE_MEMORY_SIGNATURE SIGNATURE_32 ('M','P','R','M')\r
94#define MEMORY_PROFILE_FREE_MEMORY_REVISION 0x0001\r
95\r
96typedef struct {\r
97 MEMORY_PROFILE_COMMON_HEADER Header;\r
98 UINT64 TotalFreeMemoryPages;\r
99 UINT32 FreeMemoryEntryCount;\r
100 UINT8 Reserved[4];\r
101 //MEMORY_PROFILE_DESCRIPTOR MemoryDescriptor[FreeMemoryEntryCount];\r
102} MEMORY_PROFILE_FREE_MEMORY;\r
103\r
104#define MEMORY_PROFILE_MEMORY_RANGE_SIGNATURE SIGNATURE_32 ('M','P','M','R')\r
105#define MEMORY_PROFILE_MEMORY_RANGE_REVISION 0x0001\r
106\r
107typedef struct {\r
108 MEMORY_PROFILE_COMMON_HEADER Header;\r
109 UINT32 MemoryRangeCount;\r
110 UINT8 Reserved[4];\r
111 //MEMORY_PROFILE_DESCRIPTOR MemoryDescriptor[MemoryRangeCount];\r
112} MEMORY_PROFILE_MEMORY_RANGE;\r
113\r
114//\r
115// UEFI memory profile layout:\r
116// +--------------------------------+\r
117// | CONTEXT |\r
118// +--------------------------------+\r
119// | DRIVER_INFO(1) |\r
120// +--------------------------------+\r
121// | ALLOC_INFO(1, 1) |\r
122// +--------------------------------+\r
123// | ALLOC_INFO(1, m1) |\r
124// +--------------------------------+\r
125// | DRIVER_INFO(n) |\r
126// +--------------------------------+\r
127// | ALLOC_INFO(n, 1) |\r
128// +--------------------------------+\r
129// | ALLOC_INFO(n, mn) |\r
130// +--------------------------------+\r
131//\r
132\r
133typedef struct _EDKII_MEMORY_PROFILE_PROTOCOL EDKII_MEMORY_PROFILE_PROTOCOL;\r
134\r
135/**\r
136 Get memory profile data.\r
137\r
138 @param[in] This The EDKII_MEMORY_PROFILE_PROTOCOL instance.\r
139 @param[in, out] ProfileSize On entry, points to the size in bytes of the ProfileBuffer.\r
140 On return, points to the size of the data returned in ProfileBuffer.\r
141 @param[out] ProfileBuffer Profile buffer.\r
142 \r
143 @return EFI_SUCCESS Get the memory profile data successfully.\r
144 @return EFI_BUFFER_TO_SMALL The ProfileSize is too small for the resulting data. \r
145 ProfileSize is updated with the size required.\r
146\r
147**/\r
148typedef\r
149EFI_STATUS\r
150(EFIAPI *EDKII_MEMORY_PROFILE_GET_DATA)(\r
151 IN EDKII_MEMORY_PROFILE_PROTOCOL *This,\r
152 IN OUT UINT64 *ProfileSize,\r
153 OUT VOID *ProfileBuffer\r
154 );\r
155\r
156/**\r
157 Register image to memory profile.\r
158\r
159 @param[in] This The EDKII_MEMORY_PROFILE_PROTOCOL instance.\r
160 @param[in] FilePath File path of the image.\r
161 @param[in] ImageBase Image base address.\r
162 @param[in] ImageSize Image size.\r
163 @param[in] FileType File type of the image.\r
164\r
165 @return EFI_SUCCESS Register success.\r
166 @return EFI_OUT_OF_RESOURCE No enough resource for this register.\r
167\r
168**/\r
169typedef\r
170EFI_STATUS\r
171(EFIAPI *EDKII_MEMORY_PROFILE_REGISTER_IMAGE)(\r
172 IN EDKII_MEMORY_PROFILE_PROTOCOL *This,\r
173 IN EFI_DEVICE_PATH_PROTOCOL *FilePath,\r
174 IN PHYSICAL_ADDRESS ImageBase,\r
175 IN UINT64 ImageSize,\r
176 IN EFI_FV_FILETYPE FileType\r
177 );\r
178\r
179/**\r
180 Unregister image from memory profile.\r
181\r
182 @param[in] This The EDKII_MEMORY_PROFILE_PROTOCOL instance.\r
183 @param[in] FilePath File path of the image.\r
184 @param[in] ImageBase Image base address.\r
185 @param[in] ImageSize Image size.\r
186\r
187 @return EFI_SUCCESS Unregister success.\r
188 @return EFI_NOT_FOUND The image is not found.\r
189\r
190**/\r
191typedef\r
192EFI_STATUS\r
193(EFIAPI *EDKII_MEMORY_PROFILE_UNREGISTER_IMAGE)(\r
194 IN EDKII_MEMORY_PROFILE_PROTOCOL *This,\r
195 IN EFI_DEVICE_PATH_PROTOCOL *FilePath,\r
196 IN PHYSICAL_ADDRESS ImageBase,\r
197 IN UINT64 ImageSize\r
198 );\r
199\r
200struct _EDKII_MEMORY_PROFILE_PROTOCOL {\r
201 EDKII_MEMORY_PROFILE_GET_DATA GetData;\r
202 EDKII_MEMORY_PROFILE_REGISTER_IMAGE RegisterImage;\r
203 EDKII_MEMORY_PROFILE_UNREGISTER_IMAGE UnregisterImage;\r
204};\r
205\r
206//\r
207// SMRAM profile layout:\r
208// +--------------------------------+\r
209// | CONTEXT |\r
210// +--------------------------------+\r
211// | DRIVER_INFO(1) |\r
212// +--------------------------------+\r
213// | ALLOC_INFO(1, 1) |\r
214// +--------------------------------+\r
215// | ALLOC_INFO(1, m1) |\r
216// +--------------------------------+\r
217// | DRIVER_INFO(n) |\r
218// +--------------------------------+\r
219// | ALLOC_INFO(n, 1) |\r
220// +--------------------------------+\r
221// | ALLOC_INFO(n, mn) |\r
222// +--------------------------------+\r
223// | FREE_MEMORY |\r
224// +--------------------------------+\r
225// | FREE MEMORY DESCRIPTOR(1) |\r
226// +--------------------------------+\r
227// | FREE MEMORY DESCRIPTOR(p) |\r
228// +--------------------------------+\r
229// | MEMORY_RANGE |\r
230// +--------------------------------+\r
231// | MEMORY RANGE DESCRIPTOR(1) |\r
232// +--------------------------------+\r
233// | MEMORY RANGE DESCRIPTOR(q) |\r
234// +--------------------------------+\r
235//\r
236\r
237//\r
238// SMRAM profile command\r
239//\r
240#define SMRAM_PROFILE_COMMAND_GET_PROFILE_INFO 0x1\r
241#define SMRAM_PROFILE_COMMAND_GET_PROFILE_DATA 0x2\r
242//\r
243// Below 2 commands are now used by ECP only and only valid before SmmReadyToLock\r
244//\r
245#define SMRAM_PROFILE_COMMAND_REGISTER_IMAGE 0x3\r
246#define SMRAM_PROFILE_COMMAND_UNREGISTER_IMAGE 0x4\r
247\r
248typedef struct {\r
249 UINT32 Command;\r
250 UINT32 DataLength;\r
251 UINT64 ReturnStatus;\r
252} SMRAM_PROFILE_PARAMETER_HEADER;\r
253\r
254typedef struct {\r
255 SMRAM_PROFILE_PARAMETER_HEADER Header;\r
256 UINT64 ProfileSize;\r
257} SMRAM_PROFILE_PARAMETER_GET_PROFILE_INFO;\r
258\r
259typedef struct {\r
260 SMRAM_PROFILE_PARAMETER_HEADER Header;\r
261 UINT64 ProfileSize;\r
262 PHYSICAL_ADDRESS ProfileBuffer;\r
263} SMRAM_PROFILE_PARAMETER_GET_PROFILE_DATA;\r
264\r
265typedef struct {\r
266 SMRAM_PROFILE_PARAMETER_HEADER Header;\r
267 EFI_GUID FileName;\r
268 PHYSICAL_ADDRESS ImageBuffer;\r
269 UINT64 NumberOfPage;\r
270} SMRAM_PROFILE_PARAMETER_REGISTER_IMAGE;\r
271\r
272typedef struct {\r
273 SMRAM_PROFILE_PARAMETER_HEADER Header;\r
274 EFI_GUID FileName;\r
275 PHYSICAL_ADDRESS ImageBuffer;\r
276 UINT64 NumberOfPage;\r
277} SMRAM_PROFILE_PARAMETER_UNREGISTER_IMAGE;\r
278\r
279\r
280#define EDKII_MEMORY_PROFILE_GUID { \\r
281 0x821c9a09, 0x541a, 0x40f6, 0x9f, 0x43, 0xa, 0xd1, 0x93, 0xa1, 0x2c, 0xfe \\r
282}\r
283\r
284extern EFI_GUID gEdkiiMemoryProfileGuid;\r
285\r
286#endif\r
287\r