* [Patch v3 0/3] Add DisplayUpdateProgressLib for capsules @ 2018-05-25 6:15 Michael D Kinney 2018-05-25 6:15 ` [Patch v3 1/3] MdeModulePkg: Add DisplayUpdateProgressLib class Michael D Kinney ` (4 more replies) 0 siblings, 5 replies; 17+ messages in thread From: Michael D Kinney @ 2018-05-25 6:15 UTC (permalink / raw) To: edk2-devel Cc: Sean Brogan, Star Zeng, Eric Dong, Jiewen Yao, David Wei, Mang Guo, Kelly Steele https://bugzilla.tianocore.org/show_bug.cgi?id=801 Based on content from: https://github.com/Microsoft/MS_UEFI/blob/share/MsCapsuleSupport/MsCapsuleUpdatePkg/Include/Library/DisplayUpdateProgressLib.h https://github.com/Microsoft/MS_UEFI/tree/share/MsCapsuleSupport/MsCapsuleUpdatePkg/Library/DisplayUpdateProgressGraphicsLib https://github.com/Microsoft/MS_UEFI/tree/share/MsCapsuleSupport/MsCapsuleUpdatePkg/Library/DisplayUpdateProgressTextLib Updates for V3 ============== * Add Version field to EDKII_FIRMWARE_MANAGEMENT_PROGRESS_PROTOCOL * Break up patch series into 4 smaller patch series to handle dependencies between the edk2 repository and the edk2-platforms repository. + Patch series for edk2 repo that adds DisplayUpdateProgressLib class and instances. Defines the EDKII_FIRMWARE_MANAGEMENT_PROGRESS_PROTOCOL. Adds PerformFlashWriteWithProgress() API to the PlatformFlashAccessLib. + Patch series for platforms in edk2-platforms that use capsules to add the DisplayUpdateProgressLib mapping to the DSC files and add the PerformFlashWriteWithProgress() API implementation to the PlatformFlashAccessLib implementations. + Patch series for platforms in edk2 that use capsules to add the DisplayUpdateProgressLib mapping to the DSC files and add the PerformFlashWriteWithProgress() API implementation to the PlatformFlashAccessLib implementations. + Patch for edk2 that adds the use of the DisplayUpateProgressLib and the PerformFlashWriteWithProgress() API . Updates for V2 ============== * Change DisplayUpdateProgressGraphicsLib to DisplayUpdateProgressLibGraphics * Change DisplayUpdateProgressTextLib to DisplayUpdateProgressLibText * Clarify that color in Firmware Management Progress Protocol is the foreground color * Add missing parameters to PerformFlashWriteWithProgress() function header. * Update PerformFlashWriteWithProgress() function header describing the use of the start and end percentage values. * Update QuarkPlatformPkg PerformFlashWriteWithProgress() to call Progress() for the end precentage. * Update Vlv2Tbl2DevicePkg PerformFlashWriteWithProgress() to call Progress() for the end precentage. Add DisplayUpdateProgressLib class along implementations for both graphical (Graphics Output Protocol based) and text (Simple Text Output Protocol based) consoles. Also add the EDK II Firmware Management Progress Protocol that is an optional protocol that provides the progress bar color and a watchdog timeout value thaty can be used when a firmware image is updated in a firmware device. * Add progress support to DxeCapsuleLibFmp * Add progress support to SystemFirmwareUpdateDxe * Add progress support to PlatformFlashAccessLib class and instances. * Reduce Print() calls during a firmware update. Cc: Sean Brogan <sean.brogan@microsoft.com> Cc: Star Zeng <star.zeng@intel.com> Cc: Eric Dong <eric.dong@intel.com> Cc: Jiewen Yao <jiewen.yao@intel.com> Cc: David Wei <david.wei@intel.com> Cc: Mang Guo <mang.guo@intel.com> Cc: Kelly Steele <kelly.steele@intel.com> Signed-off-by: Michael D Kinney <michael.d.kinney@intel.com> Contributed-under: TianoCore Contribution Agreement 1.1 Michael D Kinney (3): MdeModulePkg: Add DisplayUpdateProgressLib class MdeModulePkg: Add DisplayUpdateProgressLib instances SignedCapsulePkg/PlatformFlashAccessLib: Add progress API .../Include/Library/DisplayUpdateProgressLib.h | 65 +++ .../Include/Protocol/FirmwareManagementProgress.h | 55 +++ .../DisplayUpdateProgressLibGraphics.c | 475 +++++++++++++++++++++ .../DisplayUpdateProgressLibGraphics.inf | 60 +++ .../DisplayUpdateProgressLibGraphics.uni | 18 + .../DisplayUpdateProgressLibText.c | 174 ++++++++ .../DisplayUpdateProgressLibText.inf | 53 +++ .../DisplayUpdateProgressLibText.uni | 18 + MdeModulePkg/MdeModulePkg.dec | 11 + MdeModulePkg/MdeModulePkg.dsc | 3 + .../Include/Library/PlatformFlashAccessLib.h | 49 ++- .../PlatformFlashAccessLibNull.c | 70 ++- 12 files changed, 1042 insertions(+), 9 deletions(-) create mode 100644 MdeModulePkg/Include/Library/DisplayUpdateProgressLib.h create mode 100644 MdeModulePkg/Include/Protocol/FirmwareManagementProgress.h create mode 100644 MdeModulePkg/Library/DisplayUpdateProgressLibGraphics/DisplayUpdateProgressLibGraphics.c create mode 100644 MdeModulePkg/Library/DisplayUpdateProgressLibGraphics/DisplayUpdateProgressLibGraphics.inf create mode 100644 MdeModulePkg/Library/DisplayUpdateProgressLibGraphics/DisplayUpdateProgressLibGraphics.uni create mode 100644 MdeModulePkg/Library/DisplayUpdateProgressLibText/DisplayUpdateProgressLibText.c create mode 100644 MdeModulePkg/Library/DisplayUpdateProgressLibText/DisplayUpdateProgressLibText.inf create mode 100644 MdeModulePkg/Library/DisplayUpdateProgressLibText/DisplayUpdateProgressLibText.uni -- 2.14.2.windows.3 ^ permalink raw reply [flat|nested] 17+ messages in thread
* [Patch v3 1/3] MdeModulePkg: Add DisplayUpdateProgressLib class 2018-05-25 6:15 [Patch v3 0/3] Add DisplayUpdateProgressLib for capsules Michael D Kinney @ 2018-05-25 6:15 ` Michael D Kinney 2018-05-25 11:06 ` Zeng, Star 2018-05-25 6:15 ` [Patch v3 2/3] MdeModulePkg: Add DisplayUpdateProgressLib instances Michael D Kinney ` (3 subsequent siblings) 4 siblings, 1 reply; 17+ messages in thread From: Michael D Kinney @ 2018-05-25 6:15 UTC (permalink / raw) To: edk2-devel; +Cc: Sean Brogan, Star Zeng, Eric Dong https://bugzilla.tianocore.org/show_bug.cgi?id=801 Based on content from the following branch/commits: https://github.com/Microsoft/MS_UEFI/tree/share/MsCapsuleSupport Add the DisplayUpdateProgressLib class that is used to inform the user of progress during updates of firmware images in firmware devices. A platform specific instance of this library can be used to customize how the user is informed of progress. Add the EDK II Firmware Management Progress Protocol. This is an optional protocol that must be installed onto the same handle as a Firmware Management Protocol. This new protocol provides the color of a progress bar that allows different firmware devices to use different colors during a firmware update. It also provides a watchdog timer value in seconds that is armed each time the Progress() service passed into Firmware Management Protocol SetImage() is called. Cc: Sean Brogan <sean.brogan@microsoft.com> Cc: Star Zeng <star.zeng@intel.com> Cc: Eric Dong <eric.dong@intel.com> Signed-off-by: Michael D Kinney <michael.d.kinney@intel.com> Contributed-under: TianoCore Contribution Agreement 1.1 --- .../Include/Library/DisplayUpdateProgressLib.h | 65 ++++++++++++++++++++++ .../Include/Protocol/FirmwareManagementProgress.h | 55 ++++++++++++++++++ MdeModulePkg/MdeModulePkg.dec | 11 ++++ 3 files changed, 131 insertions(+) create mode 100644 MdeModulePkg/Include/Library/DisplayUpdateProgressLib.h create mode 100644 MdeModulePkg/Include/Protocol/FirmwareManagementProgress.h diff --git a/MdeModulePkg/Include/Library/DisplayUpdateProgressLib.h b/MdeModulePkg/Include/Library/DisplayUpdateProgressLib.h new file mode 100644 index 0000000000..ad1f2cae38 --- /dev/null +++ b/MdeModulePkg/Include/Library/DisplayUpdateProgressLib.h @@ -0,0 +1,65 @@ +/** @file + Provides services to display completion progress when processing a + firmware update that updates the firmware image in a firmware device. + A platform may provide its own instance of this library class to custoimize + how a user is informed of completion progress. + + Copyright (c) 2016, Microsoft Corporation + Copyright (c) 2018, Intel Corporation. All rights reserved.<BR> + + All rights reserved. + Redistribution and use in source and binary forms, with or without + modification, are permitted provided that the following conditions are met: + 1. Redistributions of source code must retain the above copyright 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. + +**/ + +#ifndef __DISPLAY_PROGRESS_LIB__ +#define __DISPLAY_PROGRESS_LIB__ + +#include <Protocol/GraphicsOutput.h> + +/** + Indicates the current completion progress of a firmware update. + + @param[in] Completion A value between 0 and 100 indicating the current + completion progress of a firmware update. This + value must the the same or higher than previous + calls to this service. The first call of 0 or a + value of 0 after reaching a value of 100 resets + the progress indicator to 0. + @param[in] Color Color of the progress indicator. Only used when + Completion is 0 to set the color of the progress + indicator. If Color is NULL, then the default color + is used. + + @retval EFI_SUCCESS Progress displayed successfully. + @retval EFI_INVALID_PARAMETER Completion is not in range 0..100. + @retval EFI_INVALID_PARAMETER Completion is less than Completion value from + a previous call to this service. + @retval EFI_NOT_READY The device used to indicate progress is not + available. +**/ +EFI_STATUS +EFIAPI +DisplayUpdateProgress ( + IN UINTN Completion, + IN EFI_GRAPHICS_OUTPUT_BLT_PIXEL_UNION *Color OPTIONAL + ); + +#endif diff --git a/MdeModulePkg/Include/Protocol/FirmwareManagementProgress.h b/MdeModulePkg/Include/Protocol/FirmwareManagementProgress.h new file mode 100644 index 0000000000..21f91909ae --- /dev/null +++ b/MdeModulePkg/Include/Protocol/FirmwareManagementProgress.h @@ -0,0 +1,55 @@ +/** @file + EDK II Firmware Management Progress Protocol. + + 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 that 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. + +**/ + +#ifndef __EDKII_FIRMWARE_MANAGEMENT_PROGRESS_PROTOCOL_H__ +#define __EDKII_FIRMWARE_MANAGEMENT_PROGRESS_PROTOCOL_H__ + +#include <Protocol/GraphicsOutput.h> + +/// +/// EDK II Firmware Management Progress Protocol GUID value +/// +#define EDKII_FIRMWARE_MANAGEMENT_PROGRESS_PROTOCOL_GUID \ + { \ + 0x1849bda2, 0x6952, 0x4e86, { 0xa1, 0xdb, 0x55, 0x9a, 0x3c, 0x47, 0x9d, 0xf1 } \ + } + +/// +/// EDK II Firmware Management Progress Protocol structure +/// +typedef struct { + /// + /// The version of this structure. Initial version value is 0x00000001. + /// + UINT32 Version; + /// + /// The foreground color of a progress bar that is used by the Progress() + /// function that is passed into the Firmware Management Protocol SetImage() + /// service is called. + /// + EFI_GRAPHICS_OUTPUT_BLT_PIXEL_UNION ProgressBarForegroundColor; + /// + /// The time in seconds to arm the watchdog timer each time the Progress() + /// function passed into the Firmware Management Protocol SetImage() service + /// is called. + /// + UINTN WatchdogSeconds; +} EDKII_FIRMWARE_MANAGEMENT_PROGRESS_PROTOCOL; + +/// +/// EDK II Firmware Management Progress Protocol GUID variable. +/// +extern EFI_GUID gEdkiiFirmwareManagementProgressProtocolGuid; + +#endif diff --git a/MdeModulePkg/MdeModulePkg.dec b/MdeModulePkg/MdeModulePkg.dec index cc397185f7..d4833ea178 100644 --- a/MdeModulePkg/MdeModulePkg.dec +++ b/MdeModulePkg/MdeModulePkg.dec @@ -175,6 +175,13 @@ [LibraryClasses] # BmpSupportLib|Include/Library/BmpSupportLib.h + ## @libraryclass Provides services to display completion progress when + # processing a firmware update that updates the firmware image in a firmware + # device. A platform may provide its own instance of this library class to + # custoimize how a user is informed of completion progress. + # + DisplayUpdateProgressLib|Include/Library/DisplayUpdateProgressLib.h + [Guids] ## MdeModule package token space guid # Include/Guid/MdeModulePkgTokenSpace.h @@ -595,6 +602,10 @@ [Protocols] gEdkiiPlatformSpecificResetFilterProtocolGuid = { 0x695d7835, 0x8d47, 0x4c11, { 0xab, 0x22, 0xfa, 0x8a, 0xcc, 0xe7, 0xae, 0x7a } } ## Include/Protocol/PlatformSpecificResetHandler.h gEdkiiPlatformSpecificResetHandlerProtocolGuid = { 0x2df6ba0b, 0x7092, 0x440d, { 0xbd, 0x4, 0xfb, 0x9, 0x1e, 0xc3, 0xf3, 0xc1 } } + + ## Include/Protocol/FirmwareManagementProgress.h + gEdkiiFirmwareManagementProgressProtocolGuid = { 0x1849bda2, 0x6952, 0x4e86, { 0xa1, 0xdb, 0x55, 0x9a, 0x3c, 0x47, 0x9d, 0xf1 } } + # # [Error.gEfiMdeModulePkgTokenSpaceGuid] # 0x80000001 | Invalid value provided. -- 2.14.2.windows.3 ^ permalink raw reply related [flat|nested] 17+ messages in thread
* Re: [Patch v3 1/3] MdeModulePkg: Add DisplayUpdateProgressLib class 2018-05-25 6:15 ` [Patch v3 1/3] MdeModulePkg: Add DisplayUpdateProgressLib class Michael D Kinney @ 2018-05-25 11:06 ` Zeng, Star 0 siblings, 0 replies; 17+ messages in thread From: Zeng, Star @ 2018-05-25 11:06 UTC (permalink / raw) To: Kinney, Michael D, edk2-devel@lists.01.org Cc: Sean Brogan, Dong, Eric, Zeng, Star Reviewed-by: Star Zeng <star.zeng@intel.com> after fixing typo ' custoimize ' to ' customize '. Thanks, Star -----Original Message----- From: Kinney, Michael D Sent: Friday, May 25, 2018 2:16 PM To: edk2-devel@lists.01.org Cc: Sean Brogan <sean.brogan@microsoft.com>; Zeng, Star <star.zeng@intel.com>; Dong, Eric <eric.dong@intel.com> Subject: [Patch v3 1/3] MdeModulePkg: Add DisplayUpdateProgressLib class https://bugzilla.tianocore.org/show_bug.cgi?id=801 Based on content from the following branch/commits: https://github.com/Microsoft/MS_UEFI/tree/share/MsCapsuleSupport Add the DisplayUpdateProgressLib class that is used to inform the user of progress during updates of firmware images in firmware devices. A platform specific instance of this library can be used to customize how the user is informed of progress. Add the EDK II Firmware Management Progress Protocol. This is an optional protocol that must be installed onto the same handle as a Firmware Management Protocol. This new protocol provides the color of a progress bar that allows different firmware devices to use different colors during a firmware update. It also provides a watchdog timer value in seconds that is armed each time the Progress() service passed into Firmware Management Protocol SetImage() is called. Cc: Sean Brogan <sean.brogan@microsoft.com> Cc: Star Zeng <star.zeng@intel.com> Cc: Eric Dong <eric.dong@intel.com> Signed-off-by: Michael D Kinney <michael.d.kinney@intel.com> Contributed-under: TianoCore Contribution Agreement 1.1 --- .../Include/Library/DisplayUpdateProgressLib.h | 65 ++++++++++++++++++++++ .../Include/Protocol/FirmwareManagementProgress.h | 55 ++++++++++++++++++ MdeModulePkg/MdeModulePkg.dec | 11 ++++ 3 files changed, 131 insertions(+) create mode 100644 MdeModulePkg/Include/Library/DisplayUpdateProgressLib.h create mode 100644 MdeModulePkg/Include/Protocol/FirmwareManagementProgress.h diff --git a/MdeModulePkg/Include/Library/DisplayUpdateProgressLib.h b/MdeModulePkg/Include/Library/DisplayUpdateProgressLib.h new file mode 100644 index 0000000000..ad1f2cae38 --- /dev/null +++ b/MdeModulePkg/Include/Library/DisplayUpdateProgressLib.h @@ -0,0 +1,65 @@ +/** @file + Provides services to display completion progress when processing a + firmware update that updates the firmware image in a firmware device. + A platform may provide its own instance of this library class to +custoimize + how a user is informed of completion progress. + + Copyright (c) 2016, Microsoft Corporation Copyright (c) 2018, Intel + Corporation. All rights reserved.<BR> + + All rights reserved. + Redistribution and use in source and binary forms, with or without + modification, are permitted provided that the following conditions are met: + 1. Redistributions of source code must retain the above copyright + 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. + +**/ + +#ifndef __DISPLAY_PROGRESS_LIB__ +#define __DISPLAY_PROGRESS_LIB__ + +#include <Protocol/GraphicsOutput.h> + +/** + Indicates the current completion progress of a firmware update. + + @param[in] Completion A value between 0 and 100 indicating the current + completion progress of a firmware update. This + value must the the same or higher than previous + calls to this service. The first call of 0 or a + value of 0 after reaching a value of 100 resets + the progress indicator to 0. + @param[in] Color Color of the progress indicator. Only used when + Completion is 0 to set the color of the progress + indicator. If Color is NULL, then the default color + is used. + + @retval EFI_SUCCESS Progress displayed successfully. + @retval EFI_INVALID_PARAMETER Completion is not in range 0..100. + @retval EFI_INVALID_PARAMETER Completion is less than Completion value from + a previous call to this service. + @retval EFI_NOT_READY The device used to indicate progress is not + available. +**/ +EFI_STATUS +EFIAPI +DisplayUpdateProgress ( + IN UINTN Completion, + IN EFI_GRAPHICS_OUTPUT_BLT_PIXEL_UNION *Color OPTIONAL + ); + +#endif diff --git a/MdeModulePkg/Include/Protocol/FirmwareManagementProgress.h b/MdeModulePkg/Include/Protocol/FirmwareManagementProgress.h new file mode 100644 index 0000000000..21f91909ae --- /dev/null +++ b/MdeModulePkg/Include/Protocol/FirmwareManagementProgress.h @@ -0,0 +1,55 @@ +/** @file + EDK II Firmware Management Progress Protocol. + + 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 that 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. + +**/ + +#ifndef __EDKII_FIRMWARE_MANAGEMENT_PROGRESS_PROTOCOL_H__ +#define __EDKII_FIRMWARE_MANAGEMENT_PROGRESS_PROTOCOL_H__ + +#include <Protocol/GraphicsOutput.h> + +/// +/// EDK II Firmware Management Progress Protocol GUID value /// #define +EDKII_FIRMWARE_MANAGEMENT_PROGRESS_PROTOCOL_GUID \ + { \ + 0x1849bda2, 0x6952, 0x4e86, { 0xa1, 0xdb, 0x55, 0x9a, 0x3c, 0x47, +0x9d, 0xf1 } \ + } + +/// +/// EDK II Firmware Management Progress Protocol structure /// typedef +struct { + /// + /// The version of this structure. Initial version value is 0x00000001. + /// + UINT32 Version; + /// + /// The foreground color of a progress bar that is used by the +Progress() + /// function that is passed into the Firmware Management Protocol +SetImage() + /// service is called. + /// + EFI_GRAPHICS_OUTPUT_BLT_PIXEL_UNION ProgressBarForegroundColor; + /// + /// The time in seconds to arm the watchdog timer each time the +Progress() + /// function passed into the Firmware Management Protocol SetImage() +service + /// is called. + /// + UINTN WatchdogSeconds; +} EDKII_FIRMWARE_MANAGEMENT_PROGRESS_PROTOCOL; + +/// +/// EDK II Firmware Management Progress Protocol GUID variable. +/// +extern EFI_GUID gEdkiiFirmwareManagementProgressProtocolGuid; + +#endif diff --git a/MdeModulePkg/MdeModulePkg.dec b/MdeModulePkg/MdeModulePkg.dec index cc397185f7..d4833ea178 100644 --- a/MdeModulePkg/MdeModulePkg.dec +++ b/MdeModulePkg/MdeModulePkg.dec @@ -175,6 +175,13 @@ [LibraryClasses] # BmpSupportLib|Include/Library/BmpSupportLib.h + ## @libraryclass Provides services to display completion progress + when # processing a firmware update that updates the firmware image + in a firmware # device. A platform may provide its own instance of + this library class to # custoimize how a user is informed of completion progress. + # + DisplayUpdateProgressLib|Include/Library/DisplayUpdateProgressLib.h + [Guids] ## MdeModule package token space guid # Include/Guid/MdeModulePkgTokenSpace.h @@ -595,6 +602,10 @@ [Protocols] gEdkiiPlatformSpecificResetFilterProtocolGuid = { 0x695d7835, 0x8d47, 0x4c11, { 0xab, 0x22, 0xfa, 0x8a, 0xcc, 0xe7, 0xae, 0x7a } } ## Include/Protocol/PlatformSpecificResetHandler.h gEdkiiPlatformSpecificResetHandlerProtocolGuid = { 0x2df6ba0b, 0x7092, 0x440d, { 0xbd, 0x4, 0xfb, 0x9, 0x1e, 0xc3, 0xf3, 0xc1 } } + + ## Include/Protocol/FirmwareManagementProgress.h + gEdkiiFirmwareManagementProgressProtocolGuid = { 0x1849bda2, 0x6952, + 0x4e86, { 0xa1, 0xdb, 0x55, 0x9a, 0x3c, 0x47, 0x9d, 0xf1 } } + # # [Error.gEfiMdeModulePkgTokenSpaceGuid] # 0x80000001 | Invalid value provided. -- 2.14.2.windows.3 ^ permalink raw reply related [flat|nested] 17+ messages in thread
* [Patch v3 2/3] MdeModulePkg: Add DisplayUpdateProgressLib instances 2018-05-25 6:15 [Patch v3 0/3] Add DisplayUpdateProgressLib for capsules Michael D Kinney 2018-05-25 6:15 ` [Patch v3 1/3] MdeModulePkg: Add DisplayUpdateProgressLib class Michael D Kinney @ 2018-05-25 6:15 ` Michael D Kinney 2018-05-25 11:10 ` Zeng, Star 2018-05-31 11:09 ` Ard Biesheuvel 2018-05-25 6:15 ` [Patch v3 3/3] SignedCapsulePkg/PlatformFlashAccessLib: Add progress API Michael D Kinney ` (2 subsequent siblings) 4 siblings, 2 replies; 17+ messages in thread From: Michael D Kinney @ 2018-05-25 6:15 UTC (permalink / raw) To: edk2-devel; +Cc: Sean Brogan, Star Zeng, Eric Dong https://bugzilla.tianocore.org/show_bug.cgi?id=801 Based on content from the following branch/commits: https://github.com/Microsoft/MS_UEFI/tree/share/MsCapsuleSupport Add DisplayUpdateProgressLib instances for text consoles and graphical consoles. Cc: Sean Brogan <sean.brogan@microsoft.com> Cc: Star Zeng <star.zeng@intel.com> Cc: Eric Dong <eric.dong@intel.com> Signed-off-by: Michael D Kinney <michael.d.kinney@intel.com> Contributed-under: TianoCore Contribution Agreement 1.1 --- .../DisplayUpdateProgressLibGraphics.c | 475 +++++++++++++++++++++ .../DisplayUpdateProgressLibGraphics.inf | 60 +++ .../DisplayUpdateProgressLibGraphics.uni | 18 + .../DisplayUpdateProgressLibText.c | 174 ++++++++ .../DisplayUpdateProgressLibText.inf | 53 +++ .../DisplayUpdateProgressLibText.uni | 18 + MdeModulePkg/MdeModulePkg.dsc | 3 + 7 files changed, 801 insertions(+) create mode 100644 MdeModulePkg/Library/DisplayUpdateProgressLibGraphics/DisplayUpdateProgressLibGraphics.c create mode 100644 MdeModulePkg/Library/DisplayUpdateProgressLibGraphics/DisplayUpdateProgressLibGraphics.inf create mode 100644 MdeModulePkg/Library/DisplayUpdateProgressLibGraphics/DisplayUpdateProgressLibGraphics.uni create mode 100644 MdeModulePkg/Library/DisplayUpdateProgressLibText/DisplayUpdateProgressLibText.c create mode 100644 MdeModulePkg/Library/DisplayUpdateProgressLibText/DisplayUpdateProgressLibText.inf create mode 100644 MdeModulePkg/Library/DisplayUpdateProgressLibText/DisplayUpdateProgressLibText.uni diff --git a/MdeModulePkg/Library/DisplayUpdateProgressLibGraphics/DisplayUpdateProgressLibGraphics.c b/MdeModulePkg/Library/DisplayUpdateProgressLibGraphics/DisplayUpdateProgressLibGraphics.c new file mode 100644 index 0000000000..007522cea0 --- /dev/null +++ b/MdeModulePkg/Library/DisplayUpdateProgressLibGraphics/DisplayUpdateProgressLibGraphics.c @@ -0,0 +1,475 @@ +/** @file + Provides services to display completion progress of a firmware update on a + graphical console that supports the Graphics Output Protocol. + + 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/BaseMemoryLib.h> +#include <Library/MemoryAllocationLib.h> +#include <Library/UefiBootServicesTableLib.h> +#include <Library/DebugLib.h> +#include <Library/BaseLib.h> +#include <Library/UefiLib.h> + +#include <Protocol/GraphicsOutput.h> +#include <Protocol/BootLogo2.h> + +// +// Values in percent of of logo height. +// +#define LOGO_BOTTOM_PADDING 20 +#define PROGRESS_BLOCK_HEIGHT 10 + +// +// Graphics Output Protocol instance to display progress bar +// +EFI_GRAPHICS_OUTPUT_PROTOCOL *mGop = NULL; + +// +// Set to 100 percent so it is reset on first call. +// +UINTN mPreviousProgress = 100; + +// +// Display coordinates for the progress bar. +// +UINTN mStartX = 0; +UINTN mStartY = 0; + +// +// Width and height of the progress bar. +// +UINTN mBlockWidth = 0; +UINTN mBlockHeight = 0; + +// +// GOP bitmap of the progress bar. Initialized on every new progress of 100% +// +EFI_GRAPHICS_OUTPUT_BLT_PIXEL *mBlockBitmap; + +// +// GOP bitmap of the progress bar backround. Initialized once. +// +EFI_GRAPHICS_OUTPUT_BLT_PIXEL *mProgressBarBackground; + +// +// Default mask used to detect the left, right , top, and bottom of logo. Only +// green and blue pixels are used for logo detection. +// +const EFI_GRAPHICS_OUTPUT_BLT_PIXEL_UNION mLogoDetectionColorMask = { + { + 0xFF, // Blue + 0xFF, // Green + 0x00, // Red + 0x00 // Reserved + } +}; + +// +// Background color of progress bar. Grey. +// +const EFI_GRAPHICS_OUTPUT_BLT_PIXEL_UNION mProgressBarBackgroundColor = { + { + 0x80, // Blue + 0x80, // Green + 0x80, // Red + 0x00 // Reserved + } +}; + +// +// Default color of progress completion. White. +// +const EFI_GRAPHICS_OUTPUT_BLT_PIXEL_UNION mProgressBarDefaultColor = { + { + 0xFF, // Blue + 0xFF, // Green + 0xFF, // Red + 0x00 // Reserved + } +}; + +// +// Set to TRUE if a valid Graphics Output Protocol is found and the progress +// bar fits under the boot logo using the current graphics mode. +// +BOOLEAN mGraphicsGood = FALSE; + +/* + Internal function used to find the bounds of the white logo (on black or + red background). + + These bounds are then computed to find the block size, 0%, 100%, etc. + +*/ +VOID +FindDim ( + VOID + ) +{ + EFI_STATUS Status; + INTN LogoX; + INTN LogoStartX; + INTN LogoEndX; + INTN LogoY; + INTN LogoStartY; + INTN LogoEndY; + UINTN OffsetX; // Logo screen coordinate + UINTN OffsetY; // Logo screen coordinate + UINTN Width; // Width of logo in pixels + UINTN Height; // Height of logo in pixels + EFI_GRAPHICS_OUTPUT_BLT_PIXEL *Logo; + EDKII_BOOT_LOGO2_PROTOCOL *BootLogo; + EFI_GRAPHICS_OUTPUT_BLT_PIXEL_UNION *Pixel; + + Logo = NULL; + BootLogo = NULL; + + // + // Return if a Graphics Output Protocol ha snot been found. + // + if (mGop == NULL) { + DEBUG ((DEBUG_ERROR, "No GOP found. No progress bar support. \n")); + return; + } + + // + // Get boot logo protocol so we know where on the screen to grab + // + Status = gBS->LocateProtocol ( + &gEdkiiBootLogo2ProtocolGuid, + NULL, + (VOID **)&BootLogo + ); + if ((BootLogo == NULL) || (EFI_ERROR (Status))) { + DEBUG ((DEBUG_ERROR, "Failed to locate gEdkiiBootLogo2ProtocolGuid. No Progress bar support. \n", Status)); + return; + } + + // + // Get logo location and size + // + Status = BootLogo->GetBootLogo ( + BootLogo, + &Logo, + &OffsetX, + &OffsetY, + &Width, + &Height + ); + if (EFI_ERROR (Status)) { + DEBUG ((DEBUG_ERROR, "Failed to Get Boot Logo Status = %r. No Progress bar support. \n", Status)); + return; + } + + // + // Within logo buffer find where the actual logo starts/ends + // + LogoEndX = 0; + LogoEndY = 0; + + // + // Find left side of logo in logo coordinates + // + for (LogoX = 0, LogoStartX = Width; LogoX < LogoStartX; LogoX++) { + Pixel = (EFI_GRAPHICS_OUTPUT_BLT_PIXEL_UNION *)(Logo + LogoX); + for (LogoY = 0; LogoY < (INTN)Height; LogoY++) { + if ((Pixel->Raw & mLogoDetectionColorMask.Raw) != 0x0) { + LogoStartX = LogoX; + // + // For loop searches from right side back to this column. + // + LogoEndX = LogoX; + DEBUG ((DEBUG_INFO, "StartX found at (%d, %d) Color is: 0x%X \n", LogoX, LogoY, Pixel->Raw)); + break; + } + Pixel = Pixel + Width; + } + } + + // + // Find right side of logo + // + for (LogoX = Width - 1; LogoX >= LogoEndX; LogoX--) { + Pixel = (EFI_GRAPHICS_OUTPUT_BLT_PIXEL_UNION *)(Logo + LogoX); + for (LogoY = 0; LogoY < (INTN)Height; LogoY++) { + if ((Pixel->Raw & mLogoDetectionColorMask.Raw) != 0x0) { + LogoEndX = LogoX; + DEBUG ((DEBUG_INFO, "EndX found at (%d, %d) Color is: 0x%X \n", LogoX, LogoY, Pixel->Raw)); + break; + } + Pixel = Pixel + Width; + } + } + + // + // Compute mBlockWidth + // + mBlockWidth = ((LogoEndX - LogoStartX) + 99) / 100; + + // + // Adjust mStartX based on block width so it is centered under logo + // + mStartX = LogoStartX + OffsetX - (((mBlockWidth * 100) - (LogoEndX - LogoStartX)) / 2); + DEBUG ((DEBUG_INFO, "mBlockWidth set to 0x%X\n", mBlockWidth)); + DEBUG ((DEBUG_INFO, "mStartX set to 0x%X\n", mStartX)); + + // + // Find the top of the logo + // + for (LogoY = 0, LogoStartY = Height; LogoY < LogoStartY; LogoY++) { + Pixel = (EFI_GRAPHICS_OUTPUT_BLT_PIXEL_UNION *)(Logo + (Width * LogoY)); + for (LogoX = 0; LogoX < (INTN)Width; LogoX++) { + //not black or red + if ((Pixel->Raw & mLogoDetectionColorMask.Raw) != 0x0) { + LogoStartY = LogoY; + LogoEndY = LogoY; //for next loop will search from bottom side back to this row. + DEBUG ((DEBUG_INFO, "StartY found at (%d, %d) Color is: 0x%X \n", LogoX, LogoY, Pixel->Raw)); + break; + } + Pixel++; + } + } + + // + // Find the bottom of the logo + // + for (LogoY = Height - 1; LogoY >= LogoEndY; LogoY--) { + Pixel = (EFI_GRAPHICS_OUTPUT_BLT_PIXEL_UNION *)(Logo + (Width * LogoY)); + for (LogoX = 0; LogoX < (INTN)Width; LogoX++) { + if ((Pixel->Raw & mLogoDetectionColorMask.Raw) != 0x0) { + LogoEndY = LogoY; + DEBUG ((DEBUG_INFO, "EndY found at (%d, %d) Color is: 0x%X \n", LogoX, LogoY, Pixel->Raw)); + break; + } + Pixel++; + } + } + + // + // Compute bottom padding (distance between logo bottom and progress bar) + // + mStartY = (((LogoEndY - LogoStartY) * LOGO_BOTTOM_PADDING) / 100) + LogoEndY + OffsetY; + + // + // Compute progress bar height + // + mBlockHeight = (((LogoEndY - LogoStartY) * PROGRESS_BLOCK_HEIGHT) / 100); + + DEBUG ((DEBUG_INFO, "mBlockHeight set to 0x%X\n", mBlockHeight)); + + // + // Create progress bar background (one time init). + // + mProgressBarBackground = AllocatePool (mBlockWidth * 100 * mBlockHeight * sizeof (EFI_GRAPHICS_OUTPUT_BLT_PIXEL)); + if (mProgressBarBackground == NULL) { + DEBUG ((DEBUG_ERROR, "Failed to allocate progress bar background\n")); + return; + } + + // + // Fill the progress bar with the background color + // + SetMem32 ( + mProgressBarBackground, + (mBlockWidth * 100 * mBlockHeight * sizeof (EFI_GRAPHICS_OUTPUT_BLT_PIXEL)), + mProgressBarBackgroundColor.Raw + ); + + // + // Allocate mBlockBitmap + // + mBlockBitmap = AllocatePool (mBlockWidth * mBlockHeight * sizeof (EFI_GRAPHICS_OUTPUT_BLT_PIXEL)); + if (mBlockBitmap == NULL) { + FreePool (mProgressBarBackground); + DEBUG ((DEBUG_ERROR, "Failed to allocate block\n")); + return; + } + + // + // Check screen width and height and make sure it fits. + // + if ((mBlockHeight > Height) || (mBlockWidth > Width) || (mBlockHeight < 1) || (mBlockWidth < 1)) { + DEBUG ((DEBUG_ERROR, "DisplayUpdateProgressLib - Progress - Failed to get valid width and height.\n")); + DEBUG ((DEBUG_ERROR, "DisplayUpdateProgressLib - Progress - mBlockHeight: 0x%X mBlockWidth: 0x%X.\n", mBlockHeight, mBlockWidth)); + FreePool (mProgressBarBackground); + FreePool (mBlockBitmap); + return; + } + + mGraphicsGood = TRUE; +} + +/** + Function indicates the current completion progress of a firmware update. + Platform may override with its own specific function. + + @param[in] Completion A value between 0 and 100 indicating the current + completion progress of a firmware update. This + value must the the same or higher than previous + calls to this service. The first call of 0 or a + value of 0 after reaching a value of 100 resets + the progress indicator to 0. + @param[in] Color Color of the progress indicator. Only used when + Completion is 0 to set the color of the progress + indicator. If Color is NULL, then the default color + is used. + + @retval EFI_SUCCESS Progress displayed successfully. + @retval EFI_INVALID_PARAMETER Completion is not in range 0..100. + @retval EFI_INVALID_PARAMETER Completion is less than Completion value from + a previous call to this service. + @retval EFI_NOT_READY The device used to indicate progress is not + available. +**/ +EFI_STATUS +EFIAPI +DisplayUpdateProgress ( + IN UINTN Completion, + IN EFI_GRAPHICS_OUTPUT_BLT_PIXEL_UNION *Color OPTIONAL + ) +{ + EFI_STATUS Status; + UINTN PreX; + UINTN Index; + + // + // Check range + // + if (Completion > 100) { + return EFI_INVALID_PARAMETER; + } + + // + // Check to see if this Completion percentage has already been displayed + // + if (Completion == mPreviousProgress) { + return EFI_SUCCESS; + } + + // + // Find Graphics Output Protocol if not already set. 1 time. + // + if (mGop == NULL) { + Status = gBS->HandleProtocol ( + gST->ConsoleOutHandle, + &gEfiGraphicsOutputProtocolGuid, + (VOID**)&mGop + ); + if (EFI_ERROR (Status)) { + Status = gBS->LocateProtocol (&gEfiGraphicsOutputProtocolGuid, NULL, (VOID **)&mGop); + if (EFI_ERROR (Status)) { + mGop = NULL; + DEBUG ((DEBUG_ERROR, "Show Progress Function could not locate GOP. Status = %r\n", Status)); + return EFI_NOT_READY; + } + } + + // + // Run once + // + FindDim (); + } + + // + // Make sure a valid start, end, and size info are available (find the Logo) + // + if (!mGraphicsGood) { + DEBUG ((DEBUG_INFO, "Graphics Not Good. Not doing any onscreen visual display\n")); + return EFI_NOT_READY; + } + + // + // Do special init on first call of each progress session + // + if (mPreviousProgress == 100) { + // + // Draw progress bar background + // + mGop->Blt ( + mGop, + mProgressBarBackground, + EfiBltBufferToVideo, + 0, + 0, + mStartX, + mStartY, + (mBlockWidth * 100), + mBlockHeight, + 0 + ); + + DEBUG ((DEBUG_VERBOSE, "Color is 0x%X\n", + (Color == NULL) ? mProgressBarDefaultColor.Raw : Color->Raw + )); + + // + // Update block bitmap with correct color + // + SetMem32 ( + mBlockBitmap, + (mBlockWidth * mBlockHeight * sizeof (EFI_GRAPHICS_OUTPUT_BLT_PIXEL)), + (Color == NULL) ? mProgressBarDefaultColor.Raw : Color->Raw + ); + + // + // Clear previous + // + mPreviousProgress = 0; + } + + // + // Can not update progress bar if Completion is less than previous + // + if (Completion < mPreviousProgress) { + DEBUG ((DEBUG_WARN, "WARNING: Completion (%d) should not be lesss than Previous (%d)!!!\n", Completion, mPreviousProgress)); + return EFI_INVALID_PARAMETER; + } + + PreX = ((mPreviousProgress * mBlockWidth) + mStartX); + for (Index = 0; Index < (Completion - mPreviousProgress); Index++) { + // + // Show progress by coloring new area + // + mGop->Blt ( + mGop, + mBlockBitmap, + EfiBltBufferToVideo, + 0, + 0, + PreX, + mStartY, + mBlockWidth, + mBlockHeight, + 0 + ); + PreX += mBlockWidth; + } + + mPreviousProgress = Completion; + + return EFI_SUCCESS; +} diff --git a/MdeModulePkg/Library/DisplayUpdateProgressLibGraphics/DisplayUpdateProgressLibGraphics.inf b/MdeModulePkg/Library/DisplayUpdateProgressLibGraphics/DisplayUpdateProgressLibGraphics.inf new file mode 100644 index 0000000000..ada6076770 --- /dev/null +++ b/MdeModulePkg/Library/DisplayUpdateProgressLibGraphics/DisplayUpdateProgressLibGraphics.inf @@ -0,0 +1,60 @@ +## @file +# Provides services to display completion progress of a firmware update on a +# graphical console that supports the Graphics Output Protocol. +# +# 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 = DisplayUpdateProgressLibGraphics + MODULE_UNI_FILE = DisplayUpdateProgressLibGraphics.uni + FILE_GUID = 319E9E37-B2D6-4699-90F3-B8B72B6D4CBD + MODULE_TYPE = DXE_DRIVER + VERSION_STRING = 1.0 + LIBRARY_CLASS = DisplayUpdateProgressLib|DXE_DRIVER UEFI_DRIVER UEFI_APPLICATION + +# +# The following information is for reference only and not required by the build tools. +# +# VALID_ARCHITECTURES = IA32 X64 IPF EBC +# + +[Sources] + DisplayUpdateProgressLibGraphics.c + +[Packages] + MdePkg/MdePkg.dec + MdeModulePkg/MdeModulePkg.dec + +[LibraryClasses] + BaseMemoryLib + DebugLib + MemoryAllocationLib + UefiBootServicesTableLib + BaseLib + UefiLib + +[Protocols] + gEfiGraphicsOutputProtocolGuid # CONSUMES + gEdkiiBootLogo2ProtocolGuid # CONSUMES diff --git a/MdeModulePkg/Library/DisplayUpdateProgressLibGraphics/DisplayUpdateProgressLibGraphics.uni b/MdeModulePkg/Library/DisplayUpdateProgressLibGraphics/DisplayUpdateProgressLibGraphics.uni new file mode 100644 index 0000000000..d7da641338 --- /dev/null +++ b/MdeModulePkg/Library/DisplayUpdateProgressLibGraphics/DisplayUpdateProgressLibGraphics.uni @@ -0,0 +1,18 @@ +// /** @file +// Provides services to display completion progress of a firmware update on a +// graphical console that supports the Graphics Output Protocol. +// +// 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 display completion progress of a firmware update on a graphical console that supports the Graphics Output Protocol." + +#string STR_MODULE_DESCRIPTION #language en-US "Provides services to display completion progress of a firmware update on a graphical console that supports the Graphics Output Protocol." diff --git a/MdeModulePkg/Library/DisplayUpdateProgressLibText/DisplayUpdateProgressLibText.c b/MdeModulePkg/Library/DisplayUpdateProgressLibText/DisplayUpdateProgressLibText.c new file mode 100644 index 0000000000..7aca8b89d0 --- /dev/null +++ b/MdeModulePkg/Library/DisplayUpdateProgressLibText/DisplayUpdateProgressLibText.c @@ -0,0 +1,174 @@ +/** @file + Provides services to display completion progress of a firmware update on a + text console. + + 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/DebugLib.h> +#include <Library/UefiBootServicesTableLib.h> +#include <Library/UefiLib.h> + +// +// Control Style. Set to 100 so it is reset on first call. +// +UINTN mPreviousProgress = 100; + +// +// Text foreground color of progress bar +// +UINTN mProgressBarForegroundColor; + +/** + Function indicates the current completion progress of a firmware update. + Platform may override with its own specific function. + + @param[in] Completion A value between 0 and 100 indicating the current + completion progress of a firmware update. This + value must the the same or higher than previous + calls to this service. The first call of 0 or a + value of 0 after reaching a value of 100 resets + the progress indicator to 0. + @param[in] Color Color of the progress indicator. Only used when + Completion is 0 to set the color of the progress + indicator. If Color is NULL, then the default color + is used. + + @retval EFI_SUCCESS Progress displayed successfully. + @retval EFI_INVALID_PARAMETER Completion is not in range 0..100. + @retval EFI_INVALID_PARAMETER Completion is less than Completion value from + a previous call to this service. + @retval EFI_NOT_READY The device used to indicate progress is not + available. +**/ +EFI_STATUS +EFIAPI +DisplayUpdateProgress ( + IN UINTN Completion, + IN EFI_GRAPHICS_OUTPUT_BLT_PIXEL_UNION *Color OPTIONAL + ) +{ + UINTN Index; + UINTN CurrentAttribute; + + // + // Check range + // + if (Completion > 100) { + return EFI_INVALID_PARAMETER; + } + + // + // Check to see if this Completion percentage has already been displayed + // + if (Completion == mPreviousProgress) { + return EFI_SUCCESS; + } + + // + // Do special init on first call of each progress session + // + if (mPreviousProgress == 100) { + Print (L"\n"); + + // + // Convert pixel color to text foreground color + // + if (Color == NULL) { + mProgressBarForegroundColor = EFI_WHITE; + } else { + mProgressBarForegroundColor = EFI_BLACK; + if (Color->Pixel.Blue >= 0x40) { + mProgressBarForegroundColor |= EFI_BLUE; + } + if (Color->Pixel.Green >= 0x40) { + mProgressBarForegroundColor |= EFI_GREEN; + } + if (Color->Pixel.Red >= 0x40) { + mProgressBarForegroundColor |= EFI_RED; + } + if (Color->Pixel.Blue >= 0xC0 || Color->Pixel.Green >= 0xC0 || Color->Pixel.Red >= 0xC0) { + mProgressBarForegroundColor |= EFI_BRIGHT; + } + if (mProgressBarForegroundColor == EFI_BLACK) { + mProgressBarForegroundColor = EFI_WHITE; + } + } + + // + // Clear previous + // + mPreviousProgress = 0; + } + + // + // Can not update progress bar if Completion is less than previous + // + if (Completion < mPreviousProgress) { + DEBUG ((DEBUG_WARN, "WARNING: Completion (%d) should not be lesss than Previous (%d)!!!\n", Completion, mPreviousProgress)); + return EFI_INVALID_PARAMETER; + } + + // + // Save current text color + // + CurrentAttribute = (UINTN)gST->ConOut->Mode->Attribute; + + // + // Print progress percentage + // + Print (L"\rUpdate Progress - %3d%% ", Completion); + + // + // Set progress bar color + // + gST->ConOut->SetAttribute ( + gST->ConOut, + EFI_TEXT_ATTR (mProgressBarForegroundColor, EFI_BLACK) + ); + + // + // Print completed portion of progress bar + // + for (Index = 0; Index < Completion / 2; Index++) { + Print (L"%c", BLOCKELEMENT_FULL_BLOCK); + } + + // + // Restore text color + // + gST->ConOut->SetAttribute (gST->ConOut, CurrentAttribute); + + // + // Print remaining portion of progress bar + // + for (; Index < 50; Index++) { + Print (L"%c", BLOCKELEMENT_LIGHT_SHADE); + } + + mPreviousProgress = Completion; + + return EFI_SUCCESS; +} diff --git a/MdeModulePkg/Library/DisplayUpdateProgressLibText/DisplayUpdateProgressLibText.inf b/MdeModulePkg/Library/DisplayUpdateProgressLibText/DisplayUpdateProgressLibText.inf new file mode 100644 index 0000000000..c3134439e4 --- /dev/null +++ b/MdeModulePkg/Library/DisplayUpdateProgressLibText/DisplayUpdateProgressLibText.inf @@ -0,0 +1,53 @@ +## @file +# Provides services to display completion progress of a firmware update on a +# text console. +# +# 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 = DisplayUpdateProgressLibText + MODULE_UNI_FILE = DisplayUpdateProgressLibText.uni + FILE_GUID = CDEF83AE-1900-4B41-BF47-AAE9BD729CA5 + MODULE_TYPE = DXE_DRIVER + VERSION_STRING = 1.0 + LIBRARY_CLASS = DisplayUpdateProgressLib|DXE_DRIVER UEFI_DRIVER UEFI_APPLICATION + +# +# The following information is for reference only and not required by the build tools. +# +# VALID_ARCHITECTURES = IA32 X64 IPF EBC +# + +[Sources] + DisplayUpdateProgressLibText.c + +[Packages] + MdePkg/MdePkg.dec + MdeModulePkg/MdeModulePkg.dec + +[LibraryClasses] + DebugLib + UefiBootServicesTableLib + UefiLib diff --git a/MdeModulePkg/Library/DisplayUpdateProgressLibText/DisplayUpdateProgressLibText.uni b/MdeModulePkg/Library/DisplayUpdateProgressLibText/DisplayUpdateProgressLibText.uni new file mode 100644 index 0000000000..3c783722bc --- /dev/null +++ b/MdeModulePkg/Library/DisplayUpdateProgressLibText/DisplayUpdateProgressLibText.uni @@ -0,0 +1,18 @@ +// /** @file +// Provides services to display completion progress of a firmware update on a +// text console. +// +// 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 display completion progress of a firmware update on a text console." + +#string STR_MODULE_DESCRIPTION #language en-US "Provides services to display completion progress of a firmware update on a text console." diff --git a/MdeModulePkg/MdeModulePkg.dsc b/MdeModulePkg/MdeModulePkg.dsc index ec24a50c7d..b4e8a703af 100644 --- a/MdeModulePkg/MdeModulePkg.dsc +++ b/MdeModulePkg/MdeModulePkg.dsc @@ -108,6 +108,7 @@ [LibraryClasses] CapsuleLib|MdeModulePkg/Library/DxeCapsuleLibNull/DxeCapsuleLibNull.inf BmpSupportLib|MdeModulePkg/Library/BaseBmpSupportLib/BaseBmpSupportLib.inf SafeIntLib|MdePkg/Library/BaseSafeIntLib/BaseSafeIntLib.inf + DisplayUpdateProgressLib|MdeModulePkg/Library/DisplayUpdateProgressLibGraphics/DisplayUpdateProgressLibGraphics.inf [LibraryClasses.EBC.PEIM] IoLib|MdePkg/Library/PeiIoLibCpuIo/PeiIoLibCpuIo.inf @@ -327,6 +328,8 @@ [Components] MdeModulePkg/Library/FrameBufferBltLib/FrameBufferBltLib.inf MdeModulePkg/Library/NonDiscoverableDeviceRegistrationLib/NonDiscoverableDeviceRegistrationLib.inf MdeModulePkg/Library/BaseBmpSupportLib/BaseBmpSupportLib.inf + MdeModulePkg/Library/DisplayUpdateProgressLibGraphics/DisplayUpdateProgressLibGraphics.inf + MdeModulePkg/Library/DisplayUpdateProgressLibText/DisplayUpdateProgressLibText.inf MdeModulePkg/Universal/BdsDxe/BdsDxe.inf MdeModulePkg/Application/BootManagerMenuApp/BootManagerMenuApp.inf -- 2.14.2.windows.3 ^ permalink raw reply related [flat|nested] 17+ messages in thread
* Re: [Patch v3 2/3] MdeModulePkg: Add DisplayUpdateProgressLib instances 2018-05-25 6:15 ` [Patch v3 2/3] MdeModulePkg: Add DisplayUpdateProgressLib instances Michael D Kinney @ 2018-05-25 11:10 ` Zeng, Star 2018-05-31 11:09 ` Ard Biesheuvel 1 sibling, 0 replies; 17+ messages in thread From: Zeng, Star @ 2018-05-25 11:10 UTC (permalink / raw) To: Kinney, Michael D, edk2-devel@lists.01.org Cc: Sean Brogan, Dong, Eric, Zeng, Star Reviewed-by: Star Zeng <star.zeng@intel.com> Thanks, Star -----Original Message----- From: Kinney, Michael D Sent: Friday, May 25, 2018 2:16 PM To: edk2-devel@lists.01.org Cc: Sean Brogan <sean.brogan@microsoft.com>; Zeng, Star <star.zeng@intel.com>; Dong, Eric <eric.dong@intel.com> Subject: [Patch v3 2/3] MdeModulePkg: Add DisplayUpdateProgressLib instances https://bugzilla.tianocore.org/show_bug.cgi?id=801 Based on content from the following branch/commits: https://github.com/Microsoft/MS_UEFI/tree/share/MsCapsuleSupport Add DisplayUpdateProgressLib instances for text consoles and graphical consoles. Cc: Sean Brogan <sean.brogan@microsoft.com> Cc: Star Zeng <star.zeng@intel.com> Cc: Eric Dong <eric.dong@intel.com> Signed-off-by: Michael D Kinney <michael.d.kinney@intel.com> Contributed-under: TianoCore Contribution Agreement 1.1 --- .../DisplayUpdateProgressLibGraphics.c | 475 +++++++++++++++++++++ .../DisplayUpdateProgressLibGraphics.inf | 60 +++ .../DisplayUpdateProgressLibGraphics.uni | 18 + .../DisplayUpdateProgressLibText.c | 174 ++++++++ .../DisplayUpdateProgressLibText.inf | 53 +++ .../DisplayUpdateProgressLibText.uni | 18 + MdeModulePkg/MdeModulePkg.dsc | 3 + 7 files changed, 801 insertions(+) create mode 100644 MdeModulePkg/Library/DisplayUpdateProgressLibGraphics/DisplayUpdateProgressLibGraphics.c create mode 100644 MdeModulePkg/Library/DisplayUpdateProgressLibGraphics/DisplayUpdateProgressLibGraphics.inf create mode 100644 MdeModulePkg/Library/DisplayUpdateProgressLibGraphics/DisplayUpdateProgressLibGraphics.uni create mode 100644 MdeModulePkg/Library/DisplayUpdateProgressLibText/DisplayUpdateProgressLibText.c create mode 100644 MdeModulePkg/Library/DisplayUpdateProgressLibText/DisplayUpdateProgressLibText.inf create mode 100644 MdeModulePkg/Library/DisplayUpdateProgressLibText/DisplayUpdateProgressLibText.uni diff --git a/MdeModulePkg/Library/DisplayUpdateProgressLibGraphics/DisplayUpdateProgressLibGraphics.c b/MdeModulePkg/Library/DisplayUpdateProgressLibGraphics/DisplayUpdateProgressLibGraphics.c new file mode 100644 index 0000000000..007522cea0 --- /dev/null +++ b/MdeModulePkg/Library/DisplayUpdateProgressLibGraphics/DisplayUpdat +++ eProgressLibGraphics.c @@ -0,0 +1,475 @@ +/** @file + Provides services to display completion progress of a firmware update +on a + graphical console that supports the Graphics Output Protocol. + + 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/BaseMemoryLib.h> +#include <Library/MemoryAllocationLib.h> #include +<Library/UefiBootServicesTableLib.h> +#include <Library/DebugLib.h> +#include <Library/BaseLib.h> +#include <Library/UefiLib.h> + +#include <Protocol/GraphicsOutput.h> +#include <Protocol/BootLogo2.h> + +// +// Values in percent of of logo height. +// +#define LOGO_BOTTOM_PADDING 20 +#define PROGRESS_BLOCK_HEIGHT 10 + +// +// Graphics Output Protocol instance to display progress bar // +EFI_GRAPHICS_OUTPUT_PROTOCOL *mGop = NULL; + +// +// Set to 100 percent so it is reset on first call. +// +UINTN mPreviousProgress = 100; + +// +// Display coordinates for the progress bar. +// +UINTN mStartX = 0; +UINTN mStartY = 0; + +// +// Width and height of the progress bar. +// +UINTN mBlockWidth = 0; +UINTN mBlockHeight = 0; + +// +// GOP bitmap of the progress bar. Initialized on every new progress of +100% // EFI_GRAPHICS_OUTPUT_BLT_PIXEL *mBlockBitmap; + +// +// GOP bitmap of the progress bar backround. Initialized once. +// +EFI_GRAPHICS_OUTPUT_BLT_PIXEL *mProgressBarBackground; + +// +// Default mask used to detect the left, right , top, and bottom of +logo. Only // green and blue pixels are used for logo detection. +// +const EFI_GRAPHICS_OUTPUT_BLT_PIXEL_UNION mLogoDetectionColorMask = { + { + 0xFF, // Blue + 0xFF, // Green + 0x00, // Red + 0x00 // Reserved + } +}; + +// +// Background color of progress bar. Grey. +// +const EFI_GRAPHICS_OUTPUT_BLT_PIXEL_UNION mProgressBarBackgroundColor += { + { + 0x80, // Blue + 0x80, // Green + 0x80, // Red + 0x00 // Reserved + } +}; + +// +// Default color of progress completion. White. +// +const EFI_GRAPHICS_OUTPUT_BLT_PIXEL_UNION mProgressBarDefaultColor = { + { + 0xFF, // Blue + 0xFF, // Green + 0xFF, // Red + 0x00 // Reserved + } +}; + +// +// Set to TRUE if a valid Graphics Output Protocol is found and the +progress // bar fits under the boot logo using the current graphics mode. +// +BOOLEAN mGraphicsGood = FALSE; + +/* + Internal function used to find the bounds of the white logo (on black +or + red background). + + These bounds are then computed to find the block size, 0%, 100%, etc. + +*/ +VOID +FindDim ( + VOID + ) +{ + EFI_STATUS Status; + INTN LogoX; + INTN LogoStartX; + INTN LogoEndX; + INTN LogoY; + INTN LogoStartY; + INTN LogoEndY; + UINTN OffsetX; // Logo screen coordinate + UINTN OffsetY; // Logo screen coordinate + UINTN Width; // Width of logo in pixels + UINTN Height; // Height of logo in pixels + EFI_GRAPHICS_OUTPUT_BLT_PIXEL *Logo; + EDKII_BOOT_LOGO2_PROTOCOL *BootLogo; + EFI_GRAPHICS_OUTPUT_BLT_PIXEL_UNION *Pixel; + + Logo = NULL; + BootLogo = NULL; + + // + // Return if a Graphics Output Protocol ha snot been found. + // + if (mGop == NULL) { + DEBUG ((DEBUG_ERROR, "No GOP found. No progress bar support. \n")); + return; + } + + // + // Get boot logo protocol so we know where on the screen to grab // + Status = gBS->LocateProtocol ( + &gEdkiiBootLogo2ProtocolGuid, + NULL, + (VOID **)&BootLogo + ); + if ((BootLogo == NULL) || (EFI_ERROR (Status))) { + DEBUG ((DEBUG_ERROR, "Failed to locate gEdkiiBootLogo2ProtocolGuid. No Progress bar support. \n", Status)); + return; + } + + // + // Get logo location and size + // + Status = BootLogo->GetBootLogo ( + BootLogo, + &Logo, + &OffsetX, + &OffsetY, + &Width, + &Height + ); + if (EFI_ERROR (Status)) { + DEBUG ((DEBUG_ERROR, "Failed to Get Boot Logo Status = %r. No Progress bar support. \n", Status)); + return; + } + + // + // Within logo buffer find where the actual logo starts/ends // + LogoEndX = 0; LogoEndY = 0; + + // + // Find left side of logo in logo coordinates // for (LogoX = 0, + LogoStartX = Width; LogoX < LogoStartX; LogoX++) { + Pixel = (EFI_GRAPHICS_OUTPUT_BLT_PIXEL_UNION *)(Logo + LogoX); + for (LogoY = 0; LogoY < (INTN)Height; LogoY++) { + if ((Pixel->Raw & mLogoDetectionColorMask.Raw) != 0x0) { + LogoStartX = LogoX; + // + // For loop searches from right side back to this column. + // + LogoEndX = LogoX; + DEBUG ((DEBUG_INFO, "StartX found at (%d, %d) Color is: 0x%X \n", LogoX, LogoY, Pixel->Raw)); + break; + } + Pixel = Pixel + Width; + } + } + + // + // Find right side of logo + // + for (LogoX = Width - 1; LogoX >= LogoEndX; LogoX--) { + Pixel = (EFI_GRAPHICS_OUTPUT_BLT_PIXEL_UNION *)(Logo + LogoX); + for (LogoY = 0; LogoY < (INTN)Height; LogoY++) { + if ((Pixel->Raw & mLogoDetectionColorMask.Raw) != 0x0) { + LogoEndX = LogoX; + DEBUG ((DEBUG_INFO, "EndX found at (%d, %d) Color is: 0x%X \n", LogoX, LogoY, Pixel->Raw)); + break; + } + Pixel = Pixel + Width; + } + } + + // + // Compute mBlockWidth + // + mBlockWidth = ((LogoEndX - LogoStartX) + 99) / 100; + + // + // Adjust mStartX based on block width so it is centered under logo + // mStartX = LogoStartX + OffsetX - (((mBlockWidth * 100) - (LogoEndX + - LogoStartX)) / 2); DEBUG ((DEBUG_INFO, "mBlockWidth set to 0x%X\n", + mBlockWidth)); DEBUG ((DEBUG_INFO, "mStartX set to 0x%X\n", + mStartX)); + + // + // Find the top of the logo + // + for (LogoY = 0, LogoStartY = Height; LogoY < LogoStartY; LogoY++) { + Pixel = (EFI_GRAPHICS_OUTPUT_BLT_PIXEL_UNION *)(Logo + (Width * LogoY)); + for (LogoX = 0; LogoX < (INTN)Width; LogoX++) { + //not black or red + if ((Pixel->Raw & mLogoDetectionColorMask.Raw) != 0x0) { + LogoStartY = LogoY; + LogoEndY = LogoY; //for next loop will search from bottom side back to this row. + DEBUG ((DEBUG_INFO, "StartY found at (%d, %d) Color is: 0x%X \n", LogoX, LogoY, Pixel->Raw)); + break; + } + Pixel++; + } + } + + // + // Find the bottom of the logo + // + for (LogoY = Height - 1; LogoY >= LogoEndY; LogoY--) { + Pixel = (EFI_GRAPHICS_OUTPUT_BLT_PIXEL_UNION *)(Logo + (Width * LogoY)); + for (LogoX = 0; LogoX < (INTN)Width; LogoX++) { + if ((Pixel->Raw & mLogoDetectionColorMask.Raw) != 0x0) { + LogoEndY = LogoY; + DEBUG ((DEBUG_INFO, "EndY found at (%d, %d) Color is: 0x%X \n", LogoX, LogoY, Pixel->Raw)); + break; + } + Pixel++; + } + } + + // + // Compute bottom padding (distance between logo bottom and progress + bar) // mStartY = (((LogoEndY - LogoStartY) * LOGO_BOTTOM_PADDING) / + 100) + LogoEndY + OffsetY; + + // + // Compute progress bar height + // + mBlockHeight = (((LogoEndY - LogoStartY) * PROGRESS_BLOCK_HEIGHT) / + 100); + + DEBUG ((DEBUG_INFO, "mBlockHeight set to 0x%X\n", mBlockHeight)); + + // + // Create progress bar background (one time init). + // + mProgressBarBackground = AllocatePool (mBlockWidth * 100 * + mBlockHeight * sizeof (EFI_GRAPHICS_OUTPUT_BLT_PIXEL)); if (mProgressBarBackground == NULL) { + DEBUG ((DEBUG_ERROR, "Failed to allocate progress bar background\n")); + return; + } + + // + // Fill the progress bar with the background color // + SetMem32 ( + mProgressBarBackground, + (mBlockWidth * 100 * mBlockHeight * sizeof (EFI_GRAPHICS_OUTPUT_BLT_PIXEL)), + mProgressBarBackgroundColor.Raw + ); + + // + // Allocate mBlockBitmap + // + mBlockBitmap = AllocatePool (mBlockWidth * mBlockHeight * sizeof + (EFI_GRAPHICS_OUTPUT_BLT_PIXEL)); if (mBlockBitmap == NULL) { + FreePool (mProgressBarBackground); + DEBUG ((DEBUG_ERROR, "Failed to allocate block\n")); + return; + } + + // + // Check screen width and height and make sure it fits. + // + if ((mBlockHeight > Height) || (mBlockWidth > Width) || (mBlockHeight < 1) || (mBlockWidth < 1)) { + DEBUG ((DEBUG_ERROR, "DisplayUpdateProgressLib - Progress - Failed to get valid width and height.\n")); + DEBUG ((DEBUG_ERROR, "DisplayUpdateProgressLib - Progress - mBlockHeight: 0x%X mBlockWidth: 0x%X.\n", mBlockHeight, mBlockWidth)); + FreePool (mProgressBarBackground); + FreePool (mBlockBitmap); + return; + } + + mGraphicsGood = TRUE; +} + +/** + Function indicates the current completion progress of a firmware update. + Platform may override with its own specific function. + + @param[in] Completion A value between 0 and 100 indicating the current + completion progress of a firmware update. This + value must the the same or higher than previous + calls to this service. The first call of 0 or a + value of 0 after reaching a value of 100 resets + the progress indicator to 0. + @param[in] Color Color of the progress indicator. Only used when + Completion is 0 to set the color of the progress + indicator. If Color is NULL, then the default color + is used. + + @retval EFI_SUCCESS Progress displayed successfully. + @retval EFI_INVALID_PARAMETER Completion is not in range 0..100. + @retval EFI_INVALID_PARAMETER Completion is less than Completion value from + a previous call to this service. + @retval EFI_NOT_READY The device used to indicate progress is not + available. +**/ +EFI_STATUS +EFIAPI +DisplayUpdateProgress ( + IN UINTN Completion, + IN EFI_GRAPHICS_OUTPUT_BLT_PIXEL_UNION *Color OPTIONAL + ) +{ + EFI_STATUS Status; + UINTN PreX; + UINTN Index; + + // + // Check range + // + if (Completion > 100) { + return EFI_INVALID_PARAMETER; + } + + // + // Check to see if this Completion percentage has already been + displayed // if (Completion == mPreviousProgress) { + return EFI_SUCCESS; + } + + // + // Find Graphics Output Protocol if not already set. 1 time. + // + if (mGop == NULL) { + Status = gBS->HandleProtocol ( + gST->ConsoleOutHandle, + &gEfiGraphicsOutputProtocolGuid, + (VOID**)&mGop + ); + if (EFI_ERROR (Status)) { + Status = gBS->LocateProtocol (&gEfiGraphicsOutputProtocolGuid, NULL, (VOID **)&mGop); + if (EFI_ERROR (Status)) { + mGop = NULL; + DEBUG ((DEBUG_ERROR, "Show Progress Function could not locate GOP. Status = %r\n", Status)); + return EFI_NOT_READY; + } + } + + // + // Run once + // + FindDim (); + } + + // + // Make sure a valid start, end, and size info are available (find + the Logo) // if (!mGraphicsGood) { + DEBUG ((DEBUG_INFO, "Graphics Not Good. Not doing any onscreen visual display\n")); + return EFI_NOT_READY; + } + + // + // Do special init on first call of each progress session // if + (mPreviousProgress == 100) { + // + // Draw progress bar background + // + mGop->Blt ( + mGop, + mProgressBarBackground, + EfiBltBufferToVideo, + 0, + 0, + mStartX, + mStartY, + (mBlockWidth * 100), + mBlockHeight, + 0 + ); + + DEBUG ((DEBUG_VERBOSE, "Color is 0x%X\n", + (Color == NULL) ? mProgressBarDefaultColor.Raw : Color->Raw + )); + + // + // Update block bitmap with correct color + // + SetMem32 ( + mBlockBitmap, + (mBlockWidth * mBlockHeight * sizeof (EFI_GRAPHICS_OUTPUT_BLT_PIXEL)), + (Color == NULL) ? mProgressBarDefaultColor.Raw : Color->Raw + ); + + // + // Clear previous + // + mPreviousProgress = 0; + } + + // + // Can not update progress bar if Completion is less than previous + // if (Completion < mPreviousProgress) { + DEBUG ((DEBUG_WARN, "WARNING: Completion (%d) should not be lesss than Previous (%d)!!!\n", Completion, mPreviousProgress)); + return EFI_INVALID_PARAMETER; + } + + PreX = ((mPreviousProgress * mBlockWidth) + mStartX); for (Index = + 0; Index < (Completion - mPreviousProgress); Index++) { + // + // Show progress by coloring new area + // + mGop->Blt ( + mGop, + mBlockBitmap, + EfiBltBufferToVideo, + 0, + 0, + PreX, + mStartY, + mBlockWidth, + mBlockHeight, + 0 + ); + PreX += mBlockWidth; + } + + mPreviousProgress = Completion; + + return EFI_SUCCESS; +} diff --git a/MdeModulePkg/Library/DisplayUpdateProgressLibGraphics/DisplayUpdateProgressLibGraphics.inf b/MdeModulePkg/Library/DisplayUpdateProgressLibGraphics/DisplayUpdateProgressLibGraphics.inf new file mode 100644 index 0000000000..ada6076770 --- /dev/null +++ b/MdeModulePkg/Library/DisplayUpdateProgressLibGraphics/DisplayUpdat +++ eProgressLibGraphics.inf @@ -0,0 +1,60 @@ +## @file +# Provides services to display completion progress of a firmware +update on a # graphical console that supports the Graphics Output Protocol. +# +# 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 = DisplayUpdateProgressLibGraphics + MODULE_UNI_FILE = DisplayUpdateProgressLibGraphics.uni + FILE_GUID = 319E9E37-B2D6-4699-90F3-B8B72B6D4CBD + MODULE_TYPE = DXE_DRIVER + VERSION_STRING = 1.0 + LIBRARY_CLASS = DisplayUpdateProgressLib|DXE_DRIVER UEFI_DRIVER UEFI_APPLICATION + +# +# The following information is for reference only and not required by the build tools. +# +# VALID_ARCHITECTURES = IA32 X64 IPF EBC +# + +[Sources] + DisplayUpdateProgressLibGraphics.c + +[Packages] + MdePkg/MdePkg.dec + MdeModulePkg/MdeModulePkg.dec + +[LibraryClasses] + BaseMemoryLib + DebugLib + MemoryAllocationLib + UefiBootServicesTableLib + BaseLib + UefiLib + +[Protocols] + gEfiGraphicsOutputProtocolGuid # CONSUMES + gEdkiiBootLogo2ProtocolGuid # CONSUMES diff --git a/MdeModulePkg/Library/DisplayUpdateProgressLibGraphics/DisplayUpdateProgressLibGraphics.uni b/MdeModulePkg/Library/DisplayUpdateProgressLibGraphics/DisplayUpdateProgressLibGraphics.uni new file mode 100644 index 0000000000..d7da641338 --- /dev/null +++ b/MdeModulePkg/Library/DisplayUpdateProgressLibGraphics/DisplayUpdat +++ eProgressLibGraphics.uni @@ -0,0 +1,18 @@ +// /** @file +// Provides services to display completion progress of a firmware +update on a // graphical console that supports the Graphics Output Protocol. +// +// 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 display completion progress of a firmware update on a graphical console that supports the Graphics Output Protocol." + +#string STR_MODULE_DESCRIPTION #language en-US "Provides services to display completion progress of a firmware update on a graphical console that supports the Graphics Output Protocol." diff --git a/MdeModulePkg/Library/DisplayUpdateProgressLibText/DisplayUpdateProgressLibText.c b/MdeModulePkg/Library/DisplayUpdateProgressLibText/DisplayUpdateProgressLibText.c new file mode 100644 index 0000000000..7aca8b89d0 --- /dev/null +++ b/MdeModulePkg/Library/DisplayUpdateProgressLibText/DisplayUpdatePro +++ gressLibText.c @@ -0,0 +1,174 @@ +/** @file + Provides services to display completion progress of a firmware update +on a + text console. + + 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/DebugLib.h> +#include <Library/UefiBootServicesTableLib.h> +#include <Library/UefiLib.h> + +// +// Control Style. Set to 100 so it is reset on first call. +// +UINTN mPreviousProgress = 100; + +// +// Text foreground color of progress bar // UINTN +mProgressBarForegroundColor; + +/** + Function indicates the current completion progress of a firmware update. + Platform may override with its own specific function. + + @param[in] Completion A value between 0 and 100 indicating the current + completion progress of a firmware update. This + value must the the same or higher than previous + calls to this service. The first call of 0 or a + value of 0 after reaching a value of 100 resets + the progress indicator to 0. + @param[in] Color Color of the progress indicator. Only used when + Completion is 0 to set the color of the progress + indicator. If Color is NULL, then the default color + is used. + + @retval EFI_SUCCESS Progress displayed successfully. + @retval EFI_INVALID_PARAMETER Completion is not in range 0..100. + @retval EFI_INVALID_PARAMETER Completion is less than Completion value from + a previous call to this service. + @retval EFI_NOT_READY The device used to indicate progress is not + available. +**/ +EFI_STATUS +EFIAPI +DisplayUpdateProgress ( + IN UINTN Completion, + IN EFI_GRAPHICS_OUTPUT_BLT_PIXEL_UNION *Color OPTIONAL + ) +{ + UINTN Index; + UINTN CurrentAttribute; + + // + // Check range + // + if (Completion > 100) { + return EFI_INVALID_PARAMETER; + } + + // + // Check to see if this Completion percentage has already been + displayed // if (Completion == mPreviousProgress) { + return EFI_SUCCESS; + } + + // + // Do special init on first call of each progress session // if + (mPreviousProgress == 100) { + Print (L"\n"); + + // + // Convert pixel color to text foreground color + // + if (Color == NULL) { + mProgressBarForegroundColor = EFI_WHITE; + } else { + mProgressBarForegroundColor = EFI_BLACK; + if (Color->Pixel.Blue >= 0x40) { + mProgressBarForegroundColor |= EFI_BLUE; + } + if (Color->Pixel.Green >= 0x40) { + mProgressBarForegroundColor |= EFI_GREEN; + } + if (Color->Pixel.Red >= 0x40) { + mProgressBarForegroundColor |= EFI_RED; + } + if (Color->Pixel.Blue >= 0xC0 || Color->Pixel.Green >= 0xC0 || Color->Pixel.Red >= 0xC0) { + mProgressBarForegroundColor |= EFI_BRIGHT; + } + if (mProgressBarForegroundColor == EFI_BLACK) { + mProgressBarForegroundColor = EFI_WHITE; + } + } + + // + // Clear previous + // + mPreviousProgress = 0; + } + + // + // Can not update progress bar if Completion is less than previous + // if (Completion < mPreviousProgress) { + DEBUG ((DEBUG_WARN, "WARNING: Completion (%d) should not be lesss than Previous (%d)!!!\n", Completion, mPreviousProgress)); + return EFI_INVALID_PARAMETER; + } + + // + // Save current text color + // + CurrentAttribute = (UINTN)gST->ConOut->Mode->Attribute; + + // + // Print progress percentage + // + Print (L"\rUpdate Progress - %3d%% ", Completion); + + // + // Set progress bar color + // + gST->ConOut->SetAttribute ( + gST->ConOut, + EFI_TEXT_ATTR (mProgressBarForegroundColor, EFI_BLACK) + ); + + // + // Print completed portion of progress bar // for (Index = 0; Index + < Completion / 2; Index++) { + Print (L"%c", BLOCKELEMENT_FULL_BLOCK); } + + // + // Restore text color + // + gST->ConOut->SetAttribute (gST->ConOut, CurrentAttribute); + + // + // Print remaining portion of progress bar // for (; Index < 50; + Index++) { + Print (L"%c", BLOCKELEMENT_LIGHT_SHADE); } + + mPreviousProgress = Completion; + + return EFI_SUCCESS; +} diff --git a/MdeModulePkg/Library/DisplayUpdateProgressLibText/DisplayUpdateProgressLibText.inf b/MdeModulePkg/Library/DisplayUpdateProgressLibText/DisplayUpdateProgressLibText.inf new file mode 100644 index 0000000000..c3134439e4 --- /dev/null +++ b/MdeModulePkg/Library/DisplayUpdateProgressLibText/DisplayUpdatePro +++ gressLibText.inf @@ -0,0 +1,53 @@ +## @file +# Provides services to display completion progress of a firmware +update on a # text console. +# +# 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 = DisplayUpdateProgressLibText + MODULE_UNI_FILE = DisplayUpdateProgressLibText.uni + FILE_GUID = CDEF83AE-1900-4B41-BF47-AAE9BD729CA5 + MODULE_TYPE = DXE_DRIVER + VERSION_STRING = 1.0 + LIBRARY_CLASS = DisplayUpdateProgressLib|DXE_DRIVER UEFI_DRIVER UEFI_APPLICATION + +# +# The following information is for reference only and not required by the build tools. +# +# VALID_ARCHITECTURES = IA32 X64 IPF EBC +# + +[Sources] + DisplayUpdateProgressLibText.c + +[Packages] + MdePkg/MdePkg.dec + MdeModulePkg/MdeModulePkg.dec + +[LibraryClasses] + DebugLib + UefiBootServicesTableLib + UefiLib diff --git a/MdeModulePkg/Library/DisplayUpdateProgressLibText/DisplayUpdateProgressLibText.uni b/MdeModulePkg/Library/DisplayUpdateProgressLibText/DisplayUpdateProgressLibText.uni new file mode 100644 index 0000000000..3c783722bc --- /dev/null +++ b/MdeModulePkg/Library/DisplayUpdateProgressLibText/DisplayUpdatePro +++ gressLibText.uni @@ -0,0 +1,18 @@ +// /** @file +// Provides services to display completion progress of a firmware +update on a // text console. +// +// 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 display completion progress of a firmware update on a text console." + +#string STR_MODULE_DESCRIPTION #language en-US "Provides services to display completion progress of a firmware update on a text console." diff --git a/MdeModulePkg/MdeModulePkg.dsc b/MdeModulePkg/MdeModulePkg.dsc index ec24a50c7d..b4e8a703af 100644 --- a/MdeModulePkg/MdeModulePkg.dsc +++ b/MdeModulePkg/MdeModulePkg.dsc @@ -108,6 +108,7 @@ [LibraryClasses] CapsuleLib|MdeModulePkg/Library/DxeCapsuleLibNull/DxeCapsuleLibNull.inf BmpSupportLib|MdeModulePkg/Library/BaseBmpSupportLib/BaseBmpSupportLib.inf SafeIntLib|MdePkg/Library/BaseSafeIntLib/BaseSafeIntLib.inf + + DisplayUpdateProgressLib|MdeModulePkg/Library/DisplayUpdateProgressLib + Graphics/DisplayUpdateProgressLibGraphics.inf [LibraryClasses.EBC.PEIM] IoLib|MdePkg/Library/PeiIoLibCpuIo/PeiIoLibCpuIo.inf @@ -327,6 +328,8 @@ [Components] MdeModulePkg/Library/FrameBufferBltLib/FrameBufferBltLib.inf MdeModulePkg/Library/NonDiscoverableDeviceRegistrationLib/NonDiscoverableDeviceRegistrationLib.inf MdeModulePkg/Library/BaseBmpSupportLib/BaseBmpSupportLib.inf + + MdeModulePkg/Library/DisplayUpdateProgressLibGraphics/DisplayUpdatePro + gressLibGraphics.inf + MdeModulePkg/Library/DisplayUpdateProgressLibText/DisplayUpdateProgres + sLibText.inf MdeModulePkg/Universal/BdsDxe/BdsDxe.inf MdeModulePkg/Application/BootManagerMenuApp/BootManagerMenuApp.inf -- 2.14.2.windows.3 ^ permalink raw reply related [flat|nested] 17+ messages in thread
* Re: [Patch v3 2/3] MdeModulePkg: Add DisplayUpdateProgressLib instances 2018-05-25 6:15 ` [Patch v3 2/3] MdeModulePkg: Add DisplayUpdateProgressLib instances Michael D Kinney 2018-05-25 11:10 ` Zeng, Star @ 2018-05-31 11:09 ` Ard Biesheuvel 2018-06-04 20:24 ` Kinney, Michael D 1 sibling, 1 reply; 17+ messages in thread From: Ard Biesheuvel @ 2018-05-31 11:09 UTC (permalink / raw) To: Michael D Kinney, Leif Lindholm Cc: edk2-devel@lists.01.org, Eric Dong, Star Zeng (+ Leif) On 25 May 2018 at 08:15, Michael D Kinney <michael.d.kinney@intel.com> wrote: > https://bugzilla.tianocore.org/show_bug.cgi?id=801 > > Based on content from the following branch/commits: > https://github.com/Microsoft/MS_UEFI/tree/share/MsCapsuleSupport > > Add DisplayUpdateProgressLib instances for text consoles > and graphical consoles. > Hello Mike, Is it correct that DisplayUpdateProgressLibGraphics shows no output at all if no GOP instance is detected? The current FlashAccessLib implementation I have for SynQuacer falls back to console output in that case, so it would regress to having no visible progress indication whatsoever if I move it to this library. What do you recommend in this case? Can we use the result code of the progress reporting callback as an indication of a missing GOP, and retain the fallback in FlashAccessLib in this case? > Cc: Sean Brogan <sean.brogan@microsoft.com> > Cc: Star Zeng <star.zeng@intel.com> > Cc: Eric Dong <eric.dong@intel.com> > Signed-off-by: Michael D Kinney <michael.d.kinney@intel.com> > Contributed-under: TianoCore Contribution Agreement 1.1 > --- > .../DisplayUpdateProgressLibGraphics.c | 475 +++++++++++++++++++++ > .../DisplayUpdateProgressLibGraphics.inf | 60 +++ > .../DisplayUpdateProgressLibGraphics.uni | 18 + > .../DisplayUpdateProgressLibText.c | 174 ++++++++ > .../DisplayUpdateProgressLibText.inf | 53 +++ > .../DisplayUpdateProgressLibText.uni | 18 + > MdeModulePkg/MdeModulePkg.dsc | 3 + > 7 files changed, 801 insertions(+) > create mode 100644 MdeModulePkg/Library/DisplayUpdateProgressLibGraphics/DisplayUpdateProgressLibGraphics.c > create mode 100644 MdeModulePkg/Library/DisplayUpdateProgressLibGraphics/DisplayUpdateProgressLibGraphics.inf > create mode 100644 MdeModulePkg/Library/DisplayUpdateProgressLibGraphics/DisplayUpdateProgressLibGraphics.uni > create mode 100644 MdeModulePkg/Library/DisplayUpdateProgressLibText/DisplayUpdateProgressLibText.c > create mode 100644 MdeModulePkg/Library/DisplayUpdateProgressLibText/DisplayUpdateProgressLibText.inf > create mode 100644 MdeModulePkg/Library/DisplayUpdateProgressLibText/DisplayUpdateProgressLibText.uni > > diff --git a/MdeModulePkg/Library/DisplayUpdateProgressLibGraphics/DisplayUpdateProgressLibGraphics.c b/MdeModulePkg/Library/DisplayUpdateProgressLibGraphics/DisplayUpdateProgressLibGraphics.c > new file mode 100644 > index 0000000000..007522cea0 > --- /dev/null > +++ b/MdeModulePkg/Library/DisplayUpdateProgressLibGraphics/DisplayUpdateProgressLibGraphics.c > @@ -0,0 +1,475 @@ > +/** @file > + Provides services to display completion progress of a firmware update on a > + graphical console that supports the Graphics Output Protocol. > + > + 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/BaseMemoryLib.h> > +#include <Library/MemoryAllocationLib.h> > +#include <Library/UefiBootServicesTableLib.h> > +#include <Library/DebugLib.h> > +#include <Library/BaseLib.h> > +#include <Library/UefiLib.h> > + > +#include <Protocol/GraphicsOutput.h> > +#include <Protocol/BootLogo2.h> > + > +// > +// Values in percent of of logo height. > +// > +#define LOGO_BOTTOM_PADDING 20 > +#define PROGRESS_BLOCK_HEIGHT 10 > + > +// > +// Graphics Output Protocol instance to display progress bar > +// > +EFI_GRAPHICS_OUTPUT_PROTOCOL *mGop = NULL; > + > +// > +// Set to 100 percent so it is reset on first call. > +// > +UINTN mPreviousProgress = 100; > + > +// > +// Display coordinates for the progress bar. > +// > +UINTN mStartX = 0; > +UINTN mStartY = 0; > + > +// > +// Width and height of the progress bar. > +// > +UINTN mBlockWidth = 0; > +UINTN mBlockHeight = 0; > + > +// > +// GOP bitmap of the progress bar. Initialized on every new progress of 100% > +// > +EFI_GRAPHICS_OUTPUT_BLT_PIXEL *mBlockBitmap; > + > +// > +// GOP bitmap of the progress bar backround. Initialized once. > +// > +EFI_GRAPHICS_OUTPUT_BLT_PIXEL *mProgressBarBackground; > + > +// > +// Default mask used to detect the left, right , top, and bottom of logo. Only > +// green and blue pixels are used for logo detection. > +// > +const EFI_GRAPHICS_OUTPUT_BLT_PIXEL_UNION mLogoDetectionColorMask = { > + { > + 0xFF, // Blue > + 0xFF, // Green > + 0x00, // Red > + 0x00 // Reserved > + } > +}; > + > +// > +// Background color of progress bar. Grey. > +// > +const EFI_GRAPHICS_OUTPUT_BLT_PIXEL_UNION mProgressBarBackgroundColor = { > + { > + 0x80, // Blue > + 0x80, // Green > + 0x80, // Red > + 0x00 // Reserved > + } > +}; > + > +// > +// Default color of progress completion. White. > +// > +const EFI_GRAPHICS_OUTPUT_BLT_PIXEL_UNION mProgressBarDefaultColor = { > + { > + 0xFF, // Blue > + 0xFF, // Green > + 0xFF, // Red > + 0x00 // Reserved > + } > +}; > + > +// > +// Set to TRUE if a valid Graphics Output Protocol is found and the progress > +// bar fits under the boot logo using the current graphics mode. > +// > +BOOLEAN mGraphicsGood = FALSE; > + > +/* > + Internal function used to find the bounds of the white logo (on black or > + red background). > + > + These bounds are then computed to find the block size, 0%, 100%, etc. > + > +*/ > +VOID > +FindDim ( > + VOID > + ) > +{ > + EFI_STATUS Status; > + INTN LogoX; > + INTN LogoStartX; > + INTN LogoEndX; > + INTN LogoY; > + INTN LogoStartY; > + INTN LogoEndY; > + UINTN OffsetX; // Logo screen coordinate > + UINTN OffsetY; // Logo screen coordinate > + UINTN Width; // Width of logo in pixels > + UINTN Height; // Height of logo in pixels > + EFI_GRAPHICS_OUTPUT_BLT_PIXEL *Logo; > + EDKII_BOOT_LOGO2_PROTOCOL *BootLogo; > + EFI_GRAPHICS_OUTPUT_BLT_PIXEL_UNION *Pixel; > + > + Logo = NULL; > + BootLogo = NULL; > + > + // > + // Return if a Graphics Output Protocol ha snot been found. > + // > + if (mGop == NULL) { > + DEBUG ((DEBUG_ERROR, "No GOP found. No progress bar support. \n")); > + return; > + } > + > + // > + // Get boot logo protocol so we know where on the screen to grab > + // > + Status = gBS->LocateProtocol ( > + &gEdkiiBootLogo2ProtocolGuid, > + NULL, > + (VOID **)&BootLogo > + ); > + if ((BootLogo == NULL) || (EFI_ERROR (Status))) { > + DEBUG ((DEBUG_ERROR, "Failed to locate gEdkiiBootLogo2ProtocolGuid. No Progress bar support. \n", Status)); > + return; > + } > + > + // > + // Get logo location and size > + // > + Status = BootLogo->GetBootLogo ( > + BootLogo, > + &Logo, > + &OffsetX, > + &OffsetY, > + &Width, > + &Height > + ); > + if (EFI_ERROR (Status)) { > + DEBUG ((DEBUG_ERROR, "Failed to Get Boot Logo Status = %r. No Progress bar support. \n", Status)); > + return; > + } > + > + // > + // Within logo buffer find where the actual logo starts/ends > + // > + LogoEndX = 0; > + LogoEndY = 0; > + > + // > + // Find left side of logo in logo coordinates > + // > + for (LogoX = 0, LogoStartX = Width; LogoX < LogoStartX; LogoX++) { > + Pixel = (EFI_GRAPHICS_OUTPUT_BLT_PIXEL_UNION *)(Logo + LogoX); > + for (LogoY = 0; LogoY < (INTN)Height; LogoY++) { > + if ((Pixel->Raw & mLogoDetectionColorMask.Raw) != 0x0) { > + LogoStartX = LogoX; > + // > + // For loop searches from right side back to this column. > + // > + LogoEndX = LogoX; > + DEBUG ((DEBUG_INFO, "StartX found at (%d, %d) Color is: 0x%X \n", LogoX, LogoY, Pixel->Raw)); > + break; > + } > + Pixel = Pixel + Width; > + } > + } > + > + // > + // Find right side of logo > + // > + for (LogoX = Width - 1; LogoX >= LogoEndX; LogoX--) { > + Pixel = (EFI_GRAPHICS_OUTPUT_BLT_PIXEL_UNION *)(Logo + LogoX); > + for (LogoY = 0; LogoY < (INTN)Height; LogoY++) { > + if ((Pixel->Raw & mLogoDetectionColorMask.Raw) != 0x0) { > + LogoEndX = LogoX; > + DEBUG ((DEBUG_INFO, "EndX found at (%d, %d) Color is: 0x%X \n", LogoX, LogoY, Pixel->Raw)); > + break; > + } > + Pixel = Pixel + Width; > + } > + } > + > + // > + // Compute mBlockWidth > + // > + mBlockWidth = ((LogoEndX - LogoStartX) + 99) / 100; > + > + // > + // Adjust mStartX based on block width so it is centered under logo > + // > + mStartX = LogoStartX + OffsetX - (((mBlockWidth * 100) - (LogoEndX - LogoStartX)) / 2); > + DEBUG ((DEBUG_INFO, "mBlockWidth set to 0x%X\n", mBlockWidth)); > + DEBUG ((DEBUG_INFO, "mStartX set to 0x%X\n", mStartX)); > + > + // > + // Find the top of the logo > + // > + for (LogoY = 0, LogoStartY = Height; LogoY < LogoStartY; LogoY++) { > + Pixel = (EFI_GRAPHICS_OUTPUT_BLT_PIXEL_UNION *)(Logo + (Width * LogoY)); > + for (LogoX = 0; LogoX < (INTN)Width; LogoX++) { > + //not black or red > + if ((Pixel->Raw & mLogoDetectionColorMask.Raw) != 0x0) { > + LogoStartY = LogoY; > + LogoEndY = LogoY; //for next loop will search from bottom side back to this row. > + DEBUG ((DEBUG_INFO, "StartY found at (%d, %d) Color is: 0x%X \n", LogoX, LogoY, Pixel->Raw)); > + break; > + } > + Pixel++; > + } > + } > + > + // > + // Find the bottom of the logo > + // > + for (LogoY = Height - 1; LogoY >= LogoEndY; LogoY--) { > + Pixel = (EFI_GRAPHICS_OUTPUT_BLT_PIXEL_UNION *)(Logo + (Width * LogoY)); > + for (LogoX = 0; LogoX < (INTN)Width; LogoX++) { > + if ((Pixel->Raw & mLogoDetectionColorMask.Raw) != 0x0) { > + LogoEndY = LogoY; > + DEBUG ((DEBUG_INFO, "EndY found at (%d, %d) Color is: 0x%X \n", LogoX, LogoY, Pixel->Raw)); > + break; > + } > + Pixel++; > + } > + } > + > + // > + // Compute bottom padding (distance between logo bottom and progress bar) > + // > + mStartY = (((LogoEndY - LogoStartY) * LOGO_BOTTOM_PADDING) / 100) + LogoEndY + OffsetY; > + > + // > + // Compute progress bar height > + // > + mBlockHeight = (((LogoEndY - LogoStartY) * PROGRESS_BLOCK_HEIGHT) / 100); > + > + DEBUG ((DEBUG_INFO, "mBlockHeight set to 0x%X\n", mBlockHeight)); > + > + // > + // Create progress bar background (one time init). > + // > + mProgressBarBackground = AllocatePool (mBlockWidth * 100 * mBlockHeight * sizeof (EFI_GRAPHICS_OUTPUT_BLT_PIXEL)); > + if (mProgressBarBackground == NULL) { > + DEBUG ((DEBUG_ERROR, "Failed to allocate progress bar background\n")); > + return; > + } > + > + // > + // Fill the progress bar with the background color > + // > + SetMem32 ( > + mProgressBarBackground, > + (mBlockWidth * 100 * mBlockHeight * sizeof (EFI_GRAPHICS_OUTPUT_BLT_PIXEL)), > + mProgressBarBackgroundColor.Raw > + ); > + > + // > + // Allocate mBlockBitmap > + // > + mBlockBitmap = AllocatePool (mBlockWidth * mBlockHeight * sizeof (EFI_GRAPHICS_OUTPUT_BLT_PIXEL)); > + if (mBlockBitmap == NULL) { > + FreePool (mProgressBarBackground); > + DEBUG ((DEBUG_ERROR, "Failed to allocate block\n")); > + return; > + } > + > + // > + // Check screen width and height and make sure it fits. > + // > + if ((mBlockHeight > Height) || (mBlockWidth > Width) || (mBlockHeight < 1) || (mBlockWidth < 1)) { > + DEBUG ((DEBUG_ERROR, "DisplayUpdateProgressLib - Progress - Failed to get valid width and height.\n")); > + DEBUG ((DEBUG_ERROR, "DisplayUpdateProgressLib - Progress - mBlockHeight: 0x%X mBlockWidth: 0x%X.\n", mBlockHeight, mBlockWidth)); > + FreePool (mProgressBarBackground); > + FreePool (mBlockBitmap); > + return; > + } > + > + mGraphicsGood = TRUE; > +} > + > +/** > + Function indicates the current completion progress of a firmware update. > + Platform may override with its own specific function. > + > + @param[in] Completion A value between 0 and 100 indicating the current > + completion progress of a firmware update. This > + value must the the same or higher than previous > + calls to this service. The first call of 0 or a > + value of 0 after reaching a value of 100 resets > + the progress indicator to 0. > + @param[in] Color Color of the progress indicator. Only used when > + Completion is 0 to set the color of the progress > + indicator. If Color is NULL, then the default color > + is used. > + > + @retval EFI_SUCCESS Progress displayed successfully. > + @retval EFI_INVALID_PARAMETER Completion is not in range 0..100. > + @retval EFI_INVALID_PARAMETER Completion is less than Completion value from > + a previous call to this service. > + @retval EFI_NOT_READY The device used to indicate progress is not > + available. > +**/ > +EFI_STATUS > +EFIAPI > +DisplayUpdateProgress ( > + IN UINTN Completion, > + IN EFI_GRAPHICS_OUTPUT_BLT_PIXEL_UNION *Color OPTIONAL > + ) > +{ > + EFI_STATUS Status; > + UINTN PreX; > + UINTN Index; > + > + // > + // Check range > + // > + if (Completion > 100) { > + return EFI_INVALID_PARAMETER; > + } > + > + // > + // Check to see if this Completion percentage has already been displayed > + // > + if (Completion == mPreviousProgress) { > + return EFI_SUCCESS; > + } > + > + // > + // Find Graphics Output Protocol if not already set. 1 time. > + // > + if (mGop == NULL) { > + Status = gBS->HandleProtocol ( > + gST->ConsoleOutHandle, > + &gEfiGraphicsOutputProtocolGuid, > + (VOID**)&mGop > + ); > + if (EFI_ERROR (Status)) { > + Status = gBS->LocateProtocol (&gEfiGraphicsOutputProtocolGuid, NULL, (VOID **)&mGop); > + if (EFI_ERROR (Status)) { > + mGop = NULL; > + DEBUG ((DEBUG_ERROR, "Show Progress Function could not locate GOP. Status = %r\n", Status)); > + return EFI_NOT_READY; > + } > + } > + > + // > + // Run once > + // > + FindDim (); > + } > + > + // > + // Make sure a valid start, end, and size info are available (find the Logo) > + // > + if (!mGraphicsGood) { > + DEBUG ((DEBUG_INFO, "Graphics Not Good. Not doing any onscreen visual display\n")); > + return EFI_NOT_READY; > + } > + > + // > + // Do special init on first call of each progress session > + // > + if (mPreviousProgress == 100) { > + // > + // Draw progress bar background > + // > + mGop->Blt ( > + mGop, > + mProgressBarBackground, > + EfiBltBufferToVideo, > + 0, > + 0, > + mStartX, > + mStartY, > + (mBlockWidth * 100), > + mBlockHeight, > + 0 > + ); > + > + DEBUG ((DEBUG_VERBOSE, "Color is 0x%X\n", > + (Color == NULL) ? mProgressBarDefaultColor.Raw : Color->Raw > + )); > + > + // > + // Update block bitmap with correct color > + // > + SetMem32 ( > + mBlockBitmap, > + (mBlockWidth * mBlockHeight * sizeof (EFI_GRAPHICS_OUTPUT_BLT_PIXEL)), > + (Color == NULL) ? mProgressBarDefaultColor.Raw : Color->Raw > + ); > + > + // > + // Clear previous > + // > + mPreviousProgress = 0; > + } > + > + // > + // Can not update progress bar if Completion is less than previous > + // > + if (Completion < mPreviousProgress) { > + DEBUG ((DEBUG_WARN, "WARNING: Completion (%d) should not be lesss than Previous (%d)!!!\n", Completion, mPreviousProgress)); > + return EFI_INVALID_PARAMETER; > + } > + > + PreX = ((mPreviousProgress * mBlockWidth) + mStartX); > + for (Index = 0; Index < (Completion - mPreviousProgress); Index++) { > + // > + // Show progress by coloring new area > + // > + mGop->Blt ( > + mGop, > + mBlockBitmap, > + EfiBltBufferToVideo, > + 0, > + 0, > + PreX, > + mStartY, > + mBlockWidth, > + mBlockHeight, > + 0 > + ); > + PreX += mBlockWidth; > + } > + > + mPreviousProgress = Completion; > + > + return EFI_SUCCESS; > +} > diff --git a/MdeModulePkg/Library/DisplayUpdateProgressLibGraphics/DisplayUpdateProgressLibGraphics.inf b/MdeModulePkg/Library/DisplayUpdateProgressLibGraphics/DisplayUpdateProgressLibGraphics.inf > new file mode 100644 > index 0000000000..ada6076770 > --- /dev/null > +++ b/MdeModulePkg/Library/DisplayUpdateProgressLibGraphics/DisplayUpdateProgressLibGraphics.inf > @@ -0,0 +1,60 @@ > +## @file > +# Provides services to display completion progress of a firmware update on a > +# graphical console that supports the Graphics Output Protocol. > +# > +# 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 = DisplayUpdateProgressLibGraphics > + MODULE_UNI_FILE = DisplayUpdateProgressLibGraphics.uni > + FILE_GUID = 319E9E37-B2D6-4699-90F3-B8B72B6D4CBD > + MODULE_TYPE = DXE_DRIVER > + VERSION_STRING = 1.0 > + LIBRARY_CLASS = DisplayUpdateProgressLib|DXE_DRIVER UEFI_DRIVER UEFI_APPLICATION > + > +# > +# The following information is for reference only and not required by the build tools. > +# > +# VALID_ARCHITECTURES = IA32 X64 IPF EBC > +# > + > +[Sources] > + DisplayUpdateProgressLibGraphics.c > + > +[Packages] > + MdePkg/MdePkg.dec > + MdeModulePkg/MdeModulePkg.dec > + > +[LibraryClasses] > + BaseMemoryLib > + DebugLib > + MemoryAllocationLib > + UefiBootServicesTableLib > + BaseLib > + UefiLib > + > +[Protocols] > + gEfiGraphicsOutputProtocolGuid # CONSUMES > + gEdkiiBootLogo2ProtocolGuid # CONSUMES > diff --git a/MdeModulePkg/Library/DisplayUpdateProgressLibGraphics/DisplayUpdateProgressLibGraphics.uni b/MdeModulePkg/Library/DisplayUpdateProgressLibGraphics/DisplayUpdateProgressLibGraphics.uni > new file mode 100644 > index 0000000000..d7da641338 > --- /dev/null > +++ b/MdeModulePkg/Library/DisplayUpdateProgressLibGraphics/DisplayUpdateProgressLibGraphics.uni > @@ -0,0 +1,18 @@ > +// /** @file > +// Provides services to display completion progress of a firmware update on a > +// graphical console that supports the Graphics Output Protocol. > +// > +// 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 display completion progress of a firmware update on a graphical console that supports the Graphics Output Protocol." > + > +#string STR_MODULE_DESCRIPTION #language en-US "Provides services to display completion progress of a firmware update on a graphical console that supports the Graphics Output Protocol." > diff --git a/MdeModulePkg/Library/DisplayUpdateProgressLibText/DisplayUpdateProgressLibText.c b/MdeModulePkg/Library/DisplayUpdateProgressLibText/DisplayUpdateProgressLibText.c > new file mode 100644 > index 0000000000..7aca8b89d0 > --- /dev/null > +++ b/MdeModulePkg/Library/DisplayUpdateProgressLibText/DisplayUpdateProgressLibText.c > @@ -0,0 +1,174 @@ > +/** @file > + Provides services to display completion progress of a firmware update on a > + text console. > + > + 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/DebugLib.h> > +#include <Library/UefiBootServicesTableLib.h> > +#include <Library/UefiLib.h> > + > +// > +// Control Style. Set to 100 so it is reset on first call. > +// > +UINTN mPreviousProgress = 100; > + > +// > +// Text foreground color of progress bar > +// > +UINTN mProgressBarForegroundColor; > + > +/** > + Function indicates the current completion progress of a firmware update. > + Platform may override with its own specific function. > + > + @param[in] Completion A value between 0 and 100 indicating the current > + completion progress of a firmware update. This > + value must the the same or higher than previous > + calls to this service. The first call of 0 or a > + value of 0 after reaching a value of 100 resets > + the progress indicator to 0. > + @param[in] Color Color of the progress indicator. Only used when > + Completion is 0 to set the color of the progress > + indicator. If Color is NULL, then the default color > + is used. > + > + @retval EFI_SUCCESS Progress displayed successfully. > + @retval EFI_INVALID_PARAMETER Completion is not in range 0..100. > + @retval EFI_INVALID_PARAMETER Completion is less than Completion value from > + a previous call to this service. > + @retval EFI_NOT_READY The device used to indicate progress is not > + available. > +**/ > +EFI_STATUS > +EFIAPI > +DisplayUpdateProgress ( > + IN UINTN Completion, > + IN EFI_GRAPHICS_OUTPUT_BLT_PIXEL_UNION *Color OPTIONAL > + ) > +{ > + UINTN Index; > + UINTN CurrentAttribute; > + > + // > + // Check range > + // > + if (Completion > 100) { > + return EFI_INVALID_PARAMETER; > + } > + > + // > + // Check to see if this Completion percentage has already been displayed > + // > + if (Completion == mPreviousProgress) { > + return EFI_SUCCESS; > + } > + > + // > + // Do special init on first call of each progress session > + // > + if (mPreviousProgress == 100) { > + Print (L"\n"); > + > + // > + // Convert pixel color to text foreground color > + // > + if (Color == NULL) { > + mProgressBarForegroundColor = EFI_WHITE; > + } else { > + mProgressBarForegroundColor = EFI_BLACK; > + if (Color->Pixel.Blue >= 0x40) { > + mProgressBarForegroundColor |= EFI_BLUE; > + } > + if (Color->Pixel.Green >= 0x40) { > + mProgressBarForegroundColor |= EFI_GREEN; > + } > + if (Color->Pixel.Red >= 0x40) { > + mProgressBarForegroundColor |= EFI_RED; > + } > + if (Color->Pixel.Blue >= 0xC0 || Color->Pixel.Green >= 0xC0 || Color->Pixel.Red >= 0xC0) { > + mProgressBarForegroundColor |= EFI_BRIGHT; > + } > + if (mProgressBarForegroundColor == EFI_BLACK) { > + mProgressBarForegroundColor = EFI_WHITE; > + } > + } > + > + // > + // Clear previous > + // > + mPreviousProgress = 0; > + } > + > + // > + // Can not update progress bar if Completion is less than previous > + // > + if (Completion < mPreviousProgress) { > + DEBUG ((DEBUG_WARN, "WARNING: Completion (%d) should not be lesss than Previous (%d)!!!\n", Completion, mPreviousProgress)); > + return EFI_INVALID_PARAMETER; > + } > + > + // > + // Save current text color > + // > + CurrentAttribute = (UINTN)gST->ConOut->Mode->Attribute; > + > + // > + // Print progress percentage > + // > + Print (L"\rUpdate Progress - %3d%% ", Completion); > + > + // > + // Set progress bar color > + // > + gST->ConOut->SetAttribute ( > + gST->ConOut, > + EFI_TEXT_ATTR (mProgressBarForegroundColor, EFI_BLACK) > + ); > + > + // > + // Print completed portion of progress bar > + // > + for (Index = 0; Index < Completion / 2; Index++) { > + Print (L"%c", BLOCKELEMENT_FULL_BLOCK); > + } > + > + // > + // Restore text color > + // > + gST->ConOut->SetAttribute (gST->ConOut, CurrentAttribute); > + > + // > + // Print remaining portion of progress bar > + // > + for (; Index < 50; Index++) { > + Print (L"%c", BLOCKELEMENT_LIGHT_SHADE); > + } > + > + mPreviousProgress = Completion; > + > + return EFI_SUCCESS; > +} > diff --git a/MdeModulePkg/Library/DisplayUpdateProgressLibText/DisplayUpdateProgressLibText.inf b/MdeModulePkg/Library/DisplayUpdateProgressLibText/DisplayUpdateProgressLibText.inf > new file mode 100644 > index 0000000000..c3134439e4 > --- /dev/null > +++ b/MdeModulePkg/Library/DisplayUpdateProgressLibText/DisplayUpdateProgressLibText.inf > @@ -0,0 +1,53 @@ > +## @file > +# Provides services to display completion progress of a firmware update on a > +# text console. > +# > +# 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 = DisplayUpdateProgressLibText > + MODULE_UNI_FILE = DisplayUpdateProgressLibText.uni > + FILE_GUID = CDEF83AE-1900-4B41-BF47-AAE9BD729CA5 > + MODULE_TYPE = DXE_DRIVER > + VERSION_STRING = 1.0 > + LIBRARY_CLASS = DisplayUpdateProgressLib|DXE_DRIVER UEFI_DRIVER UEFI_APPLICATION > + > +# > +# The following information is for reference only and not required by the build tools. > +# > +# VALID_ARCHITECTURES = IA32 X64 IPF EBC > +# > + > +[Sources] > + DisplayUpdateProgressLibText.c > + > +[Packages] > + MdePkg/MdePkg.dec > + MdeModulePkg/MdeModulePkg.dec > + > +[LibraryClasses] > + DebugLib > + UefiBootServicesTableLib > + UefiLib > diff --git a/MdeModulePkg/Library/DisplayUpdateProgressLibText/DisplayUpdateProgressLibText.uni b/MdeModulePkg/Library/DisplayUpdateProgressLibText/DisplayUpdateProgressLibText.uni > new file mode 100644 > index 0000000000..3c783722bc > --- /dev/null > +++ b/MdeModulePkg/Library/DisplayUpdateProgressLibText/DisplayUpdateProgressLibText.uni > @@ -0,0 +1,18 @@ > +// /** @file > +// Provides services to display completion progress of a firmware update on a > +// text console. > +// > +// 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 display completion progress of a firmware update on a text console." > + > +#string STR_MODULE_DESCRIPTION #language en-US "Provides services to display completion progress of a firmware update on a text console." > diff --git a/MdeModulePkg/MdeModulePkg.dsc b/MdeModulePkg/MdeModulePkg.dsc > index ec24a50c7d..b4e8a703af 100644 > --- a/MdeModulePkg/MdeModulePkg.dsc > +++ b/MdeModulePkg/MdeModulePkg.dsc > @@ -108,6 +108,7 @@ [LibraryClasses] > CapsuleLib|MdeModulePkg/Library/DxeCapsuleLibNull/DxeCapsuleLibNull.inf > BmpSupportLib|MdeModulePkg/Library/BaseBmpSupportLib/BaseBmpSupportLib.inf > SafeIntLib|MdePkg/Library/BaseSafeIntLib/BaseSafeIntLib.inf > + DisplayUpdateProgressLib|MdeModulePkg/Library/DisplayUpdateProgressLibGraphics/DisplayUpdateProgressLibGraphics.inf > > [LibraryClasses.EBC.PEIM] > IoLib|MdePkg/Library/PeiIoLibCpuIo/PeiIoLibCpuIo.inf > @@ -327,6 +328,8 @@ [Components] > MdeModulePkg/Library/FrameBufferBltLib/FrameBufferBltLib.inf > MdeModulePkg/Library/NonDiscoverableDeviceRegistrationLib/NonDiscoverableDeviceRegistrationLib.inf > MdeModulePkg/Library/BaseBmpSupportLib/BaseBmpSupportLib.inf > + MdeModulePkg/Library/DisplayUpdateProgressLibGraphics/DisplayUpdateProgressLibGraphics.inf > + MdeModulePkg/Library/DisplayUpdateProgressLibText/DisplayUpdateProgressLibText.inf > > MdeModulePkg/Universal/BdsDxe/BdsDxe.inf > MdeModulePkg/Application/BootManagerMenuApp/BootManagerMenuApp.inf > -- > 2.14.2.windows.3 > > _______________________________________________ > edk2-devel mailing list > edk2-devel@lists.01.org > https://lists.01.org/mailman/listinfo/edk2-devel ^ permalink raw reply [flat|nested] 17+ messages in thread
* Re: [Patch v3 2/3] MdeModulePkg: Add DisplayUpdateProgressLib instances 2018-05-31 11:09 ` Ard Biesheuvel @ 2018-06-04 20:24 ` Kinney, Michael D 0 siblings, 0 replies; 17+ messages in thread From: Kinney, Michael D @ 2018-06-04 20:24 UTC (permalink / raw) To: Ard Biesheuvel, Leif Lindholm, Kinney, Michael D Cc: edk2-devel@lists.01.org, Dong, Eric, Zeng, Star Ard, There are a number of conditions that DisplayUpdateProgressLibGraphics will not display a Progress bar. * No GOP * No EDK II Boot Logo 2 Protocol * The EDK II Boot Logo 2 Protocol GetBootLogo() service does not return a logo If capsules are processed when only a text console is present, then the text version of the lib should be used. DisplayUpdateProgressLib|MdeModulePkg/Library/DisplayUpdateProgressLibText/DisplayUpdateProgressLibText.inf Best regards, Mike > -----Original Message----- > From: Ard Biesheuvel [mailto:ard.biesheuvel@linaro.org] > Sent: Thursday, May 31, 2018 4:09 AM > To: Kinney, Michael D <michael.d.kinney@intel.com>; Leif > Lindholm <leif.lindholm@linaro.org> > Cc: edk2-devel@lists.01.org; Dong, Eric > <eric.dong@intel.com>; Zeng, Star <star.zeng@intel.com> > Subject: Re: [edk2] [Patch v3 2/3] MdeModulePkg: Add > DisplayUpdateProgressLib instances > > (+ Leif) > > On 25 May 2018 at 08:15, Michael D Kinney > <michael.d.kinney@intel.com> wrote: > > https://bugzilla.tianocore.org/show_bug.cgi?id=801 > > > > Based on content from the following branch/commits: > > > https://github.com/Microsoft/MS_UEFI/tree/share/MsCapsul > eSupport > > > > Add DisplayUpdateProgressLib instances for text > consoles > > and graphical consoles. > > > > Hello Mike, > > Is it correct that DisplayUpdateProgressLibGraphics > shows no output at > all if no GOP instance is detected? > > The current FlashAccessLib implementation I have for > SynQuacer falls > back to console output in that case, so it would regress > to having no > visible progress indication whatsoever if I move it to > this library. > What do you recommend in this case? Can we use the > result code of the > progress reporting callback as an indication of a > missing GOP, and > retain the fallback in FlashAccessLib in this case? > > > > > Cc: Sean Brogan <sean.brogan@microsoft.com> > > Cc: Star Zeng <star.zeng@intel.com> > > Cc: Eric Dong <eric.dong@intel.com> > > Signed-off-by: Michael D Kinney > <michael.d.kinney@intel.com> > > Contributed-under: TianoCore Contribution Agreement > 1.1 > > --- > > .../DisplayUpdateProgressLibGraphics.c | > 475 +++++++++++++++++++++ > > .../DisplayUpdateProgressLibGraphics.inf | > 60 +++ > > .../DisplayUpdateProgressLibGraphics.uni | > 18 + > > .../DisplayUpdateProgressLibText.c | > 174 ++++++++ > > .../DisplayUpdateProgressLibText.inf | > 53 +++ > > .../DisplayUpdateProgressLibText.uni | > 18 + > > MdeModulePkg/MdeModulePkg.dsc | > 3 + > > 7 files changed, 801 insertions(+) > > create mode 100644 > MdeModulePkg/Library/DisplayUpdateProgressLibGraphics/Di > splayUpdateProgressLibGraphics.c > > create mode 100644 > MdeModulePkg/Library/DisplayUpdateProgressLibGraphics/Di > splayUpdateProgressLibGraphics.inf > > create mode 100644 > MdeModulePkg/Library/DisplayUpdateProgressLibGraphics/Di > splayUpdateProgressLibGraphics.uni > > create mode 100644 > MdeModulePkg/Library/DisplayUpdateProgressLibText/Displa > yUpdateProgressLibText.c > > create mode 100644 > MdeModulePkg/Library/DisplayUpdateProgressLibText/Displa > yUpdateProgressLibText.inf > > create mode 100644 > MdeModulePkg/Library/DisplayUpdateProgressLibText/Displa > yUpdateProgressLibText.uni > > > > diff --git > a/MdeModulePkg/Library/DisplayUpdateProgressLibGraphics/ > DisplayUpdateProgressLibGraphics.c > b/MdeModulePkg/Library/DisplayUpdateProgressLibGraphics/ > DisplayUpdateProgressLibGraphics.c > > new file mode 100644 > > index 0000000000..007522cea0 > > --- /dev/null > > +++ > b/MdeModulePkg/Library/DisplayUpdateProgressLibGraphics/ > DisplayUpdateProgressLibGraphics.c > > @@ -0,0 +1,475 @@ > > +/** @file > > + Provides services to display completion progress of > a firmware update on a > > + graphical console that supports the Graphics Output > Protocol. > > + > > + 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/BaseMemoryLib.h> > > +#include <Library/MemoryAllocationLib.h> > > +#include <Library/UefiBootServicesTableLib.h> > > +#include <Library/DebugLib.h> > > +#include <Library/BaseLib.h> > > +#include <Library/UefiLib.h> > > + > > +#include <Protocol/GraphicsOutput.h> > > +#include <Protocol/BootLogo2.h> > > + > > +// > > +// Values in percent of of logo height. > > +// > > +#define LOGO_BOTTOM_PADDING 20 > > +#define PROGRESS_BLOCK_HEIGHT 10 > > + > > +// > > +// Graphics Output Protocol instance to display > progress bar > > +// > > +EFI_GRAPHICS_OUTPUT_PROTOCOL *mGop = NULL; > > + > > +// > > +// Set to 100 percent so it is reset on first call. > > +// > > +UINTN mPreviousProgress = 100; > > + > > +// > > +// Display coordinates for the progress bar. > > +// > > +UINTN mStartX = 0; > > +UINTN mStartY = 0; > > + > > +// > > +// Width and height of the progress bar. > > +// > > +UINTN mBlockWidth = 0; > > +UINTN mBlockHeight = 0; > > + > > +// > > +// GOP bitmap of the progress bar. Initialized on > every new progress of 100% > > +// > > +EFI_GRAPHICS_OUTPUT_BLT_PIXEL *mBlockBitmap; > > + > > +// > > +// GOP bitmap of the progress bar backround. > Initialized once. > > +// > > +EFI_GRAPHICS_OUTPUT_BLT_PIXEL > *mProgressBarBackground; > > + > > +// > > +// Default mask used to detect the left, right , top, > and bottom of logo. Only > > +// green and blue pixels are used for logo detection. > > +// > > +const EFI_GRAPHICS_OUTPUT_BLT_PIXEL_UNION > mLogoDetectionColorMask = { > > + { > > + 0xFF, // Blue > > + 0xFF, // Green > > + 0x00, // Red > > + 0x00 // Reserved > > + } > > +}; > > + > > +// > > +// Background color of progress bar. Grey. > > +// > > +const EFI_GRAPHICS_OUTPUT_BLT_PIXEL_UNION > mProgressBarBackgroundColor = { > > + { > > + 0x80, // Blue > > + 0x80, // Green > > + 0x80, // Red > > + 0x00 // Reserved > > + } > > +}; > > + > > +// > > +// Default color of progress completion. White. > > +// > > +const EFI_GRAPHICS_OUTPUT_BLT_PIXEL_UNION > mProgressBarDefaultColor = { > > + { > > + 0xFF, // Blue > > + 0xFF, // Green > > + 0xFF, // Red > > + 0x00 // Reserved > > + } > > +}; > > + > > +// > > +// Set to TRUE if a valid Graphics Output Protocol is > found and the progress > > +// bar fits under the boot logo using the current > graphics mode. > > +// > > +BOOLEAN mGraphicsGood = FALSE; > > + > > +/* > > + Internal function used to find the bounds of the > white logo (on black or > > + red background). > > + > > + These bounds are then computed to find the block > size, 0%, 100%, etc. > > + > > +*/ > > +VOID > > +FindDim ( > > + VOID > > + ) > > +{ > > + EFI_STATUS Status; > > + INTN LogoX; > > + INTN LogoStartX; > > + INTN LogoEndX; > > + INTN LogoY; > > + INTN LogoStartY; > > + INTN LogoEndY; > > + UINTN OffsetX; > // Logo screen coordinate > > + UINTN OffsetY; > // Logo screen coordinate > > + UINTN Width; > // Width of logo in pixels > > + UINTN Height; > // Height of logo in pixels > > + EFI_GRAPHICS_OUTPUT_BLT_PIXEL *Logo; > > + EDKII_BOOT_LOGO2_PROTOCOL *BootLogo; > > + EFI_GRAPHICS_OUTPUT_BLT_PIXEL_UNION *Pixel; > > + > > + Logo = NULL; > > + BootLogo = NULL; > > + > > + // > > + // Return if a Graphics Output Protocol ha snot > been found. > > + // > > + if (mGop == NULL) { > > + DEBUG ((DEBUG_ERROR, "No GOP found. No progress > bar support. \n")); > > + return; > > + } > > + > > + // > > + // Get boot logo protocol so we know where on the > screen to grab > > + // > > + Status = gBS->LocateProtocol ( > > + &gEdkiiBootLogo2ProtocolGuid, > > + NULL, > > + (VOID **)&BootLogo > > + ); > > + if ((BootLogo == NULL) || (EFI_ERROR (Status))) { > > + DEBUG ((DEBUG_ERROR, "Failed to locate > gEdkiiBootLogo2ProtocolGuid. No Progress bar support. > \n", Status)); > > + return; > > + } > > + > > + // > > + // Get logo location and size > > + // > > + Status = BootLogo->GetBootLogo ( > > + BootLogo, > > + &Logo, > > + &OffsetX, > > + &OffsetY, > > + &Width, > > + &Height > > + ); > > + if (EFI_ERROR (Status)) { > > + DEBUG ((DEBUG_ERROR, "Failed to Get Boot Logo > Status = %r. No Progress bar support. \n", Status)); > > + return; > > + } > > + > > + // > > + // Within logo buffer find where the actual logo > starts/ends > > + // > > + LogoEndX = 0; > > + LogoEndY = 0; > > + > > + // > > + // Find left side of logo in logo coordinates > > + // > > + for (LogoX = 0, LogoStartX = Width; LogoX < > LogoStartX; LogoX++) { > > + Pixel = (EFI_GRAPHICS_OUTPUT_BLT_PIXEL_UNION > *)(Logo + LogoX); > > + for (LogoY = 0; LogoY < (INTN)Height; LogoY++) { > > + if ((Pixel->Raw & mLogoDetectionColorMask.Raw) > != 0x0) { > > + LogoStartX = LogoX; > > + // > > + // For loop searches from right side back to > this column. > > + // > > + LogoEndX = LogoX; > > + DEBUG ((DEBUG_INFO, "StartX found at (%d, %d) > Color is: 0x%X \n", LogoX, LogoY, Pixel->Raw)); > > + break; > > + } > > + Pixel = Pixel + Width; > > + } > > + } > > + > > + // > > + // Find right side of logo > > + // > > + for (LogoX = Width - 1; LogoX >= LogoEndX; LogoX--) > { > > + Pixel = (EFI_GRAPHICS_OUTPUT_BLT_PIXEL_UNION > *)(Logo + LogoX); > > + for (LogoY = 0; LogoY < (INTN)Height; LogoY++) { > > + if ((Pixel->Raw & mLogoDetectionColorMask.Raw) > != 0x0) { > > + LogoEndX = LogoX; > > + DEBUG ((DEBUG_INFO, "EndX found at (%d, %d) > Color is: 0x%X \n", LogoX, LogoY, Pixel->Raw)); > > + break; > > + } > > + Pixel = Pixel + Width; > > + } > > + } > > + > > + // > > + // Compute mBlockWidth > > + // > > + mBlockWidth = ((LogoEndX - LogoStartX) + 99) / 100; > > + > > + // > > + // Adjust mStartX based on block width so it is > centered under logo > > + // > > + mStartX = LogoStartX + OffsetX - (((mBlockWidth * > 100) - (LogoEndX - LogoStartX)) / 2); > > + DEBUG ((DEBUG_INFO, "mBlockWidth set to 0x%X\n", > mBlockWidth)); > > + DEBUG ((DEBUG_INFO, "mStartX set to 0x%X\n", > mStartX)); > > + > > + // > > + // Find the top of the logo > > + // > > + for (LogoY = 0, LogoStartY = Height; LogoY < > LogoStartY; LogoY++) { > > + Pixel = (EFI_GRAPHICS_OUTPUT_BLT_PIXEL_UNION > *)(Logo + (Width * LogoY)); > > + for (LogoX = 0; LogoX < (INTN)Width; LogoX++) { > > + //not black or red > > + if ((Pixel->Raw & mLogoDetectionColorMask.Raw) > != 0x0) { > > + LogoStartY = LogoY; > > + LogoEndY = LogoY; //for next loop will search > from bottom side back to this row. > > + DEBUG ((DEBUG_INFO, "StartY found at (%d, %d) > Color is: 0x%X \n", LogoX, LogoY, Pixel->Raw)); > > + break; > > + } > > + Pixel++; > > + } > > + } > > + > > + // > > + // Find the bottom of the logo > > + // > > + for (LogoY = Height - 1; LogoY >= LogoEndY; LogoY-- > ) { > > + Pixel = (EFI_GRAPHICS_OUTPUT_BLT_PIXEL_UNION > *)(Logo + (Width * LogoY)); > > + for (LogoX = 0; LogoX < (INTN)Width; LogoX++) { > > + if ((Pixel->Raw & mLogoDetectionColorMask.Raw) > != 0x0) { > > + LogoEndY = LogoY; > > + DEBUG ((DEBUG_INFO, "EndY found at (%d, %d) > Color is: 0x%X \n", LogoX, LogoY, Pixel->Raw)); > > + break; > > + } > > + Pixel++; > > + } > > + } > > + > > + // > > + // Compute bottom padding (distance between logo > bottom and progress bar) > > + // > > + mStartY = (((LogoEndY - LogoStartY) * > LOGO_BOTTOM_PADDING) / 100) + LogoEndY + OffsetY; > > + > > + // > > + // Compute progress bar height > > + // > > + mBlockHeight = (((LogoEndY - LogoStartY) * > PROGRESS_BLOCK_HEIGHT) / 100); > > + > > + DEBUG ((DEBUG_INFO, "mBlockHeight set to 0x%X\n", > mBlockHeight)); > > + > > + // > > + // Create progress bar background (one time init). > > + // > > + mProgressBarBackground = AllocatePool (mBlockWidth > * 100 * mBlockHeight * sizeof > (EFI_GRAPHICS_OUTPUT_BLT_PIXEL)); > > + if (mProgressBarBackground == NULL) { > > + DEBUG ((DEBUG_ERROR, "Failed to allocate progress > bar background\n")); > > + return; > > + } > > + > > + // > > + // Fill the progress bar with the background color > > + // > > + SetMem32 ( > > + mProgressBarBackground, > > + (mBlockWidth * 100 * mBlockHeight * sizeof > (EFI_GRAPHICS_OUTPUT_BLT_PIXEL)), > > + mProgressBarBackgroundColor.Raw > > + ); > > + > > + // > > + // Allocate mBlockBitmap > > + // > > + mBlockBitmap = AllocatePool (mBlockWidth * > mBlockHeight * sizeof (EFI_GRAPHICS_OUTPUT_BLT_PIXEL)); > > + if (mBlockBitmap == NULL) { > > + FreePool (mProgressBarBackground); > > + DEBUG ((DEBUG_ERROR, "Failed to allocate > block\n")); > > + return; > > + } > > + > > + // > > + // Check screen width and height and make sure it > fits. > > + // > > + if ((mBlockHeight > Height) || (mBlockWidth > > Width) || (mBlockHeight < 1) || (mBlockWidth < 1)) { > > + DEBUG ((DEBUG_ERROR, "DisplayUpdateProgressLib - > Progress - Failed to get valid width and height.\n")); > > + DEBUG ((DEBUG_ERROR, "DisplayUpdateProgressLib - > Progress - mBlockHeight: 0x%X mBlockWidth: 0x%X.\n", > mBlockHeight, mBlockWidth)); > > + FreePool (mProgressBarBackground); > > + FreePool (mBlockBitmap); > > + return; > > + } > > + > > + mGraphicsGood = TRUE; > > +} > > + > > +/** > > + Function indicates the current completion progress > of a firmware update. > > + Platform may override with its own specific > function. > > + > > + @param[in] Completion A value between 0 and 100 > indicating the current > > + completion progress of a > firmware update. This > > + value must the the same or > higher than previous > > + calls to this service. The > first call of 0 or a > > + value of 0 after reaching a > value of 100 resets > > + the progress indicator to 0. > > + @param[in] Color Color of the progress > indicator. Only used when > > + Completion is 0 to set the > color of the progress > > + indicator. If Color is > NULL, then the default color > > + is used. > > + > > + @retval EFI_SUCCESS Progress displayed > successfully. > > + @retval EFI_INVALID_PARAMETER Completion is not in > range 0..100. > > + @retval EFI_INVALID_PARAMETER Completion is less > than Completion value from > > + a previous call to > this service. > > + @retval EFI_NOT_READY The device used to > indicate progress is not > > + available. > > +**/ > > +EFI_STATUS > > +EFIAPI > > +DisplayUpdateProgress ( > > + IN UINTN Completion, > > + IN EFI_GRAPHICS_OUTPUT_BLT_PIXEL_UNION *Color > OPTIONAL > > + ) > > +{ > > + EFI_STATUS Status; > > + UINTN PreX; > > + UINTN Index; > > + > > + // > > + // Check range > > + // > > + if (Completion > 100) { > > + return EFI_INVALID_PARAMETER; > > + } > > + > > + // > > + // Check to see if this Completion percentage has > already been displayed > > + // > > + if (Completion == mPreviousProgress) { > > + return EFI_SUCCESS; > > + } > > + > > + // > > + // Find Graphics Output Protocol if not already > set. 1 time. > > + // > > + if (mGop == NULL) { > > + Status = gBS->HandleProtocol ( > > + gST->ConsoleOutHandle, > > + &gEfiGraphicsOutputProtocolGuid, > > + (VOID**)&mGop > > + ); > > + if (EFI_ERROR (Status)) { > > + Status = gBS->LocateProtocol > (&gEfiGraphicsOutputProtocolGuid, NULL, (VOID **)&mGop); > > + if (EFI_ERROR (Status)) { > > + mGop = NULL; > > + DEBUG ((DEBUG_ERROR, "Show Progress Function > could not locate GOP. Status = %r\n", Status)); > > + return EFI_NOT_READY; > > + } > > + } > > + > > + // > > + // Run once > > + // > > + FindDim (); > > + } > > + > > + // > > + // Make sure a valid start, end, and size info are > available (find the Logo) > > + // > > + if (!mGraphicsGood) { > > + DEBUG ((DEBUG_INFO, "Graphics Not Good. Not > doing any onscreen visual display\n")); > > + return EFI_NOT_READY; > > + } > > + > > + // > > + // Do special init on first call of each progress > session > > + // > > + if (mPreviousProgress == 100) { > > + // > > + // Draw progress bar background > > + // > > + mGop->Blt ( > > + mGop, > > + mProgressBarBackground, > > + EfiBltBufferToVideo, > > + 0, > > + 0, > > + mStartX, > > + mStartY, > > + (mBlockWidth * 100), > > + mBlockHeight, > > + 0 > > + ); > > + > > + DEBUG ((DEBUG_VERBOSE, "Color is 0x%X\n", > > + (Color == NULL) ? mProgressBarDefaultColor.Raw > : Color->Raw > > + )); > > + > > + // > > + // Update block bitmap with correct color > > + // > > + SetMem32 ( > > + mBlockBitmap, > > + (mBlockWidth * mBlockHeight * sizeof > (EFI_GRAPHICS_OUTPUT_BLT_PIXEL)), > > + (Color == NULL) ? mProgressBarDefaultColor.Raw > : Color->Raw > > + ); > > + > > + // > > + // Clear previous > > + // > > + mPreviousProgress = 0; > > + } > > + > > + // > > + // Can not update progress bar if Completion is > less than previous > > + // > > + if (Completion < mPreviousProgress) { > > + DEBUG ((DEBUG_WARN, "WARNING: Completion (%d) > should not be lesss than Previous (%d)!!!\n", > Completion, mPreviousProgress)); > > + return EFI_INVALID_PARAMETER; > > + } > > + > > + PreX = ((mPreviousProgress * mBlockWidth) + > mStartX); > > + for (Index = 0; Index < (Completion - > mPreviousProgress); Index++) { > > + // > > + // Show progress by coloring new area > > + // > > + mGop->Blt ( > > + mGop, > > + mBlockBitmap, > > + EfiBltBufferToVideo, > > + 0, > > + 0, > > + PreX, > > + mStartY, > > + mBlockWidth, > > + mBlockHeight, > > + 0 > > + ); > > + PreX += mBlockWidth; > > + } > > + > > + mPreviousProgress = Completion; > > + > > + return EFI_SUCCESS; > > +} > > diff --git > a/MdeModulePkg/Library/DisplayUpdateProgressLibGraphics/ > DisplayUpdateProgressLibGraphics.inf > b/MdeModulePkg/Library/DisplayUpdateProgressLibGraphics/ > DisplayUpdateProgressLibGraphics.inf > > new file mode 100644 > > index 0000000000..ada6076770 > > --- /dev/null > > +++ > b/MdeModulePkg/Library/DisplayUpdateProgressLibGraphics/ > DisplayUpdateProgressLibGraphics.inf > > @@ -0,0 +1,60 @@ > > +## @file > > +# Provides services to display completion progress > of a firmware update on a > > +# graphical console that supports the Graphics > Output Protocol. > > +# > > +# 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 = DisplayUpdateProgressLibGraphics > > + MODULE_UNI_FILE = > DisplayUpdateProgressLibGraphics.uni > > + FILE_GUID = 319E9E37-B2D6-4699-90F3- > B8B72B6D4CBD > > + MODULE_TYPE = DXE_DRIVER > > + VERSION_STRING = 1.0 > > + LIBRARY_CLASS = > DisplayUpdateProgressLib|DXE_DRIVER UEFI_DRIVER > UEFI_APPLICATION > > + > > +# > > +# The following information is for reference only and > not required by the build tools. > > +# > > +# VALID_ARCHITECTURES = IA32 X64 IPF EBC > > +# > > + > > +[Sources] > > + DisplayUpdateProgressLibGraphics.c > > + > > +[Packages] > > + MdePkg/MdePkg.dec > > + MdeModulePkg/MdeModulePkg.dec > > + > > +[LibraryClasses] > > + BaseMemoryLib > > + DebugLib > > + MemoryAllocationLib > > + UefiBootServicesTableLib > > + BaseLib > > + UefiLib > > + > > +[Protocols] > > + gEfiGraphicsOutputProtocolGuid # CONSUMES > > + gEdkiiBootLogo2ProtocolGuid # CONSUMES > > diff --git > a/MdeModulePkg/Library/DisplayUpdateProgressLibGraphics/ > DisplayUpdateProgressLibGraphics.uni > b/MdeModulePkg/Library/DisplayUpdateProgressLibGraphics/ > DisplayUpdateProgressLibGraphics.uni > > new file mode 100644 > > index 0000000000..d7da641338 > > --- /dev/null > > +++ > b/MdeModulePkg/Library/DisplayUpdateProgressLibGraphics/ > DisplayUpdateProgressLibGraphics.uni > > @@ -0,0 +1,18 @@ > > +// /** @file > > +// Provides services to display completion progress > of a firmware update on a > > +// graphical console that supports the Graphics > Output Protocol. > > +// > > +// 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 display completion progress of a > firmware update on a graphical console that supports the > Graphics Output Protocol." > > + > > +#string STR_MODULE_DESCRIPTION #language en-US > "Provides services to display completion progress of a > firmware update on a graphical console that supports the > Graphics Output Protocol." > > diff --git > a/MdeModulePkg/Library/DisplayUpdateProgressLibText/Disp > layUpdateProgressLibText.c > b/MdeModulePkg/Library/DisplayUpdateProgressLibText/Disp > layUpdateProgressLibText.c > > new file mode 100644 > > index 0000000000..7aca8b89d0 > > --- /dev/null > > +++ > b/MdeModulePkg/Library/DisplayUpdateProgressLibText/Disp > layUpdateProgressLibText.c > > @@ -0,0 +1,174 @@ > > +/** @file > > + Provides services to display completion progress of > a firmware update on a > > + text console. > > + > > + 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/DebugLib.h> > > +#include <Library/UefiBootServicesTableLib.h> > > +#include <Library/UefiLib.h> > > + > > +// > > +// Control Style. Set to 100 so it is reset on first > call. > > +// > > +UINTN mPreviousProgress = 100; > > + > > +// > > +// Text foreground color of progress bar > > +// > > +UINTN mProgressBarForegroundColor; > > + > > +/** > > + Function indicates the current completion progress > of a firmware update. > > + Platform may override with its own specific > function. > > + > > + @param[in] Completion A value between 0 and 100 > indicating the current > > + completion progress of a > firmware update. This > > + value must the the same or > higher than previous > > + calls to this service. The > first call of 0 or a > > + value of 0 after reaching a > value of 100 resets > > + the progress indicator to 0. > > + @param[in] Color Color of the progress > indicator. Only used when > > + Completion is 0 to set the > color of the progress > > + indicator. If Color is > NULL, then the default color > > + is used. > > + > > + @retval EFI_SUCCESS Progress displayed > successfully. > > + @retval EFI_INVALID_PARAMETER Completion is not in > range 0..100. > > + @retval EFI_INVALID_PARAMETER Completion is less > than Completion value from > > + a previous call to > this service. > > + @retval EFI_NOT_READY The device used to > indicate progress is not > > + available. > > +**/ > > +EFI_STATUS > > +EFIAPI > > +DisplayUpdateProgress ( > > + IN UINTN Completion, > > + IN EFI_GRAPHICS_OUTPUT_BLT_PIXEL_UNION *Color > OPTIONAL > > + ) > > +{ > > + UINTN Index; > > + UINTN CurrentAttribute; > > + > > + // > > + // Check range > > + // > > + if (Completion > 100) { > > + return EFI_INVALID_PARAMETER; > > + } > > + > > + // > > + // Check to see if this Completion percentage has > already been displayed > > + // > > + if (Completion == mPreviousProgress) { > > + return EFI_SUCCESS; > > + } > > + > > + // > > + // Do special init on first call of each progress > session > > + // > > + if (mPreviousProgress == 100) { > > + Print (L"\n"); > > + > > + // > > + // Convert pixel color to text foreground color > > + // > > + if (Color == NULL) { > > + mProgressBarForegroundColor = EFI_WHITE; > > + } else { > > + mProgressBarForegroundColor = EFI_BLACK; > > + if (Color->Pixel.Blue >= 0x40) { > > + mProgressBarForegroundColor |= EFI_BLUE; > > + } > > + if (Color->Pixel.Green >= 0x40) { > > + mProgressBarForegroundColor |= EFI_GREEN; > > + } > > + if (Color->Pixel.Red >= 0x40) { > > + mProgressBarForegroundColor |= EFI_RED; > > + } > > + if (Color->Pixel.Blue >= 0xC0 || Color- > >Pixel.Green >= 0xC0 || Color->Pixel.Red >= 0xC0) { > > + mProgressBarForegroundColor |= EFI_BRIGHT; > > + } > > + if (mProgressBarForegroundColor == EFI_BLACK) { > > + mProgressBarForegroundColor = EFI_WHITE; > > + } > > + } > > + > > + // > > + // Clear previous > > + // > > + mPreviousProgress = 0; > > + } > > + > > + // > > + // Can not update progress bar if Completion is > less than previous > > + // > > + if (Completion < mPreviousProgress) { > > + DEBUG ((DEBUG_WARN, "WARNING: Completion (%d) > should not be lesss than Previous (%d)!!!\n", > Completion, mPreviousProgress)); > > + return EFI_INVALID_PARAMETER; > > + } > > + > > + // > > + // Save current text color > > + // > > + CurrentAttribute = (UINTN)gST->ConOut->Mode- > >Attribute; > > + > > + // > > + // Print progress percentage > > + // > > + Print (L"\rUpdate Progress - %3d%% ", Completion); > > + > > + // > > + // Set progress bar color > > + // > > + gST->ConOut->SetAttribute ( > > + gST->ConOut, > > + EFI_TEXT_ATTR > (mProgressBarForegroundColor, EFI_BLACK) > > + ); > > + > > + // > > + // Print completed portion of progress bar > > + // > > + for (Index = 0; Index < Completion / 2; Index++) { > > + Print (L"%c", BLOCKELEMENT_FULL_BLOCK); > > + } > > + > > + // > > + // Restore text color > > + // > > + gST->ConOut->SetAttribute (gST->ConOut, > CurrentAttribute); > > + > > + // > > + // Print remaining portion of progress bar > > + // > > + for (; Index < 50; Index++) { > > + Print (L"%c", BLOCKELEMENT_LIGHT_SHADE); > > + } > > + > > + mPreviousProgress = Completion; > > + > > + return EFI_SUCCESS; > > +} > > diff --git > a/MdeModulePkg/Library/DisplayUpdateProgressLibText/Disp > layUpdateProgressLibText.inf > b/MdeModulePkg/Library/DisplayUpdateProgressLibText/Disp > layUpdateProgressLibText.inf > > new file mode 100644 > > index 0000000000..c3134439e4 > > --- /dev/null > > +++ > b/MdeModulePkg/Library/DisplayUpdateProgressLibText/Disp > layUpdateProgressLibText.inf > > @@ -0,0 +1,53 @@ > > +## @file > > +# Provides services to display completion progress > of a firmware update on a > > +# text console. > > +# > > +# 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 = DisplayUpdateProgressLibText > > + MODULE_UNI_FILE = DisplayUpdateProgressLibText.uni > > + FILE_GUID = CDEF83AE-1900-4B41-BF47- > AAE9BD729CA5 > > + MODULE_TYPE = DXE_DRIVER > > + VERSION_STRING = 1.0 > > + LIBRARY_CLASS = > DisplayUpdateProgressLib|DXE_DRIVER UEFI_DRIVER > UEFI_APPLICATION > > + > > +# > > +# The following information is for reference only and > not required by the build tools. > > +# > > +# VALID_ARCHITECTURES = IA32 X64 IPF EBC > > +# > > + > > +[Sources] > > + DisplayUpdateProgressLibText.c > > + > > +[Packages] > > + MdePkg/MdePkg.dec > > + MdeModulePkg/MdeModulePkg.dec > > + > > +[LibraryClasses] > > + DebugLib > > + UefiBootServicesTableLib > > + UefiLib > > diff --git > a/MdeModulePkg/Library/DisplayUpdateProgressLibText/Disp > layUpdateProgressLibText.uni > b/MdeModulePkg/Library/DisplayUpdateProgressLibText/Disp > layUpdateProgressLibText.uni > > new file mode 100644 > > index 0000000000..3c783722bc > > --- /dev/null > > +++ > b/MdeModulePkg/Library/DisplayUpdateProgressLibText/Disp > layUpdateProgressLibText.uni > > @@ -0,0 +1,18 @@ > > +// /** @file > > +// Provides services to display completion progress > of a firmware update on a > > +// text console. > > +// > > +// 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 display completion progress of a > firmware update on a text console." > > + > > +#string STR_MODULE_DESCRIPTION #language en-US > "Provides services to display completion progress of a > firmware update on a text console." > > diff --git a/MdeModulePkg/MdeModulePkg.dsc > b/MdeModulePkg/MdeModulePkg.dsc > > index ec24a50c7d..b4e8a703af 100644 > > --- a/MdeModulePkg/MdeModulePkg.dsc > > +++ b/MdeModulePkg/MdeModulePkg.dsc > > @@ -108,6 +108,7 @@ [LibraryClasses] > > > CapsuleLib|MdeModulePkg/Library/DxeCapsuleLibNull/DxeCap > suleLibNull.inf > > > BmpSupportLib|MdeModulePkg/Library/BaseBmpSupportLib/Bas > eBmpSupportLib.inf > > > SafeIntLib|MdePkg/Library/BaseSafeIntLib/BaseSafeIntLib. > inf > > + > DisplayUpdateProgressLib|MdeModulePkg/Library/DisplayUpd > ateProgressLibGraphics/DisplayUpdateProgressLibGraphics. > inf > > > > [LibraryClasses.EBC.PEIM] > > > IoLib|MdePkg/Library/PeiIoLibCpuIo/PeiIoLibCpuIo.inf > > @@ -327,6 +328,8 @@ [Components] > > > MdeModulePkg/Library/FrameBufferBltLib/FrameBufferBltLib > .inf > > > MdeModulePkg/Library/NonDiscoverableDeviceRegistrationLi > b/NonDiscoverableDeviceRegistrationLib.inf > > > MdeModulePkg/Library/BaseBmpSupportLib/BaseBmpSupportLib > .inf > > + > MdeModulePkg/Library/DisplayUpdateProgressLibGraphics/Di > splayUpdateProgressLibGraphics.inf > > + > MdeModulePkg/Library/DisplayUpdateProgressLibText/Displa > yUpdateProgressLibText.inf > > > > MdeModulePkg/Universal/BdsDxe/BdsDxe.inf > > > MdeModulePkg/Application/BootManagerMenuApp/BootManagerM > enuApp.inf > > -- > > 2.14.2.windows.3 > > > > _______________________________________________ > > edk2-devel mailing list > > edk2-devel@lists.01.org > > https://lists.01.org/mailman/listinfo/edk2-devel ^ permalink raw reply [flat|nested] 17+ messages in thread
* [Patch v3 3/3] SignedCapsulePkg/PlatformFlashAccessLib: Add progress API 2018-05-25 6:15 [Patch v3 0/3] Add DisplayUpdateProgressLib for capsules Michael D Kinney 2018-05-25 6:15 ` [Patch v3 1/3] MdeModulePkg: Add DisplayUpdateProgressLib class Michael D Kinney 2018-05-25 6:15 ` [Patch v3 2/3] MdeModulePkg: Add DisplayUpdateProgressLib instances Michael D Kinney @ 2018-05-25 6:15 ` Michael D Kinney 2018-05-28 19:18 ` Yao, Jiewen 2018-05-28 19:07 ` [Patch v3 0/3] Add DisplayUpdateProgressLib for capsules Yao, Jiewen 2018-05-29 9:51 ` Ard Biesheuvel 4 siblings, 1 reply; 17+ messages in thread From: Michael D Kinney @ 2018-05-25 6:15 UTC (permalink / raw) To: edk2-devel; +Cc: Jiewen Yao https://bugzilla.tianocore.org/show_bug.cgi?id=801 Add a new API to the PlatformFlashAccessLib that passes in an optional Progress() function along with a start and end percentage to call the Progress() function with. If the Progress() function is not NULL, then it is the Progress() function that was passed into the Firmware Management Protocol SetImage() services and is used to update the user on the progress as a firmware device is updated with a firmware image. Implementations of the PlatformFlashAccessLib are recommended to call the Progress() function as work is performed to update to contents of a firmware storage device. Cc: Jiewen Yao <jiewen.yao@intel.com> Signed-off-by: Michael D Kinney <michael.d.kinney@intel.com> Contributed-under: TianoCore Contribution Agreement 1.1 --- .../Include/Library/PlatformFlashAccessLib.h | 49 ++++++++++++++- .../PlatformFlashAccessLibNull.c | 70 +++++++++++++++++++--- 2 files changed, 110 insertions(+), 9 deletions(-) diff --git a/SignedCapsulePkg/Include/Library/PlatformFlashAccessLib.h b/SignedCapsulePkg/Include/Library/PlatformFlashAccessLib.h index 0a8858e4c4..e3308251c2 100644 --- a/SignedCapsulePkg/Include/Library/PlatformFlashAccessLib.h +++ b/SignedCapsulePkg/Include/Library/PlatformFlashAccessLib.h @@ -1,7 +1,7 @@ /** @file Platform flash device access library. - Copyright (c) 2016, Intel Corporation. All rights reserved.<BR> + Copyright (c) 2016 - 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 @@ -16,6 +16,8 @@ #ifndef __PLATFORM_FLASH_ACCESS_LIB_H__ #define __PLATFORM_FLASH_ACCESS_LIB_H__ +#include <Protocol/FirmwareManagement.h> + typedef enum { FlashAddressTypeRelativeAddress, FlashAddressTypeAbsoluteAddress, @@ -31,7 +33,7 @@ typedef enum { } PLATFORM_FIRMWARE_TYPE; /** - Perform flash write opreation. + Perform flash write operation. @param[in] FirmwareType The type of firmware. @param[in] FlashAddress The address of flash device to be accessed. @@ -54,4 +56,47 @@ PerformFlashWrite ( IN UINTN Length ); +/** + Perform flash write operation with progress indicator. The start and end + completion percentage values are passed into this function. If the requested + flash write operation is broken up, then completion percentage between the + start and end values may be passed to the provided Progress function. The + caller of this function is required to call the Progress function for the + start and end completion percentage values. This allows the Progress, + StartPercentage, and EndPercentage parameters to be ignored if the requested + flash write operation can not be broken up + + @param[in] FirmwareType The type of firmware. + @param[in] FlashAddress The address of flash device to be accessed. + @param[in] FlashAddressType The type of flash device address. + @param[in] Buffer The pointer to the data buffer. + @param[in] Length The length of data buffer in bytes. + @param[in] Progress A function used report the progress of the + firmware update. This is an optional parameter + that may be NULL. + @param[in] StartPercentage The start completion percentage value that may + be used to report progress during the flash + write operation. + @param[in] EndPercentage The end completion percentage value that may + be used to report progress during the flash + write operation. + + @retval EFI_SUCCESS The operation returns successfully. + @retval EFI_WRITE_PROTECTED The flash device is read only. + @retval EFI_UNSUPPORTED The flash device access is unsupported. + @retval EFI_INVALID_PARAMETER The input parameter is not valid. +**/ +EFI_STATUS +EFIAPI +PerformFlashWriteWithProgress ( + IN PLATFORM_FIRMWARE_TYPE FirmwareType, + IN EFI_PHYSICAL_ADDRESS FlashAddress, + IN FLASH_ADDRESS_TYPE FlashAddressType, + IN VOID *Buffer, + IN UINTN Length, + IN EFI_FIRMWARE_MANAGEMENT_UPDATE_IMAGE_PROGRESS Progress, OPTIONAL + IN UINTN StartPercentage, + IN UINTN EndPercentage + ); + #endif diff --git a/SignedCapsulePkg/Library/PlatformFlashAccessLibNull/PlatformFlashAccessLibNull.c b/SignedCapsulePkg/Library/PlatformFlashAccessLibNull/PlatformFlashAccessLibNull.c index b34ebbba1e..854f108cf4 100644 --- a/SignedCapsulePkg/Library/PlatformFlashAccessLibNull/PlatformFlashAccessLibNull.c +++ b/SignedCapsulePkg/Library/PlatformFlashAccessLibNull/PlatformFlashAccessLibNull.c @@ -1,7 +1,7 @@ /** @file Platform flash device access library NULL instance. - Copyright (c) 2016, Intel Corporation. All rights reserved.<BR> + Copyright (c) 2016 - 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 @@ -20,7 +20,57 @@ UINT64 mInternalFdAddress; /** - Perform flash write opreation. + Perform flash write operation with progress indicator. The start and end + completion percentage values are passed into this function. If the requested + flash write operation is broken up, then completion percentage between the + start and end values may be passed to the provided Progress function. The + caller of this function is required to call the Progress function for the + start and end completion percentage values. This allows the Progress, + StartPercentage, and EndPercentage parameters to be ignored if the requested + flash write operation can not be broken up + + @param[in] FirmwareType The type of firmware. + @param[in] FlashAddress The address of flash device to be accessed. + @param[in] FlashAddressType The type of flash device address. + @param[in] Buffer The pointer to the data buffer. + @param[in] Length The length of data buffer in bytes. + @param[in] Progress A function used report the progress of the + firmware update. This is an optional parameter + that may be NULL. + @param[in] StartPercentage The start completion percentage value that may + be used to report progress during the flash + write operation. + @param[in] EndPercentage The end completion percentage value that may + be used to report progress during the flash + write operation. + + @retval EFI_SUCCESS The operation returns successfully. + @retval EFI_WRITE_PROTECTED The flash device is read only. + @retval EFI_UNSUPPORTED The flash device access is unsupported. + @retval EFI_INVALID_PARAMETER The input parameter is not valid. +**/ +EFI_STATUS +EFIAPI +PerformFlashWriteWithProgress ( + IN PLATFORM_FIRMWARE_TYPE FirmwareType, + IN EFI_PHYSICAL_ADDRESS FlashAddress, + IN FLASH_ADDRESS_TYPE FlashAddressType, + IN VOID *Buffer, + IN UINTN Length, + IN EFI_FIRMWARE_MANAGEMENT_UPDATE_IMAGE_PROGRESS Progress, OPTIONAL + IN UINTN StartPercentage, + IN UINTN EndPercentage + ) +{ + if (FlashAddressType == FlashAddressTypeRelativeAddress) { + FlashAddress = FlashAddress + mInternalFdAddress; + } + CopyMem((VOID *)(UINTN)(FlashAddress), Buffer, Length); + return EFI_SUCCESS; +} + +/** + Perform flash write operation. @param[in] FirmwareType The type of firmware. @param[in] FlashAddress The address of flash device to be accessed. @@ -43,9 +93,15 @@ PerformFlashWrite ( IN UINTN Length ) { - if (FlashAddressType == FlashAddressTypeRelativeAddress) { - FlashAddress = FlashAddress + mInternalFdAddress; - } - CopyMem((VOID *)(UINTN)(FlashAddress), Buffer, Length); - return EFI_SUCCESS; + return PerformFlashWriteWithProgress ( + FirmwareType, + FlashAddress, + FlashAddressType, + Buffer, + Length, + NULL, + 0, + 0 + ); } + -- 2.14.2.windows.3 ^ permalink raw reply related [flat|nested] 17+ messages in thread
* Re: [Patch v3 3/3] SignedCapsulePkg/PlatformFlashAccessLib: Add progress API 2018-05-25 6:15 ` [Patch v3 3/3] SignedCapsulePkg/PlatformFlashAccessLib: Add progress API Michael D Kinney @ 2018-05-28 19:18 ` Yao, Jiewen 0 siblings, 0 replies; 17+ messages in thread From: Yao, Jiewen @ 2018-05-28 19:18 UTC (permalink / raw) To: Kinney, Michael D, edk2-devel@lists.01.org Reviewed-by: Jiewen.yao@intel.com > -----Original Message----- > From: Kinney, Michael D > Sent: Thursday, May 24, 2018 11:16 PM > To: edk2-devel@lists.01.org > Cc: Yao, Jiewen <jiewen.yao@intel.com> > Subject: [Patch v3 3/3] SignedCapsulePkg/PlatformFlashAccessLib: Add progress > API > > https://bugzilla.tianocore.org/show_bug.cgi?id=801 > > Add a new API to the PlatformFlashAccessLib that passes > in an optional Progress() function along with a start and > end percentage to call the Progress() function with. > If the Progress() function is not NULL, then it is the > Progress() function that was passed into the Firmware > Management Protocol SetImage() services and is used > to update the user on the progress as a firmware device > is updated with a firmware image. > > Implementations of the PlatformFlashAccessLib are > recommended to call the Progress() function as work > is performed to update to contents of a firmware > storage device. > > Cc: Jiewen Yao <jiewen.yao@intel.com> > Signed-off-by: Michael D Kinney <michael.d.kinney@intel.com> > Contributed-under: TianoCore Contribution Agreement 1.1 > --- > .../Include/Library/PlatformFlashAccessLib.h | 49 ++++++++++++++- > .../PlatformFlashAccessLibNull.c | 70 > +++++++++++++++++++--- > 2 files changed, 110 insertions(+), 9 deletions(-) > > diff --git a/SignedCapsulePkg/Include/Library/PlatformFlashAccessLib.h > b/SignedCapsulePkg/Include/Library/PlatformFlashAccessLib.h > index 0a8858e4c4..e3308251c2 100644 > --- a/SignedCapsulePkg/Include/Library/PlatformFlashAccessLib.h > +++ b/SignedCapsulePkg/Include/Library/PlatformFlashAccessLib.h > @@ -1,7 +1,7 @@ > /** @file > Platform flash device access library. > > - Copyright (c) 2016, Intel Corporation. All rights reserved.<BR> > + Copyright (c) 2016 - 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 > @@ -16,6 +16,8 @@ > #ifndef __PLATFORM_FLASH_ACCESS_LIB_H__ > #define __PLATFORM_FLASH_ACCESS_LIB_H__ > > +#include <Protocol/FirmwareManagement.h> > + > typedef enum { > FlashAddressTypeRelativeAddress, > FlashAddressTypeAbsoluteAddress, > @@ -31,7 +33,7 @@ typedef enum { > } PLATFORM_FIRMWARE_TYPE; > > /** > - Perform flash write opreation. > + Perform flash write operation. > > @param[in] FirmwareType The type of firmware. > @param[in] FlashAddress The address of flash device to be accessed. > @@ -54,4 +56,47 @@ PerformFlashWrite ( > IN UINTN Length > ); > > +/** > + Perform flash write operation with progress indicator. The start and end > + completion percentage values are passed into this function. If the > requested > + flash write operation is broken up, then completion percentage between the > + start and end values may be passed to the provided Progress function. The > + caller of this function is required to call the Progress function for the > + start and end completion percentage values. This allows the Progress, > + StartPercentage, and EndPercentage parameters to be ignored if the > requested > + flash write operation can not be broken up > + > + @param[in] FirmwareType The type of firmware. > + @param[in] FlashAddress The address of flash device to be accessed. > + @param[in] FlashAddressType The type of flash device address. > + @param[in] Buffer The pointer to the data buffer. > + @param[in] Length The length of data buffer in bytes. > + @param[in] Progress A function used report the progress of the > + firmware update. This is an optional > parameter > + that may be NULL. > + @param[in] StartPercentage The start completion percentage value that > may > + be used to report progress during the flash > + write operation. > + @param[in] EndPercentage The end completion percentage value that > may > + be used to report progress during the flash > + write operation. > + > + @retval EFI_SUCCESS The operation returns successfully. > + @retval EFI_WRITE_PROTECTED The flash device is read only. > + @retval EFI_UNSUPPORTED The flash device access is unsupported. > + @retval EFI_INVALID_PARAMETER The input parameter is not valid. > +**/ > +EFI_STATUS > +EFIAPI > +PerformFlashWriteWithProgress ( > + IN PLATFORM_FIRMWARE_TYPE FirmwareType, > + IN EFI_PHYSICAL_ADDRESS FlashAddress, > + IN FLASH_ADDRESS_TYPE > FlashAddressType, > + IN VOID *Buffer, > + IN UINTN Length, > + IN EFI_FIRMWARE_MANAGEMENT_UPDATE_IMAGE_PROGRESS Progress, > OPTIONAL > + IN UINTN StartPercentage, > + IN UINTN EndPercentage > + ); > + > #endif > diff --git > a/SignedCapsulePkg/Library/PlatformFlashAccessLibNull/PlatformFlashAccessLib > Null.c > b/SignedCapsulePkg/Library/PlatformFlashAccessLibNull/PlatformFlashAccessLib > Null.c > index b34ebbba1e..854f108cf4 100644 > --- > a/SignedCapsulePkg/Library/PlatformFlashAccessLibNull/PlatformFlashAccessLib > Null.c > +++ > b/SignedCapsulePkg/Library/PlatformFlashAccessLibNull/PlatformFlashAccessLib > Null.c > @@ -1,7 +1,7 @@ > /** @file > Platform flash device access library NULL instance. > > - Copyright (c) 2016, Intel Corporation. All rights reserved.<BR> > + Copyright (c) 2016 - 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 > @@ -20,7 +20,57 @@ > UINT64 mInternalFdAddress; > > /** > - Perform flash write opreation. > + Perform flash write operation with progress indicator. The start and end > + completion percentage values are passed into this function. If the > requested > + flash write operation is broken up, then completion percentage between the > + start and end values may be passed to the provided Progress function. The > + caller of this function is required to call the Progress function for the > + start and end completion percentage values. This allows the Progress, > + StartPercentage, and EndPercentage parameters to be ignored if the > requested > + flash write operation can not be broken up > + > + @param[in] FirmwareType The type of firmware. > + @param[in] FlashAddress The address of flash device to be accessed. > + @param[in] FlashAddressType The type of flash device address. > + @param[in] Buffer The pointer to the data buffer. > + @param[in] Length The length of data buffer in bytes. > + @param[in] Progress A function used report the progress of the > + firmware update. This is an optional > parameter > + that may be NULL. > + @param[in] StartPercentage The start completion percentage value that > may > + be used to report progress during the flash > + write operation. > + @param[in] EndPercentage The end completion percentage value that > may > + be used to report progress during the flash > + write operation. > + > + @retval EFI_SUCCESS The operation returns successfully. > + @retval EFI_WRITE_PROTECTED The flash device is read only. > + @retval EFI_UNSUPPORTED The flash device access is unsupported. > + @retval EFI_INVALID_PARAMETER The input parameter is not valid. > +**/ > +EFI_STATUS > +EFIAPI > +PerformFlashWriteWithProgress ( > + IN PLATFORM_FIRMWARE_TYPE FirmwareType, > + IN EFI_PHYSICAL_ADDRESS FlashAddress, > + IN FLASH_ADDRESS_TYPE > FlashAddressType, > + IN VOID *Buffer, > + IN UINTN Length, > + IN EFI_FIRMWARE_MANAGEMENT_UPDATE_IMAGE_PROGRESS Progress, > OPTIONAL > + IN UINTN StartPercentage, > + IN UINTN EndPercentage > + ) > +{ > + if (FlashAddressType == FlashAddressTypeRelativeAddress) { > + FlashAddress = FlashAddress + mInternalFdAddress; > + } > + CopyMem((VOID *)(UINTN)(FlashAddress), Buffer, Length); > + return EFI_SUCCESS; > +} > + > +/** > + Perform flash write operation. > > @param[in] FirmwareType The type of firmware. > @param[in] FlashAddress The address of flash device to be accessed. > @@ -43,9 +93,15 @@ PerformFlashWrite ( > IN UINTN Length > ) > { > - if (FlashAddressType == FlashAddressTypeRelativeAddress) { > - FlashAddress = FlashAddress + mInternalFdAddress; > - } > - CopyMem((VOID *)(UINTN)(FlashAddress), Buffer, Length); > - return EFI_SUCCESS; > + return PerformFlashWriteWithProgress ( > + FirmwareType, > + FlashAddress, > + FlashAddressType, > + Buffer, > + Length, > + NULL, > + 0, > + 0 > + ); > } > + > -- > 2.14.2.windows.3 ^ permalink raw reply [flat|nested] 17+ messages in thread
* Re: [Patch v3 0/3] Add DisplayUpdateProgressLib for capsules 2018-05-25 6:15 [Patch v3 0/3] Add DisplayUpdateProgressLib for capsules Michael D Kinney ` (2 preceding siblings ...) 2018-05-25 6:15 ` [Patch v3 3/3] SignedCapsulePkg/PlatformFlashAccessLib: Add progress API Michael D Kinney @ 2018-05-28 19:07 ` Yao, Jiewen 2018-05-29 9:51 ` Ard Biesheuvel 4 siblings, 0 replies; 17+ messages in thread From: Yao, Jiewen @ 2018-05-28 19:07 UTC (permalink / raw) To: Kinney, Michael D, edk2-devel@lists.01.org Cc: Sean Brogan, Zeng, Star, Dong, Eric, Wei, David, Guo, Mang, Steele, Kelly Thank you to add Version. Patch 1,2,3,4 reviewed-by: Jiewen.yao@intel.com Thank you Yao Jiewen > -----Original Message----- > From: Kinney, Michael D > Sent: Thursday, May 24, 2018 11:16 PM > To: edk2-devel@lists.01.org > Cc: Sean Brogan <sean.brogan@microsoft.com>; Zeng, Star > <star.zeng@intel.com>; Dong, Eric <eric.dong@intel.com>; Yao, Jiewen > <jiewen.yao@intel.com>; Wei, David <david.wei@intel.com>; Guo, Mang > <mang.guo@intel.com>; Steele, Kelly <kelly.steele@intel.com> > Subject: [Patch v3 0/3] Add DisplayUpdateProgressLib for capsules > > https://bugzilla.tianocore.org/show_bug.cgi?id=801 > > Based on content from: > > https://github.com/Microsoft/MS_UEFI/blob/share/MsCapsuleSupport/MsCaps > uleUpdatePkg/Include/Library/DisplayUpdateProgressLib.h > https://github.com/Microsoft/MS_UEFI/tree/share/MsCapsuleSupport/MsCapsu > leUpdatePkg/Library/DisplayUpdateProgressGraphicsLib > https://github.com/Microsoft/MS_UEFI/tree/share/MsCapsuleSupport/MsCapsu > leUpdatePkg/Library/DisplayUpdateProgressTextLib > > Updates for V3 > ============== > * Add Version field to EDKII_FIRMWARE_MANAGEMENT_PROGRESS_PROTOCOL > * Break up patch series into 4 smaller patch series to handle dependencies > between the edk2 repository and the edk2-platforms repository. > + Patch series for edk2 repo that adds DisplayUpdateProgressLib class and > instances. Defines the > EDKII_FIRMWARE_MANAGEMENT_PROGRESS_PROTOCOL. > Adds PerformFlashWriteWithProgress() API to the PlatformFlashAccessLib. > + Patch series for platforms in edk2-platforms that use capsules to add the > DisplayUpdateProgressLib mapping to the DSC files and add the > PerformFlashWriteWithProgress() API implementation to the > PlatformFlashAccessLib implementations. > + Patch series for platforms in edk2 that use capsules to add the > DisplayUpdateProgressLib mapping to the DSC files and add the > PerformFlashWriteWithProgress() API implementation to the > PlatformFlashAccessLib implementations. > + Patch for edk2 that adds the use of the DisplayUpateProgressLib and the > PerformFlashWriteWithProgress() API . > > Updates for V2 > ============== > * Change DisplayUpdateProgressGraphicsLib to > DisplayUpdateProgressLibGraphics > * Change DisplayUpdateProgressTextLib to DisplayUpdateProgressLibText > * Clarify that color in Firmware Management Progress Protocol is the > foreground color > * Add missing parameters to PerformFlashWriteWithProgress() function header. > * Update PerformFlashWriteWithProgress() function header describing the use > of > the start and end percentage values. > * Update QuarkPlatformPkg PerformFlashWriteWithProgress() to call Progress() > for > the end precentage. > * Update Vlv2Tbl2DevicePkg PerformFlashWriteWithProgress() to call Progress() > for the end precentage. > > Add DisplayUpdateProgressLib class along implementations for both graphical > (Graphics Output Protocol based) and text (Simple Text Output Protocol based) > consoles. Also add the EDK II Firmware Management Progress Protocol that is > an > optional protocol that provides the progress bar color and a watchdog timeout > value thaty can be used when a firmware image is updated in a firmware device. > > * Add progress support to DxeCapsuleLibFmp > * Add progress support to SystemFirmwareUpdateDxe > * Add progress support to PlatformFlashAccessLib class and instances. > * Reduce Print() calls during a firmware update. > > Cc: Sean Brogan <sean.brogan@microsoft.com> > Cc: Star Zeng <star.zeng@intel.com> > Cc: Eric Dong <eric.dong@intel.com> > Cc: Jiewen Yao <jiewen.yao@intel.com> > Cc: David Wei <david.wei@intel.com> > Cc: Mang Guo <mang.guo@intel.com> > Cc: Kelly Steele <kelly.steele@intel.com> > > Signed-off-by: Michael D Kinney <michael.d.kinney@intel.com> > Contributed-under: TianoCore Contribution Agreement 1.1 > > Michael D Kinney (3): > MdeModulePkg: Add DisplayUpdateProgressLib class > MdeModulePkg: Add DisplayUpdateProgressLib instances > SignedCapsulePkg/PlatformFlashAccessLib: Add progress API > > .../Include/Library/DisplayUpdateProgressLib.h | 65 +++ > .../Include/Protocol/FirmwareManagementProgress.h | 55 +++ > .../DisplayUpdateProgressLibGraphics.c | 475 > +++++++++++++++++++++ > .../DisplayUpdateProgressLibGraphics.inf | 60 +++ > .../DisplayUpdateProgressLibGraphics.uni | 18 + > .../DisplayUpdateProgressLibText.c | 174 ++++++++ > .../DisplayUpdateProgressLibText.inf | 53 +++ > .../DisplayUpdateProgressLibText.uni | 18 + > MdeModulePkg/MdeModulePkg.dec | 11 + > MdeModulePkg/MdeModulePkg.dsc | 3 + > .../Include/Library/PlatformFlashAccessLib.h | 49 ++- > .../PlatformFlashAccessLibNull.c | 70 ++- > 12 files changed, 1042 insertions(+), 9 deletions(-) > create mode 100644 > MdeModulePkg/Include/Library/DisplayUpdateProgressLib.h > create mode 100644 > MdeModulePkg/Include/Protocol/FirmwareManagementProgress.h > create mode 100644 > MdeModulePkg/Library/DisplayUpdateProgressLibGraphics/DisplayUpdateProg > ressLibGraphics.c > create mode 100644 > MdeModulePkg/Library/DisplayUpdateProgressLibGraphics/DisplayUpdateProg > ressLibGraphics.inf > create mode 100644 > MdeModulePkg/Library/DisplayUpdateProgressLibGraphics/DisplayUpdateProg > ressLibGraphics.uni > create mode 100644 > MdeModulePkg/Library/DisplayUpdateProgressLibText/DisplayUpdateProgressLi > bText.c > create mode 100644 > MdeModulePkg/Library/DisplayUpdateProgressLibText/DisplayUpdateProgressLi > bText.inf > create mode 100644 > MdeModulePkg/Library/DisplayUpdateProgressLibText/DisplayUpdateProgressLi > bText.uni > > -- > 2.14.2.windows.3 ^ permalink raw reply [flat|nested] 17+ messages in thread
* Re: [Patch v3 0/3] Add DisplayUpdateProgressLib for capsules 2018-05-25 6:15 [Patch v3 0/3] Add DisplayUpdateProgressLib for capsules Michael D Kinney ` (3 preceding siblings ...) 2018-05-28 19:07 ` [Patch v3 0/3] Add DisplayUpdateProgressLib for capsules Yao, Jiewen @ 2018-05-29 9:51 ` Ard Biesheuvel 2018-05-29 9:51 ` Ard Biesheuvel 4 siblings, 1 reply; 17+ messages in thread From: Ard Biesheuvel @ 2018-05-29 9:51 UTC (permalink / raw) To: Michael D Kinney Cc: edk2-devel@lists.01.org, Eric Dong, Jiewen Yao, Star Zeng, David Wei On 25 May 2018 at 08:15, Michael D Kinney <michael.d.kinney@intel.com> wrote: > https://bugzilla.tianocore.org/show_bug.cgi?id=801 > > Based on content from: > > https://github.com/Microsoft/MS_UEFI/blob/share/MsCapsuleSupport/MsCapsuleUpdatePkg/Include/Library/DisplayUpdateProgressLib.h > https://github.com/Microsoft/MS_UEFI/tree/share/MsCapsuleSupport/MsCapsuleUpdatePkg/Library/DisplayUpdateProgressGraphicsLib > https://github.com/Microsoft/MS_UEFI/tree/share/MsCapsuleSupport/MsCapsuleUpdatePkg/Library/DisplayUpdateProgressTextLib > > Updates for V3 > ============== > * Add Version field to EDKII_FIRMWARE_MANAGEMENT_PROGRESS_PROTOCOL > * Break up patch series into 4 smaller patch series to handle dependencies > between the edk2 repository and the edk2-platforms repository. > + Patch series for edk2 repo that adds DisplayUpdateProgressLib class and > instances. Defines the EDKII_FIRMWARE_MANAGEMENT_PROGRESS_PROTOCOL. > Adds PerformFlashWriteWithProgress() API to the PlatformFlashAccessLib. > + Patch series for platforms in edk2-platforms that use capsules to add the > DisplayUpdateProgressLib mapping to the DSC files and add the > PerformFlashWriteWithProgress() API implementation to the > PlatformFlashAccessLib implementations. > + Patch series for platforms in edk2 that use capsules to add the > DisplayUpdateProgressLib mapping to the DSC files and add the > PerformFlashWriteWithProgress() API implementation to the > PlatformFlashAccessLib implementations. > + Patch for edk2 that adds the use of the DisplayUpateProgressLib and the > PerformFlashWriteWithProgress() API . > > Updates for V2 > ============== > * Change DisplayUpdateProgressGraphicsLib to DisplayUpdateProgressLibGraphics > * Change DisplayUpdateProgressTextLib to DisplayUpdateProgressLibText > * Clarify that color in Firmware Management Progress Protocol is the foreground color > * Add missing parameters to PerformFlashWriteWithProgress() function header. > * Update PerformFlashWriteWithProgress() function header describing the use of > the start and end percentage values. > * Update QuarkPlatformPkg PerformFlashWriteWithProgress() to call Progress() for > the end precentage. > * Update Vlv2Tbl2DevicePkg PerformFlashWriteWithProgress() to call Progress() > for the end precentage. > > Add DisplayUpdateProgressLib class along implementations for both graphical > (Graphics Output Protocol based) and text (Simple Text Output Protocol based) > consoles. Also add the EDK II Firmware Management Progress Protocol that is an > optional protocol that provides the progress bar color and a watchdog timeout > value thaty can be used when a firmware image is updated in a firmware device. > > * Add progress support to DxeCapsuleLibFmp > * Add progress support to SystemFirmwareUpdateDxe > * Add progress support to PlatformFlashAccessLib class and instances. > * Reduce Print() calls during a firmware update. > > Cc: Sean Brogan <sean.brogan@microsoft.com> > Cc: Star Zeng <star.zeng@intel.com> > Cc: Eric Dong <eric.dong@intel.com> > Cc: Jiewen Yao <jiewen.yao@intel.com> > Cc: David Wei <david.wei@intel.com> > Cc: Mang Guo <mang.guo@intel.com> > Cc: Kelly Steele <kelly.steele@intel.com> > > Signed-off-by: Michael D Kinney <michael.d.kinney@intel.com> > Contributed-under: TianoCore Contribution Agreement 1.1 > > Michael D Kinney (3): > MdeModulePkg: Add DisplayUpdateProgressLib class > MdeModulePkg: Add DisplayUpdateProgressLib instances > SignedCapsulePkg/PlatformFlashAccessLib: Add progress API > This message says 0/3, but there appear to be 4 patches in the series??? > .../Include/Library/DisplayUpdateProgressLib.h | 65 +++ > .../Include/Protocol/FirmwareManagementProgress.h | 55 +++ > .../DisplayUpdateProgressLibGraphics.c | 475 +++++++++++++++++++++ > .../DisplayUpdateProgressLibGraphics.inf | 60 +++ > .../DisplayUpdateProgressLibGraphics.uni | 18 + > .../DisplayUpdateProgressLibText.c | 174 ++++++++ > .../DisplayUpdateProgressLibText.inf | 53 +++ > .../DisplayUpdateProgressLibText.uni | 18 + > MdeModulePkg/MdeModulePkg.dec | 11 + > MdeModulePkg/MdeModulePkg.dsc | 3 + > .../Include/Library/PlatformFlashAccessLib.h | 49 ++- > .../PlatformFlashAccessLibNull.c | 70 ++- > 12 files changed, 1042 insertions(+), 9 deletions(-) > create mode 100644 MdeModulePkg/Include/Library/DisplayUpdateProgressLib.h > create mode 100644 MdeModulePkg/Include/Protocol/FirmwareManagementProgress.h > create mode 100644 MdeModulePkg/Library/DisplayUpdateProgressLibGraphics/DisplayUpdateProgressLibGraphics.c > create mode 100644 MdeModulePkg/Library/DisplayUpdateProgressLibGraphics/DisplayUpdateProgressLibGraphics.inf > create mode 100644 MdeModulePkg/Library/DisplayUpdateProgressLibGraphics/DisplayUpdateProgressLibGraphics.uni > create mode 100644 MdeModulePkg/Library/DisplayUpdateProgressLibText/DisplayUpdateProgressLibText.c > create mode 100644 MdeModulePkg/Library/DisplayUpdateProgressLibText/DisplayUpdateProgressLibText.inf > create mode 100644 MdeModulePkg/Library/DisplayUpdateProgressLibText/DisplayUpdateProgressLibText.uni > > -- > 2.14.2.windows.3 > > _______________________________________________ > edk2-devel mailing list > edk2-devel@lists.01.org > https://lists.01.org/mailman/listinfo/edk2-devel ^ permalink raw reply [flat|nested] 17+ messages in thread
* Re: [Patch v3 0/3] Add DisplayUpdateProgressLib for capsules 2018-05-29 9:51 ` Ard Biesheuvel @ 2018-05-29 9:51 ` Ard Biesheuvel 2018-05-29 12:43 ` Ard Biesheuvel 0 siblings, 1 reply; 17+ messages in thread From: Ard Biesheuvel @ 2018-05-29 9:51 UTC (permalink / raw) To: Michael D Kinney Cc: edk2-devel@lists.01.org, Eric Dong, Jiewen Yao, Star Zeng, David Wei On 29 May 2018 at 11:51, Ard Biesheuvel <ard.biesheuvel@linaro.org> wrote: > On 25 May 2018 at 08:15, Michael D Kinney <michael.d.kinney@intel.com> wrote: >> https://bugzilla.tianocore.org/show_bug.cgi?id=801 >> >> Based on content from: >> >> https://github.com/Microsoft/MS_UEFI/blob/share/MsCapsuleSupport/MsCapsuleUpdatePkg/Include/Library/DisplayUpdateProgressLib.h >> https://github.com/Microsoft/MS_UEFI/tree/share/MsCapsuleSupport/MsCapsuleUpdatePkg/Library/DisplayUpdateProgressGraphicsLib >> https://github.com/Microsoft/MS_UEFI/tree/share/MsCapsuleSupport/MsCapsuleUpdatePkg/Library/DisplayUpdateProgressTextLib >> >> Updates for V3 >> ============== >> * Add Version field to EDKII_FIRMWARE_MANAGEMENT_PROGRESS_PROTOCOL >> * Break up patch series into 4 smaller patch series to handle dependencies >> between the edk2 repository and the edk2-platforms repository. >> + Patch series for edk2 repo that adds DisplayUpdateProgressLib class and >> instances. Defines the EDKII_FIRMWARE_MANAGEMENT_PROGRESS_PROTOCOL. >> Adds PerformFlashWriteWithProgress() API to the PlatformFlashAccessLib. >> + Patch series for platforms in edk2-platforms that use capsules to add the >> DisplayUpdateProgressLib mapping to the DSC files and add the >> PerformFlashWriteWithProgress() API implementation to the >> PlatformFlashAccessLib implementations. >> + Patch series for platforms in edk2 that use capsules to add the >> DisplayUpdateProgressLib mapping to the DSC files and add the >> PerformFlashWriteWithProgress() API implementation to the >> PlatformFlashAccessLib implementations. >> + Patch for edk2 that adds the use of the DisplayUpateProgressLib and the >> PerformFlashWriteWithProgress() API . >> >> Updates for V2 >> ============== >> * Change DisplayUpdateProgressGraphicsLib to DisplayUpdateProgressLibGraphics >> * Change DisplayUpdateProgressTextLib to DisplayUpdateProgressLibText >> * Clarify that color in Firmware Management Progress Protocol is the foreground color >> * Add missing parameters to PerformFlashWriteWithProgress() function header. >> * Update PerformFlashWriteWithProgress() function header describing the use of >> the start and end percentage values. >> * Update QuarkPlatformPkg PerformFlashWriteWithProgress() to call Progress() for >> the end precentage. >> * Update Vlv2Tbl2DevicePkg PerformFlashWriteWithProgress() to call Progress() >> for the end precentage. >> >> Add DisplayUpdateProgressLib class along implementations for both graphical >> (Graphics Output Protocol based) and text (Simple Text Output Protocol based) >> consoles. Also add the EDK II Firmware Management Progress Protocol that is an >> optional protocol that provides the progress bar color and a watchdog timeout >> value thaty can be used when a firmware image is updated in a firmware device. >> >> * Add progress support to DxeCapsuleLibFmp >> * Add progress support to SystemFirmwareUpdateDxe >> * Add progress support to PlatformFlashAccessLib class and instances. >> * Reduce Print() calls during a firmware update. >> >> Cc: Sean Brogan <sean.brogan@microsoft.com> >> Cc: Star Zeng <star.zeng@intel.com> >> Cc: Eric Dong <eric.dong@intel.com> >> Cc: Jiewen Yao <jiewen.yao@intel.com> >> Cc: David Wei <david.wei@intel.com> >> Cc: Mang Guo <mang.guo@intel.com> >> Cc: Kelly Steele <kelly.steele@intel.com> >> >> Signed-off-by: Michael D Kinney <michael.d.kinney@intel.com> >> Contributed-under: TianoCore Contribution Agreement 1.1 >> >> Michael D Kinney (3): >> MdeModulePkg: Add DisplayUpdateProgressLib class >> MdeModulePkg: Add DisplayUpdateProgressLib instances >> SignedCapsulePkg/PlatformFlashAccessLib: Add progress API >> > > This message says 0/3, but there appear to be 4 patches in the series??? > Never mind, the threading in my email client confused me. ^ permalink raw reply [flat|nested] 17+ messages in thread
* Re: [Patch v3 0/3] Add DisplayUpdateProgressLib for capsules 2018-05-29 9:51 ` Ard Biesheuvel @ 2018-05-29 12:43 ` Ard Biesheuvel 2018-05-29 13:05 ` Gao, Liming 0 siblings, 1 reply; 17+ messages in thread From: Ard Biesheuvel @ 2018-05-29 12:43 UTC (permalink / raw) To: Michael D Kinney Cc: edk2-devel@lists.01.org, Eric Dong, Jiewen Yao, Star Zeng, David Wei On 29 May 2018 at 11:51, Ard Biesheuvel <ard.biesheuvel@linaro.org> wrote: > On 29 May 2018 at 11:51, Ard Biesheuvel <ard.biesheuvel@linaro.org> wrote: >> On 25 May 2018 at 08:15, Michael D Kinney <michael.d.kinney@intel.com> wrote: >>> https://bugzilla.tianocore.org/show_bug.cgi?id=801 >>> >>> Based on content from: >>> >>> https://github.com/Microsoft/MS_UEFI/blob/share/MsCapsuleSupport/MsCapsuleUpdatePkg/Include/Library/DisplayUpdateProgressLib.h >>> https://github.com/Microsoft/MS_UEFI/tree/share/MsCapsuleSupport/MsCapsuleUpdatePkg/Library/DisplayUpdateProgressGraphicsLib >>> https://github.com/Microsoft/MS_UEFI/tree/share/MsCapsuleSupport/MsCapsuleUpdatePkg/Library/DisplayUpdateProgressTextLib >>> >>> Updates for V3 >>> ============== >>> * Add Version field to EDKII_FIRMWARE_MANAGEMENT_PROGRESS_PROTOCOL >>> * Break up patch series into 4 smaller patch series to handle dependencies >>> between the edk2 repository and the edk2-platforms repository. >>> + Patch series for edk2 repo that adds DisplayUpdateProgressLib class and >>> instances. Defines the EDKII_FIRMWARE_MANAGEMENT_PROGRESS_PROTOCOL. >>> Adds PerformFlashWriteWithProgress() API to the PlatformFlashAccessLib. >>> + Patch series for platforms in edk2-platforms that use capsules to add the >>> DisplayUpdateProgressLib mapping to the DSC files and add the >>> PerformFlashWriteWithProgress() API implementation to the >>> PlatformFlashAccessLib implementations. >>> + Patch series for platforms in edk2 that use capsules to add the >>> DisplayUpdateProgressLib mapping to the DSC files and add the >>> PerformFlashWriteWithProgress() API implementation to the >>> PlatformFlashAccessLib implementations. >>> + Patch for edk2 that adds the use of the DisplayUpateProgressLib and the >>> PerformFlashWriteWithProgress() API . >>> >>> Updates for V2 >>> ============== >>> * Change DisplayUpdateProgressGraphicsLib to DisplayUpdateProgressLibGraphics >>> * Change DisplayUpdateProgressTextLib to DisplayUpdateProgressLibText >>> * Clarify that color in Firmware Management Progress Protocol is the foreground color >>> * Add missing parameters to PerformFlashWriteWithProgress() function header. >>> * Update PerformFlashWriteWithProgress() function header describing the use of >>> the start and end percentage values. >>> * Update QuarkPlatformPkg PerformFlashWriteWithProgress() to call Progress() for >>> the end precentage. >>> * Update Vlv2Tbl2DevicePkg PerformFlashWriteWithProgress() to call Progress() >>> for the end precentage. >>> >>> Add DisplayUpdateProgressLib class along implementations for both graphical >>> (Graphics Output Protocol based) and text (Simple Text Output Protocol based) >>> consoles. Also add the EDK II Firmware Management Progress Protocol that is an >>> optional protocol that provides the progress bar color and a watchdog timeout >>> value thaty can be used when a firmware image is updated in a firmware device. >>> >>> * Add progress support to DxeCapsuleLibFmp >>> * Add progress support to SystemFirmwareUpdateDxe >>> * Add progress support to PlatformFlashAccessLib class and instances. >>> * Reduce Print() calls during a firmware update. >>> >>> Cc: Sean Brogan <sean.brogan@microsoft.com> >>> Cc: Star Zeng <star.zeng@intel.com> >>> Cc: Eric Dong <eric.dong@intel.com> >>> Cc: Jiewen Yao <jiewen.yao@intel.com> >>> Cc: David Wei <david.wei@intel.com> >>> Cc: Mang Guo <mang.guo@intel.com> >>> Cc: Kelly Steele <kelly.steele@intel.com> >>> >>> Signed-off-by: Michael D Kinney <michael.d.kinney@intel.com> >>> Contributed-under: TianoCore Contribution Agreement 1.1 >>> >>> Michael D Kinney (3): >>> MdeModulePkg: Add DisplayUpdateProgressLib class >>> MdeModulePkg: Add DisplayUpdateProgressLib instances >>> SignedCapsulePkg/PlatformFlashAccessLib: Add progress API >>> >> >> This message says 0/3, but there appear to be 4 patches in the series??? >> > > Never mind, the threading in my email client confused me. OK I am still confused Where is this patch: + Patch for edk2 that adds the use of the DisplayUpateProgressLib and the PerformFlashWriteWithProgress() API . ?? ^ permalink raw reply [flat|nested] 17+ messages in thread
* Re: [Patch v3 0/3] Add DisplayUpdateProgressLib for capsules 2018-05-29 12:43 ` Ard Biesheuvel @ 2018-05-29 13:05 ` Gao, Liming 2018-05-29 13:08 ` Ard Biesheuvel 0 siblings, 1 reply; 17+ messages in thread From: Gao, Liming @ 2018-05-29 13:05 UTC (permalink / raw) To: Ard Biesheuvel, Kinney, Michael D Cc: edk2-devel@lists.01.org, Yao, Jiewen, Dong, Eric, Zeng, Star, Wei, David Do you try to find this one [edk2] [edk2-platforms Patch v4 0/6] Add DisplayUpdateProgressLib to platforms? > -----Original Message----- > From: edk2-devel [mailto:edk2-devel-bounces@lists.01.org] On Behalf Of Ard Biesheuvel > Sent: Tuesday, May 29, 2018 8:43 PM > To: Kinney, Michael D <michael.d.kinney@intel.com> > Cc: edk2-devel@lists.01.org; Yao, Jiewen <jiewen.yao@intel.com>; Dong, Eric <eric.dong@intel.com>; Zeng, Star > <star.zeng@intel.com>; Wei, David <david.wei@intel.com> > Subject: Re: [edk2] [Patch v3 0/3] Add DisplayUpdateProgressLib for capsules > > On 29 May 2018 at 11:51, Ard Biesheuvel <ard.biesheuvel@linaro.org> wrote: > > On 29 May 2018 at 11:51, Ard Biesheuvel <ard.biesheuvel@linaro.org> wrote: > >> On 25 May 2018 at 08:15, Michael D Kinney <michael.d.kinney@intel.com> wrote: > >>> https://bugzilla.tianocore.org/show_bug.cgi?id=801 > >>> > >>> Based on content from: > >>> > >>> > https://github.com/Microsoft/MS_UEFI/blob/share/MsCapsuleSupport/MsCapsuleUpdatePkg/Include/Library/DisplayUpdateProgress > Lib.h > >>> > https://github.com/Microsoft/MS_UEFI/tree/share/MsCapsuleSupport/MsCapsuleUpdatePkg/Library/DisplayUpdateProgressGraphics > Lib > >>> > https://github.com/Microsoft/MS_UEFI/tree/share/MsCapsuleSupport/MsCapsuleUpdatePkg/Library/DisplayUpdateProgressTextLib > >>> > >>> Updates for V3 > >>> ============== > >>> * Add Version field to EDKII_FIRMWARE_MANAGEMENT_PROGRESS_PROTOCOL > >>> * Break up patch series into 4 smaller patch series to handle dependencies > >>> between the edk2 repository and the edk2-platforms repository. > >>> + Patch series for edk2 repo that adds DisplayUpdateProgressLib class and > >>> instances. Defines the EDKII_FIRMWARE_MANAGEMENT_PROGRESS_PROTOCOL. > >>> Adds PerformFlashWriteWithProgress() API to the PlatformFlashAccessLib. > >>> + Patch series for platforms in edk2-platforms that use capsules to add the > >>> DisplayUpdateProgressLib mapping to the DSC files and add the > >>> PerformFlashWriteWithProgress() API implementation to the > >>> PlatformFlashAccessLib implementations. > >>> + Patch series for platforms in edk2 that use capsules to add the > >>> DisplayUpdateProgressLib mapping to the DSC files and add the > >>> PerformFlashWriteWithProgress() API implementation to the > >>> PlatformFlashAccessLib implementations. > >>> + Patch for edk2 that adds the use of the DisplayUpateProgressLib and the > >>> PerformFlashWriteWithProgress() API . > >>> > >>> Updates for V2 > >>> ============== > >>> * Change DisplayUpdateProgressGraphicsLib to DisplayUpdateProgressLibGraphics > >>> * Change DisplayUpdateProgressTextLib to DisplayUpdateProgressLibText > >>> * Clarify that color in Firmware Management Progress Protocol is the foreground color > >>> * Add missing parameters to PerformFlashWriteWithProgress() function header. > >>> * Update PerformFlashWriteWithProgress() function header describing the use of > >>> the start and end percentage values. > >>> * Update QuarkPlatformPkg PerformFlashWriteWithProgress() to call Progress() for > >>> the end precentage. > >>> * Update Vlv2Tbl2DevicePkg PerformFlashWriteWithProgress() to call Progress() > >>> for the end precentage. > >>> > >>> Add DisplayUpdateProgressLib class along implementations for both graphical > >>> (Graphics Output Protocol based) and text (Simple Text Output Protocol based) > >>> consoles. Also add the EDK II Firmware Management Progress Protocol that is an > >>> optional protocol that provides the progress bar color and a watchdog timeout > >>> value thaty can be used when a firmware image is updated in a firmware device. > >>> > >>> * Add progress support to DxeCapsuleLibFmp > >>> * Add progress support to SystemFirmwareUpdateDxe > >>> * Add progress support to PlatformFlashAccessLib class and instances. > >>> * Reduce Print() calls during a firmware update. > >>> > >>> Cc: Sean Brogan <sean.brogan@microsoft.com> > >>> Cc: Star Zeng <star.zeng@intel.com> > >>> Cc: Eric Dong <eric.dong@intel.com> > >>> Cc: Jiewen Yao <jiewen.yao@intel.com> > >>> Cc: David Wei <david.wei@intel.com> > >>> Cc: Mang Guo <mang.guo@intel.com> > >>> Cc: Kelly Steele <kelly.steele@intel.com> > >>> > >>> Signed-off-by: Michael D Kinney <michael.d.kinney@intel.com> > >>> Contributed-under: TianoCore Contribution Agreement 1.1 > >>> > >>> Michael D Kinney (3): > >>> MdeModulePkg: Add DisplayUpdateProgressLib class > >>> MdeModulePkg: Add DisplayUpdateProgressLib instances > >>> SignedCapsulePkg/PlatformFlashAccessLib: Add progress API > >>> > >> > >> This message says 0/3, but there appear to be 4 patches in the series??? > >> > > > > Never mind, the threading in my email client confused me. > > OK I am still confused > > Where is this patch: > > + Patch for edk2 that adds the use of the DisplayUpateProgressLib and the > PerformFlashWriteWithProgress() API . > > ?? > _______________________________________________ > edk2-devel mailing list > edk2-devel@lists.01.org > https://lists.01.org/mailman/listinfo/edk2-devel ^ permalink raw reply [flat|nested] 17+ messages in thread
* Re: [Patch v3 0/3] Add DisplayUpdateProgressLib for capsules 2018-05-29 13:05 ` Gao, Liming @ 2018-05-29 13:08 ` Ard Biesheuvel 2018-05-29 14:31 ` Kinney, Michael D 0 siblings, 1 reply; 17+ messages in thread From: Ard Biesheuvel @ 2018-05-29 13:08 UTC (permalink / raw) To: Gao, Liming Cc: Kinney, Michael D, edk2-devel@lists.01.org, Yao, Jiewen, Dong, Eric, Zeng, Star, Wei, David Hello Liming, On 29 May 2018 at 15:05, Gao, Liming <liming.gao@intel.com> wrote: > Do you try to find this one [edk2] [edk2-platforms Patch v4 0/6] Add DisplayUpdateProgressLib to platforms? > No, I am trying to locate the patch that actually invokes the new PerformFlashWriteWithProgress() function when processing the capsule. >> -----Original Message----- >> From: edk2-devel [mailto:edk2-devel-bounces@lists.01.org] On Behalf Of Ard Biesheuvel >> Sent: Tuesday, May 29, 2018 8:43 PM >> To: Kinney, Michael D <michael.d.kinney@intel.com> >> Cc: edk2-devel@lists.01.org; Yao, Jiewen <jiewen.yao@intel.com>; Dong, Eric <eric.dong@intel.com>; Zeng, Star >> <star.zeng@intel.com>; Wei, David <david.wei@intel.com> >> Subject: Re: [edk2] [Patch v3 0/3] Add DisplayUpdateProgressLib for capsules >> >> On 29 May 2018 at 11:51, Ard Biesheuvel <ard.biesheuvel@linaro.org> wrote: >> > On 29 May 2018 at 11:51, Ard Biesheuvel <ard.biesheuvel@linaro.org> wrote: >> >> On 25 May 2018 at 08:15, Michael D Kinney <michael.d.kinney@intel.com> wrote: >> >>> https://bugzilla.tianocore.org/show_bug.cgi?id=801 >> >>> >> >>> Based on content from: >> >>> >> >>> >> https://github.com/Microsoft/MS_UEFI/blob/share/MsCapsuleSupport/MsCapsuleUpdatePkg/Include/Library/DisplayUpdateProgress >> Lib.h >> >>> >> https://github.com/Microsoft/MS_UEFI/tree/share/MsCapsuleSupport/MsCapsuleUpdatePkg/Library/DisplayUpdateProgressGraphics >> Lib >> >>> >> https://github.com/Microsoft/MS_UEFI/tree/share/MsCapsuleSupport/MsCapsuleUpdatePkg/Library/DisplayUpdateProgressTextLib >> >>> >> >>> Updates for V3 >> >>> ============== >> >>> * Add Version field to EDKII_FIRMWARE_MANAGEMENT_PROGRESS_PROTOCOL >> >>> * Break up patch series into 4 smaller patch series to handle dependencies >> >>> between the edk2 repository and the edk2-platforms repository. >> >>> + Patch series for edk2 repo that adds DisplayUpdateProgressLib class and >> >>> instances. Defines the EDKII_FIRMWARE_MANAGEMENT_PROGRESS_PROTOCOL. >> >>> Adds PerformFlashWriteWithProgress() API to the PlatformFlashAccessLib. >> >>> + Patch series for platforms in edk2-platforms that use capsules to add the >> >>> DisplayUpdateProgressLib mapping to the DSC files and add the >> >>> PerformFlashWriteWithProgress() API implementation to the >> >>> PlatformFlashAccessLib implementations. >> >>> + Patch series for platforms in edk2 that use capsules to add the >> >>> DisplayUpdateProgressLib mapping to the DSC files and add the >> >>> PerformFlashWriteWithProgress() API implementation to the >> >>> PlatformFlashAccessLib implementations. >> >>> + Patch for edk2 that adds the use of the DisplayUpateProgressLib and the >> >>> PerformFlashWriteWithProgress() API . >> >>> >> >>> Updates for V2 >> >>> ============== >> >>> * Change DisplayUpdateProgressGraphicsLib to DisplayUpdateProgressLibGraphics >> >>> * Change DisplayUpdateProgressTextLib to DisplayUpdateProgressLibText >> >>> * Clarify that color in Firmware Management Progress Protocol is the foreground color >> >>> * Add missing parameters to PerformFlashWriteWithProgress() function header. >> >>> * Update PerformFlashWriteWithProgress() function header describing the use of >> >>> the start and end percentage values. >> >>> * Update QuarkPlatformPkg PerformFlashWriteWithProgress() to call Progress() for >> >>> the end precentage. >> >>> * Update Vlv2Tbl2DevicePkg PerformFlashWriteWithProgress() to call Progress() >> >>> for the end precentage. >> >>> >> >>> Add DisplayUpdateProgressLib class along implementations for both graphical >> >>> (Graphics Output Protocol based) and text (Simple Text Output Protocol based) >> >>> consoles. Also add the EDK II Firmware Management Progress Protocol that is an >> >>> optional protocol that provides the progress bar color and a watchdog timeout >> >>> value thaty can be used when a firmware image is updated in a firmware device. >> >>> >> >>> * Add progress support to DxeCapsuleLibFmp >> >>> * Add progress support to SystemFirmwareUpdateDxe >> >>> * Add progress support to PlatformFlashAccessLib class and instances. >> >>> * Reduce Print() calls during a firmware update. >> >>> >> >>> Cc: Sean Brogan <sean.brogan@microsoft.com> >> >>> Cc: Star Zeng <star.zeng@intel.com> >> >>> Cc: Eric Dong <eric.dong@intel.com> >> >>> Cc: Jiewen Yao <jiewen.yao@intel.com> >> >>> Cc: David Wei <david.wei@intel.com> >> >>> Cc: Mang Guo <mang.guo@intel.com> >> >>> Cc: Kelly Steele <kelly.steele@intel.com> >> >>> >> >>> Signed-off-by: Michael D Kinney <michael.d.kinney@intel.com> >> >>> Contributed-under: TianoCore Contribution Agreement 1.1 >> >>> >> >>> Michael D Kinney (3): >> >>> MdeModulePkg: Add DisplayUpdateProgressLib class >> >>> MdeModulePkg: Add DisplayUpdateProgressLib instances >> >>> SignedCapsulePkg/PlatformFlashAccessLib: Add progress API >> >>> >> >> >> >> This message says 0/3, but there appear to be 4 patches in the series??? >> >> >> > >> > Never mind, the threading in my email client confused me. >> >> OK I am still confused >> >> Where is this patch: >> >> + Patch for edk2 that adds the use of the DisplayUpateProgressLib and the >> PerformFlashWriteWithProgress() API . >> >> ?? >> _______________________________________________ >> edk2-devel mailing list >> edk2-devel@lists.01.org >> https://lists.01.org/mailman/listinfo/edk2-devel ^ permalink raw reply [flat|nested] 17+ messages in thread
* Re: [Patch v3 0/3] Add DisplayUpdateProgressLib for capsules 2018-05-29 13:08 ` Ard Biesheuvel @ 2018-05-29 14:31 ` Kinney, Michael D 2018-05-31 11:12 ` Ard Biesheuvel 0 siblings, 1 reply; 17+ messages in thread From: Kinney, Michael D @ 2018-05-29 14:31 UTC (permalink / raw) To: Ard Biesheuvel, Gao, Liming, Kinney, Michael D Cc: Dong, Eric, edk2-devel@lists.01.org, Yao, Jiewen, Zeng, Star, Wei, David Ard, I broke the series up into multiple series. I can send out the 4th one this morning so you can see the one that uses it. It is a repeat of content that was shared in a single series earlier. I deferred it so we can get all the platform updates done first so there are no build breaks. Mike > -----Original Message----- > From: edk2-devel [mailto:edk2-devel- > bounces@lists.01.org] On Behalf Of Ard Biesheuvel > Sent: Tuesday, May 29, 2018 6:08 AM > To: Gao, Liming <liming.gao@intel.com> > Cc: Dong, Eric <eric.dong@intel.com>; edk2- > devel@lists.01.org; Yao, Jiewen <jiewen.yao@intel.com>; > Kinney, Michael D <michael.d.kinney@intel.com>; Zeng, > Star <star.zeng@intel.com>; Wei, David > <david.wei@intel.com> > Subject: Re: [edk2] [Patch v3 0/3] Add > DisplayUpdateProgressLib for capsules > > Hello Liming, > > On 29 May 2018 at 15:05, Gao, Liming > <liming.gao@intel.com> wrote: > > Do you try to find this one [edk2] [edk2-platforms > Patch v4 0/6] Add DisplayUpdateProgressLib to platforms? > > > > No, I am trying to locate the patch that actually > invokes the new > PerformFlashWriteWithProgress() function when processing > the capsule. > > >> -----Original Message----- > >> From: edk2-devel [mailto:edk2-devel- > bounces@lists.01.org] On Behalf Of Ard Biesheuvel > >> Sent: Tuesday, May 29, 2018 8:43 PM > >> To: Kinney, Michael D <michael.d.kinney@intel.com> > >> Cc: edk2-devel@lists.01.org; Yao, Jiewen > <jiewen.yao@intel.com>; Dong, Eric > <eric.dong@intel.com>; Zeng, Star > >> <star.zeng@intel.com>; Wei, David > <david.wei@intel.com> > >> Subject: Re: [edk2] [Patch v3 0/3] Add > DisplayUpdateProgressLib for capsules > >> > >> On 29 May 2018 at 11:51, Ard Biesheuvel > <ard.biesheuvel@linaro.org> wrote: > >> > On 29 May 2018 at 11:51, Ard Biesheuvel > <ard.biesheuvel@linaro.org> wrote: > >> >> On 25 May 2018 at 08:15, Michael D Kinney > <michael.d.kinney@intel.com> wrote: > >> >>> > https://bugzilla.tianocore.org/show_bug.cgi?id=801 > >> >>> > >> >>> Based on content from: > >> >>> > >> >>> > >> > https://github.com/Microsoft/MS_UEFI/blob/share/MsCapsul > eSupport/MsCapsuleUpdatePkg/Include/Library/DisplayUpdat > eProgress > >> Lib.h > >> >>> > >> > https://github.com/Microsoft/MS_UEFI/tree/share/MsCapsul > eSupport/MsCapsuleUpdatePkg/Library/DisplayUpdateProgres > sGraphics > >> Lib > >> >>> > >> > https://github.com/Microsoft/MS_UEFI/tree/share/MsCapsul > eSupport/MsCapsuleUpdatePkg/Library/DisplayUpdateProgres > sTextLib > >> >>> > >> >>> Updates for V3 > >> >>> ============== > >> >>> * Add Version field to > EDKII_FIRMWARE_MANAGEMENT_PROGRESS_PROTOCOL > >> >>> * Break up patch series into 4 smaller patch > series to handle dependencies > >> >>> between the edk2 repository and the edk2- > platforms repository. > >> >>> + Patch series for edk2 repo that adds > DisplayUpdateProgressLib class and > >> >>> instances. Defines the > EDKII_FIRMWARE_MANAGEMENT_PROGRESS_PROTOCOL. > >> >>> Adds PerformFlashWriteWithProgress() API to > the PlatformFlashAccessLib. > >> >>> + Patch series for platforms in edk2-platforms > that use capsules to add the > >> >>> DisplayUpdateProgressLib mapping to the DSC > files and add the > >> >>> PerformFlashWriteWithProgress() API > implementation to the > >> >>> PlatformFlashAccessLib implementations. > >> >>> + Patch series for platforms in edk2 that use > capsules to add the > >> >>> DisplayUpdateProgressLib mapping to the DSC > files and add the > >> >>> PerformFlashWriteWithProgress() API > implementation to the > >> >>> PlatformFlashAccessLib implementations. > >> >>> + Patch for edk2 that adds the use of the > DisplayUpateProgressLib and the > >> >>> PerformFlashWriteWithProgress() API . > >> >>> > >> >>> Updates for V2 > >> >>> ============== > >> >>> * Change DisplayUpdateProgressGraphicsLib to > DisplayUpdateProgressLibGraphics > >> >>> * Change DisplayUpdateProgressTextLib to > DisplayUpdateProgressLibText > >> >>> * Clarify that color in Firmware Management > Progress Protocol is the foreground color > >> >>> * Add missing parameters to > PerformFlashWriteWithProgress() function header. > >> >>> * Update PerformFlashWriteWithProgress() function > header describing the use of > >> >>> the start and end percentage values. > >> >>> * Update QuarkPlatformPkg > PerformFlashWriteWithProgress() to call Progress() for > >> >>> the end precentage. > >> >>> * Update Vlv2Tbl2DevicePkg > PerformFlashWriteWithProgress() to call Progress() > >> >>> for the end precentage. > >> >>> > >> >>> Add DisplayUpdateProgressLib class along > implementations for both graphical > >> >>> (Graphics Output Protocol based) and text (Simple > Text Output Protocol based) > >> >>> consoles. Also add the EDK II Firmware > Management Progress Protocol that is an > >> >>> optional protocol that provides the progress bar > color and a watchdog timeout > >> >>> value thaty can be used when a firmware image is > updated in a firmware device. > >> >>> > >> >>> * Add progress support to DxeCapsuleLibFmp > >> >>> * Add progress support to SystemFirmwareUpdateDxe > >> >>> * Add progress support to PlatformFlashAccessLib > class and instances. > >> >>> * Reduce Print() calls during a firmware update. > >> >>> > >> >>> Cc: Sean Brogan <sean.brogan@microsoft.com> > >> >>> Cc: Star Zeng <star.zeng@intel.com> > >> >>> Cc: Eric Dong <eric.dong@intel.com> > >> >>> Cc: Jiewen Yao <jiewen.yao@intel.com> > >> >>> Cc: David Wei <david.wei@intel.com> > >> >>> Cc: Mang Guo <mang.guo@intel.com> > >> >>> Cc: Kelly Steele <kelly.steele@intel.com> > >> >>> > >> >>> Signed-off-by: Michael D Kinney > <michael.d.kinney@intel.com> > >> >>> Contributed-under: TianoCore Contribution > Agreement 1.1 > >> >>> > >> >>> Michael D Kinney (3): > >> >>> MdeModulePkg: Add DisplayUpdateProgressLib > class > >> >>> MdeModulePkg: Add DisplayUpdateProgressLib > instances > >> >>> SignedCapsulePkg/PlatformFlashAccessLib: Add > progress API > >> >>> > >> >> > >> >> This message says 0/3, but there appear to be 4 > patches in the series??? > >> >> > >> > > >> > Never mind, the threading in my email client > confused me. > >> > >> OK I am still confused > >> > >> Where is this patch: > >> > >> + Patch for edk2 that adds the use of the > DisplayUpateProgressLib and the > >> PerformFlashWriteWithProgress() API . > >> > >> ?? > >> _______________________________________________ > >> edk2-devel mailing list > >> edk2-devel@lists.01.org > >> https://lists.01.org/mailman/listinfo/edk2-devel > _______________________________________________ > edk2-devel mailing list > edk2-devel@lists.01.org > https://lists.01.org/mailman/listinfo/edk2-devel ^ permalink raw reply [flat|nested] 17+ messages in thread
* Re: [Patch v3 0/3] Add DisplayUpdateProgressLib for capsules 2018-05-29 14:31 ` Kinney, Michael D @ 2018-05-31 11:12 ` Ard Biesheuvel 0 siblings, 0 replies; 17+ messages in thread From: Ard Biesheuvel @ 2018-05-31 11:12 UTC (permalink / raw) To: Kinney, Michael D Cc: Gao, Liming, Dong, Eric, edk2-devel@lists.01.org, Yao, Jiewen, Zeng, Star, Wei, David On 29 May 2018 at 16:31, Kinney, Michael D <michael.d.kinney@intel.com> wrote: > Ard, > > I broke the series up into multiple series. > > I can send out the 4th one this morning so > you can see the one that uses it. It is a > repeat of content that was shared in a single > series earlier. I deferred it so we can get > all the platform updates done first so there > are no build breaks. > Yeah I found the code in question I believe. ^ permalink raw reply [flat|nested] 17+ messages in thread
end of thread, other threads:[~2018-06-04 20:24 UTC | newest] Thread overview: 17+ messages (download: mbox.gz follow: Atom feed -- links below jump to the message on this page -- 2018-05-25 6:15 [Patch v3 0/3] Add DisplayUpdateProgressLib for capsules Michael D Kinney 2018-05-25 6:15 ` [Patch v3 1/3] MdeModulePkg: Add DisplayUpdateProgressLib class Michael D Kinney 2018-05-25 11:06 ` Zeng, Star 2018-05-25 6:15 ` [Patch v3 2/3] MdeModulePkg: Add DisplayUpdateProgressLib instances Michael D Kinney 2018-05-25 11:10 ` Zeng, Star 2018-05-31 11:09 ` Ard Biesheuvel 2018-06-04 20:24 ` Kinney, Michael D 2018-05-25 6:15 ` [Patch v3 3/3] SignedCapsulePkg/PlatformFlashAccessLib: Add progress API Michael D Kinney 2018-05-28 19:18 ` Yao, Jiewen 2018-05-28 19:07 ` [Patch v3 0/3] Add DisplayUpdateProgressLib for capsules Yao, Jiewen 2018-05-29 9:51 ` Ard Biesheuvel 2018-05-29 9:51 ` Ard Biesheuvel 2018-05-29 12:43 ` Ard Biesheuvel 2018-05-29 13:05 ` Gao, Liming 2018-05-29 13:08 ` Ard Biesheuvel 2018-05-29 14:31 ` Kinney, Michael D 2018-05-31 11:12 ` Ard Biesheuvel
This is a public inbox, see mirroring instructions for how to clone and mirror all data and code used for this inbox