git-svn-id: https://edk2.svn.sourceforge.net/svnroot/edk2/trunk/edk2@2312 6f19259b-4bc3-4df7-8a09-765794883524
		
			
				
	
	
		
			201 lines
		
	
	
		
			8.1 KiB
		
	
	
	
		
			C
		
	
	
	
	
	
			
		
		
	
	
			201 lines
		
	
	
		
			8.1 KiB
		
	
	
	
		
			C
		
	
	
	
	
	
/** @file
 | 
						|
  Internal include file of PEI Memory Allocation Library.
 | 
						|
 | 
						|
  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:  MemoryAllocationLibInternals.h
 | 
						|
 | 
						|
**/
 | 
						|
 | 
						|
#ifndef __PEI_MEMORY_ALLOCATION_LIB_INTERNALS_H__
 | 
						|
#define __PEI_MEMORY_ALLOCATION_LIB_INTERNALS_H__
 | 
						|
 | 
						|
/**
 | 
						|
  Allocates one or more 4KB pages of a certain memory type.
 | 
						|
 | 
						|
  Allocates the number of 4KB pages of a certain memory type 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  MemoryType            The type of memory to allocate.
 | 
						|
  @param  Pages                 The number of 4 KB pages to allocate.
 | 
						|
 | 
						|
  @return A pointer to the allocated buffer or NULL if allocation fails.
 | 
						|
 | 
						|
**/
 | 
						|
VOID *
 | 
						|
InternalAllocatePages (
 | 
						|
  IN EFI_MEMORY_TYPE  MemoryType,  
 | 
						|
  IN UINTN            Pages
 | 
						|
  );
 | 
						|
 | 
						|
/**
 | 
						|
  Allocates one or more 4KB pages of a certain memory type at a specified alignment.
 | 
						|
 | 
						|
  Allocates the number of 4KB pages specified by Pages of a certain memory type with an alignment
 | 
						|
  specified by Alignment.  The allocated buffer is returned.  If Pages is 0, then NULL is returned.
 | 
						|
  If there is not enough memory at the specified alignment remaining to satisfy the request, then
 | 
						|
  NULL is returned.
 | 
						|
  If Alignment is not a power of two and Alignment is not zero, then ASSERT().
 | 
						|
 | 
						|
  @param  MemoryType            The type of memory to allocate.
 | 
						|
  @param  Pages                 The number of 4 KB pages to allocate.
 | 
						|
  @param  Alignment             The requested alignment of the allocation.  Must be a power of two.
 | 
						|
                                If Alignment is zero, then byte alignment is used.
 | 
						|
 | 
						|
  @return A pointer to the allocated buffer or NULL if allocation fails.
 | 
						|
 | 
						|
**/
 | 
						|
VOID *
 | 
						|
InternalAllocateAlignedPages (
 | 
						|
  IN EFI_MEMORY_TYPE  MemoryType,  
 | 
						|
  IN UINTN            Pages,
 | 
						|
  IN UINTN            Alignment
 | 
						|
  );
 | 
						|
 | 
						|
/**
 | 
						|
  Allocates a buffer of a certain pool type.
 | 
						|
 | 
						|
  Allocates the number bytes specified by AllocationSize of a certain pool type and returns a
 | 
						|
  pointer to the allocated buffer.  If AllocationSize is 0, then a valid buffer of 0 size is
 | 
						|
  returned.  If there is not enough memory remaining to satisfy the request, then NULL is returned.
 | 
						|
 | 
						|
  @param  MemoryType            The type of memory to allocate.
 | 
						|
  @param  AllocationSize        The number of bytes to allocate.
 | 
						|
 | 
						|
  @return A pointer to the allocated buffer or NULL if allocation fails.
 | 
						|
 | 
						|
**/
 | 
						|
VOID *
 | 
						|
InternalAllocatePool (
 | 
						|
  IN EFI_MEMORY_TYPE  MemoryType,  
 | 
						|
  IN UINTN            AllocationSize
 | 
						|
  );
 | 
						|
 | 
						|
/**
 | 
						|
  Allocates and zeros a buffer of a certian pool type.
 | 
						|
 | 
						|
  Allocates the number bytes specified by AllocationSize of a certian pool type, clears the buffer
 | 
						|
  with zeros, and returns a pointer to the allocated buffer.  If AllocationSize is 0, then a valid
 | 
						|
  buffer of 0 size is returned.  If there is not enough memory remaining to satisfy the request,
 | 
						|
  then NULL is returned.
 | 
						|
 | 
						|
  @param  PoolType              The type of memory to allocate.
 | 
						|
  @param  AllocationSize        The number of bytes to allocate and zero.
 | 
						|
 | 
						|
  @return A pointer to the allocated buffer or NULL if allocation fails.
 | 
						|
 | 
						|
**/
 | 
						|
VOID *
 | 
						|
InternalAllocateZeroPool (
 | 
						|
  IN EFI_MEMORY_TYPE  PoolType,  
 | 
						|
  IN UINTN            AllocationSize
 | 
						|
  );
 | 
						|
 | 
						|
/**
 | 
						|
  Copies a buffer to an allocated buffer of a certian pool type.
 | 
						|
 | 
						|
  Allocates the number bytes specified by AllocationSize of a certian pool type, copies
 | 
						|
  AllocationSize bytes from Buffer to the newly allocated buffer, and returns a pointer to the
 | 
						|
  allocated buffer.  If AllocationSize is 0, then a valid buffer of 0 size is returned.  If there
 | 
						|
  is not enough memory remaining to satisfy the request, then NULL is returned.
 | 
						|
  If Buffer is NULL, then ASSERT().
 | 
						|
  If AllocationSize is greater than (MAX_ADDRESS ? Buffer + 1), then ASSERT(). 
 | 
						|
 | 
						|
  @param  PoolType              The type of pool to allocate.
 | 
						|
  @param  AllocationSize        The number of bytes to allocate and zero.
 | 
						|
  @param  Buffer                The buffer to copy to the allocated buffer.
 | 
						|
 | 
						|
  @return A pointer to the allocated buffer or NULL if allocation fails.
 | 
						|
 | 
						|
**/
 | 
						|
VOID *
 | 
						|
InternalAllocateCopyPool (
 | 
						|
  IN EFI_MEMORY_TYPE  PoolType,  
 | 
						|
  IN UINTN            AllocationSize,
 | 
						|
  IN CONST VOID       *Buffer
 | 
						|
  );
 | 
						|
 | 
						|
/**
 | 
						|
  Allocates a buffer of a certain pool type at a specified alignment.
 | 
						|
 | 
						|
  Allocates the number bytes specified by AllocationSize of a certain pool type with an alignment
 | 
						|
  specified by Alignment.  The allocated buffer is returned.  If AllocationSize is 0, then a valid
 | 
						|
  buffer of 0 size is returned.  If there is not enough memory at the specified alignment remaining
 | 
						|
  to satisfy the request, then NULL is returned.
 | 
						|
  If Alignment is not a power of two and Alignment is not zero, then ASSERT().
 | 
						|
 | 
						|
  @param  PoolType              The type of pool to allocate.
 | 
						|
  @param  AllocationSize        The number of bytes to allocate.
 | 
						|
  @param  Alignment             The requested alignment of the allocation.  Must be a power of two.                            If Alignment is zero, then byte alignment is used.
 | 
						|
                                If Alignment is zero, then byte alignment is used.
 | 
						|
 | 
						|
  @return A pointer to the allocated buffer or NULL if allocation fails.
 | 
						|
 | 
						|
**/
 | 
						|
VOID *
 | 
						|
InternalAllocateAlignedPool (
 | 
						|
  IN EFI_MEMORY_TYPE  PoolType,
 | 
						|
  IN UINTN            AllocationSize,
 | 
						|
  IN UINTN            Alignment
 | 
						|
  );
 | 
						|
 | 
						|
/**
 | 
						|
  Allocates and zeros a buffer of a certain pool type at a specified alignment.
 | 
						|
 | 
						|
  Allocates the number bytes specified by AllocationSize of a certain pool type with an alignment
 | 
						|
  specified by Alignment, clears the buffer with zeros, and returns a pointer to the allocated
 | 
						|
  buffer.  If AllocationSize is 0, then a valid buffer of 0 size is returned.  If there is not
 | 
						|
  enough memory at the specified alignment remaining to satisfy the request, then NULL is returned.
 | 
						|
  If Alignment is not a power of two and Alignment is not zero, then ASSERT().
 | 
						|
 | 
						|
  @param  PoolType              The type of pool to allocate.
 | 
						|
  @param  AllocationSize        The number of bytes to allocate.
 | 
						|
  @param  Alignment             The requested alignment of the allocation.  Must be a power of two.
 | 
						|
                                If Alignment is zero, then byte alignment is used.
 | 
						|
 | 
						|
  @return A pointer to the allocated buffer or NULL if allocation fails.
 | 
						|
 | 
						|
**/
 | 
						|
VOID *
 | 
						|
InternalAllocateAlignedZeroPool (
 | 
						|
  IN EFI_MEMORY_TYPE  PoolType,
 | 
						|
  IN UINTN            AllocationSize,
 | 
						|
  IN UINTN            Alignment
 | 
						|
  );
 | 
						|
 | 
						|
/**
 | 
						|
  Copies a buffer to an allocated buffer of a certain pool type at a specified alignment.
 | 
						|
 | 
						|
  Allocates the number bytes specified by AllocationSize of a certain pool type with an alignment
 | 
						|
  specified by Alignment.  The allocated buffer is returned.  If AllocationSize is 0, then a valid
 | 
						|
  buffer of 0 size is returned.  If there is not enough memory at the specified alignment remaining
 | 
						|
  to satisfy the request, then NULL is returned.
 | 
						|
  If Alignment is not a power of two and Alignment is not zero, then ASSERT().
 | 
						|
 | 
						|
  @param  PoolType              The type of pool to allocate.
 | 
						|
  @param  AllocationSize        The number of bytes to allocate.
 | 
						|
  @param  Buffer                The buffer to copy to the allocated buffer.
 | 
						|
  @param  Alignment             The requested alignment of the allocation.  Must be a power of two.
 | 
						|
                                If Alignment is zero, then byte alignment is used.
 | 
						|
 | 
						|
  @return A pointer to the allocated buffer or NULL if allocation fails.
 | 
						|
 | 
						|
**/
 | 
						|
VOID *
 | 
						|
InternalAllocateAlignedCopyPool (
 | 
						|
  IN EFI_MEMORY_TYPE  PoolType,
 | 
						|
  IN UINTN            AllocationSize,
 | 
						|
  IN CONST VOID       *Buffer,
 | 
						|
  IN UINTN            Alignment
 | 
						|
  );
 | 
						|
 | 
						|
#endif
 |