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/FmpDeviceLib/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/FmpDeviceLibSample/FmpDeviceLib.c b/Platform/Intel/Vlv2TbltDevicePkg/Feature/Capsule/Library/FmpDeviceLibSample/FmpDeviceLib.c index 80ce83a14b..db0f238ea5 100644 --- a/Platform/Intel/Vlv2TbltDevicePkg/Feature/Capsule/Library/FmpDeviceLibSample/FmpDeviceLib.c +++ b/Platform/Intel/Vlv2TbltDevicePkg/Feature/Capsule/Library/FmpDeviceLibSample/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 (#45328): https://edk2.groups.io/g/devel/message/45328 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] -=-=-=-=-=-=-=-=-=-=-=-