summaryrefslogtreecommitdiffstats
path: root/MdeModulePkg/Library/BootLogoLib/BootLogoLib.c
diff options
context:
space:
mode:
Diffstat (limited to 'MdeModulePkg/Library/BootLogoLib/BootLogoLib.c')
-rw-r--r--MdeModulePkg/Library/BootLogoLib/BootLogoLib.c307
1 files changed, 156 insertions, 151 deletions
diff --git a/MdeModulePkg/Library/BootLogoLib/BootLogoLib.c b/MdeModulePkg/Library/BootLogoLib/BootLogoLib.c
index 134660f28d..478ec2d40e 100644
--- a/MdeModulePkg/Library/BootLogoLib/BootLogoLib.c
+++ b/MdeModulePkg/Library/BootLogoLib/BootLogoLib.c
@@ -35,35 +35,35 @@ BootLogoEnableLogo (
VOID
)
{
- EFI_STATUS Status;
- EDKII_PLATFORM_LOGO_PROTOCOL *PlatformLogo;
- EDKII_PLATFORM_LOGO_DISPLAY_ATTRIBUTE Attribute;
- INTN OffsetX;
- INTN OffsetY;
- UINT32 SizeOfX;
- UINT32 SizeOfY;
- INTN DestX;
- INTN DestY;
- UINT32 Instance;
- EFI_IMAGE_INPUT Image;
- 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;
- EDKII_BOOT_LOGO2_PROTOCOL *BootLogo2;
- UINTN NumberOfLogos;
- EFI_GRAPHICS_OUTPUT_BLT_PIXEL *LogoBlt;
- UINTN LogoDestX;
- UINTN LogoDestY;
- UINTN LogoHeight;
- UINTN LogoWidth;
- UINTN NewDestX;
- UINTN NewDestY;
- UINTN BufferSize;
-
- Status = gBS->LocateProtocol (&gEdkiiPlatformLogoProtocolGuid, NULL, (VOID **) &PlatformLogo);
+ EFI_STATUS Status;
+ EDKII_PLATFORM_LOGO_PROTOCOL *PlatformLogo;
+ EDKII_PLATFORM_LOGO_DISPLAY_ATTRIBUTE Attribute;
+ INTN OffsetX;
+ INTN OffsetY;
+ UINT32 SizeOfX;
+ UINT32 SizeOfY;
+ INTN DestX;
+ INTN DestY;
+ UINT32 Instance;
+ EFI_IMAGE_INPUT Image;
+ 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;
+ EDKII_BOOT_LOGO2_PROTOCOL *BootLogo2;
+ UINTN NumberOfLogos;
+ EFI_GRAPHICS_OUTPUT_BLT_PIXEL *LogoBlt;
+ UINTN LogoDestX;
+ UINTN LogoDestY;
+ UINTN LogoHeight;
+ UINTN LogoWidth;
+ UINTN NewDestX;
+ UINTN NewDestY;
+ UINTN BufferSize;
+
+ Status = gBS->LocateProtocol (&gEdkiiPlatformLogoProtocolGuid, NULL, (VOID **)&PlatformLogo);
if (EFI_ERROR (Status)) {
return EFI_UNSUPPORTED;
}
@@ -72,17 +72,18 @@ BootLogoEnableLogo (
//
// Try to open GOP first
//
- Status = gBS->HandleProtocol (gST->ConsoleOutHandle, &gEfiGraphicsOutputProtocolGuid, (VOID **) &GraphicsOutput);
+ Status = gBS->HandleProtocol (gST->ConsoleOutHandle, &gEfiGraphicsOutputProtocolGuid, (VOID **)&GraphicsOutput);
if (EFI_ERROR (Status) && FeaturePcdGet (PcdUgaConsumeSupport)) {
GraphicsOutput = NULL;
//
// Open GOP failed, try to open UGA
//
- Status = gBS->HandleProtocol (gST->ConsoleOutHandle, &gEfiUgaDrawProtocolGuid, (VOID **) &UgaDraw);
+ Status = gBS->HandleProtocol (gST->ConsoleOutHandle, &gEfiUgaDrawProtocolGuid, (VOID **)&UgaDraw);
if (EFI_ERROR (Status)) {
UgaDraw = NULL;
}
}
+
if (EFI_ERROR (Status)) {
return EFI_UNSUPPORTED;
}
@@ -90,7 +91,7 @@ BootLogoEnableLogo (
//
// Try to open Boot Logo Protocol.
//
- Status = gBS->LocateProtocol (&gEfiBootLogoProtocolGuid, NULL, (VOID **) &BootLogo);
+ Status = gBS->LocateProtocol (&gEfiBootLogoProtocolGuid, NULL, (VOID **)&BootLogo);
if (EFI_ERROR (Status)) {
BootLogo = NULL;
}
@@ -98,7 +99,7 @@ BootLogoEnableLogo (
//
// Try to open Boot Logo 2 Protocol.
//
- Status = gBS->LocateProtocol (&gEdkiiBootLogo2ProtocolGuid, NULL, (VOID **) &BootLogo2);
+ Status = gBS->LocateProtocol (&gEdkiiBootLogo2ProtocolGuid, NULL, (VOID **)&BootLogo2);
if (EFI_ERROR (Status)) {
BootLogo2 = NULL;
}
@@ -111,7 +112,6 @@ BootLogoEnableLogo (
if (GraphicsOutput != NULL) {
SizeOfX = GraphicsOutput->Mode->Info->HorizontalResolution;
SizeOfY = GraphicsOutput->Mode->Info->VerticalResolution;
-
} else {
ASSERT (UgaDraw != NULL);
Status = UgaDraw->GetMode (UgaDraw, &SizeOfX, &SizeOfY, &ColorDepth, &RefreshRate);
@@ -120,17 +120,17 @@ BootLogoEnableLogo (
}
}
- Blt = NULL;
+ Blt = NULL;
NumberOfLogos = 0;
- LogoDestX = 0;
- LogoDestY = 0;
- LogoHeight = 0;
- LogoWidth = 0;
- NewDestX = 0;
- NewDestY = 0;
- Instance = 0;
- DestX = 0;
- DestY = 0;
+ LogoDestX = 0;
+ LogoDestY = 0;
+ LogoHeight = 0;
+ LogoWidth = 0;
+ NewDestX = 0;
+ NewDestY = 0;
+ Instance = 0;
+ DestX = 0;
+ DestY = 0;
while (TRUE) {
//
// Get image from PlatformLogo protocol.
@@ -150,55 +150,56 @@ BootLogoEnableLogo (
if (Blt != NULL) {
FreePool (Blt);
}
+
Blt = Image.Bitmap;
//
// Calculate the display position according to Attribute.
//
switch (Attribute) {
- case EdkiiPlatformLogoDisplayAttributeLeftTop:
- DestX = 0;
- DestY = 0;
- break;
- case EdkiiPlatformLogoDisplayAttributeCenterTop:
- DestX = (SizeOfX - Image.Width) / 2;
- DestY = 0;
- break;
- case EdkiiPlatformLogoDisplayAttributeRightTop:
- DestX = SizeOfX - Image.Width;
- DestY = 0;
- break;
-
- case EdkiiPlatformLogoDisplayAttributeCenterLeft:
- DestX = 0;
- DestY = (SizeOfY - Image.Height) / 2;
- break;
- case EdkiiPlatformLogoDisplayAttributeCenter:
- DestX = (SizeOfX - Image.Width) / 2;
- DestY = (SizeOfY - Image.Height) / 2;
- break;
- case EdkiiPlatformLogoDisplayAttributeCenterRight:
- DestX = SizeOfX - Image.Width;
- DestY = (SizeOfY - Image.Height) / 2;
- break;
-
- case EdkiiPlatformLogoDisplayAttributeLeftBottom:
- DestX = 0;
- DestY = SizeOfY - Image.Height;
- break;
- case EdkiiPlatformLogoDisplayAttributeCenterBottom:
- DestX = (SizeOfX - Image.Width) / 2;
- DestY = SizeOfY - Image.Height;
- break;
- case EdkiiPlatformLogoDisplayAttributeRightBottom:
- DestX = SizeOfX - Image.Width;
- DestY = SizeOfY - Image.Height;
- break;
-
- default:
- ASSERT (FALSE);
- continue;
- break;
+ case EdkiiPlatformLogoDisplayAttributeLeftTop:
+ DestX = 0;
+ DestY = 0;
+ break;
+ case EdkiiPlatformLogoDisplayAttributeCenterTop:
+ DestX = (SizeOfX - Image.Width) / 2;
+ DestY = 0;
+ break;
+ case EdkiiPlatformLogoDisplayAttributeRightTop:
+ DestX = SizeOfX - Image.Width;
+ DestY = 0;
+ break;
+
+ case EdkiiPlatformLogoDisplayAttributeCenterLeft:
+ DestX = 0;
+ DestY = (SizeOfY - Image.Height) / 2;
+ break;
+ case EdkiiPlatformLogoDisplayAttributeCenter:
+ DestX = (SizeOfX - Image.Width) / 2;
+ DestY = (SizeOfY - Image.Height) / 2;
+ break;
+ case EdkiiPlatformLogoDisplayAttributeCenterRight:
+ DestX = SizeOfX - Image.Width;
+ DestY = (SizeOfY - Image.Height) / 2;
+ break;
+
+ case EdkiiPlatformLogoDisplayAttributeLeftBottom:
+ DestX = 0;
+ DestY = SizeOfY - Image.Height;
+ break;
+ case EdkiiPlatformLogoDisplayAttributeCenterBottom:
+ DestX = (SizeOfX - Image.Width) / 2;
+ DestY = SizeOfY - Image.Height;
+ break;
+ case EdkiiPlatformLogoDisplayAttributeRightBottom:
+ DestX = SizeOfX - Image.Width;
+ DestY = SizeOfY - Image.Height;
+ break;
+
+ default:
+ ASSERT (FALSE);
+ continue;
+ break;
}
DestX += OffsetX;
@@ -212,8 +213,8 @@ BootLogoEnableLogo (
EfiBltBufferToVideo,
0,
0,
- (UINTN) DestX,
- (UINTN) DestY,
+ (UINTN)DestX,
+ (UINTN)DestY,
Image.Width,
Image.Height,
Image.Width * sizeof (EFI_GRAPHICS_OUTPUT_BLT_PIXEL)
@@ -222,12 +223,12 @@ BootLogoEnableLogo (
ASSERT (UgaDraw != NULL);
Status = UgaDraw->Blt (
UgaDraw,
- (EFI_UGA_PIXEL *) Blt,
+ (EFI_UGA_PIXEL *)Blt,
EfiUgaBltBufferToVideo,
0,
0,
- (UINTN) DestX,
- (UINTN) DestY,
+ (UINTN)DestX,
+ (UINTN)DestY,
Image.Width,
Image.Height,
Image.Width * sizeof (EFI_UGA_PIXEL)
@@ -244,18 +245,18 @@ BootLogoEnableLogo (
//
// The first Logo.
//
- LogoDestX = (UINTN) DestX;
- LogoDestY = (UINTN) DestY;
- LogoWidth = Image.Width;
+ LogoDestX = (UINTN)DestX;
+ LogoDestY = (UINTN)DestY;
+ LogoWidth = Image.Width;
LogoHeight = Image.Height;
} else {
//
// Merge new logo with old one.
//
- NewDestX = MIN ((UINTN) DestX, LogoDestX);
- NewDestY = MIN ((UINTN) DestY, LogoDestY);
- LogoWidth = MAX ((UINTN) DestX + Image.Width, LogoDestX + LogoWidth) - NewDestX;
- LogoHeight = MAX ((UINTN) DestY + Image.Height, LogoDestY + LogoHeight) - NewDestY;
+ NewDestX = MIN ((UINTN)DestX, LogoDestX);
+ NewDestY = MIN ((UINTN)DestY, LogoDestY);
+ LogoWidth = MAX ((UINTN)DestX + Image.Width, LogoDestX + LogoWidth) - NewDestX;
+ LogoHeight = MAX ((UINTN)DestY + Image.Height, LogoDestY + LogoHeight) - NewDestY;
LogoDestX = NewDestX;
LogoDestY = NewDestY;
@@ -264,7 +265,7 @@ BootLogoEnableLogo (
}
}
- if ((BootLogo == NULL && BootLogo2 == NULL) || NumberOfLogos == 0) {
+ if (((BootLogo == NULL) && (BootLogo2 == NULL)) || (NumberOfLogos == 0)) {
//
// No logo displayed.
//
@@ -283,7 +284,7 @@ BootLogoEnableLogo (
// Only one logo displayed, use its Blt buffer directly for BootLogo protocol.
//
LogoBlt = Blt;
- Status = EFI_SUCCESS;
+ Status = EFI_SUCCESS;
} else {
//
// More than one Logo displayed, get merged BltBuffer using VideoToBuffer operation.
@@ -298,6 +299,7 @@ BootLogoEnableLogo (
if (LogoHeight > MAX_UINTN / LogoWidth / sizeof (EFI_GRAPHICS_OUTPUT_BLT_PIXEL)) {
return EFI_UNSUPPORTED;
}
+
BufferSize = LogoWidth * LogoHeight * sizeof (EFI_GRAPHICS_OUTPUT_BLT_PIXEL);
LogoBlt = AllocatePool (BufferSize);
@@ -307,21 +309,21 @@ BootLogoEnableLogo (
if (GraphicsOutput != NULL) {
Status = GraphicsOutput->Blt (
- GraphicsOutput,
- LogoBlt,
- EfiBltVideoToBltBuffer,
- LogoDestX,
- LogoDestY,
- 0,
- 0,
- LogoWidth,
- LogoHeight,
- LogoWidth * sizeof (EFI_GRAPHICS_OUTPUT_BLT_PIXEL)
- );
+ GraphicsOutput,
+ LogoBlt,
+ EfiBltVideoToBltBuffer,
+ LogoDestX,
+ LogoDestY,
+ 0,
+ 0,
+ LogoWidth,
+ LogoHeight,
+ LogoWidth * sizeof (EFI_GRAPHICS_OUTPUT_BLT_PIXEL)
+ );
} else {
Status = UgaDraw->Blt (
UgaDraw,
- (EFI_UGA_PIXEL *) LogoBlt,
+ (EFI_UGA_PIXEL *)LogoBlt,
EfiUgaVideoToBltBuffer,
LogoDestX,
LogoDestY,
@@ -341,19 +343,22 @@ BootLogoEnableLogo (
if (BootLogo2 != NULL) {
Status = BootLogo2->SetBootLogo (BootLogo2, LogoBlt, LogoDestX, LogoDestY, LogoWidth, LogoHeight);
}
+
//
// If Boot Logo 2 Protocol is not available or registration with Boot Logo 2
// Protocol failed, then attempt to register logo with Boot Logo Protocol
//
- if (EFI_ERROR (Status) && BootLogo != NULL) {
+ if (EFI_ERROR (Status) && (BootLogo != NULL)) {
Status = BootLogo->SetBootLogo (BootLogo, LogoBlt, LogoDestX, LogoDestY, LogoWidth, LogoHeight);
}
+
//
// Status of this function is EFI_SUCCESS even if registration with Boot
// Logo 2 Protocol or Boot Logo Protocol fails.
//
Status = EFI_SUCCESS;
}
+
FreePool (LogoBlt);
return Status;
@@ -372,7 +377,6 @@ BootLogoDisableLogo (
VOID
)
{
-
//
// Enable Cursor on Screen
//
@@ -380,7 +384,6 @@ BootLogoDisableLogo (
return EFI_SUCCESS;
}
-
/**
Update progress bar with title above it. It only works in Graphics mode.
@@ -398,12 +401,12 @@ BootLogoDisableLogo (
EFI_STATUS
EFIAPI
BootLogoUpdateProgress (
- IN EFI_GRAPHICS_OUTPUT_BLT_PIXEL TitleForeground,
- IN EFI_GRAPHICS_OUTPUT_BLT_PIXEL TitleBackground,
- IN CHAR16 *Title,
- IN EFI_GRAPHICS_OUTPUT_BLT_PIXEL ProgressColor,
- IN UINTN Progress,
- IN UINTN PreviousValue
+ IN EFI_GRAPHICS_OUTPUT_BLT_PIXEL TitleForeground,
+ IN EFI_GRAPHICS_OUTPUT_BLT_PIXEL TitleBackground,
+ IN CHAR16 *Title,
+ IN EFI_GRAPHICS_OUTPUT_BLT_PIXEL ProgressColor,
+ IN UINTN Progress,
+ IN UINTN PreviousValue
)
{
EFI_STATUS Status;
@@ -426,15 +429,16 @@ BootLogoUpdateProgress (
}
UgaDraw = NULL;
- Status = gBS->HandleProtocol (gST->ConsoleOutHandle, &gEfiGraphicsOutputProtocolGuid, (VOID **) &GraphicsOutput);
+ Status = gBS->HandleProtocol (gST->ConsoleOutHandle, &gEfiGraphicsOutputProtocolGuid, (VOID **)&GraphicsOutput);
if (EFI_ERROR (Status) && FeaturePcdGet (PcdUgaConsumeSupport)) {
GraphicsOutput = NULL;
- Status = gBS->HandleProtocol (gST->ConsoleOutHandle, &gEfiUgaDrawProtocolGuid, (VOID **) &UgaDraw);
+ Status = gBS->HandleProtocol (gST->ConsoleOutHandle, &gEfiUgaDrawProtocolGuid, (VOID **)&UgaDraw);
if (EFI_ERROR (Status)) {
UgaDraw = NULL;
}
}
+
if (EFI_ERROR (Status)) {
return EFI_UNSUPPORTED;
}
@@ -462,10 +466,10 @@ BootLogoUpdateProgress (
BlockWidth = SizeOfX / 100;
BlockHeight = SizeOfY / 50;
- BlockNum = Progress;
+ BlockNum = Progress;
- PosX = 0;
- PosY = SizeOfY * 48 / 50;
+ PosX = 0;
+ PosY = SizeOfY * 48 / 50;
if (BlockNum == 0) {
//
@@ -475,21 +479,21 @@ BootLogoUpdateProgress (
if (GraphicsOutput != NULL) {
Status = GraphicsOutput->Blt (
- GraphicsOutput,
- &Color,
- EfiBltVideoFill,
- 0,
- 0,
- 0,
- PosY - EFI_GLYPH_HEIGHT - 1,
- SizeOfX,
- SizeOfY - (PosY - EFI_GLYPH_HEIGHT - 1),
- SizeOfX * sizeof (EFI_GRAPHICS_OUTPUT_BLT_PIXEL)
- );
+ GraphicsOutput,
+ &Color,
+ EfiBltVideoFill,
+ 0,
+ 0,
+ 0,
+ PosY - EFI_GLYPH_HEIGHT - 1,
+ SizeOfX,
+ SizeOfY - (PosY - EFI_GLYPH_HEIGHT - 1),
+ SizeOfX * sizeof (EFI_GRAPHICS_OUTPUT_BLT_PIXEL)
+ );
} else if (FeaturePcdGet (PcdUgaConsumeSupport)) {
Status = UgaDraw->Blt (
UgaDraw,
- (EFI_UGA_PIXEL *) &Color,
+ (EFI_UGA_PIXEL *)&Color,
EfiUgaVideoFill,
0,
0,
@@ -503,6 +507,7 @@ BootLogoUpdateProgress (
return EFI_UNSUPPORTED;
}
}
+
//
// Show progress by drawing blocks
//
@@ -510,21 +515,21 @@ BootLogoUpdateProgress (
PosX = Index * BlockWidth;
if (GraphicsOutput != NULL) {
Status = GraphicsOutput->Blt (
- GraphicsOutput,
- &ProgressColor,
- EfiBltVideoFill,
- 0,
- 0,
- PosX,
- PosY,
- BlockWidth - 1,
- BlockHeight,
- (BlockWidth) * sizeof (EFI_GRAPHICS_OUTPUT_BLT_PIXEL)
- );
+ GraphicsOutput,
+ &ProgressColor,
+ EfiBltVideoFill,
+ 0,
+ 0,
+ PosX,
+ PosY,
+ BlockWidth - 1,
+ BlockHeight,
+ (BlockWidth) * sizeof (EFI_GRAPHICS_OUTPUT_BLT_PIXEL)
+ );
} else if (FeaturePcdGet (PcdUgaConsumeSupport)) {
Status = UgaDraw->Blt (
UgaDraw,
- (EFI_UGA_PIXEL *) &ProgressColor,
+ (EFI_UGA_PIXEL *)&ProgressColor,
EfiUgaVideoFill,
0,
0,