]> git.proxmox.com Git - mirror_edk2.git/blobdiff - MdeModulePkg/Universal/HiiDatabaseDxe/HiiDatabaseEntry.c
UEFI HII: Merge UEFI HII support changes from branch.
[mirror_edk2.git] / MdeModulePkg / Universal / HiiDatabaseDxe / HiiDatabaseEntry.c
diff --git a/MdeModulePkg/Universal/HiiDatabaseDxe/HiiDatabaseEntry.c b/MdeModulePkg/Universal/HiiDatabaseDxe/HiiDatabaseEntry.c
new file mode 100644 (file)
index 0000000..99084db
--- /dev/null
@@ -0,0 +1,197 @@
+/** @file\r
+\r
+Copyright (c) 2007, Intel Corporation\r
+All rights reserved. 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
+\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
+#include "HiiDatabase.h"\r
+\r
+//\r
+// Global variables\r
+//\r
+EFI_EVENT gHiiKeyboardLayoutChanged;\r
+STATIC EFI_GUID gHiiSetKbdLayoutEventGuid = EFI_HII_SET_KEYBOARD_LAYOUT_EVENT_GUID;\r
+\r
+STATIC HII_DATABASE_PRIVATE_DATA mPrivate = {\r
+  HII_DATABASE_PRIVATE_DATA_SIGNATURE,\r
+  {\r
+    (LIST_ENTRY *) NULL,\r
+    (LIST_ENTRY *) NULL\r
+  },\r
+  {\r
+    (LIST_ENTRY *) NULL,\r
+    (LIST_ENTRY *) NULL\r
+  },\r
+  {\r
+    HiiStringToImage,\r
+    HiiStringIdToImage,\r
+    HiiGetGlyph,\r
+    HiiGetFontInfo\r
+  },\r
+#ifndef DISABLE_UNUSED_HII_PROTOCOLS\r
+  {\r
+    HiiNewImage,\r
+    HiiGetImage,\r
+    HiiSetImage,\r
+    HiiDrawImage,\r
+    HiiDrawImageId\r
+  },\r
+#endif\r
+  {\r
+    HiiNewString,\r
+    HiiGetString,\r
+    HiiSetString,\r
+    HiiGetLanguages,\r
+    HiiGetSecondaryLanguages\r
+  },\r
+  {\r
+    HiiNewPackageList,\r
+    HiiRemovePackageList,\r
+    HiiUpdatePackageList,\r
+    HiiListPackageLists,\r
+    HiiExportPackageLists,\r
+    HiiRegisterPackageNotify,\r
+    HiiUnregisterPackageNotify,\r
+    HiiFindKeyboardLayouts,\r
+    HiiGetKeyboardLayout,\r
+    HiiSetKeyboardLayout,\r
+    HiiGetPackageListHandle\r
+  },\r
+  {\r
+    HiiConfigRoutingExtractConfig,\r
+    HiiConfigRoutingExportConfig,\r
+    HiiConfigRoutingRoutConfig,\r
+    HiiBlockToConfig,\r
+    HiiConfigToBlock,\r
+    HiiGetAltCfg\r
+  },\r
+  {\r
+    (LIST_ENTRY *) NULL,\r
+    (LIST_ENTRY *) NULL\r
+  },\r
+  0,\r
+  {\r
+    (LIST_ENTRY *) NULL,\r
+    (LIST_ENTRY *) NULL\r
+  },\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
+  },\r
+  NULL\r
+};\r
+\r
+//@MT: EFI_DRIVER_ENTRY_POINT (InitializeHiiDatabase)\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
+  //@MT: EfiInitializeDriverLib (ImageHandle, SystemTable);\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
+  InitializeListHead (&mPrivate.DatabaseList);\r
+  InitializeListHead (&mPrivate.DatabaseNotifyList);\r
+  InitializeListHead (&mPrivate.HiiHandleList);\r
+  InitializeListHead (&mPrivate.FontInfoList);\r
+\r
+  //\r
+  // Create a event with EFI_HII_SET_KEYBOARD_LAYOUT_EVENT_GUID group type.\r
+  //\r
+  Status = gBS->CreateEventEx (\r
+                  0,\r
+                  0,\r
+                  NULL,\r
+                  NULL,\r
+                  &gHiiSetKbdLayoutEventGuid,\r
+                  &gHiiKeyboardLayoutChanged\r
+                  );\r
+  if (EFI_ERROR (Status)) {\r
+    return Status;\r
+  }\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
+}\r
+\r