X-Git-Url: https://git.proxmox.com/?a=blobdiff_plain;f=IntelFrameworkModulePkg%2FUniversal%2FBdsDxe%2FFrontPage.c;h=67f9371a9d34432c020f140fb492742b1a3e2df9;hb=c0a00b14385347c3c5e8d490fa4b065e1675a06c;hp=da0e17b38daab41e88c0fe3f8254ae2f9fb6217f;hpb=a412ad88e5737735ab54b35392b51d8a210c3b74;p=mirror_edk2.git diff --git a/IntelFrameworkModulePkg/Universal/BdsDxe/FrontPage.c b/IntelFrameworkModulePkg/Universal/BdsDxe/FrontPage.c index da0e17b38d..67f9371a9d 100644 --- a/IntelFrameworkModulePkg/Universal/BdsDxe/FrontPage.c +++ b/IntelFrameworkModulePkg/Universal/BdsDxe/FrontPage.c @@ -1,14 +1,8 @@ /** @file FrontPage routines to handle the callbacks and browser calls -Copyright (c) 2004 - 2013, 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 IMPLIED. +Copyright (c) 2004 - 2018, Intel Corporation. All rights reserved.
+SPDX-License-Identifier: BSD-2-Clause-Patent **/ @@ -182,7 +176,6 @@ FrontPageCallback ( CHAR8 *LangCode; CHAR8 *Lang; UINTN Index; - EFI_STATUS Status; if (Action != EFI_BROWSER_ACTION_CHANGING && Action != EFI_BROWSER_ACTION_CHANGED) { // @@ -190,7 +183,7 @@ FrontPageCallback ( // return EFI_UNSUPPORTED; } - + gCallbackKey = QuestionId; if (Action == EFI_BROWSER_ACTION_CHANGED) { @@ -211,7 +204,7 @@ FrontPageCallback ( // Allocate working buffer for RFC 4646 language in supported LanguageString. // Lang = AllocatePool (AsciiStrSize (mLanguageString)); - ASSERT (Lang != NULL); + ASSERT (Lang != NULL); Index = 0; LangCode = mLanguageString; @@ -226,14 +219,13 @@ FrontPageCallback ( } if (Index == Value->u8) { - Status = gRT->SetVariable ( + BdsDxeSetVariableAndReportStatusCodeOnError ( L"PlatformLang", &gEfiGlobalVariableGuid, EFI_VARIABLE_NON_VOLATILE | EFI_VARIABLE_BOOTSERVICE_ACCESS | EFI_VARIABLE_RUNTIME_ACCESS, AsciiStrSize (Lang), Lang ); - ASSERT_EFI_ERROR(Status); } else { ASSERT (FALSE); } @@ -281,7 +273,7 @@ FrontPageCallback ( } } - return EFI_SUCCESS; + return EFI_SUCCESS; } /** @@ -302,6 +294,7 @@ InitializeFrontPage ( EFI_STATUS Status; CHAR8 *LangCode; CHAR8 *Lang; + UINTN LangSize; CHAR8 *CurrentLang; UINTN OptionCount; CHAR16 *StringBuffer; @@ -397,13 +390,13 @@ InitializeFrontPage ( // HiiHandle = gFrontPagePrivate.HiiHandle; - CurrentLang = GetEfiGlobalVariable (L"PlatformLang"); + GetEfiGlobalVariable2 (L"PlatformLang", (VOID**)&CurrentLang, NULL); - if (gFrontPagePrivate.LanguageToken == NULL) { - // - // Get Support language list from variable. - // - mLanguageString = GetEfiGlobalVariable (L"PlatformLangCodes"); + // + // Get Support language list from variable. + // + if (mLanguageString == NULL){ + GetEfiGlobalVariable2 (L"PlatformLangCodes", (VOID**)&mLanguageString, NULL); if (mLanguageString == NULL) { mLanguageString = AllocateCopyPool ( AsciiStrSize ((CHAR8 *) PcdGetPtr (PcdUefiVariableDefaultPlatformLangCodes)), @@ -411,10 +404,12 @@ InitializeFrontPage ( ); ASSERT (mLanguageString != NULL); } + } + if (gFrontPagePrivate.LanguageToken == NULL) { // // Count the language list number. - // + // LangCode = mLanguageString; Lang = AllocatePool (AsciiStrSize (mLanguageString)); ASSERT (Lang != NULL); @@ -448,9 +443,10 @@ InitializeFrontPage ( } if (EFI_ERROR (Status)) { - StringBuffer = AllocatePool (AsciiStrSize (Lang) * sizeof (CHAR16)); + LangSize = AsciiStrSize (Lang); + StringBuffer = AllocatePool (LangSize * sizeof (CHAR16)); ASSERT (StringBuffer != NULL); - AsciiStrToUnicodeStr (Lang, StringBuffer); + AsciiStrToUnicodeStrS (Lang, StringBuffer, LangSize); } ASSERT (StringBuffer != NULL); @@ -567,35 +563,6 @@ CallFrontPage ( return Status; } -/** - Acquire the string associated with the ProducerGuid and return it. - - - @param ProducerGuid The Guid to search the HII database for - @param Token The token value of the string to extract - @param String The string that is extracted - - @retval EFI_SUCCESS The function returns EFI_SUCCESS always. - -**/ -EFI_STATUS -GetProducerString ( - IN EFI_GUID *ProducerGuid, - IN EFI_STRING_ID Token, - OUT CHAR16 **String - ) -{ - EFI_STRING TmpString; - - TmpString = HiiGetPackageString (ProducerGuid, Token, NULL); - if (TmpString == NULL) { - *String = GetStringById (STRING_TOKEN (STR_MISSING_STRING)); - } else { - *String = TmpString; - } - - return EFI_SUCCESS; -} /** Convert Processor Frequency Data to a string. @@ -618,7 +585,7 @@ ConvertProcessorToString ( if (Base10Exponent >= 6) { FreqMhz = ProcessorFrequency; - for (Index = 0; Index < (UINTN) (Base10Exponent - 6); Index++) { + for (Index = 0; Index < ((UINT32)Base10Exponent - 6); Index++) { FreqMhz *= 10; } } else { @@ -627,10 +594,17 @@ ConvertProcessorToString ( StringBuffer = AllocateZeroPool (0x20); ASSERT (StringBuffer != NULL); - Index = UnicodeValueToString (StringBuffer, LEFT_JUSTIFY, FreqMhz / 1000, 3); - StrCat (StringBuffer, L"."); - UnicodeValueToString (StringBuffer + Index + 1, PREFIX_ZERO, (FreqMhz % 1000) / 10, 2); - StrCat (StringBuffer, L" GHz"); + UnicodeValueToStringS (StringBuffer, 0x20, LEFT_JUSTIFY, FreqMhz / 1000, 3); + Index = StrnLenS (StringBuffer, 0x20 / sizeof (CHAR16)); + StrCatS (StringBuffer, 0x20 / sizeof (CHAR16), L"."); + UnicodeValueToStringS ( + StringBuffer + Index + 1, + 0x20 - sizeof (CHAR16) * (Index + 1), + PREFIX_ZERO, + (FreqMhz % 1000) / 10, + 2 + ); + StrCatS (StringBuffer, 0x20 / sizeof (CHAR16), L" GHz"); *String = (CHAR16 *) StringBuffer; return ; } @@ -653,8 +627,8 @@ ConvertMemorySizeToString ( StringBuffer = AllocateZeroPool (0x20); ASSERT (StringBuffer != NULL); - UnicodeValueToString (StringBuffer, LEFT_JUSTIFY, MemorySize, 6); - StrCat (StringBuffer, L" MB RAM"); + UnicodeValueToStringS (StringBuffer, 0x20, LEFT_JUSTIFY, MemorySize, 6); + StrCatS (StringBuffer, 0x20 / sizeof (CHAR16), L" MB RAM"); *String = (CHAR16 *) StringBuffer; @@ -702,7 +676,7 @@ GetOptionalStringByIndex ( *String = GetStringById (STRING_TOKEN (STR_MISSING_STRING)); } else { *String = AllocatePool (StrSize * sizeof (CHAR16)); - AsciiStrToUnicodeStr (OptionalStrStart, *String); + AsciiStrToUnicodeStrS (OptionalStrStart, *String, StrSize); } return EFI_SUCCESS; @@ -720,7 +694,6 @@ UpdateFrontPageStrings ( { UINT8 StrIndex; CHAR16 *NewString; - BOOLEAN Find[5]; EFI_STATUS Status; EFI_STRING_ID TokenToUpdate; EFI_SMBIOS_HANDLE SmbiosHandle; @@ -730,8 +703,9 @@ UpdateFrontPageStrings ( SMBIOS_TABLE_TYPE4 *Type4Record; SMBIOS_TABLE_TYPE19 *Type19Record; EFI_SMBIOS_TABLE_HEADER *Record; + UINT64 InstalledMemory; - ZeroMem (Find, sizeof (Find)); + InstalledMemory = 0; // // Update Front Page strings @@ -741,66 +715,66 @@ UpdateFrontPageStrings ( NULL, (VOID **) &Smbios ); - ASSERT_EFI_ERROR (Status); - - SmbiosHandle = SMBIOS_HANDLE_PI_RESERVED; - do { + if (!EFI_ERROR (Status)) { + SmbiosHandle = SMBIOS_HANDLE_PI_RESERVED; Status = Smbios->GetNext (Smbios, &SmbiosHandle, NULL, &Record, NULL); - if (EFI_ERROR(Status)) { - break; - } + while (!EFI_ERROR(Status)) { + if (Record->Type == SMBIOS_TYPE_BIOS_INFORMATION) { + Type0Record = (SMBIOS_TABLE_TYPE0 *) Record; + StrIndex = Type0Record->BiosVersion; + GetOptionalStringByIndex ((CHAR8*)((UINT8*)Type0Record + Type0Record->Hdr.Length), StrIndex, &NewString); + TokenToUpdate = STRING_TOKEN (STR_FRONT_PAGE_BIOS_VERSION); + HiiSetString (gFrontPagePrivate.HiiHandle, TokenToUpdate, NewString, NULL); + FreePool (NewString); + } - if (Record->Type == EFI_SMBIOS_TYPE_BIOS_INFORMATION) { - Type0Record = (SMBIOS_TABLE_TYPE0 *) Record; - StrIndex = Type0Record->BiosVersion; - GetOptionalStringByIndex ((CHAR8*)((UINT8*)Type0Record + Type0Record->Hdr.Length), StrIndex, &NewString); - TokenToUpdate = STRING_TOKEN (STR_FRONT_PAGE_BIOS_VERSION); - HiiSetString (gFrontPagePrivate.HiiHandle, TokenToUpdate, NewString, NULL); - FreePool (NewString); - Find[0] = TRUE; - } - - if (Record->Type == EFI_SMBIOS_TYPE_SYSTEM_INFORMATION) { - Type1Record = (SMBIOS_TABLE_TYPE1 *) Record; - StrIndex = Type1Record->ProductName; - GetOptionalStringByIndex ((CHAR8*)((UINT8*)Type1Record + Type1Record->Hdr.Length), StrIndex, &NewString); - TokenToUpdate = STRING_TOKEN (STR_FRONT_PAGE_COMPUTER_MODEL); - HiiSetString (gFrontPagePrivate.HiiHandle, TokenToUpdate, NewString, NULL); - FreePool (NewString); - Find[1] = TRUE; - } - - if (Record->Type == EFI_SMBIOS_TYPE_PROCESSOR_INFORMATION) { - Type4Record = (SMBIOS_TABLE_TYPE4 *) Record; - StrIndex = Type4Record->ProcessorVersion; - GetOptionalStringByIndex ((CHAR8*)((UINT8*)Type4Record + Type4Record->Hdr.Length), StrIndex, &NewString); - TokenToUpdate = STRING_TOKEN (STR_FRONT_PAGE_CPU_MODEL); - HiiSetString (gFrontPagePrivate.HiiHandle, TokenToUpdate, NewString, NULL); - FreePool (NewString); - Find[2] = TRUE; - } - - if (Record->Type == EFI_SMBIOS_TYPE_PROCESSOR_INFORMATION) { - Type4Record = (SMBIOS_TABLE_TYPE4 *) Record; - ConvertProcessorToString(Type4Record->CurrentSpeed, 6, &NewString); - TokenToUpdate = STRING_TOKEN (STR_FRONT_PAGE_CPU_SPEED); - HiiSetString (gFrontPagePrivate.HiiHandle, TokenToUpdate, NewString, NULL); - FreePool (NewString); - Find[3] = TRUE; - } - - if ( Record->Type == EFI_SMBIOS_TYPE_MEMORY_ARRAY_MAPPED_ADDRESS ) { - Type19Record = (SMBIOS_TABLE_TYPE19 *) Record; - ConvertMemorySizeToString ( - (UINT32)(RShiftU64((Type19Record->EndingAddress - Type19Record->StartingAddress + 1), 10)), - &NewString - ); - TokenToUpdate = STRING_TOKEN (STR_FRONT_PAGE_MEMORY_SIZE); - HiiSetString (gFrontPagePrivate.HiiHandle, TokenToUpdate, NewString, NULL); - FreePool (NewString); - Find[4] = TRUE; + if (Record->Type == SMBIOS_TYPE_SYSTEM_INFORMATION) { + Type1Record = (SMBIOS_TABLE_TYPE1 *) Record; + StrIndex = Type1Record->ProductName; + GetOptionalStringByIndex ((CHAR8*)((UINT8*)Type1Record + Type1Record->Hdr.Length), StrIndex, &NewString); + TokenToUpdate = STRING_TOKEN (STR_FRONT_PAGE_COMPUTER_MODEL); + HiiSetString (gFrontPagePrivate.HiiHandle, TokenToUpdate, NewString, NULL); + FreePool (NewString); + } + + if (Record->Type == SMBIOS_TYPE_PROCESSOR_INFORMATION) { + Type4Record = (SMBIOS_TABLE_TYPE4 *) Record; + StrIndex = Type4Record->ProcessorVersion; + GetOptionalStringByIndex ((CHAR8*)((UINT8*)Type4Record + Type4Record->Hdr.Length), StrIndex, &NewString); + TokenToUpdate = STRING_TOKEN (STR_FRONT_PAGE_CPU_MODEL); + HiiSetString (gFrontPagePrivate.HiiHandle, TokenToUpdate, NewString, NULL); + FreePool (NewString); + } + + if (Record->Type == SMBIOS_TYPE_PROCESSOR_INFORMATION) { + Type4Record = (SMBIOS_TABLE_TYPE4 *) Record; + ConvertProcessorToString(Type4Record->CurrentSpeed, 6, &NewString); + TokenToUpdate = STRING_TOKEN (STR_FRONT_PAGE_CPU_SPEED); + HiiSetString (gFrontPagePrivate.HiiHandle, TokenToUpdate, NewString, NULL); + FreePool (NewString); + } + + if ( Record->Type == SMBIOS_TYPE_MEMORY_ARRAY_MAPPED_ADDRESS ) { + Type19Record = (SMBIOS_TABLE_TYPE19 *) Record; + if (Type19Record->StartingAddress != 0xFFFFFFFF ) { + InstalledMemory += RShiftU64(Type19Record->EndingAddress - + Type19Record->StartingAddress + 1, 10); + } else { + InstalledMemory += RShiftU64(Type19Record->ExtendedEndingAddress - + Type19Record->ExtendedStartingAddress + 1, 20); + } + } + + Status = Smbios->GetNext (Smbios, &SmbiosHandle, NULL, &Record, NULL); } - } while ( !(Find[0] && Find[1] && Find[2] && Find[3] && Find[4])); + + // now update the total installed RAM size + ConvertMemorySizeToString ((UINT32)InstalledMemory, &NewString ); + TokenToUpdate = STRING_TOKEN (STR_FRONT_PAGE_MEMORY_SIZE); + HiiSetString (gFrontPagePrivate.HiiHandle, TokenToUpdate, NewString, NULL); + FreePool (NewString); + } + return ; } @@ -891,64 +865,62 @@ ShowProgress ( EFI_GRAPHICS_OUTPUT_BLT_PIXEL Background; EFI_GRAPHICS_OUTPUT_BLT_PIXEL Color; - if (TimeoutDefault == 0) { - return EFI_TIMEOUT; - } - - DEBUG ((EFI_D_INFO, "\n\nStart showing progress bar... Press any key to stop it! ...Zzz....\n")); + if (TimeoutDefault != 0) { + DEBUG ((EFI_D_INFO, "\n\nStart showing progress bar... Press any key to stop it! ...Zzz....\n")); - SetMem (&Foreground, sizeof (EFI_GRAPHICS_OUTPUT_BLT_PIXEL), 0xff); - SetMem (&Background, sizeof (EFI_GRAPHICS_OUTPUT_BLT_PIXEL), 0x0); - SetMem (&Color, sizeof (EFI_GRAPHICS_OUTPUT_BLT_PIXEL), 0xff); - - TmpStr = GetStringById (STRING_TOKEN (STR_START_BOOT_OPTION)); - - if (!FeaturePcdGet(PcdBootlogoOnlyEnable)) { - // - // Clear the progress status bar first - // - if (TmpStr != NULL) { - PlatformBdsShowProgress (Foreground, Background, TmpStr, Color, 0, 0); - } - } - + SetMem (&Foreground, sizeof (EFI_GRAPHICS_OUTPUT_BLT_PIXEL), 0xff); + SetMem (&Background, sizeof (EFI_GRAPHICS_OUTPUT_BLT_PIXEL), 0x0); + SetMem (&Color, sizeof (EFI_GRAPHICS_OUTPUT_BLT_PIXEL), 0xff); - TimeoutRemain = TimeoutDefault; - while (TimeoutRemain != 0) { - DEBUG ((EFI_D_INFO, "Showing progress bar...Remaining %d second!\n", TimeoutRemain)); + TmpStr = GetStringById (STRING_TOKEN (STR_START_BOOT_OPTION)); - Status = WaitForSingleEvent (gST->ConIn->WaitForKey, ONE_SECOND); - if (Status != EFI_TIMEOUT) { - break; - } - TimeoutRemain--; - if (!FeaturePcdGet(PcdBootlogoOnlyEnable)) { // - // Show progress + // Clear the progress status bar first // if (TmpStr != NULL) { - PlatformBdsShowProgress ( - Foreground, - Background, - TmpStr, - Color, - ((TimeoutDefault - TimeoutRemain) * 100 / TimeoutDefault), - 0 - ); + PlatformBdsShowProgress (Foreground, Background, TmpStr, Color, 0, 0); } } - } - - if (TmpStr != NULL) { - gBS->FreePool (TmpStr); - } - // - // Timeout expired - // - if (TimeoutRemain == 0) { - return EFI_TIMEOUT; + + TimeoutRemain = TimeoutDefault; + while (TimeoutRemain != 0) { + DEBUG ((EFI_D_INFO, "Showing progress bar...Remaining %d second!\n", TimeoutRemain)); + + Status = WaitForSingleEvent (gST->ConIn->WaitForKey, ONE_SECOND); + if (Status != EFI_TIMEOUT) { + break; + } + TimeoutRemain--; + + if (!FeaturePcdGet(PcdBootlogoOnlyEnable)) { + // + // Show progress + // + if (TmpStr != NULL) { + PlatformBdsShowProgress ( + Foreground, + Background, + TmpStr, + Color, + ((TimeoutDefault - TimeoutRemain) * 100 / TimeoutDefault), + 0 + ); + } + } + } + + if (TmpStr != NULL) { + gBS->FreePool (TmpStr); + } + + // + // Timeout expired + // + if (TimeoutRemain == 0) { + return EFI_TIMEOUT; + } } // @@ -990,7 +962,7 @@ PlatformBdsEnterFrontPage ( ) { EFI_STATUS Status; - EFI_STATUS StatusHotkey; + EFI_STATUS StatusHotkey; EFI_BOOT_LOGO_PROTOCOL *BootLogo; EFI_GRAPHICS_OUTPUT_PROTOCOL *GraphicsOutput; EFI_SIMPLE_TEXT_OUTPUT_PROTOCOL *SimpleTextOut; @@ -1013,7 +985,7 @@ PlatformBdsEnterFrontPage ( if (!mModeInitialized) { // - // After the console is ready, get current video resolution + // After the console is ready, get current video resolution // and text mode before launching setup at first time. // Status = gBS->HandleProtocol ( @@ -1024,7 +996,7 @@ PlatformBdsEnterFrontPage ( if (EFI_ERROR (Status)) { GraphicsOutput = NULL; } - + Status = gBS->HandleProtocol ( gST->ConsoleOutHandle, &gEfiSimpleTextOutProtocolGuid, @@ -1032,7 +1004,7 @@ PlatformBdsEnterFrontPage ( ); if (EFI_ERROR (Status)) { SimpleTextOut = NULL; - } + } if (GraphicsOutput != NULL) { // @@ -1055,9 +1027,9 @@ PlatformBdsEnterFrontPage ( // // Get user defined text mode for setup. - // + // mSetupHorizontalResolution = PcdGet32 (PcdSetupVideoHorizontalResolution); - mSetupVerticalResolution = PcdGet32 (PcdSetupVideoVerticalResolution); + mSetupVerticalResolution = PcdGet32 (PcdSetupVideoVerticalResolution); mSetupTextModeColumn = PcdGet32 (PcdSetupConOutColumn); mSetupTextModeRow = PcdGet32 (PcdSetupConOutRow); @@ -1084,8 +1056,8 @@ PlatformBdsEnterFrontPage ( if (!EFI_ERROR(Status) && ((OsIndication & EFI_OS_INDICATIONS_BOOT_TO_FW_UI) != 0)) { // // Clear EFI_OS_INDICATIONS_BOOT_TO_FW_UI to acknowledge OS - // - OsIndication &= ~EFI_OS_INDICATIONS_BOOT_TO_FW_UI; + // + OsIndication &= ~((UINT64)EFI_OS_INDICATIONS_BOOT_TO_FW_UI); Status = gRT->SetVariable ( L"OsIndications", &gEfiGlobalVariableGuid, @@ -1093,6 +1065,9 @@ PlatformBdsEnterFrontPage ( sizeof(UINT64), &OsIndication ); + // + // Changing the content without increasing its size with current variable implementation shouldn't fail. + // ASSERT_EFI_ERROR (Status); // @@ -1118,7 +1093,7 @@ PlatformBdsEnterFrontPage ( if (!FeaturePcdGet(PcdBootlogoOnlyEnable) || !EFI_ERROR(Status) || !EFI_ERROR(StatusHotkey)){ // // Ensure screen is clear when switch Console from Graphics mode to Text mode - // Skip it in normal boot + // Skip it in normal boot // gST->ConOut->EnableCursor (gST->ConOut, TRUE); gST->ConOut->ClearScreen (gST->ConOut); @@ -1141,13 +1116,19 @@ PlatformBdsEnterFrontPage ( BootLogo->SetBootLogo (BootLogo, NULL, 0, 0, 0, 0); } + // + // Install BM HiiPackages. + // Keep BootMaint HiiPackage, so that it can be covered by global setting. + // + InitBMPackage (); + Status = EFI_SUCCESS; do { // // Set proper video resolution and text mode for setup // BdsSetConsoleMode (TRUE); - + InitializeFrontPage (FALSE); // @@ -1196,10 +1177,20 @@ PlatformBdsEnterFrontPage ( break; case FRONT_PAGE_KEY_BOOT_MANAGER: + // + // Remove the installed BootMaint HiiPackages when exit. + // + FreeBMPackage (); + // // User chose to run the Boot Manager // CallBootManager (); + + // + // Reinstall BootMaint HiiPackages after exiting from Boot Manager. + // + InitBMPackage (); break; case FRONT_PAGE_KEY_DEVICE_MANAGER: @@ -1223,12 +1214,18 @@ PlatformBdsEnterFrontPage ( if (mLanguageString != NULL) { FreePool (mLanguageString); + mLanguageString = NULL; } // //Will leave browser, check any reset required change is applied? if yes, reset system // SetupResetReminder (); + // + // Remove the installed BootMaint HiiPackages when exit. + // + FreeBMPackage (); + Exit: // // Automatically load current entry @@ -1240,9 +1237,9 @@ Exit: /** This function will change video resolution and text mode - according to defined setup mode or defined boot mode + according to defined setup mode or defined boot mode - @param IsSetupMode Indicate mode is changed to setup mode or boot mode. + @param IsSetupMode Indicate mode is changed to setup mode or boot mode. @retval EFI_SUCCESS Mode is changed successfully. @retval Others Mode failed to be changed. @@ -1270,13 +1267,13 @@ BdsSetConsoleMode ( EFI_STATUS Status; UINTN Index; UINTN CurrentColumn; - UINTN CurrentRow; + UINTN CurrentRow; MaxGopMode = 0; MaxTextMode = 0; // - // Get current video resolution and text mode + // Get current video resolution and text mode // Status = gBS->HandleProtocol ( gST->ConsoleOutHandle, @@ -1294,7 +1291,7 @@ BdsSetConsoleMode ( ); if (EFI_ERROR (Status)) { SimpleTextOut = NULL; - } + } if ((GraphicsOutput == NULL) || (SimpleTextOut == NULL)) { return EFI_UNSUPPORTED; @@ -1302,7 +1299,7 @@ BdsSetConsoleMode ( if (IsSetupMode) { // - // The requried resolution and text mode is setup mode. + // The required resolution and text mode is setup mode. // NewHorizontalResolution = mSetupHorizontalResolution; NewVerticalResolution = mSetupVerticalResolution; @@ -1315,12 +1312,12 @@ BdsSetConsoleMode ( NewHorizontalResolution = mBootHorizontalResolution; NewVerticalResolution = mBootVerticalResolution; NewColumns = mBootTextModeColumn; - NewRows = mBootTextModeRow; + NewRows = mBootTextModeRow; } - + if (GraphicsOutput != NULL) { MaxGopMode = GraphicsOutput->Mode->MaxMode; - } + } if (SimpleTextOut != NULL) { MaxTextMode = SimpleTextOut->Mode->MaxMode; @@ -1358,7 +1355,7 @@ BdsSetConsoleMode ( return EFI_SUCCESS; } else { // - // If current text mode is different from requried text mode. Set new video mode + // If current text mode is different from required text mode. Set new video mode // for (Index = 0; Index < MaxTextMode; Index++) { Status = SimpleTextOut->QueryMode (SimpleTextOut, Index, &CurrentColumn, &CurrentRow); @@ -1372,8 +1369,10 @@ BdsSetConsoleMode ( // // Update text mode PCD. // - PcdSet32 (PcdConOutColumn, mSetupTextModeColumn); - PcdSet32 (PcdConOutRow, mSetupTextModeRow); + Status = PcdSet32S (PcdConOutColumn, mSetupTextModeColumn); + ASSERT_EFI_ERROR (Status); + Status = PcdSet32S (PcdConOutRow, mSetupTextModeRow); + ASSERT_EFI_ERROR (Status); FreePool (Info); return EFI_SUCCESS; } @@ -1381,7 +1380,7 @@ BdsSetConsoleMode ( } if (Index == MaxTextMode) { // - // If requried text mode is not supported, return error. + // If required text mode is not supported, return error. // FreePool (Info); return EFI_UNSUPPORTED; @@ -1414,12 +1413,16 @@ BdsSetConsoleMode ( // Set PCD to Inform GraphicsConsole to change video resolution. // Set PCD to Inform Consplitter to change text mode. // - PcdSet32 (PcdVideoHorizontalResolution, NewHorizontalResolution); - PcdSet32 (PcdVideoVerticalResolution, NewVerticalResolution); - PcdSet32 (PcdConOutColumn, NewColumns); - PcdSet32 (PcdConOutRow, NewRows); - - + Status = PcdSet32S (PcdVideoHorizontalResolution, NewHorizontalResolution); + ASSERT_EFI_ERROR (Status); + Status = PcdSet32S (PcdVideoVerticalResolution, NewVerticalResolution); + ASSERT_EFI_ERROR (Status); + Status = PcdSet32S (PcdConOutColumn, NewColumns); + ASSERT_EFI_ERROR (Status); + Status = PcdSet32S (PcdConOutRow, NewRows); + ASSERT_EFI_ERROR (Status); + + // // Video mode is changed, so restart graphics console driver and higher level driver. // Reconnect graphics console driver and higher level driver.