From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from mail-wm0-x230.google.com (mail-wm0-x230.google.com [IPv6:2a00:1450:400c:c09::230]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by ml01.01.org (Postfix) with ESMTPS id 0E4D71A1E0F for ; Fri, 2 Sep 2016 07:29:19 -0700 (PDT) Received: by mail-wm0-x230.google.com with SMTP id w2so32617205wmd.0 for ; Fri, 02 Sep 2016 07:29:18 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linaro.org; s=google; h=from:to:cc:subject:date:message-id:in-reply-to:references; bh=U5KGaJu4hzohqPLnJE0zCIw//hE+omQmtZdj6/BJiLI=; b=SHvZUiFoh7z+Yi4CJMjdrE9sIiJaOVkvfPyim8cpUsQcem8MceE+IcOVBAytAmSfwj 2deQm4ToJbvIBGWCA7xAMEPPBEUnp7QzqFYmqEfU5kwZ1vxMY5JyesVk2KsN2PqDaeGK eNl3jDm5/QdZjagyyfFxSg42sQGLpNfa/v7FU= X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20130820; h=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to :references; bh=U5KGaJu4hzohqPLnJE0zCIw//hE+omQmtZdj6/BJiLI=; b=Jpfzizfjk8dVhtJ4pbmQEy7UiynPJ5M9KSiqLLeeFkYziflSSrwSq/+I6P2cuQlVa0 02cfjs5lNjJ4T9zSPqxA2+G0GmmUUojH/VTx6WsMmn7qwWryRMWODhXuDtLlaOhJHMTp QH6vTxBvFwNVgzbs5ZnUnz4z5WYfutG6vlv5P9G5VFMHP9jfhVHPgwgxdMre007auwvK Qj6wzmpotuKvX6esX0ybk8s1ReZ7oaVT/DPyc6bwSgb2x7MF+qTXsA3uHDLxDvjQJhpk chUsRdEozCk5W/JymVeqa7rseTSdMJ7dIPo4rBcz8XoyZ8W0N8Ni4CqFZLVbzfJlKfeX v/zQ== X-Gm-Message-State: AE9vXwMzs6x7gp5YnL06yULtETUuiPGVOlYeZwKAqrfe/2wXZy4pv9rqR2FWrRIgsjXOobaS X-Received: by 10.28.68.136 with SMTP id r130mr2535837wma.4.1472826557627; Fri, 02 Sep 2016 07:29:17 -0700 (PDT) Received: from mohikan.mushroom.smurfnet.nu ([2a01:348:6:8735:e23f:49ff:fe6d:9d26]) by smtp.gmail.com with ESMTPSA id q65sm3841609wmd.24.2016.09.02.07.29.16 (version=TLS1_2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128/128); Fri, 02 Sep 2016 07:29:17 -0700 (PDT) From: Leif Lindholm To: edk2-devel@lists.01.org Cc: Laszlo Ersek , Michael D Kinney , Liming Gao , Ard Biesheuvel Date: Fri, 2 Sep 2016 15:29:12 +0100 Message-Id: <20160902142912.17297-4-leif.lindholm@linaro.org> X-Mailer: git-send-email 2.9.3 In-Reply-To: <20160902142912.17297-1-leif.lindholm@linaro.org> References: <20160902142912.17297-1-leif.lindholm@linaro.org> Subject: [PATCH 3/3] MdePkg/BaseMemoryLibStm: implement new IsZeroBuffer() API function X-BeenThere: edk2-devel@lists.01.org X-Mailman-Version: 2.1.21 Precedence: list List-Id: EDK II Development List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Fri, 02 Sep 2016 14:29:19 -0000 From: Ard Biesheuvel BaseMemoryLib has recently been extended with an API function IsZeroBuffer(), so copy the default implementation into BaseMemoryLibStm as well. Contributed-under: TianoCore Contribution Agreement 1.0 Signed-off-by: Ard Biesheuvel Reviewed-by: Leif Lindholm --- .../Library/BaseMemoryLibStm/BaseMemoryLibStm.inf | 1 + .../Library/BaseMemoryLibStm/IsZeroBufferWrapper.c | 54 ++++++++++++++++++++++ MdePkg/Library/BaseMemoryLibStm/MemLibGeneric.c | 29 ++++++++++++ MdePkg/Library/BaseMemoryLibStm/MemLibInternals.h | 17 +++++++ 4 files changed, 101 insertions(+) create mode 100644 MdePkg/Library/BaseMemoryLibStm/IsZeroBufferWrapper.c diff --git a/MdePkg/Library/BaseMemoryLibStm/BaseMemoryLibStm.inf b/MdePkg/Library/BaseMemoryLibStm/BaseMemoryLibStm.inf index eac6cef..30e2459 100644 --- a/MdePkg/Library/BaseMemoryLibStm/BaseMemoryLibStm.inf +++ b/MdePkg/Library/BaseMemoryLibStm/BaseMemoryLibStm.inf @@ -45,6 +45,7 @@ [Sources.Common] SetMem16Wrapper.c SetMemWrapper.c CopyMemWrapper.c + IsZeroBufferWrapper.c MemLibGeneric.c MemLibGuid.c MemLibInternals.h diff --git a/MdePkg/Library/BaseMemoryLibStm/IsZeroBufferWrapper.c b/MdePkg/Library/BaseMemoryLibStm/IsZeroBufferWrapper.c new file mode 100644 index 0000000..c42c1aa --- /dev/null +++ b/MdePkg/Library/BaseMemoryLibStm/IsZeroBufferWrapper.c @@ -0,0 +1,54 @@ +/** @file + Implementation of IsZeroBuffer function. + + The following BaseMemoryLib instances contain the same copy of this file: + + BaseMemoryLib + BaseMemoryLibMmx + BaseMemoryLibSse2 + BaseMemoryLibRepStr + BaseMemoryLibOptDxe + BaseMemoryLibOptPei + PeiMemoryLib + UefiMemoryLib + + Copyright (c) 2016, 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. + +**/ + +#include "MemLibInternals.h" + +/** + Checks if the contents of a buffer are all zeros. + + This function checks whether the contents of a buffer are all zeros. If the + contents are all zeros, return TRUE. Otherwise, return FALSE. + + If Length > 0 and Buffer is NULL, then ASSERT(). + If Length is greater than (MAX_ADDRESS - Buffer + 1), then ASSERT(). + + @param Buffer The pointer to the buffer to be checked. + @param Length The size of the buffer (in bytes) to be checked. + + @retval TRUE Contents of the buffer are all zeros. + @retval FALSE Contents of the buffer are not all zeros. + +**/ +BOOLEAN +EFIAPI +IsZeroBuffer ( + IN CONST VOID *Buffer, + IN UINTN Length + ) +{ + ASSERT (!(Buffer == NULL && Length > 0)); + ASSERT ((Length - 1) <= (MAX_ADDRESS - (UINTN)Buffer)); + return InternalMemIsZeroBuffer (Buffer, Length); +} diff --git a/MdePkg/Library/BaseMemoryLibStm/MemLibGeneric.c b/MdePkg/Library/BaseMemoryLibStm/MemLibGeneric.c index 54c2701..43fbcb6 100644 --- a/MdePkg/Library/BaseMemoryLibStm/MemLibGeneric.c +++ b/MdePkg/Library/BaseMemoryLibStm/MemLibGeneric.c @@ -262,3 +262,32 @@ InternalMemScanMem64 ( } while (--Length != 0); return NULL; } + +/** + Checks whether the contents of a buffer are all zeros. + + @param Buffer The pointer to the buffer to be checked. + @param Length The size of the buffer (in bytes) to be checked. + + @retval TRUE Contents of the buffer are all zeros. + @retval FALSE Contents of the buffer are not all zeros. + +**/ +BOOLEAN +EFIAPI +InternalMemIsZeroBuffer ( + IN CONST VOID *Buffer, + IN UINTN Length + ) +{ + CONST UINT8 *BufferData; + UINTN Index; + + BufferData = Buffer; + for (Index = 0; Index < Length; Index++) { + if (BufferData[Index] != 0) { + return FALSE; + } + } + return TRUE; +} diff --git a/MdePkg/Library/BaseMemoryLibStm/MemLibInternals.h b/MdePkg/Library/BaseMemoryLibStm/MemLibInternals.h index 10c741f..f7b44f5 100644 --- a/MdePkg/Library/BaseMemoryLibStm/MemLibInternals.h +++ b/MdePkg/Library/BaseMemoryLibStm/MemLibInternals.h @@ -231,4 +231,21 @@ InternalMemScanMem64 ( IN UINT64 Value ); +/** + Checks whether the contents of a buffer are all zeros. + + @param Buffer The pointer to the buffer to be checked. + @param Length The size of the buffer (in bytes) to be checked. + + @retval TRUE Contents of the buffer are all zeros. + @retval FALSE Contents of the buffer are not all zeros. + +**/ +BOOLEAN +EFIAPI +InternalMemIsZeroBuffer ( + IN CONST VOID *Buffer, + IN UINTN Length + ); + #endif -- 2.9.3