]> git.proxmox.com Git - mirror_edk2.git/blobdiff - UefiCpuPkg/CpuDxe/CpuPageTable.h
UefiCpuPkg: Move AsmRelocateApLoopStart from Mpfuncs.nasm to AmdSev.nasm
[mirror_edk2.git] / UefiCpuPkg / CpuDxe / CpuPageTable.h
index 48da9cdde7dd30e3b1e20fb630681ecf519a5529..607e936b8ac7b5e05b5f255ed48f5ed8e5d317cf 100644 (file)
@@ -1,14 +1,8 @@
 /** @file\r
   Page table management header file.\r
 \r
-  Copyright (c) 2017, Intel Corporation. All rights reserved.<BR>\r
-  This program and the accompanying materials\r
-  are licensed and made available under the terms and conditions of the BSD License\r
-  which accompanies this distribution.  The full text of the license may be found at\r
-  http://opensource.org/licenses/bsd-license.php\r
-\r
-  THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,\r
-  WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.\r
+  Copyright (c) 2017 - 2019, Intel Corporation. All rights reserved.<BR>\r
+  SPDX-License-Identifier: BSD-2-Clause-Patent\r
 \r
 **/\r
 \r
 #define PAGE_TABLE_LIB_PAGING_CONTEXT_IA32_X64_ATTRIBUTES_PSE              BIT0\r
 #define PAGE_TABLE_LIB_PAGING_CONTEXT_IA32_X64_ATTRIBUTES_PAE              BIT1\r
 #define PAGE_TABLE_LIB_PAGING_CONTEXT_IA32_X64_ATTRIBUTES_PAGE_1G_SUPPORT  BIT2\r
+#define PAGE_TABLE_LIB_PAGING_CONTEXT_IA32_X64_ATTRIBUTES_5_LEVEL          BIT3\r
 #define PAGE_TABLE_LIB_PAGING_CONTEXT_IA32_X64_ATTRIBUTES_WP_ENABLE        BIT30\r
 #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
@@ -46,8 +41,8 @@ typedef struct {
   // #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
@@ -57,12 +52,11 @@ typedef struct {
   (~(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
@@ -73,7 +67,7 @@ typedef struct {
 **/\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
@@ -83,7 +77,7 @@ VOID *
 \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
@@ -108,11 +102,11 @@ VOID *
 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
@@ -141,7 +135,22 @@ InitializePageTableLib (
 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