From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received-SPF: Pass (sender SPF authorized) identity=mailfrom; client-ip=192.55.52.43; helo=mga05.intel.com; envelope-from=jiewen.yao@intel.com; receiver=edk2-devel@lists.01.org Received: from mga05.intel.com (mga05.intel.com [192.55.52.43]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by ml01.01.org (Postfix) with ESMTPS id 71666202E5400 for ; Mon, 4 Jun 2018 16:09:33 -0700 (PDT) X-Amp-Result: SKIPPED(no attachment in message) X-Amp-File-Uploaded: False Received: from orsmga002.jf.intel.com ([10.7.209.21]) by fmsmga105.fm.intel.com with ESMTP/TLS/DHE-RSA-AES256-GCM-SHA384; 04 Jun 2018 16:09:33 -0700 X-ExtLoop1: 1 X-IronPort-AV: E=Sophos;i="5.49,477,1520924400"; d="scan'208";a="64289441" Received: from fmsmsx104.amr.corp.intel.com ([10.18.124.202]) by orsmga002.jf.intel.com with ESMTP; 04 Jun 2018 16:09:32 -0700 Received: from fmsmsx152.amr.corp.intel.com (10.18.125.5) by fmsmsx104.amr.corp.intel.com (10.18.124.202) with Microsoft SMTP Server (TLS) id 14.3.319.2; Mon, 4 Jun 2018 16:09:32 -0700 Received: from shsmsx151.ccr.corp.intel.com (10.239.6.50) by FMSMSX152.amr.corp.intel.com (10.18.125.5) with Microsoft SMTP Server (TLS) id 14.3.319.2; Mon, 4 Jun 2018 16:09:32 -0700 Received: from shsmsx102.ccr.corp.intel.com ([169.254.2.223]) by SHSMSX151.ccr.corp.intel.com ([169.254.3.116]) with mapi id 14.03.0319.002; Tue, 5 Jun 2018 07:09:30 +0800 From: "Yao, Jiewen" To: "Kinney, Michael D" , "edk2-devel@lists.01.org" Thread-Topic: [RFC v3 2/4] FmpDevicePkg: Add library instances Thread-Index: AQHT952eEoJLTv6mBkmoZ+iWk6WHS6RQwpug Date: Mon, 4 Jun 2018 23:09:29 +0000 Message-ID: <74D8A39837DF1E4DA445A8C0B3885C503AC27A65@shsmsx102.ccr.corp.intel.com> References: <20180529223715.23896-1-michael.d.kinney@intel.com> <20180529223715.23896-3-michael.d.kinney@intel.com> In-Reply-To: <20180529223715.23896-3-michael.d.kinney@intel.com> Accept-Language: zh-CN, en-US X-MS-Has-Attach: X-MS-TNEF-Correlator: x-titus-metadata-40: eyJDYXRlZ29yeUxhYmVscyI6IiIsIk1ldGFkYXRhIjp7Im5zIjoiaHR0cDpcL1wvd3d3LnRpdHVzLmNvbVwvbnNcL0ludGVsMyIsImlkIjoiYWUxZmE0NzItNGIyOC00NjZmLTk2OWItNjQwZDNiYzYxZjVlIiwicHJvcHMiOlt7Im4iOiJDVFBDbGFzc2lmaWNhdGlvbiIsInZhbHMiOlt7InZhbHVlIjoiQ1RQX05UIn1dfV19LCJTdWJqZWN0TGFiZWxzIjpbXSwiVE1DVmVyc2lvbiI6IjE3LjEwLjE4MDQuNDkiLCJUcnVzdGVkTGFiZWxIYXNoIjoidnhUWWVzSG1mUDF6cXFrTUNKbm9Ccng4MEpVRHFiQmdKeUlGY2FSUHdkZUdxdndwNDBPRGxqUzc5XC9YcEJiaTcifQ== x-ctpclassification: CTP_NT dlp-product: dlpe-windows dlp-version: 11.0.200.100 dlp-reaction: no-action x-originating-ip: [10.239.127.40] MIME-Version: 1.0 Subject: Re: [RFC v3 2/4] FmpDevicePkg: Add library instances X-BeenThere: edk2-devel@lists.01.org X-Mailman-Version: 2.1.26 Precedence: list List-Id: EDK II Development List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Mon, 04 Jun 2018 23:09:34 -0000 Content-Language: en-US Content-Type: text/plain; charset="us-ascii" Content-Transfer-Encoding: quoted-printable Looks good. Can we add "Is" before the function - LowestSupportedVersionCheckRequired (= ), LockFmpDeviceAtLockEventGuidRequired () ? That is IsLowestSupportedVersionCheckRequired (), IsLockFmpDeviceAtLockEven= tGuidRequired (). Thank you Yao Jiewen > -----Original Message----- > From: Kinney, Michael D > Sent: Tuesday, May 29, 2018 3:37 PM > To: edk2-devel@lists.01.org > Cc: Kinney, Michael D ; Sean Brogan > ; Yao, Jiewen > Subject: [RFC v3 2/4] FmpDevicePkg: Add library instances >=20 > From: "Kinney, Michael D" >=20 > https://bugzilla.tianocore.org/show_bug.cgi?id=3D922 >=20 > Based on content from the following branch: >=20 > https://github.com/Microsoft/MS_UEFI/tree/share/MsCapsuleSupport/MsCapsu > leUpdatePkg >=20 > Add library instances for FmpDeviceLib, CapsuleUpdatePolicyLib, > and FmpPayloadHeaderLib. >=20 > Library Classes > =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D > * FmpDeviceLibNull - Non-functional template of the FmpDeviceLib > that can be used as a starting point for an FmpDeviceLib for > a specific firmware storage device. > * CapsuleUpdatePolicyLibNull - Functional template of the > CapsuleUpdatePolicyLib that can be used as a starting point > of a platform specific implementation. > * FmpPayloadHeaderLibV1 - Version 1 of the FmpPayloadHeaderLib. > This library is indented to be used "as is" with no need for > any device specific or platform specific changes. >=20 > Cc: Sean Brogan > Cc: Jiewen Yao > Contributed-under: TianoCore Contribution Agreement 1.1 > Signed-off-by: Michael D Kinney > --- > .../CapsuleUpdatePolicyLibNull.c | 136 +++++++ > .../CapsuleUpdatePolicyLibNull.inf | 45 +++ > .../CapsuleUpdatePolicyLibNull.uni | 17 + > .../Library/FmpDeviceLibNull/FmpDeviceLib.c | 427 > +++++++++++++++++++++ > .../Library/FmpDeviceLibNull/FmpDeviceLibNull.inf | 48 +++ > .../Library/FmpDeviceLibNull/FmpDeviceLibNull.uni | 18 + > .../FmpPayloadHeaderLibV1/FmpPayloadHeaderLib.c | 188 +++++++++ > .../FmpPayloadHeaderLibV1.inf | 48 +++ > .../FmpPayloadHeaderLibV1.uni | 21 + > 9 files changed, 948 insertions(+) > create mode 100644 > FmpDevicePkg/Library/CapsuleUpdatePolicyLibNull/CapsuleUpdatePolicyLibNul= l > .c > create mode 100644 > FmpDevicePkg/Library/CapsuleUpdatePolicyLibNull/CapsuleUpdatePolicyLibNul= l > .inf > create mode 100644 > FmpDevicePkg/Library/CapsuleUpdatePolicyLibNull/CapsuleUpdatePolicyLibNul= l > .uni > create mode 100644 > FmpDevicePkg/Library/FmpDeviceLibNull/FmpDeviceLib.c > create mode 100644 > FmpDevicePkg/Library/FmpDeviceLibNull/FmpDeviceLibNull.inf > create mode 100644 > FmpDevicePkg/Library/FmpDeviceLibNull/FmpDeviceLibNull.uni > create mode 100644 > FmpDevicePkg/Library/FmpPayloadHeaderLibV1/FmpPayloadHeaderLib.c > create mode 100644 > FmpDevicePkg/Library/FmpPayloadHeaderLibV1/FmpPayloadHeaderLibV1.inf > create mode 100644 > FmpDevicePkg/Library/FmpPayloadHeaderLibV1/FmpPayloadHeaderLibV1.uni >=20 > diff --git > a/FmpDevicePkg/Library/CapsuleUpdatePolicyLibNull/CapsuleUpdatePolicyLibN > ull.c > b/FmpDevicePkg/Library/CapsuleUpdatePolicyLibNull/CapsuleUpdatePolicyLibN > ull.c > new file mode 100644 > index 0000000000..b4cccc8f01 > --- /dev/null > +++ > b/FmpDevicePkg/Library/CapsuleUpdatePolicyLibNull/CapsuleUpdatePolicyLibN > ull.c > @@ -0,0 +1,136 @@ > +/** @file > + Provides platform policy services used during a capsule update. > + > + Copyright (c) 2016, Microsoft Corporation. All rights reserved.
> + Copyright (c) 2018, Intel Corporation. All rights reserved.
> + > + Redistribution and use in source and binary forms, with or without > + modification, are permitted provided that the following conditions are= met: > + 1. Redistributions of source code must retain the above copyright noti= ce, > + this list of conditions and the following disclaimer. > + 2. Redistributions in binary form must reproduce the above copyright n= otice, > + this list of conditions and the following disclaimer in the documentat= ion > + and/or other materials provided with the distribution. > + > + THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND > CONTRIBUTORS "AS IS" AND > + ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, > THE IMPLIED > + WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR > PURPOSE ARE DISCLAIMED. > + IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE > FOR ANY DIRECT, > + INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL > DAMAGES (INCLUDING, > + BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; > LOSS OF USE, > + DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND > ON ANY THEORY OF > + LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING > NEGLIGENCE > + OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, > EVEN IF > + ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. > + > +**/ > + > +#include > +#include > + > +/** > + Determine if the system power state supports a capsule update. > + > + @param[out] Good Returns TRUE if system power state supports a capsul= e > + update. Returns FALSE if system power state does no= t > + support a capsule update. Return value is only vali= d if > + return status is EFI_SUCCESS. > + > + @retval EFI_SUCCESS Good parameter has been updated with > result. > + @retval EFI_INVALID_PARAMETER Good is NULL. > + @retval EFI_DEVICE_ERROR System power state can not be > determined. > + > +**/ > +EFI_STATUS > +EFIAPI > +CheckSystemPower ( > + OUT BOOLEAN *Good > + ) > +{ > + *Good =3D TRUE; > + return EFI_SUCCESS; > +} > + > +/** > + Determines if the system thermal state supports a capsule update. > + > + @param[out] Good Returns TRUE if system thermal state supports a > capsule > + update. Returns FALSE if system thermal state does > not > + support a capsule update. Return value is only vali= d if > + return status is EFI_SUCCESS. > + > + @retval EFI_SUCCESS Good parameter has been updated with > result. > + @retval EFI_INVALID_PARAMETER Good is NULL. > + @retval EFI_DEVICE_ERROR System thermal state can not be > determined. > + > +**/ > +EFI_STATUS > +EFIAPI > +CheckSystemThermal ( > + IN OUT BOOLEAN *Good > + ) > +{ > + *Good =3D TRUE; > + return EFI_SUCCESS; > +} > + > +/** > + Determines if the system environment state supports a capsule update. > + > + @param[out] Good Returns TRUE if system environment state supports a > capsule > + update. Returns FALSE if system environment state > does not > + support a capsule update. Return value is only vali= d if > + return status is EFI_SUCCESS. > + > + @retval EFI_SUCCESS Good parameter has been updated with > result. > + @retval EFI_INVALID_PARAMETER Good is NULL. > + @retval EFI_DEVICE_ERROR System environment state can not be > determined. > + > +**/ > +EFI_STATUS > +EFIAPI > +CheckSystemEnvironment ( > + IN OUT BOOLEAN *Good > + ) > +{ > + *Good =3D TRUE; > + return EFI_SUCCESS; > +} > + > +/** > + Determines if the Lowest Supported Version checks should be performed. > The > + expected result from this function is TRUE. A platform can choose to = return > + FALSE (e.g. during manufacturing or servicing) to allow a capsule upda= te to a > + version below the current Lowest Supported Version. > + > + @retval TRUE The lowest supported version check is required. > + @retval FALSE Do not perform lowest support version check. > + > +**/ > +BOOLEAN > +EFIAPI > +LowestSupportedVersionCheckRequired ( > + VOID > + ) > +{ > + return TRUE; > +} > + > +/** > + Determines if the FMP device should be locked when the event specified= by > + PcdFmpDeviceLockEventGuid is signaled. The expected result from this > function > + is TRUE so the FMP device is always locked. A platform can choose to = return > + FALSE (e.g. during manufacturing) to allow FMP devices to remain unloc= ked. > + > + @retval TRUE The FMP device lock action is required at lock event gu= id. > + @retval FALSE Do not perform FMP device lock at lock event guid. > + > +**/ > +BOOLEAN > +EFIAPI > +LockFmpDeviceAtLockEventGuidRequired ( > + VOID > + ) > +{ > + return TRUE; > +} > diff --git > a/FmpDevicePkg/Library/CapsuleUpdatePolicyLibNull/CapsuleUpdatePolicyLibN > ull.inf > b/FmpDevicePkg/Library/CapsuleUpdatePolicyLibNull/CapsuleUpdatePolicyLibN > ull.inf > new file mode 100644 > index 0000000000..c7c669e3e0 > --- /dev/null > +++ > b/FmpDevicePkg/Library/CapsuleUpdatePolicyLibNull/CapsuleUpdatePolicyLibN > ull.inf > @@ -0,0 +1,45 @@ > +## @file > +# Provides platform policy services used during a capsule update. > +# > +# Copyright (c) 2016, Microsoft Corporation. All rights reserved.
> +# Copyright (c) 2018, Intel Corporation. All rights reserved.
> +# > +# Redistribution and use in source and binary forms, with or without > +# modification, are permitted provided that the following conditions ar= e met: > +# 1. Redistributions of source code must retain the above copyright not= ice, > +# this list of conditions and the following disclaimer. > +# 2. Redistributions in binary form must reproduce the above copyright > notice, > +# this list of conditions and the following disclaimer in the documenta= tion > +# and/or other materials provided with the distribution. > +# > +# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND > CONTRIBUTORS "AS IS" AND > +# ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, > THE IMPLIED > +# WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR > PURPOSE ARE DISCLAIMED. > +# IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE > FOR ANY DIRECT, > +# INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL > DAMAGES (INCLUDING, > +# BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; > LOSS OF USE, > +# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND > ON ANY THEORY OF > +# LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING > NEGLIGENCE > +# OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, > EVEN IF > +# ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. > +## > + > +[Defines] > + INF_VERSION =3D 0x00010005 > + BASE_NAME =3D CapsuleUpdatePolicyLibNull > + MODULE_UNI_FILE =3D CapsuleUpdatePolicyLibNull.uni > + FILE_GUID =3D 8E36EC87-440D-44F9-AB2F-AA806C61A1A6 > + MODULE_TYPE =3D BASE > + VERSION_STRING =3D 1.0 > + LIBRARY_CLASS =3D CapsuleUpdatePolicyLib > + > +# > +# VALID_ARCHITECTURES =3D IA32 X64 IPF ARM AARCH64 > +# > + > +[Sources] > + CapsuleUpdatePolicyLibNull.c > + > +[Packages] > + MdePkg/MdePkg.dec > + FmpDevicePkg/FmpDevicePkg.dec > diff --git > a/FmpDevicePkg/Library/CapsuleUpdatePolicyLibNull/CapsuleUpdatePolicyLibN > ull.uni > b/FmpDevicePkg/Library/CapsuleUpdatePolicyLibNull/CapsuleUpdatePolicyLibN > ull.uni > new file mode 100644 > index 0000000000..0f16fea391 > --- /dev/null > +++ > b/FmpDevicePkg/Library/CapsuleUpdatePolicyLibNull/CapsuleUpdatePolicyLibN > ull.uni > @@ -0,0 +1,17 @@ > +// /** @file > +// Provides platform policy services used during a capsule update. > +// > +// Copyright (c) 2018, 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. > +// > +// **/ > + > +#string STR_MODULE_ABSTRACT #language en-US "Provides platform > policy services used during a capsule update." > + > +#string STR_MODULE_DESCRIPTION #language en-US "Provides platform > policy services used during a capsule update." > diff --git a/FmpDevicePkg/Library/FmpDeviceLibNull/FmpDeviceLib.c > b/FmpDevicePkg/Library/FmpDeviceLibNull/FmpDeviceLib.c > new file mode 100644 > index 0000000000..03e8750661 > --- /dev/null > +++ b/FmpDevicePkg/Library/FmpDeviceLibNull/FmpDeviceLib.c > @@ -0,0 +1,427 @@ > +/** @file > + Provides firmware device specific services to support updates of a fir= mware > + image stored in a firmware device. > + > + Copyright (c) 2016, Microsoft Corporation. All rights reserved.
> + Copyright (c) 2018, Intel Corporation. All rights reserved.
> + > + Redistribution and use in source and binary forms, with or without > + modification, are permitted provided that the following conditions are= met: > + 1. Redistributions of source code must retain the above copyright noti= ce, > + this list of conditions and the following disclaimer. > + 2. Redistributions in binary form must reproduce the above copyright n= otice, > + this list of conditions and the following disclaimer in the documentat= ion > + and/or other materials provided with the distribution. > + > + THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND > CONTRIBUTORS "AS IS" AND > + ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, > THE IMPLIED > + WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR > PURPOSE ARE DISCLAIMED. > + IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE > FOR ANY DIRECT, > + INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL > DAMAGES (INCLUDING, > + BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; > LOSS OF USE, > + DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND > ON ANY THEORY OF > + LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING > NEGLIGENCE > + OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, > EVEN IF > + ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. > + > +**/ > + > +#include > +#include > + > +/** > + Provide a function to install the Firmware Management Protocol instanc= e > onto a > + device handle when the device is managed by a driver that follows the = UEFI > + Driver Model. If the device is not managed by a driver that follows t= he UEFI > + Driver Model, then EFI_UNSUPPORTED is returned. > + > + @param[in] FmpInstaller Function that installs the Firmware Managemen= t > + Protocol. > + > + @retval EFI_SUCCESS The device is managed by a driver that follow= s > the > + UEFI Driver Model. FmpInstaller must be > called on > + each Driver Binding Start(). > + @retval EFI_UNSUPPORTED The device is not managed by a driver that > follows > + the UEFI Driver Model. > + @retval other The Firmware Management Protocol for this > firmware > + device is not installed. The firmware device= is > + still locked using FmpDeviceLock(). > + > +**/ > +EFI_STATUS > +EFIAPI > +RegisterFmpInstaller ( > + IN FMP_DEVICE_LIB_REGISTER_FMP_INSTALLER Function > + ) > +{ > + return EFI_UNSUPPORTED; > +} > + > +/** > + Returns the size, in bytes, of the firmware image currently stored in = the > + firmware device. This function is used to by the GetImage() and > + GetImageInfo() services of the Firmware Management Protocol. If the > image > + size can not be determined from the firmware device, then 0 must be > returned. > + > + @param[out] Size Pointer to the size, in bytes, of the firmware image > + currently stored in the firmware device. > + > + @retval EFI_SUCCESS The size of the firmware image currentl= y > + stored in the firmware device was > returned. > + @retval EFI_INVALID_PARAMETER Size is NULL. > + @retval EFI_UNSUPPORTED The firmware device does not support > reporting > + the size of the currently stored firmwa= re > image. > + @retval EFI_DEVICE_ERROR An error occurred attempting to > determine the > + size of the firmware image currently > stored in > + in the firmware device. > + > +**/ > +EFI_STATUS > +EFIAPI > +FmpDeviceGetSize ( > + IN UINTN *Size > + ) > +{ > + if (Size =3D=3D NULL) { > + return EFI_INVALID_PARAMETER; > + } > + *Size =3D 0; > + return EFI_SUCCESS; > +} > + > +/** > + Returns the GUID value used to fill in the ImageTypeId field of the > + EFI_FIRMWARE_IMAGE_DESCRIPTOR structure that is returned by the > GetImageInfo() > + service of the Firmware Management Protocol. If EFI_UNSUPPORTED is > returned, > + then the ImageTypeId field is set to gEfiCallerIdGuid. If EFI_SUCCESS= is > + returned, then ImageTypeId is set to the Guid returned from this funct= ion. > + > + @param[out] Guid Double pointer to a GUID value that is updated to po= int > to > + to a GUID value. The GUID value is not allocated an= d > must > + not be modified or freed by the caller. > + > + @retval EFI_SUCCESS EFI_FIRMWARE_IMAGE_DESCRIPTOR > ImageTypeId GUID is set > + to the returned Guid value. > + @retval EFI_UNSUPPORTED EFI_FIRMWARE_IMAGE_DESCRIPTOR > ImageTypeId GUID is set > + to gEfiCallerIdGuid. > + > +**/ > +EFI_STATUS > +EFIAPI > +FmpDeviceGetImageTypeIdGuidPtr ( > + OUT EFI_GUID **Guid > + ) > +{ > + return EFI_UNSUPPORTED; > +} > + > +/** > + Returns values used to fill in the AttributesSupported and AttributesS= ettings > + fields of the EFI_FIRMWARE_IMAGE_DESCRIPTOR structure that is returned > by the > + GetImageInfo() service of the Firmware Management Protocol. The > following > + bit values from the Firmware Management Protocol may be combined: > + IMAGE_ATTRIBUTE_IMAGE_UPDATABLE > + IMAGE_ATTRIBUTE_RESET_REQUIRED > + IMAGE_ATTRIBUTE_AUTHENTICATION_REQUIRED > + IMAGE_ATTRIBUTE_IN_USE > + IMAGE_ATTRIBUTE_UEFI_IMAGE > + > + @param[out] Supported Attributes supported by this firmware device. > + @param[out] Setting Attributes settings for this firmware device. > + > + @retval EFI_SUCCESS The attributes supported by the > firmware > + device were returned. > + @retval EFI_INVALID_PARAMETER Supported is NULL. > + @retval EFI_INVALID_PARAMETER Setting is NULL. > + > +**/ > +EFI_STATUS > +EFIAPI > +FmpDeviceGetAttributes ( > + IN OUT UINT64 *Supported, > + IN OUT UINT64 *Setting > + ) > +{ > + if (Supported =3D=3D NULL || Setting =3D=3D NULL) { > + return EFI_INVALID_PARAMETER; > + } > + *Supported =3D 0; > + *Setting =3D 0; > + return EFI_SUCCESS; > +} > + > +/** > + Returns the value used to fill in the LowestSupportedVersion field of = the > + EFI_FIRMWARE_IMAGE_DESCRIPTOR structure that is returned by the > GetImageInfo() > + service of the Firmware Management Protocol. If EFI_SUCCESS is return= ed, > then > + the firmware device supports a method to report the > LowestSupportedVersion > + value from the currently stored firmware image. If the value can not = be > + reported for the firmware image currently stored in the firmware devic= e, > then > + EFI_UNSUPPORTED must be returned. EFI_DEVICE_ERROR is returned if an > error > + occurs attempting to retrieve the LowestSupportedVersion value for the > + currently stored firmware image. > + > + @note It is recommended that all firmware devices support a method to > report > + the LowestSupportedVersion value from the currently stored > firmware > + image. > + > + @param[out] LowestSupportedVersion LowestSupportedVersion value > retrieved > + from the currently stored > firmware image. > + > + @retval EFI_SUCCESS The lowest supported version of currently > stored > + firmware image was returned in > LowestSupportedVersion. > + @retval EFI_UNSUPPORTED The firmware device does not support a > method to > + report the lowest supported version of the > currently > + stored firmware image. > + @retval EFI_DEVICE_ERROR An error occurred attempting to retrieve the > lowest > + supported version of the currently stored > firmware > + image. > + > +**/ > +EFI_STATUS > +EFIAPI > +FmpDeviceGetLowestSupportedVersion ( > + OUT UINT32 *LowestSupportedVersion > + ) > +{ > + return EFI_UNSUPPORTED; > +} > + > +/** > + Returns the Null-terminated Unicode string that is used to fill in the > + VersionName field of the EFI_FIRMWARE_IMAGE_DESCRIPTOR structure that > is > + returned by the GetImageInfo() service of the Firmware Management > Protocol. > + The returned string must be allocated using > EFI_BOOT_SERVICES.AllocatePool(). > + > + @note It is recommended that all firmware devices support a method to > report > + the VersionName string from the currently stored firmware image. > + > + @param[out] VersionString The version string retrieved from the curre= ntly > + stored firmware image. > + > + @retval EFI_SUCCESS The version string of currently stored > + firmware image was returned in > Version. > + @retval EFI_INVALID_PARAMETER VersionString is NULL. > + @retval EFI_UNSUPPORTED The firmware device does not support > a method > + to report the version string of the > currently > + stored firmware image. > + @retval EFI_DEVICE_ERROR An error occurred attempting to retriev= e > the > + version string of the currently stored > + firmware image. > + @retval EFI_OUT_OF_RESOURCES There are not enough resources to > allocate the > + buffer for the version string of the > currently > + stored firmware image. > + > +**/ > +EFI_STATUS > +EFIAPI > +FmpDeviceGetVersionString ( > + OUT CHAR16 **VersionString > + ) > +{ > + if (VersionString =3D=3D NULL) { > + return EFI_INVALID_PARAMETER; > + } > + *VersionString =3D NULL; > + return EFI_UNSUPPORTED; > +} > + > +/** > + Returns the value used to fill in the Version field of the > + EFI_FIRMWARE_IMAGE_DESCRIPTOR structure that is returned by the > GetImageInfo() > + service of the Firmware Management Protocol. If EFI_SUCCESS is return= ed, > then > + the firmware device supports a method to report the Version value from= the > + currently stored firmware image. If the value can not be reported for= the > + firmware image currently stored in the firmware device, then > EFI_UNSUPPORTED > + must be returned. EFI_DEVICE_ERROR is returned if an error occurs > attempting > + to retrieve the LowestSupportedVersion value for the currently stored > firmware > + image. > + > + @note It is recommended that all firmware devices support a method to > report > + the Version value from the currently stored firmware image. > + > + @param[out] Version The version value retrieved from the currently st= ored > + firmware image. > + > + @retval EFI_SUCCESS The version of currently stored firmware ima= ge > was > + returned in Version. > + @retval EFI_UNSUPPORTED The firmware device does not support a > method to > + report the version of the currently stored > firmware > + image. > + @retval EFI_DEVICE_ERROR An error occurred attempting to retrieve the > version > + of the currently stored firmware image. > + > +**/ > +EFI_STATUS > +EFIAPI > +FmpDeviceGetVersion ( > + OUT UINT32 *Version > + ) > +{ > + return EFI_UNSUPPORTED; > +} > + > +/** > + Returns a copy of the firmware image currently stored in the firmware > device. > + > + @note It is recommended that all firmware devices support a method to > retrieve > + a copy currently stored firmware image. This can be used to sup= port > + features such as recovery and rollback. > + > + @param[out] Image Pointer to a caller allocated buffer where t= he > + currently stored firmware image is copied to= . > + @param[in out] ImageSize Pointer the size, in bytes, of the Image buf= fer. > + On return, points to the size, in bytes, of > firmware > + image currently stored in the firmware devic= e. > + > + @retval EFI_SUCCESS Image contains a copy of the firmware > image > + currently stored in the firmware device= , > and > + ImageSize contains the size, in bytes, = of > the > + firmware image currently stored in the > + firmware device. > + @retval EFI_BUFFER_TOO_SMALL The buffer specified by ImageSize is > too small > + to hold the firmware image currently > stored in > + the firmware device. The buffer size > required > + is returned in ImageSize. > + @retval EFI_INVALID_PARAMETER The Image is NULL. > + @retval EFI_INVALID_PARAMETER The ImageSize is NULL. > + @retval EFI_UNSUPPORTED The operation is not supported. > + @retval EFI_DEVICE_ERROR An error occurred attempting to retriev= e > the > + firmware image currently stored in the > firmware > + device. > + > +**/ > +EFI_STATUS > +EFIAPI > +FmpDeviceGetImage ( > + IN OUT VOID *Image, > + IN IN OUT UINTN *ImageSize > + ) > +{ > + return EFI_UNSUPPORTED; > +} > + > +/** > + Checks if a new firmware image is valid for the firmware device. This > + function allows firmware update operation to validate the firmware ima= ge > + before FmpDeviceSetImage() is called. > + > + @param[in] Image Points to a new firmware image. > + @param[in] ImageSize Size, in bytes, of a new firmware image. > + @param[out] ImageUpdatable Indicates if a new firmware image is valid > for > + a firmware update to the firmware device. > The > + following values from the Firmware > Management > + Protocol are supported: > + IMAGE_UPDATABLE_VALID > + IMAGE_UPDATABLE_INVALID > + IMAGE_UPDATABLE_INVALID_TYPE > + IMAGE_UPDATABLE_INVALID_OLD > + > IMAGE_UPDATABLE_VALID_WITH_VENDOR_CODE > + > + @retval EFI_SUCCESS The image was successfully checked. > Additional > + status information is returned in > + ImageUpdateable. > + @retval EFI_INVALID_PARAMETER Image is NULL. > + @retval EFI_INVALID_PARAMETER ImageUpdateable is NULL. > + > +**/ > +EFI_STATUS > +EFIAPI > +FmpDeviceCheckImage ( > + IN CONST VOID *Image, > + IN UINTN ImageSize, > + OUT UINT32 *ImageUpdateable > + ) > +{ > + return EFI_SUCCESS; > +} > + > +/** > + Updates a firmware device with a new firmware image. This function > returns > + EFI_UNSUPPORTED if the firmware image is not updatable. If the firmwa= re > image > + is updatable, the function should perform the following minimal valida= tions > + before proceeding to do the firmware image update. > + - Validate that the image is a supported image for this firmware dev= ice. > + Return EFI_ABORTED if the image is not supported. Additional deta= ils > + on why the image is not a supported image may be returned in > AbortReason. > + - Validate the data from VendorCode if is not NULL. Firmware image > + validation must be performed before VendorCode data validation. > + VendorCode data is ignored or considered invalid if image validati= on > + fails. Return EFI_ABORTED if the VendorCode data is invalid. > + > + VendorCode enables vendor to implement vendor-specific firmware image > update > + policy. Null if the caller did not specify the policy or use the defa= ult > + policy. As an example, vendor can implement a policy to allow an opti= on to > + force a firmware image update when the abort reason is due to the new > firmware > + image version is older than the current firmware image version or bad = image > + checksum. Sensitive operations such as those wiping the entire firmwa= re > image > + and render the device to be non-functional should be encoded in the im= age > + itself rather than passed with the VendorCode. AbortReason enables > vendor to > + have the option to provide a more detailed description of the abort re= ason to > + the caller. > + > + @param[in] Image Points to the new firmware image. > + @param[in] ImageSize Size, in bytes, of the new firmware imag= e. > + @param[in] VendorCode This enables vendor to implement > vendor-specific > + firmware image update policy. NULL > indicates > + the caller did not specify the policy or= use > the > + default policy. > + @param[in] Progress A function used to report the progress o= f > + updating the firmware device with the > new > + firmware image. > + @param[in] CapsuleFwVersion The version of the new firmware image > from the > + update capsule that provided the new > firmware > + image. > + @param[out] AbortReason A pointer to a pointer to a > Null-terminated > + Unicode string providing more details on > an > + aborted operation. The buffer is allocat= ed > by > + this function with > + EFI_BOOT_SERVICES.AllocatePool(). It > is the > + caller's responsibility to free this buf= fer > with > + EFI_BOOT_SERVICES.FreePool(). > + > + @retval EFI_SUCCESS The firmware device was successfully > updated > + with the new firmware image. > + @retval EFI_ABORTED The operation is aborted. Additional > details > + are provided in AbortReason. > + @retval EFI_INVALID_PARAMETER The Image was NULL. > + @retval EFI_UNSUPPORTED The operation is not supported. > + > +**/ > +EFI_STATUS > +EFIAPI > +FmpDeviceSetImage ( > + IN CONST VOID *Image, > + IN UINTN ImageSize, > + IN CONST VOID *VendorCode, > OPTIONAL > + IN EFI_FIRMWARE_MANAGEMENT_UPDATE_IMAGE_PROGRESS > Progress, OPTIONAL > + IN UINT32 > CapsuleFwVersion, > + OUT CHAR16 **AbortReason > + ) > +{ > + return EFI_UNSUPPORTED; > +} > + > +/** > + Lock the firmware device that contains a firmware image. Once a firmw= are > + device is locked, any attempts to modify the firmware image contents i= n the > + firmware device must fail. > + > + @note It is recommended that all firmware devices support a lock metho= d to > + prevent modifications to a stored firmware image. > + > + @note A firmware device lock mechanism is typically only cleared by a = full > + system reset (not just sleep state/low power mode). > + > + @retval EFI_SUCCESS The firmware device was locked. > + @retval EFI_UNSUPPORTED The firmware device does not support > locking > + > +**/ > +EFI_STATUS > +EFIAPI > +FmpDeviceLock ( > + VOID > + ) > +{ > + return EFI_UNSUPPORTED; > +} > diff --git a/FmpDevicePkg/Library/FmpDeviceLibNull/FmpDeviceLibNull.inf > b/FmpDevicePkg/Library/FmpDeviceLibNull/FmpDeviceLibNull.inf > new file mode 100644 > index 0000000000..d51f69d0b9 > --- /dev/null > +++ b/FmpDevicePkg/Library/FmpDeviceLibNull/FmpDeviceLibNull.inf > @@ -0,0 +1,48 @@ > +## @file > +# Provides firmware device specific services to support updates of a fi= rmware > +# image stored in a firmware device. > +# > +# Copyright (c) 2016, Microsoft Corporation. All rights reserved.
> +# Copyright (c) 2018, Intel Corporation. All rights reserved.
> +# > +# Redistribution and use in source and binary forms, with or without > +# modification, are permitted provided that the following conditions ar= e met: > +# 1. Redistributions of source code must retain the above copyright not= ice, > +# this list of conditions and the following disclaimer. > +# 2. Redistributions in binary form must reproduce the above copyright > notice, > +# this list of conditions and the following disclaimer in the documenta= tion > +# and/or other materials provided with the distribution. > +# > +# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND > CONTRIBUTORS "AS IS" AND > +# ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, > THE IMPLIED > +# WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR > PURPOSE ARE DISCLAIMED. > +# IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE > FOR ANY DIRECT, > +# INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL > DAMAGES (INCLUDING, > +# BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; > LOSS OF USE, > +# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND > ON ANY THEORY OF > +# LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING > NEGLIGENCE > +# OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, > EVEN IF > +# ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. > +## > + > +[Defines] > + INF_VERSION =3D 0x00010005 > + BASE_NAME =3D FmpDeviceLibNull > + MODULE_UNI_FILE =3D FmpDeviceLibNull.uni > + FILE_GUID =3D 8507642B-AE92-4664-B713-807F7774A96D > + MODULE_TYPE =3D DXE_DRIVER > + VERSION_STRING =3D 1.0 > + LIBRARY_CLASS =3D FmpDeviceLib|DXE_DRIVER > + > +# > +# The following information is for reference only and not required by th= e build > tools. > +# > +# VALID_ARCHITECTURES =3D IA32 X64 IPF ARM AARCH64 > +# > + > +[Sources] > + FmpDeviceLib.c > + > +[Packages] > + MdePkg/MdePkg.dec > + FmpDevicePkg/FmpDevicePkg.dec > diff --git a/FmpDevicePkg/Library/FmpDeviceLibNull/FmpDeviceLibNull.uni > b/FmpDevicePkg/Library/FmpDeviceLibNull/FmpDeviceLibNull.uni > new file mode 100644 > index 0000000000..bedb38e9cf > --- /dev/null > +++ b/FmpDevicePkg/Library/FmpDeviceLibNull/FmpDeviceLibNull.uni > @@ -0,0 +1,18 @@ > +// /** @file > +// Provides firmware device specific services to support updates of a fi= rmware > +// image stored in a firmware device. > +// > +// Copyright (c) 2018, 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. > +// > +// **/ > + > +#string STR_MODULE_ABSTRACT #language en-US "Provides firmware > device specific services to support updates of a firmware image stored in= a > firmware device." > + > +#string STR_MODULE_DESCRIPTION #language en-US "Provides firmware > device specific services to support updates of a firmware image stored in= a > firmware device." > diff --git > a/FmpDevicePkg/Library/FmpPayloadHeaderLibV1/FmpPayloadHeaderLib.c > b/FmpDevicePkg/Library/FmpPayloadHeaderLibV1/FmpPayloadHeaderLib.c > new file mode 100644 > index 0000000000..5f08e8b0fd > --- /dev/null > +++ > b/FmpDevicePkg/Library/FmpPayloadHeaderLibV1/FmpPayloadHeaderLib.c > @@ -0,0 +1,188 @@ > +/** @file > + Provides services to retrieve values from Version 1 of a capsule's FMP > Payload > + Header. The FMP Payload Header structure is not defined in the library= class. > + Instead, services are provided to retrieve information from the FMP Pa= yload > + Header. If information is added to the FMP Payload Header, then new > services > + may be added to this library class to retrieve the new information. > + > + Copyright (c) 2016, Microsoft Corporation. All rights reserved.
> + Copyright (c) 2018, Intel Corporation. All rights reserved.
> + > + Redistribution and use in source and binary forms, with or without > + modification, are permitted provided that the following conditions are= met: > + 1. Redistributions of source code must retain the above copyright noti= ce, > + this list of conditions and the following disclaimer. > + 2. Redistributions in binary form must reproduce the above copyright n= otice, > + this list of conditions and the following disclaimer in the documentat= ion > + and/or other materials provided with the distribution. > + > + THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND > CONTRIBUTORS "AS IS" AND > + ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, > THE IMPLIED > + WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR > PURPOSE ARE DISCLAIMED. > + IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE > FOR ANY DIRECT, > + INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL > DAMAGES (INCLUDING, > + BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; > LOSS OF USE, > + DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND > ON ANY THEORY OF > + LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING > NEGLIGENCE > + OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, > EVEN IF > + ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. > + > +**/ > + > +#include > +#include > + > +/// > +/// Define FMP Payload Header structure here so it is not public > +/// > + > +#pragma pack(1) > + > +typedef struct { > + UINT32 Signature; > + UINT32 HeaderSize; > + UINT32 FwVersion; > + UINT32 LowestSupportedVersion; > +} FMP_PAYLOAD_HEADER; > + > +#pragma pack() > + > +/// > +/// Identifier is used to make sure the data in the header is for this s= tructure > +/// and version. If the structure changes update the last digit. > +/// > +#define FMP_PAYLOAD_HEADER_SIGNATURE SIGNATURE_32 ('M', 'S', 'S', '1') > + > +/** > + Returns the FMP Payload Header size in bytes. > + > + @param[in] Header FMP Payload Header to evaluate > + @param[in] FmpPayloadSize Size of FMP payload > + @param[out] Size The size, in bytes, of the FMP Payload > Header. > + > + @retval EFI_SUCCESS The firmware version was returned. > + @retval EFI_INVALID_PARAMETER Header is NULL. > + @retval EFI_INVALID_PARAMETER Size is NULL. > + @retval EFI_INVALID_PARAMETER Header is not a valid FMP Payload > Header. > + > +**/ > +EFI_STATUS > +EFIAPI > +GetFmpPayloadHeaderSize ( > + IN CONST VOID *Header, > + IN CONST UINTN FmpPayloadSize, > + OUT UINT32 *Size > + ) > +{ > + FMP_PAYLOAD_HEADER *FmpPayloadHeader; > + > + FmpPayloadHeader =3D NULL; > + > + if (Header =3D=3D NULL || Size =3D=3D NULL) { > + return EFI_INVALID_PARAMETER; > + } > + > + FmpPayloadHeader =3D (FMP_PAYLOAD_HEADER *)Header; > + if ((UINTN)FmpPayloadHeader + sizeof (FMP_PAYLOAD_HEADER) < > (UINTN)FmpPayloadHeader || > + (UINTN)FmpPayloadHeader + sizeof (FMP_PAYLOAD_HEADER) >=3D > (UINTN)FmpPayloadHeader + FmpPayloadSize || > + FmpPayloadHeader->HeaderSize < sizeof (FMP_PAYLOAD_HEADER)) { > + return EFI_INVALID_PARAMETER; > + } > + > + if (FmpPayloadHeader->Signature !=3D FMP_PAYLOAD_HEADER_SIGNATURE) { > + return EFI_INVALID_PARAMETER; > + } > + > + *Size =3D FmpPayloadHeader->HeaderSize; > + return EFI_SUCCESS; > +} > + > +/** > + Returns the version described in the FMP Payload Header. > + > + @param[in] Header FMP Payload Header to evaluate > + @param[in] FmpPayloadSize Size of FMP payload > + @param[out] Version The firmware version described in the FMP > Payload > + Header. > + > + @retval EFI_SUCCESS The firmware version was returned. > + @retval EFI_INVALID_PARAMETER Header is NULL. > + @retval EFI_INVALID_PARAMETER Version is NULL. > + @retval EFI_INVALID_PARAMETER Header is not a valid FMP Payload > Header. > + > +**/ > +EFI_STATUS > +EFIAPI > +GetFmpPayloadHeaderVersion ( > + IN CONST VOID *Header, > + IN CONST UINTN FmpPayloadSize, > + OUT UINT32 *Version > + ) > +{ > + FMP_PAYLOAD_HEADER *FmpPayloadHeader; > + > + FmpPayloadHeader =3D NULL; > + > + if (Header =3D=3D NULL || Version =3D=3D NULL) { > + return EFI_INVALID_PARAMETER; > + } > + > + FmpPayloadHeader =3D (FMP_PAYLOAD_HEADER *)Header; > + if ((UINTN)FmpPayloadHeader + sizeof (FMP_PAYLOAD_HEADER) < > (UINTN)FmpPayloadHeader || > + (UINTN)FmpPayloadHeader + sizeof (FMP_PAYLOAD_HEADER) >=3D > (UINTN)FmpPayloadHeader + FmpPayloadSize || > + FmpPayloadHeader->HeaderSize < sizeof (FMP_PAYLOAD_HEADER)) { > + return EFI_INVALID_PARAMETER; > + } > + > + if (FmpPayloadHeader->Signature !=3D FMP_PAYLOAD_HEADER_SIGNATURE) { > + return EFI_INVALID_PARAMETER; > + } > + > + *Version =3D FmpPayloadHeader->FwVersion; > + return EFI_SUCCESS; > +} > + > +/** > + Returns the lowest supported version described in the FMP Payload Head= er. > + > + @param[in] Header FMP Payload Header to evaluate > + @param[in] FmpPayloadSize Size of FMP payload > + @param[out] LowestSupportedVersion The lowest supported version > described in > + the FMP Payload Header. > + > + @retval EFI_SUCCESS The lowest support version was > returned. > + @retval EFI_INVALID_PARAMETER Header is NULL. > + @retval EFI_INVALID_PARAMETER LowestSupportedVersion is NULL. > + @retval EFI_INVALID_PARAMETER Header is not a valid FMP Payload > Header. > + > +**/ > +EFI_STATUS > +EFIAPI > +GetFmpPayloadHeaderLowestSupportedVersion ( > + IN CONST VOID *Header, > + IN CONST UINTN FmpPayloadSize, > + IN OUT UINT32 *LowestSupportedVersion > + ) > +{ > + FMP_PAYLOAD_HEADER *FmpPayloadHeader; > + > + FmpPayloadHeader =3D NULL; > + > + if (Header =3D=3D NULL || LowestSupportedVersion =3D=3D NULL) { > + return EFI_INVALID_PARAMETER; > + } > + > + FmpPayloadHeader =3D (FMP_PAYLOAD_HEADER *)Header; > + if ((UINTN)FmpPayloadHeader + sizeof (FMP_PAYLOAD_HEADER) < > (UINTN)FmpPayloadHeader || > + (UINTN)FmpPayloadHeader + sizeof (FMP_PAYLOAD_HEADER) >=3D > (UINTN)FmpPayloadHeader + FmpPayloadSize || > + FmpPayloadHeader->HeaderSize < sizeof (FMP_PAYLOAD_HEADER)) { > + return EFI_INVALID_PARAMETER; > + } > + > + if (FmpPayloadHeader->Signature !=3D FMP_PAYLOAD_HEADER_SIGNATURE) { > + return EFI_INVALID_PARAMETER; > + } > + > + *LowestSupportedVersion =3D FmpPayloadHeader->LowestSupportedVersion; > + return EFI_SUCCESS; > +} > diff --git > a/FmpDevicePkg/Library/FmpPayloadHeaderLibV1/FmpPayloadHeaderLibV1.in > f > b/FmpDevicePkg/Library/FmpPayloadHeaderLibV1/FmpPayloadHeaderLibV1.in > f > new file mode 100644 > index 0000000000..41ed6e2aca > --- /dev/null > +++ > b/FmpDevicePkg/Library/FmpPayloadHeaderLibV1/FmpPayloadHeaderLibV1.in > f > @@ -0,0 +1,48 @@ > +## @file > +# Provides services to retrieve values from Version 1 of a capsule's FM= P > Payload > +# Header. The FMP Payload Header structure is not defined in the librar= y > class. > +# Instead, services are provided to retrieve information from the FMP > Payload > +# Header. If information is added to the FMP Payload Header, then new > services > +# may be added to this library class to retrieve the new information. > +# > +# Copyright (c) 2016, Microsoft Corporation. All rights reserved.
> +# Copyright (c) 2018, Intel Corporation. All rights reserved.
> +# > +# Redistribution and use in source and binary forms, with or without > +# modification, are permitted provided that the following conditions ar= e met: > +# 1. Redistributions of source code must retain the above copyright not= ice, > +# this list of conditions and the following disclaimer. > +# 2. Redistributions in binary form must reproduce the above copyright > notice, > +# this list of conditions and the following disclaimer in the documenta= tion > +# and/or other materials provided with the distribution. > +# > +# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND > CONTRIBUTORS "AS IS" AND > +# ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, > THE IMPLIED > +# WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR > PURPOSE ARE DISCLAIMED. > +# IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE > FOR ANY DIRECT, > +# INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL > DAMAGES (INCLUDING, > +# BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; > LOSS OF USE, > +# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND > ON ANY THEORY OF > +# LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING > NEGLIGENCE > +# OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, > EVEN IF > +# ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. > +## > + > +[Defines] > + INF_VERSION =3D 0x00010005 > + BASE_NAME =3D FmpPayloadHeaderLibV1 > + FILE_GUID =3D > 98A79A6C-513C-4E72-8375-39C0A7244C4B > + MODULE_TYPE =3D DXE_DRIVER > + VERSION_STRING =3D 1.0 > + LIBRARY_CLASS =3D FmpPayloadHeaderLib|DXE_DRIVER > UEFI_APPLICATION > + > +# > +# VALID_ARCHITECTURES =3D IA32 X64 IPF ARM AARCH64 > +# > + > +[Sources] > + FmpPayloadHeaderLib.c > + > +[Packages] > + MdePkg/MdePkg.dec > + FmpDevicePkg/FmpDevicePkg.dec > diff --git > a/FmpDevicePkg/Library/FmpPayloadHeaderLibV1/FmpPayloadHeaderLibV1.u > ni > b/FmpDevicePkg/Library/FmpPayloadHeaderLibV1/FmpPayloadHeaderLibV1.u > ni > new file mode 100644 > index 0000000000..4eef31753d > --- /dev/null > +++ > b/FmpDevicePkg/Library/FmpPayloadHeaderLibV1/FmpPayloadHeaderLibV1.u > ni > @@ -0,0 +1,21 @@ > +// /** @file > +// Provides services to retrieve values from Version 1 of a capsule's FM= P > Payload > +// Header. The FMP Payload Header structure is not defined in the librar= y class. > +// Instead, services are provided to retrieve information from the FMP P= ayload > +// Header. If information is added to the FMP Payload Header, then new > services > +// may be added to this library class to retrieve the new information. > +// > +// Copyright (c) 2018, 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. > +// > +// **/ > + > +#string STR_MODULE_ABSTRACT #language en-US "Provides services to > retrieve values from Version 1 of a capsule's FMP Payload Header." > + > +#string STR_MODULE_DESCRIPTION #language en-US "Provides services to > retrieve values from Version 1 of a capsule's FMP Payload Header." > -- > 2.14.2.windows.3