REF: https://bugzilla.tianocore.org/show_bug.cgi?id=3737 Apply uncrustify changes to .c/.h files in the UefiCpuPkg package Cc: Andrew Fish <afish@apple.com> Cc: Leif Lindholm <leif@nuviainc.com> Cc: Michael D Kinney <michael.d.kinney@intel.com> Signed-off-by: Michael Kubacki <michael.kubacki@microsoft.com> Reviewed-by: Ray Ni <ray.ni@intel.com>
		
			
				
	
	
		
			157 lines
		
	
	
		
			5.5 KiB
		
	
	
	
		
			C
		
	
	
	
	
	
			
		
		
	
	
			157 lines
		
	
	
		
			5.5 KiB
		
	
	
	
		
			C
		
	
	
	
	
	
| /** @file
 | |
|   Page table management header file.
 | |
| 
 | |
|   Copyright (c) 2017 - 2019, Intel Corporation. All rights reserved.<BR>
 | |
|   SPDX-License-Identifier: BSD-2-Clause-Patent
 | |
| 
 | |
| **/
 | |
| 
 | |
| #ifndef _PAGE_TABLE_LIB_H_
 | |
| #define _PAGE_TABLE_LIB_H_
 | |
| 
 | |
| #include <IndustryStandard/PeImage.h>
 | |
| 
 | |
| #define PAGE_TABLE_LIB_PAGING_CONTEXT_IA32_X64_ATTRIBUTES_PSE              BIT0
 | |
| #define PAGE_TABLE_LIB_PAGING_CONTEXT_IA32_X64_ATTRIBUTES_PAE              BIT1
 | |
| #define PAGE_TABLE_LIB_PAGING_CONTEXT_IA32_X64_ATTRIBUTES_PAGE_1G_SUPPORT  BIT2
 | |
| #define PAGE_TABLE_LIB_PAGING_CONTEXT_IA32_X64_ATTRIBUTES_5_LEVEL          BIT3
 | |
| #define PAGE_TABLE_LIB_PAGING_CONTEXT_IA32_X64_ATTRIBUTES_WP_ENABLE        BIT30
 | |
| #define PAGE_TABLE_LIB_PAGING_CONTEXT_IA32_X64_ATTRIBUTES_XD_ACTIVATED     BIT31
 | |
| // Other bits are reserved for future use
 | |
| typedef struct {
 | |
|   UINT32    PageTableBase;
 | |
|   UINT32    Reserved;
 | |
|   UINT32    Attributes;
 | |
| } PAGE_TABLE_LIB_PAGING_CONTEXT_IA32;
 | |
| 
 | |
| typedef struct {
 | |
|   UINT64    PageTableBase;
 | |
|   UINT32    Attributes;
 | |
| } PAGE_TABLE_LIB_PAGING_CONTEXT_X64;
 | |
| 
 | |
| typedef union {
 | |
|   PAGE_TABLE_LIB_PAGING_CONTEXT_IA32    Ia32;
 | |
|   PAGE_TABLE_LIB_PAGING_CONTEXT_X64     X64;
 | |
| } PAGE_TABLE_LIB_PAGING_CONTEXT_DATA;
 | |
| 
 | |
| typedef struct {
 | |
|   //
 | |
|   // PE32+ Machine type for EFI images
 | |
|   //
 | |
|   // #define IMAGE_FILE_MACHINE_I386            0x014c
 | |
|   // #define IMAGE_FILE_MACHINE_X64             0x8664
 | |
|   //
 | |
|   UINT16                                MachineType;
 | |
|   PAGE_TABLE_LIB_PAGING_CONTEXT_DATA    ContextData;
 | |
| } PAGE_TABLE_LIB_PAGING_CONTEXT;
 | |
| 
 | |
| #define PAGE_TABLE_POOL_ALIGNMENT   BASE_2MB
 | |
| #define PAGE_TABLE_POOL_UNIT_SIZE   SIZE_2MB
 | |
| #define PAGE_TABLE_POOL_UNIT_PAGES  EFI_SIZE_TO_PAGES (PAGE_TABLE_POOL_UNIT_SIZE)
 | |
| #define PAGE_TABLE_POOL_ALIGN_MASK  \
 | |
|   (~(EFI_PHYSICAL_ADDRESS)(PAGE_TABLE_POOL_ALIGNMENT - 1))
 | |
| 
 | |
| typedef struct {
 | |
|   VOID     *NextPool;
 | |
|   UINTN    Offset;
 | |
|   UINTN    FreePages;
 | |
| } PAGE_TABLE_POOL;
 | |
| 
 | |
| /**
 | |
|   Allocates one or more 4KB pages for page table.
 | |
| 
 | |
|   @param  Pages                 The number of 4 KB pages to allocate.
 | |
| 
 | |
|   @return A pointer to the allocated buffer or NULL if allocation fails.
 | |
| 
 | |
| **/
 | |
| typedef
 | |
| VOID *
 | |
| (EFIAPI *PAGE_TABLE_LIB_ALLOCATE_PAGES)(
 | |
|   IN UINTN  Pages
 | |
|   );
 | |
| 
 | |
| /**
 | |
|   This function assigns the page attributes for the memory region specified by BaseAddress and
 | |
|   Length from their current attributes to the attributes specified by Attributes.
 | |
| 
 | |
|   Caller should make sure BaseAddress and Length is at page boundary.
 | |
| 
 | |
|   Caller need guarantee the TPL <= TPL_NOTIFY, if there is split page request.
 | |
| 
 | |
|   @param  PagingContext     The paging context. NULL means get page table from current CPU context.
 | |
|   @param  BaseAddress       The physical address that is the start address of a memory region.
 | |
|   @param  Length            The size in bytes of the memory region.
 | |
|   @param  Attributes        The bit mask of attributes to set for the memory region.
 | |
|   @param  AllocatePagesFunc If page split is needed, this function is used to allocate more pages.
 | |
|                             NULL mean page split is unsupported.
 | |
| 
 | |
|   @retval RETURN_SUCCESS           The attributes were cleared for the memory region.
 | |
|   @retval RETURN_ACCESS_DENIED     The attributes for the memory resource range specified by
 | |
|                                    BaseAddress and Length cannot be modified.
 | |
|   @retval RETURN_INVALID_PARAMETER Length is zero.
 | |
|                                    Attributes specified an illegal combination of attributes that
 | |
|                                    cannot be set together.
 | |
|   @retval RETURN_OUT_OF_RESOURCES  There are not enough system resources to modify the attributes of
 | |
|                                    the memory resource range.
 | |
|   @retval RETURN_UNSUPPORTED       The processor does not support one or more bytes of the memory
 | |
|                                    resource range specified by BaseAddress and Length.
 | |
|                                    The bit mask of attributes is not support for the memory resource
 | |
|                                    range specified by BaseAddress and Length.
 | |
| **/
 | |
| RETURN_STATUS
 | |
| EFIAPI
 | |
| AssignMemoryPageAttributes (
 | |
|   IN  PAGE_TABLE_LIB_PAGING_CONTEXT  *PagingContext OPTIONAL,
 | |
|   IN  PHYSICAL_ADDRESS               BaseAddress,
 | |
|   IN  UINT64                         Length,
 | |
|   IN  UINT64                         Attributes,
 | |
|   IN  PAGE_TABLE_LIB_ALLOCATE_PAGES  AllocatePagesFunc OPTIONAL
 | |
|   );
 | |
| 
 | |
| /**
 | |
|   Initialize the Page Table lib.
 | |
| **/
 | |
| VOID
 | |
| InitializePageTableLib (
 | |
|   VOID
 | |
|   );
 | |
| 
 | |
| /**
 | |
|   This API provides a way to allocate memory for page table.
 | |
| 
 | |
|   This API can be called more once to allocate memory for page tables.
 | |
| 
 | |
|   Allocates the number of 4KB pages of type EfiRuntimeServicesData and returns a pointer to the
 | |
|   allocated buffer.  The buffer returned is aligned on a 4KB boundary.  If Pages is 0, then NULL
 | |
|   is returned.  If there is not enough memory remaining to satisfy the request, then NULL is
 | |
|   returned.
 | |
| 
 | |
|   @param  Pages                 The number of 4 KB pages to allocate.
 | |
| 
 | |
|   @return A pointer to the allocated buffer or NULL if allocation fails.
 | |
| 
 | |
| **/
 | |
| VOID *
 | |
| EFIAPI
 | |
| AllocatePageTableMemory (
 | |
|   IN UINTN  Pages
 | |
|   );
 | |
| 
 | |
| /**
 | |
|   Get paging details.
 | |
| 
 | |
|   @param  PagingContextData      The paging context.
 | |
|   @param  PageTableBase          Return PageTableBase field.
 | |
|   @param  Attributes             Return Attributes field.
 | |
| 
 | |
| **/
 | |
| VOID
 | |
| GetPagingDetails (
 | |
|   IN  PAGE_TABLE_LIB_PAGING_CONTEXT_DATA  *PagingContextData,
 | |
|   OUT UINTN                               **PageTableBase     OPTIONAL,
 | |
|   OUT UINT32                              **Attributes        OPTIONAL
 | |
|   );
 | |
| 
 | |
| #endif
 |