The following patch for MemoryAttributesTable will need the memory type. And CoreUpdateProfile() can also use the memory type for check. Cc: Jiewen Yao <jiewen.yao@intel.com> Cc: Liming Gao <liming.gao@intel.com> Cc: Feng Tian <feng.tian@intel.com> Contributed-under: TianoCore Contribution Agreement 1.0 Signed-off-by: Star Zeng <star.zeng@intel.com> Reviewed-by: Jiewen Yao <jiewen.yao@intel.com>
		
			
				
	
	
		
			157 lines
		
	
	
		
			3.8 KiB
		
	
	
	
		
			C
		
	
	
	
	
	
			
		
		
	
	
			157 lines
		
	
	
		
			3.8 KiB
		
	
	
	
		
			C
		
	
	
	
	
	
/** @file
 | 
						|
  Data structure and functions to allocate and free memory space.
 | 
						|
 | 
						|
Copyright (c) 2006 - 2016, 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 - Invalid            |
 | 
						|
// +---------------------------------------------------+
 | 
						|
// | 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
 | 
						|
  @param  PoolType               Pointer to pool type
 | 
						|
 | 
						|
  @retval EFI_INVALID_PARAMETER  Buffer not valid
 | 
						|
  @retval EFI_SUCCESS            Buffer successfully freed.
 | 
						|
 | 
						|
**/
 | 
						|
EFI_STATUS
 | 
						|
CoreFreePoolI (
 | 
						|
  IN VOID               *Buffer,
 | 
						|
  OUT EFI_MEMORY_TYPE   *PoolType OPTIONAL
 | 
						|
  );
 | 
						|
 | 
						|
 | 
						|
 | 
						|
/**
 | 
						|
  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
 |