]> git.proxmox.com Git - mirror_edk2.git/blobdiff - MdeModulePkg/Universal/HiiDatabaseDxe/HiiDatabaseEntry.c
UefiCpuPkg: Move AsmRelocateApLoopStart from Mpfuncs.nasm to AmdSev.nasm
[mirror_edk2.git] / MdeModulePkg / Universal / HiiDatabaseDxe / HiiDatabaseEntry.c
index 6448c97256fc764d812b141870a097ec4c98af8c..e4bdfdeed0d734fb495ccde72e2eda40e9c1b3c2 100644 (file)
@@ -2,34 +2,28 @@
 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
@@ -38,11 +32,19 @@ HII_DATABASE_PRIVATE_DATA mPrivate = {
     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
@@ -77,32 +79,24 @@ HII_DATABASE_PRIVATE_DATA mPrivate = {
     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
@@ -116,13 +110,40 @@ GLOBAL_REMOVE_IF_UNREFERENCED CONST EFI_HII_IMAGE_PROTOCOL mImageProtocol = {
 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
@@ -133,19 +154,22 @@ KeyboardLayoutChangeNullEvent (
   @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
@@ -158,7 +182,7 @@ InitializeHiiDatabase (
   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
@@ -200,17 +224,27 @@ InitializeHiiDatabase (
   }\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