Reviewed-by: Zailiang Sun <zailiang....@intel.com>

> -----Original Message-----
> From: devel@edk2.groups.io [mailto:devel@edk2.groups.io] On Behalf Of
> Eric Jin
> Sent: Monday, August 12, 2019 9:45 AM
> To: devel@edk2.groups.io
> Cc: Sun, Zailiang <zailiang....@intel.com>; Qian, Yi <yi.q...@intel.com>;
> Kinney, Michael D <michael.d.kin...@intel.com>; Gao, Liming
> <liming....@intel.com>
> Subject: [edk2-devel] [edk2-platforms][PATCH]
> Vlv2TbltDevicePkg/FmpDeviceLib: Implement new APIs
> 
> Implement new APIs defined in FmpDeviceLib
> * RegisterFmpUninstaller()
> * FmpDeviceSetContext()
> * FmpDeviceGetHardwareInstance()
> 
> Cc: Zailiang Sun <zailiang....@intel.com>
> Cc: Yi Qian <yi.q...@intel.com>
> Cc: Michael D Kinney <michael.d.kin...@intel.com>
> Cc: Liming Gao <liming....@intel.com>
> Signed-off-by: Eric Jin <eric....@intel.com>
> ---
>  .../Library/FmpDeviceLib/FmpDeviceLib.c       | 95 ++++++++++++++++++
>  .../Library/FmpDeviceLibSample/FmpDeviceLib.c | 99
> ++++++++++++++++++-
>  2 files changed, 192 insertions(+), 2 deletions(-)
> 
> diff --git
> a/Platform/Intel/Vlv2TbltDevicePkg/Feature/Capsule/Library/FmpDeviceLib/
> FmpDeviceLib.c
> b/Platform/Intel/Vlv2TbltDevicePkg/Feature/Capsule/Library/FmpDeviceLib
> /FmpDeviceLib.c
> index 57185d8d09..d8c9036012 100644
> ---
> a/Platform/Intel/Vlv2TbltDevicePkg/Feature/Capsule/Library/FmpDeviceLib/
> FmpDeviceLib.c
> +++
> b/Platform/Intel/Vlv2TbltDevicePkg/Feature/Capsule/Library/FmpDevice
> +++ Lib/FmpDeviceLib.c
> @@ -66,6 +66,73 @@ RegisterFmpInstaller (
>    return EFI_UNSUPPORTED;
>  }
> 
> +/**
> +  Provide a function to uninstall the Firmware Management Protocol
> +instance from 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] FmpUninstaller  Function that installs the Firmware
> Management
> +                             Protocol.
> +
> +  @retval EFI_SUCCESS      The device is managed by a driver that follows the
> +                           UEFI Driver Model.  FmpUinstaller must be called 
> on
> +                           each Driver Binding Stop().
> +  @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
> +RegisterFmpUninstaller (
> +  IN FMP_DEVICE_LIB_REGISTER_FMP_UNINSTALLER  FmpUninstaller
> +  )
> +{
> +  //
> +  // This is a system firmware update that does not use Driver Binding
> +Protocol
> +  //
> +  return EFI_UNSUPPORTED;
> +}
> +
> +/**
> +  Set the device context for the FmpDeviceLib services 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.  Once a device context is set, the FmpDeviceLib services
> +  operate on the currently set device context.
> +
> +  @param[in]      Handle   Device handle for the FmpDeviceLib services.
> +                           If Handle is NULL, then Context is freed.
> +  @param[in, out] Context  Device context for the FmpDeviceLib services.
> +                           If Context is NULL, then a new context is 
> allocated
> +                           for Handle and the current device context is set 
> and
> +                           returned in Context.  If Context is not NULL, then
> +                           the current device context is set.
> +
> +  @retval EFI_SUCCESS      The device is managed by a driver that follows the
> +                           UEFI Driver Model.
> +  @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
> +FmpDeviceSetContext (
> +  IN EFI_HANDLE  Handle,
> +  IN OUT VOID    **Context
> +  )
> +{
> +  //
> +  // This is a system firmware update that does not use Driver Binding
> +Protocol
> +  //
> +  return EFI_UNSUPPORTED;
> +}
> 
>  /**
>    Returns the size, in bytes, of the firmware image currently stored in the
> @@ -289,6 +356,34 @@ FmpDeviceGetVersion (
>    return EFI_SUCCESS;
>  }
> 
> +/**
> +  Returns the value used to fill in the HardwareInstance 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 HardwareInstance
> value.
> +  If the value can not be reported for the firmware device, then
> +EFI_UNSUPPORTED
> +  must be returned.  EFI_DEVICE_ERROR is returned if an error occurs
> +attempting
> +  to retrieve the HardwareInstance value for the firmware device.
> +
> +  @param[out] HardwareInstance  The hardware instance value for the
> firmware
> +                                device.
> +
> +  @retval EFI_SUCCESS       The hardware instance for the current firmware
> +                            devide is returned in HardwareInstance.
> +  @retval EFI_UNSUPPORTED   The firmware device does not support a
> method to
> +                            report the hardware instance value.
> +  @retval EFI_DEVICE_ERROR  An error occurred attempting to retrieve the
> hardware
> +                            instance value.
> +
> +**/
> +EFI_STATUS
> +EFIAPI
> +FmpDeviceGetHardwareInstance (
> +  OUT UINT64  *HardwareInstance
> +  )
> +{
> +  return EFI_UNSUPPORTED;
> +}
> 
>  /**
>    Retrieves a copy of the current firmware image of the device.
> diff --git
> a/Platform/Intel/Vlv2TbltDevicePkg/Feature/Capsule/Library/FmpDeviceLib
> Sample/FmpDeviceLib.c
> b/Platform/Intel/Vlv2TbltDevicePkg/Feature/Capsule/Library/FmpDeviceLib
> Sample/FmpDeviceLib.c
> index 80ce83a14b..db0f238ea5 100644
> ---
> a/Platform/Intel/Vlv2TbltDevicePkg/Feature/Capsule/Library/FmpDeviceLib
> Sample/FmpDeviceLib.c
> +++
> b/Platform/Intel/Vlv2TbltDevicePkg/Feature/Capsule/Library/FmpDevice
> +++ LibSample/FmpDeviceLib.c
> @@ -1,8 +1,8 @@
>  /**
> 
> -Copyright (c) 2016, Microsoft Corporation
> +Copyright (c) 2016, Microsoft Corporation. All rights reserved.<BR>
> +Copyright (c) 2019, Intel Corporation. All rights reserved.<BR>
> 
> -All rights reserved.
>  SPDX-License-Identifier: BSD-2-Clause-Patent
> 
>  **/
> @@ -43,6 +43,73 @@ IN FMP_DEVICE_LIB_REGISTER_FMP_INSTALLER Func
>    return EFI_UNSUPPORTED;
>  }
> 
> +/**
> +  Provide a function to uninstall the Firmware Management Protocol
> +instance from 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] FmpUninstaller  Function that installs the Firmware
> Management
> +                             Protocol.
> +
> +  @retval EFI_SUCCESS      The device is managed by a driver that follows the
> +                           UEFI Driver Model.  FmpUinstaller must be called 
> on
> +                           each Driver Binding Stop().
> +  @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
> +RegisterFmpUninstaller (
> +  IN FMP_DEVICE_LIB_REGISTER_FMP_UNINSTALLER  FmpUninstaller
> +  )
> +{
> +  //
> +  // This is a system firmware update that does not use Driver Binding
> +Protocol
> +  //
> +  return EFI_UNSUPPORTED;
> +}
> +
> +/**
> +  Set the device context for the FmpDeviceLib services 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.  Once a device context is set, the FmpDeviceLib services
> +  operate on the currently set device context.
> +
> +  @param[in]      Handle   Device handle for the FmpDeviceLib services.
> +                           If Handle is NULL, then Context is freed.
> +  @param[in, out] Context  Device context for the FmpDeviceLib services.
> +                           If Context is NULL, then a new context is 
> allocated
> +                           for Handle and the current device context is set 
> and
> +                           returned in Context.  If Context is not NULL, then
> +                           the current device context is set.
> +
> +  @retval EFI_SUCCESS      The device is managed by a driver that follows the
> +                           UEFI Driver Model.
> +  @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
> +FmpDeviceSetContext (
> +  IN EFI_HANDLE  Handle,
> +  OUT VOID       **Context
> +  )
> +{
> +  //
> +  // This is a system firmware update that does not use Driver Binding
> +Protocol
> +  //
> +  return EFI_UNSUPPORTED;
> +}
> 
>  /**
>  Used to get the size of the image in bytes.
> @@ -201,6 +268,34 @@ IN OUT UINT32* Version
>    return EFI_UNSUPPORTED;
>  }
> 
> +/**
> +  Returns the value used to fill in the HardwareInstance 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 HardwareInstance
> value.
> +  If the value can not be reported for the firmware device, then
> +EFI_UNSUPPORTED
> +  must be returned.  EFI_DEVICE_ERROR is returned if an error occurs
> +attempting
> +  to retrieve the HardwareInstance value for the firmware device.
> +
> +  @param[out] HardwareInstance  The hardware instance value for the
> firmware
> +                                device.
> +
> +  @retval EFI_SUCCESS       The hardware instance for the current firmware
> +                            devide is returned in HardwareInstance.
> +  @retval EFI_UNSUPPORTED   The firmware device does not support a
> method to
> +                            report the hardware instance value.
> +  @retval EFI_DEVICE_ERROR  An error occurred attempting to retrieve the
> hardware
> +                            instance value.
> +
> +**/
> +EFI_STATUS
> +EFIAPI
> +FmpDeviceGetHardwareInstance (
> +  OUT UINT64  *HardwareInstance
> +  )
> +{
> +  return EFI_UNSUPPORTED;
> +}
> 
>  /**
>  Retrieves a copy of the current firmware image of the device.
> --
> 2.20.1.windows.1
> 
> 
> 


-=-=-=-=-=-=-=-=-=-=-=-
Groups.io Links: You receive all messages sent to this group.

View/Reply Online (#45345): https://edk2.groups.io/g/devel/message/45345
Mute This Topic: https://groups.io/mt/32836316/21656
Group Owner: devel+ow...@edk2.groups.io
Unsubscribe: https://edk2.groups.io/g/devel/unsub  [arch...@mail-archive.com]
-=-=-=-=-=-=-=-=-=-=-=-

Reply via email to