X-Git-Url: https://git.proxmox.com/?a=blobdiff_plain;ds=sidebyside;f=MdeModulePkg%2FUniversal%2FHiiDatabaseDxe%2FHiiDatabaseEntry.c;h=bbf437bbb9b436428d3eb33eee0fa5ed2d45e309;hb=9d510e61fceee7b92955ef9a3c20343752d8ce3f;hp=827109c4b832e7be906e724ddbf4e104d9117f48;hpb=fe1e36e550c6ffcd2561903d434683d3939e1942;p=mirror_edk2.git diff --git a/MdeModulePkg/Universal/HiiDatabaseDxe/HiiDatabaseEntry.c b/MdeModulePkg/Universal/HiiDatabaseDxe/HiiDatabaseEntry.c index 827109c4b8..bbf437bbb9 100644 --- a/MdeModulePkg/Universal/HiiDatabaseDxe/HiiDatabaseEntry.c +++ b/MdeModulePkg/Universal/HiiDatabaseDxe/HiiDatabaseEntry.c @@ -1,25 +1,9 @@ /** @file +This file contains the entry code to the HII database, which is defined by +UEFI 2.1 specification. -Copyright (c) 2007 - 2008, 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. - -Module Name: - - HiiDatabaseEntry.c - -Abstract: - - This file contains the entry code to the HII database, which is defined by - UEFI 2.1 specification. - -Revision History - +Copyright (c) 2007 - 2018, Intel Corporation. All rights reserved.
+SPDX-License-Identifier: BSD-2-Clause-Patent **/ @@ -30,7 +14,7 @@ Revision History // Global variables // EFI_EVENT gHiiKeyboardLayoutChanged; -EFI_GUID gHiiSetKbdLayoutEventGuid = EFI_HII_SET_KEYBOARD_LAYOUT_EVENT_GUID; +BOOLEAN gExportAfterReadyToBoot = FALSE; HII_DATABASE_PRIVATE_DATA mPrivate = { HII_DATABASE_PRIVATE_DATA_SIGNATURE, @@ -49,11 +33,19 @@ HII_DATABASE_PRIVATE_DATA mPrivate = { HiiGetFontInfo }, { - NULL, - NULL, - NULL, - NULL, - NULL + HiiNewImage, + HiiGetImage, + HiiSetImage, + HiiDrawImage, + HiiDrawImageId + }, + { + HiiNewImageEx, + HiiGetImageEx, + HiiSetImageEx, + HiiDrawImageEx, + HiiDrawImageIdEx, + HiiGetImageInfo }, { HiiNewString, @@ -83,6 +75,10 @@ HII_DATABASE_PRIVATE_DATA mPrivate = { HiiConfigToBlock, HiiGetAltCfg }, + { + EfiConfigKeywordHandlerSetData, + EfiConfigKeywordHandlerGetData + }, { (LIST_ENTRY *) NULL, (LIST_ENTRY *) NULL @@ -102,14 +98,6 @@ HII_DATABASE_PRIVATE_DATA mPrivate = { NULL }; -GLOBAL_REMOVE_IF_UNREFERENCED CONST EFI_HII_IMAGE_PROTOCOL mImageProtocol = { - HiiNewImage, - HiiGetImage, - HiiSetImage, - HiiDrawImage, - HiiDrawImageId -}; - /** The default event handler for gHiiKeyboardLayoutChanged event group. @@ -130,6 +118,33 @@ KeyboardLayoutChangeNullEvent ( return; } +/** + On Ready To Boot Services Event notification handler. + + To trigger the function that to export the Hii Configuration setting. + + @param[in] Event Event whose notification function is being invoked + @param[in] Context Pointer to the notification function's context + +**/ +VOID +EFIAPI +OnReadyToBoot ( + IN EFI_EVENT Event, + IN VOID *Context + ) +{ + // + // When ready to boot, we begin to export the HiiDatabase date. + // And hook all the possible HiiDatabase change actions to export data. + // + HiiGetDatabaseInfo (&mPrivate.HiiDatabase); + HiiGetConfigRespInfo (&mPrivate.HiiDatabase); + gExportAfterReadyToBoot = TRUE; + + gBS->CloseEvent (Event); +} + /** Initialize HII Database. @@ -140,8 +155,10 @@ KeyboardLayoutChangeNullEvent ( @retval EFI_SUCCESS The Hii database is setup correctly. @return Other value if failed to create the default event for gHiiKeyboardLayoutChanged. Check gBS->CreateEventEx for - details. Or failed to insatll the protocols. + details. Or failed to install the protocols. Check gBS->InstallMultipleProtocolInterfaces for details. + Or failed to create Ready To Boot Event. + Check EfiCreateEventReadyToBootEx for details. **/ EFI_STATUS @@ -153,6 +170,7 @@ InitializeHiiDatabase ( { EFI_STATUS Status; EFI_HANDLE Handle; + EFI_EVENT ReadyToBootEvent; // // There will be only one HII Database in the system @@ -164,7 +182,8 @@ InitializeHiiDatabase ( ASSERT_PROTOCOL_ALREADY_INSTALLED (NULL, &gEfiHiiImageProtocolGuid); ASSERT_PROTOCOL_ALREADY_INSTALLED (NULL, &gEfiHiiStringProtocolGuid); ASSERT_PROTOCOL_ALREADY_INSTALLED (NULL, &gEfiHiiConfigRoutingProtocolGuid); - + ASSERT_PROTOCOL_ALREADY_INSTALLED (NULL, &gEfiConfigKeywordHandlerProtocolGuid); + InitializeListHead (&mPrivate.DatabaseList); InitializeListHead (&mPrivate.DatabaseNotifyList); InitializeListHead (&mPrivate.HiiHandleList); @@ -178,7 +197,7 @@ InitializeHiiDatabase ( TPL_NOTIFY, KeyboardLayoutChangeNullEvent, NULL, - &gHiiSetKbdLayoutEventGuid, + &gEfiHiiKeyBoardLayoutGuid, &gHiiKeyboardLayoutChanged ); if (EFI_ERROR (Status)) { @@ -196,6 +215,8 @@ InitializeHiiDatabase ( &mPrivate.HiiDatabase, &gEfiHiiConfigRoutingProtocolGuid, &mPrivate.ConfigRouting, + &gEfiConfigKeywordHandlerProtocolGuid, + &mPrivate.ConfigKeywordHandler, NULL ); @@ -204,17 +225,27 @@ InitializeHiiDatabase ( } if (FeaturePcdGet (PcdSupportHiiImageProtocol)) { - CopyMem (&mPrivate.HiiImage, &mImageProtocol, sizeof (mImageProtocol)); - Status = gBS->InstallMultipleProtocolInterfaces ( &Handle, - &gEfiHiiImageProtocolGuid, - &mPrivate.HiiImage, + &gEfiHiiImageProtocolGuid, &mPrivate.HiiImage, + &gEfiHiiImageExProtocolGuid, &mPrivate.HiiImageEx, NULL ); } + if (FeaturePcdGet(PcdHiiOsRuntimeSupport)) { + Status = EfiCreateEventReadyToBootEx ( + TPL_CALLBACK, + OnReadyToBoot, + NULL, + &ReadyToBootEvent + ); + if (EFI_ERROR (Status)) { + return Status; + } + } + return Status; }