This file contains the entry code to the HII database, which is defined by\r
UEFI 2.1 specification.\r
\r
-Copyright (c) 2007 - 2015, Intel Corporation. All rights reserved.<BR>\r
-This program and the accompanying materials\r
-are licensed and made available under the terms and conditions of the BSD License\r
-which accompanies this distribution. The full text of the license may be found at\r
-http://opensource.org/licenses/bsd-license.php\r
-\r
-THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,\r
-WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.\r
+Copyright (c) 2007 - 2018, Intel Corporation. All rights reserved.<BR>\r
+SPDX-License-Identifier: BSD-2-Clause-Patent\r
\r
**/\r
\r
-\r
#include "HiiDatabase.h"\r
\r
//\r
// Global variables\r
//\r
-EFI_EVENT gHiiKeyboardLayoutChanged;\r
+EFI_EVENT gHiiKeyboardLayoutChanged;\r
+BOOLEAN gExportAfterReadyToBoot = FALSE;\r
\r
-HII_DATABASE_PRIVATE_DATA mPrivate = {\r
+HII_DATABASE_PRIVATE_DATA mPrivate = {\r
HII_DATABASE_PRIVATE_DATA_SIGNATURE,\r
{\r
- (LIST_ENTRY *) NULL,\r
- (LIST_ENTRY *) NULL\r
+ (LIST_ENTRY *)NULL,\r
+ (LIST_ENTRY *)NULL\r
},\r
{\r
- (LIST_ENTRY *) NULL,\r
- (LIST_ENTRY *) NULL\r
+ (LIST_ENTRY *)NULL,\r
+ (LIST_ENTRY *)NULL\r
},\r
{\r
HiiStringToImage,\r
HiiGetFontInfo\r
},\r
{\r
- NULL,\r
- NULL,\r
- NULL,\r
- NULL,\r
- NULL\r
+ HiiNewImage,\r
+ HiiGetImage,\r
+ HiiSetImage,\r
+ HiiDrawImage,\r
+ HiiDrawImageId\r
+ },\r
+ {\r
+ HiiNewImageEx,\r
+ HiiGetImageEx,\r
+ HiiSetImageEx,\r
+ HiiDrawImageEx,\r
+ HiiDrawImageIdEx,\r
+ HiiGetImageInfo\r
},\r
{\r
HiiNewString,\r
EfiConfigKeywordHandlerGetData\r
},\r
{\r
- (LIST_ENTRY *) NULL,\r
- (LIST_ENTRY *) NULL\r
+ (LIST_ENTRY *)NULL,\r
+ (LIST_ENTRY *)NULL\r
},\r
0,\r
{\r
- (LIST_ENTRY *) NULL,\r
- (LIST_ENTRY *) NULL\r
+ (LIST_ENTRY *)NULL,\r
+ (LIST_ENTRY *)NULL\r
},\r
- EFI_TEXT_ATTR (EFI_LIGHTGRAY, EFI_BLACK),\r
+ EFI_TEXT_ATTR (EFI_LIGHTGRAY, EFI_BLACK),\r
{\r
0x00000000,\r
0x0000,\r
0x0000,\r
- {0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}\r
+ { 0x00, 0x00, 0x00,0x00, 0x00, 0x00, 0x00, 0x00 }\r
},\r
NULL\r
};\r
\r
-GLOBAL_REMOVE_IF_UNREFERENCED CONST EFI_HII_IMAGE_PROTOCOL mImageProtocol = {\r
- HiiNewImage,\r
- HiiGetImage,\r
- HiiSetImage,\r
- HiiDrawImage,\r
- HiiDrawImageId\r
-};\r
-\r
/**\r
The default event handler for gHiiKeyboardLayoutChanged\r
event group.\r
VOID\r
EFIAPI\r
KeyboardLayoutChangeNullEvent (\r
- IN EFI_EVENT Event,\r
- IN VOID *Context\r
+ IN EFI_EVENT Event,\r
+ IN VOID *Context\r
)\r
{\r
return;\r
}\r
\r
+/**\r
+ On Ready To Boot Services Event notification handler.\r
+\r
+ To trigger the function that to export the Hii Configuration setting.\r
+\r
+ @param[in] Event Event whose notification function is being invoked\r
+ @param[in] Context Pointer to the notification function's context\r
+\r
+**/\r
+VOID\r
+EFIAPI\r
+OnReadyToBoot (\r
+ IN EFI_EVENT Event,\r
+ IN VOID *Context\r
+ )\r
+{\r
+ //\r
+ // When ready to boot, we begin to export the HiiDatabase date.\r
+ // And hook all the possible HiiDatabase change actions to export data.\r
+ //\r
+ HiiGetDatabaseInfo (&mPrivate.HiiDatabase);\r
+ HiiGetConfigRespInfo (&mPrivate.HiiDatabase);\r
+ gExportAfterReadyToBoot = TRUE;\r
+\r
+ gBS->CloseEvent (Event);\r
+}\r
+\r
/**\r
Initialize HII Database.\r
\r
@retval EFI_SUCCESS The Hii database is setup correctly.\r
@return Other value if failed to create the default event for\r
gHiiKeyboardLayoutChanged. Check gBS->CreateEventEx for\r
- details. Or failed to insatll the protocols.\r
+ details. Or failed to install the protocols.\r
Check gBS->InstallMultipleProtocolInterfaces for details.\r
+ Or failed to create Ready To Boot Event.\r
+ Check EfiCreateEventReadyToBootEx for details.\r
\r
**/\r
EFI_STATUS\r
EFIAPI\r
InitializeHiiDatabase (\r
- IN EFI_HANDLE ImageHandle,\r
- IN EFI_SYSTEM_TABLE *SystemTable\r
+ IN EFI_HANDLE ImageHandle,\r
+ IN EFI_SYSTEM_TABLE *SystemTable\r
)\r
{\r
- EFI_STATUS Status;\r
- EFI_HANDLE Handle;\r
+ EFI_STATUS Status;\r
+ EFI_HANDLE Handle;\r
+ EFI_EVENT ReadyToBootEvent;\r
\r
//\r
// There will be only one HII Database in the system\r
ASSERT_PROTOCOL_ALREADY_INSTALLED (NULL, &gEfiHiiStringProtocolGuid);\r
ASSERT_PROTOCOL_ALREADY_INSTALLED (NULL, &gEfiHiiConfigRoutingProtocolGuid);\r
ASSERT_PROTOCOL_ALREADY_INSTALLED (NULL, &gEfiConfigKeywordHandlerProtocolGuid);\r
- \r
+\r
InitializeListHead (&mPrivate.DatabaseList);\r
InitializeListHead (&mPrivate.DatabaseNotifyList);\r
InitializeListHead (&mPrivate.HiiHandleList);\r
}\r
\r
if (FeaturePcdGet (PcdSupportHiiImageProtocol)) {\r
- CopyMem (&mPrivate.HiiImage, &mImageProtocol, sizeof (mImageProtocol));\r
-\r
Status = gBS->InstallMultipleProtocolInterfaces (\r
&Handle,\r
&gEfiHiiImageProtocolGuid,\r
&mPrivate.HiiImage,\r
+ &gEfiHiiImageExProtocolGuid,\r
+ &mPrivate.HiiImageEx,\r
NULL\r
);\r
+ }\r
\r
+ if (FeaturePcdGet (PcdHiiOsRuntimeSupport)) {\r
+ Status = EfiCreateEventReadyToBootEx (\r
+ TPL_CALLBACK,\r
+ OnReadyToBoot,\r
+ NULL,\r
+ &ReadyToBootEvent\r
+ );\r
+ if (EFI_ERROR (Status)) {\r
+ return Status;\r
+ }\r
}\r
\r
return Status;\r
}\r
-\r