From patchwork Wed Aug 31 09:07:33 2016 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Ard Biesheuvel X-Patchwork-Id: 75053 Delivered-To: patch@linaro.org Received: by 10.140.29.52 with SMTP id a49csp224875qga; Wed, 31 Aug 2016 02:07:53 -0700 (PDT) X-Received: by 10.98.56.207 with SMTP id f198mr14875366pfa.83.1472634472936; Wed, 31 Aug 2016 02:07:52 -0700 (PDT) Return-Path: Received: from ml01.01.org (ml01.01.org. [2001:19d0:306:5::1]) by mx.google.com with ESMTPS id yv3si49903425pab.56.2016.08.31.02.07.52 (version=TLS1_2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128/128); Wed, 31 Aug 2016 02:07:52 -0700 (PDT) Received-SPF: pass (google.com: best guess record for domain of edk2-devel-bounces@lists.01.org designates 2001:19d0:306:5::1 as permitted sender) client-ip=2001:19d0:306:5::1; Authentication-Results: mx.google.com; dkim=neutral (body hash did not verify) header.i=@linaro.org; spf=pass (google.com: best guess record for domain of edk2-devel-bounces@lists.01.org designates 2001:19d0:306:5::1 as permitted sender) smtp.mailfrom=edk2-devel-bounces@lists.01.org; dmarc=fail (p=NONE dis=NONE) header.from=linaro.org Received: from [127.0.0.1] (localhost [IPv6:::1]) by ml01.01.org (Postfix) with ESMTP id 2713E1A1E50; Wed, 31 Aug 2016 02:07:50 -0700 (PDT) X-Original-To: edk2-devel@lists.01.org Delivered-To: edk2-devel@lists.01.org Received: from mail-wm0-x235.google.com (mail-wm0-x235.google.com [IPv6:2a00:1450:400c:c09::235]) (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 1BE511A1E47 for ; Wed, 31 Aug 2016 02:07:48 -0700 (PDT) Received: by mail-wm0-x235.google.com with SMTP id i5so77373697wmg.0 for ; Wed, 31 Aug 2016 02:07:48 -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=epKEqWiTW0pnlfFTjosU1OhFtzuD2K6AwoTW58A0FkA=; b=LNxOYQ5B/E7+gJGuzHBKsK0cylI2s2SIpy4DRe46uqWgmx0g9UyYj91ESuMNBWHU8a xs9qz0pRsrN34hU5gdh7t2AQA5k/DjBIwTEJMT+I00NsECWUcx+P3yYAmPsRuZ7ZAgsm 81Gmw56NuWN33q2Zl29XdEvlckRdr1pi/HGOQ= 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=epKEqWiTW0pnlfFTjosU1OhFtzuD2K6AwoTW58A0FkA=; b=BRRhOryoI2tzXeZUZLpjzk63JMt4HGaxOI7nNkDe/aDMITq8y5B0yZzDOybULX+eA9 8Z6/WfbVDdhajM5THg9ad9VdfN1w/EQG0uTC+AxXdytBEIepYyMRAnGrYbFLwNrz1Sak sBkg4Fuc3wso/abY9jRmobdRCYHVoZpje3zYMeJTtTPuLMifmSuPMcUp+BpYventD0N9 yl+z3AXNsokls4AnuPJBPvlsLIr7gYaaoE4BbVUHP4CPuUTVA5SpdWSLs1ZwHqUsSJ26 wdUJK5nVSB8WJ7Gxk6XKe6qX855vB66ZeVorNizxsaQkhy5OlCSLEvTqUNSzoUzU/Hq/ rilg== X-Gm-Message-State: AE9vXwNSVKA7L6aPuAy/FfO+MEkvigLB47Q3mfBxQSZY/HIEN+XCgn5Qd5C1jEXOfm5EdaR6 X-Received: by 10.28.182.84 with SMTP id g81mr21505868wmf.20.1472634466420; Wed, 31 Aug 2016 02:07:46 -0700 (PDT) Received: from localhost.localdomain ([160.169.158.74]) by smtp.gmail.com with ESMTPSA id uo4sm43462468wjc.36.2016.08.31.02.07.44 (version=TLS1_2 cipher=ECDHE-RSA-AES128-SHA bits=128/128); Wed, 31 Aug 2016 02:07:45 -0700 (PDT) From: Ard Biesheuvel To: edk2-devel@lists.01.org, leif.lindholm@linaro.org Date: Wed, 31 Aug 2016 10:07:33 +0100 Message-Id: <1472634453-27246-4-git-send-email-ard.biesheuvel@linaro.org> X-Mailer: git-send-email 2.7.4 In-Reply-To: <1472634453-27246-1-git-send-email-ard.biesheuvel@linaro.org> References: <1472634453-27246-1-git-send-email-ard.biesheuvel@linaro.org> Subject: [edk2] [PATCH 3/3] ArmPkg/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: , Cc: Ard Biesheuvel MIME-Version: 1.0 Errors-To: edk2-devel-bounces@lists.01.org Sender: "edk2-devel" 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 --- ArmPkg/Library/BaseMemoryLibStm/BaseMemoryLibStm.inf | 1 + ArmPkg/Library/BaseMemoryLibStm/IsZeroBufferWrapper.c | 54 ++++++++++++++++++++ ArmPkg/Library/BaseMemoryLibStm/MemLibGeneric.c | 29 +++++++++++ ArmPkg/Library/BaseMemoryLibStm/MemLibInternals.h | 17 ++++++ 4 files changed, 101 insertions(+) -- 2.7.4 _______________________________________________ edk2-devel mailing list edk2-devel@lists.01.org https://lists.01.org/mailman/listinfo/edk2-devel diff --git a/ArmPkg/Library/BaseMemoryLibStm/BaseMemoryLibStm.inf b/ArmPkg/Library/BaseMemoryLibStm/BaseMemoryLibStm.inf index eac6cef96b31..30e2459bfd1e 100644 --- a/ArmPkg/Library/BaseMemoryLibStm/BaseMemoryLibStm.inf +++ b/ArmPkg/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/ArmPkg/Library/BaseMemoryLibStm/IsZeroBufferWrapper.c b/ArmPkg/Library/BaseMemoryLibStm/IsZeroBufferWrapper.c new file mode 100644 index 000000000000..c42c1aa509b3 --- /dev/null +++ b/ArmPkg/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/ArmPkg/Library/BaseMemoryLibStm/MemLibGeneric.c b/ArmPkg/Library/BaseMemoryLibStm/MemLibGeneric.c index 54c27012955f..43fbcb6b208f 100644 --- a/ArmPkg/Library/BaseMemoryLibStm/MemLibGeneric.c +++ b/ArmPkg/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/ArmPkg/Library/BaseMemoryLibStm/MemLibInternals.h b/ArmPkg/Library/BaseMemoryLibStm/MemLibInternals.h index 10c741f2c311..f7b44f527059 100644 --- a/ArmPkg/Library/BaseMemoryLibStm/MemLibInternals.h +++ b/ArmPkg/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