37 AGESA_TEMP_HEAP_BASE_PARAMS *pTempHeapBase;
39 pTempHeapBase = (AGESA_TEMP_HEAP_BASE_PARAMS *)ConfigPtr;
40 pTempHeapBase->TempHeapAddress = CONFIG_PI_AGESA_TEMP_RAM_BASE;
60 AGESA_REBASE_PARAMS *Rebase;
62 Rebase = (AGESA_REBASE_PARAMS *)ConfigPtr;
64 if (!Rebase->HeapAddress)
65 Rebase->HeapAddress = CONFIG_PI_AGESA_CAR_HEAP_BASE;
99 Status = AGESA_BOUNDS_CHK;
106 *last_allocd_or_match = AllocNodePtr;
164 AGESA_BUFFER_PARAMS *AllocParams;
167 AllocParams = ((AGESA_BUFFER_PARAMS *)ConfigPtr);
168 AllocParams->BufferPointer =
NULL;
172 BestFitNodeSize = AvailableHeapSize;
182 CurrNodePtr->
BufferSize = AllocParams->BufferLength;
184 AllocParams->BufferPointer = (
uint8_t *)CurrNodePtr
188 FreedNodeOffset = CurrNodeOffset + CurrNodePtr->
BufferSize
193 - (FreedNodeOffset - CurrNodeOffset)
208 return AGESA_BOUNDS_CHK;
217 PrevNodeOffset = FreedNodeOffset;
218 BestFitNodeOffset = 0;
219 BestFitPrevNodeOffset = 0;
220 while (FreedNodeOffset != 0) {
224 if (FreedNodeSize >= MinimumSize) {
225 if (BestFitNodeOffset == 0) {
230 BestFitNodeOffset = FreedNodeOffset;
231 BestFitPrevNodeOffset = PrevNodeOffset;
232 BestFitNodeSize = FreedNodeSize;
238 if (BestFitNodeSize > FreedNodeSize) {
242 BestFitPrevNodeOffset =
244 BestFitNodeSize = FreedNodeSize;
248 PrevNodeOffset = FreedNodeOffset;
252 if (BestFitNodeOffset == 0) {
257 return AGESA_BOUNDS_CHK;
261 + BestFitNodeOffset);
263 BestFitPrevNodeOffset);
269 if (BestFitNodePtr->
BufferSize > MinimumSize) {
270 NextFreeOffset = BestFitNodeOffset + MinimumSize;
273 NextFreePtr->
BufferSize = BestFitNodeSize - MinimumSize;
297 BestFitNodePtr->
BufferSize = AllocParams->BufferLength;
298 BestFitNodePtr->
BufferHandle = AllocParams->BufferHandle;
301 AllocParams->BufferPointer = (
uint8_t *)BestFitNodePtr +
323 AGESA_BUFFER_PARAMS *AllocParams;
325 AllocParams = (AGESA_BUFFER_PARAMS *)ConfigPtr;
335 PrevNodeOffset = AllocNodeOffset;
337 while (AllocNodePtr->
BufferHandle != AllocParams->BufferHandle) {
339 return AGESA_BOUNDS_CHK;
340 PrevNodeOffset = AllocNodeOffset;
359 EndNodeOffset = AllocNodeOffset + AllocNodePtr->
BufferSize +
362 if (AllocNodeOffset < FreedNodeOffset) {
364 if (EndNodeOffset == FreedNodeOffset) {
382 NextNodeOffset = FreedNodeOffset;
383 NextNodePtr = FreedNodePtr;
384 while (AllocNodeOffset > NextNodeOffset) {
385 PrevNodeOffset = NextNodeOffset;
396 if (NextNodeOffset == EndNodeOffset) {
411 EndNodeOffset = PrevNodeOffset + PrevNodePtr->
BufferSize +
414 if (AllocNodeOffset == EndNodeOffset)
425 AGESA_BUFFER_PARAMS *AllocParams;
428 AllocParams = (AGESA_BUFFER_PARAMS *)ConfigPtr;
435 AllocParams->BufferLength = AllocNodePtr->
BufferSize;
unsigned int AGESA_STATUS
void * memset(void *dstpp, int c, size_t len)
void * cbmem_add(u32 id, u64 size)
#define ROMSTAGE_CBMEM_INIT_HOOK(init_fn_)
#define CBMEM_ID_RESUME_SCRATCH
struct _BIOS_BUFFER_NODE BIOS_BUFFER_NODE
struct _BIOS_HEAP_MANAGER BIOS_HEAP_MANAGER
static void * agesa_heap_base(void)
AGESA_STATUS agesa_DeallocateBuffer(uint32_t Func, uintptr_t Data, void *ConfigPtr)
AGESA_STATUS agesa_HeapRebase(uint32_t Func, uintptr_t Data, void *ConfigPtr)
AGESA_STATUS agesa_GetTempHeapBase(uint32_t Func, uintptr_t Data, void *ConfigPtr)
static void ConcatenateNodes(BIOS_BUFFER_NODE *FirstNodePtr, BIOS_BUFFER_NODE *SecondNodePtr)
AGESA_STATUS agesa_LocateBuffer(uint32_t Func, uintptr_t Data, void *ConfigPtr)
static AGESA_STATUS FindAllocatedNode(uint32_t handle, BIOS_BUFFER_NODE **last_allocd_or_match)
AGESA_STATUS agesa_AllocateBuffer(uint32_t Func, uintptr_t Data, void *ConfigPtr)
UINT32 StartOfAllocatedNodes