1 /** @file 2 Data structure and functions to allocate and free memory space. 3 4 Copyright (c) 2006 - 2015, Intel Corporation. All rights reserved.<BR> 5 This program and the accompanying materials 6 are licensed and made available under the terms and conditions of the BSD License 7 which accompanies this distribution. The full text of the license may be found at 8 http://opensource.org/licenses/bsd-license.php 9 10 THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS, 11 WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED. 12 13 **/ 14 15 #ifndef _IMEM_H_ 16 #define _IMEM_H_ 17 18 // 19 // +---------------------------------------------------+ 20 // | 0..(EfiMaxMemoryType - 1) - Normal memory type | 21 // +---------------------------------------------------+ 22 // | EfiMaxMemoryType..0x6FFFFFFF - Ilegal | 23 // +---------------------------------------------------+ 24 // | 0x70000000..0x7FFFFFFF - OEM reserved | 25 // +---------------------------------------------------+ 26 // | 0x80000000..0xFFFFFFFF - OS reserved | 27 // +---------------------------------------------------+ 28 // 29 #define MEMORY_TYPE_OS_RESERVED_MIN 0x80000000 30 #define MEMORY_TYPE_OS_RESERVED_MAX 0xFFFFFFFF 31 #define MEMORY_TYPE_OEM_RESERVED_MIN 0x70000000 32 #define MEMORY_TYPE_OEM_RESERVED_MAX 0x7FFFFFFF 33 34 // 35 // MEMORY_MAP_ENTRY 36 // 37 38 #define MEMORY_MAP_SIGNATURE SIGNATURE_32('m','m','a','p') 39 typedef struct { 40 UINTN Signature; 41 LIST_ENTRY Link; 42 BOOLEAN FromPages; 43 44 EFI_MEMORY_TYPE Type; 45 UINT64 Start; 46 UINT64 End; 47 48 UINT64 VirtualStart; 49 UINT64 Attribute; 50 } MEMORY_MAP; 51 52 // 53 // Internal prototypes 54 // 55 56 57 /** 58 Internal function. Used by the pool functions to allocate pages 59 to back pool allocation requests. 60 61 @param PoolType The type of memory for the new pool pages 62 @param NumberOfPages No of pages to allocate 63 @param Alignment Bits to align. 64 65 @return The allocated memory, or NULL 66 67 **/ 68 VOID * 69 CoreAllocatePoolPages ( 70 IN EFI_MEMORY_TYPE PoolType, 71 IN UINTN NumberOfPages, 72 IN UINTN Alignment 73 ); 74 75 76 77 /** 78 Internal function. Frees pool pages allocated via AllocatePoolPages () 79 80 @param Memory The base address to free 81 @param NumberOfPages The number of pages to free 82 83 **/ 84 VOID 85 CoreFreePoolPages ( 86 IN EFI_PHYSICAL_ADDRESS Memory, 87 IN UINTN NumberOfPages 88 ); 89 90 91 92 /** 93 Internal function to allocate pool of a particular type. 94 Caller must have the memory lock held 95 96 @param PoolType Type of pool to allocate 97 @param Size The amount of pool to allocate 98 99 @return The allocate pool, or NULL 100 101 **/ 102 VOID * 103 CoreAllocatePoolI ( 104 IN EFI_MEMORY_TYPE PoolType, 105 IN UINTN Size 106 ); 107 108 109 110 /** 111 Internal function to free a pool entry. 112 Caller must have the memory lock held 113 114 @param Buffer The allocated pool entry to free 115 116 @retval EFI_INVALID_PARAMETER Buffer not valid 117 @retval EFI_SUCCESS Buffer successfully freed. 118 119 **/ 120 EFI_STATUS 121 CoreFreePoolI ( 122 IN VOID *Buffer 123 ); 124 125 126 127 /** 128 Enter critical section by gaining lock on gMemoryLock. 129 130 **/ 131 VOID 132 CoreAcquireMemoryLock ( 133 VOID 134 ); 135 136 137 /** 138 Exit critical section by releasing lock on gMemoryLock. 139 140 **/ 141 VOID 142 CoreReleaseMemoryLock ( 143 VOID 144 ); 145 146 147 // 148 // Internal Global data 149 // 150 151 extern EFI_LOCK gMemoryLock; 152 extern LIST_ENTRY gMemoryMap; 153 extern LIST_ENTRY mGcdMemorySpaceMap; 154 #endif 155