Support routines for memory allocation routines \r
based on PeiService for PEI phase drivers.\r
\r
- Copyright (c) 2006 - 2014, Intel Corporation. All rights reserved.<BR>\r
+ Copyright (c) 2006 - 2017, Intel Corporation. All rights reserved.<BR>\r
This program and the accompanying materials \r
are licensed and made available under the terms and conditions of the BSD License \r
which accompanies this distribution. The full text of the license may be found at \r
{\r
EFI_STATUS Status;\r
EFI_PHYSICAL_ADDRESS Memory; \r
- EFI_MEMORY_TYPE RequestType;\r
- EFI_PEI_HOB_POINTERS Hob;\r
\r
if (Pages == 0) {\r
return NULL;\r
}\r
\r
- RequestType = MemoryType;\r
- if (MemoryType == EfiReservedMemoryType) {\r
- //\r
- // PEI AllocatePages() doesn't support EfiReservedMemoryType. \r
- // Change RequestType to EfiBootServicesData for memory allocation.\r
- //\r
- RequestType = EfiBootServicesData;\r
- }\r
-\r
- Status = PeiServicesAllocatePages (RequestType, Pages, &Memory);\r
+ Status = PeiServicesAllocatePages (MemoryType, Pages, &Memory);\r
if (EFI_ERROR (Status)) {\r
return NULL;\r
}\r
- \r
- if (MemoryType == EfiReservedMemoryType) {\r
- //\r
- // Memory type needs to be updated to EfiReservedMemoryType. Per PI spec Volume 1, \r
- // PEI AllocatePages() will automate the creation of the Memory Allocation HOB types. \r
- // Search Memory Allocation HOB and find the matched memory region,\r
- // then change its memory type to EfiReservedMemoryType.\r
- //\r
- Hob.Raw = GetFirstHob (EFI_HOB_TYPE_MEMORY_ALLOCATION);\r
- while (Hob.Raw != NULL && Hob.MemoryAllocation->AllocDescriptor.MemoryBaseAddress != Memory) {\r
- Hob.Raw = GET_NEXT_HOB (Hob);\r
- Hob.Raw = GetNextHob (EFI_HOB_TYPE_MEMORY_ALLOCATION, Hob.Raw);\r
- }\r
- ASSERT (Hob.Raw != NULL);\r
- Hob.MemoryAllocation->AllocDescriptor.MemoryType = EfiReservedMemoryType;\r
- }\r
\r
return (VOID *) (UINTN) Memory;\r
}\r
IN UINTN Pages\r
)\r
{\r
+ EFI_STATUS Status;\r
+\r
ASSERT (Pages != 0);\r
- //\r
- // PEI phase does not support to free pages, so leave it as NOP.\r
- //\r
+ Status = PeiServicesFreePages ((EFI_PHYSICAL_ADDRESS) (UINTN) Buffer, Pages);\r
+ ASSERT_EFI_ERROR (Status);\r
}\r
\r
/**\r
EFI_PHYSICAL_ADDRESS Memory;\r
EFI_PHYSICAL_ADDRESS AlignedMemory;\r
EFI_PEI_HOB_POINTERS Hob;\r
- BOOLEAN SkipBeforeMemHob = FALSE;\r
- BOOLEAN SkipAfterMemHob = FALSE;\r
+ BOOLEAN SkipBeforeMemHob;\r
+ BOOLEAN SkipAfterMemHob;\r
EFI_PHYSICAL_ADDRESS HobBaseAddress;\r
UINT64 HobLength;\r
EFI_MEMORY_TYPE HobMemoryType;\r
// The before or after mem HOBs need to be skipped under special cases where the aligned portion\r
// touches either the top or bottom of the original allocated space.\r
//\r
+ SkipBeforeMemHob = FALSE;\r
+ SkipAfterMemHob = FALSE;\r
if (Memory == AlignedMemory) {\r
SkipBeforeMemHob = TRUE;\r
}\r
IN UINTN Pages\r
)\r
{\r
+ EFI_STATUS Status;\r
+\r
ASSERT (Pages != 0);\r
- //\r
- // PEI phase does not support to free pages, so leave it as NOP.\r
- //\r
+ Status = PeiServicesFreePages ((EFI_PHYSICAL_ADDRESS) (UINTN) Buffer, Pages);\r
+ ASSERT_EFI_ERROR (Status);\r
}\r
\r
/**\r