Frontpage: Set/Use native display resolution

set the mSetupH/V resolution based on GraphicsOutput mode,
not SimpleTextOut mode
This commit is contained in:
CoolStar
2016-07-17 02:22:48 -07:00
committed by Matt DeVillier
parent 0554ac9dd0
commit 439e7d2556

View File

@ -949,6 +949,49 @@ ShowProgress (
return EFI_SUCCESS; return EFI_SUCCESS;
} }
static EFI_STATUS GopSetModeAndReconnectTextOut(
IN EFI_GRAPHICS_OUTPUT_PROTOCOL *GraphicsOutput,
IN UINT32 ModeNumber)
{
UINTN HandleCount;
UINTN Index;
EFI_HANDLE *HandleBuffer;
EFI_STATUS Status;
if (GraphicsOutput == NULL) {
return EFI_UNSUPPORTED;
}
Status = GraphicsOutput->SetMode(GraphicsOutput, ModeNumber);
if (!EFI_ERROR (Status)) {
// When we change mode on GOP, we need to reconnect the drivers which produce simple text out
// Otherwise, they won't produce text based on the new resolution
Status = gBS->LocateHandleBuffer (
ByProtocol,
&gEfiSimpleTextOutProtocolGuid,
NULL,
&HandleCount,
&HandleBuffer
);
if (!EFI_ERROR (Status)) {
for (Index = 0; Index < HandleCount; Index++) {
gBS->DisconnectController (HandleBuffer[Index], NULL, NULL);
}
for (Index = 0; Index < HandleCount; Index++) {
gBS->ConnectController (HandleBuffer[Index], NULL, NULL, TRUE);
}
if (HandleBuffer != NULL) {
FreePool (HandleBuffer);
}
}
// return value is according to whether SetMode succeeded
Status = EFI_SUCCESS;
}
return Status;
}
/** /**
This function is the main entry of the platform setup entry. This function is the main entry of the platform setup entry.
The function will present the main menu of the system setup, The function will present the main menu of the system setup,
@ -1013,11 +1056,16 @@ PlatformBdsEnterFrontPage (
} }
if (GraphicsOutput != NULL) { if (GraphicsOutput != NULL) {
Status = GopSetModeAndReconnectTextOut(GraphicsOutput, 0);
// //
// Get current video resolution and text mode. // Get current video resolution and text mode.
// //
mBootHorizontalResolution = GraphicsOutput->Mode->Info->HorizontalResolution; mBootHorizontalResolution = GraphicsOutput->Mode->Info->HorizontalResolution;
mBootVerticalResolution = GraphicsOutput->Mode->Info->VerticalResolution; mBootVerticalResolution = GraphicsOutput->Mode->Info->VerticalResolution;
mSetupHorizontalResolution = GraphicsOutput->Mode->Info->HorizontalResolution;
mSetupVerticalResolution = GraphicsOutput->Mode->Info->VerticalResolution;
} }
if (SimpleTextOut != NULL) { if (SimpleTextOut != NULL) {
@ -1034,8 +1082,6 @@ PlatformBdsEnterFrontPage (
// //
// Get user defined text mode for setup. // Get user defined text mode for setup.
// //
mSetupHorizontalResolution = PcdGet32 (PcdSetupVideoHorizontalResolution);
mSetupVerticalResolution = PcdGet32 (PcdSetupVideoVerticalResolution);
mSetupTextModeColumn = PcdGet32 (PcdSetupConOutColumn); mSetupTextModeColumn = PcdGet32 (PcdSetupConOutColumn);
mSetupTextModeRow = PcdGet32 (PcdSetupConOutRow); mSetupTextModeRow = PcdGet32 (PcdSetupConOutRow);