#define PAGE_TABLE_LIB_PAGING_CONTEXT_IA32_X64_ATTRIBUTES_XD_ACTIVATED BIT31\r
// Other bits are reserved for future use\r
typedef struct {\r
- UINT32 PageTableBase;\r
- UINT32 Reserved;\r
- UINT32 Attributes;\r
+ UINT32 PageTableBase;\r
+ UINT32 Reserved;\r
+ UINT32 Attributes;\r
} PAGE_TABLE_LIB_PAGING_CONTEXT_IA32;\r
\r
typedef struct {\r
- UINT64 PageTableBase;\r
- UINT32 Attributes;\r
+ UINT64 PageTableBase;\r
+ UINT32 Attributes;\r
} PAGE_TABLE_LIB_PAGING_CONTEXT_X64;\r
\r
typedef union {\r
- PAGE_TABLE_LIB_PAGING_CONTEXT_IA32 Ia32;\r
- PAGE_TABLE_LIB_PAGING_CONTEXT_X64 X64;\r
+ PAGE_TABLE_LIB_PAGING_CONTEXT_IA32 Ia32;\r
+ PAGE_TABLE_LIB_PAGING_CONTEXT_X64 X64;\r
} PAGE_TABLE_LIB_PAGING_CONTEXT_DATA;\r
\r
typedef struct {\r
// #define IMAGE_FILE_MACHINE_I386 0x014c\r
// #define IMAGE_FILE_MACHINE_X64 0x8664\r
//\r
- UINT16 MachineType;\r
- PAGE_TABLE_LIB_PAGING_CONTEXT_DATA ContextData;\r
+ UINT16 MachineType;\r
+ PAGE_TABLE_LIB_PAGING_CONTEXT_DATA ContextData;\r
} PAGE_TABLE_LIB_PAGING_CONTEXT;\r
\r
#define PAGE_TABLE_POOL_ALIGNMENT BASE_2MB\r
(~(EFI_PHYSICAL_ADDRESS)(PAGE_TABLE_POOL_ALIGNMENT - 1))\r
\r
typedef struct {\r
- VOID *NextPool;\r
- UINTN Offset;\r
- UINTN FreePages;\r
+ VOID *NextPool;\r
+ UINTN Offset;\r
+ UINTN FreePages;\r
} PAGE_TABLE_POOL;\r
\r
-\r
/**\r
Allocates one or more 4KB pages for page table.\r
\r
**/\r
typedef\r
VOID *\r
-(EFIAPI *PAGE_TABLE_LIB_ALLOCATE_PAGES) (\r
+(EFIAPI *PAGE_TABLE_LIB_ALLOCATE_PAGES)(\r
IN UINTN Pages\r
);\r
\r
\r
Caller should make sure BaseAddress and Length is at page boundary.\r
\r
- Caller need guarentee the TPL <= TPL_NOTIFY, if there is split page request.\r
+ Caller need guarantee the TPL <= TPL_NOTIFY, if there is split page request.\r
\r
@param PagingContext The paging context. NULL means get page table from current CPU context.\r
@param BaseAddress The physical address that is the start address of a memory region.\r
RETURN_STATUS\r
EFIAPI\r
AssignMemoryPageAttributes (\r
- IN PAGE_TABLE_LIB_PAGING_CONTEXT *PagingContext OPTIONAL,\r
- IN PHYSICAL_ADDRESS BaseAddress,\r
- IN UINT64 Length,\r
- IN UINT64 Attributes,\r
- IN PAGE_TABLE_LIB_ALLOCATE_PAGES AllocatePagesFunc OPTIONAL\r
+ IN PAGE_TABLE_LIB_PAGING_CONTEXT *PagingContext OPTIONAL,\r
+ IN PHYSICAL_ADDRESS BaseAddress,\r
+ IN UINT64 Length,\r
+ IN UINT64 Attributes,\r
+ IN PAGE_TABLE_LIB_ALLOCATE_PAGES AllocatePagesFunc OPTIONAL\r
);\r
\r
/**\r
VOID *\r
EFIAPI\r
AllocatePageTableMemory (\r
- IN UINTN Pages\r
+ IN UINTN Pages\r
+ );\r
+\r
+/**\r
+ Get paging details.\r
+\r
+ @param PagingContextData The paging context.\r
+ @param PageTableBase Return PageTableBase field.\r
+ @param Attributes Return Attributes field.\r
+\r
+**/\r
+VOID\r
+GetPagingDetails (\r
+ IN PAGE_TABLE_LIB_PAGING_CONTEXT_DATA *PagingContextData,\r
+ OUT UINTN **PageTableBase OPTIONAL,\r
+ OUT UINT32 **Attributes OPTIONAL\r
);\r
\r
#endif\r