| /** @file | |
| Copyright (c) 2007, Intel Corporation | |
| All rights reserved. This program and the accompanying materials | |
| are licensed and made available under the terms and conditions of the BSD License | |
| which accompanies this distribution. The full text of the license may be found at | |
| http://opensource.org/licenses/bsd-license.php | |
| THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS, | |
| WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED. | |
| Module Name: | |
| HiiDatabaseEntry.c | |
| Abstract: | |
| This file contains the entry code to the HII database, which is defined by | |
| UEFI 2.1 specification. | |
| Revision History | |
| **/ | |
| #include "HiiDatabase.h" | |
| // | |
| // Global variables | |
| // | |
| EFI_EVENT gHiiKeyboardLayoutChanged; | |
| STATIC EFI_GUID gHiiSetKbdLayoutEventGuid = EFI_HII_SET_KEYBOARD_LAYOUT_EVENT_GUID; | |
| STATIC HII_DATABASE_PRIVATE_DATA mPrivate = { | |
| HII_DATABASE_PRIVATE_DATA_SIGNATURE, | |
| { | |
| (LIST_ENTRY *) NULL, | |
| (LIST_ENTRY *) NULL | |
| }, | |
| { | |
| (LIST_ENTRY *) NULL, | |
| (LIST_ENTRY *) NULL | |
| }, | |
| { | |
| HiiStringToImage, | |
| HiiStringIdToImage, | |
| HiiGetGlyph, | |
| HiiGetFontInfo | |
| }, | |
| #ifndef DISABLE_UNUSED_HII_PROTOCOLS | |
| { | |
| HiiNewImage, | |
| HiiGetImage, | |
| HiiSetImage, | |
| HiiDrawImage, | |
| HiiDrawImageId | |
| }, | |
| #endif | |
| { | |
| HiiNewString, | |
| HiiGetString, | |
| HiiSetString, | |
| HiiGetLanguages, | |
| HiiGetSecondaryLanguages | |
| }, | |
| { | |
| HiiNewPackageList, | |
| HiiRemovePackageList, | |
| HiiUpdatePackageList, | |
| HiiListPackageLists, | |
| HiiExportPackageLists, | |
| HiiRegisterPackageNotify, | |
| HiiUnregisterPackageNotify, | |
| HiiFindKeyboardLayouts, | |
| HiiGetKeyboardLayout, | |
| HiiSetKeyboardLayout, | |
| HiiGetPackageListHandle | |
| }, | |
| { | |
| HiiConfigRoutingExtractConfig, | |
| HiiConfigRoutingExportConfig, | |
| HiiConfigRoutingRoutConfig, | |
| HiiBlockToConfig, | |
| HiiConfigToBlock, | |
| HiiGetAltCfg | |
| }, | |
| { | |
| (LIST_ENTRY *) NULL, | |
| (LIST_ENTRY *) NULL | |
| }, | |
| 0, | |
| { | |
| (LIST_ENTRY *) NULL, | |
| (LIST_ENTRY *) NULL | |
| }, | |
| EFI_TEXT_ATTR (EFI_LIGHTGRAY, EFI_BLACK), | |
| { | |
| 0x00000000, | |
| 0x0000, | |
| 0x0000, | |
| 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 | |
| }, | |
| NULL | |
| }; | |
| //@MT: EFI_DRIVER_ENTRY_POINT (InitializeHiiDatabase) | |
| EFI_STATUS | |
| EFIAPI | |
| InitializeHiiDatabase ( | |
| IN EFI_HANDLE ImageHandle, | |
| IN EFI_SYSTEM_TABLE *SystemTable | |
| ) | |
| /*++ | |
| Routine Description: | |
| Initialize HII Database | |
| Arguments: | |
| (Standard EFI Image entry - EFI_IMAGE_ENTRY_POINT) | |
| Returns: | |
| EFI_SUCCESS - | |
| other - | |
| --*/ | |
| { | |
| EFI_STATUS Status; | |
| EFI_HANDLE Handle; | |
| EFI_HANDLE *HandleBuffer; | |
| UINTN HandleCount; | |
| //@MT: EfiInitializeDriverLib (ImageHandle, SystemTable); | |
| // | |
| // There will be only one HII Database in the system | |
| // If there is another out there, someone is trying to install us | |
| // again. Fail that scenario. | |
| // | |
| Status = gBS->LocateHandleBuffer ( | |
| ByProtocol, | |
| &gEfiHiiDatabaseProtocolGuid, | |
| NULL, | |
| &HandleCount, | |
| &HandleBuffer | |
| ); | |
| // | |
| // If there was no error, assume there is an installation and fail to load | |
| // | |
| if (!EFI_ERROR (Status)) { | |
| if (HandleBuffer != NULL) { | |
| gBS->FreePool (HandleBuffer); | |
| } | |
| return EFI_DEVICE_ERROR; | |
| } | |
| InitializeListHead (&mPrivate.DatabaseList); | |
| InitializeListHead (&mPrivate.DatabaseNotifyList); | |
| InitializeListHead (&mPrivate.HiiHandleList); | |
| InitializeListHead (&mPrivate.FontInfoList); | |
| // | |
| // Create a event with EFI_HII_SET_KEYBOARD_LAYOUT_EVENT_GUID group type. | |
| // | |
| Status = gBS->CreateEventEx ( | |
| 0, | |
| 0, | |
| NULL, | |
| NULL, | |
| &gHiiSetKbdLayoutEventGuid, | |
| &gHiiKeyboardLayoutChanged | |
| ); | |
| if (EFI_ERROR (Status)) { | |
| return Status; | |
| } | |
| Handle = NULL; | |
| return gBS->InstallMultipleProtocolInterfaces ( | |
| &Handle, | |
| &gEfiHiiFontProtocolGuid, | |
| &mPrivate.HiiFont, | |
| #ifndef DISABLE_UNUSED_HII_PROTOCOLS | |
| &gEfiHiiImageProtocolGuid, | |
| &mPrivate.HiiImage, | |
| #endif | |
| &gEfiHiiStringProtocolGuid, | |
| &mPrivate.HiiString, | |
| &gEfiHiiDatabaseProtocolGuid, | |
| &mPrivate.HiiDatabase, | |
| &gEfiHiiConfigRoutingProtocolGuid, | |
| &mPrivate.ConfigRouting, | |
| NULL | |
| ); | |
| } | |