]> git.proxmox.com Git - mirror_edk2.git/blobdiff - MdePkg/Library/PeiMemoryLib/MemLibGeneric.c
MdePkg UefiPciSegmentLibPciRootBridgeIo: Remove redundant dependency
[mirror_edk2.git] / MdePkg / Library / PeiMemoryLib / MemLibGeneric.c
index ef7874877d238dc1f00020c92bb967ffb60b872e..ed18b5758283f59bfcc2395669fc740899080fbb 100644 (file)
@@ -6,11 +6,11 @@
     PeiMemoryLib\r
     UefiMemoryLib\r
 \r
-  Copyright (c) 2006 - 2009, Intel Corporation. All rights reserved.<BR>\r
+  Copyright (c) 2006 - 2016, Intel Corporation. All rights reserved.<BR>\r
   This program and the accompanying materials\r
   are licensed and made available under the terms and conditions of the BSD License\r
   which accompanies this distribution.  The full text of the license may be found at\r
-  http://opensource.org/licenses/bsd-license.php\r
+  http://opensource.org/licenses/bsd-license.php.\r
 \r
   THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,\r
   WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.\r
 /**\r
   Fills a target buffer with a 16-bit value, and returns the target buffer.\r
 \r
-  @param  Buffer  Pointer to the target buffer to fill.\r
-  @param  Length  Count of 16-bit value to fill.\r
-  @param  Value   Value with which to fill Length bytes of Buffer.\r
+  @param  Buffer  The pointer to the target buffer to fill.\r
+  @param  Length  The count of 16-bit value to fill.\r
+  @param  Value   The value with which to fill Length bytes of Buffer.\r
 \r
-  @return Buffer\r
+  @return Buffer.\r
 \r
 **/\r
 VOID *\r
@@ -37,20 +37,20 @@ InternalMemSetMem16 (
   IN      UINT16                    Value\r
   )\r
 {\r
-  do {\r
-    ((UINT16*)Buffer)[--Length] = Value;\r
-  } while (Length != 0);\r
+  for (; Length != 0; Length--) {\r
+    ((UINT16*)Buffer)[Length - 1] = Value;\r
+  }\r
   return Buffer;\r
 }\r
 \r
 /**\r
   Fills a target buffer with a 32-bit value, and returns the target buffer.\r
 \r
-  @param  Buffer  Pointer to the target buffer to fill.\r
-  @param  Length  Count of 32-bit value to fill.\r
-  @param  Value   Value with which to fill Length bytes of Buffer.\r
+  @param  Buffer  The pointer to the target buffer to fill.\r
+  @param  Length  The count of 32-bit value to fill.\r
+  @param  Value   The value with which to fill Length bytes of Buffer.\r
 \r
-  @return Buffer\r
+  @return Buffer.\r
 \r
 **/\r
 VOID *\r
@@ -61,20 +61,20 @@ InternalMemSetMem32 (
   IN      UINT32                    Value\r
   )\r
 {\r
-  do {\r
-    ((UINT32*)Buffer)[--Length] = Value;\r
-  } while (Length != 0);\r
+  for (; Length != 0; Length--) {\r
+    ((UINT32*)Buffer)[Length - 1] = Value;\r
+  }\r
   return Buffer;\r
 }\r
 \r
 /**\r
   Fills a target buffer with a 64-bit value, and returns the target buffer.\r
 \r
-  @param  Buffer  Pointer to the target buffer to fill.\r
-  @param  Length  Count of 64-bit value to fill.\r
-  @param  Value   Value with which to fill Length bytes of Buffer.\r
+  @param  Buffer  The pointer to the target buffer to fill.\r
+  @param  Length  The count of 64-bit value to fill.\r
+  @param  Value   The value with which to fill Length bytes of Buffer.\r
 \r
-  @return Buffer\r
+  @return Buffer.\r
 \r
 **/\r
 VOID *\r
@@ -85,19 +85,19 @@ InternalMemSetMem64 (
   IN      UINT64                    Value\r
   )\r
 {\r
-  do {\r
-    ((UINT64*)Buffer)[--Length] = Value;\r
-  } while (Length != 0);\r
+  for (; Length != 0; Length--) {\r
+    ((UINT64*)Buffer)[Length - 1] = Value;\r
+  }\r
   return Buffer;\r
 }\r
 \r
 /**\r
   Set Buffer to 0 for Size bytes.\r
 \r
-  @param  Buffer Memory to set.\r
-  @param  Length Number of bytes to set\r
+  @param  Buffer The memory to set.\r
+  @param  Length The number of bytes to set\r
 \r
-  @return Buffer\r
+  @return Buffer.\r
 \r
 **/\r
 VOID *\r
@@ -113,9 +113,9 @@ InternalMemZeroMem (
 /**\r
   Compares two memory buffers of a given length.\r
 \r
-  @param  DestinationBuffer First memory buffer\r
-  @param  SourceBuffer      Second memory buffer\r
-  @param  Length            Length of DestinationBuffer and SourceBuffer memory\r
+  @param  DestinationBuffer The first memory buffer\r
+  @param  SourceBuffer      The second memory buffer\r
+  @param  Length            The length of DestinationBuffer and SourceBuffer memory\r
                             regions to compare. Must be non-zero.\r
 \r
   @return 0                 All Length bytes of the two buffers are identical.\r
@@ -143,11 +143,11 @@ InternalMemCompareMem (
   Scans a target buffer for an 8-bit value, and returns a pointer to the\r
   matching 8-bit value in the target buffer.\r
 \r
-  @param  Buffer  Pointer to the target buffer to scan.\r
-  @param  Length  Count of 8-bit value to scan. Must be non-zero.\r
-  @param  Value   Value to search for in the target buffer.\r
+  @param  Buffer  The pointer to the target buffer to scan.\r
+  @param  Length  The count of 8-bit value to scan. Must be non-zero.\r
+  @param  Value   The value to search for in the target buffer.\r
 \r
-  @return Pointer to the first occurrence or NULL if not found.\r
+  @return The pointer to the first occurrence, or NULL if not found.\r
 \r
 **/\r
 CONST VOID *\r
@@ -163,7 +163,7 @@ InternalMemScanMem8 (
   Pointer = (CONST UINT8*)Buffer;\r
   do {\r
     if (*(Pointer++) == Value) {\r
-      return Pointer;\r
+      return --Pointer;\r
     }\r
   } while (--Length != 0);\r
   return NULL;\r
@@ -173,11 +173,11 @@ InternalMemScanMem8 (
   Scans a target buffer for a 16-bit value, and returns a pointer to the\r
   matching 16-bit value in the target buffer.\r
 \r
-  @param  Buffer  Pointer to the target buffer to scan.\r
-  @param  Length  Count of 16-bit value to scan. Must be non-zero.\r
-  @param  Value   Value to search for in the target buffer.\r
+  @param  Buffer  The pointer to the target buffer to scan.\r
+  @param  Length  The count of 16-bit value to scan. Must be non-zero.\r
+  @param  Value   The value to search for in the target buffer.\r
 \r
-  @return Pointer to the first occurrence or NULL if not found.\r
+  @return The pointer to the first occurrence, or NULL if not found.\r
 \r
 **/\r
 CONST VOID *\r
@@ -193,7 +193,7 @@ InternalMemScanMem16 (
   Pointer = (CONST UINT16*)Buffer;\r
   do {\r
     if (*(Pointer++) == Value) {\r
-      return Pointer;\r
+      return --Pointer;\r
     }\r
   } while (--Length != 0);\r
   return NULL;\r
@@ -203,11 +203,11 @@ InternalMemScanMem16 (
   Scans a target buffer for a 32-bit value, and returns a pointer to the\r
   matching 32-bit value in the target buffer.\r
 \r
-  @param  Buffer  Pointer to the target buffer to scan.\r
-  @param  Length  Count of 32-bit value to scan. Must be non-zero.\r
-  @param  Value   Value to search for in the target buffer.\r
+  @param  Buffer  The pointer to the target buffer to scan.\r
+  @param  Length  The count of 32-bit value to scan. Must be non-zero.\r
+  @param  Value   The value to search for in the target buffer.\r
 \r
-  @return Pointer to the first occurrence or NULL if not found.\r
+  @return The pointer to the first occurrence, or NULL if not found.\r
 \r
 **/\r
 CONST VOID *\r
@@ -223,7 +223,7 @@ InternalMemScanMem32 (
   Pointer = (CONST UINT32*)Buffer;\r
   do {\r
     if (*(Pointer++) == Value) {\r
-      return Pointer;\r
+      return --Pointer;\r
     }\r
   } while (--Length != 0);\r
   return NULL;\r
@@ -233,11 +233,11 @@ InternalMemScanMem32 (
   Scans a target buffer for a 64-bit value, and returns a pointer to the\r
   matching 64-bit value in the target buffer.\r
 \r
-  @param  Buffer  Pointer to the target buffer to scan.\r
-  @param  Length  Count of 64-bit value to scan. Must be non-zero.\r
-  @param  Value   Value to search for in the target buffer.\r
+  @param  Buffer  The pointer to the target buffer to scan.\r
+  @param  Length  The count of 64-bit value to scan. Must be non-zero.\r
+  @param  Value   The value to search for in the target buffer.\r
 \r
-  @return Pointer to the first occurrence or NULL if not found.\r
+  @return The pointer to the first occurrence, or NULL if not found.\r
 \r
 **/\r
 CONST VOID *\r
@@ -253,8 +253,37 @@ InternalMemScanMem64 (
   Pointer = (CONST UINT64*)Buffer;\r
   do {\r
     if (*(Pointer++) == Value) {\r
-      return Pointer;\r
+      return --Pointer;\r
     }\r
   } while (--Length != 0);\r
   return NULL;\r
 }\r
+\r
+/**\r
+  Checks whether the contents of a buffer are all zeros.\r
+\r
+  @param  Buffer  The pointer to the buffer to be checked.\r
+  @param  Length  The size of the buffer (in bytes) to be checked.\r
+\r
+  @retval TRUE    Contents of the buffer are all zeros.\r
+  @retval FALSE   Contents of the buffer are not all zeros.\r
+\r
+**/\r
+BOOLEAN\r
+EFIAPI\r
+InternalMemIsZeroBuffer (\r
+  IN CONST VOID  *Buffer,\r
+  IN UINTN       Length\r
+  )\r
+{\r
+  CONST UINT8 *BufferData;\r
+  UINTN       Index;\r
+\r
+  BufferData = Buffer;\r
+  for (Index = 0; Index < Length; Index++) {\r
+    if (BufferData[Index] != 0) {\r
+      return FALSE;\r
+    }\r
+  }\r
+  return TRUE;\r
+}\r