From 24de7645e857287d096b058f7a64fb7f618c0194 Mon Sep 17 00:00:00 2001 From: bxing Date: Tue, 16 May 2006 03:26:32 +0000 Subject: [PATCH] Split wrapper functions into separate source files to reduce image code size git-svn-id: https://edk2.svn.sourceforge.net/svnroot/edk2/trunk/edk2@168 6f19259b-4bc3-4df7-8a09-765794883524 --- .../Library/BaseMemoryLib/CompareMemWrapper.c | 2 +- MdePkg/Library/BaseMemoryLib/CopyMemWrapper.c | 12 +- MdePkg/Library/BaseMemoryLib/MemLibGeneric.c | 18 +- .../{MemLibWrappers.h => MemLibInternals.h} | 6 +- .../Library/BaseMemoryLib/ScanMem16Wrapper.c | 2 +- .../Library/BaseMemoryLib/ScanMem32Wrapper.c | 2 +- .../Library/BaseMemoryLib/ScanMem64Wrapper.c | 2 +- .../Library/BaseMemoryLib/ScanMem8Wrapper.c | 2 +- .../Library/BaseMemoryLib/SetMem16Wrapper.c | 2 +- .../Library/BaseMemoryLib/SetMem32Wrapper.c | 2 +- .../Library/BaseMemoryLib/SetMem64Wrapper.c | 2 +- MdePkg/Library/BaseMemoryLib/SetMemWrapper.c | 2 +- MdePkg/Library/BaseMemoryLib/ZeroMemWrapper.c | 2 +- .../BaseMemoryLibMmx/BaseMemoryLibMmx.msa | 12 +- .../BaseMemoryLibMmx/CompareMemWrapper.c | 67 ++ .../Library/BaseMemoryLibMmx/CopyMemWrapper.c | 66 ++ .../BaseMemoryLibMmx/MemLibInternals.h | 230 +++++++ .../Library/BaseMemoryLibMmx/MemLibWrapper.c | 620 ------------------ .../BaseMemoryLibMmx/ScanMem16Wrapper.c | 66 ++ .../BaseMemoryLibMmx/ScanMem32Wrapper.c | 66 ++ .../BaseMemoryLibMmx/ScanMem64Wrapper.c | 66 ++ .../BaseMemoryLibMmx/ScanMem8Wrapper.c | 64 ++ .../BaseMemoryLibMmx/SetMem16Wrapper.c | 64 ++ .../BaseMemoryLibMmx/SetMem32Wrapper.c | 64 ++ .../BaseMemoryLibMmx/SetMem64Wrapper.c | 64 ++ .../Library/BaseMemoryLibMmx/SetMemWrapper.c | 52 ++ .../Library/BaseMemoryLibMmx/ZeroMemWrapper.c | 51 ++ .../BaseMemoryLibRepStr.msa | 24 +- .../BaseMemoryLibRepStr/CompareMemWrapper.c | 67 ++ .../BaseMemoryLibRepStr/CopyMemWrapper.c | 66 ++ .../BaseMemoryLibRepStr/MemLibInternals.h | 230 +++++++ .../BaseMemoryLibRepStr/MemLibWrapper.c | 620 ------------------ .../BaseMemoryLibRepStr/ScanMem16Wrapper.c | 66 ++ .../BaseMemoryLibRepStr/ScanMem32Wrapper.c | 66 ++ .../BaseMemoryLibRepStr/ScanMem64Wrapper.c | 66 ++ .../BaseMemoryLibRepStr/ScanMem8Wrapper.c | 64 ++ .../BaseMemoryLibRepStr/SetMem16Wrapper.c | 64 ++ .../BaseMemoryLibRepStr/SetMem32Wrapper.c | 64 ++ .../BaseMemoryLibRepStr/SetMem64Wrapper.c | 64 ++ .../BaseMemoryLibRepStr/SetMemWrapper.c | 52 ++ .../BaseMemoryLibRepStr/ZeroMemWrapper.c | 51 ++ .../BaseMemoryLibSse2/BaseMemoryLibSse2.msa | 24 +- .../BaseMemoryLibSse2/CompareMemWrapper.c | 67 ++ .../BaseMemoryLibSse2/CopyMemWrapper.c | 66 ++ .../BaseMemoryLibSse2/MemLibInternals.h | 230 +++++++ .../Library/BaseMemoryLibSse2/MemLibWrapper.c | 620 ------------------ .../BaseMemoryLibSse2/ScanMem16Wrapper.c | 66 ++ .../BaseMemoryLibSse2/ScanMem32Wrapper.c | 66 ++ .../BaseMemoryLibSse2/ScanMem64Wrapper.c | 66 ++ .../BaseMemoryLibSse2/ScanMem8Wrapper.c | 64 ++ .../BaseMemoryLibSse2/SetMem16Wrapper.c | 64 ++ .../BaseMemoryLibSse2/SetMem32Wrapper.c | 64 ++ .../BaseMemoryLibSse2/SetMem64Wrapper.c | 64 ++ .../Library/BaseMemoryLibSse2/SetMemWrapper.c | 52 ++ .../BaseMemoryLibSse2/ZeroMemWrapper.c | 51 ++ .../Library/PeiMemoryLib/CompareMemWrapper.c | 67 ++ MdePkg/Library/PeiMemoryLib/CopyMemWrapper.c | 66 ++ MdePkg/Library/PeiMemoryLib/MemLibGeneric.c | 18 +- MdePkg/Library/PeiMemoryLib/MemLibInternals.h | 230 +++++++ MdePkg/Library/PeiMemoryLib/MemLibWrapper.c | 620 ------------------ MdePkg/Library/PeiMemoryLib/PeiMemoryLib.msa | 12 +- .../Library/PeiMemoryLib/ScanMem16Wrapper.c | 66 ++ .../Library/PeiMemoryLib/ScanMem32Wrapper.c | 66 ++ .../Library/PeiMemoryLib/ScanMem64Wrapper.c | 66 ++ MdePkg/Library/PeiMemoryLib/ScanMem8Wrapper.c | 64 ++ MdePkg/Library/PeiMemoryLib/SetMem16Wrapper.c | 64 ++ MdePkg/Library/PeiMemoryLib/SetMem32Wrapper.c | 64 ++ MdePkg/Library/PeiMemoryLib/SetMem64Wrapper.c | 64 ++ MdePkg/Library/PeiMemoryLib/SetMemWrapper.c | 52 ++ MdePkg/Library/PeiMemoryLib/ZeroMemWrapper.c | 51 ++ .../Library/UefiMemoryLib/CompareMemWrapper.c | 67 ++ MdePkg/Library/UefiMemoryLib/CopyMemWrapper.c | 66 ++ MdePkg/Library/UefiMemoryLib/MemLibGeneric.c | 18 +- .../Library/UefiMemoryLib/MemLibInternals.h | 230 +++++++ MdePkg/Library/UefiMemoryLib/MemLibWrapper.c | 620 ------------------ .../Library/UefiMemoryLib/ScanMem16Wrapper.c | 66 ++ .../Library/UefiMemoryLib/ScanMem32Wrapper.c | 66 ++ .../Library/UefiMemoryLib/ScanMem64Wrapper.c | 66 ++ .../Library/UefiMemoryLib/ScanMem8Wrapper.c | 64 ++ .../Library/UefiMemoryLib/SetMem16Wrapper.c | 64 ++ .../Library/UefiMemoryLib/SetMem32Wrapper.c | 64 ++ .../Library/UefiMemoryLib/SetMem64Wrapper.c | 64 ++ MdePkg/Library/UefiMemoryLib/SetMemWrapper.c | 52 ++ .../Library/UefiMemoryLib/UefiMemoryLib.msa | 12 +- MdePkg/Library/UefiMemoryLib/ZeroMemWrapper.c | 51 ++ 85 files changed, 4702 insertions(+), 3174 deletions(-) rename MdePkg/Library/BaseMemoryLib/{MemLibWrappers.h => MemLibInternals.h} (94%) create mode 100644 MdePkg/Library/BaseMemoryLibMmx/CompareMemWrapper.c create mode 100644 MdePkg/Library/BaseMemoryLibMmx/CopyMemWrapper.c create mode 100644 MdePkg/Library/BaseMemoryLibMmx/MemLibInternals.h delete mode 100644 MdePkg/Library/BaseMemoryLibMmx/MemLibWrapper.c create mode 100644 MdePkg/Library/BaseMemoryLibMmx/ScanMem16Wrapper.c create mode 100644 MdePkg/Library/BaseMemoryLibMmx/ScanMem32Wrapper.c create mode 100644 MdePkg/Library/BaseMemoryLibMmx/ScanMem64Wrapper.c create mode 100644 MdePkg/Library/BaseMemoryLibMmx/ScanMem8Wrapper.c create mode 100644 MdePkg/Library/BaseMemoryLibMmx/SetMem16Wrapper.c create mode 100644 MdePkg/Library/BaseMemoryLibMmx/SetMem32Wrapper.c create mode 100644 MdePkg/Library/BaseMemoryLibMmx/SetMem64Wrapper.c create mode 100644 MdePkg/Library/BaseMemoryLibMmx/SetMemWrapper.c create mode 100644 MdePkg/Library/BaseMemoryLibMmx/ZeroMemWrapper.c create mode 100644 MdePkg/Library/BaseMemoryLibRepStr/CompareMemWrapper.c create mode 100644 MdePkg/Library/BaseMemoryLibRepStr/CopyMemWrapper.c create mode 100644 MdePkg/Library/BaseMemoryLibRepStr/MemLibInternals.h delete mode 100644 MdePkg/Library/BaseMemoryLibRepStr/MemLibWrapper.c create mode 100644 MdePkg/Library/BaseMemoryLibRepStr/ScanMem16Wrapper.c create mode 100644 MdePkg/Library/BaseMemoryLibRepStr/ScanMem32Wrapper.c create mode 100644 MdePkg/Library/BaseMemoryLibRepStr/ScanMem64Wrapper.c create mode 100644 MdePkg/Library/BaseMemoryLibRepStr/ScanMem8Wrapper.c create mode 100644 MdePkg/Library/BaseMemoryLibRepStr/SetMem16Wrapper.c create mode 100644 MdePkg/Library/BaseMemoryLibRepStr/SetMem32Wrapper.c create mode 100644 MdePkg/Library/BaseMemoryLibRepStr/SetMem64Wrapper.c create mode 100644 MdePkg/Library/BaseMemoryLibRepStr/SetMemWrapper.c create mode 100644 MdePkg/Library/BaseMemoryLibRepStr/ZeroMemWrapper.c create mode 100644 MdePkg/Library/BaseMemoryLibSse2/CompareMemWrapper.c create mode 100644 MdePkg/Library/BaseMemoryLibSse2/CopyMemWrapper.c create mode 100644 MdePkg/Library/BaseMemoryLibSse2/MemLibInternals.h delete mode 100644 MdePkg/Library/BaseMemoryLibSse2/MemLibWrapper.c create mode 100644 MdePkg/Library/BaseMemoryLibSse2/ScanMem16Wrapper.c create mode 100644 MdePkg/Library/BaseMemoryLibSse2/ScanMem32Wrapper.c create mode 100644 MdePkg/Library/BaseMemoryLibSse2/ScanMem64Wrapper.c create mode 100644 MdePkg/Library/BaseMemoryLibSse2/ScanMem8Wrapper.c create mode 100644 MdePkg/Library/BaseMemoryLibSse2/SetMem16Wrapper.c create mode 100644 MdePkg/Library/BaseMemoryLibSse2/SetMem32Wrapper.c create mode 100644 MdePkg/Library/BaseMemoryLibSse2/SetMem64Wrapper.c create mode 100644 MdePkg/Library/BaseMemoryLibSse2/SetMemWrapper.c create mode 100644 MdePkg/Library/BaseMemoryLibSse2/ZeroMemWrapper.c create mode 100644 MdePkg/Library/PeiMemoryLib/CompareMemWrapper.c create mode 100644 MdePkg/Library/PeiMemoryLib/CopyMemWrapper.c create mode 100644 MdePkg/Library/PeiMemoryLib/MemLibInternals.h delete mode 100644 MdePkg/Library/PeiMemoryLib/MemLibWrapper.c create mode 100644 MdePkg/Library/PeiMemoryLib/ScanMem16Wrapper.c create mode 100644 MdePkg/Library/PeiMemoryLib/ScanMem32Wrapper.c create mode 100644 MdePkg/Library/PeiMemoryLib/ScanMem64Wrapper.c create mode 100644 MdePkg/Library/PeiMemoryLib/ScanMem8Wrapper.c create mode 100644 MdePkg/Library/PeiMemoryLib/SetMem16Wrapper.c create mode 100644 MdePkg/Library/PeiMemoryLib/SetMem32Wrapper.c create mode 100644 MdePkg/Library/PeiMemoryLib/SetMem64Wrapper.c create mode 100644 MdePkg/Library/PeiMemoryLib/SetMemWrapper.c create mode 100644 MdePkg/Library/PeiMemoryLib/ZeroMemWrapper.c create mode 100644 MdePkg/Library/UefiMemoryLib/CompareMemWrapper.c create mode 100644 MdePkg/Library/UefiMemoryLib/CopyMemWrapper.c create mode 100644 MdePkg/Library/UefiMemoryLib/MemLibInternals.h delete mode 100644 MdePkg/Library/UefiMemoryLib/MemLibWrapper.c create mode 100644 MdePkg/Library/UefiMemoryLib/ScanMem16Wrapper.c create mode 100644 MdePkg/Library/UefiMemoryLib/ScanMem32Wrapper.c create mode 100644 MdePkg/Library/UefiMemoryLib/ScanMem64Wrapper.c create mode 100644 MdePkg/Library/UefiMemoryLib/ScanMem8Wrapper.c create mode 100644 MdePkg/Library/UefiMemoryLib/SetMem16Wrapper.c create mode 100644 MdePkg/Library/UefiMemoryLib/SetMem32Wrapper.c create mode 100644 MdePkg/Library/UefiMemoryLib/SetMem64Wrapper.c create mode 100644 MdePkg/Library/UefiMemoryLib/SetMemWrapper.c create mode 100644 MdePkg/Library/UefiMemoryLib/ZeroMemWrapper.c diff --git a/MdePkg/Library/BaseMemoryLib/CompareMemWrapper.c b/MdePkg/Library/BaseMemoryLib/CompareMemWrapper.c index 4b2e1ac4b4..c8199d8dc3 100644 --- a/MdePkg/Library/BaseMemoryLib/CompareMemWrapper.c +++ b/MdePkg/Library/BaseMemoryLib/CompareMemWrapper.c @@ -23,7 +23,7 @@ **/ -#include "MemLibWrappers.h" +#include "MemLibInternals.h" /** Compares two memory buffers of a given length. diff --git a/MdePkg/Library/BaseMemoryLib/CopyMemWrapper.c b/MdePkg/Library/BaseMemoryLib/CopyMemWrapper.c index 155877fdde..5ca62f5047 100644 --- a/MdePkg/Library/BaseMemoryLib/CopyMemWrapper.c +++ b/MdePkg/Library/BaseMemoryLib/CopyMemWrapper.c @@ -23,7 +23,7 @@ **/ -#include "MemLibWrappers.h" +#include "MemLibInternals.h" /** Copy Length bytes from Source to Destination. @@ -51,8 +51,14 @@ CopyMem ( IN UINTN Length ) { - ASSERT (Length <= MAX_ADDRESS - (UINTN)Destination + 1); - ASSERT (Length <= MAX_ADDRESS - (UINTN)Source + 1); + ASSERT ( + Destination == NULL || + Length <= MAX_ADDRESS - (UINTN)Destination + 1 + ); + ASSERT ( + Source == NULL || + Length <= MAX_ADDRESS - (UINTN)Source + 1 + ); if (Destination == Source || Length == 0) { return Destination; } diff --git a/MdePkg/Library/BaseMemoryLib/MemLibGeneric.c b/MdePkg/Library/BaseMemoryLib/MemLibGeneric.c index ef9f358a79..bda1f4992f 100644 --- a/MdePkg/Library/BaseMemoryLib/MemLibGeneric.c +++ b/MdePkg/Library/BaseMemoryLib/MemLibGeneric.c @@ -20,23 +20,7 @@ **/ -/** - Set Buffer to Value for Size bytes. - - @param Buffer Memory to set. - @param Size Number of bytes to set - @param Value Value of the set operation. - - @return Buffer - -**/ -VOID * -EFIAPI -InternalMemSetMem ( - OUT VOID *Buffer, - IN UINTN Length, - IN UINT8 Value - ); +#include "MemLibInternals.h" /** Fills a target buffer with a 16-bit value, and returns the target buffer. diff --git a/MdePkg/Library/BaseMemoryLib/MemLibWrappers.h b/MdePkg/Library/BaseMemoryLib/MemLibInternals.h similarity index 94% rename from MdePkg/Library/BaseMemoryLib/MemLibWrappers.h rename to MdePkg/Library/BaseMemoryLib/MemLibInternals.h index 927d593f9f..ca7311a407 100644 --- a/MdePkg/Library/BaseMemoryLib/MemLibWrappers.h +++ b/MdePkg/Library/BaseMemoryLib/MemLibInternals.h @@ -10,7 +10,7 @@ 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: MemLibWrappers.h + Module Name: MemLibInternals.h The following BaseMemoryLib instances share the same version of this file: @@ -23,8 +23,8 @@ **/ -#ifndef __MEM_LIB_WRAPPERS__ -#define __MEM_LIB_WRAPPERS__ +#ifndef __MEM_LIB_INTERNALS__ +#define __MEM_LIB_INTERNALS__ /** Copy Length bytes from Source to Destination. diff --git a/MdePkg/Library/BaseMemoryLib/ScanMem16Wrapper.c b/MdePkg/Library/BaseMemoryLib/ScanMem16Wrapper.c index d1e445f7cd..a17705db1d 100644 --- a/MdePkg/Library/BaseMemoryLib/ScanMem16Wrapper.c +++ b/MdePkg/Library/BaseMemoryLib/ScanMem16Wrapper.c @@ -23,7 +23,7 @@ **/ -#include "MemLibWrappers.h" +#include "MemLibInternals.h" /** Scans a target buffer for a 16-bit value, and returns a pointer to the diff --git a/MdePkg/Library/BaseMemoryLib/ScanMem32Wrapper.c b/MdePkg/Library/BaseMemoryLib/ScanMem32Wrapper.c index d860d60c4a..67eb84d8ef 100644 --- a/MdePkg/Library/BaseMemoryLib/ScanMem32Wrapper.c +++ b/MdePkg/Library/BaseMemoryLib/ScanMem32Wrapper.c @@ -23,7 +23,7 @@ **/ -#include "MemLibWrappers.h" +#include "MemLibInternals.h" /** Scans a target buffer for a 32-bit value, and returns a pointer to the diff --git a/MdePkg/Library/BaseMemoryLib/ScanMem64Wrapper.c b/MdePkg/Library/BaseMemoryLib/ScanMem64Wrapper.c index 67981d13c0..c5f0762ebe 100644 --- a/MdePkg/Library/BaseMemoryLib/ScanMem64Wrapper.c +++ b/MdePkg/Library/BaseMemoryLib/ScanMem64Wrapper.c @@ -23,7 +23,7 @@ **/ -#include "MemLibWrappers.h" +#include "MemLibInternals.h" /** Scans a target buffer for a 64-bit value, and returns a pointer to the diff --git a/MdePkg/Library/BaseMemoryLib/ScanMem8Wrapper.c b/MdePkg/Library/BaseMemoryLib/ScanMem8Wrapper.c index e7471a5a87..9b817b1b0e 100644 --- a/MdePkg/Library/BaseMemoryLib/ScanMem8Wrapper.c +++ b/MdePkg/Library/BaseMemoryLib/ScanMem8Wrapper.c @@ -23,7 +23,7 @@ **/ -#include "MemLibWrappers.h" +#include "MemLibInternals.h" /** Scans a target buffer for an 8-bit value, and returns a pointer to the diff --git a/MdePkg/Library/BaseMemoryLib/SetMem16Wrapper.c b/MdePkg/Library/BaseMemoryLib/SetMem16Wrapper.c index 1c72644d82..827e6ecf67 100644 --- a/MdePkg/Library/BaseMemoryLib/SetMem16Wrapper.c +++ b/MdePkg/Library/BaseMemoryLib/SetMem16Wrapper.c @@ -23,7 +23,7 @@ **/ -#include "MemLibWrappers.h" +#include "MemLibInternals.h" /** Fills a target buffer with a 16-bit value, and returns the target buffer. diff --git a/MdePkg/Library/BaseMemoryLib/SetMem32Wrapper.c b/MdePkg/Library/BaseMemoryLib/SetMem32Wrapper.c index 7217b6ef9b..4b9d2413eb 100644 --- a/MdePkg/Library/BaseMemoryLib/SetMem32Wrapper.c +++ b/MdePkg/Library/BaseMemoryLib/SetMem32Wrapper.c @@ -23,7 +23,7 @@ **/ -#include "MemLibWrappers.h" +#include "MemLibInternals.h" /** Fills a target buffer with a 32-bit value, and returns the target buffer. diff --git a/MdePkg/Library/BaseMemoryLib/SetMem64Wrapper.c b/MdePkg/Library/BaseMemoryLib/SetMem64Wrapper.c index 846d1c2c33..dbf3b62782 100644 --- a/MdePkg/Library/BaseMemoryLib/SetMem64Wrapper.c +++ b/MdePkg/Library/BaseMemoryLib/SetMem64Wrapper.c @@ -23,7 +23,7 @@ **/ -#include "MemLibWrappers.h" +#include "MemLibInternals.h" /** Fills a target buffer with a 64-bit value, and returns the target buffer. diff --git a/MdePkg/Library/BaseMemoryLib/SetMemWrapper.c b/MdePkg/Library/BaseMemoryLib/SetMemWrapper.c index 255b84d836..294a27a753 100644 --- a/MdePkg/Library/BaseMemoryLib/SetMemWrapper.c +++ b/MdePkg/Library/BaseMemoryLib/SetMemWrapper.c @@ -23,7 +23,7 @@ **/ -#include "MemLibWrappers.h" +#include "MemLibInternals.h" /** Set Buffer to Value for Size bytes. diff --git a/MdePkg/Library/BaseMemoryLib/ZeroMemWrapper.c b/MdePkg/Library/BaseMemoryLib/ZeroMemWrapper.c index 316b21b856..d7d7919ba2 100644 --- a/MdePkg/Library/BaseMemoryLib/ZeroMemWrapper.c +++ b/MdePkg/Library/BaseMemoryLib/ZeroMemWrapper.c @@ -23,7 +23,7 @@ **/ -#include "MemLibWrappers.h" +#include "MemLibInternals.h" /** Set Buffer to 0 for Size bytes. diff --git a/MdePkg/Library/BaseMemoryLibMmx/BaseMemoryLibMmx.msa b/MdePkg/Library/BaseMemoryLibMmx/BaseMemoryLibMmx.msa index 552c019cdf..161f8e351a 100644 --- a/MdePkg/Library/BaseMemoryLibMmx/BaseMemoryLibMmx.msa +++ b/MdePkg/Library/BaseMemoryLibMmx/BaseMemoryLibMmx.msa @@ -38,7 +38,17 @@ WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED. MemLibGuid.c - MemLibWrapper.c + CopyMemWrapper.c + SetMemWrapper.c + SetMem16Wrapper.c + SetMem32Wrapper.c + SetMem64Wrapper.c + CompareMemWrapper.c + ZeroMemWrapper.c + ScanMem8Wrapper.c + ScanMem16Wrapper.c + ScanMem32Wrapper.c + ScanMem64Wrapper.c Ia32/CopyMem.asm Ia32/SetMem.asm Ia32/ZeroMem.asm diff --git a/MdePkg/Library/BaseMemoryLibMmx/CompareMemWrapper.c b/MdePkg/Library/BaseMemoryLibMmx/CompareMemWrapper.c new file mode 100644 index 0000000000..c8199d8dc3 --- /dev/null +++ b/MdePkg/Library/BaseMemoryLibMmx/CompareMemWrapper.c @@ -0,0 +1,67 @@ +/** @file + CompareMem() implementation. + + 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: CompareMemWrapper.c + + The following BaseMemoryLib instances share the same version of this file: + + BaseMemoryLib + BaseMemoryLibMmx + BaseMemoryLibSse2 + BaseMemoryLibRepStr + PeiMemoryLib + UefiMemoryLib + +**/ + +#include "MemLibInternals.h" + +/** + Compares two memory buffers of a given length. + + This function compares Length bytes of SourceBuffer to Length bytes of + DestinationBuffer. If all Length bytes of the two buffers are identical, then + 0 is returned. Otherwise, the value returned is the first mismatched byte in + SourceBuffer subtracted from the first mismatched byte in DestinationBuffer. + + If DestinationBuffer is NULL and Length > 0, then ASSERT(). + If SourceBuffer is NULL and Length > 0, then ASSERT(). + If Length is greater than (MAX_ADDRESS - DestinationBuffer + 1), then + ASSERT(). + If Length is greater than (MAX_ADDRESS - SourceBuffer + 1), then ASSERT(). + + @param DestinationBuffer First memory buffer + @param SourceBuffer Second memory buffer + @param Length Length of DestinationBuffer and SourceBuffer memory + regions to compare + + @retval 0 if DestinationBuffer == SourceBuffer + @retval Non-zero if DestinationBuffer != SourceBuffer + +**/ +INTN +EFIAPI +CompareMem ( + IN CONST VOID *DestinationBuffer, + IN CONST VOID *SourceBuffer, + IN UINTN Length + ) +{ + ASSERT (DestinationBuffer != NULL); + ASSERT (SourceBuffer != NULL); + ASSERT (Length <= MAX_ADDRESS - (UINTN)DestinationBuffer + 1); + ASSERT (Length <= MAX_ADDRESS - (UINTN)SourceBuffer + 1); + if (Length == 0) { + return 0; + } + return InternalMemCompareMem (DestinationBuffer, SourceBuffer, Length); +} diff --git a/MdePkg/Library/BaseMemoryLibMmx/CopyMemWrapper.c b/MdePkg/Library/BaseMemoryLibMmx/CopyMemWrapper.c new file mode 100644 index 0000000000..5ca62f5047 --- /dev/null +++ b/MdePkg/Library/BaseMemoryLibMmx/CopyMemWrapper.c @@ -0,0 +1,66 @@ +/** @file + CopyMem() implementation. + + 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: CopyMemWrapper.c + + The following BaseMemoryLib instances share the same version of this file: + + BaseMemoryLib + BaseMemoryLibMmx + BaseMemoryLibSse2 + BaseMemoryLibRepStr + PeiMemoryLib + UefiMemoryLib + +**/ + +#include "MemLibInternals.h" + +/** + Copy Length bytes from Source to Destination. + + This function copies Length bytes from SourceBuffer to DestinationBuffer, and + returns DestinationBuffer. The implementation must be reentrant, and it must + handle the case where SourceBuffer overlaps DestinationBuffer. + + If Length is greater than (MAX_ADDRESS - DestinationBuffer + 1), then + ASSERT(). + If Length is greater than (MAX_ADDRESS - SourceBuffer + 1), then ASSERT(). + + @param Destination Target of copy + @param Source Place to copy from + @param Length Number of bytes to copy + + @return Destination + +**/ +VOID * +EFIAPI +CopyMem ( + OUT VOID *Destination, + IN CONST VOID *Source, + IN UINTN Length + ) +{ + ASSERT ( + Destination == NULL || + Length <= MAX_ADDRESS - (UINTN)Destination + 1 + ); + ASSERT ( + Source == NULL || + Length <= MAX_ADDRESS - (UINTN)Source + 1 + ); + if (Destination == Source || Length == 0) { + return Destination; + } + return InternalMemCopyMem (Destination, Source, Length); +} diff --git a/MdePkg/Library/BaseMemoryLibMmx/MemLibInternals.h b/MdePkg/Library/BaseMemoryLibMmx/MemLibInternals.h new file mode 100644 index 0000000000..ca7311a407 --- /dev/null +++ b/MdePkg/Library/BaseMemoryLibMmx/MemLibInternals.h @@ -0,0 +1,230 @@ +/** @file + Declaration of internal functions for Base Memory 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: MemLibInternals.h + + The following BaseMemoryLib instances share the same version of this file: + + BaseMemoryLib + BaseMemoryLibMmx + BaseMemoryLibSse2 + BaseMemoryLibRepStr + PeiMemoryLib + UefiMemoryLib + +**/ + +#ifndef __MEM_LIB_INTERNALS__ +#define __MEM_LIB_INTERNALS__ + +/** + Copy Length bytes from Source to Destination. + + @param Destination Target of copy + @param Source Place to copy from + @param Length Number of bytes to copy + + @return Destination + +**/ +VOID * +EFIAPI +InternalMemCopyMem ( + OUT VOID *DestinationBuffer, + IN CONST VOID *SourceBuffer, + IN UINTN Length + ); + +/** + Set Buffer to Value for Size bytes. + + @param Buffer Memory to set. + @param Size Number of bytes to set + @param Value Value of the set operation. + + @return Buffer + +**/ +VOID * +EFIAPI +InternalMemSetMem ( + OUT VOID *Buffer, + IN UINTN Length, + IN UINT8 Value + ); + +/** + Fills a target buffer with a 16-bit value, and returns the target buffer. + + @param Buffer Pointer to the target buffer to fill. + @param Length Number of bytes in Buffer to fill. + @param Value Value with which to fill Length bytes of Buffer. + + @return Buffer + +**/ +VOID * +EFIAPI +InternalMemSetMem16 ( + OUT VOID *Buffer, + IN UINTN Length, + IN UINT16 Value + ); + +/** + Fills a target buffer with a 32-bit value, and returns the target buffer. + + @param Buffer Pointer to the target buffer to fill. + @param Length Number of bytes in Buffer to fill. + @param Value Value with which to fill Length bytes of Buffer. + + @return Buffer + +**/ +VOID * +EFIAPI +InternalMemSetMem32 ( + OUT VOID *Buffer, + IN UINTN Length, + IN UINT32 Value + ); + +/** + Fills a target buffer with a 64-bit value, and returns the target buffer. + + @param Buffer Pointer to the target buffer to fill. + @param Length Number of bytes in Buffer to fill. + @param Value Value with which to fill Length bytes of Buffer. + + @return Buffer + +**/ +VOID * +EFIAPI +InternalMemSetMem64 ( + OUT VOID *Buffer, + IN UINTN Length, + IN UINT64 Value + ); + +/** + Set Buffer to 0 for Size bytes. + + @param Buffer Memory to set. + @param Size Number of bytes to set + + @return Buffer + +**/ +VOID * +EFIAPI +InternalMemZeroMem ( + OUT VOID *Buffer, + IN UINTN Length + ); + +/** + Compares two memory buffers of a given length. + + @param DestinationBuffer First memory buffer + @param SourceBuffer Second memory buffer + @param Length Length of DestinationBuffer and SourceBuffer memory + regions to compare. Must be non-zero. + + @retval 0 if MemOne == MemTwo + +**/ +INTN +EFIAPI +InternalMemCompareMem ( + IN CONST VOID *DestinationBuffer, + IN CONST VOID *SourceBuffer, + IN UINTN Length + ); + +/** + Scans a target buffer for an 8-bit value, and returns a pointer to the + matching 8-bit value in the target buffer. + + @param Buffer Pointer to the target buffer to scan. + @param Length Number of bytes in Buffer to scan. Must be non-zero. + @param Value Value to search for in the target buffer. + + @return Pointer to the first occurrence or NULL if not found. + +**/ +CONST VOID * +EFIAPI +InternalMemScanMem8 ( + IN CONST VOID *Buffer, + IN UINTN Length, + IN UINT8 Value + ); + +/** + Scans a target buffer for a 16-bit value, and returns a pointer to the + matching 16-bit value in the target buffer. + + @param Buffer Pointer to the target buffer to scan. + @param Length Number of bytes in Buffer to scan. Must be non-zero. + @param Value Value to search for in the target buffer. + + @return Pointer to the first occurrence or NULL if not found. + +**/ +CONST VOID * +EFIAPI +InternalMemScanMem16 ( + IN CONST VOID *Buffer, + IN UINTN Length, + IN UINT16 Value + ); + +/** + Scans a target buffer for a 32-bit value, and returns a pointer to the + matching 32-bit value in the target buffer. + + @param Buffer Pointer to the target buffer to scan. + @param Length Number of bytes in Buffer to scan. Must be non-zero. + @param Value Value to search for in the target buffer. + + @return Pointer to the first occurrence or NULL if not found. + +**/ +CONST VOID * +EFIAPI +InternalMemScanMem32 ( + IN CONST VOID *Buffer, + IN UINTN Length, + IN UINT32 Value + ); + +/** + Scans a target buffer for a 64-bit value, and returns a pointer to the + matching 64-bit value in the target buffer. + + @param Buffer Pointer to the target buffer to scan. + @param Length Number of bytes in Buffer to scan. Must be non-zero. + @param Value Value to search for in the target buffer. + + @return Pointer to the first occurrence or NULL if not found. + +**/ +CONST VOID * +EFIAPI +InternalMemScanMem64 ( + IN CONST VOID *Buffer, + IN UINTN Length, + IN UINT64 Value + ); + +#endif diff --git a/MdePkg/Library/BaseMemoryLibMmx/MemLibWrapper.c b/MdePkg/Library/BaseMemoryLibMmx/MemLibWrapper.c deleted file mode 100644 index 2ef0766242..0000000000 --- a/MdePkg/Library/BaseMemoryLibMmx/MemLibWrapper.c +++ /dev/null @@ -1,620 +0,0 @@ -/** @file - Wrapper functions for Base Memory 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: MemLibWrapper.c - - The following BaseMemoryLib instances share the same version of this file: - - BaseMemoryLib - BaseMemoryLibMmx - BaseMemoryLibSse2 - BaseMemoryLibRepStr - PeiMemoryLib - UefiMemoryLib - -**/ - -/** - Copy Length bytes from Source to Destination. - - @param Destination Target of copy - @param Source Place to copy from - @param Length Number of bytes to copy - - @return Destination - -**/ -VOID * -EFIAPI -InternalMemCopyMem ( - OUT VOID *DestinationBuffer, - IN CONST VOID *SourceBuffer, - IN UINTN Length - ); - -/** - Set Buffer to Value for Size bytes. - - @param Buffer Memory to set. - @param Size Number of bytes to set - @param Value Value of the set operation. - - @return Buffer - -**/ -VOID * -EFIAPI -InternalMemSetMem ( - OUT VOID *Buffer, - IN UINTN Length, - IN UINT8 Value - ); - -/** - Fills a target buffer with a 16-bit value, and returns the target buffer. - - @param Buffer Pointer to the target buffer to fill. - @param Length Number of bytes in Buffer to fill. - @param Value Value with which to fill Length bytes of Buffer. - - @return Buffer - -**/ -VOID * -EFIAPI -InternalMemSetMem16 ( - OUT VOID *Buffer, - IN UINTN Length, - IN UINT16 Value - ); - -/** - Fills a target buffer with a 32-bit value, and returns the target buffer. - - @param Buffer Pointer to the target buffer to fill. - @param Length Number of bytes in Buffer to fill. - @param Value Value with which to fill Length bytes of Buffer. - - @return Buffer - -**/ -VOID * -EFIAPI -InternalMemSetMem32 ( - OUT VOID *Buffer, - IN UINTN Length, - IN UINT32 Value - ); - -/** - Fills a target buffer with a 64-bit value, and returns the target buffer. - - @param Buffer Pointer to the target buffer to fill. - @param Length Number of bytes in Buffer to fill. - @param Value Value with which to fill Length bytes of Buffer. - - @return Buffer - -**/ -VOID * -EFIAPI -InternalMemSetMem64 ( - OUT VOID *Buffer, - IN UINTN Length, - IN UINT64 Value - ); - -/** - Set Buffer to 0 for Size bytes. - - @param Buffer Memory to set. - @param Size Number of bytes to set - - @return Buffer - -**/ -VOID * -EFIAPI -InternalMemZeroMem ( - OUT VOID *Buffer, - IN UINTN Length - ); - -/** - Compares two memory buffers of a given length. - - @param DestinationBuffer First memory buffer - @param SourceBuffer Second memory buffer - @param Length Length of DestinationBuffer and SourceBuffer memory - regions to compare. Must be non-zero. - - @retval 0 if MemOne == MemTwo - -**/ -INTN -EFIAPI -InternalMemCompareMem ( - IN CONST VOID *DestinationBuffer, - IN CONST VOID *SourceBuffer, - IN UINTN Length - ); - -/** - Scans a target buffer for an 8-bit value, and returns a pointer to the - matching 8-bit value in the target buffer. - - @param Buffer Pointer to the target buffer to scan. - @param Length Number of bytes in Buffer to scan. Must be non-zero. - @param Value Value to search for in the target buffer. - - @return Pointer to the first occurrence or NULL if not found. - -**/ -CONST VOID * -EFIAPI -InternalMemScanMem8 ( - IN CONST VOID *Buffer, - IN UINTN Length, - IN UINT8 Value - ); - -/** - Scans a target buffer for a 16-bit value, and returns a pointer to the - matching 16-bit value in the target buffer. - - @param Buffer Pointer to the target buffer to scan. - @param Length Number of bytes in Buffer to scan. Must be non-zero. - @param Value Value to search for in the target buffer. - - @return Pointer to the first occurrence or NULL if not found. - -**/ -CONST VOID * -EFIAPI -InternalMemScanMem16 ( - IN CONST VOID *Buffer, - IN UINTN Length, - IN UINT16 Value - ); - -/** - Scans a target buffer for a 32-bit value, and returns a pointer to the - matching 32-bit value in the target buffer. - - @param Buffer Pointer to the target buffer to scan. - @param Length Number of bytes in Buffer to scan. Must be non-zero. - @param Value Value to search for in the target buffer. - - @return Pointer to the first occurrence or NULL if not found. - -**/ -CONST VOID * -EFIAPI -InternalMemScanMem32 ( - IN CONST VOID *Buffer, - IN UINTN Length, - IN UINT32 Value - ); - -/** - Scans a target buffer for a 64-bit value, and returns a pointer to the - matching 64-bit value in the target buffer. - - @param Buffer Pointer to the target buffer to scan. - @param Length Number of bytes in Buffer to scan. Must be non-zero. - @param Value Value to search for in the target buffer. - - @return Pointer to the first occurrence or NULL if not found. - -**/ -CONST VOID * -EFIAPI -InternalMemScanMem64 ( - IN CONST VOID *Buffer, - IN UINTN Length, - IN UINT64 Value - ); - -/** - Copy Length bytes from Source to Destination. - - This function copies Length bytes from SourceBuffer to DestinationBuffer, and - returns DestinationBuffer. The implementation must be reentrant, and it must - handle the case where SourceBuffer overlaps DestinationBuffer. - - If Length is greater than (MAX_ADDRESS - DestinationBuffer + 1), then - ASSERT(). - If Length is greater than (MAX_ADDRESS - SourceBuffer + 1), then ASSERT(). - - @param Destination Target of copy - @param Source Place to copy from - @param Length Number of bytes to copy - - @return Destination - -**/ -VOID * -EFIAPI -CopyMem ( - OUT VOID *Destination, - IN CONST VOID *Source, - IN UINTN Length - ) -{ - ASSERT (Length <= MAX_ADDRESS - (UINTN)Destination + 1); - ASSERT (Length <= MAX_ADDRESS - (UINTN)Source + 1); - return InternalMemCopyMem (Destination, Source, Length); -} - -/** - Set Buffer to Value for Size bytes. - - This function fills Length bytes of Buffer with Value, and returns Buffer. - - If Length is greater than (MAX_ADDRESS - Buffer + 1), then ASSERT(). - - @param Buffer Memory to set. - @param Size Number of bytes to set - @param Value Value of the set operation. - - @return Buffer - -**/ -VOID * -EFIAPI -SetMem ( - IN VOID *Buffer, - IN UINTN Size, - IN UINT8 Value - ) -{ - ASSERT (Size <= MAX_ADDRESS - (UINTN)Buffer + 1); - return InternalMemSetMem (Buffer, Size, Value); -} - -/** - Fills a target buffer with a 16-bit value, and returns the target buffer. - - This function fills Length bytes of Buffer with the 16-bit value specified by - Value, and returns Buffer. Value is repeated every 16-bits in for Length - bytes of Buffer. - - If Buffer is NULL and Length > 0, then ASSERT(). - If Length is greater than (MAX_ADDRESS - Buffer + 1), then ASSERT(). - If Buffer is not aligned on a 16-bit boundary, then ASSERT(). - If Length is not aligned on a 16-bit boundary, then ASSERT(). - - @param Buffer Pointer to the target buffer to fill. - @param Length Number of bytes in Buffer to fill. - @param Value Value with which to fill Length bytes of Buffer. - - @return Buffer - -**/ -VOID * -EFIAPI -SetMem16 ( - OUT VOID *Buffer, - IN UINTN Length, - IN UINT16 Value - ) -{ - ASSERT (Buffer != NULL); - ASSERT (Length <= MAX_ADDRESS - (UINTN)Buffer + 1); - ASSERT ((((UINTN)Buffer) & 1) != 0); - ASSERT ((Length & 1) != 0); - - if ((Length /= sizeof (Value)) == 0) { - return Buffer; - } - return InternalMemSetMem16 (Buffer, Length, Value); -} - -/** - Fills a target buffer with a 32-bit value, and returns the target buffer. - - This function fills Length bytes of Buffer with the 32-bit value specified by - Value, and returns Buffer. Value is repeated every 32-bits in for Length - bytes of Buffer. - - If Buffer is NULL and Length > 0, then ASSERT(). - If Length is greater than (MAX_ADDRESS - Buffer + 1), then ASSERT(). - If Buffer is not aligned on a 32-bit boundary, then ASSERT(). - If Length is not aligned on a 32-bit boundary, then ASSERT(). - - @param Buffer Pointer to the target buffer to fill. - @param Length Number of bytes in Buffer to fill. - @param Value Value with which to fill Length bytes of Buffer. - - @return Buffer - -**/ -VOID * -EFIAPI -SetMem32 ( - OUT VOID *Buffer, - IN UINTN Length, - IN UINT32 Value - ) -{ - ASSERT (Buffer != NULL); - ASSERT (Length <= MAX_ADDRESS - (UINTN)Buffer + 1); - ASSERT ((((UINTN)Buffer) & 1) != 0); - ASSERT ((Length & 1) != 0); - - if ((Length /= sizeof (Value)) == 0) { - return Buffer; - } - return InternalMemSetMem32 (Buffer, Length, Value); -} - -/** - Fills a target buffer with a 64-bit value, and returns the target buffer. - - This function fills Length bytes of Buffer with the 64-bit value specified by - Value, and returns Buffer. Value is repeated every 64-bits in for Length - bytes of Buffer. - - If Buffer is NULL and Length > 0, then ASSERT(). - If Length is greater than (MAX_ADDRESS - Buffer + 1), then ASSERT(). - If Buffer is not aligned on a 64-bit boundary, then ASSERT(). - If Length is not aligned on a 64-bit boundary, then ASSERT(). - - @param Buffer Pointer to the target buffer to fill. - @param Length Number of bytes in Buffer to fill. - @param Value Value with which to fill Length bytes of Buffer. - - @return Buffer - -**/ -VOID * -EFIAPI -SetMem64 ( - OUT VOID *Buffer, - IN UINTN Length, - IN UINT64 Value - ) -{ - ASSERT (Buffer != NULL); - ASSERT (Length <= MAX_ADDRESS - (UINTN)Buffer + 1); - ASSERT ((((UINTN)Buffer) & 1) != 0); - ASSERT ((Length & 1) != 0); - - if ((Length /= sizeof (Value)) == 0) { - return Buffer; - } - return InternalMemSetMem64 (Buffer, Length, Value); -} - -/** - Set Buffer to 0 for Size bytes. - - This function fills Length bytes of Buffer with zeros, and returns Buffer. - - If Buffer is NULL and Length > 0, then ASSERT(). - If Length is greater than (MAX_ADDRESS - Buffer + 1), then ASSERT(). - - @param Buffer Memory to set. - @param Size Number of bytes to set - - @return Buffer - -**/ -VOID * -EFIAPI -ZeroMem ( - IN VOID *Buffer, - IN UINTN Size - ) -{ - ASSERT (Buffer != NULL); - return InternalMemSetMem (Buffer, Size, 0); -} - -/** - Compares two memory buffers of a given length. - - This function compares Length bytes of SourceBuffer to Length bytes of - DestinationBuffer. If all Length bytes of the two buffers are identical, then - 0 is returned. Otherwise, the value returned is the first mismatched byte in - SourceBuffer subtracted from the first mismatched byte in DestinationBuffer. - - If DestinationBuffer is NULL and Length > 0, then ASSERT(). - If SourceBuffer is NULL and Length > 0, then ASSERT(). - If Length is greater than (MAX_ADDRESS - DestinationBuffer + 1), then - ASSERT(). - If Length is greater than (MAX_ADDRESS - SourceBuffer + 1), then ASSERT(). - - @param DestinationBuffer First memory buffer - @param SourceBuffer Second memory buffer - @param Length Length of DestinationBuffer and SourceBuffer memory - regions to compare - - @retval 0 if DestinationBuffer == SourceBuffer - @retval Non-zero if DestinationBuffer != SourceBuffer - -**/ -INTN -EFIAPI -CompareMem ( - IN CONST VOID *DestinationBuffer, - IN CONST VOID *SourceBuffer, - IN UINTN Length - ) -{ - ASSERT (DestinationBuffer != NULL); - ASSERT (SourceBuffer != NULL); - ASSERT (Length <= MAX_ADDRESS - (UINTN)DestinationBuffer + 1); - ASSERT (Length <= MAX_ADDRESS - (UINTN)SourceBuffer + 1); - if (Length == 0) { - return 0; - } - return InternalMemCompareMem (DestinationBuffer, SourceBuffer, Length); -} - -/** - Scans a target buffer for an 8-bit value, and returns a pointer to the - matching 8-bit value in the target buffer. - - This function searches target the buffer specified by Buffer and Length from - the lowest address to the highest address for an 8-bit value that matches - Value. If a match is found, then a pointer to the matching byte in the target - buffer is returned. If no match is found, then NULL is returned. If Length is - 0, then NULL is returned. - - If Buffer is NULL, then ASSERT(). - If Length is greater than (MAX_ADDRESS - Buffer + 1), then ASSERT(). - - @param Buffer Pointer to the target buffer to scan. - @param Length Number of bytes in Buffer to scan. - @param Value Value to search for in the target buffer. - - @return Pointer to the first occurrence or NULL if not found. - @retval NULL if Length == 0 or Value was not found. - -**/ -VOID * -EFIAPI -ScanMem8 ( - IN CONST VOID *Buffer, - IN UINTN Length, - IN UINT8 Value - ) -{ - ASSERT (Buffer != NULL); - ASSERT (Length <= MAX_ADDRESS + (UINTN)Buffer + 1); - - if ((Length /= sizeof (Value)) == 0) { - return NULL; - } - return (VOID*)InternalMemScanMem8 (Buffer, Length, Value); -} - -/** - Scans a target buffer for a 16-bit value, and returns a pointer to the - matching 16-bit value in the target buffer. - - This function searches target the buffer specified by Buffer and Length from - the lowest address to the highest address at 16-bit increments for a 16-bit - value that matches Value. If a match is found, then a pointer to the matching - value in the target buffer is returned. If no match is found, then NULL is - returned. If Length is 0, then NULL is returned. - - If Buffer is NULL, then ASSERT(). - If Buffer is not aligned on a 16-bit boundary, then ASSERT(). - If Length is greater than (MAX_ADDRESS - Buffer + 1), then ASSERT(). - - @param Buffer Pointer to the target buffer to scan. - @param Length Number of bytes in Buffer to scan. - @param Value Value to search for in the target buffer. - - @return Pointer to the first occurrence. - @retval NULL if Length == 0 or Value was not found. - -**/ -VOID * -EFIAPI -ScanMem16 ( - IN CONST VOID *Buffer, - IN UINTN Length, - IN UINT16 Value - ) -{ - ASSERT (Buffer != NULL); - ASSERT (((UINTN)Buffer & (sizeof (Value) - 1)) == 0); - ASSERT (Length <= MAX_ADDRESS + (UINTN)Buffer + 1); - - if ((Length /= sizeof (Value)) == 0) { - return NULL; - } - return (VOID*)InternalMemScanMem16 (Buffer, Length, Value); -} - -/** - Scans a target buffer for a 32-bit value, and returns a pointer to the - matching 32-bit value in the target buffer. - - This function searches target the buffer specified by Buffer and Length from - the lowest address to the highest address at 32-bit increments for a 32-bit - value that matches Value. If a match is found, then a pointer to the matching - value in the target buffer is returned. If no match is found, then NULL is - returned. If Length is 0, then NULL is returned. - - If Buffer is NULL, then ASSERT(). - If Buffer is not aligned on a 32-bit boundary, then ASSERT(). - If Length is greater than (MAX_ADDRESS - Buffer + 1), then ASSERT(). - - @param Buffer Pointer to the target buffer to scan. - @param Length Number of bytes in Buffer to scan. - @param Value Value to search for in the target buffer. - - @return Pointer to the first occurrence or NULL if not found. - @retval NULL if Length == 0 or Value was not found. - -**/ -VOID * -EFIAPI -ScanMem32 ( - IN CONST VOID *Buffer, - IN UINTN Length, - IN UINT32 Value - ) -{ - ASSERT (Buffer != NULL); - ASSERT (((UINTN)Buffer & (sizeof (Value) - 1)) == 0); - ASSERT (Length <= MAX_ADDRESS + (UINTN)Buffer + 1); - - if ((Length /= sizeof (Value)) == 0) { - return NULL; - } - return (VOID*)InternalMemScanMem32 (Buffer, Length, Value); -} - -/** - Scans a target buffer for a 64-bit value, and returns a pointer to the - matching 64-bit value in the target buffer. - - This function searches target the buffer specified by Buffer and Length from - the lowest address to the highest address at 64-bit increments for a 64-bit - value that matches Value. If a match is found, then a pointer to the matching - value in the target buffer is returned. If no match is found, then NULL is - returned. If Length is 0, then NULL is returned. - - If Buffer is NULL, then ASSERT(). - If Buffer is not aligned on a 64-bit boundary, then ASSERT(). - If Length is greater than (MAX_ADDRESS - Buffer + 1), then ASSERT(). - - @param Buffer Pointer to the target buffer to scan. - @param Length Number of bytes in Buffer to scan. - @param Value Value to search for in the target buffer. - - @return Pointer to the first occurrence or NULL if not found. - @retval NULL if Length == 0 or Value was not found. - -**/ -VOID * -EFIAPI -ScanMem64 ( - IN CONST VOID *Buffer, - IN UINTN Length, - IN UINT64 Value - ) -{ - ASSERT (Buffer != NULL); - ASSERT (((UINTN)Buffer & (sizeof (Value) - 1)) == 0); - ASSERT (Length <= MAX_ADDRESS + (UINTN)Buffer + 1); - - if ((Length /= sizeof (Value)) == 0) { - return NULL; - } - return (VOID*)InternalMemScanMem64 (Buffer, Length, Value); -} diff --git a/MdePkg/Library/BaseMemoryLibMmx/ScanMem16Wrapper.c b/MdePkg/Library/BaseMemoryLibMmx/ScanMem16Wrapper.c new file mode 100644 index 0000000000..a17705db1d --- /dev/null +++ b/MdePkg/Library/BaseMemoryLibMmx/ScanMem16Wrapper.c @@ -0,0 +1,66 @@ +/** @file + ScanMem16() implementation. + + 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: ScanMem16Wrapper.c + + The following BaseMemoryLib instances share the same version of this file: + + BaseMemoryLib + BaseMemoryLibMmx + BaseMemoryLibSse2 + BaseMemoryLibRepStr + PeiMemoryLib + UefiMemoryLib + +**/ + +#include "MemLibInternals.h" + +/** + Scans a target buffer for a 16-bit value, and returns a pointer to the + matching 16-bit value in the target buffer. + + This function searches target the buffer specified by Buffer and Length from + the lowest address to the highest address at 16-bit increments for a 16-bit + value that matches Value. If a match is found, then a pointer to the matching + value in the target buffer is returned. If no match is found, then NULL is + returned. If Length is 0, then NULL is returned. + + If Buffer is NULL, then ASSERT(). + If Buffer is not aligned on a 16-bit boundary, then ASSERT(). + If Length is greater than (MAX_ADDRESS - Buffer + 1), then ASSERT(). + + @param Buffer Pointer to the target buffer to scan. + @param Length Number of bytes in Buffer to scan. + @param Value Value to search for in the target buffer. + + @return Pointer to the first occurrence. + @retval NULL if Length == 0 or Value was not found. + +**/ +VOID * +EFIAPI +ScanMem16 ( + IN CONST VOID *Buffer, + IN UINTN Length, + IN UINT16 Value + ) +{ + ASSERT (Buffer != NULL); + ASSERT (((UINTN)Buffer & (sizeof (Value) - 1)) == 0); + ASSERT (Length <= MAX_ADDRESS + (UINTN)Buffer + 1); + + if ((Length /= sizeof (Value)) == 0) { + return NULL; + } + return (VOID*)InternalMemScanMem16 (Buffer, Length, Value); +} diff --git a/MdePkg/Library/BaseMemoryLibMmx/ScanMem32Wrapper.c b/MdePkg/Library/BaseMemoryLibMmx/ScanMem32Wrapper.c new file mode 100644 index 0000000000..67eb84d8ef --- /dev/null +++ b/MdePkg/Library/BaseMemoryLibMmx/ScanMem32Wrapper.c @@ -0,0 +1,66 @@ +/** @file + ScanMem32() implementation. + + 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: ScanMem32Wrapper.c + + The following BaseMemoryLib instances share the same version of this file: + + BaseMemoryLib + BaseMemoryLibMmx + BaseMemoryLibSse2 + BaseMemoryLibRepStr + PeiMemoryLib + UefiMemoryLib + +**/ + +#include "MemLibInternals.h" + +/** + Scans a target buffer for a 32-bit value, and returns a pointer to the + matching 32-bit value in the target buffer. + + This function searches target the buffer specified by Buffer and Length from + the lowest address to the highest address at 32-bit increments for a 32-bit + value that matches Value. If a match is found, then a pointer to the matching + value in the target buffer is returned. If no match is found, then NULL is + returned. If Length is 0, then NULL is returned. + + If Buffer is NULL, then ASSERT(). + If Buffer is not aligned on a 32-bit boundary, then ASSERT(). + If Length is greater than (MAX_ADDRESS - Buffer + 1), then ASSERT(). + + @param Buffer Pointer to the target buffer to scan. + @param Length Number of bytes in Buffer to scan. + @param Value Value to search for in the target buffer. + + @return Pointer to the first occurrence or NULL if not found. + @retval NULL if Length == 0 or Value was not found. + +**/ +VOID * +EFIAPI +ScanMem32 ( + IN CONST VOID *Buffer, + IN UINTN Length, + IN UINT32 Value + ) +{ + ASSERT (Buffer != NULL); + ASSERT (((UINTN)Buffer & (sizeof (Value) - 1)) == 0); + ASSERT (Length <= MAX_ADDRESS + (UINTN)Buffer + 1); + + if ((Length /= sizeof (Value)) == 0) { + return NULL; + } + return (VOID*)InternalMemScanMem32 (Buffer, Length, Value); +} diff --git a/MdePkg/Library/BaseMemoryLibMmx/ScanMem64Wrapper.c b/MdePkg/Library/BaseMemoryLibMmx/ScanMem64Wrapper.c new file mode 100644 index 0000000000..c5f0762ebe --- /dev/null +++ b/MdePkg/Library/BaseMemoryLibMmx/ScanMem64Wrapper.c @@ -0,0 +1,66 @@ +/** @file + ScanMem64() implementation. + + 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: ScanMem64Wrapper.c + + The following BaseMemoryLib instances share the same version of this file: + + BaseMemoryLib + BaseMemoryLibMmx + BaseMemoryLibSse2 + BaseMemoryLibRepStr + PeiMemoryLib + UefiMemoryLib + +**/ + +#include "MemLibInternals.h" + +/** + Scans a target buffer for a 64-bit value, and returns a pointer to the + matching 64-bit value in the target buffer. + + This function searches target the buffer specified by Buffer and Length from + the lowest address to the highest address at 64-bit increments for a 64-bit + value that matches Value. If a match is found, then a pointer to the matching + value in the target buffer is returned. If no match is found, then NULL is + returned. If Length is 0, then NULL is returned. + + If Buffer is NULL, then ASSERT(). + If Buffer is not aligned on a 64-bit boundary, then ASSERT(). + If Length is greater than (MAX_ADDRESS - Buffer + 1), then ASSERT(). + + @param Buffer Pointer to the target buffer to scan. + @param Length Number of bytes in Buffer to scan. + @param Value Value to search for in the target buffer. + + @return Pointer to the first occurrence or NULL if not found. + @retval NULL if Length == 0 or Value was not found. + +**/ +VOID * +EFIAPI +ScanMem64 ( + IN CONST VOID *Buffer, + IN UINTN Length, + IN UINT64 Value + ) +{ + ASSERT (Buffer != NULL); + ASSERT (((UINTN)Buffer & (sizeof (Value) - 1)) == 0); + ASSERT (Length <= MAX_ADDRESS + (UINTN)Buffer + 1); + + if ((Length /= sizeof (Value)) == 0) { + return NULL; + } + return (VOID*)InternalMemScanMem64 (Buffer, Length, Value); +} diff --git a/MdePkg/Library/BaseMemoryLibMmx/ScanMem8Wrapper.c b/MdePkg/Library/BaseMemoryLibMmx/ScanMem8Wrapper.c new file mode 100644 index 0000000000..9b817b1b0e --- /dev/null +++ b/MdePkg/Library/BaseMemoryLibMmx/ScanMem8Wrapper.c @@ -0,0 +1,64 @@ +/** @file + ScanMem8() implementation. + + 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: ScanMem8Wrapper.c + + The following BaseMemoryLib instances share the same version of this file: + + BaseMemoryLib + BaseMemoryLibMmx + BaseMemoryLibSse2 + BaseMemoryLibRepStr + PeiMemoryLib + UefiMemoryLib + +**/ + +#include "MemLibInternals.h" + +/** + Scans a target buffer for an 8-bit value, and returns a pointer to the + matching 8-bit value in the target buffer. + + This function searches target the buffer specified by Buffer and Length from + the lowest address to the highest address for an 8-bit value that matches + Value. If a match is found, then a pointer to the matching byte in the target + buffer is returned. If no match is found, then NULL is returned. If Length is + 0, then NULL is returned. + + If Buffer is NULL, then ASSERT(). + If Length is greater than (MAX_ADDRESS - Buffer + 1), then ASSERT(). + + @param Buffer Pointer to the target buffer to scan. + @param Length Number of bytes in Buffer to scan. + @param Value Value to search for in the target buffer. + + @return Pointer to the first occurrence or NULL if not found. + @retval NULL if Length == 0 or Value was not found. + +**/ +VOID * +EFIAPI +ScanMem8 ( + IN CONST VOID *Buffer, + IN UINTN Length, + IN UINT8 Value + ) +{ + ASSERT (Buffer != NULL); + ASSERT (Length <= MAX_ADDRESS + (UINTN)Buffer + 1); + + if ((Length /= sizeof (Value)) == 0) { + return NULL; + } + return (VOID*)InternalMemScanMem8 (Buffer, Length, Value); +} diff --git a/MdePkg/Library/BaseMemoryLibMmx/SetMem16Wrapper.c b/MdePkg/Library/BaseMemoryLibMmx/SetMem16Wrapper.c new file mode 100644 index 0000000000..827e6ecf67 --- /dev/null +++ b/MdePkg/Library/BaseMemoryLibMmx/SetMem16Wrapper.c @@ -0,0 +1,64 @@ +/** @file + SetMem16() implementation. + + 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: SetMem16Wrapper.c + + The following BaseMemoryLib instances share the same version of this file: + + BaseMemoryLib + BaseMemoryLibMmx + BaseMemoryLibSse2 + BaseMemoryLibRepStr + PeiMemoryLib + UefiMemoryLib + +**/ + +#include "MemLibInternals.h" + +/** + Fills a target buffer with a 16-bit value, and returns the target buffer. + + This function fills Length bytes of Buffer with the 16-bit value specified by + Value, and returns Buffer. Value is repeated every 16-bits in for Length + bytes of Buffer. + + If Buffer is NULL and Length > 0, then ASSERT(). + If Length is greater than (MAX_ADDRESS - Buffer + 1), then ASSERT(). + If Buffer is not aligned on a 16-bit boundary, then ASSERT(). + If Length is not aligned on a 16-bit boundary, then ASSERT(). + + @param Buffer Pointer to the target buffer to fill. + @param Length Number of bytes in Buffer to fill. + @param Value Value with which to fill Length bytes of Buffer. + + @return Buffer + +**/ +VOID * +EFIAPI +SetMem16 ( + OUT VOID *Buffer, + IN UINTN Length, + IN UINT16 Value + ) +{ + ASSERT (Buffer != NULL); + ASSERT (Length <= MAX_ADDRESS - (UINTN)Buffer + 1); + ASSERT ((((UINTN)Buffer) & 1) != 0); + ASSERT ((Length & 1) != 0); + + if ((Length /= sizeof (Value)) == 0) { + return Buffer; + } + return InternalMemSetMem16 (Buffer, Length, Value); +} diff --git a/MdePkg/Library/BaseMemoryLibMmx/SetMem32Wrapper.c b/MdePkg/Library/BaseMemoryLibMmx/SetMem32Wrapper.c new file mode 100644 index 0000000000..4b9d2413eb --- /dev/null +++ b/MdePkg/Library/BaseMemoryLibMmx/SetMem32Wrapper.c @@ -0,0 +1,64 @@ +/** @file + SetMem32() implementation. + + 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: SetMem32Wrapper.c + + The following BaseMemoryLib instances share the same version of this file: + + BaseMemoryLib + BaseMemoryLibMmx + BaseMemoryLibSse2 + BaseMemoryLibRepStr + PeiMemoryLib + UefiMemoryLib + +**/ + +#include "MemLibInternals.h" + +/** + Fills a target buffer with a 32-bit value, and returns the target buffer. + + This function fills Length bytes of Buffer with the 32-bit value specified by + Value, and returns Buffer. Value is repeated every 32-bits in for Length + bytes of Buffer. + + If Buffer is NULL and Length > 0, then ASSERT(). + If Length is greater than (MAX_ADDRESS - Buffer + 1), then ASSERT(). + If Buffer is not aligned on a 32-bit boundary, then ASSERT(). + If Length is not aligned on a 32-bit boundary, then ASSERT(). + + @param Buffer Pointer to the target buffer to fill. + @param Length Number of bytes in Buffer to fill. + @param Value Value with which to fill Length bytes of Buffer. + + @return Buffer + +**/ +VOID * +EFIAPI +SetMem32 ( + OUT VOID *Buffer, + IN UINTN Length, + IN UINT32 Value + ) +{ + ASSERT (Buffer != NULL); + ASSERT (Length <= MAX_ADDRESS - (UINTN)Buffer + 1); + ASSERT ((((UINTN)Buffer) & 1) != 0); + ASSERT ((Length & 1) != 0); + + if ((Length /= sizeof (Value)) == 0) { + return Buffer; + } + return InternalMemSetMem32 (Buffer, Length, Value); +} diff --git a/MdePkg/Library/BaseMemoryLibMmx/SetMem64Wrapper.c b/MdePkg/Library/BaseMemoryLibMmx/SetMem64Wrapper.c new file mode 100644 index 0000000000..dbf3b62782 --- /dev/null +++ b/MdePkg/Library/BaseMemoryLibMmx/SetMem64Wrapper.c @@ -0,0 +1,64 @@ +/** @file + SetMem64() implementation. + + 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: SetMem64Wrapper.c + + The following BaseMemoryLib instances share the same version of this file: + + BaseMemoryLib + BaseMemoryLibMmx + BaseMemoryLibSse2 + BaseMemoryLibRepStr + PeiMemoryLib + UefiMemoryLib + +**/ + +#include "MemLibInternals.h" + +/** + Fills a target buffer with a 64-bit value, and returns the target buffer. + + This function fills Length bytes of Buffer with the 64-bit value specified by + Value, and returns Buffer. Value is repeated every 64-bits in for Length + bytes of Buffer. + + If Buffer is NULL and Length > 0, then ASSERT(). + If Length is greater than (MAX_ADDRESS - Buffer + 1), then ASSERT(). + If Buffer is not aligned on a 64-bit boundary, then ASSERT(). + If Length is not aligned on a 64-bit boundary, then ASSERT(). + + @param Buffer Pointer to the target buffer to fill. + @param Length Number of bytes in Buffer to fill. + @param Value Value with which to fill Length bytes of Buffer. + + @return Buffer + +**/ +VOID * +EFIAPI +SetMem64 ( + OUT VOID *Buffer, + IN UINTN Length, + IN UINT64 Value + ) +{ + ASSERT (Buffer != NULL); + ASSERT (Length <= MAX_ADDRESS - (UINTN)Buffer + 1); + ASSERT ((((UINTN)Buffer) & 1) != 0); + ASSERT ((Length & 1) != 0); + + if ((Length /= sizeof (Value)) == 0) { + return Buffer; + } + return InternalMemSetMem64 (Buffer, Length, Value); +} diff --git a/MdePkg/Library/BaseMemoryLibMmx/SetMemWrapper.c b/MdePkg/Library/BaseMemoryLibMmx/SetMemWrapper.c new file mode 100644 index 0000000000..294a27a753 --- /dev/null +++ b/MdePkg/Library/BaseMemoryLibMmx/SetMemWrapper.c @@ -0,0 +1,52 @@ +/** @file + SetMem() implementation. + + 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: SetMemWrapper.c + + The following BaseMemoryLib instances share the same version of this file: + + BaseMemoryLib + BaseMemoryLibMmx + BaseMemoryLibSse2 + BaseMemoryLibRepStr + PeiMemoryLib + UefiMemoryLib + +**/ + +#include "MemLibInternals.h" + +/** + Set Buffer to Value for Size bytes. + + This function fills Length bytes of Buffer with Value, and returns Buffer. + + If Length is greater than (MAX_ADDRESS - Buffer + 1), then ASSERT(). + + @param Buffer Memory to set. + @param Size Number of bytes to set + @param Value Value of the set operation. + + @return Buffer + +**/ +VOID * +EFIAPI +SetMem ( + IN VOID *Buffer, + IN UINTN Size, + IN UINT8 Value + ) +{ + ASSERT (Size <= MAX_ADDRESS - (UINTN)Buffer + 1); + return InternalMemSetMem (Buffer, Size, Value); +} diff --git a/MdePkg/Library/BaseMemoryLibMmx/ZeroMemWrapper.c b/MdePkg/Library/BaseMemoryLibMmx/ZeroMemWrapper.c new file mode 100644 index 0000000000..d7d7919ba2 --- /dev/null +++ b/MdePkg/Library/BaseMemoryLibMmx/ZeroMemWrapper.c @@ -0,0 +1,51 @@ +/** @file + ZeroMem() implementation. + + 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: ZeroMemWrapper.c + + The following BaseMemoryLib instances share the same version of this file: + + BaseMemoryLib + BaseMemoryLibMmx + BaseMemoryLibSse2 + BaseMemoryLibRepStr + PeiMemoryLib + UefiMemoryLib + +**/ + +#include "MemLibInternals.h" + +/** + Set Buffer to 0 for Size bytes. + + This function fills Length bytes of Buffer with zeros, and returns Buffer. + + If Buffer is NULL and Length > 0, then ASSERT(). + If Length is greater than (MAX_ADDRESS - Buffer + 1), then ASSERT(). + + @param Buffer Memory to set. + @param Size Number of bytes to set + + @return Buffer + +**/ +VOID * +EFIAPI +ZeroMem ( + IN VOID *Buffer, + IN UINTN Size + ) +{ + ASSERT (Buffer != NULL); + return InternalMemSetMem (Buffer, Size, 0); +} diff --git a/MdePkg/Library/BaseMemoryLibRepStr/BaseMemoryLibRepStr.msa b/MdePkg/Library/BaseMemoryLibRepStr/BaseMemoryLibRepStr.msa index 19c92471fa..1389bb1c48 100644 --- a/MdePkg/Library/BaseMemoryLibRepStr/BaseMemoryLibRepStr.msa +++ b/MdePkg/Library/BaseMemoryLibRepStr/BaseMemoryLibRepStr.msa @@ -38,7 +38,17 @@ WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED. MemLibGuid.c - MemLibWrapper.c + CopyMemWrapper.c + SetMemWrapper.c + SetMem16Wrapper.c + SetMem32Wrapper.c + SetMem64Wrapper.c + CompareMemWrapper.c + ZeroMemWrapper.c + ScanMem8Wrapper.c + ScanMem16Wrapper.c + ScanMem32Wrapper.c + ScanMem64Wrapper.c Ia32/CopyMem.asm Ia32/SetMem.asm Ia32/SetMem16.asm @@ -53,7 +63,17 @@ WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED. MemLibGuid.c - MemLibWrapper.c + CopyMemWrapper.c + SetMemWrapper.c + SetMem16Wrapper.c + SetMem32Wrapper.c + SetMem64Wrapper.c + CompareMemWrapper.c + ZeroMemWrapper.c + ScanMem8Wrapper.c + ScanMem16Wrapper.c + ScanMem32Wrapper.c + ScanMem64Wrapper.c x64/CopyMem.asm x64/SetMem.asm x64/SetMem16.asm diff --git a/MdePkg/Library/BaseMemoryLibRepStr/CompareMemWrapper.c b/MdePkg/Library/BaseMemoryLibRepStr/CompareMemWrapper.c new file mode 100644 index 0000000000..c8199d8dc3 --- /dev/null +++ b/MdePkg/Library/BaseMemoryLibRepStr/CompareMemWrapper.c @@ -0,0 +1,67 @@ +/** @file + CompareMem() implementation. + + 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: CompareMemWrapper.c + + The following BaseMemoryLib instances share the same version of this file: + + BaseMemoryLib + BaseMemoryLibMmx + BaseMemoryLibSse2 + BaseMemoryLibRepStr + PeiMemoryLib + UefiMemoryLib + +**/ + +#include "MemLibInternals.h" + +/** + Compares two memory buffers of a given length. + + This function compares Length bytes of SourceBuffer to Length bytes of + DestinationBuffer. If all Length bytes of the two buffers are identical, then + 0 is returned. Otherwise, the value returned is the first mismatched byte in + SourceBuffer subtracted from the first mismatched byte in DestinationBuffer. + + If DestinationBuffer is NULL and Length > 0, then ASSERT(). + If SourceBuffer is NULL and Length > 0, then ASSERT(). + If Length is greater than (MAX_ADDRESS - DestinationBuffer + 1), then + ASSERT(). + If Length is greater than (MAX_ADDRESS - SourceBuffer + 1), then ASSERT(). + + @param DestinationBuffer First memory buffer + @param SourceBuffer Second memory buffer + @param Length Length of DestinationBuffer and SourceBuffer memory + regions to compare + + @retval 0 if DestinationBuffer == SourceBuffer + @retval Non-zero if DestinationBuffer != SourceBuffer + +**/ +INTN +EFIAPI +CompareMem ( + IN CONST VOID *DestinationBuffer, + IN CONST VOID *SourceBuffer, + IN UINTN Length + ) +{ + ASSERT (DestinationBuffer != NULL); + ASSERT (SourceBuffer != NULL); + ASSERT (Length <= MAX_ADDRESS - (UINTN)DestinationBuffer + 1); + ASSERT (Length <= MAX_ADDRESS - (UINTN)SourceBuffer + 1); + if (Length == 0) { + return 0; + } + return InternalMemCompareMem (DestinationBuffer, SourceBuffer, Length); +} diff --git a/MdePkg/Library/BaseMemoryLibRepStr/CopyMemWrapper.c b/MdePkg/Library/BaseMemoryLibRepStr/CopyMemWrapper.c new file mode 100644 index 0000000000..5ca62f5047 --- /dev/null +++ b/MdePkg/Library/BaseMemoryLibRepStr/CopyMemWrapper.c @@ -0,0 +1,66 @@ +/** @file + CopyMem() implementation. + + 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: CopyMemWrapper.c + + The following BaseMemoryLib instances share the same version of this file: + + BaseMemoryLib + BaseMemoryLibMmx + BaseMemoryLibSse2 + BaseMemoryLibRepStr + PeiMemoryLib + UefiMemoryLib + +**/ + +#include "MemLibInternals.h" + +/** + Copy Length bytes from Source to Destination. + + This function copies Length bytes from SourceBuffer to DestinationBuffer, and + returns DestinationBuffer. The implementation must be reentrant, and it must + handle the case where SourceBuffer overlaps DestinationBuffer. + + If Length is greater than (MAX_ADDRESS - DestinationBuffer + 1), then + ASSERT(). + If Length is greater than (MAX_ADDRESS - SourceBuffer + 1), then ASSERT(). + + @param Destination Target of copy + @param Source Place to copy from + @param Length Number of bytes to copy + + @return Destination + +**/ +VOID * +EFIAPI +CopyMem ( + OUT VOID *Destination, + IN CONST VOID *Source, + IN UINTN Length + ) +{ + ASSERT ( + Destination == NULL || + Length <= MAX_ADDRESS - (UINTN)Destination + 1 + ); + ASSERT ( + Source == NULL || + Length <= MAX_ADDRESS - (UINTN)Source + 1 + ); + if (Destination == Source || Length == 0) { + return Destination; + } + return InternalMemCopyMem (Destination, Source, Length); +} diff --git a/MdePkg/Library/BaseMemoryLibRepStr/MemLibInternals.h b/MdePkg/Library/BaseMemoryLibRepStr/MemLibInternals.h new file mode 100644 index 0000000000..ca7311a407 --- /dev/null +++ b/MdePkg/Library/BaseMemoryLibRepStr/MemLibInternals.h @@ -0,0 +1,230 @@ +/** @file + Declaration of internal functions for Base Memory 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: MemLibInternals.h + + The following BaseMemoryLib instances share the same version of this file: + + BaseMemoryLib + BaseMemoryLibMmx + BaseMemoryLibSse2 + BaseMemoryLibRepStr + PeiMemoryLib + UefiMemoryLib + +**/ + +#ifndef __MEM_LIB_INTERNALS__ +#define __MEM_LIB_INTERNALS__ + +/** + Copy Length bytes from Source to Destination. + + @param Destination Target of copy + @param Source Place to copy from + @param Length Number of bytes to copy + + @return Destination + +**/ +VOID * +EFIAPI +InternalMemCopyMem ( + OUT VOID *DestinationBuffer, + IN CONST VOID *SourceBuffer, + IN UINTN Length + ); + +/** + Set Buffer to Value for Size bytes. + + @param Buffer Memory to set. + @param Size Number of bytes to set + @param Value Value of the set operation. + + @return Buffer + +**/ +VOID * +EFIAPI +InternalMemSetMem ( + OUT VOID *Buffer, + IN UINTN Length, + IN UINT8 Value + ); + +/** + Fills a target buffer with a 16-bit value, and returns the target buffer. + + @param Buffer Pointer to the target buffer to fill. + @param Length Number of bytes in Buffer to fill. + @param Value Value with which to fill Length bytes of Buffer. + + @return Buffer + +**/ +VOID * +EFIAPI +InternalMemSetMem16 ( + OUT VOID *Buffer, + IN UINTN Length, + IN UINT16 Value + ); + +/** + Fills a target buffer with a 32-bit value, and returns the target buffer. + + @param Buffer Pointer to the target buffer to fill. + @param Length Number of bytes in Buffer to fill. + @param Value Value with which to fill Length bytes of Buffer. + + @return Buffer + +**/ +VOID * +EFIAPI +InternalMemSetMem32 ( + OUT VOID *Buffer, + IN UINTN Length, + IN UINT32 Value + ); + +/** + Fills a target buffer with a 64-bit value, and returns the target buffer. + + @param Buffer Pointer to the target buffer to fill. + @param Length Number of bytes in Buffer to fill. + @param Value Value with which to fill Length bytes of Buffer. + + @return Buffer + +**/ +VOID * +EFIAPI +InternalMemSetMem64 ( + OUT VOID *Buffer, + IN UINTN Length, + IN UINT64 Value + ); + +/** + Set Buffer to 0 for Size bytes. + + @param Buffer Memory to set. + @param Size Number of bytes to set + + @return Buffer + +**/ +VOID * +EFIAPI +InternalMemZeroMem ( + OUT VOID *Buffer, + IN UINTN Length + ); + +/** + Compares two memory buffers of a given length. + + @param DestinationBuffer First memory buffer + @param SourceBuffer Second memory buffer + @param Length Length of DestinationBuffer and SourceBuffer memory + regions to compare. Must be non-zero. + + @retval 0 if MemOne == MemTwo + +**/ +INTN +EFIAPI +InternalMemCompareMem ( + IN CONST VOID *DestinationBuffer, + IN CONST VOID *SourceBuffer, + IN UINTN Length + ); + +/** + Scans a target buffer for an 8-bit value, and returns a pointer to the + matching 8-bit value in the target buffer. + + @param Buffer Pointer to the target buffer to scan. + @param Length Number of bytes in Buffer to scan. Must be non-zero. + @param Value Value to search for in the target buffer. + + @return Pointer to the first occurrence or NULL if not found. + +**/ +CONST VOID * +EFIAPI +InternalMemScanMem8 ( + IN CONST VOID *Buffer, + IN UINTN Length, + IN UINT8 Value + ); + +/** + Scans a target buffer for a 16-bit value, and returns a pointer to the + matching 16-bit value in the target buffer. + + @param Buffer Pointer to the target buffer to scan. + @param Length Number of bytes in Buffer to scan. Must be non-zero. + @param Value Value to search for in the target buffer. + + @return Pointer to the first occurrence or NULL if not found. + +**/ +CONST VOID * +EFIAPI +InternalMemScanMem16 ( + IN CONST VOID *Buffer, + IN UINTN Length, + IN UINT16 Value + ); + +/** + Scans a target buffer for a 32-bit value, and returns a pointer to the + matching 32-bit value in the target buffer. + + @param Buffer Pointer to the target buffer to scan. + @param Length Number of bytes in Buffer to scan. Must be non-zero. + @param Value Value to search for in the target buffer. + + @return Pointer to the first occurrence or NULL if not found. + +**/ +CONST VOID * +EFIAPI +InternalMemScanMem32 ( + IN CONST VOID *Buffer, + IN UINTN Length, + IN UINT32 Value + ); + +/** + Scans a target buffer for a 64-bit value, and returns a pointer to the + matching 64-bit value in the target buffer. + + @param Buffer Pointer to the target buffer to scan. + @param Length Number of bytes in Buffer to scan. Must be non-zero. + @param Value Value to search for in the target buffer. + + @return Pointer to the first occurrence or NULL if not found. + +**/ +CONST VOID * +EFIAPI +InternalMemScanMem64 ( + IN CONST VOID *Buffer, + IN UINTN Length, + IN UINT64 Value + ); + +#endif diff --git a/MdePkg/Library/BaseMemoryLibRepStr/MemLibWrapper.c b/MdePkg/Library/BaseMemoryLibRepStr/MemLibWrapper.c deleted file mode 100644 index 2ef0766242..0000000000 --- a/MdePkg/Library/BaseMemoryLibRepStr/MemLibWrapper.c +++ /dev/null @@ -1,620 +0,0 @@ -/** @file - Wrapper functions for Base Memory 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: MemLibWrapper.c - - The following BaseMemoryLib instances share the same version of this file: - - BaseMemoryLib - BaseMemoryLibMmx - BaseMemoryLibSse2 - BaseMemoryLibRepStr - PeiMemoryLib - UefiMemoryLib - -**/ - -/** - Copy Length bytes from Source to Destination. - - @param Destination Target of copy - @param Source Place to copy from - @param Length Number of bytes to copy - - @return Destination - -**/ -VOID * -EFIAPI -InternalMemCopyMem ( - OUT VOID *DestinationBuffer, - IN CONST VOID *SourceBuffer, - IN UINTN Length - ); - -/** - Set Buffer to Value for Size bytes. - - @param Buffer Memory to set. - @param Size Number of bytes to set - @param Value Value of the set operation. - - @return Buffer - -**/ -VOID * -EFIAPI -InternalMemSetMem ( - OUT VOID *Buffer, - IN UINTN Length, - IN UINT8 Value - ); - -/** - Fills a target buffer with a 16-bit value, and returns the target buffer. - - @param Buffer Pointer to the target buffer to fill. - @param Length Number of bytes in Buffer to fill. - @param Value Value with which to fill Length bytes of Buffer. - - @return Buffer - -**/ -VOID * -EFIAPI -InternalMemSetMem16 ( - OUT VOID *Buffer, - IN UINTN Length, - IN UINT16 Value - ); - -/** - Fills a target buffer with a 32-bit value, and returns the target buffer. - - @param Buffer Pointer to the target buffer to fill. - @param Length Number of bytes in Buffer to fill. - @param Value Value with which to fill Length bytes of Buffer. - - @return Buffer - -**/ -VOID * -EFIAPI -InternalMemSetMem32 ( - OUT VOID *Buffer, - IN UINTN Length, - IN UINT32 Value - ); - -/** - Fills a target buffer with a 64-bit value, and returns the target buffer. - - @param Buffer Pointer to the target buffer to fill. - @param Length Number of bytes in Buffer to fill. - @param Value Value with which to fill Length bytes of Buffer. - - @return Buffer - -**/ -VOID * -EFIAPI -InternalMemSetMem64 ( - OUT VOID *Buffer, - IN UINTN Length, - IN UINT64 Value - ); - -/** - Set Buffer to 0 for Size bytes. - - @param Buffer Memory to set. - @param Size Number of bytes to set - - @return Buffer - -**/ -VOID * -EFIAPI -InternalMemZeroMem ( - OUT VOID *Buffer, - IN UINTN Length - ); - -/** - Compares two memory buffers of a given length. - - @param DestinationBuffer First memory buffer - @param SourceBuffer Second memory buffer - @param Length Length of DestinationBuffer and SourceBuffer memory - regions to compare. Must be non-zero. - - @retval 0 if MemOne == MemTwo - -**/ -INTN -EFIAPI -InternalMemCompareMem ( - IN CONST VOID *DestinationBuffer, - IN CONST VOID *SourceBuffer, - IN UINTN Length - ); - -/** - Scans a target buffer for an 8-bit value, and returns a pointer to the - matching 8-bit value in the target buffer. - - @param Buffer Pointer to the target buffer to scan. - @param Length Number of bytes in Buffer to scan. Must be non-zero. - @param Value Value to search for in the target buffer. - - @return Pointer to the first occurrence or NULL if not found. - -**/ -CONST VOID * -EFIAPI -InternalMemScanMem8 ( - IN CONST VOID *Buffer, - IN UINTN Length, - IN UINT8 Value - ); - -/** - Scans a target buffer for a 16-bit value, and returns a pointer to the - matching 16-bit value in the target buffer. - - @param Buffer Pointer to the target buffer to scan. - @param Length Number of bytes in Buffer to scan. Must be non-zero. - @param Value Value to search for in the target buffer. - - @return Pointer to the first occurrence or NULL if not found. - -**/ -CONST VOID * -EFIAPI -InternalMemScanMem16 ( - IN CONST VOID *Buffer, - IN UINTN Length, - IN UINT16 Value - ); - -/** - Scans a target buffer for a 32-bit value, and returns a pointer to the - matching 32-bit value in the target buffer. - - @param Buffer Pointer to the target buffer to scan. - @param Length Number of bytes in Buffer to scan. Must be non-zero. - @param Value Value to search for in the target buffer. - - @return Pointer to the first occurrence or NULL if not found. - -**/ -CONST VOID * -EFIAPI -InternalMemScanMem32 ( - IN CONST VOID *Buffer, - IN UINTN Length, - IN UINT32 Value - ); - -/** - Scans a target buffer for a 64-bit value, and returns a pointer to the - matching 64-bit value in the target buffer. - - @param Buffer Pointer to the target buffer to scan. - @param Length Number of bytes in Buffer to scan. Must be non-zero. - @param Value Value to search for in the target buffer. - - @return Pointer to the first occurrence or NULL if not found. - -**/ -CONST VOID * -EFIAPI -InternalMemScanMem64 ( - IN CONST VOID *Buffer, - IN UINTN Length, - IN UINT64 Value - ); - -/** - Copy Length bytes from Source to Destination. - - This function copies Length bytes from SourceBuffer to DestinationBuffer, and - returns DestinationBuffer. The implementation must be reentrant, and it must - handle the case where SourceBuffer overlaps DestinationBuffer. - - If Length is greater than (MAX_ADDRESS - DestinationBuffer + 1), then - ASSERT(). - If Length is greater than (MAX_ADDRESS - SourceBuffer + 1), then ASSERT(). - - @param Destination Target of copy - @param Source Place to copy from - @param Length Number of bytes to copy - - @return Destination - -**/ -VOID * -EFIAPI -CopyMem ( - OUT VOID *Destination, - IN CONST VOID *Source, - IN UINTN Length - ) -{ - ASSERT (Length <= MAX_ADDRESS - (UINTN)Destination + 1); - ASSERT (Length <= MAX_ADDRESS - (UINTN)Source + 1); - return InternalMemCopyMem (Destination, Source, Length); -} - -/** - Set Buffer to Value for Size bytes. - - This function fills Length bytes of Buffer with Value, and returns Buffer. - - If Length is greater than (MAX_ADDRESS - Buffer + 1), then ASSERT(). - - @param Buffer Memory to set. - @param Size Number of bytes to set - @param Value Value of the set operation. - - @return Buffer - -**/ -VOID * -EFIAPI -SetMem ( - IN VOID *Buffer, - IN UINTN Size, - IN UINT8 Value - ) -{ - ASSERT (Size <= MAX_ADDRESS - (UINTN)Buffer + 1); - return InternalMemSetMem (Buffer, Size, Value); -} - -/** - Fills a target buffer with a 16-bit value, and returns the target buffer. - - This function fills Length bytes of Buffer with the 16-bit value specified by - Value, and returns Buffer. Value is repeated every 16-bits in for Length - bytes of Buffer. - - If Buffer is NULL and Length > 0, then ASSERT(). - If Length is greater than (MAX_ADDRESS - Buffer + 1), then ASSERT(). - If Buffer is not aligned on a 16-bit boundary, then ASSERT(). - If Length is not aligned on a 16-bit boundary, then ASSERT(). - - @param Buffer Pointer to the target buffer to fill. - @param Length Number of bytes in Buffer to fill. - @param Value Value with which to fill Length bytes of Buffer. - - @return Buffer - -**/ -VOID * -EFIAPI -SetMem16 ( - OUT VOID *Buffer, - IN UINTN Length, - IN UINT16 Value - ) -{ - ASSERT (Buffer != NULL); - ASSERT (Length <= MAX_ADDRESS - (UINTN)Buffer + 1); - ASSERT ((((UINTN)Buffer) & 1) != 0); - ASSERT ((Length & 1) != 0); - - if ((Length /= sizeof (Value)) == 0) { - return Buffer; - } - return InternalMemSetMem16 (Buffer, Length, Value); -} - -/** - Fills a target buffer with a 32-bit value, and returns the target buffer. - - This function fills Length bytes of Buffer with the 32-bit value specified by - Value, and returns Buffer. Value is repeated every 32-bits in for Length - bytes of Buffer. - - If Buffer is NULL and Length > 0, then ASSERT(). - If Length is greater than (MAX_ADDRESS - Buffer + 1), then ASSERT(). - If Buffer is not aligned on a 32-bit boundary, then ASSERT(). - If Length is not aligned on a 32-bit boundary, then ASSERT(). - - @param Buffer Pointer to the target buffer to fill. - @param Length Number of bytes in Buffer to fill. - @param Value Value with which to fill Length bytes of Buffer. - - @return Buffer - -**/ -VOID * -EFIAPI -SetMem32 ( - OUT VOID *Buffer, - IN UINTN Length, - IN UINT32 Value - ) -{ - ASSERT (Buffer != NULL); - ASSERT (Length <= MAX_ADDRESS - (UINTN)Buffer + 1); - ASSERT ((((UINTN)Buffer) & 1) != 0); - ASSERT ((Length & 1) != 0); - - if ((Length /= sizeof (Value)) == 0) { - return Buffer; - } - return InternalMemSetMem32 (Buffer, Length, Value); -} - -/** - Fills a target buffer with a 64-bit value, and returns the target buffer. - - This function fills Length bytes of Buffer with the 64-bit value specified by - Value, and returns Buffer. Value is repeated every 64-bits in for Length - bytes of Buffer. - - If Buffer is NULL and Length > 0, then ASSERT(). - If Length is greater than (MAX_ADDRESS - Buffer + 1), then ASSERT(). - If Buffer is not aligned on a 64-bit boundary, then ASSERT(). - If Length is not aligned on a 64-bit boundary, then ASSERT(). - - @param Buffer Pointer to the target buffer to fill. - @param Length Number of bytes in Buffer to fill. - @param Value Value with which to fill Length bytes of Buffer. - - @return Buffer - -**/ -VOID * -EFIAPI -SetMem64 ( - OUT VOID *Buffer, - IN UINTN Length, - IN UINT64 Value - ) -{ - ASSERT (Buffer != NULL); - ASSERT (Length <= MAX_ADDRESS - (UINTN)Buffer + 1); - ASSERT ((((UINTN)Buffer) & 1) != 0); - ASSERT ((Length & 1) != 0); - - if ((Length /= sizeof (Value)) == 0) { - return Buffer; - } - return InternalMemSetMem64 (Buffer, Length, Value); -} - -/** - Set Buffer to 0 for Size bytes. - - This function fills Length bytes of Buffer with zeros, and returns Buffer. - - If Buffer is NULL and Length > 0, then ASSERT(). - If Length is greater than (MAX_ADDRESS - Buffer + 1), then ASSERT(). - - @param Buffer Memory to set. - @param Size Number of bytes to set - - @return Buffer - -**/ -VOID * -EFIAPI -ZeroMem ( - IN VOID *Buffer, - IN UINTN Size - ) -{ - ASSERT (Buffer != NULL); - return InternalMemSetMem (Buffer, Size, 0); -} - -/** - Compares two memory buffers of a given length. - - This function compares Length bytes of SourceBuffer to Length bytes of - DestinationBuffer. If all Length bytes of the two buffers are identical, then - 0 is returned. Otherwise, the value returned is the first mismatched byte in - SourceBuffer subtracted from the first mismatched byte in DestinationBuffer. - - If DestinationBuffer is NULL and Length > 0, then ASSERT(). - If SourceBuffer is NULL and Length > 0, then ASSERT(). - If Length is greater than (MAX_ADDRESS - DestinationBuffer + 1), then - ASSERT(). - If Length is greater than (MAX_ADDRESS - SourceBuffer + 1), then ASSERT(). - - @param DestinationBuffer First memory buffer - @param SourceBuffer Second memory buffer - @param Length Length of DestinationBuffer and SourceBuffer memory - regions to compare - - @retval 0 if DestinationBuffer == SourceBuffer - @retval Non-zero if DestinationBuffer != SourceBuffer - -**/ -INTN -EFIAPI -CompareMem ( - IN CONST VOID *DestinationBuffer, - IN CONST VOID *SourceBuffer, - IN UINTN Length - ) -{ - ASSERT (DestinationBuffer != NULL); - ASSERT (SourceBuffer != NULL); - ASSERT (Length <= MAX_ADDRESS - (UINTN)DestinationBuffer + 1); - ASSERT (Length <= MAX_ADDRESS - (UINTN)SourceBuffer + 1); - if (Length == 0) { - return 0; - } - return InternalMemCompareMem (DestinationBuffer, SourceBuffer, Length); -} - -/** - Scans a target buffer for an 8-bit value, and returns a pointer to the - matching 8-bit value in the target buffer. - - This function searches target the buffer specified by Buffer and Length from - the lowest address to the highest address for an 8-bit value that matches - Value. If a match is found, then a pointer to the matching byte in the target - buffer is returned. If no match is found, then NULL is returned. If Length is - 0, then NULL is returned. - - If Buffer is NULL, then ASSERT(). - If Length is greater than (MAX_ADDRESS - Buffer + 1), then ASSERT(). - - @param Buffer Pointer to the target buffer to scan. - @param Length Number of bytes in Buffer to scan. - @param Value Value to search for in the target buffer. - - @return Pointer to the first occurrence or NULL if not found. - @retval NULL if Length == 0 or Value was not found. - -**/ -VOID * -EFIAPI -ScanMem8 ( - IN CONST VOID *Buffer, - IN UINTN Length, - IN UINT8 Value - ) -{ - ASSERT (Buffer != NULL); - ASSERT (Length <= MAX_ADDRESS + (UINTN)Buffer + 1); - - if ((Length /= sizeof (Value)) == 0) { - return NULL; - } - return (VOID*)InternalMemScanMem8 (Buffer, Length, Value); -} - -/** - Scans a target buffer for a 16-bit value, and returns a pointer to the - matching 16-bit value in the target buffer. - - This function searches target the buffer specified by Buffer and Length from - the lowest address to the highest address at 16-bit increments for a 16-bit - value that matches Value. If a match is found, then a pointer to the matching - value in the target buffer is returned. If no match is found, then NULL is - returned. If Length is 0, then NULL is returned. - - If Buffer is NULL, then ASSERT(). - If Buffer is not aligned on a 16-bit boundary, then ASSERT(). - If Length is greater than (MAX_ADDRESS - Buffer + 1), then ASSERT(). - - @param Buffer Pointer to the target buffer to scan. - @param Length Number of bytes in Buffer to scan. - @param Value Value to search for in the target buffer. - - @return Pointer to the first occurrence. - @retval NULL if Length == 0 or Value was not found. - -**/ -VOID * -EFIAPI -ScanMem16 ( - IN CONST VOID *Buffer, - IN UINTN Length, - IN UINT16 Value - ) -{ - ASSERT (Buffer != NULL); - ASSERT (((UINTN)Buffer & (sizeof (Value) - 1)) == 0); - ASSERT (Length <= MAX_ADDRESS + (UINTN)Buffer + 1); - - if ((Length /= sizeof (Value)) == 0) { - return NULL; - } - return (VOID*)InternalMemScanMem16 (Buffer, Length, Value); -} - -/** - Scans a target buffer for a 32-bit value, and returns a pointer to the - matching 32-bit value in the target buffer. - - This function searches target the buffer specified by Buffer and Length from - the lowest address to the highest address at 32-bit increments for a 32-bit - value that matches Value. If a match is found, then a pointer to the matching - value in the target buffer is returned. If no match is found, then NULL is - returned. If Length is 0, then NULL is returned. - - If Buffer is NULL, then ASSERT(). - If Buffer is not aligned on a 32-bit boundary, then ASSERT(). - If Length is greater than (MAX_ADDRESS - Buffer + 1), then ASSERT(). - - @param Buffer Pointer to the target buffer to scan. - @param Length Number of bytes in Buffer to scan. - @param Value Value to search for in the target buffer. - - @return Pointer to the first occurrence or NULL if not found. - @retval NULL if Length == 0 or Value was not found. - -**/ -VOID * -EFIAPI -ScanMem32 ( - IN CONST VOID *Buffer, - IN UINTN Length, - IN UINT32 Value - ) -{ - ASSERT (Buffer != NULL); - ASSERT (((UINTN)Buffer & (sizeof (Value) - 1)) == 0); - ASSERT (Length <= MAX_ADDRESS + (UINTN)Buffer + 1); - - if ((Length /= sizeof (Value)) == 0) { - return NULL; - } - return (VOID*)InternalMemScanMem32 (Buffer, Length, Value); -} - -/** - Scans a target buffer for a 64-bit value, and returns a pointer to the - matching 64-bit value in the target buffer. - - This function searches target the buffer specified by Buffer and Length from - the lowest address to the highest address at 64-bit increments for a 64-bit - value that matches Value. If a match is found, then a pointer to the matching - value in the target buffer is returned. If no match is found, then NULL is - returned. If Length is 0, then NULL is returned. - - If Buffer is NULL, then ASSERT(). - If Buffer is not aligned on a 64-bit boundary, then ASSERT(). - If Length is greater than (MAX_ADDRESS - Buffer + 1), then ASSERT(). - - @param Buffer Pointer to the target buffer to scan. - @param Length Number of bytes in Buffer to scan. - @param Value Value to search for in the target buffer. - - @return Pointer to the first occurrence or NULL if not found. - @retval NULL if Length == 0 or Value was not found. - -**/ -VOID * -EFIAPI -ScanMem64 ( - IN CONST VOID *Buffer, - IN UINTN Length, - IN UINT64 Value - ) -{ - ASSERT (Buffer != NULL); - ASSERT (((UINTN)Buffer & (sizeof (Value) - 1)) == 0); - ASSERT (Length <= MAX_ADDRESS + (UINTN)Buffer + 1); - - if ((Length /= sizeof (Value)) == 0) { - return NULL; - } - return (VOID*)InternalMemScanMem64 (Buffer, Length, Value); -} diff --git a/MdePkg/Library/BaseMemoryLibRepStr/ScanMem16Wrapper.c b/MdePkg/Library/BaseMemoryLibRepStr/ScanMem16Wrapper.c new file mode 100644 index 0000000000..a17705db1d --- /dev/null +++ b/MdePkg/Library/BaseMemoryLibRepStr/ScanMem16Wrapper.c @@ -0,0 +1,66 @@ +/** @file + ScanMem16() implementation. + + 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: ScanMem16Wrapper.c + + The following BaseMemoryLib instances share the same version of this file: + + BaseMemoryLib + BaseMemoryLibMmx + BaseMemoryLibSse2 + BaseMemoryLibRepStr + PeiMemoryLib + UefiMemoryLib + +**/ + +#include "MemLibInternals.h" + +/** + Scans a target buffer for a 16-bit value, and returns a pointer to the + matching 16-bit value in the target buffer. + + This function searches target the buffer specified by Buffer and Length from + the lowest address to the highest address at 16-bit increments for a 16-bit + value that matches Value. If a match is found, then a pointer to the matching + value in the target buffer is returned. If no match is found, then NULL is + returned. If Length is 0, then NULL is returned. + + If Buffer is NULL, then ASSERT(). + If Buffer is not aligned on a 16-bit boundary, then ASSERT(). + If Length is greater than (MAX_ADDRESS - Buffer + 1), then ASSERT(). + + @param Buffer Pointer to the target buffer to scan. + @param Length Number of bytes in Buffer to scan. + @param Value Value to search for in the target buffer. + + @return Pointer to the first occurrence. + @retval NULL if Length == 0 or Value was not found. + +**/ +VOID * +EFIAPI +ScanMem16 ( + IN CONST VOID *Buffer, + IN UINTN Length, + IN UINT16 Value + ) +{ + ASSERT (Buffer != NULL); + ASSERT (((UINTN)Buffer & (sizeof (Value) - 1)) == 0); + ASSERT (Length <= MAX_ADDRESS + (UINTN)Buffer + 1); + + if ((Length /= sizeof (Value)) == 0) { + return NULL; + } + return (VOID*)InternalMemScanMem16 (Buffer, Length, Value); +} diff --git a/MdePkg/Library/BaseMemoryLibRepStr/ScanMem32Wrapper.c b/MdePkg/Library/BaseMemoryLibRepStr/ScanMem32Wrapper.c new file mode 100644 index 0000000000..67eb84d8ef --- /dev/null +++ b/MdePkg/Library/BaseMemoryLibRepStr/ScanMem32Wrapper.c @@ -0,0 +1,66 @@ +/** @file + ScanMem32() implementation. + + 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: ScanMem32Wrapper.c + + The following BaseMemoryLib instances share the same version of this file: + + BaseMemoryLib + BaseMemoryLibMmx + BaseMemoryLibSse2 + BaseMemoryLibRepStr + PeiMemoryLib + UefiMemoryLib + +**/ + +#include "MemLibInternals.h" + +/** + Scans a target buffer for a 32-bit value, and returns a pointer to the + matching 32-bit value in the target buffer. + + This function searches target the buffer specified by Buffer and Length from + the lowest address to the highest address at 32-bit increments for a 32-bit + value that matches Value. If a match is found, then a pointer to the matching + value in the target buffer is returned. If no match is found, then NULL is + returned. If Length is 0, then NULL is returned. + + If Buffer is NULL, then ASSERT(). + If Buffer is not aligned on a 32-bit boundary, then ASSERT(). + If Length is greater than (MAX_ADDRESS - Buffer + 1), then ASSERT(). + + @param Buffer Pointer to the target buffer to scan. + @param Length Number of bytes in Buffer to scan. + @param Value Value to search for in the target buffer. + + @return Pointer to the first occurrence or NULL if not found. + @retval NULL if Length == 0 or Value was not found. + +**/ +VOID * +EFIAPI +ScanMem32 ( + IN CONST VOID *Buffer, + IN UINTN Length, + IN UINT32 Value + ) +{ + ASSERT (Buffer != NULL); + ASSERT (((UINTN)Buffer & (sizeof (Value) - 1)) == 0); + ASSERT (Length <= MAX_ADDRESS + (UINTN)Buffer + 1); + + if ((Length /= sizeof (Value)) == 0) { + return NULL; + } + return (VOID*)InternalMemScanMem32 (Buffer, Length, Value); +} diff --git a/MdePkg/Library/BaseMemoryLibRepStr/ScanMem64Wrapper.c b/MdePkg/Library/BaseMemoryLibRepStr/ScanMem64Wrapper.c new file mode 100644 index 0000000000..c5f0762ebe --- /dev/null +++ b/MdePkg/Library/BaseMemoryLibRepStr/ScanMem64Wrapper.c @@ -0,0 +1,66 @@ +/** @file + ScanMem64() implementation. + + 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: ScanMem64Wrapper.c + + The following BaseMemoryLib instances share the same version of this file: + + BaseMemoryLib + BaseMemoryLibMmx + BaseMemoryLibSse2 + BaseMemoryLibRepStr + PeiMemoryLib + UefiMemoryLib + +**/ + +#include "MemLibInternals.h" + +/** + Scans a target buffer for a 64-bit value, and returns a pointer to the + matching 64-bit value in the target buffer. + + This function searches target the buffer specified by Buffer and Length from + the lowest address to the highest address at 64-bit increments for a 64-bit + value that matches Value. If a match is found, then a pointer to the matching + value in the target buffer is returned. If no match is found, then NULL is + returned. If Length is 0, then NULL is returned. + + If Buffer is NULL, then ASSERT(). + If Buffer is not aligned on a 64-bit boundary, then ASSERT(). + If Length is greater than (MAX_ADDRESS - Buffer + 1), then ASSERT(). + + @param Buffer Pointer to the target buffer to scan. + @param Length Number of bytes in Buffer to scan. + @param Value Value to search for in the target buffer. + + @return Pointer to the first occurrence or NULL if not found. + @retval NULL if Length == 0 or Value was not found. + +**/ +VOID * +EFIAPI +ScanMem64 ( + IN CONST VOID *Buffer, + IN UINTN Length, + IN UINT64 Value + ) +{ + ASSERT (Buffer != NULL); + ASSERT (((UINTN)Buffer & (sizeof (Value) - 1)) == 0); + ASSERT (Length <= MAX_ADDRESS + (UINTN)Buffer + 1); + + if ((Length /= sizeof (Value)) == 0) { + return NULL; + } + return (VOID*)InternalMemScanMem64 (Buffer, Length, Value); +} diff --git a/MdePkg/Library/BaseMemoryLibRepStr/ScanMem8Wrapper.c b/MdePkg/Library/BaseMemoryLibRepStr/ScanMem8Wrapper.c new file mode 100644 index 0000000000..9b817b1b0e --- /dev/null +++ b/MdePkg/Library/BaseMemoryLibRepStr/ScanMem8Wrapper.c @@ -0,0 +1,64 @@ +/** @file + ScanMem8() implementation. + + 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: ScanMem8Wrapper.c + + The following BaseMemoryLib instances share the same version of this file: + + BaseMemoryLib + BaseMemoryLibMmx + BaseMemoryLibSse2 + BaseMemoryLibRepStr + PeiMemoryLib + UefiMemoryLib + +**/ + +#include "MemLibInternals.h" + +/** + Scans a target buffer for an 8-bit value, and returns a pointer to the + matching 8-bit value in the target buffer. + + This function searches target the buffer specified by Buffer and Length from + the lowest address to the highest address for an 8-bit value that matches + Value. If a match is found, then a pointer to the matching byte in the target + buffer is returned. If no match is found, then NULL is returned. If Length is + 0, then NULL is returned. + + If Buffer is NULL, then ASSERT(). + If Length is greater than (MAX_ADDRESS - Buffer + 1), then ASSERT(). + + @param Buffer Pointer to the target buffer to scan. + @param Length Number of bytes in Buffer to scan. + @param Value Value to search for in the target buffer. + + @return Pointer to the first occurrence or NULL if not found. + @retval NULL if Length == 0 or Value was not found. + +**/ +VOID * +EFIAPI +ScanMem8 ( + IN CONST VOID *Buffer, + IN UINTN Length, + IN UINT8 Value + ) +{ + ASSERT (Buffer != NULL); + ASSERT (Length <= MAX_ADDRESS + (UINTN)Buffer + 1); + + if ((Length /= sizeof (Value)) == 0) { + return NULL; + } + return (VOID*)InternalMemScanMem8 (Buffer, Length, Value); +} diff --git a/MdePkg/Library/BaseMemoryLibRepStr/SetMem16Wrapper.c b/MdePkg/Library/BaseMemoryLibRepStr/SetMem16Wrapper.c new file mode 100644 index 0000000000..827e6ecf67 --- /dev/null +++ b/MdePkg/Library/BaseMemoryLibRepStr/SetMem16Wrapper.c @@ -0,0 +1,64 @@ +/** @file + SetMem16() implementation. + + 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: SetMem16Wrapper.c + + The following BaseMemoryLib instances share the same version of this file: + + BaseMemoryLib + BaseMemoryLibMmx + BaseMemoryLibSse2 + BaseMemoryLibRepStr + PeiMemoryLib + UefiMemoryLib + +**/ + +#include "MemLibInternals.h" + +/** + Fills a target buffer with a 16-bit value, and returns the target buffer. + + This function fills Length bytes of Buffer with the 16-bit value specified by + Value, and returns Buffer. Value is repeated every 16-bits in for Length + bytes of Buffer. + + If Buffer is NULL and Length > 0, then ASSERT(). + If Length is greater than (MAX_ADDRESS - Buffer + 1), then ASSERT(). + If Buffer is not aligned on a 16-bit boundary, then ASSERT(). + If Length is not aligned on a 16-bit boundary, then ASSERT(). + + @param Buffer Pointer to the target buffer to fill. + @param Length Number of bytes in Buffer to fill. + @param Value Value with which to fill Length bytes of Buffer. + + @return Buffer + +**/ +VOID * +EFIAPI +SetMem16 ( + OUT VOID *Buffer, + IN UINTN Length, + IN UINT16 Value + ) +{ + ASSERT (Buffer != NULL); + ASSERT (Length <= MAX_ADDRESS - (UINTN)Buffer + 1); + ASSERT ((((UINTN)Buffer) & 1) != 0); + ASSERT ((Length & 1) != 0); + + if ((Length /= sizeof (Value)) == 0) { + return Buffer; + } + return InternalMemSetMem16 (Buffer, Length, Value); +} diff --git a/MdePkg/Library/BaseMemoryLibRepStr/SetMem32Wrapper.c b/MdePkg/Library/BaseMemoryLibRepStr/SetMem32Wrapper.c new file mode 100644 index 0000000000..4b9d2413eb --- /dev/null +++ b/MdePkg/Library/BaseMemoryLibRepStr/SetMem32Wrapper.c @@ -0,0 +1,64 @@ +/** @file + SetMem32() implementation. + + 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: SetMem32Wrapper.c + + The following BaseMemoryLib instances share the same version of this file: + + BaseMemoryLib + BaseMemoryLibMmx + BaseMemoryLibSse2 + BaseMemoryLibRepStr + PeiMemoryLib + UefiMemoryLib + +**/ + +#include "MemLibInternals.h" + +/** + Fills a target buffer with a 32-bit value, and returns the target buffer. + + This function fills Length bytes of Buffer with the 32-bit value specified by + Value, and returns Buffer. Value is repeated every 32-bits in for Length + bytes of Buffer. + + If Buffer is NULL and Length > 0, then ASSERT(). + If Length is greater than (MAX_ADDRESS - Buffer + 1), then ASSERT(). + If Buffer is not aligned on a 32-bit boundary, then ASSERT(). + If Length is not aligned on a 32-bit boundary, then ASSERT(). + + @param Buffer Pointer to the target buffer to fill. + @param Length Number of bytes in Buffer to fill. + @param Value Value with which to fill Length bytes of Buffer. + + @return Buffer + +**/ +VOID * +EFIAPI +SetMem32 ( + OUT VOID *Buffer, + IN UINTN Length, + IN UINT32 Value + ) +{ + ASSERT (Buffer != NULL); + ASSERT (Length <= MAX_ADDRESS - (UINTN)Buffer + 1); + ASSERT ((((UINTN)Buffer) & 1) != 0); + ASSERT ((Length & 1) != 0); + + if ((Length /= sizeof (Value)) == 0) { + return Buffer; + } + return InternalMemSetMem32 (Buffer, Length, Value); +} diff --git a/MdePkg/Library/BaseMemoryLibRepStr/SetMem64Wrapper.c b/MdePkg/Library/BaseMemoryLibRepStr/SetMem64Wrapper.c new file mode 100644 index 0000000000..dbf3b62782 --- /dev/null +++ b/MdePkg/Library/BaseMemoryLibRepStr/SetMem64Wrapper.c @@ -0,0 +1,64 @@ +/** @file + SetMem64() implementation. + + 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: SetMem64Wrapper.c + + The following BaseMemoryLib instances share the same version of this file: + + BaseMemoryLib + BaseMemoryLibMmx + BaseMemoryLibSse2 + BaseMemoryLibRepStr + PeiMemoryLib + UefiMemoryLib + +**/ + +#include "MemLibInternals.h" + +/** + Fills a target buffer with a 64-bit value, and returns the target buffer. + + This function fills Length bytes of Buffer with the 64-bit value specified by + Value, and returns Buffer. Value is repeated every 64-bits in for Length + bytes of Buffer. + + If Buffer is NULL and Length > 0, then ASSERT(). + If Length is greater than (MAX_ADDRESS - Buffer + 1), then ASSERT(). + If Buffer is not aligned on a 64-bit boundary, then ASSERT(). + If Length is not aligned on a 64-bit boundary, then ASSERT(). + + @param Buffer Pointer to the target buffer to fill. + @param Length Number of bytes in Buffer to fill. + @param Value Value with which to fill Length bytes of Buffer. + + @return Buffer + +**/ +VOID * +EFIAPI +SetMem64 ( + OUT VOID *Buffer, + IN UINTN Length, + IN UINT64 Value + ) +{ + ASSERT (Buffer != NULL); + ASSERT (Length <= MAX_ADDRESS - (UINTN)Buffer + 1); + ASSERT ((((UINTN)Buffer) & 1) != 0); + ASSERT ((Length & 1) != 0); + + if ((Length /= sizeof (Value)) == 0) { + return Buffer; + } + return InternalMemSetMem64 (Buffer, Length, Value); +} diff --git a/MdePkg/Library/BaseMemoryLibRepStr/SetMemWrapper.c b/MdePkg/Library/BaseMemoryLibRepStr/SetMemWrapper.c new file mode 100644 index 0000000000..294a27a753 --- /dev/null +++ b/MdePkg/Library/BaseMemoryLibRepStr/SetMemWrapper.c @@ -0,0 +1,52 @@ +/** @file + SetMem() implementation. + + 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: SetMemWrapper.c + + The following BaseMemoryLib instances share the same version of this file: + + BaseMemoryLib + BaseMemoryLibMmx + BaseMemoryLibSse2 + BaseMemoryLibRepStr + PeiMemoryLib + UefiMemoryLib + +**/ + +#include "MemLibInternals.h" + +/** + Set Buffer to Value for Size bytes. + + This function fills Length bytes of Buffer with Value, and returns Buffer. + + If Length is greater than (MAX_ADDRESS - Buffer + 1), then ASSERT(). + + @param Buffer Memory to set. + @param Size Number of bytes to set + @param Value Value of the set operation. + + @return Buffer + +**/ +VOID * +EFIAPI +SetMem ( + IN VOID *Buffer, + IN UINTN Size, + IN UINT8 Value + ) +{ + ASSERT (Size <= MAX_ADDRESS - (UINTN)Buffer + 1); + return InternalMemSetMem (Buffer, Size, Value); +} diff --git a/MdePkg/Library/BaseMemoryLibRepStr/ZeroMemWrapper.c b/MdePkg/Library/BaseMemoryLibRepStr/ZeroMemWrapper.c new file mode 100644 index 0000000000..d7d7919ba2 --- /dev/null +++ b/MdePkg/Library/BaseMemoryLibRepStr/ZeroMemWrapper.c @@ -0,0 +1,51 @@ +/** @file + ZeroMem() implementation. + + 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: ZeroMemWrapper.c + + The following BaseMemoryLib instances share the same version of this file: + + BaseMemoryLib + BaseMemoryLibMmx + BaseMemoryLibSse2 + BaseMemoryLibRepStr + PeiMemoryLib + UefiMemoryLib + +**/ + +#include "MemLibInternals.h" + +/** + Set Buffer to 0 for Size bytes. + + This function fills Length bytes of Buffer with zeros, and returns Buffer. + + If Buffer is NULL and Length > 0, then ASSERT(). + If Length is greater than (MAX_ADDRESS - Buffer + 1), then ASSERT(). + + @param Buffer Memory to set. + @param Size Number of bytes to set + + @return Buffer + +**/ +VOID * +EFIAPI +ZeroMem ( + IN VOID *Buffer, + IN UINTN Size + ) +{ + ASSERT (Buffer != NULL); + return InternalMemSetMem (Buffer, Size, 0); +} diff --git a/MdePkg/Library/BaseMemoryLibSse2/BaseMemoryLibSse2.msa b/MdePkg/Library/BaseMemoryLibSse2/BaseMemoryLibSse2.msa index a208b2c40c..5798a77116 100644 --- a/MdePkg/Library/BaseMemoryLibSse2/BaseMemoryLibSse2.msa +++ b/MdePkg/Library/BaseMemoryLibSse2/BaseMemoryLibSse2.msa @@ -38,7 +38,17 @@ WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED. MemLibGuid.c - MemLibWrapper.c + CopyMemWrapper.c + SetMemWrapper.c + SetMem16Wrapper.c + SetMem32Wrapper.c + SetMem64Wrapper.c + CompareMemWrapper.c + ZeroMemWrapper.c + ScanMem8Wrapper.c + ScanMem16Wrapper.c + ScanMem32Wrapper.c + ScanMem64Wrapper.c Ia32/CopyMem.asm Ia32/SetMem.asm Ia32/SetMem16.asm @@ -53,7 +63,17 @@ WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED. MemLibGuid.c - MemLibWrapper.c + CopyMemWrapper.c + SetMemWrapper.c + SetMem16Wrapper.c + SetMem32Wrapper.c + SetMem64Wrapper.c + CompareMemWrapper.c + ZeroMemWrapper.c + ScanMem8Wrapper.c + ScanMem16Wrapper.c + ScanMem32Wrapper.c + ScanMem64Wrapper.c x64/CopyMem.asm x64/SetMem.asm x64/SetMem16.asm diff --git a/MdePkg/Library/BaseMemoryLibSse2/CompareMemWrapper.c b/MdePkg/Library/BaseMemoryLibSse2/CompareMemWrapper.c new file mode 100644 index 0000000000..c8199d8dc3 --- /dev/null +++ b/MdePkg/Library/BaseMemoryLibSse2/CompareMemWrapper.c @@ -0,0 +1,67 @@ +/** @file + CompareMem() implementation. + + 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: CompareMemWrapper.c + + The following BaseMemoryLib instances share the same version of this file: + + BaseMemoryLib + BaseMemoryLibMmx + BaseMemoryLibSse2 + BaseMemoryLibRepStr + PeiMemoryLib + UefiMemoryLib + +**/ + +#include "MemLibInternals.h" + +/** + Compares two memory buffers of a given length. + + This function compares Length bytes of SourceBuffer to Length bytes of + DestinationBuffer. If all Length bytes of the two buffers are identical, then + 0 is returned. Otherwise, the value returned is the first mismatched byte in + SourceBuffer subtracted from the first mismatched byte in DestinationBuffer. + + If DestinationBuffer is NULL and Length > 0, then ASSERT(). + If SourceBuffer is NULL and Length > 0, then ASSERT(). + If Length is greater than (MAX_ADDRESS - DestinationBuffer + 1), then + ASSERT(). + If Length is greater than (MAX_ADDRESS - SourceBuffer + 1), then ASSERT(). + + @param DestinationBuffer First memory buffer + @param SourceBuffer Second memory buffer + @param Length Length of DestinationBuffer and SourceBuffer memory + regions to compare + + @retval 0 if DestinationBuffer == SourceBuffer + @retval Non-zero if DestinationBuffer != SourceBuffer + +**/ +INTN +EFIAPI +CompareMem ( + IN CONST VOID *DestinationBuffer, + IN CONST VOID *SourceBuffer, + IN UINTN Length + ) +{ + ASSERT (DestinationBuffer != NULL); + ASSERT (SourceBuffer != NULL); + ASSERT (Length <= MAX_ADDRESS - (UINTN)DestinationBuffer + 1); + ASSERT (Length <= MAX_ADDRESS - (UINTN)SourceBuffer + 1); + if (Length == 0) { + return 0; + } + return InternalMemCompareMem (DestinationBuffer, SourceBuffer, Length); +} diff --git a/MdePkg/Library/BaseMemoryLibSse2/CopyMemWrapper.c b/MdePkg/Library/BaseMemoryLibSse2/CopyMemWrapper.c new file mode 100644 index 0000000000..5ca62f5047 --- /dev/null +++ b/MdePkg/Library/BaseMemoryLibSse2/CopyMemWrapper.c @@ -0,0 +1,66 @@ +/** @file + CopyMem() implementation. + + 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: CopyMemWrapper.c + + The following BaseMemoryLib instances share the same version of this file: + + BaseMemoryLib + BaseMemoryLibMmx + BaseMemoryLibSse2 + BaseMemoryLibRepStr + PeiMemoryLib + UefiMemoryLib + +**/ + +#include "MemLibInternals.h" + +/** + Copy Length bytes from Source to Destination. + + This function copies Length bytes from SourceBuffer to DestinationBuffer, and + returns DestinationBuffer. The implementation must be reentrant, and it must + handle the case where SourceBuffer overlaps DestinationBuffer. + + If Length is greater than (MAX_ADDRESS - DestinationBuffer + 1), then + ASSERT(). + If Length is greater than (MAX_ADDRESS - SourceBuffer + 1), then ASSERT(). + + @param Destination Target of copy + @param Source Place to copy from + @param Length Number of bytes to copy + + @return Destination + +**/ +VOID * +EFIAPI +CopyMem ( + OUT VOID *Destination, + IN CONST VOID *Source, + IN UINTN Length + ) +{ + ASSERT ( + Destination == NULL || + Length <= MAX_ADDRESS - (UINTN)Destination + 1 + ); + ASSERT ( + Source == NULL || + Length <= MAX_ADDRESS - (UINTN)Source + 1 + ); + if (Destination == Source || Length == 0) { + return Destination; + } + return InternalMemCopyMem (Destination, Source, Length); +} diff --git a/MdePkg/Library/BaseMemoryLibSse2/MemLibInternals.h b/MdePkg/Library/BaseMemoryLibSse2/MemLibInternals.h new file mode 100644 index 0000000000..ca7311a407 --- /dev/null +++ b/MdePkg/Library/BaseMemoryLibSse2/MemLibInternals.h @@ -0,0 +1,230 @@ +/** @file + Declaration of internal functions for Base Memory 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: MemLibInternals.h + + The following BaseMemoryLib instances share the same version of this file: + + BaseMemoryLib + BaseMemoryLibMmx + BaseMemoryLibSse2 + BaseMemoryLibRepStr + PeiMemoryLib + UefiMemoryLib + +**/ + +#ifndef __MEM_LIB_INTERNALS__ +#define __MEM_LIB_INTERNALS__ + +/** + Copy Length bytes from Source to Destination. + + @param Destination Target of copy + @param Source Place to copy from + @param Length Number of bytes to copy + + @return Destination + +**/ +VOID * +EFIAPI +InternalMemCopyMem ( + OUT VOID *DestinationBuffer, + IN CONST VOID *SourceBuffer, + IN UINTN Length + ); + +/** + Set Buffer to Value for Size bytes. + + @param Buffer Memory to set. + @param Size Number of bytes to set + @param Value Value of the set operation. + + @return Buffer + +**/ +VOID * +EFIAPI +InternalMemSetMem ( + OUT VOID *Buffer, + IN UINTN Length, + IN UINT8 Value + ); + +/** + Fills a target buffer with a 16-bit value, and returns the target buffer. + + @param Buffer Pointer to the target buffer to fill. + @param Length Number of bytes in Buffer to fill. + @param Value Value with which to fill Length bytes of Buffer. + + @return Buffer + +**/ +VOID * +EFIAPI +InternalMemSetMem16 ( + OUT VOID *Buffer, + IN UINTN Length, + IN UINT16 Value + ); + +/** + Fills a target buffer with a 32-bit value, and returns the target buffer. + + @param Buffer Pointer to the target buffer to fill. + @param Length Number of bytes in Buffer to fill. + @param Value Value with which to fill Length bytes of Buffer. + + @return Buffer + +**/ +VOID * +EFIAPI +InternalMemSetMem32 ( + OUT VOID *Buffer, + IN UINTN Length, + IN UINT32 Value + ); + +/** + Fills a target buffer with a 64-bit value, and returns the target buffer. + + @param Buffer Pointer to the target buffer to fill. + @param Length Number of bytes in Buffer to fill. + @param Value Value with which to fill Length bytes of Buffer. + + @return Buffer + +**/ +VOID * +EFIAPI +InternalMemSetMem64 ( + OUT VOID *Buffer, + IN UINTN Length, + IN UINT64 Value + ); + +/** + Set Buffer to 0 for Size bytes. + + @param Buffer Memory to set. + @param Size Number of bytes to set + + @return Buffer + +**/ +VOID * +EFIAPI +InternalMemZeroMem ( + OUT VOID *Buffer, + IN UINTN Length + ); + +/** + Compares two memory buffers of a given length. + + @param DestinationBuffer First memory buffer + @param SourceBuffer Second memory buffer + @param Length Length of DestinationBuffer and SourceBuffer memory + regions to compare. Must be non-zero. + + @retval 0 if MemOne == MemTwo + +**/ +INTN +EFIAPI +InternalMemCompareMem ( + IN CONST VOID *DestinationBuffer, + IN CONST VOID *SourceBuffer, + IN UINTN Length + ); + +/** + Scans a target buffer for an 8-bit value, and returns a pointer to the + matching 8-bit value in the target buffer. + + @param Buffer Pointer to the target buffer to scan. + @param Length Number of bytes in Buffer to scan. Must be non-zero. + @param Value Value to search for in the target buffer. + + @return Pointer to the first occurrence or NULL if not found. + +**/ +CONST VOID * +EFIAPI +InternalMemScanMem8 ( + IN CONST VOID *Buffer, + IN UINTN Length, + IN UINT8 Value + ); + +/** + Scans a target buffer for a 16-bit value, and returns a pointer to the + matching 16-bit value in the target buffer. + + @param Buffer Pointer to the target buffer to scan. + @param Length Number of bytes in Buffer to scan. Must be non-zero. + @param Value Value to search for in the target buffer. + + @return Pointer to the first occurrence or NULL if not found. + +**/ +CONST VOID * +EFIAPI +InternalMemScanMem16 ( + IN CONST VOID *Buffer, + IN UINTN Length, + IN UINT16 Value + ); + +/** + Scans a target buffer for a 32-bit value, and returns a pointer to the + matching 32-bit value in the target buffer. + + @param Buffer Pointer to the target buffer to scan. + @param Length Number of bytes in Buffer to scan. Must be non-zero. + @param Value Value to search for in the target buffer. + + @return Pointer to the first occurrence or NULL if not found. + +**/ +CONST VOID * +EFIAPI +InternalMemScanMem32 ( + IN CONST VOID *Buffer, + IN UINTN Length, + IN UINT32 Value + ); + +/** + Scans a target buffer for a 64-bit value, and returns a pointer to the + matching 64-bit value in the target buffer. + + @param Buffer Pointer to the target buffer to scan. + @param Length Number of bytes in Buffer to scan. Must be non-zero. + @param Value Value to search for in the target buffer. + + @return Pointer to the first occurrence or NULL if not found. + +**/ +CONST VOID * +EFIAPI +InternalMemScanMem64 ( + IN CONST VOID *Buffer, + IN UINTN Length, + IN UINT64 Value + ); + +#endif diff --git a/MdePkg/Library/BaseMemoryLibSse2/MemLibWrapper.c b/MdePkg/Library/BaseMemoryLibSse2/MemLibWrapper.c deleted file mode 100644 index 2ef0766242..0000000000 --- a/MdePkg/Library/BaseMemoryLibSse2/MemLibWrapper.c +++ /dev/null @@ -1,620 +0,0 @@ -/** @file - Wrapper functions for Base Memory 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: MemLibWrapper.c - - The following BaseMemoryLib instances share the same version of this file: - - BaseMemoryLib - BaseMemoryLibMmx - BaseMemoryLibSse2 - BaseMemoryLibRepStr - PeiMemoryLib - UefiMemoryLib - -**/ - -/** - Copy Length bytes from Source to Destination. - - @param Destination Target of copy - @param Source Place to copy from - @param Length Number of bytes to copy - - @return Destination - -**/ -VOID * -EFIAPI -InternalMemCopyMem ( - OUT VOID *DestinationBuffer, - IN CONST VOID *SourceBuffer, - IN UINTN Length - ); - -/** - Set Buffer to Value for Size bytes. - - @param Buffer Memory to set. - @param Size Number of bytes to set - @param Value Value of the set operation. - - @return Buffer - -**/ -VOID * -EFIAPI -InternalMemSetMem ( - OUT VOID *Buffer, - IN UINTN Length, - IN UINT8 Value - ); - -/** - Fills a target buffer with a 16-bit value, and returns the target buffer. - - @param Buffer Pointer to the target buffer to fill. - @param Length Number of bytes in Buffer to fill. - @param Value Value with which to fill Length bytes of Buffer. - - @return Buffer - -**/ -VOID * -EFIAPI -InternalMemSetMem16 ( - OUT VOID *Buffer, - IN UINTN Length, - IN UINT16 Value - ); - -/** - Fills a target buffer with a 32-bit value, and returns the target buffer. - - @param Buffer Pointer to the target buffer to fill. - @param Length Number of bytes in Buffer to fill. - @param Value Value with which to fill Length bytes of Buffer. - - @return Buffer - -**/ -VOID * -EFIAPI -InternalMemSetMem32 ( - OUT VOID *Buffer, - IN UINTN Length, - IN UINT32 Value - ); - -/** - Fills a target buffer with a 64-bit value, and returns the target buffer. - - @param Buffer Pointer to the target buffer to fill. - @param Length Number of bytes in Buffer to fill. - @param Value Value with which to fill Length bytes of Buffer. - - @return Buffer - -**/ -VOID * -EFIAPI -InternalMemSetMem64 ( - OUT VOID *Buffer, - IN UINTN Length, - IN UINT64 Value - ); - -/** - Set Buffer to 0 for Size bytes. - - @param Buffer Memory to set. - @param Size Number of bytes to set - - @return Buffer - -**/ -VOID * -EFIAPI -InternalMemZeroMem ( - OUT VOID *Buffer, - IN UINTN Length - ); - -/** - Compares two memory buffers of a given length. - - @param DestinationBuffer First memory buffer - @param SourceBuffer Second memory buffer - @param Length Length of DestinationBuffer and SourceBuffer memory - regions to compare. Must be non-zero. - - @retval 0 if MemOne == MemTwo - -**/ -INTN -EFIAPI -InternalMemCompareMem ( - IN CONST VOID *DestinationBuffer, - IN CONST VOID *SourceBuffer, - IN UINTN Length - ); - -/** - Scans a target buffer for an 8-bit value, and returns a pointer to the - matching 8-bit value in the target buffer. - - @param Buffer Pointer to the target buffer to scan. - @param Length Number of bytes in Buffer to scan. Must be non-zero. - @param Value Value to search for in the target buffer. - - @return Pointer to the first occurrence or NULL if not found. - -**/ -CONST VOID * -EFIAPI -InternalMemScanMem8 ( - IN CONST VOID *Buffer, - IN UINTN Length, - IN UINT8 Value - ); - -/** - Scans a target buffer for a 16-bit value, and returns a pointer to the - matching 16-bit value in the target buffer. - - @param Buffer Pointer to the target buffer to scan. - @param Length Number of bytes in Buffer to scan. Must be non-zero. - @param Value Value to search for in the target buffer. - - @return Pointer to the first occurrence or NULL if not found. - -**/ -CONST VOID * -EFIAPI -InternalMemScanMem16 ( - IN CONST VOID *Buffer, - IN UINTN Length, - IN UINT16 Value - ); - -/** - Scans a target buffer for a 32-bit value, and returns a pointer to the - matching 32-bit value in the target buffer. - - @param Buffer Pointer to the target buffer to scan. - @param Length Number of bytes in Buffer to scan. Must be non-zero. - @param Value Value to search for in the target buffer. - - @return Pointer to the first occurrence or NULL if not found. - -**/ -CONST VOID * -EFIAPI -InternalMemScanMem32 ( - IN CONST VOID *Buffer, - IN UINTN Length, - IN UINT32 Value - ); - -/** - Scans a target buffer for a 64-bit value, and returns a pointer to the - matching 64-bit value in the target buffer. - - @param Buffer Pointer to the target buffer to scan. - @param Length Number of bytes in Buffer to scan. Must be non-zero. - @param Value Value to search for in the target buffer. - - @return Pointer to the first occurrence or NULL if not found. - -**/ -CONST VOID * -EFIAPI -InternalMemScanMem64 ( - IN CONST VOID *Buffer, - IN UINTN Length, - IN UINT64 Value - ); - -/** - Copy Length bytes from Source to Destination. - - This function copies Length bytes from SourceBuffer to DestinationBuffer, and - returns DestinationBuffer. The implementation must be reentrant, and it must - handle the case where SourceBuffer overlaps DestinationBuffer. - - If Length is greater than (MAX_ADDRESS - DestinationBuffer + 1), then - ASSERT(). - If Length is greater than (MAX_ADDRESS - SourceBuffer + 1), then ASSERT(). - - @param Destination Target of copy - @param Source Place to copy from - @param Length Number of bytes to copy - - @return Destination - -**/ -VOID * -EFIAPI -CopyMem ( - OUT VOID *Destination, - IN CONST VOID *Source, - IN UINTN Length - ) -{ - ASSERT (Length <= MAX_ADDRESS - (UINTN)Destination + 1); - ASSERT (Length <= MAX_ADDRESS - (UINTN)Source + 1); - return InternalMemCopyMem (Destination, Source, Length); -} - -/** - Set Buffer to Value for Size bytes. - - This function fills Length bytes of Buffer with Value, and returns Buffer. - - If Length is greater than (MAX_ADDRESS - Buffer + 1), then ASSERT(). - - @param Buffer Memory to set. - @param Size Number of bytes to set - @param Value Value of the set operation. - - @return Buffer - -**/ -VOID * -EFIAPI -SetMem ( - IN VOID *Buffer, - IN UINTN Size, - IN UINT8 Value - ) -{ - ASSERT (Size <= MAX_ADDRESS - (UINTN)Buffer + 1); - return InternalMemSetMem (Buffer, Size, Value); -} - -/** - Fills a target buffer with a 16-bit value, and returns the target buffer. - - This function fills Length bytes of Buffer with the 16-bit value specified by - Value, and returns Buffer. Value is repeated every 16-bits in for Length - bytes of Buffer. - - If Buffer is NULL and Length > 0, then ASSERT(). - If Length is greater than (MAX_ADDRESS - Buffer + 1), then ASSERT(). - If Buffer is not aligned on a 16-bit boundary, then ASSERT(). - If Length is not aligned on a 16-bit boundary, then ASSERT(). - - @param Buffer Pointer to the target buffer to fill. - @param Length Number of bytes in Buffer to fill. - @param Value Value with which to fill Length bytes of Buffer. - - @return Buffer - -**/ -VOID * -EFIAPI -SetMem16 ( - OUT VOID *Buffer, - IN UINTN Length, - IN UINT16 Value - ) -{ - ASSERT (Buffer != NULL); - ASSERT (Length <= MAX_ADDRESS - (UINTN)Buffer + 1); - ASSERT ((((UINTN)Buffer) & 1) != 0); - ASSERT ((Length & 1) != 0); - - if ((Length /= sizeof (Value)) == 0) { - return Buffer; - } - return InternalMemSetMem16 (Buffer, Length, Value); -} - -/** - Fills a target buffer with a 32-bit value, and returns the target buffer. - - This function fills Length bytes of Buffer with the 32-bit value specified by - Value, and returns Buffer. Value is repeated every 32-bits in for Length - bytes of Buffer. - - If Buffer is NULL and Length > 0, then ASSERT(). - If Length is greater than (MAX_ADDRESS - Buffer + 1), then ASSERT(). - If Buffer is not aligned on a 32-bit boundary, then ASSERT(). - If Length is not aligned on a 32-bit boundary, then ASSERT(). - - @param Buffer Pointer to the target buffer to fill. - @param Length Number of bytes in Buffer to fill. - @param Value Value with which to fill Length bytes of Buffer. - - @return Buffer - -**/ -VOID * -EFIAPI -SetMem32 ( - OUT VOID *Buffer, - IN UINTN Length, - IN UINT32 Value - ) -{ - ASSERT (Buffer != NULL); - ASSERT (Length <= MAX_ADDRESS - (UINTN)Buffer + 1); - ASSERT ((((UINTN)Buffer) & 1) != 0); - ASSERT ((Length & 1) != 0); - - if ((Length /= sizeof (Value)) == 0) { - return Buffer; - } - return InternalMemSetMem32 (Buffer, Length, Value); -} - -/** - Fills a target buffer with a 64-bit value, and returns the target buffer. - - This function fills Length bytes of Buffer with the 64-bit value specified by - Value, and returns Buffer. Value is repeated every 64-bits in for Length - bytes of Buffer. - - If Buffer is NULL and Length > 0, then ASSERT(). - If Length is greater than (MAX_ADDRESS - Buffer + 1), then ASSERT(). - If Buffer is not aligned on a 64-bit boundary, then ASSERT(). - If Length is not aligned on a 64-bit boundary, then ASSERT(). - - @param Buffer Pointer to the target buffer to fill. - @param Length Number of bytes in Buffer to fill. - @param Value Value with which to fill Length bytes of Buffer. - - @return Buffer - -**/ -VOID * -EFIAPI -SetMem64 ( - OUT VOID *Buffer, - IN UINTN Length, - IN UINT64 Value - ) -{ - ASSERT (Buffer != NULL); - ASSERT (Length <= MAX_ADDRESS - (UINTN)Buffer + 1); - ASSERT ((((UINTN)Buffer) & 1) != 0); - ASSERT ((Length & 1) != 0); - - if ((Length /= sizeof (Value)) == 0) { - return Buffer; - } - return InternalMemSetMem64 (Buffer, Length, Value); -} - -/** - Set Buffer to 0 for Size bytes. - - This function fills Length bytes of Buffer with zeros, and returns Buffer. - - If Buffer is NULL and Length > 0, then ASSERT(). - If Length is greater than (MAX_ADDRESS - Buffer + 1), then ASSERT(). - - @param Buffer Memory to set. - @param Size Number of bytes to set - - @return Buffer - -**/ -VOID * -EFIAPI -ZeroMem ( - IN VOID *Buffer, - IN UINTN Size - ) -{ - ASSERT (Buffer != NULL); - return InternalMemSetMem (Buffer, Size, 0); -} - -/** - Compares two memory buffers of a given length. - - This function compares Length bytes of SourceBuffer to Length bytes of - DestinationBuffer. If all Length bytes of the two buffers are identical, then - 0 is returned. Otherwise, the value returned is the first mismatched byte in - SourceBuffer subtracted from the first mismatched byte in DestinationBuffer. - - If DestinationBuffer is NULL and Length > 0, then ASSERT(). - If SourceBuffer is NULL and Length > 0, then ASSERT(). - If Length is greater than (MAX_ADDRESS - DestinationBuffer + 1), then - ASSERT(). - If Length is greater than (MAX_ADDRESS - SourceBuffer + 1), then ASSERT(). - - @param DestinationBuffer First memory buffer - @param SourceBuffer Second memory buffer - @param Length Length of DestinationBuffer and SourceBuffer memory - regions to compare - - @retval 0 if DestinationBuffer == SourceBuffer - @retval Non-zero if DestinationBuffer != SourceBuffer - -**/ -INTN -EFIAPI -CompareMem ( - IN CONST VOID *DestinationBuffer, - IN CONST VOID *SourceBuffer, - IN UINTN Length - ) -{ - ASSERT (DestinationBuffer != NULL); - ASSERT (SourceBuffer != NULL); - ASSERT (Length <= MAX_ADDRESS - (UINTN)DestinationBuffer + 1); - ASSERT (Length <= MAX_ADDRESS - (UINTN)SourceBuffer + 1); - if (Length == 0) { - return 0; - } - return InternalMemCompareMem (DestinationBuffer, SourceBuffer, Length); -} - -/** - Scans a target buffer for an 8-bit value, and returns a pointer to the - matching 8-bit value in the target buffer. - - This function searches target the buffer specified by Buffer and Length from - the lowest address to the highest address for an 8-bit value that matches - Value. If a match is found, then a pointer to the matching byte in the target - buffer is returned. If no match is found, then NULL is returned. If Length is - 0, then NULL is returned. - - If Buffer is NULL, then ASSERT(). - If Length is greater than (MAX_ADDRESS - Buffer + 1), then ASSERT(). - - @param Buffer Pointer to the target buffer to scan. - @param Length Number of bytes in Buffer to scan. - @param Value Value to search for in the target buffer. - - @return Pointer to the first occurrence or NULL if not found. - @retval NULL if Length == 0 or Value was not found. - -**/ -VOID * -EFIAPI -ScanMem8 ( - IN CONST VOID *Buffer, - IN UINTN Length, - IN UINT8 Value - ) -{ - ASSERT (Buffer != NULL); - ASSERT (Length <= MAX_ADDRESS + (UINTN)Buffer + 1); - - if ((Length /= sizeof (Value)) == 0) { - return NULL; - } - return (VOID*)InternalMemScanMem8 (Buffer, Length, Value); -} - -/** - Scans a target buffer for a 16-bit value, and returns a pointer to the - matching 16-bit value in the target buffer. - - This function searches target the buffer specified by Buffer and Length from - the lowest address to the highest address at 16-bit increments for a 16-bit - value that matches Value. If a match is found, then a pointer to the matching - value in the target buffer is returned. If no match is found, then NULL is - returned. If Length is 0, then NULL is returned. - - If Buffer is NULL, then ASSERT(). - If Buffer is not aligned on a 16-bit boundary, then ASSERT(). - If Length is greater than (MAX_ADDRESS - Buffer + 1), then ASSERT(). - - @param Buffer Pointer to the target buffer to scan. - @param Length Number of bytes in Buffer to scan. - @param Value Value to search for in the target buffer. - - @return Pointer to the first occurrence. - @retval NULL if Length == 0 or Value was not found. - -**/ -VOID * -EFIAPI -ScanMem16 ( - IN CONST VOID *Buffer, - IN UINTN Length, - IN UINT16 Value - ) -{ - ASSERT (Buffer != NULL); - ASSERT (((UINTN)Buffer & (sizeof (Value) - 1)) == 0); - ASSERT (Length <= MAX_ADDRESS + (UINTN)Buffer + 1); - - if ((Length /= sizeof (Value)) == 0) { - return NULL; - } - return (VOID*)InternalMemScanMem16 (Buffer, Length, Value); -} - -/** - Scans a target buffer for a 32-bit value, and returns a pointer to the - matching 32-bit value in the target buffer. - - This function searches target the buffer specified by Buffer and Length from - the lowest address to the highest address at 32-bit increments for a 32-bit - value that matches Value. If a match is found, then a pointer to the matching - value in the target buffer is returned. If no match is found, then NULL is - returned. If Length is 0, then NULL is returned. - - If Buffer is NULL, then ASSERT(). - If Buffer is not aligned on a 32-bit boundary, then ASSERT(). - If Length is greater than (MAX_ADDRESS - Buffer + 1), then ASSERT(). - - @param Buffer Pointer to the target buffer to scan. - @param Length Number of bytes in Buffer to scan. - @param Value Value to search for in the target buffer. - - @return Pointer to the first occurrence or NULL if not found. - @retval NULL if Length == 0 or Value was not found. - -**/ -VOID * -EFIAPI -ScanMem32 ( - IN CONST VOID *Buffer, - IN UINTN Length, - IN UINT32 Value - ) -{ - ASSERT (Buffer != NULL); - ASSERT (((UINTN)Buffer & (sizeof (Value) - 1)) == 0); - ASSERT (Length <= MAX_ADDRESS + (UINTN)Buffer + 1); - - if ((Length /= sizeof (Value)) == 0) { - return NULL; - } - return (VOID*)InternalMemScanMem32 (Buffer, Length, Value); -} - -/** - Scans a target buffer for a 64-bit value, and returns a pointer to the - matching 64-bit value in the target buffer. - - This function searches target the buffer specified by Buffer and Length from - the lowest address to the highest address at 64-bit increments for a 64-bit - value that matches Value. If a match is found, then a pointer to the matching - value in the target buffer is returned. If no match is found, then NULL is - returned. If Length is 0, then NULL is returned. - - If Buffer is NULL, then ASSERT(). - If Buffer is not aligned on a 64-bit boundary, then ASSERT(). - If Length is greater than (MAX_ADDRESS - Buffer + 1), then ASSERT(). - - @param Buffer Pointer to the target buffer to scan. - @param Length Number of bytes in Buffer to scan. - @param Value Value to search for in the target buffer. - - @return Pointer to the first occurrence or NULL if not found. - @retval NULL if Length == 0 or Value was not found. - -**/ -VOID * -EFIAPI -ScanMem64 ( - IN CONST VOID *Buffer, - IN UINTN Length, - IN UINT64 Value - ) -{ - ASSERT (Buffer != NULL); - ASSERT (((UINTN)Buffer & (sizeof (Value) - 1)) == 0); - ASSERT (Length <= MAX_ADDRESS + (UINTN)Buffer + 1); - - if ((Length /= sizeof (Value)) == 0) { - return NULL; - } - return (VOID*)InternalMemScanMem64 (Buffer, Length, Value); -} diff --git a/MdePkg/Library/BaseMemoryLibSse2/ScanMem16Wrapper.c b/MdePkg/Library/BaseMemoryLibSse2/ScanMem16Wrapper.c new file mode 100644 index 0000000000..a17705db1d --- /dev/null +++ b/MdePkg/Library/BaseMemoryLibSse2/ScanMem16Wrapper.c @@ -0,0 +1,66 @@ +/** @file + ScanMem16() implementation. + + 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: ScanMem16Wrapper.c + + The following BaseMemoryLib instances share the same version of this file: + + BaseMemoryLib + BaseMemoryLibMmx + BaseMemoryLibSse2 + BaseMemoryLibRepStr + PeiMemoryLib + UefiMemoryLib + +**/ + +#include "MemLibInternals.h" + +/** + Scans a target buffer for a 16-bit value, and returns a pointer to the + matching 16-bit value in the target buffer. + + This function searches target the buffer specified by Buffer and Length from + the lowest address to the highest address at 16-bit increments for a 16-bit + value that matches Value. If a match is found, then a pointer to the matching + value in the target buffer is returned. If no match is found, then NULL is + returned. If Length is 0, then NULL is returned. + + If Buffer is NULL, then ASSERT(). + If Buffer is not aligned on a 16-bit boundary, then ASSERT(). + If Length is greater than (MAX_ADDRESS - Buffer + 1), then ASSERT(). + + @param Buffer Pointer to the target buffer to scan. + @param Length Number of bytes in Buffer to scan. + @param Value Value to search for in the target buffer. + + @return Pointer to the first occurrence. + @retval NULL if Length == 0 or Value was not found. + +**/ +VOID * +EFIAPI +ScanMem16 ( + IN CONST VOID *Buffer, + IN UINTN Length, + IN UINT16 Value + ) +{ + ASSERT (Buffer != NULL); + ASSERT (((UINTN)Buffer & (sizeof (Value) - 1)) == 0); + ASSERT (Length <= MAX_ADDRESS + (UINTN)Buffer + 1); + + if ((Length /= sizeof (Value)) == 0) { + return NULL; + } + return (VOID*)InternalMemScanMem16 (Buffer, Length, Value); +} diff --git a/MdePkg/Library/BaseMemoryLibSse2/ScanMem32Wrapper.c b/MdePkg/Library/BaseMemoryLibSse2/ScanMem32Wrapper.c new file mode 100644 index 0000000000..67eb84d8ef --- /dev/null +++ b/MdePkg/Library/BaseMemoryLibSse2/ScanMem32Wrapper.c @@ -0,0 +1,66 @@ +/** @file + ScanMem32() implementation. + + 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: ScanMem32Wrapper.c + + The following BaseMemoryLib instances share the same version of this file: + + BaseMemoryLib + BaseMemoryLibMmx + BaseMemoryLibSse2 + BaseMemoryLibRepStr + PeiMemoryLib + UefiMemoryLib + +**/ + +#include "MemLibInternals.h" + +/** + Scans a target buffer for a 32-bit value, and returns a pointer to the + matching 32-bit value in the target buffer. + + This function searches target the buffer specified by Buffer and Length from + the lowest address to the highest address at 32-bit increments for a 32-bit + value that matches Value. If a match is found, then a pointer to the matching + value in the target buffer is returned. If no match is found, then NULL is + returned. If Length is 0, then NULL is returned. + + If Buffer is NULL, then ASSERT(). + If Buffer is not aligned on a 32-bit boundary, then ASSERT(). + If Length is greater than (MAX_ADDRESS - Buffer + 1), then ASSERT(). + + @param Buffer Pointer to the target buffer to scan. + @param Length Number of bytes in Buffer to scan. + @param Value Value to search for in the target buffer. + + @return Pointer to the first occurrence or NULL if not found. + @retval NULL if Length == 0 or Value was not found. + +**/ +VOID * +EFIAPI +ScanMem32 ( + IN CONST VOID *Buffer, + IN UINTN Length, + IN UINT32 Value + ) +{ + ASSERT (Buffer != NULL); + ASSERT (((UINTN)Buffer & (sizeof (Value) - 1)) == 0); + ASSERT (Length <= MAX_ADDRESS + (UINTN)Buffer + 1); + + if ((Length /= sizeof (Value)) == 0) { + return NULL; + } + return (VOID*)InternalMemScanMem32 (Buffer, Length, Value); +} diff --git a/MdePkg/Library/BaseMemoryLibSse2/ScanMem64Wrapper.c b/MdePkg/Library/BaseMemoryLibSse2/ScanMem64Wrapper.c new file mode 100644 index 0000000000..c5f0762ebe --- /dev/null +++ b/MdePkg/Library/BaseMemoryLibSse2/ScanMem64Wrapper.c @@ -0,0 +1,66 @@ +/** @file + ScanMem64() implementation. + + 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: ScanMem64Wrapper.c + + The following BaseMemoryLib instances share the same version of this file: + + BaseMemoryLib + BaseMemoryLibMmx + BaseMemoryLibSse2 + BaseMemoryLibRepStr + PeiMemoryLib + UefiMemoryLib + +**/ + +#include "MemLibInternals.h" + +/** + Scans a target buffer for a 64-bit value, and returns a pointer to the + matching 64-bit value in the target buffer. + + This function searches target the buffer specified by Buffer and Length from + the lowest address to the highest address at 64-bit increments for a 64-bit + value that matches Value. If a match is found, then a pointer to the matching + value in the target buffer is returned. If no match is found, then NULL is + returned. If Length is 0, then NULL is returned. + + If Buffer is NULL, then ASSERT(). + If Buffer is not aligned on a 64-bit boundary, then ASSERT(). + If Length is greater than (MAX_ADDRESS - Buffer + 1), then ASSERT(). + + @param Buffer Pointer to the target buffer to scan. + @param Length Number of bytes in Buffer to scan. + @param Value Value to search for in the target buffer. + + @return Pointer to the first occurrence or NULL if not found. + @retval NULL if Length == 0 or Value was not found. + +**/ +VOID * +EFIAPI +ScanMem64 ( + IN CONST VOID *Buffer, + IN UINTN Length, + IN UINT64 Value + ) +{ + ASSERT (Buffer != NULL); + ASSERT (((UINTN)Buffer & (sizeof (Value) - 1)) == 0); + ASSERT (Length <= MAX_ADDRESS + (UINTN)Buffer + 1); + + if ((Length /= sizeof (Value)) == 0) { + return NULL; + } + return (VOID*)InternalMemScanMem64 (Buffer, Length, Value); +} diff --git a/MdePkg/Library/BaseMemoryLibSse2/ScanMem8Wrapper.c b/MdePkg/Library/BaseMemoryLibSse2/ScanMem8Wrapper.c new file mode 100644 index 0000000000..9b817b1b0e --- /dev/null +++ b/MdePkg/Library/BaseMemoryLibSse2/ScanMem8Wrapper.c @@ -0,0 +1,64 @@ +/** @file + ScanMem8() implementation. + + 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: ScanMem8Wrapper.c + + The following BaseMemoryLib instances share the same version of this file: + + BaseMemoryLib + BaseMemoryLibMmx + BaseMemoryLibSse2 + BaseMemoryLibRepStr + PeiMemoryLib + UefiMemoryLib + +**/ + +#include "MemLibInternals.h" + +/** + Scans a target buffer for an 8-bit value, and returns a pointer to the + matching 8-bit value in the target buffer. + + This function searches target the buffer specified by Buffer and Length from + the lowest address to the highest address for an 8-bit value that matches + Value. If a match is found, then a pointer to the matching byte in the target + buffer is returned. If no match is found, then NULL is returned. If Length is + 0, then NULL is returned. + + If Buffer is NULL, then ASSERT(). + If Length is greater than (MAX_ADDRESS - Buffer + 1), then ASSERT(). + + @param Buffer Pointer to the target buffer to scan. + @param Length Number of bytes in Buffer to scan. + @param Value Value to search for in the target buffer. + + @return Pointer to the first occurrence or NULL if not found. + @retval NULL if Length == 0 or Value was not found. + +**/ +VOID * +EFIAPI +ScanMem8 ( + IN CONST VOID *Buffer, + IN UINTN Length, + IN UINT8 Value + ) +{ + ASSERT (Buffer != NULL); + ASSERT (Length <= MAX_ADDRESS + (UINTN)Buffer + 1); + + if ((Length /= sizeof (Value)) == 0) { + return NULL; + } + return (VOID*)InternalMemScanMem8 (Buffer, Length, Value); +} diff --git a/MdePkg/Library/BaseMemoryLibSse2/SetMem16Wrapper.c b/MdePkg/Library/BaseMemoryLibSse2/SetMem16Wrapper.c new file mode 100644 index 0000000000..827e6ecf67 --- /dev/null +++ b/MdePkg/Library/BaseMemoryLibSse2/SetMem16Wrapper.c @@ -0,0 +1,64 @@ +/** @file + SetMem16() implementation. + + 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: SetMem16Wrapper.c + + The following BaseMemoryLib instances share the same version of this file: + + BaseMemoryLib + BaseMemoryLibMmx + BaseMemoryLibSse2 + BaseMemoryLibRepStr + PeiMemoryLib + UefiMemoryLib + +**/ + +#include "MemLibInternals.h" + +/** + Fills a target buffer with a 16-bit value, and returns the target buffer. + + This function fills Length bytes of Buffer with the 16-bit value specified by + Value, and returns Buffer. Value is repeated every 16-bits in for Length + bytes of Buffer. + + If Buffer is NULL and Length > 0, then ASSERT(). + If Length is greater than (MAX_ADDRESS - Buffer + 1), then ASSERT(). + If Buffer is not aligned on a 16-bit boundary, then ASSERT(). + If Length is not aligned on a 16-bit boundary, then ASSERT(). + + @param Buffer Pointer to the target buffer to fill. + @param Length Number of bytes in Buffer to fill. + @param Value Value with which to fill Length bytes of Buffer. + + @return Buffer + +**/ +VOID * +EFIAPI +SetMem16 ( + OUT VOID *Buffer, + IN UINTN Length, + IN UINT16 Value + ) +{ + ASSERT (Buffer != NULL); + ASSERT (Length <= MAX_ADDRESS - (UINTN)Buffer + 1); + ASSERT ((((UINTN)Buffer) & 1) != 0); + ASSERT ((Length & 1) != 0); + + if ((Length /= sizeof (Value)) == 0) { + return Buffer; + } + return InternalMemSetMem16 (Buffer, Length, Value); +} diff --git a/MdePkg/Library/BaseMemoryLibSse2/SetMem32Wrapper.c b/MdePkg/Library/BaseMemoryLibSse2/SetMem32Wrapper.c new file mode 100644 index 0000000000..4b9d2413eb --- /dev/null +++ b/MdePkg/Library/BaseMemoryLibSse2/SetMem32Wrapper.c @@ -0,0 +1,64 @@ +/** @file + SetMem32() implementation. + + 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: SetMem32Wrapper.c + + The following BaseMemoryLib instances share the same version of this file: + + BaseMemoryLib + BaseMemoryLibMmx + BaseMemoryLibSse2 + BaseMemoryLibRepStr + PeiMemoryLib + UefiMemoryLib + +**/ + +#include "MemLibInternals.h" + +/** + Fills a target buffer with a 32-bit value, and returns the target buffer. + + This function fills Length bytes of Buffer with the 32-bit value specified by + Value, and returns Buffer. Value is repeated every 32-bits in for Length + bytes of Buffer. + + If Buffer is NULL and Length > 0, then ASSERT(). + If Length is greater than (MAX_ADDRESS - Buffer + 1), then ASSERT(). + If Buffer is not aligned on a 32-bit boundary, then ASSERT(). + If Length is not aligned on a 32-bit boundary, then ASSERT(). + + @param Buffer Pointer to the target buffer to fill. + @param Length Number of bytes in Buffer to fill. + @param Value Value with which to fill Length bytes of Buffer. + + @return Buffer + +**/ +VOID * +EFIAPI +SetMem32 ( + OUT VOID *Buffer, + IN UINTN Length, + IN UINT32 Value + ) +{ + ASSERT (Buffer != NULL); + ASSERT (Length <= MAX_ADDRESS - (UINTN)Buffer + 1); + ASSERT ((((UINTN)Buffer) & 1) != 0); + ASSERT ((Length & 1) != 0); + + if ((Length /= sizeof (Value)) == 0) { + return Buffer; + } + return InternalMemSetMem32 (Buffer, Length, Value); +} diff --git a/MdePkg/Library/BaseMemoryLibSse2/SetMem64Wrapper.c b/MdePkg/Library/BaseMemoryLibSse2/SetMem64Wrapper.c new file mode 100644 index 0000000000..dbf3b62782 --- /dev/null +++ b/MdePkg/Library/BaseMemoryLibSse2/SetMem64Wrapper.c @@ -0,0 +1,64 @@ +/** @file + SetMem64() implementation. + + 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: SetMem64Wrapper.c + + The following BaseMemoryLib instances share the same version of this file: + + BaseMemoryLib + BaseMemoryLibMmx + BaseMemoryLibSse2 + BaseMemoryLibRepStr + PeiMemoryLib + UefiMemoryLib + +**/ + +#include "MemLibInternals.h" + +/** + Fills a target buffer with a 64-bit value, and returns the target buffer. + + This function fills Length bytes of Buffer with the 64-bit value specified by + Value, and returns Buffer. Value is repeated every 64-bits in for Length + bytes of Buffer. + + If Buffer is NULL and Length > 0, then ASSERT(). + If Length is greater than (MAX_ADDRESS - Buffer + 1), then ASSERT(). + If Buffer is not aligned on a 64-bit boundary, then ASSERT(). + If Length is not aligned on a 64-bit boundary, then ASSERT(). + + @param Buffer Pointer to the target buffer to fill. + @param Length Number of bytes in Buffer to fill. + @param Value Value with which to fill Length bytes of Buffer. + + @return Buffer + +**/ +VOID * +EFIAPI +SetMem64 ( + OUT VOID *Buffer, + IN UINTN Length, + IN UINT64 Value + ) +{ + ASSERT (Buffer != NULL); + ASSERT (Length <= MAX_ADDRESS - (UINTN)Buffer + 1); + ASSERT ((((UINTN)Buffer) & 1) != 0); + ASSERT ((Length & 1) != 0); + + if ((Length /= sizeof (Value)) == 0) { + return Buffer; + } + return InternalMemSetMem64 (Buffer, Length, Value); +} diff --git a/MdePkg/Library/BaseMemoryLibSse2/SetMemWrapper.c b/MdePkg/Library/BaseMemoryLibSse2/SetMemWrapper.c new file mode 100644 index 0000000000..294a27a753 --- /dev/null +++ b/MdePkg/Library/BaseMemoryLibSse2/SetMemWrapper.c @@ -0,0 +1,52 @@ +/** @file + SetMem() implementation. + + 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: SetMemWrapper.c + + The following BaseMemoryLib instances share the same version of this file: + + BaseMemoryLib + BaseMemoryLibMmx + BaseMemoryLibSse2 + BaseMemoryLibRepStr + PeiMemoryLib + UefiMemoryLib + +**/ + +#include "MemLibInternals.h" + +/** + Set Buffer to Value for Size bytes. + + This function fills Length bytes of Buffer with Value, and returns Buffer. + + If Length is greater than (MAX_ADDRESS - Buffer + 1), then ASSERT(). + + @param Buffer Memory to set. + @param Size Number of bytes to set + @param Value Value of the set operation. + + @return Buffer + +**/ +VOID * +EFIAPI +SetMem ( + IN VOID *Buffer, + IN UINTN Size, + IN UINT8 Value + ) +{ + ASSERT (Size <= MAX_ADDRESS - (UINTN)Buffer + 1); + return InternalMemSetMem (Buffer, Size, Value); +} diff --git a/MdePkg/Library/BaseMemoryLibSse2/ZeroMemWrapper.c b/MdePkg/Library/BaseMemoryLibSse2/ZeroMemWrapper.c new file mode 100644 index 0000000000..d7d7919ba2 --- /dev/null +++ b/MdePkg/Library/BaseMemoryLibSse2/ZeroMemWrapper.c @@ -0,0 +1,51 @@ +/** @file + ZeroMem() implementation. + + 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: ZeroMemWrapper.c + + The following BaseMemoryLib instances share the same version of this file: + + BaseMemoryLib + BaseMemoryLibMmx + BaseMemoryLibSse2 + BaseMemoryLibRepStr + PeiMemoryLib + UefiMemoryLib + +**/ + +#include "MemLibInternals.h" + +/** + Set Buffer to 0 for Size bytes. + + This function fills Length bytes of Buffer with zeros, and returns Buffer. + + If Buffer is NULL and Length > 0, then ASSERT(). + If Length is greater than (MAX_ADDRESS - Buffer + 1), then ASSERT(). + + @param Buffer Memory to set. + @param Size Number of bytes to set + + @return Buffer + +**/ +VOID * +EFIAPI +ZeroMem ( + IN VOID *Buffer, + IN UINTN Size + ) +{ + ASSERT (Buffer != NULL); + return InternalMemSetMem (Buffer, Size, 0); +} diff --git a/MdePkg/Library/PeiMemoryLib/CompareMemWrapper.c b/MdePkg/Library/PeiMemoryLib/CompareMemWrapper.c new file mode 100644 index 0000000000..c8199d8dc3 --- /dev/null +++ b/MdePkg/Library/PeiMemoryLib/CompareMemWrapper.c @@ -0,0 +1,67 @@ +/** @file + CompareMem() implementation. + + 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: CompareMemWrapper.c + + The following BaseMemoryLib instances share the same version of this file: + + BaseMemoryLib + BaseMemoryLibMmx + BaseMemoryLibSse2 + BaseMemoryLibRepStr + PeiMemoryLib + UefiMemoryLib + +**/ + +#include "MemLibInternals.h" + +/** + Compares two memory buffers of a given length. + + This function compares Length bytes of SourceBuffer to Length bytes of + DestinationBuffer. If all Length bytes of the two buffers are identical, then + 0 is returned. Otherwise, the value returned is the first mismatched byte in + SourceBuffer subtracted from the first mismatched byte in DestinationBuffer. + + If DestinationBuffer is NULL and Length > 0, then ASSERT(). + If SourceBuffer is NULL and Length > 0, then ASSERT(). + If Length is greater than (MAX_ADDRESS - DestinationBuffer + 1), then + ASSERT(). + If Length is greater than (MAX_ADDRESS - SourceBuffer + 1), then ASSERT(). + + @param DestinationBuffer First memory buffer + @param SourceBuffer Second memory buffer + @param Length Length of DestinationBuffer and SourceBuffer memory + regions to compare + + @retval 0 if DestinationBuffer == SourceBuffer + @retval Non-zero if DestinationBuffer != SourceBuffer + +**/ +INTN +EFIAPI +CompareMem ( + IN CONST VOID *DestinationBuffer, + IN CONST VOID *SourceBuffer, + IN UINTN Length + ) +{ + ASSERT (DestinationBuffer != NULL); + ASSERT (SourceBuffer != NULL); + ASSERT (Length <= MAX_ADDRESS - (UINTN)DestinationBuffer + 1); + ASSERT (Length <= MAX_ADDRESS - (UINTN)SourceBuffer + 1); + if (Length == 0) { + return 0; + } + return InternalMemCompareMem (DestinationBuffer, SourceBuffer, Length); +} diff --git a/MdePkg/Library/PeiMemoryLib/CopyMemWrapper.c b/MdePkg/Library/PeiMemoryLib/CopyMemWrapper.c new file mode 100644 index 0000000000..5ca62f5047 --- /dev/null +++ b/MdePkg/Library/PeiMemoryLib/CopyMemWrapper.c @@ -0,0 +1,66 @@ +/** @file + CopyMem() implementation. + + 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: CopyMemWrapper.c + + The following BaseMemoryLib instances share the same version of this file: + + BaseMemoryLib + BaseMemoryLibMmx + BaseMemoryLibSse2 + BaseMemoryLibRepStr + PeiMemoryLib + UefiMemoryLib + +**/ + +#include "MemLibInternals.h" + +/** + Copy Length bytes from Source to Destination. + + This function copies Length bytes from SourceBuffer to DestinationBuffer, and + returns DestinationBuffer. The implementation must be reentrant, and it must + handle the case where SourceBuffer overlaps DestinationBuffer. + + If Length is greater than (MAX_ADDRESS - DestinationBuffer + 1), then + ASSERT(). + If Length is greater than (MAX_ADDRESS - SourceBuffer + 1), then ASSERT(). + + @param Destination Target of copy + @param Source Place to copy from + @param Length Number of bytes to copy + + @return Destination + +**/ +VOID * +EFIAPI +CopyMem ( + OUT VOID *Destination, + IN CONST VOID *Source, + IN UINTN Length + ) +{ + ASSERT ( + Destination == NULL || + Length <= MAX_ADDRESS - (UINTN)Destination + 1 + ); + ASSERT ( + Source == NULL || + Length <= MAX_ADDRESS - (UINTN)Source + 1 + ); + if (Destination == Source || Length == 0) { + return Destination; + } + return InternalMemCopyMem (Destination, Source, Length); +} diff --git a/MdePkg/Library/PeiMemoryLib/MemLibGeneric.c b/MdePkg/Library/PeiMemoryLib/MemLibGeneric.c index ef9f358a79..bda1f4992f 100644 --- a/MdePkg/Library/PeiMemoryLib/MemLibGeneric.c +++ b/MdePkg/Library/PeiMemoryLib/MemLibGeneric.c @@ -20,23 +20,7 @@ **/ -/** - Set Buffer to Value for Size bytes. - - @param Buffer Memory to set. - @param Size Number of bytes to set - @param Value Value of the set operation. - - @return Buffer - -**/ -VOID * -EFIAPI -InternalMemSetMem ( - OUT VOID *Buffer, - IN UINTN Length, - IN UINT8 Value - ); +#include "MemLibInternals.h" /** Fills a target buffer with a 16-bit value, and returns the target buffer. diff --git a/MdePkg/Library/PeiMemoryLib/MemLibInternals.h b/MdePkg/Library/PeiMemoryLib/MemLibInternals.h new file mode 100644 index 0000000000..ca7311a407 --- /dev/null +++ b/MdePkg/Library/PeiMemoryLib/MemLibInternals.h @@ -0,0 +1,230 @@ +/** @file + Declaration of internal functions for Base Memory 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: MemLibInternals.h + + The following BaseMemoryLib instances share the same version of this file: + + BaseMemoryLib + BaseMemoryLibMmx + BaseMemoryLibSse2 + BaseMemoryLibRepStr + PeiMemoryLib + UefiMemoryLib + +**/ + +#ifndef __MEM_LIB_INTERNALS__ +#define __MEM_LIB_INTERNALS__ + +/** + Copy Length bytes from Source to Destination. + + @param Destination Target of copy + @param Source Place to copy from + @param Length Number of bytes to copy + + @return Destination + +**/ +VOID * +EFIAPI +InternalMemCopyMem ( + OUT VOID *DestinationBuffer, + IN CONST VOID *SourceBuffer, + IN UINTN Length + ); + +/** + Set Buffer to Value for Size bytes. + + @param Buffer Memory to set. + @param Size Number of bytes to set + @param Value Value of the set operation. + + @return Buffer + +**/ +VOID * +EFIAPI +InternalMemSetMem ( + OUT VOID *Buffer, + IN UINTN Length, + IN UINT8 Value + ); + +/** + Fills a target buffer with a 16-bit value, and returns the target buffer. + + @param Buffer Pointer to the target buffer to fill. + @param Length Number of bytes in Buffer to fill. + @param Value Value with which to fill Length bytes of Buffer. + + @return Buffer + +**/ +VOID * +EFIAPI +InternalMemSetMem16 ( + OUT VOID *Buffer, + IN UINTN Length, + IN UINT16 Value + ); + +/** + Fills a target buffer with a 32-bit value, and returns the target buffer. + + @param Buffer Pointer to the target buffer to fill. + @param Length Number of bytes in Buffer to fill. + @param Value Value with which to fill Length bytes of Buffer. + + @return Buffer + +**/ +VOID * +EFIAPI +InternalMemSetMem32 ( + OUT VOID *Buffer, + IN UINTN Length, + IN UINT32 Value + ); + +/** + Fills a target buffer with a 64-bit value, and returns the target buffer. + + @param Buffer Pointer to the target buffer to fill. + @param Length Number of bytes in Buffer to fill. + @param Value Value with which to fill Length bytes of Buffer. + + @return Buffer + +**/ +VOID * +EFIAPI +InternalMemSetMem64 ( + OUT VOID *Buffer, + IN UINTN Length, + IN UINT64 Value + ); + +/** + Set Buffer to 0 for Size bytes. + + @param Buffer Memory to set. + @param Size Number of bytes to set + + @return Buffer + +**/ +VOID * +EFIAPI +InternalMemZeroMem ( + OUT VOID *Buffer, + IN UINTN Length + ); + +/** + Compares two memory buffers of a given length. + + @param DestinationBuffer First memory buffer + @param SourceBuffer Second memory buffer + @param Length Length of DestinationBuffer and SourceBuffer memory + regions to compare. Must be non-zero. + + @retval 0 if MemOne == MemTwo + +**/ +INTN +EFIAPI +InternalMemCompareMem ( + IN CONST VOID *DestinationBuffer, + IN CONST VOID *SourceBuffer, + IN UINTN Length + ); + +/** + Scans a target buffer for an 8-bit value, and returns a pointer to the + matching 8-bit value in the target buffer. + + @param Buffer Pointer to the target buffer to scan. + @param Length Number of bytes in Buffer to scan. Must be non-zero. + @param Value Value to search for in the target buffer. + + @return Pointer to the first occurrence or NULL if not found. + +**/ +CONST VOID * +EFIAPI +InternalMemScanMem8 ( + IN CONST VOID *Buffer, + IN UINTN Length, + IN UINT8 Value + ); + +/** + Scans a target buffer for a 16-bit value, and returns a pointer to the + matching 16-bit value in the target buffer. + + @param Buffer Pointer to the target buffer to scan. + @param Length Number of bytes in Buffer to scan. Must be non-zero. + @param Value Value to search for in the target buffer. + + @return Pointer to the first occurrence or NULL if not found. + +**/ +CONST VOID * +EFIAPI +InternalMemScanMem16 ( + IN CONST VOID *Buffer, + IN UINTN Length, + IN UINT16 Value + ); + +/** + Scans a target buffer for a 32-bit value, and returns a pointer to the + matching 32-bit value in the target buffer. + + @param Buffer Pointer to the target buffer to scan. + @param Length Number of bytes in Buffer to scan. Must be non-zero. + @param Value Value to search for in the target buffer. + + @return Pointer to the first occurrence or NULL if not found. + +**/ +CONST VOID * +EFIAPI +InternalMemScanMem32 ( + IN CONST VOID *Buffer, + IN UINTN Length, + IN UINT32 Value + ); + +/** + Scans a target buffer for a 64-bit value, and returns a pointer to the + matching 64-bit value in the target buffer. + + @param Buffer Pointer to the target buffer to scan. + @param Length Number of bytes in Buffer to scan. Must be non-zero. + @param Value Value to search for in the target buffer. + + @return Pointer to the first occurrence or NULL if not found. + +**/ +CONST VOID * +EFIAPI +InternalMemScanMem64 ( + IN CONST VOID *Buffer, + IN UINTN Length, + IN UINT64 Value + ); + +#endif diff --git a/MdePkg/Library/PeiMemoryLib/MemLibWrapper.c b/MdePkg/Library/PeiMemoryLib/MemLibWrapper.c deleted file mode 100644 index 2ef0766242..0000000000 --- a/MdePkg/Library/PeiMemoryLib/MemLibWrapper.c +++ /dev/null @@ -1,620 +0,0 @@ -/** @file - Wrapper functions for Base Memory 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: MemLibWrapper.c - - The following BaseMemoryLib instances share the same version of this file: - - BaseMemoryLib - BaseMemoryLibMmx - BaseMemoryLibSse2 - BaseMemoryLibRepStr - PeiMemoryLib - UefiMemoryLib - -**/ - -/** - Copy Length bytes from Source to Destination. - - @param Destination Target of copy - @param Source Place to copy from - @param Length Number of bytes to copy - - @return Destination - -**/ -VOID * -EFIAPI -InternalMemCopyMem ( - OUT VOID *DestinationBuffer, - IN CONST VOID *SourceBuffer, - IN UINTN Length - ); - -/** - Set Buffer to Value for Size bytes. - - @param Buffer Memory to set. - @param Size Number of bytes to set - @param Value Value of the set operation. - - @return Buffer - -**/ -VOID * -EFIAPI -InternalMemSetMem ( - OUT VOID *Buffer, - IN UINTN Length, - IN UINT8 Value - ); - -/** - Fills a target buffer with a 16-bit value, and returns the target buffer. - - @param Buffer Pointer to the target buffer to fill. - @param Length Number of bytes in Buffer to fill. - @param Value Value with which to fill Length bytes of Buffer. - - @return Buffer - -**/ -VOID * -EFIAPI -InternalMemSetMem16 ( - OUT VOID *Buffer, - IN UINTN Length, - IN UINT16 Value - ); - -/** - Fills a target buffer with a 32-bit value, and returns the target buffer. - - @param Buffer Pointer to the target buffer to fill. - @param Length Number of bytes in Buffer to fill. - @param Value Value with which to fill Length bytes of Buffer. - - @return Buffer - -**/ -VOID * -EFIAPI -InternalMemSetMem32 ( - OUT VOID *Buffer, - IN UINTN Length, - IN UINT32 Value - ); - -/** - Fills a target buffer with a 64-bit value, and returns the target buffer. - - @param Buffer Pointer to the target buffer to fill. - @param Length Number of bytes in Buffer to fill. - @param Value Value with which to fill Length bytes of Buffer. - - @return Buffer - -**/ -VOID * -EFIAPI -InternalMemSetMem64 ( - OUT VOID *Buffer, - IN UINTN Length, - IN UINT64 Value - ); - -/** - Set Buffer to 0 for Size bytes. - - @param Buffer Memory to set. - @param Size Number of bytes to set - - @return Buffer - -**/ -VOID * -EFIAPI -InternalMemZeroMem ( - OUT VOID *Buffer, - IN UINTN Length - ); - -/** - Compares two memory buffers of a given length. - - @param DestinationBuffer First memory buffer - @param SourceBuffer Second memory buffer - @param Length Length of DestinationBuffer and SourceBuffer memory - regions to compare. Must be non-zero. - - @retval 0 if MemOne == MemTwo - -**/ -INTN -EFIAPI -InternalMemCompareMem ( - IN CONST VOID *DestinationBuffer, - IN CONST VOID *SourceBuffer, - IN UINTN Length - ); - -/** - Scans a target buffer for an 8-bit value, and returns a pointer to the - matching 8-bit value in the target buffer. - - @param Buffer Pointer to the target buffer to scan. - @param Length Number of bytes in Buffer to scan. Must be non-zero. - @param Value Value to search for in the target buffer. - - @return Pointer to the first occurrence or NULL if not found. - -**/ -CONST VOID * -EFIAPI -InternalMemScanMem8 ( - IN CONST VOID *Buffer, - IN UINTN Length, - IN UINT8 Value - ); - -/** - Scans a target buffer for a 16-bit value, and returns a pointer to the - matching 16-bit value in the target buffer. - - @param Buffer Pointer to the target buffer to scan. - @param Length Number of bytes in Buffer to scan. Must be non-zero. - @param Value Value to search for in the target buffer. - - @return Pointer to the first occurrence or NULL if not found. - -**/ -CONST VOID * -EFIAPI -InternalMemScanMem16 ( - IN CONST VOID *Buffer, - IN UINTN Length, - IN UINT16 Value - ); - -/** - Scans a target buffer for a 32-bit value, and returns a pointer to the - matching 32-bit value in the target buffer. - - @param Buffer Pointer to the target buffer to scan. - @param Length Number of bytes in Buffer to scan. Must be non-zero. - @param Value Value to search for in the target buffer. - - @return Pointer to the first occurrence or NULL if not found. - -**/ -CONST VOID * -EFIAPI -InternalMemScanMem32 ( - IN CONST VOID *Buffer, - IN UINTN Length, - IN UINT32 Value - ); - -/** - Scans a target buffer for a 64-bit value, and returns a pointer to the - matching 64-bit value in the target buffer. - - @param Buffer Pointer to the target buffer to scan. - @param Length Number of bytes in Buffer to scan. Must be non-zero. - @param Value Value to search for in the target buffer. - - @return Pointer to the first occurrence or NULL if not found. - -**/ -CONST VOID * -EFIAPI -InternalMemScanMem64 ( - IN CONST VOID *Buffer, - IN UINTN Length, - IN UINT64 Value - ); - -/** - Copy Length bytes from Source to Destination. - - This function copies Length bytes from SourceBuffer to DestinationBuffer, and - returns DestinationBuffer. The implementation must be reentrant, and it must - handle the case where SourceBuffer overlaps DestinationBuffer. - - If Length is greater than (MAX_ADDRESS - DestinationBuffer + 1), then - ASSERT(). - If Length is greater than (MAX_ADDRESS - SourceBuffer + 1), then ASSERT(). - - @param Destination Target of copy - @param Source Place to copy from - @param Length Number of bytes to copy - - @return Destination - -**/ -VOID * -EFIAPI -CopyMem ( - OUT VOID *Destination, - IN CONST VOID *Source, - IN UINTN Length - ) -{ - ASSERT (Length <= MAX_ADDRESS - (UINTN)Destination + 1); - ASSERT (Length <= MAX_ADDRESS - (UINTN)Source + 1); - return InternalMemCopyMem (Destination, Source, Length); -} - -/** - Set Buffer to Value for Size bytes. - - This function fills Length bytes of Buffer with Value, and returns Buffer. - - If Length is greater than (MAX_ADDRESS - Buffer + 1), then ASSERT(). - - @param Buffer Memory to set. - @param Size Number of bytes to set - @param Value Value of the set operation. - - @return Buffer - -**/ -VOID * -EFIAPI -SetMem ( - IN VOID *Buffer, - IN UINTN Size, - IN UINT8 Value - ) -{ - ASSERT (Size <= MAX_ADDRESS - (UINTN)Buffer + 1); - return InternalMemSetMem (Buffer, Size, Value); -} - -/** - Fills a target buffer with a 16-bit value, and returns the target buffer. - - This function fills Length bytes of Buffer with the 16-bit value specified by - Value, and returns Buffer. Value is repeated every 16-bits in for Length - bytes of Buffer. - - If Buffer is NULL and Length > 0, then ASSERT(). - If Length is greater than (MAX_ADDRESS - Buffer + 1), then ASSERT(). - If Buffer is not aligned on a 16-bit boundary, then ASSERT(). - If Length is not aligned on a 16-bit boundary, then ASSERT(). - - @param Buffer Pointer to the target buffer to fill. - @param Length Number of bytes in Buffer to fill. - @param Value Value with which to fill Length bytes of Buffer. - - @return Buffer - -**/ -VOID * -EFIAPI -SetMem16 ( - OUT VOID *Buffer, - IN UINTN Length, - IN UINT16 Value - ) -{ - ASSERT (Buffer != NULL); - ASSERT (Length <= MAX_ADDRESS - (UINTN)Buffer + 1); - ASSERT ((((UINTN)Buffer) & 1) != 0); - ASSERT ((Length & 1) != 0); - - if ((Length /= sizeof (Value)) == 0) { - return Buffer; - } - return InternalMemSetMem16 (Buffer, Length, Value); -} - -/** - Fills a target buffer with a 32-bit value, and returns the target buffer. - - This function fills Length bytes of Buffer with the 32-bit value specified by - Value, and returns Buffer. Value is repeated every 32-bits in for Length - bytes of Buffer. - - If Buffer is NULL and Length > 0, then ASSERT(). - If Length is greater than (MAX_ADDRESS - Buffer + 1), then ASSERT(). - If Buffer is not aligned on a 32-bit boundary, then ASSERT(). - If Length is not aligned on a 32-bit boundary, then ASSERT(). - - @param Buffer Pointer to the target buffer to fill. - @param Length Number of bytes in Buffer to fill. - @param Value Value with which to fill Length bytes of Buffer. - - @return Buffer - -**/ -VOID * -EFIAPI -SetMem32 ( - OUT VOID *Buffer, - IN UINTN Length, - IN UINT32 Value - ) -{ - ASSERT (Buffer != NULL); - ASSERT (Length <= MAX_ADDRESS - (UINTN)Buffer + 1); - ASSERT ((((UINTN)Buffer) & 1) != 0); - ASSERT ((Length & 1) != 0); - - if ((Length /= sizeof (Value)) == 0) { - return Buffer; - } - return InternalMemSetMem32 (Buffer, Length, Value); -} - -/** - Fills a target buffer with a 64-bit value, and returns the target buffer. - - This function fills Length bytes of Buffer with the 64-bit value specified by - Value, and returns Buffer. Value is repeated every 64-bits in for Length - bytes of Buffer. - - If Buffer is NULL and Length > 0, then ASSERT(). - If Length is greater than (MAX_ADDRESS - Buffer + 1), then ASSERT(). - If Buffer is not aligned on a 64-bit boundary, then ASSERT(). - If Length is not aligned on a 64-bit boundary, then ASSERT(). - - @param Buffer Pointer to the target buffer to fill. - @param Length Number of bytes in Buffer to fill. - @param Value Value with which to fill Length bytes of Buffer. - - @return Buffer - -**/ -VOID * -EFIAPI -SetMem64 ( - OUT VOID *Buffer, - IN UINTN Length, - IN UINT64 Value - ) -{ - ASSERT (Buffer != NULL); - ASSERT (Length <= MAX_ADDRESS - (UINTN)Buffer + 1); - ASSERT ((((UINTN)Buffer) & 1) != 0); - ASSERT ((Length & 1) != 0); - - if ((Length /= sizeof (Value)) == 0) { - return Buffer; - } - return InternalMemSetMem64 (Buffer, Length, Value); -} - -/** - Set Buffer to 0 for Size bytes. - - This function fills Length bytes of Buffer with zeros, and returns Buffer. - - If Buffer is NULL and Length > 0, then ASSERT(). - If Length is greater than (MAX_ADDRESS - Buffer + 1), then ASSERT(). - - @param Buffer Memory to set. - @param Size Number of bytes to set - - @return Buffer - -**/ -VOID * -EFIAPI -ZeroMem ( - IN VOID *Buffer, - IN UINTN Size - ) -{ - ASSERT (Buffer != NULL); - return InternalMemSetMem (Buffer, Size, 0); -} - -/** - Compares two memory buffers of a given length. - - This function compares Length bytes of SourceBuffer to Length bytes of - DestinationBuffer. If all Length bytes of the two buffers are identical, then - 0 is returned. Otherwise, the value returned is the first mismatched byte in - SourceBuffer subtracted from the first mismatched byte in DestinationBuffer. - - If DestinationBuffer is NULL and Length > 0, then ASSERT(). - If SourceBuffer is NULL and Length > 0, then ASSERT(). - If Length is greater than (MAX_ADDRESS - DestinationBuffer + 1), then - ASSERT(). - If Length is greater than (MAX_ADDRESS - SourceBuffer + 1), then ASSERT(). - - @param DestinationBuffer First memory buffer - @param SourceBuffer Second memory buffer - @param Length Length of DestinationBuffer and SourceBuffer memory - regions to compare - - @retval 0 if DestinationBuffer == SourceBuffer - @retval Non-zero if DestinationBuffer != SourceBuffer - -**/ -INTN -EFIAPI -CompareMem ( - IN CONST VOID *DestinationBuffer, - IN CONST VOID *SourceBuffer, - IN UINTN Length - ) -{ - ASSERT (DestinationBuffer != NULL); - ASSERT (SourceBuffer != NULL); - ASSERT (Length <= MAX_ADDRESS - (UINTN)DestinationBuffer + 1); - ASSERT (Length <= MAX_ADDRESS - (UINTN)SourceBuffer + 1); - if (Length == 0) { - return 0; - } - return InternalMemCompareMem (DestinationBuffer, SourceBuffer, Length); -} - -/** - Scans a target buffer for an 8-bit value, and returns a pointer to the - matching 8-bit value in the target buffer. - - This function searches target the buffer specified by Buffer and Length from - the lowest address to the highest address for an 8-bit value that matches - Value. If a match is found, then a pointer to the matching byte in the target - buffer is returned. If no match is found, then NULL is returned. If Length is - 0, then NULL is returned. - - If Buffer is NULL, then ASSERT(). - If Length is greater than (MAX_ADDRESS - Buffer + 1), then ASSERT(). - - @param Buffer Pointer to the target buffer to scan. - @param Length Number of bytes in Buffer to scan. - @param Value Value to search for in the target buffer. - - @return Pointer to the first occurrence or NULL if not found. - @retval NULL if Length == 0 or Value was not found. - -**/ -VOID * -EFIAPI -ScanMem8 ( - IN CONST VOID *Buffer, - IN UINTN Length, - IN UINT8 Value - ) -{ - ASSERT (Buffer != NULL); - ASSERT (Length <= MAX_ADDRESS + (UINTN)Buffer + 1); - - if ((Length /= sizeof (Value)) == 0) { - return NULL; - } - return (VOID*)InternalMemScanMem8 (Buffer, Length, Value); -} - -/** - Scans a target buffer for a 16-bit value, and returns a pointer to the - matching 16-bit value in the target buffer. - - This function searches target the buffer specified by Buffer and Length from - the lowest address to the highest address at 16-bit increments for a 16-bit - value that matches Value. If a match is found, then a pointer to the matching - value in the target buffer is returned. If no match is found, then NULL is - returned. If Length is 0, then NULL is returned. - - If Buffer is NULL, then ASSERT(). - If Buffer is not aligned on a 16-bit boundary, then ASSERT(). - If Length is greater than (MAX_ADDRESS - Buffer + 1), then ASSERT(). - - @param Buffer Pointer to the target buffer to scan. - @param Length Number of bytes in Buffer to scan. - @param Value Value to search for in the target buffer. - - @return Pointer to the first occurrence. - @retval NULL if Length == 0 or Value was not found. - -**/ -VOID * -EFIAPI -ScanMem16 ( - IN CONST VOID *Buffer, - IN UINTN Length, - IN UINT16 Value - ) -{ - ASSERT (Buffer != NULL); - ASSERT (((UINTN)Buffer & (sizeof (Value) - 1)) == 0); - ASSERT (Length <= MAX_ADDRESS + (UINTN)Buffer + 1); - - if ((Length /= sizeof (Value)) == 0) { - return NULL; - } - return (VOID*)InternalMemScanMem16 (Buffer, Length, Value); -} - -/** - Scans a target buffer for a 32-bit value, and returns a pointer to the - matching 32-bit value in the target buffer. - - This function searches target the buffer specified by Buffer and Length from - the lowest address to the highest address at 32-bit increments for a 32-bit - value that matches Value. If a match is found, then a pointer to the matching - value in the target buffer is returned. If no match is found, then NULL is - returned. If Length is 0, then NULL is returned. - - If Buffer is NULL, then ASSERT(). - If Buffer is not aligned on a 32-bit boundary, then ASSERT(). - If Length is greater than (MAX_ADDRESS - Buffer + 1), then ASSERT(). - - @param Buffer Pointer to the target buffer to scan. - @param Length Number of bytes in Buffer to scan. - @param Value Value to search for in the target buffer. - - @return Pointer to the first occurrence or NULL if not found. - @retval NULL if Length == 0 or Value was not found. - -**/ -VOID * -EFIAPI -ScanMem32 ( - IN CONST VOID *Buffer, - IN UINTN Length, - IN UINT32 Value - ) -{ - ASSERT (Buffer != NULL); - ASSERT (((UINTN)Buffer & (sizeof (Value) - 1)) == 0); - ASSERT (Length <= MAX_ADDRESS + (UINTN)Buffer + 1); - - if ((Length /= sizeof (Value)) == 0) { - return NULL; - } - return (VOID*)InternalMemScanMem32 (Buffer, Length, Value); -} - -/** - Scans a target buffer for a 64-bit value, and returns a pointer to the - matching 64-bit value in the target buffer. - - This function searches target the buffer specified by Buffer and Length from - the lowest address to the highest address at 64-bit increments for a 64-bit - value that matches Value. If a match is found, then a pointer to the matching - value in the target buffer is returned. If no match is found, then NULL is - returned. If Length is 0, then NULL is returned. - - If Buffer is NULL, then ASSERT(). - If Buffer is not aligned on a 64-bit boundary, then ASSERT(). - If Length is greater than (MAX_ADDRESS - Buffer + 1), then ASSERT(). - - @param Buffer Pointer to the target buffer to scan. - @param Length Number of bytes in Buffer to scan. - @param Value Value to search for in the target buffer. - - @return Pointer to the first occurrence or NULL if not found. - @retval NULL if Length == 0 or Value was not found. - -**/ -VOID * -EFIAPI -ScanMem64 ( - IN CONST VOID *Buffer, - IN UINTN Length, - IN UINT64 Value - ) -{ - ASSERT (Buffer != NULL); - ASSERT (((UINTN)Buffer & (sizeof (Value) - 1)) == 0); - ASSERT (Length <= MAX_ADDRESS + (UINTN)Buffer + 1); - - if ((Length /= sizeof (Value)) == 0) { - return NULL; - } - return (VOID*)InternalMemScanMem64 (Buffer, Length, Value); -} diff --git a/MdePkg/Library/PeiMemoryLib/PeiMemoryLib.msa b/MdePkg/Library/PeiMemoryLib/PeiMemoryLib.msa index 38a05fe7af..06ed21e303 100644 --- a/MdePkg/Library/PeiMemoryLib/PeiMemoryLib.msa +++ b/MdePkg/Library/PeiMemoryLib/PeiMemoryLib.msa @@ -40,7 +40,17 @@ WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED. MemLib.c MemLibGuid.c MemLibGeneric.c - MemLibWrapper.c + CopyMemWrapper.c + SetMemWrapper.c + SetMem16Wrapper.c + SetMem32Wrapper.c + SetMem64Wrapper.c + CompareMemWrapper.c + ZeroMemWrapper.c + ScanMem8Wrapper.c + ScanMem16Wrapper.c + ScanMem32Wrapper.c + ScanMem64Wrapper.c
MdePkg diff --git a/MdePkg/Library/PeiMemoryLib/ScanMem16Wrapper.c b/MdePkg/Library/PeiMemoryLib/ScanMem16Wrapper.c new file mode 100644 index 0000000000..a17705db1d --- /dev/null +++ b/MdePkg/Library/PeiMemoryLib/ScanMem16Wrapper.c @@ -0,0 +1,66 @@ +/** @file + ScanMem16() implementation. + + 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: ScanMem16Wrapper.c + + The following BaseMemoryLib instances share the same version of this file: + + BaseMemoryLib + BaseMemoryLibMmx + BaseMemoryLibSse2 + BaseMemoryLibRepStr + PeiMemoryLib + UefiMemoryLib + +**/ + +#include "MemLibInternals.h" + +/** + Scans a target buffer for a 16-bit value, and returns a pointer to the + matching 16-bit value in the target buffer. + + This function searches target the buffer specified by Buffer and Length from + the lowest address to the highest address at 16-bit increments for a 16-bit + value that matches Value. If a match is found, then a pointer to the matching + value in the target buffer is returned. If no match is found, then NULL is + returned. If Length is 0, then NULL is returned. + + If Buffer is NULL, then ASSERT(). + If Buffer is not aligned on a 16-bit boundary, then ASSERT(). + If Length is greater than (MAX_ADDRESS - Buffer + 1), then ASSERT(). + + @param Buffer Pointer to the target buffer to scan. + @param Length Number of bytes in Buffer to scan. + @param Value Value to search for in the target buffer. + + @return Pointer to the first occurrence. + @retval NULL if Length == 0 or Value was not found. + +**/ +VOID * +EFIAPI +ScanMem16 ( + IN CONST VOID *Buffer, + IN UINTN Length, + IN UINT16 Value + ) +{ + ASSERT (Buffer != NULL); + ASSERT (((UINTN)Buffer & (sizeof (Value) - 1)) == 0); + ASSERT (Length <= MAX_ADDRESS + (UINTN)Buffer + 1); + + if ((Length /= sizeof (Value)) == 0) { + return NULL; + } + return (VOID*)InternalMemScanMem16 (Buffer, Length, Value); +} diff --git a/MdePkg/Library/PeiMemoryLib/ScanMem32Wrapper.c b/MdePkg/Library/PeiMemoryLib/ScanMem32Wrapper.c new file mode 100644 index 0000000000..67eb84d8ef --- /dev/null +++ b/MdePkg/Library/PeiMemoryLib/ScanMem32Wrapper.c @@ -0,0 +1,66 @@ +/** @file + ScanMem32() implementation. + + 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: ScanMem32Wrapper.c + + The following BaseMemoryLib instances share the same version of this file: + + BaseMemoryLib + BaseMemoryLibMmx + BaseMemoryLibSse2 + BaseMemoryLibRepStr + PeiMemoryLib + UefiMemoryLib + +**/ + +#include "MemLibInternals.h" + +/** + Scans a target buffer for a 32-bit value, and returns a pointer to the + matching 32-bit value in the target buffer. + + This function searches target the buffer specified by Buffer and Length from + the lowest address to the highest address at 32-bit increments for a 32-bit + value that matches Value. If a match is found, then a pointer to the matching + value in the target buffer is returned. If no match is found, then NULL is + returned. If Length is 0, then NULL is returned. + + If Buffer is NULL, then ASSERT(). + If Buffer is not aligned on a 32-bit boundary, then ASSERT(). + If Length is greater than (MAX_ADDRESS - Buffer + 1), then ASSERT(). + + @param Buffer Pointer to the target buffer to scan. + @param Length Number of bytes in Buffer to scan. + @param Value Value to search for in the target buffer. + + @return Pointer to the first occurrence or NULL if not found. + @retval NULL if Length == 0 or Value was not found. + +**/ +VOID * +EFIAPI +ScanMem32 ( + IN CONST VOID *Buffer, + IN UINTN Length, + IN UINT32 Value + ) +{ + ASSERT (Buffer != NULL); + ASSERT (((UINTN)Buffer & (sizeof (Value) - 1)) == 0); + ASSERT (Length <= MAX_ADDRESS + (UINTN)Buffer + 1); + + if ((Length /= sizeof (Value)) == 0) { + return NULL; + } + return (VOID*)InternalMemScanMem32 (Buffer, Length, Value); +} diff --git a/MdePkg/Library/PeiMemoryLib/ScanMem64Wrapper.c b/MdePkg/Library/PeiMemoryLib/ScanMem64Wrapper.c new file mode 100644 index 0000000000..c5f0762ebe --- /dev/null +++ b/MdePkg/Library/PeiMemoryLib/ScanMem64Wrapper.c @@ -0,0 +1,66 @@ +/** @file + ScanMem64() implementation. + + 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: ScanMem64Wrapper.c + + The following BaseMemoryLib instances share the same version of this file: + + BaseMemoryLib + BaseMemoryLibMmx + BaseMemoryLibSse2 + BaseMemoryLibRepStr + PeiMemoryLib + UefiMemoryLib + +**/ + +#include "MemLibInternals.h" + +/** + Scans a target buffer for a 64-bit value, and returns a pointer to the + matching 64-bit value in the target buffer. + + This function searches target the buffer specified by Buffer and Length from + the lowest address to the highest address at 64-bit increments for a 64-bit + value that matches Value. If a match is found, then a pointer to the matching + value in the target buffer is returned. If no match is found, then NULL is + returned. If Length is 0, then NULL is returned. + + If Buffer is NULL, then ASSERT(). + If Buffer is not aligned on a 64-bit boundary, then ASSERT(). + If Length is greater than (MAX_ADDRESS - Buffer + 1), then ASSERT(). + + @param Buffer Pointer to the target buffer to scan. + @param Length Number of bytes in Buffer to scan. + @param Value Value to search for in the target buffer. + + @return Pointer to the first occurrence or NULL if not found. + @retval NULL if Length == 0 or Value was not found. + +**/ +VOID * +EFIAPI +ScanMem64 ( + IN CONST VOID *Buffer, + IN UINTN Length, + IN UINT64 Value + ) +{ + ASSERT (Buffer != NULL); + ASSERT (((UINTN)Buffer & (sizeof (Value) - 1)) == 0); + ASSERT (Length <= MAX_ADDRESS + (UINTN)Buffer + 1); + + if ((Length /= sizeof (Value)) == 0) { + return NULL; + } + return (VOID*)InternalMemScanMem64 (Buffer, Length, Value); +} diff --git a/MdePkg/Library/PeiMemoryLib/ScanMem8Wrapper.c b/MdePkg/Library/PeiMemoryLib/ScanMem8Wrapper.c new file mode 100644 index 0000000000..9b817b1b0e --- /dev/null +++ b/MdePkg/Library/PeiMemoryLib/ScanMem8Wrapper.c @@ -0,0 +1,64 @@ +/** @file + ScanMem8() implementation. + + 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: ScanMem8Wrapper.c + + The following BaseMemoryLib instances share the same version of this file: + + BaseMemoryLib + BaseMemoryLibMmx + BaseMemoryLibSse2 + BaseMemoryLibRepStr + PeiMemoryLib + UefiMemoryLib + +**/ + +#include "MemLibInternals.h" + +/** + Scans a target buffer for an 8-bit value, and returns a pointer to the + matching 8-bit value in the target buffer. + + This function searches target the buffer specified by Buffer and Length from + the lowest address to the highest address for an 8-bit value that matches + Value. If a match is found, then a pointer to the matching byte in the target + buffer is returned. If no match is found, then NULL is returned. If Length is + 0, then NULL is returned. + + If Buffer is NULL, then ASSERT(). + If Length is greater than (MAX_ADDRESS - Buffer + 1), then ASSERT(). + + @param Buffer Pointer to the target buffer to scan. + @param Length Number of bytes in Buffer to scan. + @param Value Value to search for in the target buffer. + + @return Pointer to the first occurrence or NULL if not found. + @retval NULL if Length == 0 or Value was not found. + +**/ +VOID * +EFIAPI +ScanMem8 ( + IN CONST VOID *Buffer, + IN UINTN Length, + IN UINT8 Value + ) +{ + ASSERT (Buffer != NULL); + ASSERT (Length <= MAX_ADDRESS + (UINTN)Buffer + 1); + + if ((Length /= sizeof (Value)) == 0) { + return NULL; + } + return (VOID*)InternalMemScanMem8 (Buffer, Length, Value); +} diff --git a/MdePkg/Library/PeiMemoryLib/SetMem16Wrapper.c b/MdePkg/Library/PeiMemoryLib/SetMem16Wrapper.c new file mode 100644 index 0000000000..827e6ecf67 --- /dev/null +++ b/MdePkg/Library/PeiMemoryLib/SetMem16Wrapper.c @@ -0,0 +1,64 @@ +/** @file + SetMem16() implementation. + + 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: SetMem16Wrapper.c + + The following BaseMemoryLib instances share the same version of this file: + + BaseMemoryLib + BaseMemoryLibMmx + BaseMemoryLibSse2 + BaseMemoryLibRepStr + PeiMemoryLib + UefiMemoryLib + +**/ + +#include "MemLibInternals.h" + +/** + Fills a target buffer with a 16-bit value, and returns the target buffer. + + This function fills Length bytes of Buffer with the 16-bit value specified by + Value, and returns Buffer. Value is repeated every 16-bits in for Length + bytes of Buffer. + + If Buffer is NULL and Length > 0, then ASSERT(). + If Length is greater than (MAX_ADDRESS - Buffer + 1), then ASSERT(). + If Buffer is not aligned on a 16-bit boundary, then ASSERT(). + If Length is not aligned on a 16-bit boundary, then ASSERT(). + + @param Buffer Pointer to the target buffer to fill. + @param Length Number of bytes in Buffer to fill. + @param Value Value with which to fill Length bytes of Buffer. + + @return Buffer + +**/ +VOID * +EFIAPI +SetMem16 ( + OUT VOID *Buffer, + IN UINTN Length, + IN UINT16 Value + ) +{ + ASSERT (Buffer != NULL); + ASSERT (Length <= MAX_ADDRESS - (UINTN)Buffer + 1); + ASSERT ((((UINTN)Buffer) & 1) != 0); + ASSERT ((Length & 1) != 0); + + if ((Length /= sizeof (Value)) == 0) { + return Buffer; + } + return InternalMemSetMem16 (Buffer, Length, Value); +} diff --git a/MdePkg/Library/PeiMemoryLib/SetMem32Wrapper.c b/MdePkg/Library/PeiMemoryLib/SetMem32Wrapper.c new file mode 100644 index 0000000000..4b9d2413eb --- /dev/null +++ b/MdePkg/Library/PeiMemoryLib/SetMem32Wrapper.c @@ -0,0 +1,64 @@ +/** @file + SetMem32() implementation. + + 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: SetMem32Wrapper.c + + The following BaseMemoryLib instances share the same version of this file: + + BaseMemoryLib + BaseMemoryLibMmx + BaseMemoryLibSse2 + BaseMemoryLibRepStr + PeiMemoryLib + UefiMemoryLib + +**/ + +#include "MemLibInternals.h" + +/** + Fills a target buffer with a 32-bit value, and returns the target buffer. + + This function fills Length bytes of Buffer with the 32-bit value specified by + Value, and returns Buffer. Value is repeated every 32-bits in for Length + bytes of Buffer. + + If Buffer is NULL and Length > 0, then ASSERT(). + If Length is greater than (MAX_ADDRESS - Buffer + 1), then ASSERT(). + If Buffer is not aligned on a 32-bit boundary, then ASSERT(). + If Length is not aligned on a 32-bit boundary, then ASSERT(). + + @param Buffer Pointer to the target buffer to fill. + @param Length Number of bytes in Buffer to fill. + @param Value Value with which to fill Length bytes of Buffer. + + @return Buffer + +**/ +VOID * +EFIAPI +SetMem32 ( + OUT VOID *Buffer, + IN UINTN Length, + IN UINT32 Value + ) +{ + ASSERT (Buffer != NULL); + ASSERT (Length <= MAX_ADDRESS - (UINTN)Buffer + 1); + ASSERT ((((UINTN)Buffer) & 1) != 0); + ASSERT ((Length & 1) != 0); + + if ((Length /= sizeof (Value)) == 0) { + return Buffer; + } + return InternalMemSetMem32 (Buffer, Length, Value); +} diff --git a/MdePkg/Library/PeiMemoryLib/SetMem64Wrapper.c b/MdePkg/Library/PeiMemoryLib/SetMem64Wrapper.c new file mode 100644 index 0000000000..dbf3b62782 --- /dev/null +++ b/MdePkg/Library/PeiMemoryLib/SetMem64Wrapper.c @@ -0,0 +1,64 @@ +/** @file + SetMem64() implementation. + + 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: SetMem64Wrapper.c + + The following BaseMemoryLib instances share the same version of this file: + + BaseMemoryLib + BaseMemoryLibMmx + BaseMemoryLibSse2 + BaseMemoryLibRepStr + PeiMemoryLib + UefiMemoryLib + +**/ + +#include "MemLibInternals.h" + +/** + Fills a target buffer with a 64-bit value, and returns the target buffer. + + This function fills Length bytes of Buffer with the 64-bit value specified by + Value, and returns Buffer. Value is repeated every 64-bits in for Length + bytes of Buffer. + + If Buffer is NULL and Length > 0, then ASSERT(). + If Length is greater than (MAX_ADDRESS - Buffer + 1), then ASSERT(). + If Buffer is not aligned on a 64-bit boundary, then ASSERT(). + If Length is not aligned on a 64-bit boundary, then ASSERT(). + + @param Buffer Pointer to the target buffer to fill. + @param Length Number of bytes in Buffer to fill. + @param Value Value with which to fill Length bytes of Buffer. + + @return Buffer + +**/ +VOID * +EFIAPI +SetMem64 ( + OUT VOID *Buffer, + IN UINTN Length, + IN UINT64 Value + ) +{ + ASSERT (Buffer != NULL); + ASSERT (Length <= MAX_ADDRESS - (UINTN)Buffer + 1); + ASSERT ((((UINTN)Buffer) & 1) != 0); + ASSERT ((Length & 1) != 0); + + if ((Length /= sizeof (Value)) == 0) { + return Buffer; + } + return InternalMemSetMem64 (Buffer, Length, Value); +} diff --git a/MdePkg/Library/PeiMemoryLib/SetMemWrapper.c b/MdePkg/Library/PeiMemoryLib/SetMemWrapper.c new file mode 100644 index 0000000000..294a27a753 --- /dev/null +++ b/MdePkg/Library/PeiMemoryLib/SetMemWrapper.c @@ -0,0 +1,52 @@ +/** @file + SetMem() implementation. + + 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: SetMemWrapper.c + + The following BaseMemoryLib instances share the same version of this file: + + BaseMemoryLib + BaseMemoryLibMmx + BaseMemoryLibSse2 + BaseMemoryLibRepStr + PeiMemoryLib + UefiMemoryLib + +**/ + +#include "MemLibInternals.h" + +/** + Set Buffer to Value for Size bytes. + + This function fills Length bytes of Buffer with Value, and returns Buffer. + + If Length is greater than (MAX_ADDRESS - Buffer + 1), then ASSERT(). + + @param Buffer Memory to set. + @param Size Number of bytes to set + @param Value Value of the set operation. + + @return Buffer + +**/ +VOID * +EFIAPI +SetMem ( + IN VOID *Buffer, + IN UINTN Size, + IN UINT8 Value + ) +{ + ASSERT (Size <= MAX_ADDRESS - (UINTN)Buffer + 1); + return InternalMemSetMem (Buffer, Size, Value); +} diff --git a/MdePkg/Library/PeiMemoryLib/ZeroMemWrapper.c b/MdePkg/Library/PeiMemoryLib/ZeroMemWrapper.c new file mode 100644 index 0000000000..d7d7919ba2 --- /dev/null +++ b/MdePkg/Library/PeiMemoryLib/ZeroMemWrapper.c @@ -0,0 +1,51 @@ +/** @file + ZeroMem() implementation. + + 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: ZeroMemWrapper.c + + The following BaseMemoryLib instances share the same version of this file: + + BaseMemoryLib + BaseMemoryLibMmx + BaseMemoryLibSse2 + BaseMemoryLibRepStr + PeiMemoryLib + UefiMemoryLib + +**/ + +#include "MemLibInternals.h" + +/** + Set Buffer to 0 for Size bytes. + + This function fills Length bytes of Buffer with zeros, and returns Buffer. + + If Buffer is NULL and Length > 0, then ASSERT(). + If Length is greater than (MAX_ADDRESS - Buffer + 1), then ASSERT(). + + @param Buffer Memory to set. + @param Size Number of bytes to set + + @return Buffer + +**/ +VOID * +EFIAPI +ZeroMem ( + IN VOID *Buffer, + IN UINTN Size + ) +{ + ASSERT (Buffer != NULL); + return InternalMemSetMem (Buffer, Size, 0); +} diff --git a/MdePkg/Library/UefiMemoryLib/CompareMemWrapper.c b/MdePkg/Library/UefiMemoryLib/CompareMemWrapper.c new file mode 100644 index 0000000000..c8199d8dc3 --- /dev/null +++ b/MdePkg/Library/UefiMemoryLib/CompareMemWrapper.c @@ -0,0 +1,67 @@ +/** @file + CompareMem() implementation. + + 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: CompareMemWrapper.c + + The following BaseMemoryLib instances share the same version of this file: + + BaseMemoryLib + BaseMemoryLibMmx + BaseMemoryLibSse2 + BaseMemoryLibRepStr + PeiMemoryLib + UefiMemoryLib + +**/ + +#include "MemLibInternals.h" + +/** + Compares two memory buffers of a given length. + + This function compares Length bytes of SourceBuffer to Length bytes of + DestinationBuffer. If all Length bytes of the two buffers are identical, then + 0 is returned. Otherwise, the value returned is the first mismatched byte in + SourceBuffer subtracted from the first mismatched byte in DestinationBuffer. + + If DestinationBuffer is NULL and Length > 0, then ASSERT(). + If SourceBuffer is NULL and Length > 0, then ASSERT(). + If Length is greater than (MAX_ADDRESS - DestinationBuffer + 1), then + ASSERT(). + If Length is greater than (MAX_ADDRESS - SourceBuffer + 1), then ASSERT(). + + @param DestinationBuffer First memory buffer + @param SourceBuffer Second memory buffer + @param Length Length of DestinationBuffer and SourceBuffer memory + regions to compare + + @retval 0 if DestinationBuffer == SourceBuffer + @retval Non-zero if DestinationBuffer != SourceBuffer + +**/ +INTN +EFIAPI +CompareMem ( + IN CONST VOID *DestinationBuffer, + IN CONST VOID *SourceBuffer, + IN UINTN Length + ) +{ + ASSERT (DestinationBuffer != NULL); + ASSERT (SourceBuffer != NULL); + ASSERT (Length <= MAX_ADDRESS - (UINTN)DestinationBuffer + 1); + ASSERT (Length <= MAX_ADDRESS - (UINTN)SourceBuffer + 1); + if (Length == 0) { + return 0; + } + return InternalMemCompareMem (DestinationBuffer, SourceBuffer, Length); +} diff --git a/MdePkg/Library/UefiMemoryLib/CopyMemWrapper.c b/MdePkg/Library/UefiMemoryLib/CopyMemWrapper.c new file mode 100644 index 0000000000..5ca62f5047 --- /dev/null +++ b/MdePkg/Library/UefiMemoryLib/CopyMemWrapper.c @@ -0,0 +1,66 @@ +/** @file + CopyMem() implementation. + + 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: CopyMemWrapper.c + + The following BaseMemoryLib instances share the same version of this file: + + BaseMemoryLib + BaseMemoryLibMmx + BaseMemoryLibSse2 + BaseMemoryLibRepStr + PeiMemoryLib + UefiMemoryLib + +**/ + +#include "MemLibInternals.h" + +/** + Copy Length bytes from Source to Destination. + + This function copies Length bytes from SourceBuffer to DestinationBuffer, and + returns DestinationBuffer. The implementation must be reentrant, and it must + handle the case where SourceBuffer overlaps DestinationBuffer. + + If Length is greater than (MAX_ADDRESS - DestinationBuffer + 1), then + ASSERT(). + If Length is greater than (MAX_ADDRESS - SourceBuffer + 1), then ASSERT(). + + @param Destination Target of copy + @param Source Place to copy from + @param Length Number of bytes to copy + + @return Destination + +**/ +VOID * +EFIAPI +CopyMem ( + OUT VOID *Destination, + IN CONST VOID *Source, + IN UINTN Length + ) +{ + ASSERT ( + Destination == NULL || + Length <= MAX_ADDRESS - (UINTN)Destination + 1 + ); + ASSERT ( + Source == NULL || + Length <= MAX_ADDRESS - (UINTN)Source + 1 + ); + if (Destination == Source || Length == 0) { + return Destination; + } + return InternalMemCopyMem (Destination, Source, Length); +} diff --git a/MdePkg/Library/UefiMemoryLib/MemLibGeneric.c b/MdePkg/Library/UefiMemoryLib/MemLibGeneric.c index ef9f358a79..bda1f4992f 100644 --- a/MdePkg/Library/UefiMemoryLib/MemLibGeneric.c +++ b/MdePkg/Library/UefiMemoryLib/MemLibGeneric.c @@ -20,23 +20,7 @@ **/ -/** - Set Buffer to Value for Size bytes. - - @param Buffer Memory to set. - @param Size Number of bytes to set - @param Value Value of the set operation. - - @return Buffer - -**/ -VOID * -EFIAPI -InternalMemSetMem ( - OUT VOID *Buffer, - IN UINTN Length, - IN UINT8 Value - ); +#include "MemLibInternals.h" /** Fills a target buffer with a 16-bit value, and returns the target buffer. diff --git a/MdePkg/Library/UefiMemoryLib/MemLibInternals.h b/MdePkg/Library/UefiMemoryLib/MemLibInternals.h new file mode 100644 index 0000000000..ca7311a407 --- /dev/null +++ b/MdePkg/Library/UefiMemoryLib/MemLibInternals.h @@ -0,0 +1,230 @@ +/** @file + Declaration of internal functions for Base Memory 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: MemLibInternals.h + + The following BaseMemoryLib instances share the same version of this file: + + BaseMemoryLib + BaseMemoryLibMmx + BaseMemoryLibSse2 + BaseMemoryLibRepStr + PeiMemoryLib + UefiMemoryLib + +**/ + +#ifndef __MEM_LIB_INTERNALS__ +#define __MEM_LIB_INTERNALS__ + +/** + Copy Length bytes from Source to Destination. + + @param Destination Target of copy + @param Source Place to copy from + @param Length Number of bytes to copy + + @return Destination + +**/ +VOID * +EFIAPI +InternalMemCopyMem ( + OUT VOID *DestinationBuffer, + IN CONST VOID *SourceBuffer, + IN UINTN Length + ); + +/** + Set Buffer to Value for Size bytes. + + @param Buffer Memory to set. + @param Size Number of bytes to set + @param Value Value of the set operation. + + @return Buffer + +**/ +VOID * +EFIAPI +InternalMemSetMem ( + OUT VOID *Buffer, + IN UINTN Length, + IN UINT8 Value + ); + +/** + Fills a target buffer with a 16-bit value, and returns the target buffer. + + @param Buffer Pointer to the target buffer to fill. + @param Length Number of bytes in Buffer to fill. + @param Value Value with which to fill Length bytes of Buffer. + + @return Buffer + +**/ +VOID * +EFIAPI +InternalMemSetMem16 ( + OUT VOID *Buffer, + IN UINTN Length, + IN UINT16 Value + ); + +/** + Fills a target buffer with a 32-bit value, and returns the target buffer. + + @param Buffer Pointer to the target buffer to fill. + @param Length Number of bytes in Buffer to fill. + @param Value Value with which to fill Length bytes of Buffer. + + @return Buffer + +**/ +VOID * +EFIAPI +InternalMemSetMem32 ( + OUT VOID *Buffer, + IN UINTN Length, + IN UINT32 Value + ); + +/** + Fills a target buffer with a 64-bit value, and returns the target buffer. + + @param Buffer Pointer to the target buffer to fill. + @param Length Number of bytes in Buffer to fill. + @param Value Value with which to fill Length bytes of Buffer. + + @return Buffer + +**/ +VOID * +EFIAPI +InternalMemSetMem64 ( + OUT VOID *Buffer, + IN UINTN Length, + IN UINT64 Value + ); + +/** + Set Buffer to 0 for Size bytes. + + @param Buffer Memory to set. + @param Size Number of bytes to set + + @return Buffer + +**/ +VOID * +EFIAPI +InternalMemZeroMem ( + OUT VOID *Buffer, + IN UINTN Length + ); + +/** + Compares two memory buffers of a given length. + + @param DestinationBuffer First memory buffer + @param SourceBuffer Second memory buffer + @param Length Length of DestinationBuffer and SourceBuffer memory + regions to compare. Must be non-zero. + + @retval 0 if MemOne == MemTwo + +**/ +INTN +EFIAPI +InternalMemCompareMem ( + IN CONST VOID *DestinationBuffer, + IN CONST VOID *SourceBuffer, + IN UINTN Length + ); + +/** + Scans a target buffer for an 8-bit value, and returns a pointer to the + matching 8-bit value in the target buffer. + + @param Buffer Pointer to the target buffer to scan. + @param Length Number of bytes in Buffer to scan. Must be non-zero. + @param Value Value to search for in the target buffer. + + @return Pointer to the first occurrence or NULL if not found. + +**/ +CONST VOID * +EFIAPI +InternalMemScanMem8 ( + IN CONST VOID *Buffer, + IN UINTN Length, + IN UINT8 Value + ); + +/** + Scans a target buffer for a 16-bit value, and returns a pointer to the + matching 16-bit value in the target buffer. + + @param Buffer Pointer to the target buffer to scan. + @param Length Number of bytes in Buffer to scan. Must be non-zero. + @param Value Value to search for in the target buffer. + + @return Pointer to the first occurrence or NULL if not found. + +**/ +CONST VOID * +EFIAPI +InternalMemScanMem16 ( + IN CONST VOID *Buffer, + IN UINTN Length, + IN UINT16 Value + ); + +/** + Scans a target buffer for a 32-bit value, and returns a pointer to the + matching 32-bit value in the target buffer. + + @param Buffer Pointer to the target buffer to scan. + @param Length Number of bytes in Buffer to scan. Must be non-zero. + @param Value Value to search for in the target buffer. + + @return Pointer to the first occurrence or NULL if not found. + +**/ +CONST VOID * +EFIAPI +InternalMemScanMem32 ( + IN CONST VOID *Buffer, + IN UINTN Length, + IN UINT32 Value + ); + +/** + Scans a target buffer for a 64-bit value, and returns a pointer to the + matching 64-bit value in the target buffer. + + @param Buffer Pointer to the target buffer to scan. + @param Length Number of bytes in Buffer to scan. Must be non-zero. + @param Value Value to search for in the target buffer. + + @return Pointer to the first occurrence or NULL if not found. + +**/ +CONST VOID * +EFIAPI +InternalMemScanMem64 ( + IN CONST VOID *Buffer, + IN UINTN Length, + IN UINT64 Value + ); + +#endif diff --git a/MdePkg/Library/UefiMemoryLib/MemLibWrapper.c b/MdePkg/Library/UefiMemoryLib/MemLibWrapper.c deleted file mode 100644 index 2ef0766242..0000000000 --- a/MdePkg/Library/UefiMemoryLib/MemLibWrapper.c +++ /dev/null @@ -1,620 +0,0 @@ -/** @file - Wrapper functions for Base Memory 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: MemLibWrapper.c - - The following BaseMemoryLib instances share the same version of this file: - - BaseMemoryLib - BaseMemoryLibMmx - BaseMemoryLibSse2 - BaseMemoryLibRepStr - PeiMemoryLib - UefiMemoryLib - -**/ - -/** - Copy Length bytes from Source to Destination. - - @param Destination Target of copy - @param Source Place to copy from - @param Length Number of bytes to copy - - @return Destination - -**/ -VOID * -EFIAPI -InternalMemCopyMem ( - OUT VOID *DestinationBuffer, - IN CONST VOID *SourceBuffer, - IN UINTN Length - ); - -/** - Set Buffer to Value for Size bytes. - - @param Buffer Memory to set. - @param Size Number of bytes to set - @param Value Value of the set operation. - - @return Buffer - -**/ -VOID * -EFIAPI -InternalMemSetMem ( - OUT VOID *Buffer, - IN UINTN Length, - IN UINT8 Value - ); - -/** - Fills a target buffer with a 16-bit value, and returns the target buffer. - - @param Buffer Pointer to the target buffer to fill. - @param Length Number of bytes in Buffer to fill. - @param Value Value with which to fill Length bytes of Buffer. - - @return Buffer - -**/ -VOID * -EFIAPI -InternalMemSetMem16 ( - OUT VOID *Buffer, - IN UINTN Length, - IN UINT16 Value - ); - -/** - Fills a target buffer with a 32-bit value, and returns the target buffer. - - @param Buffer Pointer to the target buffer to fill. - @param Length Number of bytes in Buffer to fill. - @param Value Value with which to fill Length bytes of Buffer. - - @return Buffer - -**/ -VOID * -EFIAPI -InternalMemSetMem32 ( - OUT VOID *Buffer, - IN UINTN Length, - IN UINT32 Value - ); - -/** - Fills a target buffer with a 64-bit value, and returns the target buffer. - - @param Buffer Pointer to the target buffer to fill. - @param Length Number of bytes in Buffer to fill. - @param Value Value with which to fill Length bytes of Buffer. - - @return Buffer - -**/ -VOID * -EFIAPI -InternalMemSetMem64 ( - OUT VOID *Buffer, - IN UINTN Length, - IN UINT64 Value - ); - -/** - Set Buffer to 0 for Size bytes. - - @param Buffer Memory to set. - @param Size Number of bytes to set - - @return Buffer - -**/ -VOID * -EFIAPI -InternalMemZeroMem ( - OUT VOID *Buffer, - IN UINTN Length - ); - -/** - Compares two memory buffers of a given length. - - @param DestinationBuffer First memory buffer - @param SourceBuffer Second memory buffer - @param Length Length of DestinationBuffer and SourceBuffer memory - regions to compare. Must be non-zero. - - @retval 0 if MemOne == MemTwo - -**/ -INTN -EFIAPI -InternalMemCompareMem ( - IN CONST VOID *DestinationBuffer, - IN CONST VOID *SourceBuffer, - IN UINTN Length - ); - -/** - Scans a target buffer for an 8-bit value, and returns a pointer to the - matching 8-bit value in the target buffer. - - @param Buffer Pointer to the target buffer to scan. - @param Length Number of bytes in Buffer to scan. Must be non-zero. - @param Value Value to search for in the target buffer. - - @return Pointer to the first occurrence or NULL if not found. - -**/ -CONST VOID * -EFIAPI -InternalMemScanMem8 ( - IN CONST VOID *Buffer, - IN UINTN Length, - IN UINT8 Value - ); - -/** - Scans a target buffer for a 16-bit value, and returns a pointer to the - matching 16-bit value in the target buffer. - - @param Buffer Pointer to the target buffer to scan. - @param Length Number of bytes in Buffer to scan. Must be non-zero. - @param Value Value to search for in the target buffer. - - @return Pointer to the first occurrence or NULL if not found. - -**/ -CONST VOID * -EFIAPI -InternalMemScanMem16 ( - IN CONST VOID *Buffer, - IN UINTN Length, - IN UINT16 Value - ); - -/** - Scans a target buffer for a 32-bit value, and returns a pointer to the - matching 32-bit value in the target buffer. - - @param Buffer Pointer to the target buffer to scan. - @param Length Number of bytes in Buffer to scan. Must be non-zero. - @param Value Value to search for in the target buffer. - - @return Pointer to the first occurrence or NULL if not found. - -**/ -CONST VOID * -EFIAPI -InternalMemScanMem32 ( - IN CONST VOID *Buffer, - IN UINTN Length, - IN UINT32 Value - ); - -/** - Scans a target buffer for a 64-bit value, and returns a pointer to the - matching 64-bit value in the target buffer. - - @param Buffer Pointer to the target buffer to scan. - @param Length Number of bytes in Buffer to scan. Must be non-zero. - @param Value Value to search for in the target buffer. - - @return Pointer to the first occurrence or NULL if not found. - -**/ -CONST VOID * -EFIAPI -InternalMemScanMem64 ( - IN CONST VOID *Buffer, - IN UINTN Length, - IN UINT64 Value - ); - -/** - Copy Length bytes from Source to Destination. - - This function copies Length bytes from SourceBuffer to DestinationBuffer, and - returns DestinationBuffer. The implementation must be reentrant, and it must - handle the case where SourceBuffer overlaps DestinationBuffer. - - If Length is greater than (MAX_ADDRESS - DestinationBuffer + 1), then - ASSERT(). - If Length is greater than (MAX_ADDRESS - SourceBuffer + 1), then ASSERT(). - - @param Destination Target of copy - @param Source Place to copy from - @param Length Number of bytes to copy - - @return Destination - -**/ -VOID * -EFIAPI -CopyMem ( - OUT VOID *Destination, - IN CONST VOID *Source, - IN UINTN Length - ) -{ - ASSERT (Length <= MAX_ADDRESS - (UINTN)Destination + 1); - ASSERT (Length <= MAX_ADDRESS - (UINTN)Source + 1); - return InternalMemCopyMem (Destination, Source, Length); -} - -/** - Set Buffer to Value for Size bytes. - - This function fills Length bytes of Buffer with Value, and returns Buffer. - - If Length is greater than (MAX_ADDRESS - Buffer + 1), then ASSERT(). - - @param Buffer Memory to set. - @param Size Number of bytes to set - @param Value Value of the set operation. - - @return Buffer - -**/ -VOID * -EFIAPI -SetMem ( - IN VOID *Buffer, - IN UINTN Size, - IN UINT8 Value - ) -{ - ASSERT (Size <= MAX_ADDRESS - (UINTN)Buffer + 1); - return InternalMemSetMem (Buffer, Size, Value); -} - -/** - Fills a target buffer with a 16-bit value, and returns the target buffer. - - This function fills Length bytes of Buffer with the 16-bit value specified by - Value, and returns Buffer. Value is repeated every 16-bits in for Length - bytes of Buffer. - - If Buffer is NULL and Length > 0, then ASSERT(). - If Length is greater than (MAX_ADDRESS - Buffer + 1), then ASSERT(). - If Buffer is not aligned on a 16-bit boundary, then ASSERT(). - If Length is not aligned on a 16-bit boundary, then ASSERT(). - - @param Buffer Pointer to the target buffer to fill. - @param Length Number of bytes in Buffer to fill. - @param Value Value with which to fill Length bytes of Buffer. - - @return Buffer - -**/ -VOID * -EFIAPI -SetMem16 ( - OUT VOID *Buffer, - IN UINTN Length, - IN UINT16 Value - ) -{ - ASSERT (Buffer != NULL); - ASSERT (Length <= MAX_ADDRESS - (UINTN)Buffer + 1); - ASSERT ((((UINTN)Buffer) & 1) != 0); - ASSERT ((Length & 1) != 0); - - if ((Length /= sizeof (Value)) == 0) { - return Buffer; - } - return InternalMemSetMem16 (Buffer, Length, Value); -} - -/** - Fills a target buffer with a 32-bit value, and returns the target buffer. - - This function fills Length bytes of Buffer with the 32-bit value specified by - Value, and returns Buffer. Value is repeated every 32-bits in for Length - bytes of Buffer. - - If Buffer is NULL and Length > 0, then ASSERT(). - If Length is greater than (MAX_ADDRESS - Buffer + 1), then ASSERT(). - If Buffer is not aligned on a 32-bit boundary, then ASSERT(). - If Length is not aligned on a 32-bit boundary, then ASSERT(). - - @param Buffer Pointer to the target buffer to fill. - @param Length Number of bytes in Buffer to fill. - @param Value Value with which to fill Length bytes of Buffer. - - @return Buffer - -**/ -VOID * -EFIAPI -SetMem32 ( - OUT VOID *Buffer, - IN UINTN Length, - IN UINT32 Value - ) -{ - ASSERT (Buffer != NULL); - ASSERT (Length <= MAX_ADDRESS - (UINTN)Buffer + 1); - ASSERT ((((UINTN)Buffer) & 1) != 0); - ASSERT ((Length & 1) != 0); - - if ((Length /= sizeof (Value)) == 0) { - return Buffer; - } - return InternalMemSetMem32 (Buffer, Length, Value); -} - -/** - Fills a target buffer with a 64-bit value, and returns the target buffer. - - This function fills Length bytes of Buffer with the 64-bit value specified by - Value, and returns Buffer. Value is repeated every 64-bits in for Length - bytes of Buffer. - - If Buffer is NULL and Length > 0, then ASSERT(). - If Length is greater than (MAX_ADDRESS - Buffer + 1), then ASSERT(). - If Buffer is not aligned on a 64-bit boundary, then ASSERT(). - If Length is not aligned on a 64-bit boundary, then ASSERT(). - - @param Buffer Pointer to the target buffer to fill. - @param Length Number of bytes in Buffer to fill. - @param Value Value with which to fill Length bytes of Buffer. - - @return Buffer - -**/ -VOID * -EFIAPI -SetMem64 ( - OUT VOID *Buffer, - IN UINTN Length, - IN UINT64 Value - ) -{ - ASSERT (Buffer != NULL); - ASSERT (Length <= MAX_ADDRESS - (UINTN)Buffer + 1); - ASSERT ((((UINTN)Buffer) & 1) != 0); - ASSERT ((Length & 1) != 0); - - if ((Length /= sizeof (Value)) == 0) { - return Buffer; - } - return InternalMemSetMem64 (Buffer, Length, Value); -} - -/** - Set Buffer to 0 for Size bytes. - - This function fills Length bytes of Buffer with zeros, and returns Buffer. - - If Buffer is NULL and Length > 0, then ASSERT(). - If Length is greater than (MAX_ADDRESS - Buffer + 1), then ASSERT(). - - @param Buffer Memory to set. - @param Size Number of bytes to set - - @return Buffer - -**/ -VOID * -EFIAPI -ZeroMem ( - IN VOID *Buffer, - IN UINTN Size - ) -{ - ASSERT (Buffer != NULL); - return InternalMemSetMem (Buffer, Size, 0); -} - -/** - Compares two memory buffers of a given length. - - This function compares Length bytes of SourceBuffer to Length bytes of - DestinationBuffer. If all Length bytes of the two buffers are identical, then - 0 is returned. Otherwise, the value returned is the first mismatched byte in - SourceBuffer subtracted from the first mismatched byte in DestinationBuffer. - - If DestinationBuffer is NULL and Length > 0, then ASSERT(). - If SourceBuffer is NULL and Length > 0, then ASSERT(). - If Length is greater than (MAX_ADDRESS - DestinationBuffer + 1), then - ASSERT(). - If Length is greater than (MAX_ADDRESS - SourceBuffer + 1), then ASSERT(). - - @param DestinationBuffer First memory buffer - @param SourceBuffer Second memory buffer - @param Length Length of DestinationBuffer and SourceBuffer memory - regions to compare - - @retval 0 if DestinationBuffer == SourceBuffer - @retval Non-zero if DestinationBuffer != SourceBuffer - -**/ -INTN -EFIAPI -CompareMem ( - IN CONST VOID *DestinationBuffer, - IN CONST VOID *SourceBuffer, - IN UINTN Length - ) -{ - ASSERT (DestinationBuffer != NULL); - ASSERT (SourceBuffer != NULL); - ASSERT (Length <= MAX_ADDRESS - (UINTN)DestinationBuffer + 1); - ASSERT (Length <= MAX_ADDRESS - (UINTN)SourceBuffer + 1); - if (Length == 0) { - return 0; - } - return InternalMemCompareMem (DestinationBuffer, SourceBuffer, Length); -} - -/** - Scans a target buffer for an 8-bit value, and returns a pointer to the - matching 8-bit value in the target buffer. - - This function searches target the buffer specified by Buffer and Length from - the lowest address to the highest address for an 8-bit value that matches - Value. If a match is found, then a pointer to the matching byte in the target - buffer is returned. If no match is found, then NULL is returned. If Length is - 0, then NULL is returned. - - If Buffer is NULL, then ASSERT(). - If Length is greater than (MAX_ADDRESS - Buffer + 1), then ASSERT(). - - @param Buffer Pointer to the target buffer to scan. - @param Length Number of bytes in Buffer to scan. - @param Value Value to search for in the target buffer. - - @return Pointer to the first occurrence or NULL if not found. - @retval NULL if Length == 0 or Value was not found. - -**/ -VOID * -EFIAPI -ScanMem8 ( - IN CONST VOID *Buffer, - IN UINTN Length, - IN UINT8 Value - ) -{ - ASSERT (Buffer != NULL); - ASSERT (Length <= MAX_ADDRESS + (UINTN)Buffer + 1); - - if ((Length /= sizeof (Value)) == 0) { - return NULL; - } - return (VOID*)InternalMemScanMem8 (Buffer, Length, Value); -} - -/** - Scans a target buffer for a 16-bit value, and returns a pointer to the - matching 16-bit value in the target buffer. - - This function searches target the buffer specified by Buffer and Length from - the lowest address to the highest address at 16-bit increments for a 16-bit - value that matches Value. If a match is found, then a pointer to the matching - value in the target buffer is returned. If no match is found, then NULL is - returned. If Length is 0, then NULL is returned. - - If Buffer is NULL, then ASSERT(). - If Buffer is not aligned on a 16-bit boundary, then ASSERT(). - If Length is greater than (MAX_ADDRESS - Buffer + 1), then ASSERT(). - - @param Buffer Pointer to the target buffer to scan. - @param Length Number of bytes in Buffer to scan. - @param Value Value to search for in the target buffer. - - @return Pointer to the first occurrence. - @retval NULL if Length == 0 or Value was not found. - -**/ -VOID * -EFIAPI -ScanMem16 ( - IN CONST VOID *Buffer, - IN UINTN Length, - IN UINT16 Value - ) -{ - ASSERT (Buffer != NULL); - ASSERT (((UINTN)Buffer & (sizeof (Value) - 1)) == 0); - ASSERT (Length <= MAX_ADDRESS + (UINTN)Buffer + 1); - - if ((Length /= sizeof (Value)) == 0) { - return NULL; - } - return (VOID*)InternalMemScanMem16 (Buffer, Length, Value); -} - -/** - Scans a target buffer for a 32-bit value, and returns a pointer to the - matching 32-bit value in the target buffer. - - This function searches target the buffer specified by Buffer and Length from - the lowest address to the highest address at 32-bit increments for a 32-bit - value that matches Value. If a match is found, then a pointer to the matching - value in the target buffer is returned. If no match is found, then NULL is - returned. If Length is 0, then NULL is returned. - - If Buffer is NULL, then ASSERT(). - If Buffer is not aligned on a 32-bit boundary, then ASSERT(). - If Length is greater than (MAX_ADDRESS - Buffer + 1), then ASSERT(). - - @param Buffer Pointer to the target buffer to scan. - @param Length Number of bytes in Buffer to scan. - @param Value Value to search for in the target buffer. - - @return Pointer to the first occurrence or NULL if not found. - @retval NULL if Length == 0 or Value was not found. - -**/ -VOID * -EFIAPI -ScanMem32 ( - IN CONST VOID *Buffer, - IN UINTN Length, - IN UINT32 Value - ) -{ - ASSERT (Buffer != NULL); - ASSERT (((UINTN)Buffer & (sizeof (Value) - 1)) == 0); - ASSERT (Length <= MAX_ADDRESS + (UINTN)Buffer + 1); - - if ((Length /= sizeof (Value)) == 0) { - return NULL; - } - return (VOID*)InternalMemScanMem32 (Buffer, Length, Value); -} - -/** - Scans a target buffer for a 64-bit value, and returns a pointer to the - matching 64-bit value in the target buffer. - - This function searches target the buffer specified by Buffer and Length from - the lowest address to the highest address at 64-bit increments for a 64-bit - value that matches Value. If a match is found, then a pointer to the matching - value in the target buffer is returned. If no match is found, then NULL is - returned. If Length is 0, then NULL is returned. - - If Buffer is NULL, then ASSERT(). - If Buffer is not aligned on a 64-bit boundary, then ASSERT(). - If Length is greater than (MAX_ADDRESS - Buffer + 1), then ASSERT(). - - @param Buffer Pointer to the target buffer to scan. - @param Length Number of bytes in Buffer to scan. - @param Value Value to search for in the target buffer. - - @return Pointer to the first occurrence or NULL if not found. - @retval NULL if Length == 0 or Value was not found. - -**/ -VOID * -EFIAPI -ScanMem64 ( - IN CONST VOID *Buffer, - IN UINTN Length, - IN UINT64 Value - ) -{ - ASSERT (Buffer != NULL); - ASSERT (((UINTN)Buffer & (sizeof (Value) - 1)) == 0); - ASSERT (Length <= MAX_ADDRESS + (UINTN)Buffer + 1); - - if ((Length /= sizeof (Value)) == 0) { - return NULL; - } - return (VOID*)InternalMemScanMem64 (Buffer, Length, Value); -} diff --git a/MdePkg/Library/UefiMemoryLib/ScanMem16Wrapper.c b/MdePkg/Library/UefiMemoryLib/ScanMem16Wrapper.c new file mode 100644 index 0000000000..a17705db1d --- /dev/null +++ b/MdePkg/Library/UefiMemoryLib/ScanMem16Wrapper.c @@ -0,0 +1,66 @@ +/** @file + ScanMem16() implementation. + + 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: ScanMem16Wrapper.c + + The following BaseMemoryLib instances share the same version of this file: + + BaseMemoryLib + BaseMemoryLibMmx + BaseMemoryLibSse2 + BaseMemoryLibRepStr + PeiMemoryLib + UefiMemoryLib + +**/ + +#include "MemLibInternals.h" + +/** + Scans a target buffer for a 16-bit value, and returns a pointer to the + matching 16-bit value in the target buffer. + + This function searches target the buffer specified by Buffer and Length from + the lowest address to the highest address at 16-bit increments for a 16-bit + value that matches Value. If a match is found, then a pointer to the matching + value in the target buffer is returned. If no match is found, then NULL is + returned. If Length is 0, then NULL is returned. + + If Buffer is NULL, then ASSERT(). + If Buffer is not aligned on a 16-bit boundary, then ASSERT(). + If Length is greater than (MAX_ADDRESS - Buffer + 1), then ASSERT(). + + @param Buffer Pointer to the target buffer to scan. + @param Length Number of bytes in Buffer to scan. + @param Value Value to search for in the target buffer. + + @return Pointer to the first occurrence. + @retval NULL if Length == 0 or Value was not found. + +**/ +VOID * +EFIAPI +ScanMem16 ( + IN CONST VOID *Buffer, + IN UINTN Length, + IN UINT16 Value + ) +{ + ASSERT (Buffer != NULL); + ASSERT (((UINTN)Buffer & (sizeof (Value) - 1)) == 0); + ASSERT (Length <= MAX_ADDRESS + (UINTN)Buffer + 1); + + if ((Length /= sizeof (Value)) == 0) { + return NULL; + } + return (VOID*)InternalMemScanMem16 (Buffer, Length, Value); +} diff --git a/MdePkg/Library/UefiMemoryLib/ScanMem32Wrapper.c b/MdePkg/Library/UefiMemoryLib/ScanMem32Wrapper.c new file mode 100644 index 0000000000..67eb84d8ef --- /dev/null +++ b/MdePkg/Library/UefiMemoryLib/ScanMem32Wrapper.c @@ -0,0 +1,66 @@ +/** @file + ScanMem32() implementation. + + 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: ScanMem32Wrapper.c + + The following BaseMemoryLib instances share the same version of this file: + + BaseMemoryLib + BaseMemoryLibMmx + BaseMemoryLibSse2 + BaseMemoryLibRepStr + PeiMemoryLib + UefiMemoryLib + +**/ + +#include "MemLibInternals.h" + +/** + Scans a target buffer for a 32-bit value, and returns a pointer to the + matching 32-bit value in the target buffer. + + This function searches target the buffer specified by Buffer and Length from + the lowest address to the highest address at 32-bit increments for a 32-bit + value that matches Value. If a match is found, then a pointer to the matching + value in the target buffer is returned. If no match is found, then NULL is + returned. If Length is 0, then NULL is returned. + + If Buffer is NULL, then ASSERT(). + If Buffer is not aligned on a 32-bit boundary, then ASSERT(). + If Length is greater than (MAX_ADDRESS - Buffer + 1), then ASSERT(). + + @param Buffer Pointer to the target buffer to scan. + @param Length Number of bytes in Buffer to scan. + @param Value Value to search for in the target buffer. + + @return Pointer to the first occurrence or NULL if not found. + @retval NULL if Length == 0 or Value was not found. + +**/ +VOID * +EFIAPI +ScanMem32 ( + IN CONST VOID *Buffer, + IN UINTN Length, + IN UINT32 Value + ) +{ + ASSERT (Buffer != NULL); + ASSERT (((UINTN)Buffer & (sizeof (Value) - 1)) == 0); + ASSERT (Length <= MAX_ADDRESS + (UINTN)Buffer + 1); + + if ((Length /= sizeof (Value)) == 0) { + return NULL; + } + return (VOID*)InternalMemScanMem32 (Buffer, Length, Value); +} diff --git a/MdePkg/Library/UefiMemoryLib/ScanMem64Wrapper.c b/MdePkg/Library/UefiMemoryLib/ScanMem64Wrapper.c new file mode 100644 index 0000000000..c5f0762ebe --- /dev/null +++ b/MdePkg/Library/UefiMemoryLib/ScanMem64Wrapper.c @@ -0,0 +1,66 @@ +/** @file + ScanMem64() implementation. + + 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: ScanMem64Wrapper.c + + The following BaseMemoryLib instances share the same version of this file: + + BaseMemoryLib + BaseMemoryLibMmx + BaseMemoryLibSse2 + BaseMemoryLibRepStr + PeiMemoryLib + UefiMemoryLib + +**/ + +#include "MemLibInternals.h" + +/** + Scans a target buffer for a 64-bit value, and returns a pointer to the + matching 64-bit value in the target buffer. + + This function searches target the buffer specified by Buffer and Length from + the lowest address to the highest address at 64-bit increments for a 64-bit + value that matches Value. If a match is found, then a pointer to the matching + value in the target buffer is returned. If no match is found, then NULL is + returned. If Length is 0, then NULL is returned. + + If Buffer is NULL, then ASSERT(). + If Buffer is not aligned on a 64-bit boundary, then ASSERT(). + If Length is greater than (MAX_ADDRESS - Buffer + 1), then ASSERT(). + + @param Buffer Pointer to the target buffer to scan. + @param Length Number of bytes in Buffer to scan. + @param Value Value to search for in the target buffer. + + @return Pointer to the first occurrence or NULL if not found. + @retval NULL if Length == 0 or Value was not found. + +**/ +VOID * +EFIAPI +ScanMem64 ( + IN CONST VOID *Buffer, + IN UINTN Length, + IN UINT64 Value + ) +{ + ASSERT (Buffer != NULL); + ASSERT (((UINTN)Buffer & (sizeof (Value) - 1)) == 0); + ASSERT (Length <= MAX_ADDRESS + (UINTN)Buffer + 1); + + if ((Length /= sizeof (Value)) == 0) { + return NULL; + } + return (VOID*)InternalMemScanMem64 (Buffer, Length, Value); +} diff --git a/MdePkg/Library/UefiMemoryLib/ScanMem8Wrapper.c b/MdePkg/Library/UefiMemoryLib/ScanMem8Wrapper.c new file mode 100644 index 0000000000..9b817b1b0e --- /dev/null +++ b/MdePkg/Library/UefiMemoryLib/ScanMem8Wrapper.c @@ -0,0 +1,64 @@ +/** @file + ScanMem8() implementation. + + 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: ScanMem8Wrapper.c + + The following BaseMemoryLib instances share the same version of this file: + + BaseMemoryLib + BaseMemoryLibMmx + BaseMemoryLibSse2 + BaseMemoryLibRepStr + PeiMemoryLib + UefiMemoryLib + +**/ + +#include "MemLibInternals.h" + +/** + Scans a target buffer for an 8-bit value, and returns a pointer to the + matching 8-bit value in the target buffer. + + This function searches target the buffer specified by Buffer and Length from + the lowest address to the highest address for an 8-bit value that matches + Value. If a match is found, then a pointer to the matching byte in the target + buffer is returned. If no match is found, then NULL is returned. If Length is + 0, then NULL is returned. + + If Buffer is NULL, then ASSERT(). + If Length is greater than (MAX_ADDRESS - Buffer + 1), then ASSERT(). + + @param Buffer Pointer to the target buffer to scan. + @param Length Number of bytes in Buffer to scan. + @param Value Value to search for in the target buffer. + + @return Pointer to the first occurrence or NULL if not found. + @retval NULL if Length == 0 or Value was not found. + +**/ +VOID * +EFIAPI +ScanMem8 ( + IN CONST VOID *Buffer, + IN UINTN Length, + IN UINT8 Value + ) +{ + ASSERT (Buffer != NULL); + ASSERT (Length <= MAX_ADDRESS + (UINTN)Buffer + 1); + + if ((Length /= sizeof (Value)) == 0) { + return NULL; + } + return (VOID*)InternalMemScanMem8 (Buffer, Length, Value); +} diff --git a/MdePkg/Library/UefiMemoryLib/SetMem16Wrapper.c b/MdePkg/Library/UefiMemoryLib/SetMem16Wrapper.c new file mode 100644 index 0000000000..827e6ecf67 --- /dev/null +++ b/MdePkg/Library/UefiMemoryLib/SetMem16Wrapper.c @@ -0,0 +1,64 @@ +/** @file + SetMem16() implementation. + + 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: SetMem16Wrapper.c + + The following BaseMemoryLib instances share the same version of this file: + + BaseMemoryLib + BaseMemoryLibMmx + BaseMemoryLibSse2 + BaseMemoryLibRepStr + PeiMemoryLib + UefiMemoryLib + +**/ + +#include "MemLibInternals.h" + +/** + Fills a target buffer with a 16-bit value, and returns the target buffer. + + This function fills Length bytes of Buffer with the 16-bit value specified by + Value, and returns Buffer. Value is repeated every 16-bits in for Length + bytes of Buffer. + + If Buffer is NULL and Length > 0, then ASSERT(). + If Length is greater than (MAX_ADDRESS - Buffer + 1), then ASSERT(). + If Buffer is not aligned on a 16-bit boundary, then ASSERT(). + If Length is not aligned on a 16-bit boundary, then ASSERT(). + + @param Buffer Pointer to the target buffer to fill. + @param Length Number of bytes in Buffer to fill. + @param Value Value with which to fill Length bytes of Buffer. + + @return Buffer + +**/ +VOID * +EFIAPI +SetMem16 ( + OUT VOID *Buffer, + IN UINTN Length, + IN UINT16 Value + ) +{ + ASSERT (Buffer != NULL); + ASSERT (Length <= MAX_ADDRESS - (UINTN)Buffer + 1); + ASSERT ((((UINTN)Buffer) & 1) != 0); + ASSERT ((Length & 1) != 0); + + if ((Length /= sizeof (Value)) == 0) { + return Buffer; + } + return InternalMemSetMem16 (Buffer, Length, Value); +} diff --git a/MdePkg/Library/UefiMemoryLib/SetMem32Wrapper.c b/MdePkg/Library/UefiMemoryLib/SetMem32Wrapper.c new file mode 100644 index 0000000000..4b9d2413eb --- /dev/null +++ b/MdePkg/Library/UefiMemoryLib/SetMem32Wrapper.c @@ -0,0 +1,64 @@ +/** @file + SetMem32() implementation. + + 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: SetMem32Wrapper.c + + The following BaseMemoryLib instances share the same version of this file: + + BaseMemoryLib + BaseMemoryLibMmx + BaseMemoryLibSse2 + BaseMemoryLibRepStr + PeiMemoryLib + UefiMemoryLib + +**/ + +#include "MemLibInternals.h" + +/** + Fills a target buffer with a 32-bit value, and returns the target buffer. + + This function fills Length bytes of Buffer with the 32-bit value specified by + Value, and returns Buffer. Value is repeated every 32-bits in for Length + bytes of Buffer. + + If Buffer is NULL and Length > 0, then ASSERT(). + If Length is greater than (MAX_ADDRESS - Buffer + 1), then ASSERT(). + If Buffer is not aligned on a 32-bit boundary, then ASSERT(). + If Length is not aligned on a 32-bit boundary, then ASSERT(). + + @param Buffer Pointer to the target buffer to fill. + @param Length Number of bytes in Buffer to fill. + @param Value Value with which to fill Length bytes of Buffer. + + @return Buffer + +**/ +VOID * +EFIAPI +SetMem32 ( + OUT VOID *Buffer, + IN UINTN Length, + IN UINT32 Value + ) +{ + ASSERT (Buffer != NULL); + ASSERT (Length <= MAX_ADDRESS - (UINTN)Buffer + 1); + ASSERT ((((UINTN)Buffer) & 1) != 0); + ASSERT ((Length & 1) != 0); + + if ((Length /= sizeof (Value)) == 0) { + return Buffer; + } + return InternalMemSetMem32 (Buffer, Length, Value); +} diff --git a/MdePkg/Library/UefiMemoryLib/SetMem64Wrapper.c b/MdePkg/Library/UefiMemoryLib/SetMem64Wrapper.c new file mode 100644 index 0000000000..dbf3b62782 --- /dev/null +++ b/MdePkg/Library/UefiMemoryLib/SetMem64Wrapper.c @@ -0,0 +1,64 @@ +/** @file + SetMem64() implementation. + + 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: SetMem64Wrapper.c + + The following BaseMemoryLib instances share the same version of this file: + + BaseMemoryLib + BaseMemoryLibMmx + BaseMemoryLibSse2 + BaseMemoryLibRepStr + PeiMemoryLib + UefiMemoryLib + +**/ + +#include "MemLibInternals.h" + +/** + Fills a target buffer with a 64-bit value, and returns the target buffer. + + This function fills Length bytes of Buffer with the 64-bit value specified by + Value, and returns Buffer. Value is repeated every 64-bits in for Length + bytes of Buffer. + + If Buffer is NULL and Length > 0, then ASSERT(). + If Length is greater than (MAX_ADDRESS - Buffer + 1), then ASSERT(). + If Buffer is not aligned on a 64-bit boundary, then ASSERT(). + If Length is not aligned on a 64-bit boundary, then ASSERT(). + + @param Buffer Pointer to the target buffer to fill. + @param Length Number of bytes in Buffer to fill. + @param Value Value with which to fill Length bytes of Buffer. + + @return Buffer + +**/ +VOID * +EFIAPI +SetMem64 ( + OUT VOID *Buffer, + IN UINTN Length, + IN UINT64 Value + ) +{ + ASSERT (Buffer != NULL); + ASSERT (Length <= MAX_ADDRESS - (UINTN)Buffer + 1); + ASSERT ((((UINTN)Buffer) & 1) != 0); + ASSERT ((Length & 1) != 0); + + if ((Length /= sizeof (Value)) == 0) { + return Buffer; + } + return InternalMemSetMem64 (Buffer, Length, Value); +} diff --git a/MdePkg/Library/UefiMemoryLib/SetMemWrapper.c b/MdePkg/Library/UefiMemoryLib/SetMemWrapper.c new file mode 100644 index 0000000000..294a27a753 --- /dev/null +++ b/MdePkg/Library/UefiMemoryLib/SetMemWrapper.c @@ -0,0 +1,52 @@ +/** @file + SetMem() implementation. + + 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: SetMemWrapper.c + + The following BaseMemoryLib instances share the same version of this file: + + BaseMemoryLib + BaseMemoryLibMmx + BaseMemoryLibSse2 + BaseMemoryLibRepStr + PeiMemoryLib + UefiMemoryLib + +**/ + +#include "MemLibInternals.h" + +/** + Set Buffer to Value for Size bytes. + + This function fills Length bytes of Buffer with Value, and returns Buffer. + + If Length is greater than (MAX_ADDRESS - Buffer + 1), then ASSERT(). + + @param Buffer Memory to set. + @param Size Number of bytes to set + @param Value Value of the set operation. + + @return Buffer + +**/ +VOID * +EFIAPI +SetMem ( + IN VOID *Buffer, + IN UINTN Size, + IN UINT8 Value + ) +{ + ASSERT (Size <= MAX_ADDRESS - (UINTN)Buffer + 1); + return InternalMemSetMem (Buffer, Size, Value); +} diff --git a/MdePkg/Library/UefiMemoryLib/UefiMemoryLib.msa b/MdePkg/Library/UefiMemoryLib/UefiMemoryLib.msa index 7ef511cb16..ca311f78ef 100644 --- a/MdePkg/Library/UefiMemoryLib/UefiMemoryLib.msa +++ b/MdePkg/Library/UefiMemoryLib/UefiMemoryLib.msa @@ -40,7 +40,17 @@ WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED. MemLib.c MemLibGuid.c MemLibGeneric.c - MemLibWrapper.c + CopyMemWrapper.c + SetMemWrapper.c + SetMem16Wrapper.c + SetMem32Wrapper.c + SetMem64Wrapper.c + CompareMemWrapper.c + ZeroMemWrapper.c + ScanMem8Wrapper.c + ScanMem16Wrapper.c + ScanMem32Wrapper.c + ScanMem64Wrapper.c
MdePkg diff --git a/MdePkg/Library/UefiMemoryLib/ZeroMemWrapper.c b/MdePkg/Library/UefiMemoryLib/ZeroMemWrapper.c new file mode 100644 index 0000000000..d7d7919ba2 --- /dev/null +++ b/MdePkg/Library/UefiMemoryLib/ZeroMemWrapper.c @@ -0,0 +1,51 @@ +/** @file + ZeroMem() implementation. + + 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: ZeroMemWrapper.c + + The following BaseMemoryLib instances share the same version of this file: + + BaseMemoryLib + BaseMemoryLibMmx + BaseMemoryLibSse2 + BaseMemoryLibRepStr + PeiMemoryLib + UefiMemoryLib + +**/ + +#include "MemLibInternals.h" + +/** + Set Buffer to 0 for Size bytes. + + This function fills Length bytes of Buffer with zeros, and returns Buffer. + + If Buffer is NULL and Length > 0, then ASSERT(). + If Length is greater than (MAX_ADDRESS - Buffer + 1), then ASSERT(). + + @param Buffer Memory to set. + @param Size Number of bytes to set + + @return Buffer + +**/ +VOID * +EFIAPI +ZeroMem ( + IN VOID *Buffer, + IN UINTN Size + ) +{ + ASSERT (Buffer != NULL); + return InternalMemSetMem (Buffer, Size, 0); +} -- 2.39.2