Looks good. Can we add "Is" before the function - LowestSupportedVersionCheckRequired (), LockFmpDeviceAtLockEventGuidRequired () ?
That is IsLowestSupportedVersionCheckRequired (), IsLockFmpDeviceAtLockEventGuidRequired (). Thank you Yao Jiewen > -----Original Message----- > From: Kinney, Michael D > Sent: Tuesday, May 29, 2018 3:37 PM > To: [email protected] > Cc: Kinney, Michael D <[email protected]>; Sean Brogan > <[email protected]>; Yao, Jiewen <[email protected]> > Subject: [RFC v3 2/4] FmpDevicePkg: Add library instances > > From: "Kinney, Michael D" <[email protected]> > > https://bugzilla.tianocore.org/show_bug.cgi?id=922 > > Based on content from the following branch: > > https://github.com/Microsoft/MS_UEFI/tree/share/MsCapsuleSupport/MsCapsu > leUpdatePkg > > Add library instances for FmpDeviceLib, CapsuleUpdatePolicyLib, > and FmpPayloadHeaderLib. > > Library Classes > =============== > * 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. > > Cc: Sean Brogan <[email protected]> > Cc: Jiewen Yao <[email protected]> > Contributed-under: TianoCore Contribution Agreement 1.1 > Signed-off-by: Michael D Kinney <[email protected]> > --- > .../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/CapsuleUpdatePolicyLibNull > .c > create mode 100644 > FmpDevicePkg/Library/CapsuleUpdatePolicyLibNull/CapsuleUpdatePolicyLibNull > .inf > create mode 100644 > FmpDevicePkg/Library/CapsuleUpdatePolicyLibNull/CapsuleUpdatePolicyLibNull > .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 > > 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.<BR> > + Copyright (c) 2018, Intel Corporation. All rights reserved.<BR> > + > + 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 notice, > + 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 documentation > + 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 <PiDxe.h> > +#include <Library/CapsuleUpdatePolicyLib.h> > + > +/** > + Determine if the system power state supports a capsule update. > + > + @param[out] Good Returns TRUE if system power state supports a capsule > + update. Returns FALSE if system power state does not > + support a capsule update. Return value is only valid 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 = 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 valid 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 = 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 valid 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 = 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 update > 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 unlocked. > + > + @retval TRUE The FMP device lock action is required at lock event guid. > + @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.<BR> > +# Copyright (c) 2018, Intel Corporation. All rights reserved.<BR> > +# > +# 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 notice, > +# 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 documentation > +# 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 = 0x00010005 > + BASE_NAME = CapsuleUpdatePolicyLibNull > + MODULE_UNI_FILE = CapsuleUpdatePolicyLibNull.uni > + FILE_GUID = 8E36EC87-440D-44F9-AB2F-AA806C61A1A6 > + MODULE_TYPE = BASE > + VERSION_STRING = 1.0 > + LIBRARY_CLASS = CapsuleUpdatePolicyLib > + > +# > +# VALID_ARCHITECTURES = 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.<BR> > +// > +// 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 firmware > + image stored in a firmware device. > + > + Copyright (c) 2016, Microsoft Corporation. All rights reserved.<BR> > + Copyright (c) 2018, Intel Corporation. All rights reserved.<BR> > + > + 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 notice, > + 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 documentation > + 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 <PiDxe.h> > +#include <Library/FmpDeviceLib.h> > + > +/** > + Provide a function to install the Firmware Management Protocol instance > 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 the > UEFI > + Driver Model, then EFI_UNSUPPORTED is returned. > + > + @param[in] FmpInstaller Function that installs the Firmware Management > + Protocol. > + > + @retval EFI_SUCCESS The device is managed by a driver that follows > 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 currently > + 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 firmware > 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 == NULL) { > + return EFI_INVALID_PARAMETER; > + } > + *Size = 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 function. > + > + @param[out] Guid Double pointer to a GUID value that is updated to point > to > + to a GUID value. The GUID value is not allocated and > 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 > AttributesSettings > + 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 == NULL || Setting == NULL) { > + return EFI_INVALID_PARAMETER; > + } > + *Supported = 0; > + *Setting = 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 returned, > 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 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 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 currently > + 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 retrieve > 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 == NULL) { > + return EFI_INVALID_PARAMETER; > + } > + *VersionString = 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 returned, > 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 stored > + firmware image. > + > + @retval EFI_SUCCESS The version of currently stored firmware image > 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 support > + features such as recovery and rollback. > + > + @param[out] Image Pointer to a caller allocated buffer where the > + currently stored firmware image is copied to. > + @param[in out] ImageSize Pointer the size, in bytes, of the Image buffer. > + On return, points to the size, in bytes, of > firmware > + image currently stored in the firmware device. > + > + @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 retrieve > 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 image > + 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 firmware > image > + is updatable, the function should perform the following minimal validations > + before proceeding to do the firmware image update. > + - Validate that the image is a supported image for this firmware device. > + Return EFI_ABORTED if the image is not supported. Additional details > + 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 validation > + 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 default > + policy. As an example, vendor can implement a policy to allow an option 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 firmware > image > + and render the device to be non-functional should be encoded in the image > + itself rather than passed with the VendorCode. AbortReason enables > vendor to > + have the option to provide a more detailed description of the abort reason > to > + the caller. > + > + @param[in] Image Points to the new firmware image. > + @param[in] ImageSize Size, in bytes, of the new firmware image. > + @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 of > + 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 allocated > by > + this function with > + EFI_BOOT_SERVICES.AllocatePool(). It > is the > + caller's responsibility to free this buffer > 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 firmware > + device is locked, any attempts to modify the firmware image contents in the > + firmware device must fail. > + > + @note It is recommended that all firmware devices support a lock method 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 > firmware > +# image stored in a firmware device. > +# > +# Copyright (c) 2016, Microsoft Corporation. All rights reserved.<BR> > +# Copyright (c) 2018, Intel Corporation. All rights reserved.<BR> > +# > +# 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 notice, > +# 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 documentation > +# 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 = 0x00010005 > + BASE_NAME = FmpDeviceLibNull > + MODULE_UNI_FILE = FmpDeviceLibNull.uni > + FILE_GUID = 8507642B-AE92-4664-B713-807F7774A96D > + MODULE_TYPE = DXE_DRIVER > + VERSION_STRING = 1.0 > + LIBRARY_CLASS = FmpDeviceLib|DXE_DRIVER > + > +# > +# The following information is for reference only and not required by the > build > tools. > +# > +# VALID_ARCHITECTURES = 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 > firmware > +// image stored in a firmware device. > +// > +// Copyright (c) 2018, Intel Corporation. All rights reserved.<BR> > +// > +// 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 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.<BR> > + Copyright (c) 2018, Intel Corporation. All rights reserved.<BR> > + > + 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 notice, > + 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 documentation > + 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 <PiDxe.h> > +#include <Library/FmpPayloadHeaderLib.h> > + > +/// > +/// 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 > structure > +/// 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 = NULL; > + > + if (Header == NULL || Size == NULL) { > + return EFI_INVALID_PARAMETER; > + } > + > + FmpPayloadHeader = (FMP_PAYLOAD_HEADER *)Header; > + if ((UINTN)FmpPayloadHeader + sizeof (FMP_PAYLOAD_HEADER) < > (UINTN)FmpPayloadHeader || > + (UINTN)FmpPayloadHeader + sizeof (FMP_PAYLOAD_HEADER) >= > (UINTN)FmpPayloadHeader + FmpPayloadSize || > + FmpPayloadHeader->HeaderSize < sizeof (FMP_PAYLOAD_HEADER)) { > + return EFI_INVALID_PARAMETER; > + } > + > + if (FmpPayloadHeader->Signature != FMP_PAYLOAD_HEADER_SIGNATURE) { > + return EFI_INVALID_PARAMETER; > + } > + > + *Size = 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 = NULL; > + > + if (Header == NULL || Version == NULL) { > + return EFI_INVALID_PARAMETER; > + } > + > + FmpPayloadHeader = (FMP_PAYLOAD_HEADER *)Header; > + if ((UINTN)FmpPayloadHeader + sizeof (FMP_PAYLOAD_HEADER) < > (UINTN)FmpPayloadHeader || > + (UINTN)FmpPayloadHeader + sizeof (FMP_PAYLOAD_HEADER) >= > (UINTN)FmpPayloadHeader + FmpPayloadSize || > + FmpPayloadHeader->HeaderSize < sizeof (FMP_PAYLOAD_HEADER)) { > + return EFI_INVALID_PARAMETER; > + } > + > + if (FmpPayloadHeader->Signature != FMP_PAYLOAD_HEADER_SIGNATURE) { > + return EFI_INVALID_PARAMETER; > + } > + > + *Version = FmpPayloadHeader->FwVersion; > + return EFI_SUCCESS; > +} > + > +/** > + Returns the lowest supported version described in the FMP Payload Header. > + > + @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 = NULL; > + > + if (Header == NULL || LowestSupportedVersion == NULL) { > + return EFI_INVALID_PARAMETER; > + } > + > + FmpPayloadHeader = (FMP_PAYLOAD_HEADER *)Header; > + if ((UINTN)FmpPayloadHeader + sizeof (FMP_PAYLOAD_HEADER) < > (UINTN)FmpPayloadHeader || > + (UINTN)FmpPayloadHeader + sizeof (FMP_PAYLOAD_HEADER) >= > (UINTN)FmpPayloadHeader + FmpPayloadSize || > + FmpPayloadHeader->HeaderSize < sizeof (FMP_PAYLOAD_HEADER)) { > + return EFI_INVALID_PARAMETER; > + } > + > + if (FmpPayloadHeader->Signature != FMP_PAYLOAD_HEADER_SIGNATURE) { > + return EFI_INVALID_PARAMETER; > + } > + > + *LowestSupportedVersion = 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 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 > 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.<BR> > +# Copyright (c) 2018, Intel Corporation. All rights reserved.<BR> > +# > +# 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 notice, > +# 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 documentation > +# 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 = 0x00010005 > + BASE_NAME = FmpPayloadHeaderLibV1 > + FILE_GUID = > 98A79A6C-513C-4E72-8375-39C0A7244C4B > + MODULE_TYPE = DXE_DRIVER > + VERSION_STRING = 1.0 > + LIBRARY_CLASS = FmpPayloadHeaderLib|DXE_DRIVER > UEFI_APPLICATION > + > +# > +# VALID_ARCHITECTURES = 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 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 > 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) 2018, Intel Corporation. All rights reserved.<BR> > +// > +// 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 _______________________________________________ edk2-devel mailing list [email protected] https://lists.01.org/mailman/listinfo/edk2-devel

