hikey: Add UEFI sources for reference

UEFI needs to be built outside Android build system.
Please follow the instructions in README.

The sources correspond to:
https://github.com/96boards/edk2/commit/14eae0c12e71fd33c4c0fc51e4475e8db02566cf
https://github.com/96boards/arm-trusted-firmware/commit/e9b4909dcd75fc4ae7041cfb83d28ab9adb7afdf
https://github.com/96boards/l-loader/commit/6b784ad5c4ab00e2b1c6f53cd5f74054e5d00a78
https://git.linaro.org/uefi/uefi-tools.git/commit/abe618f8ab72034fff1ce46c9c006a2c6bd40a7e

Change-Id: Ieeefdb63e673e0c8e64e0a1f02c7bddc63b2c7fb
Signed-off-by: Vishal Bhoj <vishal.bhoj@linaro.org>
diff --git a/uefi/linaro-edk2/MdeModulePkg/Universal/HiiDatabaseDxe/HiiDatabaseEntry.c b/uefi/linaro-edk2/MdeModulePkg/Universal/HiiDatabaseDxe/HiiDatabaseEntry.c
new file mode 100644
index 0000000..ae75f8c
--- /dev/null
+++ b/uefi/linaro-edk2/MdeModulePkg/Universal/HiiDatabaseDxe/HiiDatabaseEntry.c
@@ -0,0 +1,209 @@
+/** @file

+This file contains the entry code to the HII database, which is defined by

+UEFI 2.1 specification.

+

+Copyright (c) 2007 - 2008, Intel Corporation. All rights reserved.<BR>

+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.

+

+**/

+

+

+#include "HiiDatabase.h"

+

+//

+// Global variables

+//

+EFI_EVENT gHiiKeyboardLayoutChanged;

+

+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

+  },

+  {

+    NULL,

+    NULL,

+    NULL,

+    NULL,

+    NULL

+  },

+  {

+    HiiNewString,

+    HiiGetString,

+    HiiSetString,

+    HiiGetLanguages,

+    HiiGetSecondaryLanguages

+  },

+  {

+    HiiNewPackageList,

+    HiiRemovePackageList,

+    HiiUpdatePackageList,

+    HiiListPackageLists,

+    HiiExportPackageLists,

+    HiiRegisterPackageNotify,

+    HiiUnregisterPackageNotify,

+    HiiFindKeyboardLayouts,

+    HiiGetKeyboardLayout,

+    HiiSetKeyboardLayout,

+    HiiGetPackageListHandle

+  },

+  {

+    HiiConfigRoutingExtractConfig,

+    HiiConfigRoutingExportConfig,

+    HiiConfigRoutingRouteConfig,

+    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

+};

+

+GLOBAL_REMOVE_IF_UNREFERENCED CONST EFI_HII_IMAGE_PROTOCOL mImageProtocol = {

+  HiiNewImage,

+  HiiGetImage,

+  HiiSetImage,

+  HiiDrawImage,

+  HiiDrawImageId

+};

+

+/**

+  The default event handler for gHiiKeyboardLayoutChanged

+  event group.

+

+  This is internal function.

+

+  @param Event           The event that triggered this notification function.

+  @param Context         Pointer to the notification functions context.

+

+**/

+VOID

+EFIAPI

+KeyboardLayoutChangeNullEvent (

+  IN EFI_EVENT                Event,

+  IN VOID                     *Context

+  )

+{

+  return;

+}

+

+/**

+  Initialize HII Database.

+

+

+  @param ImageHandle     The image handle.

+  @param SystemTable     The system table.

+

+  @retval EFI_SUCCESS    The Hii database is setup correctly.

+  @return Other value if failed to create the default event for

+          gHiiKeyboardLayoutChanged. Check gBS->CreateEventEx for

+          details. Or failed to insatll the protocols.

+          Check gBS->InstallMultipleProtocolInterfaces for details.

+

+**/

+EFI_STATUS

+EFIAPI

+InitializeHiiDatabase (

+  IN EFI_HANDLE           ImageHandle,

+  IN EFI_SYSTEM_TABLE     *SystemTable

+  )

+{

+  EFI_STATUS                             Status;

+  EFI_HANDLE                             Handle;

+

+  //

+  // 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.

+  //

+  ASSERT_PROTOCOL_ALREADY_INSTALLED (NULL, &gEfiHiiDatabaseProtocolGuid);

+  ASSERT_PROTOCOL_ALREADY_INSTALLED (NULL, &gEfiHiiFontProtocolGuid);

+  ASSERT_PROTOCOL_ALREADY_INSTALLED (NULL, &gEfiHiiImageProtocolGuid);

+  ASSERT_PROTOCOL_ALREADY_INSTALLED (NULL, &gEfiHiiStringProtocolGuid);

+  ASSERT_PROTOCOL_ALREADY_INSTALLED (NULL, &gEfiHiiConfigRoutingProtocolGuid);

+  

+  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 (

+                  EVT_NOTIFY_SIGNAL,

+                  TPL_NOTIFY,

+                  KeyboardLayoutChangeNullEvent,

+                  NULL,

+                  &gEfiHiiKeyBoardLayoutGuid,

+                  &gHiiKeyboardLayoutChanged

+                  );

+  if (EFI_ERROR (Status)) {

+    return Status;

+  }

+

+  Handle = NULL;

+  Status = gBS->InstallMultipleProtocolInterfaces (

+                  &Handle,

+                  &gEfiHiiFontProtocolGuid,

+                  &mPrivate.HiiFont,

+                  &gEfiHiiStringProtocolGuid,

+                  &mPrivate.HiiString,

+                  &gEfiHiiDatabaseProtocolGuid,

+                  &mPrivate.HiiDatabase,

+                  &gEfiHiiConfigRoutingProtocolGuid,

+                  &mPrivate.ConfigRouting,

+                  NULL

+                  );

+

+  if (EFI_ERROR (Status)) {

+    return Status;

+  }

+

+  if (FeaturePcdGet (PcdSupportHiiImageProtocol)) {

+    CopyMem (&mPrivate.HiiImage, &mImageProtocol, sizeof (mImageProtocol));

+

+    Status = gBS->InstallMultipleProtocolInterfaces (

+                    &Handle,

+                    &gEfiHiiImageProtocolGuid,

+                    &mPrivate.HiiImage,

+                    NULL

+                    );

+

+  }

+

+  return Status;

+}

+