The Design and Implementation of the FreeBSD Operating System, Second Edition
Now available: The Design and Implementation of the FreeBSD Operating System (Second Edition)


[ source navigation ] [ diff markup ] [ identifier search ] [ freetext search ] [ file search ] [ list types ] [ track identifier ]

FreeBSD/Linux Kernel Cross Reference
sys/contrib/edk2/Include/Library/MemoryAllocationLib.h

Version: -  FREEBSD  -  FREEBSD-13-STABLE  -  FREEBSD-13-0  -  FREEBSD-12-STABLE  -  FREEBSD-12-0  -  FREEBSD-11-STABLE  -  FREEBSD-11-0  -  FREEBSD-10-STABLE  -  FREEBSD-10-0  -  FREEBSD-9-STABLE  -  FREEBSD-9-0  -  FREEBSD-8-STABLE  -  FREEBSD-8-0  -  FREEBSD-7-STABLE  -  FREEBSD-7-0  -  FREEBSD-6-STABLE  -  FREEBSD-6-0  -  FREEBSD-5-STABLE  -  FREEBSD-5-0  -  FREEBSD-4-STABLE  -  FREEBSD-3-STABLE  -  FREEBSD22  -  l41  -  OPENBSD  -  linux-2.6  -  MK84  -  PLAN9  -  xnu-8792 
SearchContext: -  none  -  3  -  10 

    1 /** @file
    2   Provides services to allocate and free memory buffers of various memory types and alignments.
    3 
    4   The Memory Allocation Library abstracts various common memory allocation operations. This library
    5   allows code to be written in a phase-independent manner because the allocation of memory in PEI, DXE,
    6   and SMM (for example) is done via a different mechanism. Using a common library interface makes it
    7   much easier to port algorithms from phase to phase.
    8 
    9 Copyright (c) 2006 - 2018, Intel Corporation. All rights reserved.<BR>
   10 SPDX-License-Identifier: BSD-2-Clause-Patent
   11 
   12 **/
   13 
   14 #ifndef __MEMORY_ALLOCATION_LIB_H__
   15 #define __MEMORY_ALLOCATION_LIB_H__
   16 
   17 /**
   18   Allocates one or more 4KB pages of type EfiBootServicesData.
   19 
   20   Allocates the number of 4KB pages of type EfiBootServicesData and returns a pointer to the
   21   allocated buffer.  The buffer returned is aligned on a 4KB boundary.  If Pages is 0, then NULL
   22   is returned.  If there is not enough memory remaining to satisfy the request, then NULL is
   23   returned.
   24 
   25   @param  Pages                 The number of 4 KB pages to allocate.
   26 
   27   @return A pointer to the allocated buffer or NULL if allocation fails.
   28 
   29 **/
   30 VOID *
   31 EFIAPI
   32 AllocatePages (
   33   IN UINTN  Pages
   34   );
   35 
   36 /**
   37   Allocates one or more 4KB pages of type EfiRuntimeServicesData.
   38 
   39   Allocates the number of 4KB pages of type EfiRuntimeServicesData and returns a pointer to the
   40   allocated buffer.  The buffer returned is aligned on a 4KB boundary.  If Pages is 0, then NULL
   41   is returned.  If there is not enough memory remaining to satisfy the request, then NULL is
   42   returned.
   43 
   44   @param  Pages                 The number of 4 KB pages to allocate.
   45 
   46   @return A pointer to the allocated buffer or NULL if allocation fails.
   47 
   48 **/
   49 VOID *
   50 EFIAPI
   51 AllocateRuntimePages (
   52   IN UINTN  Pages
   53   );
   54 
   55 /**
   56   Allocates one or more 4KB pages of type EfiReservedMemoryType.
   57 
   58   Allocates the number of 4KB pages of type EfiReservedMemoryType and returns a pointer to the
   59   allocated buffer.  The buffer returned is aligned on a 4KB boundary.  If Pages is 0, then NULL
   60   is returned.  If there is not enough memory remaining to satisfy the request, then NULL is
   61   returned.
   62 
   63   @param  Pages                 The number of 4 KB pages to allocate.
   64 
   65   @return A pointer to the allocated buffer or NULL if allocation fails.
   66 
   67 **/
   68 VOID *
   69 EFIAPI
   70 AllocateReservedPages (
   71   IN UINTN  Pages
   72   );
   73 
   74 /**
   75   Frees one or more 4KB pages that were previously allocated with one of the page allocation
   76   functions in the Memory Allocation Library.
   77 
   78   Frees the number of 4KB pages specified by Pages from the buffer specified by Buffer.  Buffer
   79   must have been allocated on a previous call to the page allocation services of the Memory
   80   Allocation Library.  If it is not possible to free allocated pages, then this function will
   81   perform no actions.
   82 
   83   If Buffer was not allocated with a page allocation function in the Memory Allocation Library,
   84   then ASSERT().
   85   If Pages is zero, then ASSERT().
   86 
   87   @param  Buffer                Pointer to the buffer of pages to free.
   88   @param  Pages                 The number of 4 KB pages to free.
   89 
   90 **/
   91 VOID
   92 EFIAPI
   93 FreePages (
   94   IN VOID   *Buffer,
   95   IN UINTN  Pages
   96   );
   97 
   98 /**
   99   Allocates one or more 4KB pages of type EfiBootServicesData at a specified alignment.
  100 
  101   Allocates the number of 4KB pages specified by Pages of type EfiBootServicesData with an
  102   alignment specified by Alignment.  The allocated buffer is returned.  If Pages is 0, then NULL is
  103   returned.  If there is not enough memory at the specified alignment remaining to satisfy the
  104   request, then NULL is returned.
  105 
  106   If Alignment is not a power of two and Alignment is not zero, then ASSERT().
  107   If Pages plus EFI_SIZE_TO_PAGES (Alignment) overflows, then ASSERT().
  108 
  109   @param  Pages                 The number of 4 KB pages to allocate.
  110   @param  Alignment             The requested alignment of the allocation.  Must be a power of two.
  111                                 If Alignment is zero, then byte alignment is used.
  112 
  113   @return A pointer to the allocated buffer or NULL if allocation fails.
  114 
  115 **/
  116 VOID *
  117 EFIAPI
  118 AllocateAlignedPages (
  119   IN UINTN  Pages,
  120   IN UINTN  Alignment
  121   );
  122 
  123 /**
  124   Allocates one or more 4KB pages of type EfiRuntimeServicesData at a specified alignment.
  125 
  126   Allocates the number of 4KB pages specified by Pages of type EfiRuntimeServicesData with an
  127   alignment specified by Alignment.  The allocated buffer is returned.  If Pages is 0, then NULL is
  128   returned.  If there is not enough memory at the specified alignment remaining to satisfy the
  129   request, then NULL is returned.
  130 
  131   If Alignment is not a power of two and Alignment is not zero, then ASSERT().
  132   If Pages plus EFI_SIZE_TO_PAGES (Alignment) overflows, then ASSERT().
  133 
  134   @param  Pages                 The number of 4 KB pages to allocate.
  135   @param  Alignment             The requested alignment of the allocation.  Must be a power of two.
  136                                 If Alignment is zero, then byte alignment is used.
  137 
  138   @return A pointer to the allocated buffer or NULL if allocation fails.
  139 
  140 **/
  141 VOID *
  142 EFIAPI
  143 AllocateAlignedRuntimePages (
  144   IN UINTN  Pages,
  145   IN UINTN  Alignment
  146   );
  147 
  148 /**
  149   Allocates one or more 4KB pages of type EfiReservedMemoryType at a specified alignment.
  150 
  151   Allocates the number of 4KB pages specified by Pages of type EfiReservedMemoryType with an
  152   alignment specified by Alignment.  The allocated buffer is returned.  If Pages is 0, then NULL is
  153   returned.  If there is not enough memory at the specified alignment remaining to satisfy the
  154   request, then NULL is returned.
  155 
  156   If Alignment is not a power of two and Alignment is not zero, then ASSERT().
  157   If Pages plus EFI_SIZE_TO_PAGES (Alignment) overflows, then ASSERT().
  158 
  159   @param  Pages                 The number of 4 KB pages to allocate.
  160   @param  Alignment             The requested alignment of the allocation.  Must be a power of two.
  161                                 If Alignment is zero, then byte alignment is used.
  162 
  163   @return A pointer to the allocated buffer or NULL if allocation fails.
  164 
  165 **/
  166 VOID *
  167 EFIAPI
  168 AllocateAlignedReservedPages (
  169   IN UINTN  Pages,
  170   IN UINTN  Alignment
  171   );
  172 
  173 /**
  174   Frees one or more 4KB pages that were previously allocated with one of the aligned page
  175   allocation functions in the Memory Allocation Library.
  176 
  177   Frees the number of 4KB pages specified by Pages from the buffer specified by Buffer.  Buffer
  178   must have been allocated on a previous call to the aligned page allocation services of the Memory
  179   Allocation Library.  If it is not possible to free allocated pages, then this function will
  180   perform no actions.
  181 
  182   If Buffer was not allocated with an aligned page allocation function in the Memory Allocation
  183   Library, then ASSERT().
  184   If Pages is zero, then ASSERT().
  185 
  186   @param  Buffer                Pointer to the buffer of pages to free.
  187   @param  Pages                 The number of 4 KB pages to free.
  188 
  189 **/
  190 VOID
  191 EFIAPI
  192 FreeAlignedPages (
  193   IN VOID   *Buffer,
  194   IN UINTN  Pages
  195   );
  196 
  197 /**
  198   Allocates a buffer of type EfiBootServicesData.
  199 
  200   Allocates the number bytes specified by AllocationSize of type EfiBootServicesData and returns a
  201   pointer to the allocated buffer.  If AllocationSize is 0, then a valid buffer of 0 size is
  202   returned.  If there is not enough memory remaining to satisfy the request, then NULL is returned.
  203 
  204   @param  AllocationSize        The number of bytes to allocate.
  205 
  206   @return A pointer to the allocated buffer or NULL if allocation fails.
  207 
  208 **/
  209 VOID *
  210 EFIAPI
  211 AllocatePool (
  212   IN UINTN  AllocationSize
  213   );
  214 
  215 /**
  216   Allocates a buffer of type EfiRuntimeServicesData.
  217 
  218   Allocates the number bytes specified by AllocationSize of type EfiRuntimeServicesData and returns
  219   a pointer to the allocated buffer.  If AllocationSize is 0, then a valid buffer of 0 size is
  220   returned.  If there is not enough memory remaining to satisfy the request, then NULL is returned.
  221 
  222   @param  AllocationSize        The number of bytes to allocate.
  223 
  224   @return A pointer to the allocated buffer or NULL if allocation fails.
  225 
  226 **/
  227 VOID *
  228 EFIAPI
  229 AllocateRuntimePool (
  230   IN UINTN  AllocationSize
  231   );
  232 
  233 /**
  234   Allocates a buffer of type EfiReservedMemoryType.
  235 
  236   Allocates the number bytes specified by AllocationSize of type EfiReservedMemoryType and returns
  237   a pointer to the allocated buffer.  If AllocationSize is 0, then a valid buffer of 0 size is
  238   returned.  If there is not enough memory remaining to satisfy the request, then NULL is returned.
  239 
  240   @param  AllocationSize        The number of bytes to allocate.
  241 
  242   @return A pointer to the allocated buffer or NULL if allocation fails.
  243 
  244 **/
  245 VOID *
  246 EFIAPI
  247 AllocateReservedPool (
  248   IN UINTN  AllocationSize
  249   );
  250 
  251 /**
  252   Allocates and zeros a buffer of type EfiBootServicesData.
  253 
  254   Allocates the number bytes specified by AllocationSize of type EfiBootServicesData, clears the
  255   buffer with zeros, and returns a pointer to the allocated buffer.  If AllocationSize is 0, then a
  256   valid buffer of 0 size is returned.  If there is not enough memory remaining to satisfy the
  257   request, then NULL is returned.
  258 
  259   @param  AllocationSize        The number of bytes to allocate and zero.
  260 
  261   @return A pointer to the allocated buffer or NULL if allocation fails.
  262 
  263 **/
  264 VOID *
  265 EFIAPI
  266 AllocateZeroPool (
  267   IN UINTN  AllocationSize
  268   );
  269 
  270 /**
  271   Allocates and zeros a buffer of type EfiRuntimeServicesData.
  272 
  273   Allocates the number bytes specified by AllocationSize of type EfiRuntimeServicesData, clears the
  274   buffer with zeros, and returns a pointer to the allocated buffer.  If AllocationSize is 0, then a
  275   valid buffer of 0 size is returned.  If there is not enough memory remaining to satisfy the
  276   request, then NULL is returned.
  277 
  278   @param  AllocationSize        The number of bytes to allocate and zero.
  279 
  280   @return A pointer to the allocated buffer or NULL if allocation fails.
  281 
  282 **/
  283 VOID *
  284 EFIAPI
  285 AllocateRuntimeZeroPool (
  286   IN UINTN  AllocationSize
  287   );
  288 
  289 /**
  290   Allocates and zeros a buffer of type EfiReservedMemoryType.
  291 
  292   Allocates the number bytes specified by AllocationSize of type EfiReservedMemoryType, clears the
  293   buffer with zeros, and returns a pointer to the allocated buffer.  If AllocationSize is 0, then a
  294   valid buffer of 0 size is returned.  If there is not enough memory remaining to satisfy the
  295   request, then NULL is returned.
  296 
  297   @param  AllocationSize        The number of bytes to allocate and zero.
  298 
  299   @return A pointer to the allocated buffer or NULL if allocation fails.
  300 
  301 **/
  302 VOID *
  303 EFIAPI
  304 AllocateReservedZeroPool (
  305   IN UINTN  AllocationSize
  306   );
  307 
  308 /**
  309   Copies a buffer to an allocated buffer of type EfiBootServicesData.
  310 
  311   Allocates the number bytes specified by AllocationSize of type EfiBootServicesData, copies
  312   AllocationSize bytes from Buffer to the newly allocated buffer, and returns a pointer to the
  313   allocated buffer.  If AllocationSize is 0, then a valid buffer of 0 size is returned.  If there
  314   is not enough memory remaining to satisfy the request, then NULL is returned.
  315 
  316   If Buffer is NULL, then ASSERT().
  317   If AllocationSize is greater than (MAX_ADDRESS - Buffer + 1), then ASSERT().
  318 
  319   @param  AllocationSize        The number of bytes to allocate and zero.
  320   @param  Buffer                The buffer to copy to the allocated buffer.
  321 
  322   @return A pointer to the allocated buffer or NULL if allocation fails.
  323 
  324 **/
  325 VOID *
  326 EFIAPI
  327 AllocateCopyPool (
  328   IN UINTN       AllocationSize,
  329   IN CONST VOID  *Buffer
  330   );
  331 
  332 /**
  333   Copies a buffer to an allocated buffer of type EfiRuntimeServicesData.
  334 
  335   Allocates the number bytes specified by AllocationSize of type EfiRuntimeServicesData, copies
  336   AllocationSize bytes from Buffer to the newly allocated buffer, and returns a pointer to the
  337   allocated buffer.  If AllocationSize is 0, then a valid buffer of 0 size is returned.  If there
  338   is not enough memory remaining to satisfy the request, then NULL is returned.
  339 
  340   If Buffer is NULL, then ASSERT().
  341   If AllocationSize is greater than (MAX_ADDRESS - Buffer + 1), then ASSERT().
  342 
  343   @param  AllocationSize        The number of bytes to allocate and zero.
  344   @param  Buffer                The buffer to copy to the allocated buffer.
  345 
  346   @return A pointer to the allocated buffer or NULL if allocation fails.
  347 
  348 **/
  349 VOID *
  350 EFIAPI
  351 AllocateRuntimeCopyPool (
  352   IN UINTN       AllocationSize,
  353   IN CONST VOID  *Buffer
  354   );
  355 
  356 /**
  357   Copies a buffer to an allocated buffer of type EfiReservedMemoryType.
  358 
  359   Allocates the number bytes specified by AllocationSize of type EfiReservedMemoryType, copies
  360   AllocationSize bytes from Buffer to the newly allocated buffer, and returns a pointer to the
  361   allocated buffer.  If AllocationSize is 0, then a valid buffer of 0 size is returned.  If there
  362   is not enough memory remaining to satisfy the request, then NULL is returned.
  363 
  364   If Buffer is NULL, then ASSERT().
  365   If AllocationSize is greater than (MAX_ADDRESS - Buffer + 1), then ASSERT().
  366 
  367   @param  AllocationSize        The number of bytes to allocate and zero.
  368   @param  Buffer                The buffer to copy to the allocated buffer.
  369 
  370   @return A pointer to the allocated buffer or NULL if allocation fails.
  371 
  372 **/
  373 VOID *
  374 EFIAPI
  375 AllocateReservedCopyPool (
  376   IN UINTN       AllocationSize,
  377   IN CONST VOID  *Buffer
  378   );
  379 
  380 /**
  381   Reallocates a buffer of type EfiBootServicesData.
  382 
  383   Allocates and zeros the number bytes specified by NewSize from memory of type
  384   EfiBootServicesData.  If OldBuffer is not NULL, then the smaller of OldSize and
  385   NewSize bytes are copied from OldBuffer to the newly allocated buffer, and
  386   OldBuffer is freed.  A pointer to the newly allocated buffer is returned.
  387   If NewSize is 0, then a valid buffer of 0 size is  returned.  If there is not
  388   enough memory remaining to satisfy the request, then NULL is returned.
  389 
  390   If the allocation of the new buffer is successful and the smaller of NewSize and OldSize
  391   is greater than (MAX_ADDRESS - OldBuffer + 1), then ASSERT().
  392 
  393   @param  OldSize        The size, in bytes, of OldBuffer.
  394   @param  NewSize        The size, in bytes, of the buffer to reallocate.
  395   @param  OldBuffer      The buffer to copy to the allocated buffer.  This is an optional
  396                          parameter that may be NULL.
  397 
  398   @return A pointer to the allocated buffer or NULL if allocation fails.
  399 
  400 **/
  401 VOID *
  402 EFIAPI
  403 ReallocatePool (
  404   IN UINTN  OldSize,
  405   IN UINTN  NewSize,
  406   IN VOID   *OldBuffer  OPTIONAL
  407   );
  408 
  409 /**
  410   Reallocates a buffer of type EfiRuntimeServicesData.
  411 
  412   Allocates and zeros the number bytes specified by NewSize from memory of type
  413   EfiRuntimeServicesData.  If OldBuffer is not NULL, then the smaller of OldSize and
  414   NewSize bytes are copied from OldBuffer to the newly allocated buffer, and
  415   OldBuffer is freed.  A pointer to the newly allocated buffer is returned.
  416   If NewSize is 0, then a valid buffer of 0 size is  returned.  If there is not
  417   enough memory remaining to satisfy the request, then NULL is returned.
  418 
  419   If the allocation of the new buffer is successful and the smaller of NewSize and OldSize
  420   is greater than (MAX_ADDRESS - OldBuffer + 1), then ASSERT().
  421 
  422   @param  OldSize        The size, in bytes, of OldBuffer.
  423   @param  NewSize        The size, in bytes, of the buffer to reallocate.
  424   @param  OldBuffer      The buffer to copy to the allocated buffer.  This is an optional
  425                          parameter that may be NULL.
  426 
  427   @return A pointer to the allocated buffer or NULL if allocation fails.
  428 
  429 **/
  430 VOID *
  431 EFIAPI
  432 ReallocateRuntimePool (
  433   IN UINTN  OldSize,
  434   IN UINTN  NewSize,
  435   IN VOID   *OldBuffer  OPTIONAL
  436   );
  437 
  438 /**
  439   Reallocates a buffer of type EfiReservedMemoryType.
  440 
  441   Allocates and zeros the number bytes specified by NewSize from memory of type
  442   EfiReservedMemoryType.  If OldBuffer is not NULL, then the smaller of OldSize and
  443   NewSize bytes are copied from OldBuffer to the newly allocated buffer, and
  444   OldBuffer is freed.  A pointer to the newly allocated buffer is returned.
  445   If NewSize is 0, then a valid buffer of 0 size is  returned.  If there is not
  446   enough memory remaining to satisfy the request, then NULL is returned.
  447 
  448   If the allocation of the new buffer is successful and the smaller of NewSize and OldSize
  449   is greater than (MAX_ADDRESS - OldBuffer + 1), then ASSERT().
  450 
  451   @param  OldSize        The size, in bytes, of OldBuffer.
  452   @param  NewSize        The size, in bytes, of the buffer to reallocate.
  453   @param  OldBuffer      The buffer to copy to the allocated buffer.  This is an optional
  454                          parameter that may be NULL.
  455 
  456   @return A pointer to the allocated buffer or NULL if allocation fails.
  457 
  458 **/
  459 VOID *
  460 EFIAPI
  461 ReallocateReservedPool (
  462   IN UINTN  OldSize,
  463   IN UINTN  NewSize,
  464   IN VOID   *OldBuffer  OPTIONAL
  465   );
  466 
  467 /**
  468   Frees a buffer that was previously allocated with one of the pool allocation functions in the
  469   Memory Allocation Library.
  470 
  471   Frees the buffer specified by Buffer.  Buffer must have been allocated on a previous call to the
  472   pool allocation services of the Memory Allocation Library.  If it is not possible to free pool
  473   resources, then this function will perform no actions.
  474 
  475   If Buffer was not allocated with a pool allocation function in the Memory Allocation Library,
  476   then ASSERT().
  477 
  478   @param  Buffer                Pointer to the buffer to free.
  479 
  480 **/
  481 VOID
  482 EFIAPI
  483 FreePool (
  484   IN VOID   *Buffer
  485   );
  486 
  487 #endif

Cache object: 471bc0ef508f68cab4999939a34bcbc7


[ source navigation ] [ diff markup ] [ identifier search ] [ freetext search ] [ file search ] [ list types ] [ track identifier ]


This page is part of the FreeBSD/Linux Linux Kernel Cross-Reference, and was automatically generated using a modified version of the LXR engine.