public inbox for devel@edk2.groups.io
 help / color / mirror / Atom feed
From: "Zeng, Star" <star.zeng@intel.com>
To: "Kinney, Michael D" <michael.d.kinney@intel.com>,
	"edk2-devel@lists.01.org" <edk2-devel@lists.01.org>
Cc: "Kinney, Michael D" <michael.d.kinney@intel.com>,
	"Yao, Jiewen" <jiewen.yao@intel.com>,
	"Zeng, Star" <star.zeng@intel.com>
Subject: Re: [Patch v5 02/21] FmpDevicePkg: Add library instances
Date: Wed, 1 Aug 2018 07:50:32 +0000	[thread overview]
Message-ID: <0C09AFA07DD0434D9E2A0C6AEB0483103BB8B54C@shsmsx102.ccr.corp.intel.com> (raw)
In-Reply-To: <20180801065722.9500-3-michael.d.kinney@intel.com>

Reviewed-by: Star Zeng <star.zeng@intel.com>

-----Original Message-----
From: edk2-devel [mailto:edk2-devel-bounces@lists.01.org] On Behalf Of Kinney, Michael D
Sent: Wednesday, August 1, 2018 2:55 PM
To: edk2-devel@lists.01.org
Cc: Kinney, Michael D <michael.d.kinney@intel.com>; Yao, Jiewen <jiewen.yao@intel.com>
Subject: [edk2] [Patch v5 02/21] FmpDevicePkg: Add library instances

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/MsCapsuleUpdatePkg

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 <sean.brogan@microsoft.com>
Cc: Jiewen Yao <jiewen.yao@intel.com>
Contributed-under: TianoCore Contribution Agreement 1.1
Signed-off-by: Michael D Kinney <michael.d.kinney@intel.com>
---
 .../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/CapsuleUpdatePolicyLibNull.c b/FmpDevicePkg/Library/CapsuleUpdatePolicyLibNull/CapsuleUpdatePolicyLibNull.c
new file mode 100644
index 0000000000..d86d6ba612
--- /dev/null
+++ b/FmpDevicePkg/Library/CapsuleUpdatePolicyLibNull/CapsuleUpdatePolic
+++ yLibNull.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
+IsLowestSupportedVersionCheckRequired (
+  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
+IsLockFmpDeviceAtLockEventGuidRequired (
+  VOID
+  )
+{
+  return TRUE;
+}
diff --git a/FmpDevicePkg/Library/CapsuleUpdatePolicyLibNull/CapsuleUpdatePolicyLibNull.inf b/FmpDevicePkg/Library/CapsuleUpdatePolicyLibNull/CapsuleUpdatePolicyLibNull.inf
new file mode 100644
index 0000000000..c7c669e3e0
--- /dev/null
+++ b/FmpDevicePkg/Library/CapsuleUpdatePolicyLibNull/CapsuleUpdatePolic
+++ yLibNull.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/CapsuleUpdatePolicyLibNull.uni b/FmpDevicePkg/Library/CapsuleUpdatePolicyLibNull/CapsuleUpdatePolicyLibNull.uni
new file mode 100644
index 0000000000..0f16fea391
--- /dev/null
+++ b/FmpDevicePkg/Library/CapsuleUpdatePolicyLibNull/CapsuleUpdatePolic
+++ yLibNull.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.inf b/FmpDevicePkg/Library/FmpPayloadHeaderLibV1/FmpPayloadHeaderLibV1.inf
new file mode 100644
index 0000000000..41ed6e2aca
--- /dev/null
+++ b/FmpDevicePkg/Library/FmpPayloadHeaderLibV1/FmpPayloadHeaderLibV1.i
+++ nf
@@ -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.uni b/FmpDevicePkg/Library/FmpPayloadHeaderLibV1/FmpPayloadHeaderLibV1.uni
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
edk2-devel@lists.01.org
https://lists.01.org/mailman/listinfo/edk2-devel


  reply	other threads:[~2018-08-01  7:50 UTC|newest]

Thread overview: 28+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2018-08-01  6:55 [Patch v5 00/21] Add FmpDevicePkg Kinney, Michael D
2018-08-01  6:55 ` [Patch v5 01/21] FmpDevicePkg: Add package, library classes, and PCDs Kinney, Michael D
2018-08-01  7:50   ` Zeng, Star
2018-08-01  6:55 ` [Patch v5 02/21] FmpDevicePkg: Add library instances Kinney, Michael D
2018-08-01  7:50   ` Zeng, Star [this message]
2018-08-01  6:55 ` [Patch v5 03/21] FmpDevicePkg: Add FmpDxe module Kinney, Michael D
2018-08-01  7:50   ` Zeng, Star
2018-08-01  6:55 ` [Patch v5 04/21] FmpDevicePkg: Add DSC file to build all package components Kinney, Michael D
2018-08-01  7:50   ` Zeng, Star
2018-08-01  6:55 ` [Patch v5 05/21] FmpDevicePkg FmpDxe: Update function comment for FmpDxeEntryPoint Kinney, Michael D
2018-08-01  6:55 ` [Patch v5 06/21] FmpDevicePkg FmpDxe: Return 0 when LSV check is not required Kinney, Michael D
2018-08-01  6:55 ` [Patch v5 07/21] FmpDevicePkg: Remove IPF Kinney, Michael D
2018-08-01  6:55 ` [Patch v5 08/21] FmpDevicePkg: Add DISABLE_NEW_DEPRECATED_INTERFACES build options Kinney, Michael D
2018-08-01  6:55 ` [Patch v5 09/21] FmpDevicePkg FmpDxe: Check Progress!= NULL before calling Progress(100) Kinney, Michael D
2018-08-01  6:55 ` [Patch v5 10/21] FmpDevicePkg FmpDxe: Add EFI_ABORTED in retval of CheckTheImage() Kinney, Michael D
2018-08-01  6:55 ` [Patch v5 11/21] FmpDevicePkg FmpDxe: Fix typo "EFI_SECURITY_VIOLATIO" Kinney, Michael D
2018-08-01  6:55 ` [Patch v5 12/21] FmpDevicePkg: Remove DisplayUpdateProgressLib mapping for FmpDxe Kinney, Michael D
2018-08-01  6:55 ` [Patch v5 13/21] FmpDevicePkg FmpDxe: Add NULL check to return Value from GetVariable2 Kinney, Michael D
2018-08-01  6:55 ` [Patch v5 14/21] FmpDevicePkg FmpDxe: Check ImageIndex first before Image/ImageSize Kinney, Michael D
2018-08-01  6:55 ` [Patch v5 15/21] FmpDevicePkg FmpDxe: Use Attributes to know whether reset is required Kinney, Michael D
2018-08-01  6:55 ` [Patch v5 16/21] FmpDevicePkg FmpDxe: Add comment in mFmpDeviceLocked's declaration Kinney, Michael D
2018-08-01  6:55 ` [Patch v5 17/21] FmpDevicePkg FmpDxe: Return UNSUPPORTED if device has been locked Kinney, Michael D
2018-08-01  6:55 ` [Patch v5 18/21] FmpDevicePkg FmpDxe: Initialize DeviceLibLowestSupportedVersion Kinney, Michael D
2018-08-01  6:55 ` [Patch v5 19/21] FmpDevicePkg: Fix code style issue Kinney, Michael D
2018-08-01  6:55 ` [Patch v5 20/21] FmpDevicePkg FmpDxe: Use local variable to store test key digest size Kinney, Michael D
2018-08-01  6:55 ` [Patch v5 21/21] MdeModulePkg/BdsDxe: Move display of test key usage into BDS module Kinney, Michael D
2018-08-01  7:53   ` Zeng, Star
2018-08-01 22:39     ` Kinney, Michael D

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-list from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=0C09AFA07DD0434D9E2A0C6AEB0483103BB8B54C@shsmsx102.ccr.corp.intel.com \
    --to=devel@edk2.groups.io \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox