From nobody Sat Nov 2 14:32:44 2024 Delivered-To: importer@patchew.org Received-SPF: none (zoho.com: 198.145.21.10 is neither permitted nor denied by domain of lists.01.org) client-ip=198.145.21.10; envelope-from=edk2-devel-bounces@lists.01.org; helo=ml01.01.org; Authentication-Results: mx.zoho.com; dkim=fail spf=none (zoho.com: 198.145.21.10 is neither permitted nor denied by domain of lists.01.org) smtp.mailfrom=edk2-devel-bounces@lists.01.org; Return-Path: Received: from ml01.01.org (ml01.01.org [198.145.21.10]) by mx.zohomail.com with SMTPS id 1490042194678319.9692809727944; Mon, 20 Mar 2017 13:36:34 -0700 (PDT) Received: from [127.0.0.1] (localhost [IPv6:::1]) by ml01.01.org (Postfix) with ESMTP id 7626C8046F; Mon, 20 Mar 2017 13:36:33 -0700 (PDT) Received: from mail-wr0-x236.google.com (mail-wr0-x236.google.com [IPv6:2a00:1450:400c:c0c::236]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by ml01.01.org (Postfix) with ESMTPS id 8ADAF803BF for ; Mon, 20 Mar 2017 13:36:31 -0700 (PDT) Received: by mail-wr0-x236.google.com with SMTP id u108so100067637wrb.3 for ; Mon, 20 Mar 2017 13:36:31 -0700 (PDT) Received: from localhost.localdomain (189.17.90.92.rev.sfr.net. [92.90.17.189]) by smtp.gmail.com with ESMTPSA id c35sm22086859wra.1.2017.03.20.13.36.09 (version=TLS1_2 cipher=ECDHE-RSA-AES128-SHA bits=128/128); Mon, 20 Mar 2017 13:36:28 -0700 (PDT) X-Original-To: edk2-devel@lists.01.org DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linaro.org; s=google; h=from:to:cc:subject:date:message-id:in-reply-to:references; bh=8bRb2V97W5UGy+ie/uQ9WM8tqtywjvRiESLmS7lS45E=; b=UJc5YwtBuPyn2pULPj+3cb2iAuGzWpJURUXenEXsKNPlXtdJIPQ/raGMPXgPmtQ0oR 2kqoMfQ3KKgsscKPDtEjM1REP6D+nTdFSW0sqkhruFRx831u3CnGX4C0KTQXwh7MCT3N L9XnYsBmUhgiiPfZoA/BOzgO3AnS9CT2v1ZKY= X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to :references; bh=8bRb2V97W5UGy+ie/uQ9WM8tqtywjvRiESLmS7lS45E=; b=CM9iLoCqVCoHnx1yHvAiqbLEe7GBdWGFIs4e5U260KjZXKMmNBTLskr88LJoliaXPB hVfK9mbJz7Hm5Nf/eDYJrwdYLLfE+qPXkEoBuyaH+S3Y2Oauw/9mz6u6Ks6PtJIlgaWn dIQysiax5ebmFyjLZkMGFbQ+2XNKxOKKiNJ+czTv4QHxHUOWQFou9sZa7pyjWbrxEoCU ar8bCmz8aVLlI7M66+zyzv5tO0sMyyhnPV/POOKbLtBlntRWRlmC1yjHwrc2MugVTGEK 1Vx7i7rgzSRExGnqZgZtglSBqqaoOEoyZBYqwDpsnDvnRuaDXmn/pCnw/aFloXNqwe1t oqhQ== X-Gm-Message-State: AFeK/H0BxgAmxBVvHCoWo5H/1TgEql6tixqvTuSqIVg3OSN/2Sw+rLPUpDARSao81iOrwHR8 X-Received: by 10.223.151.5 with SMTP id r5mr29936641wrb.97.1490042189355; Mon, 20 Mar 2017 13:36:29 -0700 (PDT) From: Ard Biesheuvel To: edk2-devel@lists.01.org, leif.lindholm@linaro.org, ryan.harkin@linaro.org Date: Mon, 20 Mar 2017 20:35:45 +0000 Message-Id: <1490042145-19509-4-git-send-email-ard.biesheuvel@linaro.org> X-Mailer: git-send-email 2.7.4 In-Reply-To: <1490042145-19509-1-git-send-email-ard.biesheuvel@linaro.org> References: <1490042145-19509-1-git-send-email-ard.biesheuvel@linaro.org> Subject: [edk2] [PATCH 3/3] ArmPkg/PlatformBootManagerLib: move to BootLogoLib for boot splash support X-BeenThere: edk2-devel@lists.01.org X-Mailman-Version: 2.1.22 Precedence: list List-Id: EDK II Development List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Cc: Ard Biesheuvel MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Errors-To: edk2-devel-bounces@lists.01.org Sender: "edk2-devel" X-ZohoMail-DKIM: fail (Header signature does not verify) X-ZohoMail: RSF_4 Z_629925259 SPT_0 Content-Type: text/plain; charset="utf-8" Replace the duplicated and outdated code in QuietBoot.c with a reference to BootLogoLib, which provides the same functionality. This also allows us to drop all references to IntelFrameworkModulePkg in this module. Contributed-under: TianoCore Contribution Agreement 1.0 Signed-off-by: Ard Biesheuvel Reviewed-by: Leif Lindholm --- ArmPkg/Library/PlatformBootManagerLib/PlatformBm.c | 31 +- ArmPkg/Library/PlatformBootManagerLib/PlatformBootManagerLib.inf | 6 +- ArmPkg/Library/PlatformBootManagerLib/QuietBoot.c | 680 ---= ----------------- 3 files changed, 28 insertions(+), 689 deletions(-) diff --git a/ArmPkg/Library/PlatformBootManagerLib/PlatformBm.c b/ArmPkg/Li= brary/PlatformBootManagerLib/PlatformBm.c index d479c28775fb..43febe57da8b 100644 --- a/ArmPkg/Library/PlatformBootManagerLib/PlatformBm.c +++ b/ArmPkg/Library/PlatformBootManagerLib/PlatformBm.c @@ -17,6 +17,7 @@ **/ =20 #include +#include #include #include #include @@ -522,13 +523,15 @@ PlatformBootManagerAfterConsole ( VOID ) { - Print (L"Press ESCAPE for boot options "); + EFI_STATUS Status; =20 // // Show the splash screen. // - EnableQuietBoot (PcdGetPtr (PcdLogoFile)); - + Status =3D BootLogoEnableLogo (); + if (EFI_ERROR (Status)) { + Print (L"Press ESCAPE for boot options "); + } // // Connect the rest of the devices. // @@ -559,5 +562,25 @@ PlatformBootManagerWaitCallback ( UINT16 TimeoutRemain ) { - Print (L"."); + EFI_GRAPHICS_OUTPUT_BLT_PIXEL_UNION Black; + EFI_GRAPHICS_OUTPUT_BLT_PIXEL_UNION White; + UINT16 Timeout; + EFI_STATUS Status; + + Timeout =3D PcdGet16 (PcdPlatformBootTimeOut); + + Black.Raw =3D 0x00000000; + White.Raw =3D 0x00FFFFFF; + + Status =3D BootLogoUpdateProgress ( + White.Pixel, + Black.Pixel, + L"Press ESCAPE for boot options", + White.Pixel, + (Timeout - TimeoutRemain) * 100 / Timeout, + 0 + ); + if (EFI_ERROR (Status)) { + Print (L"."); + } } diff --git a/ArmPkg/Library/PlatformBootManagerLib/PlatformBootManagerLib.i= nf b/ArmPkg/Library/PlatformBootManagerLib/PlatformBootManagerLib.inf index 8ac3b3799674..42e68258288a 100644 --- a/ArmPkg/Library/PlatformBootManagerLib/PlatformBootManagerLib.inf +++ b/ArmPkg/Library/PlatformBootManagerLib/PlatformBootManagerLib.inf @@ -33,16 +33,15 @@ [Defines] =20 [Sources] PlatformBm.c - QuietBoot.c =20 [Packages] - IntelFrameworkModulePkg/IntelFrameworkModulePkg.dec MdeModulePkg/MdeModulePkg.dec MdePkg/MdePkg.dec =20 [LibraryClasses] BaseLib BaseMemoryLib + BootLogoLib DebugLib DevicePathLib DxeServicesLib @@ -54,11 +53,9 @@ [LibraryClasses] UefiLib =20 [FeaturePcd] - gEfiIntelFrameworkModulePkgTokenSpaceGuid.PcdBootlogoOnlyEnable gEfiMdePkgTokenSpaceGuid.PcdUgaConsumeSupport =20 [FixedPcd] - gEfiIntelFrameworkModulePkgTokenSpaceGuid.PcdLogoFile gEfiMdePkgTokenSpaceGuid.PcdUartDefaultBaudRate gEfiMdePkgTokenSpaceGuid.PcdUartDefaultDataBits gEfiMdePkgTokenSpaceGuid.PcdUartDefaultParity @@ -79,6 +76,5 @@ [Protocols] gEfiDevicePathProtocolGuid gEfiGraphicsOutputProtocolGuid gEfiLoadedImageProtocolGuid - gEfiOEMBadgingProtocolGuid gEfiPciRootBridgeIoProtocolGuid gEfiSimpleFileSystemProtocolGuid diff --git a/ArmPkg/Library/PlatformBootManagerLib/QuietBoot.c b/ArmPkg/Lib= rary/PlatformBootManagerLib/QuietBoot.c deleted file mode 100644 index 687bda0e0480..000000000000 --- a/ArmPkg/Library/PlatformBootManagerLib/QuietBoot.c +++ /dev/null @@ -1,680 +0,0 @@ -/** @file - Platform BDS function for quiet boot support. - -Copyright (C) 2016, Red Hat, Inc. -Copyright (c) 2004 - 2016, Intel Corporation. All rights reserved.
-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 IMPLI= ED. - -**/ - -#include -#include -#include -#include -#include - -#include "PlatformBm.h" - -/** - Convert a *.BMP graphics image to a GOP blt buffer. If a NULL Blt buffer - is passed in a GopBlt buffer will be allocated by this routine. If a Gop= Blt - buffer is passed in it will be used if it is big enough. - - @param BmpImage Pointer to BMP file - @param BmpImageSize Number of bytes in BmpImage - @param GopBlt Buffer containing GOP version of BmpImage. - @param GopBltSize Size of GopBlt in bytes. - @param PixelHeight Height of GopBlt/BmpImage in pixels - @param PixelWidth Width of GopBlt/BmpImage in pixels - - @retval EFI_SUCCESS GopBlt and GopBltSize are returned. - @retval EFI_UNSUPPORTED BmpImage is not a valid *.BMP image - @retval EFI_BUFFER_TOO_SMALL The passed in GopBlt buffer is not big eno= ugh. - GopBltSize will contain the required size. - @retval EFI_OUT_OF_RESOURCES No enough buffer to allocate. - -**/ -STATIC -EFI_STATUS -ConvertBmpToGopBlt ( - IN VOID *BmpImage, - IN UINTN BmpImageSize, - IN OUT VOID **GopBlt, - IN OUT UINTN *GopBltSize, - OUT UINTN *PixelHeight, - OUT UINTN *PixelWidth - ) -{ - UINT8 *Image; - UINT8 *ImageHeader; - BMP_IMAGE_HEADER *BmpHeader; - BMP_COLOR_MAP *BmpColorMap; - EFI_GRAPHICS_OUTPUT_BLT_PIXEL *BltBuffer; - EFI_GRAPHICS_OUTPUT_BLT_PIXEL *Blt; - UINT64 BltBufferSize; - UINTN Index; - UINTN Height; - UINTN Width; - UINTN ImageIndex; - UINT32 DataSizePerLine; - BOOLEAN IsAllocated; - UINT32 ColorMapNum; - - if (sizeof (BMP_IMAGE_HEADER) > BmpImageSize) { - return EFI_INVALID_PARAMETER; - } - - BmpHeader =3D (BMP_IMAGE_HEADER *) BmpImage; - - if (BmpHeader->CharB !=3D 'B' || BmpHeader->CharM !=3D 'M') { - return EFI_UNSUPPORTED; - } - - // - // Doesn't support compress. - // - if (BmpHeader->CompressionType !=3D 0) { - return EFI_UNSUPPORTED; - } - - // - // Only support BITMAPINFOHEADER format. - // BITMAPFILEHEADER + BITMAPINFOHEADER =3D BMP_IMAGE_HEADER - // - if (BmpHeader->HeaderSize !=3D sizeof (BMP_IMAGE_HEADER) - OFFSET_OF(BMP= _IMAGE_HEADER, HeaderSize)) { - return EFI_UNSUPPORTED; - } - - // - // The data size in each line must be 4 byte alignment. - // - DataSizePerLine =3D ((BmpHeader->PixelWidth * BmpHeader->BitPerPixel + 3= 1) >> 3) & (~0x3); - BltBufferSize =3D MultU64x32 (DataSizePerLine, BmpHeader->PixelHeight); - if (BltBufferSize > (UINT32) ~0) { - return EFI_INVALID_PARAMETER; - } - - if ((BmpHeader->Size !=3D BmpImageSize) || - (BmpHeader->Size < BmpHeader->ImageOffset) || - (BmpHeader->Size - BmpHeader->ImageOffset !=3D BmpHeader->PixelHeig= ht * DataSizePerLine)) { - return EFI_INVALID_PARAMETER; - } - - // - // Calculate Color Map offset in the image. - // - Image =3D BmpImage; - BmpColorMap =3D (BMP_COLOR_MAP *) (Image + sizeof (BMP_IMAGE_HEADER)); - if (BmpHeader->ImageOffset < sizeof (BMP_IMAGE_HEADER)) { - return EFI_INVALID_PARAMETER; - } - - if (BmpHeader->ImageOffset > sizeof (BMP_IMAGE_HEADER)) { - switch (BmpHeader->BitPerPixel) { - case 1: - ColorMapNum =3D 2; - break; - case 4: - ColorMapNum =3D 16; - break; - case 8: - ColorMapNum =3D 256; - break; - default: - ColorMapNum =3D 0; - break; - } - // - // BMP file may has padding data between the bmp header section and th= e bmp data section. - // - if (BmpHeader->ImageOffset - sizeof (BMP_IMAGE_HEADER) < sizeof (BMP_C= OLOR_MAP) * ColorMapNum) { - return EFI_INVALID_PARAMETER; - } - } - - // - // Calculate graphics image data address in the image - // - Image =3D ((UINT8 *) BmpImage) + BmpHeader->ImageOffset; - ImageHeader =3D Image; - - // - // Calculate the BltBuffer needed size. - // - BltBufferSize =3D MultU64x32 ((UINT64) BmpHeader->PixelWidth, BmpHeader-= >PixelHeight); - // - // Ensure the BltBufferSize * sizeof (EFI_GRAPHICS_OUTPUT_BLT_PIXEL) doe= sn't overflow - // - if (BltBufferSize > DivU64x32 ((UINTN) ~0, sizeof (EFI_GRAPHICS_OUTPUT_B= LT_PIXEL))) { - return EFI_UNSUPPORTED; - } - BltBufferSize =3D MultU64x32 (BltBufferSize, sizeof (EFI_GRAPHICS_OUTPUT= _BLT_PIXEL)); - - IsAllocated =3D FALSE; - if (*GopBlt =3D=3D NULL) { - // - // GopBlt is not allocated by caller. - // - *GopBltSize =3D (UINTN) BltBufferSize; - *GopBlt =3D AllocatePool (*GopBltSize); - IsAllocated =3D TRUE; - if (*GopBlt =3D=3D NULL) { - return EFI_OUT_OF_RESOURCES; - } - } else { - // - // GopBlt has been allocated by caller. - // - if (*GopBltSize < (UINTN) BltBufferSize) { - *GopBltSize =3D (UINTN) BltBufferSize; - return EFI_BUFFER_TOO_SMALL; - } - } - - *PixelWidth =3D BmpHeader->PixelWidth; - *PixelHeight =3D BmpHeader->PixelHeight; - - // - // Convert image from BMP to Blt buffer format - // - BltBuffer =3D *GopBlt; - for (Height =3D 0; Height < BmpHeader->PixelHeight; Height++) { - Blt =3D &BltBuffer[(BmpHeader->PixelHeight - Height - 1) * BmpHeader->= PixelWidth]; - for (Width =3D 0; Width < BmpHeader->PixelWidth; Width++, Image++, Blt= ++) { - switch (BmpHeader->BitPerPixel) { - case 1: - // - // Convert 1-bit (2 colors) BMP to 24-bit color - // - for (Index =3D 0; Index < 8 && Width < BmpHeader->PixelWidth; Inde= x++) { - Blt->Red =3D BmpColorMap[((*Image) >> (7 - Index)) & 0x1].Red; - Blt->Green =3D BmpColorMap[((*Image) >> (7 - Index)) & 0x1].Gre= en; - Blt->Blue =3D BmpColorMap[((*Image) >> (7 - Index)) & 0x1].Blu= e; - Blt++; - Width++; - } - - Blt--; - Width--; - break; - - case 4: - // - // Convert 4-bit (16 colors) BMP Palette to 24-bit color - // - Index =3D (*Image) >> 4; - Blt->Red =3D BmpColorMap[Index].Red; - Blt->Green =3D BmpColorMap[Index].Green; - Blt->Blue =3D BmpColorMap[Index].Blue; - if (Width < (BmpHeader->PixelWidth - 1)) { - Blt++; - Width++; - Index =3D (*Image) & 0x0f; - Blt->Red =3D BmpColorMap[Index].Red; - Blt->Green =3D BmpColorMap[Index].Green; - Blt->Blue =3D BmpColorMap[Index].Blue; - } - break; - - case 8: - // - // Convert 8-bit (256 colors) BMP Palette to 24-bit color - // - Blt->Red =3D BmpColorMap[*Image].Red; - Blt->Green =3D BmpColorMap[*Image].Green; - Blt->Blue =3D BmpColorMap[*Image].Blue; - break; - - case 24: - // - // It is 24-bit BMP. - // - Blt->Blue =3D *Image++; - Blt->Green =3D *Image++; - Blt->Red =3D *Image; - break; - - default: - // - // Other bit format BMP is not supported. - // - if (IsAllocated) { - FreePool (*GopBlt); - *GopBlt =3D NULL; - } - return EFI_UNSUPPORTED; - }; - - } - - ImageIndex =3D (UINTN) (Image - ImageHeader); - if ((ImageIndex % 4) !=3D 0) { - // - // Bmp Image starts each row on a 32-bit boundary! - // - Image =3D Image + (4 - (ImageIndex % 4)); - } - } - - return EFI_SUCCESS; -} - -/** - Use SystemTable Conout to stop video based Simple Text Out consoles from= going - to the video device. Put up LogoFile on every video device that is a con= sole. - - @param[in] LogoFile File name of logo to display on the center of the= screen. - - @retval EFI_SUCCESS ConsoleControl has been flipped to graphics and = logo displayed. - @retval EFI_UNSUPPORTED Logo not found - -**/ -EFI_STATUS -EnableQuietBoot ( - IN EFI_GUID *LogoFile - ) -{ - EFI_STATUS Status; - EFI_OEM_BADGING_PROTOCOL *Badging; - UINT32 SizeOfX; - UINT32 SizeOfY; - INTN DestX; - INTN DestY; - UINT8 *ImageData; - UINTN ImageSize; - UINTN BltSize; - UINT32 Instance; - EFI_BADGING_FORMAT Format; - EFI_BADGING_DISPLAY_ATTRIBUTE Attribute; - UINTN CoordinateX; - UINTN CoordinateY; - UINTN Height; - UINTN Width; - EFI_GRAPHICS_OUTPUT_BLT_PIXEL *Blt; - EFI_UGA_DRAW_PROTOCOL *UgaDraw; - UINT32 ColorDepth; - UINT32 RefreshRate; - EFI_GRAPHICS_OUTPUT_PROTOCOL *GraphicsOutput; - EFI_BOOT_LOGO_PROTOCOL *BootLogo; - UINTN NumberOfLogos; - EFI_GRAPHICS_OUTPUT_BLT_PIXEL *LogoBlt; - UINTN LogoDestX; - UINTN LogoDestY; - UINTN LogoHeight; - UINTN LogoWidth; - UINTN NewDestX; - UINTN NewDestY; - UINTN NewHeight; - UINTN NewWidth; - UINT64 BufferSize; - - UgaDraw =3D NULL; - // - // Try to open GOP first - // - Status =3D gBS->HandleProtocol (gST->ConsoleOutHandle, &gEfiGraphicsOutp= utProtocolGuid, (VOID **) &GraphicsOutput); - if (EFI_ERROR (Status) && FeaturePcdGet (PcdUgaConsumeSupport)) { - GraphicsOutput =3D NULL; - // - // Open GOP failed, try to open UGA - // - Status =3D gBS->HandleProtocol (gST->ConsoleOutHandle, &gEfiUgaDrawPro= tocolGuid, (VOID **) &UgaDraw); - } - if (EFI_ERROR (Status)) { - return EFI_UNSUPPORTED; - } - - // - // Try to open Boot Logo Protocol. - // - BootLogo =3D NULL; - gBS->LocateProtocol (&gEfiBootLogoProtocolGuid, NULL, (VOID **) &BootLog= o); - - // - // Erase Cursor from screen - // - gST->ConOut->EnableCursor (gST->ConOut, FALSE); - - Badging =3D NULL; - Status =3D gBS->LocateProtocol (&gEfiOEMBadgingProtocolGuid, NULL, (VOI= D **) &Badging); - - if (GraphicsOutput !=3D NULL) { - SizeOfX =3D GraphicsOutput->Mode->Info->HorizontalResolution; - SizeOfY =3D GraphicsOutput->Mode->Info->VerticalResolution; - - } else if (UgaDraw !=3D NULL && FeaturePcdGet (PcdUgaConsumeSupport)) { - Status =3D UgaDraw->GetMode (UgaDraw, &SizeOfX, &SizeOfY, &ColorDepth,= &RefreshRate); - if (EFI_ERROR (Status)) { - return EFI_UNSUPPORTED; - } - } else { - return EFI_UNSUPPORTED; - } - - Blt =3D NULL; - NumberOfLogos =3D 0; - LogoDestX =3D 0; - LogoDestY =3D 0; - LogoHeight =3D 0; - LogoWidth =3D 0; - NewDestX =3D 0; - NewDestY =3D 0; - NewHeight =3D 0; - NewWidth =3D 0; - Instance =3D 0; - Height =3D 0; - Width =3D 0; - while (1) { - ImageData =3D NULL; - ImageSize =3D 0; - - if (Badging !=3D NULL) { - // - // Get image from OEMBadging protocol. - // - Status =3D Badging->GetImage ( - Badging, - &Instance, - &Format, - &ImageData, - &ImageSize, - &Attribute, - &CoordinateX, - &CoordinateY - ); - if (EFI_ERROR (Status)) { - goto Done; - } - - // - // Currently only support BMP format. - // - if (Format !=3D EfiBadgingFormatBMP) { - if (ImageData !=3D NULL) { - FreePool (ImageData); - } - continue; - } - } else { - // - // Get the specified image from FV. - // - Status =3D GetSectionFromAnyFv (LogoFile, EFI_SECTION_RAW, 0, (VOID = **) &ImageData, &ImageSize); - if (EFI_ERROR (Status)) { - return EFI_UNSUPPORTED; - } - - CoordinateX =3D 0; - CoordinateY =3D 0; - if (!FeaturePcdGet(PcdBootlogoOnlyEnable)) { - Attribute =3D EfiBadgingDisplayAttributeCenter; - } else { - Attribute =3D EfiBadgingDisplayAttributeCustomized; - } - } - - if (Blt !=3D NULL) { - FreePool (Blt); - } - Blt =3D NULL; - Status =3D ConvertBmpToGopBlt ( - ImageData, - ImageSize, - (VOID **) &Blt, - &BltSize, - &Height, - &Width - ); - if (EFI_ERROR (Status)) { - FreePool (ImageData); - - if (Badging =3D=3D NULL) { - return Status; - } else { - continue; - } - } - - // - // Calculate the display position according to Attribute. - // - switch (Attribute) { - case EfiBadgingDisplayAttributeLeftTop: - DestX =3D CoordinateX; - DestY =3D CoordinateY; - break; - - case EfiBadgingDisplayAttributeCenterTop: - DestX =3D (SizeOfX - Width) / 2; - DestY =3D CoordinateY; - break; - - case EfiBadgingDisplayAttributeRightTop: - DestX =3D (SizeOfX - Width - CoordinateX); - DestY =3D CoordinateY;; - break; - - case EfiBadgingDisplayAttributeCenterRight: - DestX =3D (SizeOfX - Width - CoordinateX); - DestY =3D (SizeOfY - Height) / 2; - break; - - case EfiBadgingDisplayAttributeRightBottom: - DestX =3D (SizeOfX - Width - CoordinateX); - DestY =3D (SizeOfY - Height - CoordinateY); - break; - - case EfiBadgingDisplayAttributeCenterBottom: - DestX =3D (SizeOfX - Width) / 2; - DestY =3D (SizeOfY - Height - CoordinateY); - break; - - case EfiBadgingDisplayAttributeLeftBottom: - DestX =3D CoordinateX; - DestY =3D (SizeOfY - Height - CoordinateY); - break; - - case EfiBadgingDisplayAttributeCenterLeft: - DestX =3D CoordinateX; - DestY =3D (SizeOfY - Height) / 2; - break; - - case EfiBadgingDisplayAttributeCenter: - DestX =3D (SizeOfX - Width) / 2; - DestY =3D (SizeOfY - Height) / 2; - break; - - case EfiBadgingDisplayAttributeCustomized: - DestX =3D (SizeOfX - Width) / 2; - DestY =3D ((SizeOfY * 382) / 1000) - Height / 2; - break; - - default: - DestX =3D CoordinateX; - DestY =3D CoordinateY; - break; - } - - if ((DestX >=3D 0) && (DestY >=3D 0)) { - if (GraphicsOutput !=3D NULL) { - Status =3D GraphicsOutput->Blt ( - GraphicsOutput, - Blt, - EfiBltBufferToVideo, - 0, - 0, - (UINTN) DestX, - (UINTN) DestY, - Width, - Height, - Width * sizeof (EFI_GRAPHICS_OUTPUT_BLT_PIXEL) - ); - } else if (UgaDraw !=3D NULL && FeaturePcdGet (PcdUgaConsumeSupport)= ) { - Status =3D UgaDraw->Blt ( - UgaDraw, - (EFI_UGA_PIXEL *) Blt, - EfiUgaBltBufferToVideo, - 0, - 0, - (UINTN) DestX, - (UINTN) DestY, - Width, - Height, - Width * sizeof (EFI_UGA_PIXEL) - ); - } else { - Status =3D EFI_UNSUPPORTED; - } - - // - // Report displayed Logo information. - // - if (!EFI_ERROR (Status)) { - NumberOfLogos++; - - if (LogoWidth =3D=3D 0) { - // - // The first Logo. - // - LogoDestX =3D (UINTN) DestX; - LogoDestY =3D (UINTN) DestY; - LogoWidth =3D Width; - LogoHeight =3D Height; - } else { - // - // Merge new logo with old one. - // - NewDestX =3D MIN ((UINTN) DestX, LogoDestX); - NewDestY =3D MIN ((UINTN) DestY, LogoDestY); - NewWidth =3D MAX ((UINTN) DestX + Width, LogoDestX + LogoWidth) = - NewDestX; - NewHeight =3D MAX ((UINTN) DestY + Height, LogoDestY + LogoHeigh= t) - NewDestY; - - LogoDestX =3D NewDestX; - LogoDestY =3D NewDestY; - LogoWidth =3D NewWidth; - LogoHeight =3D NewHeight; - } - } - } - - FreePool (ImageData); - - if (Badging =3D=3D NULL) { - break; - } - } - -Done: - if (BootLogo =3D=3D NULL || NumberOfLogos =3D=3D 0) { - // - // No logo displayed. - // - if (Blt !=3D NULL) { - FreePool (Blt); - } - - return Status; - } - - // - // Advertise displayed Logo information. - // - if (NumberOfLogos =3D=3D 1) { - // - // Only one logo displayed, use its Blt buffer directly for BootLogo p= rotocol. - // - LogoBlt =3D Blt; - Status =3D EFI_SUCCESS; - } else { - // - // More than one Logo displayed, get merged BltBuffer using VideoToBuf= fer operation. - // - if (Blt !=3D NULL) { - FreePool (Blt); - } - - // - // Ensure the LogoHeight * LogoWidth doesn't overflow - // - if (LogoHeight > DivU64x64Remainder ((UINTN) ~0, LogoWidth, NULL)) { - return EFI_UNSUPPORTED; - } - BufferSize =3D MultU64x64 (LogoWidth, LogoHeight); - - // - // Ensure the BufferSize * sizeof (EFI_GRAPHICS_OUTPUT_BLT_PIXEL) does= n't overflow - // - if (BufferSize > DivU64x32 ((UINTN) ~0, sizeof (EFI_GRAPHICS_OUTPUT_BL= T_PIXEL))) { - return EFI_UNSUPPORTED; - } - - LogoBlt =3D AllocateZeroPool ((UINTN)BufferSize * sizeof (EFI_GRAPHICS= _OUTPUT_BLT_PIXEL)); - if (LogoBlt =3D=3D NULL) { - return EFI_OUT_OF_RESOURCES; - } - - if (GraphicsOutput !=3D NULL) { - Status =3D GraphicsOutput->Blt ( - GraphicsOutput, - LogoBlt, - EfiBltVideoToBltBuffer, - LogoDestX, - LogoDestY, - 0, - 0, - LogoWidth, - LogoHeight, - LogoWidth * sizeof (EFI_GRAPHICS_OUTPUT_BLT_PIXE= L) - ); - } else if (UgaDraw !=3D NULL && FeaturePcdGet (PcdUgaConsumeSupport)) { - Status =3D UgaDraw->Blt ( - UgaDraw, - (EFI_UGA_PIXEL *) LogoBlt, - EfiUgaVideoToBltBuffer, - LogoDestX, - LogoDestY, - 0, - 0, - LogoWidth, - LogoHeight, - LogoWidth * sizeof (EFI_UGA_PIXEL) - ); - } else { - Status =3D EFI_UNSUPPORTED; - } - } - - if (!EFI_ERROR (Status)) { - BootLogo->SetBootLogo (BootLogo, LogoBlt, LogoDestX, LogoDestY, LogoWi= dth, LogoHeight); - } - FreePool (LogoBlt); - - return Status; -} - -/** - Use SystemTable Conout to turn on video based Simple Text Out consoles. = The - Simple Text Out screens will now be synced up with all non video output = devices - - @retval EFI_SUCCESS UGA devices are back in text mode and synced up. - -**/ -EFI_STATUS -DisableQuietBoot ( - VOID - ) -{ - - // - // Enable Cursor on Screen - // - gST->ConOut->EnableCursor (gST->ConOut, TRUE); - return EFI_SUCCESS; -} - --=20 2.7.4 _______________________________________________ edk2-devel mailing list edk2-devel@lists.01.org https://lists.01.org/mailman/listinfo/edk2-devel