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/BaseMemoryLib.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 copy memory, fill memory, zero memory, and GUID functions.
    3 
    4   The Base Memory Library provides optimized implementations for common memory-based operations.
    5   These functions should be used in place of coding your own loops to do equivalent common functions.
    6   This allows optimized library implementations to help increase performance.
    7 
    8 Copyright (c) 2006 - 2018, Intel Corporation. All rights reserved.<BR>
    9 SPDX-License-Identifier: BSD-2-Clause-Patent
   10 
   11 **/
   12 
   13 #ifndef __BASE_MEMORY_LIB__
   14 #define __BASE_MEMORY_LIB__
   15 
   16 /**
   17   Copies a source buffer to a destination buffer, and returns the destination buffer.
   18 
   19   This function copies Length bytes from SourceBuffer to DestinationBuffer, and returns
   20   DestinationBuffer.  The implementation must be reentrant, and it must handle the case
   21   where SourceBuffer overlaps DestinationBuffer.
   22 
   23   If Length is greater than (MAX_ADDRESS - DestinationBuffer + 1), then ASSERT().
   24   If Length is greater than (MAX_ADDRESS - SourceBuffer + 1), then ASSERT().
   25 
   26   @param  DestinationBuffer   The pointer to the destination buffer of the memory copy.
   27   @param  SourceBuffer        The pointer to the source buffer of the memory copy.
   28   @param  Length              The number of bytes to copy from SourceBuffer to DestinationBuffer.
   29 
   30   @return DestinationBuffer.
   31 
   32 **/
   33 VOID *
   34 EFIAPI
   35 CopyMem (
   36   OUT VOID       *DestinationBuffer,
   37   IN CONST VOID  *SourceBuffer,
   38   IN UINTN       Length
   39   );
   40 
   41 /**
   42   Fills a target buffer with a byte value, and returns the target buffer.
   43 
   44   This function fills Length bytes of Buffer with Value, and returns Buffer.
   45 
   46   If Length is greater than (MAX_ADDRESS - Buffer + 1), then ASSERT().
   47 
   48   @param  Buffer    The memory to set.
   49   @param  Length    The number of bytes to set.
   50   @param  Value     The value with which to fill Length bytes of Buffer.
   51 
   52   @return Buffer.
   53 
   54 **/
   55 VOID *
   56 EFIAPI
   57 SetMem (
   58   OUT VOID  *Buffer,
   59   IN UINTN  Length,
   60   IN UINT8  Value
   61   );
   62 
   63 /**
   64   Fills a target buffer with a 16-bit value, and returns the target buffer.
   65 
   66   This function fills Length bytes of Buffer with the 16-bit value specified by
   67   Value, and returns Buffer. Value is repeated every 16-bits in for Length
   68   bytes of Buffer.
   69 
   70   If Length > 0 and Buffer is NULL, then ASSERT().
   71   If Length is greater than (MAX_ADDRESS - Buffer + 1), then ASSERT().
   72   If Buffer is not aligned on a 16-bit boundary, then ASSERT().
   73   If Length is not aligned on a 16-bit boundary, then ASSERT().
   74 
   75   @param  Buffer  The pointer to the target buffer to fill.
   76   @param  Length  The number of bytes in Buffer to fill.
   77   @param  Value   The value with which to fill Length bytes of Buffer.
   78 
   79   @return Buffer.
   80 
   81 **/
   82 VOID *
   83 EFIAPI
   84 SetMem16 (
   85   OUT VOID   *Buffer,
   86   IN UINTN   Length,
   87   IN UINT16  Value
   88   );
   89 
   90 /**
   91   Fills a target buffer with a 32-bit value, and returns the target buffer.
   92 
   93   This function fills Length bytes of Buffer with the 32-bit value specified by
   94   Value, and returns Buffer. Value is repeated every 32-bits in for Length
   95   bytes of Buffer.
   96 
   97   If Length > 0 and Buffer is NULL, then ASSERT().
   98   If Length is greater than (MAX_ADDRESS - Buffer + 1), then ASSERT().
   99   If Buffer is not aligned on a 32-bit boundary, then ASSERT().
  100   If Length is not aligned on a 32-bit boundary, then ASSERT().
  101 
  102   @param  Buffer  The pointer to the target buffer to fill.
  103   @param  Length  The number of bytes in Buffer to fill.
  104   @param  Value   The value with which to fill Length bytes of Buffer.
  105 
  106   @return Buffer.
  107 
  108 **/
  109 VOID *
  110 EFIAPI
  111 SetMem32 (
  112   OUT VOID   *Buffer,
  113   IN UINTN   Length,
  114   IN UINT32  Value
  115   );
  116 
  117 /**
  118   Fills a target buffer with a 64-bit value, and returns the target buffer.
  119 
  120   This function fills Length bytes of Buffer with the 64-bit value specified by
  121   Value, and returns Buffer. Value is repeated every 64-bits in for Length
  122   bytes of Buffer.
  123 
  124   If Length > 0 and Buffer is NULL, then ASSERT().
  125   If Length is greater than (MAX_ADDRESS - Buffer + 1), then ASSERT().
  126   If Buffer is not aligned on a 64-bit boundary, then ASSERT().
  127   If Length is not aligned on a 64-bit boundary, then ASSERT().
  128 
  129   @param  Buffer  The pointer to the target buffer to fill.
  130   @param  Length  The number of bytes in Buffer to fill.
  131   @param  Value   The value with which to fill Length bytes of Buffer.
  132 
  133   @return Buffer.
  134 
  135 **/
  136 VOID *
  137 EFIAPI
  138 SetMem64 (
  139   OUT VOID   *Buffer,
  140   IN UINTN   Length,
  141   IN UINT64  Value
  142   );
  143 
  144 /**
  145   Fills a target buffer with a value that is size UINTN, and returns the target buffer.
  146 
  147   This function fills Length bytes of Buffer with the UINTN sized value specified by
  148   Value, and returns Buffer. Value is repeated every sizeof(UINTN) bytes for Length
  149   bytes of Buffer.
  150 
  151   If Length > 0 and Buffer is NULL, then ASSERT().
  152   If Length is greater than (MAX_ADDRESS - Buffer + 1), then ASSERT().
  153   If Buffer is not aligned on a UINTN boundary, then ASSERT().
  154   If Length is not aligned on a UINTN boundary, then ASSERT().
  155 
  156   @param  Buffer  The pointer to the target buffer to fill.
  157   @param  Length  The number of bytes in Buffer to fill.
  158   @param  Value   The value with which to fill Length bytes of Buffer.
  159 
  160   @return Buffer.
  161 
  162 **/
  163 VOID *
  164 EFIAPI
  165 SetMemN (
  166   OUT VOID  *Buffer,
  167   IN UINTN  Length,
  168   IN UINTN  Value
  169   );
  170 
  171 /**
  172   Fills a target buffer with zeros, and returns the target buffer.
  173 
  174   This function fills Length bytes of Buffer with zeros, and returns Buffer.
  175 
  176   If Length > 0 and Buffer is NULL, then ASSERT().
  177   If Length is greater than (MAX_ADDRESS - Buffer + 1), then ASSERT().
  178 
  179   @param  Buffer      The pointer to the target buffer to fill with zeros.
  180   @param  Length      The number of bytes in Buffer to fill with zeros.
  181 
  182   @return Buffer.
  183 
  184 **/
  185 VOID *
  186 EFIAPI
  187 ZeroMem (
  188   OUT VOID  *Buffer,
  189   IN UINTN  Length
  190   );
  191 
  192 /**
  193   Compares the contents of two buffers.
  194 
  195   This function compares Length bytes of SourceBuffer to Length bytes of DestinationBuffer.
  196   If all Length bytes of the two buffers are identical, then 0 is returned.  Otherwise, the
  197   value returned is the first mismatched byte in SourceBuffer subtracted from the first
  198   mismatched byte in DestinationBuffer.
  199 
  200   If Length > 0 and DestinationBuffer is NULL, then ASSERT().
  201   If Length > 0 and SourceBuffer is NULL, then ASSERT().
  202   If Length is greater than (MAX_ADDRESS - DestinationBuffer + 1), then ASSERT().
  203   If Length is greater than (MAX_ADDRESS - SourceBuffer + 1), then ASSERT().
  204 
  205   @param  DestinationBuffer The pointer to the destination buffer to compare.
  206   @param  SourceBuffer      The pointer to the source buffer to compare.
  207   @param  Length            The number of bytes to compare.
  208 
  209   @return 0                 All Length bytes of the two buffers are identical.
  210   @retval Non-zero          The first mismatched byte in SourceBuffer subtracted from the first
  211                             mismatched byte in DestinationBuffer.
  212 
  213 **/
  214 INTN
  215 EFIAPI
  216 CompareMem (
  217   IN CONST VOID  *DestinationBuffer,
  218   IN CONST VOID  *SourceBuffer,
  219   IN UINTN       Length
  220   );
  221 
  222 /**
  223   Scans a target buffer for an 8-bit value, and returns a pointer to the matching 8-bit value
  224   in the target buffer.
  225 
  226   This function searches target the buffer specified by Buffer and Length from the lowest
  227   address to the highest address for an 8-bit value that matches Value.  If a match is found,
  228   then a pointer to the matching byte in the target buffer is returned.  If no match is found,
  229   then NULL is returned.  If Length is 0, then NULL is returned.
  230 
  231   If Length > 0 and Buffer is NULL, then ASSERT().
  232   If Length is greater than (MAX_ADDRESS - Buffer + 1), then ASSERT().
  233 
  234   @param  Buffer      The pointer to the target buffer to scan.
  235   @param  Length      The number of bytes in Buffer to scan.
  236   @param  Value       The value to search for in the target buffer.
  237 
  238   @return A pointer to the matching byte in the target buffer, otherwise NULL.
  239 
  240 **/
  241 VOID *
  242 EFIAPI
  243 ScanMem8 (
  244   IN CONST VOID  *Buffer,
  245   IN UINTN       Length,
  246   IN UINT8       Value
  247   );
  248 
  249 /**
  250   Scans a target buffer for a 16-bit value, and returns a pointer to the matching 16-bit value
  251   in the target buffer.
  252 
  253   This function searches target the buffer specified by Buffer and Length from the lowest
  254   address to the highest address for a 16-bit value that matches Value.  If a match is found,
  255   then a pointer to the matching byte in the target buffer is returned.  If no match is found,
  256   then NULL is returned.  If Length is 0, then NULL is returned.
  257 
  258   If Length > 0 and Buffer is NULL, then ASSERT().
  259   If Buffer is not aligned on a 16-bit boundary, then ASSERT().
  260   If Length is not aligned on a 16-bit boundary, then ASSERT().
  261   If Length is greater than (MAX_ADDRESS - Buffer + 1), then ASSERT().
  262 
  263   @param  Buffer      The pointer to the target buffer to scan.
  264   @param  Length      The number of bytes in Buffer to scan.
  265   @param  Value       The value to search for in the target buffer.
  266 
  267   @return A pointer to the matching byte in the target buffer, otherwise NULL.
  268 
  269 **/
  270 VOID *
  271 EFIAPI
  272 ScanMem16 (
  273   IN CONST VOID  *Buffer,
  274   IN UINTN       Length,
  275   IN UINT16      Value
  276   );
  277 
  278 /**
  279   Scans a target buffer for a 32-bit value, and returns a pointer to the matching 32-bit value
  280   in the target buffer.
  281 
  282   This function searches target the buffer specified by Buffer and Length from the lowest
  283   address to the highest address for a 32-bit value that matches Value.  If a match is found,
  284   then a pointer to the matching byte in the target buffer is returned.  If no match is found,
  285   then NULL is returned.  If Length is 0, then NULL is returned.
  286 
  287   If Length > 0 and Buffer is NULL, then ASSERT().
  288   If Buffer is not aligned on a 32-bit boundary, then ASSERT().
  289   If Length is not aligned on a 32-bit boundary, then ASSERT().
  290   If Length is greater than (MAX_ADDRESS - Buffer + 1), then ASSERT().
  291 
  292   @param  Buffer      The pointer to the target buffer to scan.
  293   @param  Length      The number of bytes in Buffer to scan.
  294   @param  Value       The value to search for in the target buffer.
  295 
  296   @return A pointer to the matching byte in the target buffer, otherwise NULL.
  297 
  298 **/
  299 VOID *
  300 EFIAPI
  301 ScanMem32 (
  302   IN CONST VOID  *Buffer,
  303   IN UINTN       Length,
  304   IN UINT32      Value
  305   );
  306 
  307 /**
  308   Scans a target buffer for a 64-bit value, and returns a pointer to the matching 64-bit value
  309   in the target buffer.
  310 
  311   This function searches target the buffer specified by Buffer and Length from the lowest
  312   address to the highest address for a 64-bit value that matches Value.  If a match is found,
  313   then a pointer to the matching byte in the target buffer is returned.  If no match is found,
  314   then NULL is returned.  If Length is 0, then NULL is returned.
  315 
  316   If Length > 0 and Buffer is NULL, then ASSERT().
  317   If Buffer is not aligned on a 64-bit boundary, then ASSERT().
  318   If Length is not aligned on a 64-bit boundary, then ASSERT().
  319   If Length is greater than (MAX_ADDRESS - Buffer + 1), then ASSERT().
  320 
  321   @param  Buffer      The pointer to the target buffer to scan.
  322   @param  Length      The number of bytes in Buffer to scan.
  323   @param  Value       The value to search for in the target buffer.
  324 
  325   @return A pointer to the matching byte in the target buffer, otherwise NULL.
  326 
  327 **/
  328 VOID *
  329 EFIAPI
  330 ScanMem64 (
  331   IN CONST VOID  *Buffer,
  332   IN UINTN       Length,
  333   IN UINT64      Value
  334   );
  335 
  336 /**
  337   Scans a target buffer for a UINTN sized value, and returns a pointer to the matching
  338   UINTN sized value in the target buffer.
  339 
  340   This function searches target the buffer specified by Buffer and Length from the lowest
  341   address to the highest address for a UINTN sized value that matches Value.  If a match is found,
  342   then a pointer to the matching byte in the target buffer is returned.  If no match is found,
  343   then NULL is returned.  If Length is 0, then NULL is returned.
  344 
  345   If Length > 0 and Buffer is NULL, then ASSERT().
  346   If Buffer is not aligned on a UINTN boundary, then ASSERT().
  347   If Length is not aligned on a UINTN boundary, then ASSERT().
  348   If Length is greater than (MAX_ADDRESS - Buffer + 1), then ASSERT().
  349 
  350   @param  Buffer      The pointer to the target buffer to scan.
  351   @param  Length      The number of bytes in Buffer to scan.
  352   @param  Value       The value to search for in the target buffer.
  353 
  354   @return A pointer to the matching byte in the target buffer, otherwise NULL.
  355 
  356 **/
  357 VOID *
  358 EFIAPI
  359 ScanMemN (
  360   IN CONST VOID  *Buffer,
  361   IN UINTN       Length,
  362   IN UINTN       Value
  363   );
  364 
  365 /**
  366   Copies a source GUID to a destination GUID.
  367 
  368   This function copies the contents of the 128-bit GUID specified by SourceGuid to
  369   DestinationGuid, and returns DestinationGuid.
  370 
  371   If DestinationGuid is NULL, then ASSERT().
  372   If SourceGuid is NULL, then ASSERT().
  373 
  374   @param  DestinationGuid   The pointer to the destination GUID.
  375   @param  SourceGuid        The pointer to the source GUID.
  376 
  377   @return DestinationGuid.
  378 
  379 **/
  380 GUID *
  381 EFIAPI
  382 CopyGuid (
  383   OUT GUID       *DestinationGuid,
  384   IN CONST GUID  *SourceGuid
  385   );
  386 
  387 /**
  388   Compares two GUIDs.
  389 
  390   This function compares Guid1 to Guid2.  If the GUIDs are identical then TRUE is returned.
  391   If there are any bit differences in the two GUIDs, then FALSE is returned.
  392 
  393   If Guid1 is NULL, then ASSERT().
  394   If Guid2 is NULL, then ASSERT().
  395 
  396   @param  Guid1       A pointer to a 128 bit GUID.
  397   @param  Guid2       A pointer to a 128 bit GUID.
  398 
  399   @retval TRUE        Guid1 and Guid2 are identical.
  400   @retval FALSE       Guid1 and Guid2 are not identical.
  401 
  402 **/
  403 BOOLEAN
  404 EFIAPI
  405 CompareGuid (
  406   IN CONST GUID  *Guid1,
  407   IN CONST GUID  *Guid2
  408   );
  409 
  410 /**
  411   Scans a target buffer for a GUID, and returns a pointer to the matching GUID
  412   in the target buffer.
  413 
  414   This function searches target the buffer specified by Buffer and Length from
  415   the lowest address to the highest address at 128-bit increments for the 128-bit
  416   GUID value that matches Guid.  If a match is found, then a pointer to the matching
  417   GUID in the target buffer is returned.  If no match is found, then NULL is returned.
  418   If Length is 0, then NULL is returned.
  419 
  420   If Length > 0 and Buffer is NULL, then ASSERT().
  421   If Buffer is not aligned on a 32-bit boundary, then ASSERT().
  422   If Length is not aligned on a 128-bit boundary, then ASSERT().
  423   If Length is greater than (MAX_ADDRESS - Buffer + 1), then ASSERT().
  424 
  425   @param  Buffer  The pointer to the target buffer to scan.
  426   @param  Length  The number of bytes in Buffer to scan.
  427   @param  Guid    The value to search for in the target buffer.
  428 
  429   @return A pointer to the matching Guid in the target buffer, otherwise NULL.
  430 
  431 **/
  432 VOID *
  433 EFIAPI
  434 ScanGuid (
  435   IN CONST VOID  *Buffer,
  436   IN UINTN       Length,
  437   IN CONST GUID  *Guid
  438   );
  439 
  440 /**
  441   Checks if the given GUID is a zero GUID.
  442 
  443   This function checks whether the given GUID is a zero GUID. If the GUID is
  444   identical to a zero GUID then TRUE is returned. Otherwise, FALSE is returned.
  445 
  446   If Guid is NULL, then ASSERT().
  447 
  448   @param  Guid        The pointer to a 128 bit GUID.
  449 
  450   @retval TRUE        Guid is a zero GUID.
  451   @retval FALSE       Guid is not a zero GUID.
  452 
  453 **/
  454 BOOLEAN
  455 EFIAPI
  456 IsZeroGuid (
  457   IN CONST GUID  *Guid
  458   );
  459 
  460 /**
  461   Checks if the contents of a buffer are all zeros.
  462 
  463   This function checks whether the contents of a buffer are all zeros. If the
  464   contents are all zeros, return TRUE. Otherwise, return FALSE.
  465 
  466   If Length > 0 and Buffer is NULL, then ASSERT().
  467   If Length is greater than (MAX_ADDRESS - Buffer + 1), then ASSERT().
  468 
  469   @param  Buffer      The pointer to the buffer to be checked.
  470   @param  Length      The size of the buffer (in bytes) to be checked.
  471 
  472   @retval TRUE        Contents of the buffer are all zeros.
  473   @retval FALSE       Contents of the buffer are not all zeros.
  474 
  475 **/
  476 BOOLEAN
  477 EFIAPI
  478 IsZeroBuffer (
  479   IN CONST VOID  *Buffer,
  480   IN UINTN       Length
  481   );
  482 
  483 #endif

Cache object: 699dab48fb95446e8caf26bb4d89b451


[ 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.