]> git.proxmox.com Git - mirror_edk2.git/blobdiff - MdeModulePkg/Universal/HiiDatabaseDxe/HiiDatabaseEntry.c
Roll back changes to apply GetBestLanguage() in HiiDataBase. Exact language match...
[mirror_edk2.git] / MdeModulePkg / Universal / HiiDatabaseDxe / HiiDatabaseEntry.c
index 4bba8af1b182a9a50a9eed58b2440f65b8985015..85202b2b63f962c7a5cc5cbaadf06009c13ed85e 100644 (file)
@@ -1,4 +1,6 @@
 /** @file\r
+This file contains the entry code to the HII database, which is defined by\r
+UEFI 2.1 specification.\r
 \r
 Copyright (c) 2007 - 2008, Intel Corporation\r
 All rights reserved. This program and the accompanying materials\r
@@ -9,18 +11,6 @@ http://opensource.org/licenses/bsd-license.php
 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
 \r
-Module Name:\r
-\r
-    HiiDatabaseEntry.c\r
-\r
-Abstract:\r
-\r
-    This file contains the entry code to the HII database, which is defined by\r
-    UEFI 2.1 specification.\r
-\r
-Revision History\r
-\r
-\r
 **/\r
 \r
 \r
@@ -30,9 +20,9 @@ Revision History
 // Global variables\r
 //\r
 EFI_EVENT gHiiKeyboardLayoutChanged;\r
-STATIC EFI_GUID gHiiSetKbdLayoutEventGuid = EFI_HII_SET_KEYBOARD_LAYOUT_EVENT_GUID;\r
+EFI_GUID gHiiSetKbdLayoutEventGuid = EFI_HII_SET_KEYBOARD_LAYOUT_EVENT_GUID;\r
 \r
-STATIC HII_DATABASE_PRIVATE_DATA mPrivate = {\r
+HII_DATABASE_PRIVATE_DATA mPrivate = {\r
   HII_DATABASE_PRIVATE_DATA_SIGNATURE,\r
   {\r
     (LIST_ENTRY *) NULL,\r
@@ -48,15 +38,13 @@ STATIC HII_DATABASE_PRIVATE_DATA mPrivate = {
     HiiGetGlyph,\r
     HiiGetFontInfo\r
   },\r
-#ifndef DISABLE_UNUSED_HII_PROTOCOLS\r
   {\r
-    HiiNewImage,\r
-    HiiGetImage,\r
-    HiiSetImage,\r
-    HiiDrawImage,\r
-    HiiDrawImageId\r
+    NULL,\r
+    NULL,\r
+    NULL,\r
+    NULL,\r
+    NULL\r
   },\r
-#endif\r
   {\r
     HiiNewString,\r
     HiiGetString,\r
@@ -104,7 +92,24 @@ STATIC HII_DATABASE_PRIVATE_DATA mPrivate = {
   NULL\r
 };\r
 \r
-STATIC\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
+\r
+  This is internal function.\r
+\r
+  @param Event           The event that triggered this notification function.\r
+  @param Context         Pointer to the notification functions context.\r
+\r
+**/\r
 VOID\r
 EFIAPI\r
 KeyboardLayoutChangeNullEvent (\r
@@ -115,54 +120,41 @@ KeyboardLayoutChangeNullEvent (
   return;\r
 }\r
 \r
+/**\r
+  Initialize HII Database.\r
+\r
+\r
+  @param ImageHandle     The image handle.\r
+  @param SystemTable     The system table.\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
+          Check gBS->InstallMultipleProtocolInterfaces for details.\r
+\r
+**/\r
 EFI_STATUS\r
 EFIAPI\r
 InitializeHiiDatabase (\r
   IN EFI_HANDLE           ImageHandle,\r
   IN EFI_SYSTEM_TABLE     *SystemTable\r
   )\r
-/*++\r
-\r
-Routine Description:\r
-  Initialize HII Database\r
-\r
-Arguments:\r
-  (Standard EFI Image entry - EFI_IMAGE_ENTRY_POINT)\r
-\r
-Returns:\r
-  EFI_SUCCESS -\r
-  other       -\r
-\r
---*/\r
 {\r
   EFI_STATUS                             Status;\r
   EFI_HANDLE                             Handle;\r
-  EFI_HANDLE                             *HandleBuffer;\r
-  UINTN                                  HandleCount;\r
 \r
   //\r
   // There will be only one HII Database in the system\r
   // If there is another out there, someone is trying to install us\r
   // again.  Fail that scenario.\r
   //\r
-  Status = gBS->LocateHandleBuffer (\r
-                  ByProtocol,\r
-                  &gEfiHiiDatabaseProtocolGuid,\r
-                  NULL,\r
-                  &HandleCount,\r
-                  &HandleBuffer\r
-                  );\r
-\r
-  //\r
-  // If there was no error, assume there is an installation and fail to load\r
-  //\r
-  if (!EFI_ERROR (Status)) {\r
-    if (HandleBuffer != NULL) {\r
-      gBS->FreePool (HandleBuffer);\r
-    }\r
-    return EFI_DEVICE_ERROR;\r
-  }\r
-\r
+  ASSERT_PROTOCOL_ALREADY_INSTALLED (NULL, &gEfiHiiDatabaseProtocolGuid);\r
+  ASSERT_PROTOCOL_ALREADY_INSTALLED (NULL, &gEfiHiiFontProtocolGuid);\r
+  ASSERT_PROTOCOL_ALREADY_INSTALLED (NULL, &gEfiHiiImageProtocolGuid);\r
+  ASSERT_PROTOCOL_ALREADY_INSTALLED (NULL, &gEfiHiiStringProtocolGuid);\r
+  ASSERT_PROTOCOL_ALREADY_INSTALLED (NULL, &gEfiHiiConfigRoutingProtocolGuid);\r
+  \r
   InitializeListHead (&mPrivate.DatabaseList);\r
   InitializeListHead (&mPrivate.DatabaseNotifyList);\r
   InitializeListHead (&mPrivate.HiiHandleList);\r
@@ -172,7 +164,7 @@ Returns:
   // Create a event with EFI_HII_SET_KEYBOARD_LAYOUT_EVENT_GUID group type.\r
   //\r
   Status = gBS->CreateEventEx (\r
-                  EFI_EVENT_NOTIFY_SIGNAL,\r
+                  EVT_NOTIFY_SIGNAL,\r
                   TPL_NOTIFY,\r
                   KeyboardLayoutChangeNullEvent,\r
                   NULL,\r
@@ -184,21 +176,35 @@ Returns:
   }\r
 \r
   Handle = NULL;\r
-  return gBS->InstallMultipleProtocolInterfaces (\r
-                &Handle,\r
-                &gEfiHiiFontProtocolGuid,\r
-                &mPrivate.HiiFont,\r
-#ifndef DISABLE_UNUSED_HII_PROTOCOLS\r
-                &gEfiHiiImageProtocolGuid,\r
-                &mPrivate.HiiImage,\r
-#endif\r
-                &gEfiHiiStringProtocolGuid,\r
-                &mPrivate.HiiString,\r
-                &gEfiHiiDatabaseProtocolGuid,\r
-                &mPrivate.HiiDatabase,\r
-                &gEfiHiiConfigRoutingProtocolGuid,\r
-                &mPrivate.ConfigRouting,\r
-                NULL\r
-                );\r
+  Status = gBS->InstallMultipleProtocolInterfaces (\r
+                  &Handle,\r
+                  &gEfiHiiFontProtocolGuid,\r
+                  &mPrivate.HiiFont,\r
+                  &gEfiHiiStringProtocolGuid,\r
+                  &mPrivate.HiiString,\r
+                  &gEfiHiiDatabaseProtocolGuid,\r
+                  &mPrivate.HiiDatabase,\r
+                  &gEfiHiiConfigRoutingProtocolGuid,\r
+                  &mPrivate.ConfigRouting,\r
+                  NULL\r
+                  );\r
+\r
+  if (EFI_ERROR (Status)) {\r
+    return Status;\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
+                    NULL\r
+                    );\r
+\r
+  }\r
+\r
+  return Status;\r
 }\r
 \r