blob: bda521f07f990ce11a3f5cfa222bcc4168afe637 [file] [log] [blame]
Marc Jones21cde8b2017-05-07 16:47:36 -06001/*
2 * This file is part of the coreboot project.
3 *
4 * This program is free software; you can redistribute it and/or modify
5 * it under the terms of the GNU General Public License as published by
6 * the Free Software Foundation; version 2 of the License.
7 *
8 * This program is distributed in the hope that it will be useful,
9 * but WITHOUT ANY WARRANTY; without even the implied warranty of
10 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
11 * GNU General Public License for more details.
12 */
13
14
Richard Spiegel0ad74ac2017-12-08 16:53:29 -070015#include <amdblocks/agesawrapper.h>
Marc Jones21cde8b2017-05-07 16:47:36 -060016#include <amdlib.h>
17#include <arch/acpi.h>
Richard Spiegel0ad74ac2017-12-08 16:53:29 -070018#include <amdblocks/BiosCallOuts.h>
Marc Jones21cde8b2017-05-07 16:47:36 -060019#include <cbmem.h>
Marc Jones21cde8b2017-05-07 16:47:36 -060020#include <string.h>
21
Marshall Dawsoned501d5b2017-09-18 16:13:17 -060022static void *GetHeapBase(void)
Marc Jones21cde8b2017-05-07 16:47:36 -060023{
Marshall Dawson6c747062017-09-21 12:21:14 -060024 return cbmem_add(CBMEM_ID_RESUME_SCRATCH, BIOS_HEAP_SIZE);
Marc Jones21cde8b2017-05-07 16:47:36 -060025}
26
Marshall Dawson6c747062017-09-21 12:21:14 -060027static void EmptyHeap(int unused)
Marc Jones21cde8b2017-05-07 16:47:36 -060028{
Marshall Dawsoned501d5b2017-09-18 16:13:17 -060029 void *BiosManagerPtr = GetHeapBase();
Marc Jones21cde8b2017-05-07 16:47:36 -060030 memset(BiosManagerPtr, 0, BIOS_HEAP_SIZE);
31}
32
Marshall Dawson6c747062017-09-21 12:21:14 -060033#if IS_ENABLED(CONFIG_LATE_CBMEM_INIT)
34#error "Only EARLY_CBMEM_INIT is supported."
35#endif
36ROMSTAGE_CBMEM_INIT_HOOK(EmptyHeap)
37
Stefan Reinauer8d29dd12017-06-26 14:30:39 -070038AGESA_STATUS agesa_AllocateBuffer (UINT32 Func, UINTN Data, VOID *ConfigPtr)
Marc Jones21cde8b2017-05-07 16:47:36 -060039{
40 UINT32 AvailableHeapSize;
41 UINT8 *BiosHeapBaseAddr;
42 UINT32 CurrNodeOffset;
43 UINT32 PrevNodeOffset;
44 UINT32 FreedNodeOffset;
45 UINT32 BestFitNodeOffset;
46 UINT32 BestFitPrevNodeOffset;
47 UINT32 NextFreeOffset;
48 BIOS_BUFFER_NODE *CurrNodePtr;
49 BIOS_BUFFER_NODE *FreedNodePtr;
50 BIOS_BUFFER_NODE *BestFitNodePtr;
51 BIOS_BUFFER_NODE *BestFitPrevNodePtr;
52 BIOS_BUFFER_NODE *NextFreePtr;
53 BIOS_HEAP_MANAGER *BiosHeapBasePtr;
54 AGESA_BUFFER_PARAMS *AllocParams;
55
Marshall Dawsonf3dc71e2017-06-14 16:22:07 -060056 AllocParams = ((AGESA_BUFFER_PARAMS *)ConfigPtr);
Marc Jones21cde8b2017-05-07 16:47:36 -060057 AllocParams->BufferPointer = NULL;
58
59 AvailableHeapSize = BIOS_HEAP_SIZE - sizeof(BIOS_HEAP_MANAGER);
Marshall Dawsoned501d5b2017-09-18 16:13:17 -060060 BiosHeapBaseAddr = GetHeapBase();
Marshall Dawsonf3dc71e2017-06-14 16:22:07 -060061 BiosHeapBasePtr = (BIOS_HEAP_MANAGER *)BiosHeapBaseAddr;
Marc Jones21cde8b2017-05-07 16:47:36 -060062
63 if (BiosHeapBasePtr->StartOfAllocatedNodes == 0) {
64 /* First allocation */
65 CurrNodeOffset = sizeof(BIOS_HEAP_MANAGER);
Marshall Dawsonf3dc71e2017-06-14 16:22:07 -060066 CurrNodePtr = (BIOS_BUFFER_NODE *)(BiosHeapBaseAddr
67 + CurrNodeOffset);
Marc Jones21cde8b2017-05-07 16:47:36 -060068 CurrNodePtr->BufferHandle = AllocParams->BufferHandle;
69 CurrNodePtr->BufferSize = AllocParams->BufferLength;
70 CurrNodePtr->NextNodeOffset = 0;
Marshall Dawsonf3dc71e2017-06-14 16:22:07 -060071 AllocParams->BufferPointer = (UINT8 *)CurrNodePtr
72 + sizeof(BIOS_BUFFER_NODE);
Marc Jones21cde8b2017-05-07 16:47:36 -060073
74 /* Update the remaining free space */
Marshall Dawsonf3dc71e2017-06-14 16:22:07 -060075 FreedNodeOffset = CurrNodeOffset + CurrNodePtr->BufferSize
76 + sizeof(BIOS_BUFFER_NODE);
77 FreedNodePtr = (BIOS_BUFFER_NODE *)(BiosHeapBaseAddr
78 + FreedNodeOffset);
79 FreedNodePtr->BufferSize = AvailableHeapSize
80 - sizeof(BIOS_BUFFER_NODE)
81 - CurrNodePtr->BufferSize;
Marc Jones21cde8b2017-05-07 16:47:36 -060082 FreedNodePtr->NextNodeOffset = 0;
83
84 /* Update the offsets for Allocated and Freed nodes */
85 BiosHeapBasePtr->StartOfAllocatedNodes = CurrNodeOffset;
86 BiosHeapBasePtr->StartOfFreedNodes = FreedNodeOffset;
87 } else {
88 /* Find out whether BufferHandle has been allocated on the heap.
89 * If it has, return AGESA_BOUNDS_CHK.
90 */
91 CurrNodeOffset = BiosHeapBasePtr->StartOfAllocatedNodes;
Marshall Dawsonf3dc71e2017-06-14 16:22:07 -060092 CurrNodePtr = (BIOS_BUFFER_NODE *)(BiosHeapBaseAddr
93 + CurrNodeOffset);
Marc Jones21cde8b2017-05-07 16:47:36 -060094
95 while (CurrNodeOffset != 0) {
Marshall Dawsonf3dc71e2017-06-14 16:22:07 -060096 CurrNodePtr = (BIOS_BUFFER_NODE *)(BiosHeapBaseAddr
97 + CurrNodeOffset);
98 if (CurrNodePtr->BufferHandle ==
99 AllocParams->BufferHandle) {
Marc Jones21cde8b2017-05-07 16:47:36 -0600100 return AGESA_BOUNDS_CHK;
101 }
102 CurrNodeOffset = CurrNodePtr->NextNodeOffset;
Marshall Dawsonf3dc71e2017-06-14 16:22:07 -0600103 /* If BufferHandle has not been allocated on the heap,
104 * CurrNodePtr here points to the end of the allocated
105 * nodes list.
Marc Jones21cde8b2017-05-07 16:47:36 -0600106 */
107 }
108 /* Find the node that best fits the requested buffer size */
109 FreedNodeOffset = BiosHeapBasePtr->StartOfFreedNodes;
110 PrevNodeOffset = FreedNodeOffset;
111 BestFitNodeOffset = 0;
112 BestFitPrevNodeOffset = 0;
Marshall Dawsonf3dc71e2017-06-14 16:22:07 -0600113 while (FreedNodeOffset != 0) { /* todo: simplify this */
114 FreedNodePtr = (BIOS_BUFFER_NODE *)(BiosHeapBaseAddr
115 + FreedNodeOffset);
Marc Jones21cde8b2017-05-07 16:47:36 -0600116 if (FreedNodePtr->BufferSize >= (AllocParams->BufferLength + sizeof(BIOS_BUFFER_NODE))) {
117 if (BestFitNodeOffset == 0) {
118 /* First node that fits the requested buffer size */
119 BestFitNodeOffset = FreedNodeOffset;
120 BestFitPrevNodeOffset = PrevNodeOffset;
121 } else {
122 /* Find out whether current node is a better fit than the previous nodes */
Marshall Dawsonf3dc71e2017-06-14 16:22:07 -0600123 BestFitNodePtr = (BIOS_BUFFER_NODE *)(BiosHeapBaseAddr + BestFitNodeOffset);
Marc Jones21cde8b2017-05-07 16:47:36 -0600124 if (BestFitNodePtr->BufferSize > FreedNodePtr->BufferSize) {
125 BestFitNodeOffset = FreedNodeOffset;
126 BestFitPrevNodeOffset = PrevNodeOffset;
127 }
128 }
129 }
130 PrevNodeOffset = FreedNodeOffset;
131 FreedNodeOffset = FreedNodePtr->NextNodeOffset;
132 } /* end of while loop */
133
134 if (BestFitNodeOffset == 0) {
Marshall Dawsonf3dc71e2017-06-14 16:22:07 -0600135 /* If we could not find a node that fits the requested
136 * buffer size, return AGESA_BOUNDS_CHK.
Marc Jones21cde8b2017-05-07 16:47:36 -0600137 */
138 return AGESA_BOUNDS_CHK;
139 } else {
Marshall Dawsonf3dc71e2017-06-14 16:22:07 -0600140 BestFitNodePtr = (BIOS_BUFFER_NODE *)(BiosHeapBaseAddr
141 + BestFitNodeOffset);
142 BestFitPrevNodePtr = (BIOS_BUFFER_NODE *)
143 (BiosHeapBaseAddr
144 + BestFitPrevNodeOffset);
Marc Jones21cde8b2017-05-07 16:47:36 -0600145
Marshall Dawsonf3dc71e2017-06-14 16:22:07 -0600146 /* If BestFitNode is larger than the requested buffer,
147 * fragment the node further
148 */
149 if (BestFitNodePtr->BufferSize >
150 (AllocParams->BufferLength
151 + sizeof(BIOS_BUFFER_NODE))) {
152 NextFreeOffset = BestFitNodeOffset
153 + AllocParams->BufferLength
154 + sizeof(BIOS_BUFFER_NODE);
Marc Jones21cde8b2017-05-07 16:47:36 -0600155
Marshall Dawsonf3dc71e2017-06-14 16:22:07 -0600156 NextFreePtr = (BIOS_BUFFER_NODE *)
157 (BiosHeapBaseAddr
158 + NextFreeOffset);
159 NextFreePtr->BufferSize =
160 BestFitNodePtr->BufferSize
161 - (AllocParams->BufferLength
162 + sizeof(BIOS_BUFFER_NODE));
163 NextFreePtr->NextNodeOffset =
164 BestFitNodePtr->NextNodeOffset;
Marc Jones21cde8b2017-05-07 16:47:36 -0600165 } else {
Marshall Dawsonf3dc71e2017-06-14 16:22:07 -0600166 /* Otherwise, next free node is
167 * NextNodeOffset of BestFitNode
168 */
Marc Jones21cde8b2017-05-07 16:47:36 -0600169 NextFreeOffset = BestFitNodePtr->NextNodeOffset;
170 }
171
Marshall Dawsonf3dc71e2017-06-14 16:22:07 -0600172 /* If BestFitNode is the first buffer in the list, then
173 * update StartOfFreedNodes to reflect new free node.
Marc Jones21cde8b2017-05-07 16:47:36 -0600174 */
Marshall Dawsonf3dc71e2017-06-14 16:22:07 -0600175 if (BestFitNodeOffset ==
176 BiosHeapBasePtr->StartOfFreedNodes)
177 BiosHeapBasePtr->StartOfFreedNodes =
178 NextFreeOffset;
179 else
180 BestFitPrevNodePtr->NextNodeOffset =
181 NextFreeOffset;
Marc Jones21cde8b2017-05-07 16:47:36 -0600182
183 /* Add BestFitNode to the list of Allocated nodes */
184 CurrNodePtr->NextNodeOffset = BestFitNodeOffset;
185 BestFitNodePtr->BufferSize = AllocParams->BufferLength;
Marshall Dawsonf3dc71e2017-06-14 16:22:07 -0600186 BestFitNodePtr->BufferHandle =
187 AllocParams->BufferHandle;
Marc Jones21cde8b2017-05-07 16:47:36 -0600188 BestFitNodePtr->NextNodeOffset = 0;
189
190 /* Remove BestFitNode from list of Freed nodes */
Marshall Dawsonf3dc71e2017-06-14 16:22:07 -0600191 AllocParams->BufferPointer = (UINT8 *)BestFitNodePtr
192 + sizeof(BIOS_BUFFER_NODE);
Marc Jones21cde8b2017-05-07 16:47:36 -0600193 }
194 }
195
196 return AGESA_SUCCESS;
197}
198
Stefan Reinauer8d29dd12017-06-26 14:30:39 -0700199AGESA_STATUS agesa_DeallocateBuffer (UINT32 Func, UINTN Data, VOID *ConfigPtr)
Marc Jones21cde8b2017-05-07 16:47:36 -0600200{
201
202 UINT8 *BiosHeapBaseAddr;
203 UINT32 AllocNodeOffset;
204 UINT32 PrevNodeOffset;
205 UINT32 NextNodeOffset;
206 UINT32 FreedNodeOffset;
207 UINT32 EndNodeOffset;
208 BIOS_BUFFER_NODE *AllocNodePtr;
209 BIOS_BUFFER_NODE *PrevNodePtr;
210 BIOS_BUFFER_NODE *FreedNodePtr;
211 BIOS_BUFFER_NODE *NextNodePtr;
212 BIOS_HEAP_MANAGER *BiosHeapBasePtr;
213 AGESA_BUFFER_PARAMS *AllocParams;
214
Marshall Dawsonf3dc71e2017-06-14 16:22:07 -0600215 AllocParams = (AGESA_BUFFER_PARAMS *)ConfigPtr;
Marc Jones21cde8b2017-05-07 16:47:36 -0600216
Marshall Dawsoned501d5b2017-09-18 16:13:17 -0600217 BiosHeapBaseAddr = GetHeapBase();
Marshall Dawsonf3dc71e2017-06-14 16:22:07 -0600218 BiosHeapBasePtr = (BIOS_HEAP_MANAGER *)BiosHeapBaseAddr;
Marc Jones21cde8b2017-05-07 16:47:36 -0600219
220 /* Find target node to deallocate in list of allocated nodes.
221 * Return AGESA_BOUNDS_CHK if the BufferHandle is not found.
222 */
223 AllocNodeOffset = BiosHeapBasePtr->StartOfAllocatedNodes;
Marshall Dawsonf3dc71e2017-06-14 16:22:07 -0600224 AllocNodePtr = (BIOS_BUFFER_NODE *)(BiosHeapBaseAddr + AllocNodeOffset);
Marc Jones21cde8b2017-05-07 16:47:36 -0600225 PrevNodeOffset = AllocNodeOffset;
226
Marshall Dawsonf3dc71e2017-06-14 16:22:07 -0600227 while (AllocNodePtr->BufferHandle != AllocParams->BufferHandle) {
228 if (AllocNodePtr->NextNodeOffset == 0)
Marc Jones21cde8b2017-05-07 16:47:36 -0600229 return AGESA_BOUNDS_CHK;
Marc Jones21cde8b2017-05-07 16:47:36 -0600230 PrevNodeOffset = AllocNodeOffset;
231 AllocNodeOffset = AllocNodePtr->NextNodeOffset;
Marshall Dawsonf3dc71e2017-06-14 16:22:07 -0600232 AllocNodePtr = (BIOS_BUFFER_NODE *)(BiosHeapBaseAddr
233 + AllocNodeOffset);
Marc Jones21cde8b2017-05-07 16:47:36 -0600234 }
235
236 /* Remove target node from list of allocated nodes */
Marshall Dawsonf3dc71e2017-06-14 16:22:07 -0600237 PrevNodePtr = (BIOS_BUFFER_NODE *)(BiosHeapBaseAddr + PrevNodeOffset);
Marc Jones21cde8b2017-05-07 16:47:36 -0600238 PrevNodePtr->NextNodeOffset = AllocNodePtr->NextNodeOffset;
239
240 /* Zero out the buffer, and clear the BufferHandle */
Aaron Durbine3f7d442017-11-03 11:44:10 -0600241 memset((UINT8 *)AllocNodePtr + sizeof(BIOS_BUFFER_NODE), 0,
242 AllocNodePtr->BufferSize);
Marc Jones21cde8b2017-05-07 16:47:36 -0600243 AllocNodePtr->BufferHandle = 0;
244 AllocNodePtr->BufferSize += sizeof(BIOS_BUFFER_NODE);
245
246 /* Add deallocated node in order to the list of freed nodes */
247 FreedNodeOffset = BiosHeapBasePtr->StartOfFreedNodes;
Marshall Dawsonf3dc71e2017-06-14 16:22:07 -0600248 FreedNodePtr = (BIOS_BUFFER_NODE *)(BiosHeapBaseAddr + FreedNodeOffset);
Marc Jones21cde8b2017-05-07 16:47:36 -0600249
250 EndNodeOffset = AllocNodeOffset + AllocNodePtr->BufferSize;
251
252 if (AllocNodeOffset < FreedNodeOffset) {
253 /* Add to the start of the freed list */
254 if (EndNodeOffset == FreedNodeOffset) {
Marshall Dawsonf3dc71e2017-06-14 16:22:07 -0600255 /* If the freed node is adjacent to the first node in
256 * the list, concatenate both nodes
257 */
Marc Jones21cde8b2017-05-07 16:47:36 -0600258 AllocNodePtr->BufferSize += FreedNodePtr->BufferSize;
Marshall Dawsonf3dc71e2017-06-14 16:22:07 -0600259 AllocNodePtr->NextNodeOffset =
260 FreedNodePtr->NextNodeOffset;
Marc Jones21cde8b2017-05-07 16:47:36 -0600261
Marshall Dawsonf3dc71e2017-06-14 16:22:07 -0600262 /* Clear the BufferSize and NextNodeOffset of the
263 * previous first node
264 */
Marc Jones21cde8b2017-05-07 16:47:36 -0600265 FreedNodePtr->BufferSize = 0;
266 FreedNodePtr->NextNodeOffset = 0;
267
268 } else {
269 /* Otherwise, add freed node to the start of the list
270 * Update NextNodeOffset and BufferSize to include the
271 * size of BIOS_BUFFER_NODE.
272 */
273 AllocNodePtr->NextNodeOffset = FreedNodeOffset;
274 }
275 /* Update StartOfFreedNodes to the new first node */
276 BiosHeapBasePtr->StartOfFreedNodes = AllocNodeOffset;
277 } else {
Marshall Dawsonf3dc71e2017-06-14 16:22:07 -0600278 /* Traverse list of freed nodes to find where the deallocated
279 * node should be placed.
Marc Jones21cde8b2017-05-07 16:47:36 -0600280 */
281 NextNodeOffset = FreedNodeOffset;
282 NextNodePtr = FreedNodePtr;
283 while (AllocNodeOffset > NextNodeOffset) {
284 PrevNodeOffset = NextNodeOffset;
Marshall Dawsonf3dc71e2017-06-14 16:22:07 -0600285 if (NextNodePtr->NextNodeOffset == 0)
Marc Jones21cde8b2017-05-07 16:47:36 -0600286 break;
Marc Jones21cde8b2017-05-07 16:47:36 -0600287 NextNodeOffset = NextNodePtr->NextNodeOffset;
Marshall Dawsonf3dc71e2017-06-14 16:22:07 -0600288 NextNodePtr = (BIOS_BUFFER_NODE *)(BiosHeapBaseAddr
289 + NextNodeOffset);
Marc Jones21cde8b2017-05-07 16:47:36 -0600290 }
291
292 /* If deallocated node is adjacent to the next node,
293 * concatenate both nodes.
294 */
295 if (NextNodeOffset == EndNodeOffset) {
Marshall Dawsonf3dc71e2017-06-14 16:22:07 -0600296 NextNodePtr = (BIOS_BUFFER_NODE *)(BiosHeapBaseAddr
297 + NextNodeOffset);
Marc Jones21cde8b2017-05-07 16:47:36 -0600298 AllocNodePtr->BufferSize += NextNodePtr->BufferSize;
Marshall Dawsonf3dc71e2017-06-14 16:22:07 -0600299 AllocNodePtr->NextNodeOffset =
300 NextNodePtr->NextNodeOffset;
Marc Jones21cde8b2017-05-07 16:47:36 -0600301
302 NextNodePtr->BufferSize = 0;
303 NextNodePtr->NextNodeOffset = 0;
304 } else {
Marshall Dawsonf3dc71e2017-06-14 16:22:07 -0600305 /*AllocNodePtr->NextNodeOffset =
306 * FreedNodePtr->NextNodeOffset; */
Marc Jones21cde8b2017-05-07 16:47:36 -0600307 AllocNodePtr->NextNodeOffset = NextNodeOffset;
308 }
309 /* If deallocated node is adjacent to the previous node,
310 * concatenate both nodes.
311 */
Marshall Dawsonf3dc71e2017-06-14 16:22:07 -0600312 PrevNodePtr = (BIOS_BUFFER_NODE *)(BiosHeapBaseAddr
313 + PrevNodeOffset);
Marc Jones21cde8b2017-05-07 16:47:36 -0600314 EndNodeOffset = PrevNodeOffset + PrevNodePtr->BufferSize;
315 if (AllocNodeOffset == EndNodeOffset) {
Marshall Dawsonf3dc71e2017-06-14 16:22:07 -0600316 PrevNodePtr->NextNodeOffset =
317 AllocNodePtr->NextNodeOffset;
Marc Jones21cde8b2017-05-07 16:47:36 -0600318 PrevNodePtr->BufferSize += AllocNodePtr->BufferSize;
319
320 AllocNodePtr->BufferSize = 0;
321 AllocNodePtr->NextNodeOffset = 0;
322 } else {
323 PrevNodePtr->NextNodeOffset = AllocNodeOffset;
324 }
325 }
326 return AGESA_SUCCESS;
327}
328
Stefan Reinauer8d29dd12017-06-26 14:30:39 -0700329AGESA_STATUS agesa_LocateBuffer (UINT32 Func, UINTN Data, VOID *ConfigPtr)
Marc Jones21cde8b2017-05-07 16:47:36 -0600330{
331 UINT32 AllocNodeOffset;
332 UINT8 *BiosHeapBaseAddr;
Marshall Dawsonf3dc71e2017-06-14 16:22:07 -0600333 BIOS_BUFFER_NODE *AllocNodePtr;
334 BIOS_HEAP_MANAGER *BiosHeapBasePtr;
Marc Jones21cde8b2017-05-07 16:47:36 -0600335 AGESA_BUFFER_PARAMS *AllocParams;
336
Marshall Dawsonf3dc71e2017-06-14 16:22:07 -0600337 AllocParams = (AGESA_BUFFER_PARAMS *)ConfigPtr;
Marc Jones21cde8b2017-05-07 16:47:36 -0600338
Marshall Dawsoned501d5b2017-09-18 16:13:17 -0600339 BiosHeapBaseAddr = GetHeapBase();
Marshall Dawsonf3dc71e2017-06-14 16:22:07 -0600340 BiosHeapBasePtr = (BIOS_HEAP_MANAGER *)BiosHeapBaseAddr;
Marc Jones21cde8b2017-05-07 16:47:36 -0600341
342 AllocNodeOffset = BiosHeapBasePtr->StartOfAllocatedNodes;
Marshall Dawsonf3dc71e2017-06-14 16:22:07 -0600343 AllocNodePtr = (BIOS_BUFFER_NODE *)(BiosHeapBaseAddr + AllocNodeOffset);
Marc Jones21cde8b2017-05-07 16:47:36 -0600344
345 while (AllocParams->BufferHandle != AllocNodePtr->BufferHandle) {
346 if (AllocNodePtr->NextNodeOffset == 0) {
347 AllocParams->BufferPointer = NULL;
348 AllocParams->BufferLength = 0;
349 return AGESA_BOUNDS_CHK;
350 } else {
351 AllocNodeOffset = AllocNodePtr->NextNodeOffset;
Marshall Dawsonf3dc71e2017-06-14 16:22:07 -0600352 AllocNodePtr = (BIOS_BUFFER_NODE *)(BiosHeapBaseAddr
353 + AllocNodeOffset);
Marc Jones21cde8b2017-05-07 16:47:36 -0600354 }
355 }
356
Marshall Dawsonf3dc71e2017-06-14 16:22:07 -0600357 AllocParams->BufferPointer = (UINT8 *)((UINT8 *)AllocNodePtr
358 + sizeof(BIOS_BUFFER_NODE));
Marc Jones21cde8b2017-05-07 16:47:36 -0600359 AllocParams->BufferLength = AllocNodePtr->BufferSize;
360
361 return AGESA_SUCCESS;
362
363}