X-Git-Url: https://git.proxmox.com/?p=mirror_edk2.git;a=blobdiff_plain;f=IntelFrameworkModulePkg%2FUniversal%2FBdsDxe%2FFrontPage.c;h=55fce979f781cf8f2ff961ee6ac0f83cac58e07e;hp=99abf1460af827181ac4ca5b09926a3b974e1df0;hb=b55f8b0146ab1a0b26909a63bb04ba850b9ba198;hpb=ad5a96ab2daeeac53f0c924113f23dc931f965c5 diff --git a/IntelFrameworkModulePkg/Universal/BdsDxe/FrontPage.c b/IntelFrameworkModulePkg/Universal/BdsDxe/FrontPage.c index 99abf1460a..55fce979f7 100644 --- a/IntelFrameworkModulePkg/Universal/BdsDxe/FrontPage.c +++ b/IntelFrameworkModulePkg/Universal/BdsDxe/FrontPage.c @@ -56,7 +56,7 @@ HII_VENDOR_DEVICE_PATH mFrontPageHiiVendorDevicePath = { { END_DEVICE_PATH_TYPE, END_ENTIRE_DEVICE_PATH_SUBTYPE, - { + { (UINT8) (END_DEVICE_PATH_LENGTH), (UINT8) ((END_DEVICE_PATH_LENGTH) >> 8) } @@ -94,6 +94,10 @@ FakeExtractConfig ( OUT EFI_STRING *Results ) { + if (Request == NULL || Progress == NULL || Results == NULL) { + return EFI_INVALID_PARAMETER; + } + *Progress = Request; return EFI_NOT_FOUND; } @@ -121,6 +125,17 @@ FakeRouteConfig ( OUT EFI_STRING *Progress ) { + if (Configuration == NULL || Progress == NULL) { + return EFI_INVALID_PARAMETER; + } + + *Progress = Configuration; + if (!HiiIsConfigHdrMatch (Configuration, &mBootMaintGuid, mBootMaintStorageName) + && !HiiIsConfigHdrMatch (Configuration, &mFileExplorerGuid, mFileExplorerStorageName)) { + return EFI_NOT_FOUND; + } + + *Progress = Configuration + StrLen (Configuration); return EFI_SUCCESS; } @@ -156,7 +171,6 @@ FrontPageCallback ( CHAR8 *LanguageString; CHAR8 *LangCode; CHAR8 *Lang; - CHAR8 OldLang[ISO_639_2_ENTRY_SIZE]; UINTN Index; EFI_STATUS Status; CHAR8 *PlatformSupportedLanguages; @@ -191,11 +205,11 @@ FrontPageCallback ( // Lang = AllocatePool (AsciiStrSize (LanguageString)); ASSERT (Lang != NULL); - + Index = 0; LangCode = LanguageString; while (*LangCode != 0) { - HiiLibGetNextLanguage (&LangCode, Lang); + GetNextLanguage (&LangCode, Lang); if (Index == Value->u8) { break; @@ -212,7 +226,7 @@ FrontPageCallback ( ); ASSERT (PlatformSupportedLanguages != NULL); } - + // // Select the best language in platform supported Language. // @@ -230,25 +244,12 @@ FrontPageCallback ( AsciiStrSize (BestLanguage), Lang ); - - if (!FeaturePcdGet (PcdUefiVariableDefaultLangDeprecate)) { - // - // Set UEFI deprecated variable "Lang" for backwards compatibility - // - Status = ConvertRfc3066LanguageToIso639Language (BestLanguage, OldLang); - if (!EFI_ERROR (Status)) { - Status = gRT->SetVariable ( - L"Lang", - &gEfiGlobalVariableGuid, - EFI_VARIABLE_NON_VOLATILE | EFI_VARIABLE_BOOTSERVICE_ACCESS | EFI_VARIABLE_RUNTIME_ACCESS, - ISO_639_2_ENTRY_SIZE, - OldLang - ); - } - } + ASSERT_EFI_ERROR(Status); FreePool (BestLanguage); + } else { + ASSERT (FALSE); } - + FreePool (PlatformSupportedLanguages); FreePool (Lang); FreePool (LanguageString); @@ -298,19 +299,21 @@ InitializeFrontPage ( ) { EFI_STATUS Status; - EFI_HII_UPDATE_DATA UpdateData; - IFR_OPTION *OptionList; CHAR8 *LanguageString; CHAR8 *LangCode; CHAR8 *Lang; CHAR8 *CurrentLang; CHAR8 *BestLanguage; UINTN OptionCount; - EFI_STRING_ID Token; CHAR16 *StringBuffer; UINTN BufferSize; - UINTN Index; EFI_HII_HANDLE HiiHandle; + VOID *OptionsOpCodeHandle; + VOID *StartOpCodeHandle; + VOID *EndOpCodeHandle; + EFI_IFR_GUID_LABEL *StartLabel; + EFI_IFR_GUID_LABEL *EndLabel; + BOOLEAN FirstFlag; if (InitializeHiiData) { // @@ -378,14 +381,29 @@ InitializeFrontPage ( // - // Allocate space for creation of UpdateData Buffer + // Init OpCode Handle and Allocate space for creation of UpdateData Buffer + // + StartOpCodeHandle = HiiAllocateOpCodeHandle (); + ASSERT (StartOpCodeHandle != NULL); + + EndOpCodeHandle = HiiAllocateOpCodeHandle (); + ASSERT (EndOpCodeHandle != NULL); + + OptionsOpCodeHandle = HiiAllocateOpCodeHandle (); + ASSERT (OptionsOpCodeHandle != NULL); + // + // Create Hii Extend Label OpCode as the start opcode // - UpdateData.BufferSize = 0x1000; - UpdateData.Data = AllocateZeroPool (0x1000); - ASSERT (UpdateData.Data != NULL); + StartLabel = (EFI_IFR_GUID_LABEL *) HiiCreateGuidOpCode (StartOpCodeHandle, &gEfiIfrTianoGuid, NULL, sizeof (EFI_IFR_GUID_LABEL)); + StartLabel->ExtendOpCode = EFI_IFR_EXTEND_OP_LABEL; + StartLabel->Number = LABEL_SELECT_LANGUAGE; - OptionList = AllocateZeroPool (0x1000); - ASSERT (OptionList != NULL); + // + // Create Hii Extend Label OpCode as the end opcode + // + EndLabel = (EFI_IFR_GUID_LABEL *) HiiCreateGuidOpCode (EndOpCodeHandle, &gEfiIfrTianoGuid, NULL, sizeof (EFI_IFR_GUID_LABEL)); + EndLabel->ExtendOpCode = EFI_IFR_EXTEND_OP_LABEL; + EndLabel->Number = LABEL_END; // // Collect the languages from what our current Language support is based on our VFR @@ -416,12 +434,26 @@ InitializeFrontPage ( // ASSERT (BestLanguage != NULL); + OptionCount = 0; + LangCode = LanguageString; + FirstFlag = FALSE; + + if (gFrontPagePrivate.LanguageToken == NULL) { + while (*LangCode != 0) { + GetNextLanguage (&LangCode, Lang); + OptionCount ++; + } + gFrontPagePrivate.LanguageToken = AllocatePool (OptionCount * sizeof (EFI_STRING_ID)); + ASSERT (gFrontPagePrivate.LanguageToken != NULL); + FirstFlag = TRUE; + } + OptionCount = 0; LangCode = LanguageString; while (*LangCode != 0) { - HiiLibGetNextLanguage (&LangCode, Lang); + GetNextLanguage (&LangCode, Lang); - if (gFrontPagePrivate.LanguageToken == NULL) { + if (FirstFlag) { // // Get Language Name from String Package. The StringId of Printable Language // Name is always 1 which is generated by StringGather Tool. @@ -452,19 +484,30 @@ InitializeFrontPage ( } ASSERT_EFI_ERROR (Status); - Token = HiiSetString (HiiHandle, 0, StringBuffer, NULL); + // + // Save the string Id for each language + // + gFrontPagePrivate.LanguageToken[OptionCount] = HiiSetString (HiiHandle, 0, StringBuffer, NULL); FreePool (StringBuffer); - } else { - Token = gFrontPagePrivate.LanguageToken[OptionCount]; } if (AsciiStrCmp (Lang, BestLanguage) == 0) { - OptionList[OptionCount].Flags = EFI_IFR_OPTION_DEFAULT; + HiiCreateOneOfOptionOpCode ( + OptionsOpCodeHandle, + gFrontPagePrivate.LanguageToken[OptionCount], + EFI_IFR_OPTION_DEFAULT, + EFI_IFR_NUMERIC_SIZE_1, + (UINT8) OptionCount + ); } else { - OptionList[OptionCount].Flags = 0; + HiiCreateOneOfOptionOpCode ( + OptionsOpCodeHandle, + gFrontPagePrivate.LanguageToken[OptionCount], + 0, + EFI_IFR_NUMERIC_SIZE_1, + (UINT8) OptionCount + ); } - OptionList[OptionCount].StringToken = Token; - OptionList[OptionCount].Value.u8 = (UINT8) OptionCount; OptionCount++; } @@ -476,8 +519,8 @@ InitializeFrontPage ( FreePool (Lang); FreePool (LanguageString); - UpdateData.Offset = 0; - CreateOneOfOpCode ( + HiiCreateOneOfOpCode ( + StartOpCodeHandle, FRONT_PAGE_KEY_LANGUAGE, 0, 0, @@ -485,31 +528,21 @@ InitializeFrontPage ( STRING_TOKEN (STR_LANGUAGE_SELECT_HELP), EFI_IFR_FLAG_CALLBACK, EFI_IFR_NUMERIC_SIZE_1, - OptionList, - OptionCount, - &UpdateData + OptionsOpCodeHandle, + NULL ); - Status = IfrLibUpdateForm ( + Status = HiiUpdateForm ( HiiHandle, &mFrontPageGuid, FRONT_PAGE_FORM_ID, - LABEL_SELECT_LANGUAGE, - FALSE, - &UpdateData + StartOpCodeHandle, // LABEL_SELECT_LANGUAGE + EndOpCodeHandle // LABEL_END ); - // - // Save the string Id for each language - // - gFrontPagePrivate.LanguageToken = AllocatePool (OptionCount * sizeof (EFI_STRING_ID)); - ASSERT (gFrontPagePrivate.LanguageToken != NULL); - for (Index = 0; Index < OptionCount; Index++) { - gFrontPagePrivate.LanguageToken[Index] = OptionList[Index].StringToken; - } - - FreePool (UpdateData.Data); - FreePool (OptionList); + HiiFreeOpCodeHandle (StartOpCodeHandle); + HiiFreeOpCodeHandle (EndOpCodeHandle); + HiiFreeOpCodeHandle (OptionsOpCodeHandle); return Status; } @@ -541,7 +574,7 @@ CallFrontPage ( gFormBrowser2, &gFrontPagePrivate.HiiHandle, 1, - NULL, + &mFrontPageGuid, 0, NULL, &ActionRequest @@ -587,7 +620,7 @@ GetProducerString ( } /** - Convert Processor Frequency Data to a string + Convert Processor Frequency Data to a string. @param ProcessorFrequency The frequency data to process @param String The string that is created @@ -688,6 +721,9 @@ UpdateFrontPageStrings ( Record = NULL; do { Status = DataHub->GetNextRecord (DataHub, &MonotonicCount, NULL, &Record); + if (EFI_ERROR (Status) || Record == NULL) { + break; + } if (Record->DataRecordClass == EFI_DATA_RECORD_CLASS_DATA) { DataHeader = (EFI_SUBCLASS_TYPE1_HEADER *) (Record + 1); if (CompareGuid (&Record->DataRecordGuid, &gEfiMiscSubClassGuid) && @@ -844,7 +880,7 @@ ShowProgress ( } 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); @@ -860,7 +896,7 @@ ShowProgress ( 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; @@ -928,7 +964,7 @@ PlatformBdsEnterFrontPage ( { EFI_STATUS Status; - PERF_START (0, "BdsTimeOut", "BDS", 0); + PERF_START (NULL, "BdsTimeOut", "BDS", 0); // // Indicate if we need connect all in the platform setup // @@ -1039,5 +1075,5 @@ Exit: // Note: The following lines of code only execute when Auto boot // takes affect // - PERF_END (0, "BdsTimeOut", "BDS", 0); + PERF_END (NULL, "BdsTimeOut", "BDS", 0); }