git-svn-id: https://edk2.svn.sourceforge.net/svnroot/edk2/trunk/edk2@3 6f19259b-4bc3-4df7-8a09-765794883524
		
			
				
	
	
		
			228 lines
		
	
	
		
			3.9 KiB
		
	
	
	
		
			C
		
	
	
	
	
	
			
		
		
	
	
			228 lines
		
	
	
		
			3.9 KiB
		
	
	
	
		
			C
		
	
	
	
	
	
| /*++
 | |
| 
 | |
| Copyright (c) 2006, Intel Corporation                                                         
 | |
| All rights reserved. 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.             
 | |
| 
 | |
| Module Name:
 | |
| 
 | |
|   imem.h
 | |
| 
 | |
| Abstract:
 | |
| 
 | |
|   Head file to imem.h
 | |
| 
 | |
| 
 | |
| Revision History
 | |
| 
 | |
| --*/
 | |
| 
 | |
| #ifndef _IMEM_H_
 | |
| #define _IMEM_H_
 | |
| 
 | |
| #if defined (MDE_CPU_IPF)
 | |
| //
 | |
| // For Itanium machines make the default allocations 8K aligned
 | |
| //
 | |
| #define EFI_ACPI_RUNTIME_PAGE_ALLOCATION_ALIGNMENT  (EFI_PAGE_SIZE * 2)
 | |
| #define DEFAULT_PAGE_ALLOCATION                     (EFI_PAGE_SIZE * 2)
 | |
| 
 | |
| #else
 | |
| //
 | |
| // For genric EFI machines make the default allocations 4K aligned
 | |
| //
 | |
| #define EFI_ACPI_RUNTIME_PAGE_ALLOCATION_ALIGNMENT  (EFI_PAGE_SIZE)
 | |
| #define DEFAULT_PAGE_ALLOCATION                     (EFI_PAGE_SIZE)
 | |
| 
 | |
| #endif
 | |
| 
 | |
| 
 | |
| //
 | |
| // MEMORY_MAP_ENTRY
 | |
| //
 | |
| 
 | |
| #define MEMORY_MAP_SIGNATURE   EFI_SIGNATURE_32('m','m','a','p')
 | |
| typedef struct {
 | |
|   UINTN           Signature;
 | |
|   LIST_ENTRY      Link;
 | |
|   BOOLEAN         FromPool;
 | |
| 
 | |
|   EFI_MEMORY_TYPE Type;
 | |
|   UINT64          Start;
 | |
|   UINT64          End;
 | |
| 
 | |
|   UINT64          VirtualStart;
 | |
|   UINT64          Attribute;
 | |
| } MEMORY_MAP;
 | |
| 
 | |
| //
 | |
| // Internal prototypes
 | |
| //
 | |
| 
 | |
| VOID *
 | |
| CoreAllocatePoolPages (
 | |
|   IN EFI_MEMORY_TYPE   PoolType,
 | |
|   IN UINTN             NumberOfPages,
 | |
|   IN UINTN             Alignment
 | |
|   )
 | |
| /*++
 | |
| 
 | |
| Routine Description:
 | |
| 
 | |
|   Internal function.  Used by the pool functions to allocate pages
 | |
|   to back pool allocation requests.
 | |
| 
 | |
| Arguments:
 | |
| 
 | |
|   PoolType      - The type of memory for the new pool pages
 | |
| 
 | |
|   NumberOfPages - No of pages to allocate
 | |
|   
 | |
|   Alignment     - Bits to align.
 | |
| 
 | |
| Returns:
 | |
| 
 | |
|   The allocated memory, or NULL
 | |
| 
 | |
| --*/
 | |
| ;
 | |
| 
 | |
| 
 | |
| VOID
 | |
| CoreFreePoolPages (
 | |
|   IN EFI_PHYSICAL_ADDRESS   Memory,
 | |
|   IN UINTN                  NumberOfPages
 | |
|   )
 | |
| /*++
 | |
| 
 | |
| Routine Description:
 | |
| 
 | |
|   Internal function.  Frees pool pages allocated via AllocatePoolPages ()
 | |
| 
 | |
| Arguments:
 | |
| 
 | |
|   Memory        - The base address to free
 | |
| 
 | |
|   NumberOfPages - The number of pages to free
 | |
| 
 | |
| Returns:
 | |
| 
 | |
|   None
 | |
| 
 | |
| --*/
 | |
| ;
 | |
| 
 | |
| 
 | |
| VOID *
 | |
| CoreAllocatePoolI (
 | |
|   IN EFI_MEMORY_TYPE  PoolType,
 | |
|   IN UINTN            Size
 | |
|   )
 | |
| /*++
 | |
| 
 | |
| Routine Description:
 | |
| 
 | |
|   Internal function to allocate pool of a particular type.
 | |
| 
 | |
|   Caller must have the memory lock held
 | |
| 
 | |
| 
 | |
| Arguments:
 | |
| 
 | |
|   PoolType    - Type of pool to allocate
 | |
| 
 | |
|   Size        - The amount of pool to allocate
 | |
| 
 | |
| Returns:
 | |
| 
 | |
|   The allocate pool, or NULL
 | |
| 
 | |
| --*/
 | |
| ;
 | |
| 
 | |
| 
 | |
| EFI_STATUS
 | |
| CoreFreePoolI (
 | |
|   IN VOID           *Buffer
 | |
|   )
 | |
| /*++
 | |
| 
 | |
| Routine Description:
 | |
| 
 | |
|   Internal function to free a pool entry.
 | |
| 
 | |
|   Caller must have the memory lock held
 | |
| 
 | |
| 
 | |
| Arguments:
 | |
| 
 | |
|   Buffer      - The allocated pool entry to free
 | |
| 
 | |
| Returns:
 | |
| 
 | |
|   EFI_INVALID_PARAMETER     - Buffer not valid
 | |
|   
 | |
|   EFI_SUCCESS               - Buffer successfully freed.
 | |
| 
 | |
| --*/
 | |
| ;
 | |
| 
 | |
| 
 | |
| VOID
 | |
| CoreAcquireMemoryLock (
 | |
|   VOID
 | |
|   )
 | |
| /*++
 | |
| 
 | |
| Routine Description:
 | |
| 
 | |
|   Enter critical section by gaining lock on gMemoryLock
 | |
| 
 | |
| Arguments:
 | |
| 
 | |
|   None
 | |
| 
 | |
| Returns:
 | |
| 
 | |
|   None
 | |
| 
 | |
| --*/
 | |
| ;
 | |
| 
 | |
| VOID
 | |
| CoreReleaseMemoryLock (
 | |
|   VOID
 | |
|   )
 | |
| /*++
 | |
| 
 | |
| Routine Description:
 | |
| 
 | |
|   Exit critical section by releasing lock on gMemoryLock
 | |
| 
 | |
| Arguments:
 | |
| 
 | |
|   None
 | |
| 
 | |
| Returns:
 | |
| 
 | |
|   None
 | |
| 
 | |
| --*/
 | |
| ;
 | |
| 
 | |
| 
 | |
| //
 | |
| // Internal Global data
 | |
| //
 | |
| 
 | |
| extern EFI_LOCK           gMemoryLock; 
 | |
| extern LIST_ENTRY         gMemoryMap;
 | |
| extern MEMORY_MAP         *gMemoryLastConvert;
 | |
| extern LIST_ENTRY         mGcdMemorySpaceMap;
 | |
| #endif
 |