]> git.proxmox.com Git - mirror_edk2.git/blob - MdeModulePkg/Core/Dxe/Mem/Imem.h
MdeModulePkg: Replace BSD License with BSD+Patent License
[mirror_edk2.git] / MdeModulePkg / Core / Dxe / Mem / Imem.h
1 /** @file
2 Data structure and functions to allocate and free memory space.
3
4 Copyright (c) 2006 - 2017, Intel Corporation. All rights reserved.<BR>
5 SPDX-License-Identifier: BSD-2-Clause-Patent
6
7 **/
8
9 #ifndef _IMEM_H_
10 #define _IMEM_H_
11
12 //
13 // +---------------------------------------------------+
14 // | 0..(EfiMaxMemoryType - 1) - Normal memory type |
15 // +---------------------------------------------------+
16 // | EfiMaxMemoryType..0x6FFFFFFF - Invalid |
17 // +---------------------------------------------------+
18 // | 0x70000000..0x7FFFFFFF - OEM reserved |
19 // +---------------------------------------------------+
20 // | 0x80000000..0xFFFFFFFF - OS reserved |
21 // +---------------------------------------------------+
22 //
23 #define MEMORY_TYPE_OS_RESERVED_MIN 0x80000000
24 #define MEMORY_TYPE_OS_RESERVED_MAX 0xFFFFFFFF
25 #define MEMORY_TYPE_OEM_RESERVED_MIN 0x70000000
26 #define MEMORY_TYPE_OEM_RESERVED_MAX 0x7FFFFFFF
27
28 //
29 // MEMORY_MAP_ENTRY
30 //
31
32 #define MEMORY_MAP_SIGNATURE SIGNATURE_32('m','m','a','p')
33 typedef struct {
34 UINTN Signature;
35 LIST_ENTRY Link;
36 BOOLEAN FromPages;
37
38 EFI_MEMORY_TYPE Type;
39 UINT64 Start;
40 UINT64 End;
41
42 UINT64 VirtualStart;
43 UINT64 Attribute;
44 } MEMORY_MAP;
45
46 //
47 // Internal prototypes
48 //
49
50
51 /**
52 Internal function. Used by the pool functions to allocate pages
53 to back pool allocation requests.
54
55 @param PoolType The type of memory for the new pool pages
56 @param NumberOfPages No of pages to allocate
57 @param Alignment Bits to align.
58 @param NeedGuard Flag to indicate Guard page is needed or not
59
60 @return The allocated memory, or NULL
61
62 **/
63 VOID *
64 CoreAllocatePoolPages (
65 IN EFI_MEMORY_TYPE PoolType,
66 IN UINTN NumberOfPages,
67 IN UINTN Alignment,
68 IN BOOLEAN NeedGuard
69 );
70
71
72
73 /**
74 Internal function. Frees pool pages allocated via AllocatePoolPages ()
75
76 @param Memory The base address to free
77 @param NumberOfPages The number of pages to free
78
79 **/
80 VOID
81 CoreFreePoolPages (
82 IN EFI_PHYSICAL_ADDRESS Memory,
83 IN UINTN NumberOfPages
84 );
85
86
87
88 /**
89 Internal function to allocate pool of a particular type.
90 Caller must have the memory lock held
91
92 @param PoolType Type of pool to allocate
93 @param Size The amount of pool to allocate
94 @param NeedGuard Flag to indicate Guard page is needed or not
95
96 @return The allocate pool, or NULL
97
98 **/
99 VOID *
100 CoreAllocatePoolI (
101 IN EFI_MEMORY_TYPE PoolType,
102 IN UINTN Size,
103 IN BOOLEAN NeedGuard
104 );
105
106
107
108 /**
109 Internal function to free a pool entry.
110 Caller must have the memory lock held
111
112 @param Buffer The allocated pool entry to free
113 @param PoolType Pointer to pool type
114
115 @retval EFI_INVALID_PARAMETER Buffer not valid
116 @retval EFI_SUCCESS Buffer successfully freed.
117
118 **/
119 EFI_STATUS
120 CoreFreePoolI (
121 IN VOID *Buffer,
122 OUT EFI_MEMORY_TYPE *PoolType OPTIONAL
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 Allocates pages from the memory map.
148
149 @param Type The type of allocation to perform
150 @param MemoryType The type of memory to turn the allocated pages
151 into
152 @param NumberOfPages The number of pages to allocate
153 @param Memory A pointer to receive the base allocated memory
154 address
155 @param NeedGuard Flag to indicate Guard page is needed or not
156
157 @return Status. On success, Memory is filled in with the base address allocated
158 @retval EFI_INVALID_PARAMETER Parameters violate checking rules defined in
159 spec.
160 @retval EFI_NOT_FOUND Could not allocate pages match the requirement.
161 @retval EFI_OUT_OF_RESOURCES No enough pages to allocate.
162 @retval EFI_SUCCESS Pages successfully allocated.
163
164 **/
165 EFI_STATUS
166 EFIAPI
167 CoreInternalAllocatePages (
168 IN EFI_ALLOCATE_TYPE Type,
169 IN EFI_MEMORY_TYPE MemoryType,
170 IN UINTN NumberOfPages,
171 IN OUT EFI_PHYSICAL_ADDRESS *Memory,
172 IN BOOLEAN NeedGuard
173 );
174
175 //
176 // Internal Global data
177 //
178
179 extern EFI_LOCK gMemoryLock;
180 extern LIST_ENTRY gMemoryMap;
181 extern LIST_ENTRY mGcdMemorySpaceMap;
182 #endif