// For GetMemoryMap()\r
//\r
\r
-#define MEMORY_MAP_SIGNATURE SIGNATURE_32('m','m','a','p')\r
+#define MEMORY_MAP_SIGNATURE SIGNATURE_32('m','m','a','p')\r
typedef struct {\r
- UINTN Signature;\r
- LIST_ENTRY Link;\r
-\r
- BOOLEAN FromStack;\r
- EFI_MEMORY_TYPE Type;\r
- UINT64 Start;\r
- UINT64 End;\r
+ UINTN Signature;\r
+ LIST_ENTRY Link;\r
\r
+ BOOLEAN FromStack;\r
+ EFI_MEMORY_TYPE Type;\r
+ UINT64 Start;\r
+ UINT64 End;\r
} MEMORY_MAP;\r
\r
-LIST_ENTRY gMemoryMap = INITIALIZE_LIST_HEAD_VARIABLE (gMemoryMap);\r
-\r
+LIST_ENTRY gMemoryMap = INITIALIZE_LIST_HEAD_VARIABLE (gMemoryMap);\r
\r
-#define MAX_MAP_DEPTH 6\r
+#define MAX_MAP_DEPTH 6\r
\r
///\r
/// mMapDepth - depth of new descriptor stack\r
///\r
-UINTN mMapDepth = 0;\r
+UINTN mMapDepth = 0;\r
///\r
/// mMapStack - space to use as temp storage to build new map descriptors\r
///\r
-MEMORY_MAP mMapStack[MAX_MAP_DEPTH];\r
-UINTN mFreeMapStack = 0;\r
+MEMORY_MAP mMapStack[MAX_MAP_DEPTH];\r
+UINTN mFreeMapStack = 0;\r
///\r
/// This list maintain the free memory map list\r
///\r
-LIST_ENTRY mFreeMemoryMapEntryList = INITIALIZE_LIST_HEAD_VARIABLE (mFreeMemoryMapEntryList);\r
+LIST_ENTRY mFreeMemoryMapEntryList = INITIALIZE_LIST_HEAD_VARIABLE (mFreeMemoryMapEntryList);\r
\r
/**\r
Allocates pages from the memory map.\r
VOID\r
)\r
{\r
- EFI_PHYSICAL_ADDRESS Mem;\r
- EFI_STATUS Status;\r
- MEMORY_MAP* FreeDescriptorEntries;\r
- MEMORY_MAP* Entry;\r
- UINTN Index;\r
+ EFI_PHYSICAL_ADDRESS Mem;\r
+ EFI_STATUS Status;\r
+ MEMORY_MAP *FreeDescriptorEntries;\r
+ MEMORY_MAP *Entry;\r
+ UINTN Index;\r
\r
- //DEBUG((DEBUG_INFO, "AllocateMemoryMapEntry\n"));\r
+ // DEBUG((DEBUG_INFO, "AllocateMemoryMapEntry\n"));\r
\r
if (IsListEmpty (&mFreeMemoryMapEntryList)) {\r
- //DEBUG((DEBUG_INFO, "mFreeMemoryMapEntryList is empty\n"));\r
+ // DEBUG((DEBUG_INFO, "mFreeMemoryMapEntryList is empty\n"));\r
//\r
// The list is empty, to allocate one page to refuel the list\r
//\r
FALSE\r
);\r
ASSERT_EFI_ERROR (Status);\r
- if(!EFI_ERROR (Status)) {\r
+ if (!EFI_ERROR (Status)) {\r
FreeDescriptorEntries = (MEMORY_MAP *)(UINTN)Mem;\r
- //DEBUG((DEBUG_INFO, "New FreeDescriptorEntries - 0x%x\n", FreeDescriptorEntries));\r
+ // DEBUG((DEBUG_INFO, "New FreeDescriptorEntries - 0x%x\n", FreeDescriptorEntries));\r
//\r
// Enqueue the free memory map entries into the list\r
//\r
- for (Index = 0; Index< RUNTIME_PAGE_ALLOCATION_GRANULARITY / sizeof(MEMORY_MAP); Index++) {\r
+ for (Index = 0; Index < RUNTIME_PAGE_ALLOCATION_GRANULARITY / sizeof (MEMORY_MAP); Index++) {\r
FreeDescriptorEntries[Index].Signature = MEMORY_MAP_SIGNATURE;\r
InsertTailList (&mFreeMemoryMapEntryList, &FreeDescriptorEntries[Index].Link);\r
}\r
return NULL;\r
}\r
}\r
+\r
//\r
// dequeue the first descriptor from the list\r
//\r
return Entry;\r
}\r
\r
-\r
/**\r
Internal function. Moves any memory descriptors that are on the\r
temporary descriptor stack to heap.\r
VOID\r
)\r
{\r
- MEMORY_MAP *Entry;\r
+ MEMORY_MAP *Entry;\r
\r
//\r
// If already freeing the map stack, then return\r
//\r
if (mFreeMapStack != 0) {\r
ASSERT (FALSE);\r
- return ;\r
+ return;\r
}\r
\r
//\r
mMapDepth -= 1;\r
\r
if (mMapStack[mMapDepth].Link.ForwardLink != NULL) {\r
-\r
- CopyMem (Entry , &mMapStack[mMapDepth], sizeof (MEMORY_MAP));\r
+ CopyMem (Entry, &mMapStack[mMapDepth], sizeof (MEMORY_MAP));\r
Entry->FromStack = FALSE;\r
\r
//\r
**/\r
VOID\r
InsertNewEntry (\r
- IN LIST_ENTRY *Link,\r
- IN UINT64 Start,\r
- IN UINT64 End,\r
- IN EFI_MEMORY_TYPE Type,\r
- IN BOOLEAN Next,\r
- IN BOOLEAN AddRegion\r
+ IN LIST_ENTRY *Link,\r
+ IN UINT64 Start,\r
+ IN UINT64 End,\r
+ IN EFI_MEMORY_TYPE Type,\r
+ IN BOOLEAN Next,\r
+ IN BOOLEAN AddRegion\r
)\r
{\r
MEMORY_MAP *Entry;\r
\r
- Entry = &mMapStack[mMapDepth];\r
+ Entry = &mMapStack[mMapDepth];\r
mMapDepth += 1;\r
ASSERT (mMapDepth < MAX_MAP_DEPTH);\r
Entry->FromStack = TRUE;\r
\r
Entry->Signature = MEMORY_MAP_SIGNATURE;\r
- Entry->Type = Type;\r
- Entry->Start = Start;\r
- Entry->End = End;\r
+ Entry->Type = Type;\r
+ Entry->Start = Start;\r
+ Entry->End = End;\r
if (Next) {\r
InsertHeadList (Link, &Entry->Link);\r
} else {\r
IN BOOLEAN AddRegion\r
)\r
{\r
- LIST_ENTRY *Link;\r
- MEMORY_MAP *Entry;\r
- MEMORY_MAP *NextEntry;\r
- LIST_ENTRY *NextLink;\r
- MEMORY_MAP *PreviousEntry;\r
- LIST_ENTRY *PreviousLink;\r
- EFI_PHYSICAL_ADDRESS Start;\r
- EFI_PHYSICAL_ADDRESS End;\r
+ LIST_ENTRY *Link;\r
+ MEMORY_MAP *Entry;\r
+ MEMORY_MAP *NextEntry;\r
+ LIST_ENTRY *NextLink;\r
+ MEMORY_MAP *PreviousEntry;\r
+ LIST_ENTRY *PreviousLink;\r
+ EFI_PHYSICAL_ADDRESS Start;\r
+ EFI_PHYSICAL_ADDRESS End;\r
\r
Start = Memory;\r
- End = Memory + EFI_PAGES_TO_SIZE(NumberOfPages) - 1;\r
+ End = Memory + EFI_PAGES_TO_SIZE (NumberOfPages) - 1;\r
\r
//\r
// Exclude memory region\r
if (Entry->Start > End) {\r
if ((Entry->Start == End + 1) && (Entry->Type == Type)) {\r
Entry->Start = Start;\r
- return ;\r
+ return;\r
}\r
+\r
InsertNewEntry (\r
&Entry->Link,\r
Start,\r
FALSE,\r
AddRegion\r
);\r
- return ;\r
+ return;\r
}\r
\r
if ((Entry->Start <= Start) && (Entry->End >= End)) {\r
AddRegion\r
);\r
}\r
+\r
if (Entry->End > End) {\r
//\r
// ---------------------------------------------------\r
AddRegion\r
);\r
}\r
+\r
//\r
// Update this node\r
//\r
Entry->Start = Start;\r
- Entry->End = End;\r
- Entry->Type = Type;\r
+ Entry->End = End;\r
+ Entry->Type = Type;\r
\r
//\r
// Check adjacent\r
RemoveOldEntry (NextEntry);\r
}\r
}\r
+\r
PreviousLink = Entry->Link.BackLink;\r
if (PreviousLink != &gMemoryMap) {\r
PreviousEntry = CR (PreviousLink, MEMORY_MAP, Link, MEMORY_MAP_SIGNATURE);\r
}\r
}\r
}\r
- return ;\r
+\r
+ return;\r
}\r
}\r
\r
Entry = CR (Link, MEMORY_MAP, Link, MEMORY_MAP_SIGNATURE);\r
if ((Entry->End + 1 == Start) && (Entry->Type == Type)) {\r
Entry->End = End;\r
- return ;\r
+ return;\r
}\r
}\r
+\r
InsertNewEntry (\r
&gMemoryMap,\r
Start,\r
FALSE,\r
AddRegion\r
);\r
- return ;\r
+ return;\r
}\r
\r
/**\r
VOID\r
)\r
{\r
- LIST_ENTRY *Link;\r
- UINTN Count;\r
+ LIST_ENTRY *Link;\r
+ UINTN Count;\r
\r
Count = 0;\r
- Link = gMemoryMap.ForwardLink;\r
+ Link = gMemoryMap.ForwardLink;\r
while (Link != &gMemoryMap) {\r
- Link = Link->ForwardLink;\r
+ Link = Link->ForwardLink;\r
Count++;\r
}\r
+\r
return Count;\r
}\r
\r
-\r
-\r
/**\r
Internal Function. Allocate n pages from given free page node.\r
\r
if (Top > Pages->NumberOfPages) {\r
Top = Pages->NumberOfPages;\r
}\r
+\r
Bottom = Top - NumberOfPages;\r
\r
if (Top < Pages->NumberOfPages) {\r
- Node = (FREE_PAGE_LIST*)((UINTN)Pages + EFI_PAGES_TO_SIZE (Top));\r
+ Node = (FREE_PAGE_LIST *)((UINTN)Pages + EFI_PAGES_TO_SIZE (Top));\r
Node->NumberOfPages = Pages->NumberOfPages - Top;\r
InsertHeadList (&Pages->Link, &Node->Link);\r
}\r
\r
for (Node = FreePageList->BackLink; Node != FreePageList; Node = Node->BackLink) {\r
Pages = BASE_CR (Node, FREE_PAGE_LIST, Link);\r
- if (Pages->NumberOfPages >= NumberOfPages &&\r
- (UINTN)Pages + EFI_PAGES_TO_SIZE (NumberOfPages) - 1 <= MaxAddress) {\r
+ if ((Pages->NumberOfPages >= NumberOfPages) &&\r
+ ((UINTN)Pages + EFI_PAGES_TO_SIZE (NumberOfPages) - 1 <= MaxAddress))\r
+ {\r
return InternalAllocPagesOnOneNode (Pages, NumberOfPages, MaxAddress);\r
}\r
}\r
+\r
return (UINTN)(-1);\r
}\r
\r
}\r
\r
EndAddress = Address + EFI_PAGES_TO_SIZE (NumberOfPages);\r
- for (Node = FreePageList->BackLink; Node!= FreePageList; Node = Node->BackLink) {\r
+ for (Node = FreePageList->BackLink; Node != FreePageList; Node = Node->BackLink) {\r
Pages = BASE_CR (Node, FREE_PAGE_LIST, Link);\r
if ((UINTN)Pages <= Address) {\r
if ((UINTN)Pages + EFI_PAGES_TO_SIZE (Pages->NumberOfPages) < EndAddress) {\r
break;\r
}\r
+\r
return InternalAllocPagesOnOneNode (Pages, NumberOfPages, EndAddress);\r
}\r
}\r
+\r
return ~Address;\r
}\r
\r
{\r
UINTN RequestedAddress;\r
\r
- if (MemoryType != EfiRuntimeServicesCode &&\r
- MemoryType != EfiRuntimeServicesData) {\r
+ if ((MemoryType != EfiRuntimeServicesCode) &&\r
+ (MemoryType != EfiRuntimeServicesData))\r
+ {\r
return EFI_INVALID_PARAMETER;\r
}\r
\r
case AllocateMaxAddress:\r
if (NeedGuard) {\r
*Memory = InternalAllocMaxAddressWithGuard (\r
- &mSmmMemoryMap,\r
- NumberOfPages,\r
- RequestedAddress,\r
- MemoryType\r
- );\r
+ &mSmmMemoryMap,\r
+ NumberOfPages,\r
+ RequestedAddress,\r
+ MemoryType\r
+ );\r
if (*Memory == (UINTN)-1) {\r
return EFI_OUT_OF_RESOURCES;\r
} else {\r
if (*Memory == (UINTN)-1) {\r
return EFI_OUT_OF_RESOURCES;\r
}\r
+\r
break;\r
case AllocateAddress:\r
*Memory = InternalAllocAddress (\r
if (*Memory != RequestedAddress) {\r
return EFI_NOT_FOUND;\r
}\r
+\r
break;\r
default:\r
return EFI_INVALID_PARAMETER;\r
//\r
ConvertSmmMemoryMapEntry (MemoryType, *Memory, NumberOfPages, AddRegion);\r
if (!AddRegion) {\r
- CoreFreeMemoryMapStack();\r
+ CoreFreeMemoryMapStack ();\r
}\r
\r
return EFI_SUCCESS;\r
IN BOOLEAN NeedGuard\r
)\r
{\r
- return SmmInternalAllocatePagesEx (Type, MemoryType, NumberOfPages, Memory,\r
- FALSE, NeedGuard);\r
+ return SmmInternalAllocatePagesEx (\r
+ Type,\r
+ MemoryType,\r
+ NumberOfPages,\r
+ Memory,\r
+ FALSE,\r
+ NeedGuard\r
+ );\r
}\r
\r
/**\r
BOOLEAN NeedGuard;\r
\r
NeedGuard = IsPageTypeToGuard (MemoryType, Type);\r
- Status = SmmInternalAllocatePages (Type, MemoryType, NumberOfPages, Memory,\r
- NeedGuard);\r
+ Status = SmmInternalAllocatePages (\r
+ Type,\r
+ MemoryType,\r
+ NumberOfPages,\r
+ Memory,\r
+ NeedGuard\r
+ );\r
if (!EFI_ERROR (Status)) {\r
SmmCoreUpdateProfile (\r
- (EFI_PHYSICAL_ADDRESS) (UINTN) RETURN_ADDRESS (0),\r
+ (EFI_PHYSICAL_ADDRESS)(UINTN)RETURN_ADDRESS (0),\r
MemoryProfileActionAllocatePages,\r
MemoryType,\r
EFI_PAGES_TO_SIZE (NumberOfPages),\r
- (VOID *) (UINTN) *Memory,\r
+ (VOID *)(UINTN)*Memory,\r
NULL\r
);\r
}\r
+\r
return Status;\r
}\r
\r
\r
Next = BASE_CR (First->Link.ForwardLink, FREE_PAGE_LIST, Link);\r
ASSERT (\r
- TRUNCATE_TO_PAGES ((UINTN)Next - (UINTN)First) >= First->NumberOfPages);\r
+ TRUNCATE_TO_PAGES ((UINTN)Next - (UINTN)First) >= First->NumberOfPages\r
+ );\r
\r
if (TRUNCATE_TO_PAGES ((UINTN)Next - (UINTN)First) == First->NumberOfPages) {\r
First->NumberOfPages += Next->NumberOfPages;\r
RemoveEntryList (&Next->Link);\r
Next = First;\r
}\r
+\r
return Next;\r
}\r
\r
}\r
\r
Pages = NULL;\r
- Node = mSmmMemoryMap.ForwardLink;\r
+ Node = mSmmMemoryMap.ForwardLink;\r
while (Node != &mSmmMemoryMap) {\r
Pages = BASE_CR (Node, FREE_PAGE_LIST, Link);\r
if (Memory < (UINTN)Pages) {\r
break;\r
}\r
+\r
Node = Node->ForwardLink;\r
}\r
\r
- if (Node != &mSmmMemoryMap &&\r
- Memory + EFI_PAGES_TO_SIZE (NumberOfPages) > (UINTN)Pages) {\r
+ if ((Node != &mSmmMemoryMap) &&\r
+ (Memory + EFI_PAGES_TO_SIZE (NumberOfPages) > (UINTN)Pages))\r
+ {\r
return EFI_INVALID_PARAMETER;\r
}\r
\r
}\r
}\r
\r
- Pages = (FREE_PAGE_LIST*)(UINTN)Memory;\r
+ Pages = (FREE_PAGE_LIST *)(UINTN)Memory;\r
Pages->NumberOfPages = NumberOfPages;\r
InsertTailList (Node, &Pages->Link);\r
\r
//\r
ConvertSmmMemoryMapEntry (EfiConventionalMemory, Memory, NumberOfPages, AddRegion);\r
if (!AddRegion) {\r
- CoreFreeMemoryMapStack();\r
+ CoreFreeMemoryMapStack ();\r
}\r
\r
return EFI_SUCCESS;\r
if (IsGuarded) {\r
return SmmInternalFreePagesExWithGuard (Memory, NumberOfPages, FALSE);\r
}\r
+\r
return SmmInternalFreePagesEx (Memory, NumberOfPages, FALSE);\r
}\r
\r
IN UINTN NumberOfPages\r
)\r
{\r
- LIST_ENTRY *Link;\r
- MEMORY_MAP *Entry;\r
- EFI_PHYSICAL_ADDRESS Last;\r
+ LIST_ENTRY *Link;\r
+ MEMORY_MAP *Entry;\r
+ EFI_PHYSICAL_ADDRESS Last;\r
\r
Last = Memory + EFI_PAGES_TO_SIZE (NumberOfPages) - 1;\r
\r
EFI_STATUS Status;\r
BOOLEAN IsGuarded;\r
\r
- if (!InMemMap(Memory, NumberOfPages)) {\r
+ if (!InMemMap (Memory, NumberOfPages)) {\r
return EFI_NOT_FOUND;\r
}\r
\r
IsGuarded = IsHeapGuardEnabled () && IsMemoryGuarded (Memory);\r
- Status = SmmInternalFreePages (Memory, NumberOfPages, IsGuarded);\r
+ Status = SmmInternalFreePages (Memory, NumberOfPages, IsGuarded);\r
if (!EFI_ERROR (Status)) {\r
SmmCoreUpdateProfile (\r
- (EFI_PHYSICAL_ADDRESS) (UINTN) RETURN_ADDRESS (0),\r
+ (EFI_PHYSICAL_ADDRESS)(UINTN)RETURN_ADDRESS (0),\r
MemoryProfileActionFreePages,\r
EfiMaxMemoryType,\r
EFI_PAGES_TO_SIZE (NumberOfPages),\r
- (VOID *) (UINTN) Memory,\r
+ (VOID *)(UINTN)Memory,\r
NULL\r
);\r
}\r
+\r
return Status;\r
}\r
\r
// Align range on an EFI_PAGE_SIZE boundary\r
//\r
AlignedMemBase = (UINTN)(MemBase + EFI_PAGE_MASK) & ~EFI_PAGE_MASK;\r
- MemLength -= AlignedMemBase - MemBase;\r
+ MemLength -= AlignedMemBase - MemBase;\r
if (Type == EfiConventionalMemory) {\r
SmmInternalFreePagesEx (AlignedMemBase, TRUNCATE_TO_PAGES ((UINTN)MemLength), TRUE);\r
} else {\r
OUT UINT32 *DescriptorVersion\r
)\r
{\r
- UINTN Count;\r
- LIST_ENTRY *Link;\r
- MEMORY_MAP *Entry;\r
- UINTN Size;\r
- UINTN BufferSize;\r
+ UINTN Count;\r
+ LIST_ENTRY *Link;\r
+ MEMORY_MAP *Entry;\r
+ UINTN Size;\r
+ UINTN BufferSize;\r
\r
Size = sizeof (EFI_MEMORY_DESCRIPTOR);\r
\r
// prevent people from having pointer math bugs in their code.\r
// now you have to use *DescriptorSize to make things work.\r
//\r
- Size += sizeof(UINT64) - (Size % sizeof (UINT64));\r
+ Size += sizeof (UINT64) - (Size % sizeof (UINT64));\r
\r
if (DescriptorSize != NULL) {\r
*DescriptorSize = Size;\r
*DescriptorVersion = EFI_MEMORY_DESCRIPTOR_VERSION;\r
}\r
\r
- Count = GetSmmMemoryMapEntryCount ();\r
+ Count = GetSmmMemoryMapEntryCount ();\r
BufferSize = Size * Count;\r
if (*MemoryMapSize < BufferSize) {\r
*MemoryMapSize = BufferSize;\r
Entry = CR (Link, MEMORY_MAP, Link, MEMORY_MAP_SIGNATURE);\r
Link = Link->ForwardLink;\r
\r
- MemoryMap->Type = Entry->Type;\r
- MemoryMap->PhysicalStart = Entry->Start;\r
- MemoryMap->NumberOfPages = RShiftU64 (Entry->End - Entry->Start + 1, EFI_PAGE_SHIFT);\r
+ MemoryMap->Type = Entry->Type;\r
+ MemoryMap->PhysicalStart = Entry->Start;\r
+ MemoryMap->NumberOfPages = RShiftU64 (Entry->End - Entry->Start + 1, EFI_PAGE_SHIFT);\r
\r
MemoryMap = NEXT_MEMORY_DESCRIPTOR (MemoryMap, Size);\r
}\r