#include <Library/MemoryAllocationLib.h>\r
#include <Guid/EventGroup.h>\r
\r
-//----------------------------------------------------------------\r
+// ----------------------------------------------------------------\r
// Initial version. Needs further optimizations.\r
-//----------------------------------------------------------------\r
+// ----------------------------------------------------------------\r
\r
//\r
// Definitions for Runtime Memory Operations\r
//\r
-#define RT_PAGE_SIZE 0x200\r
-#define RT_PAGE_MASK 0x1FF\r
-#define RT_PAGE_SHIFT 9\r
+#define RT_PAGE_SIZE 0x200\r
+#define RT_PAGE_MASK 0x1FF\r
+#define RT_PAGE_SHIFT 9\r
\r
-#define RT_SIZE_TO_PAGES(a) (((a) >> RT_PAGE_SHIFT) + (((a) & RT_PAGE_MASK) ? 1 : 0))\r
-#define RT_PAGES_TO_SIZE(a) ((a) << RT_PAGE_SHIFT)\r
+#define RT_SIZE_TO_PAGES(a) (((a) >> RT_PAGE_SHIFT) + (((a) & RT_PAGE_MASK) ? 1 : 0))\r
+#define RT_PAGES_TO_SIZE(a) ((a) << RT_PAGE_SHIFT)\r
\r
//\r
// Page Flag Definitions\r
//\r
-#define RT_PAGE_FREE 0x00000000\r
-#define RT_PAGE_USED 0x00000001\r
+#define RT_PAGE_FREE 0x00000000\r
+#define RT_PAGE_USED 0x00000001\r
\r
-#define MIN_REQUIRED_BLOCKS 600\r
+#define MIN_REQUIRED_BLOCKS 600\r
\r
//\r
// Memory Page Table\r
//\r
typedef struct {\r
- UINTN StartPageOffset; // Offset of the starting page allocated.\r
+ UINTN StartPageOffset; // Offset of the starting page allocated.\r
// Only available for USED pages.\r
- UINT32 PageFlag; // Page Attributes.\r
+ UINT32 PageFlag; // Page Attributes.\r
} RT_MEMORY_PAGE_ENTRY;\r
\r
typedef struct {\r
- UINTN PageCount;\r
- UINTN LastEmptyPageOffset;\r
- UINT8 *DataAreaBase; // Pointer to data Area.\r
- RT_MEMORY_PAGE_ENTRY Pages[1]; // Page Table Entries.\r
+ UINTN PageCount;\r
+ UINTN LastEmptyPageOffset;\r
+ UINT8 *DataAreaBase; // Pointer to data Area.\r
+ RT_MEMORY_PAGE_ENTRY Pages[1]; // Page Table Entries.\r
} RT_MEMORY_PAGE_TABLE;\r
\r
//\r
//\r
// Event for Runtime Address Conversion.\r
//\r
-STATIC EFI_EVENT mVirtualAddressChangeEvent;\r
-\r
+STATIC EFI_EVENT mVirtualAddressChangeEvent;\r
\r
/**\r
Initializes pre-allocated memory pointed by ScratchBuffer for subsequent\r
return EFI_SUCCESS;\r
}\r
\r
-\r
/**\r
Look-up Free memory Region for object allocation.\r
\r
//\r
return (UINTN)(-1);\r
}\r
+\r
for (Index = 0; Index < (StartPageIndex - ReqPages); ) {\r
//\r
// Check Consecutive ReqPages Pages.\r
// Failed! Skip current adjacent Used pages\r
//\r
while ((SubIndex < (StartPageIndex - ReqPages)) &&\r
- ((mRTPageTable->Pages[SubIndex + Index].PageFlag & RT_PAGE_USED) != 0)) {\r
+ ((mRTPageTable->Pages[SubIndex + Index].PageFlag & RT_PAGE_USED) != 0))\r
+ {\r
SubIndex++;\r
}\r
\r
return (UINTN)(-1);\r
}\r
\r
-\r
/**\r
Allocates a buffer at runtime phase.\r
\r
return AllocPtr;\r
}\r
\r
-\r
/**\r
Frees a buffer that was previously allocated at runtime phase.\r
\r
UINTN StartPageIndex;\r
\r
StartOffset = (UINTN)Buffer - (UINTN)mRTPageTable->DataAreaBase;\r
- StartPageIndex = RT_SIZE_TO_PAGES (mRTPageTable->Pages[RT_SIZE_TO_PAGES(StartOffset)].StartPageOffset);\r
+ StartPageIndex = RT_SIZE_TO_PAGES (mRTPageTable->Pages[RT_SIZE_TO_PAGES (StartOffset)].StartPageOffset);\r
\r
while (StartPageIndex < mRTPageTable->PageCount) {\r
if (((mRTPageTable->Pages[StartPageIndex].PageFlag & RT_PAGE_USED) != 0) &&\r
- (mRTPageTable->Pages[StartPageIndex].StartPageOffset == StartOffset)) {\r
- //\r
- // Free this page\r
- //\r
- mRTPageTable->Pages[StartPageIndex].PageFlag &= ~RT_PAGE_USED;\r
- mRTPageTable->Pages[StartPageIndex].PageFlag |= RT_PAGE_FREE;\r
- mRTPageTable->Pages[StartPageIndex].StartPageOffset = 0;\r
-\r
- StartPageIndex++;\r
+ (mRTPageTable->Pages[StartPageIndex].StartPageOffset == StartOffset))\r
+ {\r
+ //\r
+ // Free this page\r
+ //\r
+ mRTPageTable->Pages[StartPageIndex].PageFlag &= ~RT_PAGE_USED;\r
+ mRTPageTable->Pages[StartPageIndex].PageFlag |= RT_PAGE_FREE;\r
+ mRTPageTable->Pages[StartPageIndex].StartPageOffset = 0;\r
+\r
+ StartPageIndex++;\r
} else {\r
break;\r
}\r
return;\r
}\r
\r
-\r
/**\r
Notification function of EVT_SIGNAL_VIRTUAL_ADDRESS_CHANGE.\r
\r
VOID\r
EFIAPI\r
RuntimeCryptLibAddressChangeEvent (\r
- IN EFI_EVENT Event,\r
- IN VOID *Context\r
+ IN EFI_EVENT Event,\r
+ IN VOID *Context\r
)\r
{\r
//\r
// Converts a pointer for runtime memory management to a new virtual address.\r
//\r
- EfiConvertPointer (0x0, (VOID **) &mRTPageTable->DataAreaBase);\r
- EfiConvertPointer (0x0, (VOID **) &mRTPageTable);\r
+ EfiConvertPointer (0x0, (VOID **)&mRTPageTable->DataAreaBase);\r
+ EfiConvertPointer (0x0, (VOID **)&mRTPageTable);\r
}\r
\r
-\r
/**\r
Constructor routine for runtime crypt library instance.\r
\r
return Status;\r
}\r
\r
-\r
//\r
// -- Memory-Allocation Routines Wrapper for UEFI-OpenSSL Library --\r
//\r
\r
/* Allocates memory blocks */\r
-void *malloc (size_t size)\r
+void *\r
+malloc (\r
+ size_t size\r
+ )\r
{\r
- return RuntimeAllocateMem ((UINTN) size);\r
+ return RuntimeAllocateMem ((UINTN)size);\r
}\r
\r
/* Reallocate memory blocks */\r
-void *realloc (void *ptr, size_t size)\r
+void *\r
+realloc (\r
+ void *ptr,\r
+ size_t size\r
+ )\r
{\r
VOID *NewPtr;\r
UINTN StartOffset;\r
PageCount = 0;\r
while (StartPageIndex < mRTPageTable->PageCount) {\r
if (((mRTPageTable->Pages[StartPageIndex].PageFlag & RT_PAGE_USED) != 0) &&\r
- (mRTPageTable->Pages[StartPageIndex].StartPageOffset == StartOffset)) {\r
- StartPageIndex++;\r
- PageCount++;\r
+ (mRTPageTable->Pages[StartPageIndex].StartPageOffset == StartOffset))\r
+ {\r
+ StartPageIndex++;\r
+ PageCount++;\r
} else {\r
break;\r
}\r
return ptr;\r
}\r
\r
- NewPtr = RuntimeAllocateMem ((UINTN) size);\r
+ NewPtr = RuntimeAllocateMem ((UINTN)size);\r
if (NewPtr == NULL) {\r
return NULL;\r
}\r
}\r
\r
/* Deallocates or frees a memory block */\r
-void free (void *ptr)\r
+void\r
+free (\r
+ void *ptr\r
+ )\r
{\r
//\r
// In Standard C, free() handles a null pointer argument transparently. This\r