--- /dev/null
+/** @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