MdeModulePkg BootManagerUiLib: Save mode info for later use.

In current code, we use different output modes for boot phase
and setup phase. When split BootManagerUiLib from UiApp code,
we not add logic to save the boot phase mode info which will
be used later. This change add this logic.

Contributed-under: TianoCore Contribution Agreement 1.0
Signed-off-by: Eric Dong <eric.dong@intel.com>
Reviewed-by: Liming Gao <liming.gao@intel.com>
This commit is contained in:
Dong, Eric 2016-05-18 13:12:40 +08:00 committed by Liming Gao
parent 531c89a1ed
commit cb9fcac0ea
2 changed files with 78 additions and 1 deletions

View File

@ -31,6 +31,8 @@ UINT32 mBmSetupTextModeRow = 0;
UINT32 mBmSetupHorizontalResolution = 0; UINT32 mBmSetupHorizontalResolution = 0;
UINT32 mBmSetupVerticalResolution = 0; UINT32 mBmSetupVerticalResolution = 0;
BOOLEAN mBmModeInitialized = FALSE;
CHAR16 *mDeviceTypeStr[] = { CHAR16 *mDeviceTypeStr[] = {
L"Legacy BEV", L"Legacy BEV",
L"Legacy Floppy", L"Legacy Floppy",
@ -649,6 +651,77 @@ BootManagerRouteConfig (
return EFI_NOT_FOUND; return EFI_NOT_FOUND;
} }
/**
Initial the boot mode related parameters.
**/
VOID
BmInitialBootModeInfo (
VOID
)
{
EFI_STATUS Status;
EFI_GRAPHICS_OUTPUT_PROTOCOL *GraphicsOutput;
EFI_SIMPLE_TEXT_OUTPUT_PROTOCOL *SimpleTextOut;
UINTN BootTextColumn;
UINTN BootTextRow;
if (mBmModeInitialized) {
return;
}
//
// After the console is ready, get current video resolution
// and text mode before launching setup at first time.
//
Status = gBS->HandleProtocol (
gST->ConsoleOutHandle,
&gEfiGraphicsOutputProtocolGuid,
(VOID**)&GraphicsOutput
);
if (EFI_ERROR (Status)) {
GraphicsOutput = NULL;
}
Status = gBS->HandleProtocol (
gST->ConsoleOutHandle,
&gEfiSimpleTextOutProtocolGuid,
(VOID**)&SimpleTextOut
);
if (EFI_ERROR (Status)) {
SimpleTextOut = NULL;
}
if (GraphicsOutput != NULL) {
//
// Get current video resolution and text mode.
//
mBmBootHorizontalResolution = GraphicsOutput->Mode->Info->HorizontalResolution;
mBmBootVerticalResolution = GraphicsOutput->Mode->Info->VerticalResolution;
}
if (SimpleTextOut != NULL) {
Status = SimpleTextOut->QueryMode (
SimpleTextOut,
SimpleTextOut->Mode->Mode,
&BootTextColumn,
&BootTextRow
);
mBmBootTextModeColumn = (UINT32)BootTextColumn;
mBmBootTextModeRow = (UINT32)BootTextRow;
}
//
// Get user defined text mode for setup.
//
mBmSetupHorizontalResolution = PcdGet32 (PcdSetupVideoHorizontalResolution);
mBmSetupVerticalResolution = PcdGet32 (PcdSetupVideoVerticalResolution);
mBmSetupTextModeColumn = PcdGet32 (PcdSetupConOutColumn);
mBmSetupTextModeRow = PcdGet32 (PcdSetupConOutRow);
mBmModeInitialized = TRUE;
}
/** /**
This call back function is registered with Boot Manager formset. This call back function is registered with Boot Manager formset.
When user selects a boot option, this call back function will When user selects a boot option, this call back function will
@ -778,6 +851,7 @@ BootManagerUiLibConstructor (
); );
ASSERT (gBootManagerPrivate.HiiHandle != NULL); ASSERT (gBootManagerPrivate.HiiHandle != NULL);
BmInitialBootModeInfo ();
return EFI_SUCCESS; return EFI_SUCCESS;
} }

View File

@ -64,4 +64,7 @@
gEfiMdeModulePkgTokenSpaceGuid.PcdConOutColumn ## CONSUMES gEfiMdeModulePkgTokenSpaceGuid.PcdConOutColumn ## CONSUMES
gEfiMdeModulePkgTokenSpaceGuid.PcdVideoHorizontalResolution ## CONSUMES gEfiMdeModulePkgTokenSpaceGuid.PcdVideoHorizontalResolution ## CONSUMES
gEfiMdeModulePkgTokenSpaceGuid.PcdVideoVerticalResolution ## CONSUMES gEfiMdeModulePkgTokenSpaceGuid.PcdVideoVerticalResolution ## CONSUMES
gEfiMdeModulePkgTokenSpaceGuid.PcdSetupConOutColumn ## CONSUMES ## SOMETIMES_PRODUCES
gEfiMdeModulePkgTokenSpaceGuid.PcdSetupConOutRow ## CONSUMES ## SOMETIMES_PRODUCES
gEfiMdeModulePkgTokenSpaceGuid.PcdSetupVideoHorizontalResolution ## CONSUMES
gEfiMdeModulePkgTokenSpaceGuid.PcdSetupVideoVerticalResolution ## CONSUMES