Move the definitions of EFI_ACPI_RUNTIME_PAGE_ALLOCATION_ALIGNMENT and DEFAULT_PAGE_ALLOCATION to DxeMain.h to make them available explicitly to all parts of DxeCore. Contributed-under: TianoCore Contribution Agreement 1.0 Signed-off-by: Ard Biesheuvel <ard.biesheuvel@linaro.org> Reviewed-by: "Yao, Jiewen" <Jiewen.Yao@intel.com> git-svn-id: https://svn.code.sf.net/p/edk2/code/trunk/edk2@17811 6f19259b-4bc3-4df7-8a09-765794883524
		
			
				
	
	
		
			155 lines
		
	
	
		
			3.7 KiB
		
	
	
	
		
			C
		
	
	
	
	
	
			
		
		
	
	
			155 lines
		
	
	
		
			3.7 KiB
		
	
	
	
		
			C
		
	
	
	
	
	
/** @file
 | 
						|
  Data structure and functions to allocate and free memory space.
 | 
						|
 | 
						|
Copyright (c) 2006 - 2015, Intel Corporation. All rights reserved.<BR>
 | 
						|
This program and the accompanying materials
 | 
						|
are licensed and made available under the terms and conditions of the BSD License
 | 
						|
which accompanies this distribution.  The full text of the license may be found at
 | 
						|
http://opensource.org/licenses/bsd-license.php
 | 
						|
 | 
						|
THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,
 | 
						|
WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.
 | 
						|
 | 
						|
**/
 | 
						|
 | 
						|
#ifndef _IMEM_H_
 | 
						|
#define _IMEM_H_
 | 
						|
 | 
						|
//
 | 
						|
// +---------------------------------------------------+
 | 
						|
// | 0..(EfiMaxMemoryType - 1)    - Normal memory type |
 | 
						|
// +---------------------------------------------------+
 | 
						|
// | EfiMaxMemoryType..0x6FFFFFFF - Ilegal             |
 | 
						|
// +---------------------------------------------------+
 | 
						|
// | 0x70000000..0x7FFFFFFF       - OEM reserved       |
 | 
						|
// +---------------------------------------------------+
 | 
						|
// | 0x80000000..0xFFFFFFFF       - OS reserved        |
 | 
						|
// +---------------------------------------------------+
 | 
						|
//
 | 
						|
#define MEMORY_TYPE_OS_RESERVED_MIN                 0x80000000
 | 
						|
#define MEMORY_TYPE_OS_RESERVED_MAX                 0xFFFFFFFF
 | 
						|
#define MEMORY_TYPE_OEM_RESERVED_MIN                0x70000000
 | 
						|
#define MEMORY_TYPE_OEM_RESERVED_MAX                0x7FFFFFFF
 | 
						|
 | 
						|
//
 | 
						|
// MEMORY_MAP_ENTRY
 | 
						|
//
 | 
						|
 | 
						|
#define MEMORY_MAP_SIGNATURE   SIGNATURE_32('m','m','a','p')
 | 
						|
typedef struct {
 | 
						|
  UINTN           Signature;
 | 
						|
  LIST_ENTRY      Link;
 | 
						|
  BOOLEAN         FromPages;
 | 
						|
 | 
						|
  EFI_MEMORY_TYPE Type;
 | 
						|
  UINT64          Start;
 | 
						|
  UINT64          End;
 | 
						|
 | 
						|
  UINT64          VirtualStart;
 | 
						|
  UINT64          Attribute;
 | 
						|
} MEMORY_MAP;
 | 
						|
 | 
						|
//
 | 
						|
// Internal prototypes
 | 
						|
//
 | 
						|
 | 
						|
 | 
						|
/**
 | 
						|
  Internal function.  Used by the pool functions to allocate pages
 | 
						|
  to back pool allocation requests.
 | 
						|
 | 
						|
  @param  PoolType               The type of memory for the new pool pages
 | 
						|
  @param  NumberOfPages          No of pages to allocate
 | 
						|
  @param  Alignment              Bits to align.
 | 
						|
 | 
						|
  @return The allocated memory, or NULL
 | 
						|
 | 
						|
**/
 | 
						|
VOID *
 | 
						|
CoreAllocatePoolPages (
 | 
						|
  IN EFI_MEMORY_TYPE    PoolType,
 | 
						|
  IN UINTN              NumberOfPages,
 | 
						|
  IN UINTN              Alignment
 | 
						|
  );
 | 
						|
 | 
						|
 | 
						|
 | 
						|
/**
 | 
						|
  Internal function.  Frees pool pages allocated via AllocatePoolPages ()
 | 
						|
 | 
						|
  @param  Memory                 The base address to free
 | 
						|
  @param  NumberOfPages          The number of pages to free
 | 
						|
 | 
						|
**/
 | 
						|
VOID
 | 
						|
CoreFreePoolPages (
 | 
						|
  IN EFI_PHYSICAL_ADDRESS   Memory,
 | 
						|
  IN UINTN                  NumberOfPages
 | 
						|
  );
 | 
						|
 | 
						|
 | 
						|
 | 
						|
/**
 | 
						|
  Internal function to allocate pool of a particular type.
 | 
						|
  Caller must have the memory lock held
 | 
						|
 | 
						|
  @param  PoolType               Type of pool to allocate
 | 
						|
  @param  Size                   The amount of pool to allocate
 | 
						|
 | 
						|
  @return The allocate pool, or NULL
 | 
						|
 | 
						|
**/
 | 
						|
VOID *
 | 
						|
CoreAllocatePoolI (
 | 
						|
  IN EFI_MEMORY_TYPE  PoolType,
 | 
						|
  IN UINTN            Size
 | 
						|
  );
 | 
						|
 | 
						|
 | 
						|
 | 
						|
/**
 | 
						|
  Internal function to free a pool entry.
 | 
						|
  Caller must have the memory lock held
 | 
						|
 | 
						|
  @param  Buffer                 The allocated pool entry to free
 | 
						|
 | 
						|
  @retval EFI_INVALID_PARAMETER  Buffer not valid
 | 
						|
  @retval EFI_SUCCESS            Buffer successfully freed.
 | 
						|
 | 
						|
**/
 | 
						|
EFI_STATUS
 | 
						|
CoreFreePoolI (
 | 
						|
  IN VOID       *Buffer
 | 
						|
  );
 | 
						|
 | 
						|
 | 
						|
 | 
						|
/**
 | 
						|
  Enter critical section by gaining lock on gMemoryLock.
 | 
						|
 | 
						|
**/
 | 
						|
VOID
 | 
						|
CoreAcquireMemoryLock (
 | 
						|
  VOID
 | 
						|
  );
 | 
						|
 | 
						|
 | 
						|
/**
 | 
						|
  Exit critical section by releasing lock on gMemoryLock.
 | 
						|
 | 
						|
**/
 | 
						|
VOID
 | 
						|
CoreReleaseMemoryLock (
 | 
						|
  VOID
 | 
						|
  );
 | 
						|
 | 
						|
 | 
						|
//
 | 
						|
// Internal Global data
 | 
						|
//
 | 
						|
 | 
						|
extern EFI_LOCK           gMemoryLock;
 | 
						|
extern LIST_ENTRY         gMemoryMap;
 | 
						|
extern LIST_ENTRY         mGcdMemorySpaceMap;
 | 
						|
#endif
 |