15#ifndef OC_MEMORY_LIB_H
16#define OC_MEMORY_LIB_H
19#include <Guid/MemoryAttributesTable.h>
25#define PREV_MEMORY_DESCRIPTOR(MemoryDescriptor, Size) \
26 ((EFI_MEMORY_DESCRIPTOR *)((UINT8 *)(MemoryDescriptor) - (Size)))
32#define LAST_DESCRIPTOR_ADDR(Desc) \
33 ((Desc)->PhysicalStart + (EFI_PAGES_TO_SIZE ((UINTN) (Desc)->NumberOfPages) - 1))
39#define AREA_WITHIN_DESCRIPTOR(Desc, Area, AreaSize) \
40 ((Area) >= (Desc)->PhysicalStart && ((Area) + ((AreaSize) - 1)) <= LAST_DESCRIPTOR_ADDR (Desc))
45#define OC_DEFAULT_VMEM_PAGE_COUNT 0x200
51#define OC_DEFAULT_MEMORY_MAP_SIZE (EFI_PAGE_SIZE*3)
53#define OC_MEMORY_TYPE_DESC_COUNT 16
70 IN UINT32 LegacyAddress,
71 IN UINT32 LegacyLength
84 IN UINT32 LegacyAddress,
85 IN UINT32 LegacyLength
100EFI_MEMORY_DESCRIPTOR *
102 OUT UINTN *MemoryMapSize,
103 OUT UINTN *DescriptorSize,
104 OUT UINTN *MapKey OPTIONAL,
105 OUT UINT32 *DescriptorVersion OPTIONAL,
106 OUT UINTN *OriginalMemoryMapSize OPTIONAL,
107 IN BOOLEAN IncludeSplitSpace
125 OUT UINTN *MemoryMapSize,
126 OUT EFI_MEMORY_DESCRIPTOR **MemoryMap,
128 OUT UINTN *DescriptorSize,
129 OUT UINT32 *DescriptorVersion,
130 IN EFI_GET_MEMORY_MAP GetMemoryMap OPTIONAL,
131 IN OUT EFI_PHYSICAL_ADDRESS *TopMemory OPTIONAL
144 IN UINTN MemoryMapSize,
145 IN OUT EFI_MEMORY_DESCRIPTOR *MemoryMap,
146 IN UINTN DescriptorSize
162 IN OUT UINTN *MemoryMapSize,
163 IN OUT EFI_MEMORY_DESCRIPTOR *MemoryMap,
164 IN UINTN DescriptorSize
179 IN OUT UINT32 *EntryCount,
180 IN OUT EFI_MEMORY_DESCRIPTOR *MemoryMap,
181 IN UINTN DescriptorSize
195 IN EFI_PHYSICAL_ADDRESS Address,
210 IN VOID *Context OPTIONAL,
211 IN UINTN MemoryMapSize,
212 IN OUT EFI_MEMORY_DESCRIPTOR *MemoryMap,
213 IN UINTN DescriptorSize
231 IN EFI_MEMORY_TYPE MemoryType,
233 IN OUT EFI_PHYSICAL_ADDRESS *Memory,
234 IN EFI_GET_MEMORY_MAP GetMemoryMap OPTIONAL,
235 IN EFI_ALLOCATE_PAGES AllocatePages OPTIONAL,
251 IN UINTN MemoryMapSize,
252 IN EFI_MEMORY_DESCRIPTOR *MemoryMap,
253 IN UINTN DescriptorSize,
254 OUT UINTN *DescriptorCount OPTIONAL
266 OUT UINTN *LowerMemory OPTIONAL
286 IN UINTN MemoryMapSize,
287 IN EFI_MEMORY_DESCRIPTOR *MemoryMap,
288 IN UINTN DescriptorSize
308 IN UINTN MemoryMapSize,
309 IN EFI_MEMORY_DESCRIPTOR *MemoryMap,
310 IN UINTN DescriptorSize,
311 IN EFI_PHYSICAL_ADDRESS Address,
312 IN EFI_MEMORY_TYPE Type,
313 IN UINT64 SetAttributes,
314 IN UINT64 DropAttributes
325EFI_MEMORY_ATTRIBUTES_TABLE *
327 OUT EFI_MEMORY_DESCRIPTOR **MemoryAttributesEntry OPTIONAL
342 IN EFI_PHYSICAL_ADDRESS Address,
343 IN EFI_GET_MEMORY_MAP GetMemoryMap OPTIONAL
373 IN UINTN MaxMemoryMapSize,
374 IN OUT UINTN *MemoryMapSize,
375 IN OUT EFI_MEMORY_DESCRIPTOR *MemoryMap,
376 IN UINTN DescriptorSize
424 OUT UINTN *Flags OPTIONAL
439 IN EFI_VIRTUAL_ADDRESS VirtualAddr,
440 OUT EFI_PHYSICAL_ADDRESS *PhysicalAddr
460 IN EFI_VIRTUAL_ADDRESS VirtualAddr,
461 OUT EFI_PHYSICAL_ADDRESS *PhysicalAddr OPTIONAL,
462 OUT UINT8 *Level OPTIONAL,
463 OUT UINT64 *Bits OPTIONAL,
484 IN EFI_VIRTUAL_ADDRESS VirtualAddr,
501 IN CHAR8 *MemoryTypeDesc,
502 OUT EFI_MEMORY_TYPE *MemoryType
522 IN EFI_PHYSICAL_ADDRESS Address,
524 OUT UINT64 *
Length OPTIONAL
556 IN EFI_GET_MEMORY_MAP GetMemoryMap OPTIONAL
588 IN EFI_VIRTUAL_ADDRESS VirtualAddr,
589 IN EFI_PHYSICAL_ADDRESS PhysicalAddr
608 IN EFI_VIRTUAL_ADDRESS VirtualAddr,
610 IN EFI_PHYSICAL_ADDRESS PhysicalAddr
DMG_SIZE_DEVICE_PATH Size
VOID * UmmMalloc(IN UINT32 Size)
EFI_STATUS LegacyRegionLock(IN UINT32 LegacyAddress, IN UINT32 LegacyLength)
EFI_MEMORY_DESCRIPTOR * OcGetCurrentMemoryMap(OUT UINTN *MemoryMapSize, OUT UINTN *DescriptorSize, OUT UINTN *MapKey OPTIONAL, OUT UINT32 *DescriptorVersion OPTIONAL, OUT UINTN *OriginalMemoryMapSize OPTIONAL, IN BOOLEAN IncludeSplitSpace)
EFI_STATUS VmMapVirtualPage(IN OUT OC_VMEM_CONTEXT *Context, IN OUT PAGE_MAP_AND_DIRECTORY_POINTER *PageTable OPTIONAL, IN EFI_VIRTUAL_ADDRESS VirtualAddr, IN EFI_PHYSICAL_ADDRESS PhysicalAddr)
PAGE_MAP_AND_DIRECTORY_POINTER * OcGetCurrentPageTable(OUT UINTN *Flags OPTIONAL)
EFI_STATUS OcGetPhysicalAddress(IN PAGE_MAP_AND_DIRECTORY_POINTER *PageTable OPTIONAL, IN EFI_VIRTUAL_ADDRESS VirtualAddr, OUT EFI_PHYSICAL_ADDRESS *PhysicalAddr)
UINTN OcCountFreePages(OUT UINTN *LowerMemory OPTIONAL)
EFI_MEMORY_ATTRIBUTES_TABLE * OcGetMemoryAttributes(OUT EFI_MEMORY_DESCRIPTOR **MemoryAttributesEntry OPTIONAL)
EFI_STATUS OcDescToMemoryType(IN CHAR8 *MemoryTypeDesc, OUT EFI_MEMORY_TYPE *MemoryType)
EFI_STATUS OcAllocatePagesFromTop(IN EFI_MEMORY_TYPE MemoryType, IN UINTN Pages, IN OUT EFI_PHYSICAL_ADDRESS *Memory, IN EFI_GET_MEMORY_MAP GetMemoryMap OPTIONAL, IN EFI_ALLOCATE_PAGES AllocatePages OPTIONAL, IN CHECK_ALLOCATION_RANGE CheckRange OPTIONAL)
EFI_STATUS OcSetPatIndexForAddressRange(IN PAGE_MAP_AND_DIRECTORY_POINTER *PageTable OPTIONAL, IN EFI_VIRTUAL_ADDRESS VirtualAddr, IN UINT64 Length, IN PAT_INDEX *PatIndex)
BOOLEAN OcIsPatSupported(VOID)
EFI_STATUS OcGetCurrentMemoryMapAlloc(OUT UINTN *MemoryMapSize, OUT EFI_MEMORY_DESCRIPTOR **MemoryMap, OUT UINTN *MapKey, OUT UINTN *DescriptorSize, OUT UINT32 *DescriptorVersion, IN EFI_GET_MEMORY_MAP GetMemoryMap OPTIONAL, IN OUT EFI_PHYSICAL_ADDRESS *TopMemory OPTIONAL)
struct OC_VMEM_CONTEXT_ OC_VMEM_CONTEXT
EFI_STATUS VmMapVirtualPages(IN OUT OC_VMEM_CONTEXT *Context, IN OUT PAGE_MAP_AND_DIRECTORY_POINTER *PageTable OPTIONAL, IN EFI_VIRTUAL_ADDRESS VirtualAddr, IN UINT64 NumPages, IN EFI_PHYSICAL_ADDRESS PhysicalAddr)
EFI_STATUS OcModifyMtrrRange(IN EFI_PHYSICAL_ADDRESS Address, IN UINT8 MtrrType, OUT UINT64 *Length OPTIONAL)
EFI_STATUS VmAllocateMemoryPool(OUT OC_VMEM_CONTEXT *Context, IN UINTN NumPages, IN EFI_GET_MEMORY_MAP GetMemoryMap OPTIONAL)
VOID UmmSetHeap(IN VOID *Heap, IN UINT32 Size)
UINT64 OcCountRuntimePages(IN UINTN MemoryMapSize, IN EFI_MEMORY_DESCRIPTOR *MemoryMap, IN UINTN DescriptorSize, OUT UINTN *DescriptorCount OPTIONAL)
EFI_STATUS OcDeduplicateDescriptors(IN OUT UINT32 *EntryCount, IN OUT EFI_MEMORY_DESCRIPTOR *MemoryMap, IN UINTN DescriptorSize)
EFI_STATUS OcShrinkMemoryMap(IN OUT UINTN *MemoryMapSize, IN OUT EFI_MEMORY_DESCRIPTOR *MemoryMap, IN UINTN DescriptorSize)
BOOLEAN UmmFree(IN VOID *Ptr)
CHAR8 * OcGetPatTypeString(UINT8 PatType)
EFI_STATUS OcRebuildAttributes(IN EFI_PHYSICAL_ADDRESS Address, IN EFI_GET_MEMORY_MAP GetMemoryMap OPTIONAL)
VOID OcSortMemoryMap(IN UINTN MemoryMapSize, IN OUT EFI_MEMORY_DESCRIPTOR *MemoryMap, IN UINTN DescriptorSize)
VOID(* OC_MEMORY_FILTER)(IN VOID *Context OPTIONAL, IN UINTN MemoryMapSize, IN OUT EFI_MEMORY_DESCRIPTOR *MemoryMap, IN UINTN DescriptorSize)
VOID OcPrintMemoryMap(IN UINTN MemoryMapSize, IN EFI_MEMORY_DESCRIPTOR *MemoryMap, IN UINTN DescriptorSize)
EFI_STATUS OcGetSetPageTableInfoForAddress(IN PAGE_MAP_AND_DIRECTORY_POINTER *PageTable OPTIONAL, IN EFI_VIRTUAL_ADDRESS VirtualAddr, OUT EFI_PHYSICAL_ADDRESS *PhysicalAddr OPTIONAL, OUT UINT8 *Level OPTIONAL, OUT UINT64 *Bits OPTIONAL, IN OUT PAT_INDEX *PatIndex OPTIONAL, IN BOOLEAN SetPat)
EFI_STATUS OcUpdateDescriptors(IN UINTN MemoryMapSize, IN EFI_MEMORY_DESCRIPTOR *MemoryMap, IN UINTN DescriptorSize, IN EFI_PHYSICAL_ADDRESS Address, IN EFI_MEMORY_TYPE Type, IN UINT64 SetAttributes, IN UINT64 DropAttributes)
UINTN OcCountSplitDescriptors(VOID)
EFI_STATUS OcSplitMemoryMapByAttributes(IN UINTN MaxMemoryMapSize, IN OUT UINTN *MemoryMapSize, IN OUT EFI_MEMORY_DESCRIPTOR *MemoryMap, IN UINTN DescriptorSize)
CHAR8 * OcGetMtrrTypeString(UINT8 MtrrType)
VOID OcPrintMemoryAttributesTable(VOID)
BOOLEAN(* CHECK_ALLOCATION_RANGE)(IN EFI_PHYSICAL_ADDRESS Address, IN UINTN Size)
VOID * VmAllocatePages(IN OUT OC_VMEM_CONTEXT *Context, IN UINTN NumPages)
EFI_STATUS LegacyRegionUnlock(IN UINT32 LegacyAddress, IN UINT32 LegacyLength)
BOOLEAN UmmInitialized(VOID)