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/DuetPkg/FSVariable/FSVariable.h b/uefi/linaro-edk2/DuetPkg/FSVariable/FSVariable.h
new file mode 100644
index 0000000..cc39323
--- /dev/null
+++ b/uefi/linaro-edk2/DuetPkg/FSVariable/FSVariable.h
@@ -0,0 +1,162 @@
+/*++

+

+Caution: This file is used for Duet platform only, do not use them in real platform.

+All variable code, variable metadata, and variable data used by Duet platform are on 

+disk. They can be changed by user. BIOS is not able to protoect those.

+Duet trusts all meta data from disk. If variable code, variable metadata and variable

+data is modified in inproper way, the behavior is undefined.

+

+Copyright (c) 2006 - 2014, 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.             

+

+Module Name:

+

+  FSVariable.h

+  

+Abstract:

+

+--*/

+

+#ifndef _FS_VARIABLE_H

+#define _FS_VARIABLE_H

+

+//

+// Statements that include other header files

+//

+#include <PiDxe.h>

+

+#include <Library/BaseLib.h>

+#include <Library/PcdLib.h>

+#include <Library/BaseMemoryLib.h>

+#include <Library/MemoryAllocationLib.h>

+#include <Library/UefiBootServicesTableLib.h>

+#include <Library/UefiRuntimeLib.h>

+#include <Library/DebugLib.h>

+#include <Library/UefiLib.h>

+#include <Library/HobLib.h>

+#include <Library/DxeServicesTableLib.h>

+#include <Library/DevicePathLib.h>

+

+#include <Guid/HobList.h>

+#include <Guid/FlashMapHob.h>

+#include <Guid/VariableFormat.h>

+#include <Guid/GlobalVariable.h>

+#include <Protocol/Variable.h>

+#include <Protocol/VariableWrite.h>

+#include <Protocol/SimpleFileSystem.h>

+#include <Protocol/BlockIo.h>

+

+

+#include "EfiFlashMap.h"

+#include "VariableStorage.h"

+

+#define VOLATILE_VARIABLE_STORE_SIZE  FixedPcdGet32(PcdVariableStoreSize)

+#define VARIABLE_SCRATCH_SIZE         MAX(FixedPcdGet32(PcdMaxVariableSize), FixedPcdGet32(PcdMaxHardwareErrorVariableSize))

+#define VARIABLE_RECLAIM_THRESHOLD    (1024)

+///

+/// The size of a 3 character ISO639 language code.

+///

+#define ISO_639_2_ENTRY_SIZE    3

+

+#define GET_VARIABLE_NAME_PTR(a)  (CHAR16 *) ((UINTN) (a) + sizeof (VARIABLE_HEADER))

+

+typedef enum {

+  Physical,

+  Virtual

+} VARIABLE_POINTER_TYPE;

+

+typedef enum {

+  NonVolatile,

+  Volatile,

+  MaxType

+} VARIABLE_STORAGE_TYPE;

+

+typedef struct {

+  VARIABLE_HEADER         *CurrPtr;

+  VARIABLE_HEADER         *EndPtr;

+  VARIABLE_HEADER         *StartPtr;

+  VARIABLE_STORAGE_TYPE   Type;

+} VARIABLE_POINTER_TRACK;

+

+#define VARIABLE_MEMBER_OFFSET(Member, StartOffset) \

+        ( sizeof (VARIABLE_STORE_HEADER) + (StartOffset) + \

+          (UINTN) ((UINT8 *) &((VARIABLE_HEADER*) 0)->Member - (UINT8 *) &((VARIABLE_HEADER*) 0)->StartId) \

+        )

+

+

+typedef struct {

+  EFI_EVENT_NOTIFY   GoVirtualChildEvent[MaxType];

+  VARIABLE_STORAGE   *VariableStore[MaxType];       // Instance of VariableStorage

+  VOID               *VariableBase[MaxType];        // Start address of variable storage

+  UINTN              LastVariableOffset[MaxType];   // The position to write new variable to (index from VariableBase)

+  VOID               *Scratch;                      // Buffer used during reclaim

+  UINTN              CommonVariableTotalSize;

+  UINTN              HwErrVariableTotalSize;

+  CHAR8              *PlatformLangCodes;

+  CHAR8              *LangCodes;

+  CHAR8              *PlatformLang;

+  CHAR8              Lang[ISO_639_2_ENTRY_SIZE + 1];

+} VARIABLE_GLOBAL;

+

+//

+// Functions

+//

+

+EFI_STATUS

+EFIAPI

+VariableServiceInitialize (

+  IN EFI_HANDLE         ImageHandle,

+  IN EFI_SYSTEM_TABLE   *SystemTable

+  );

+

+VOID

+EFIAPI

+VariableClassAddressChangeEvent (

+  IN EFI_EVENT        Event,

+  IN VOID             *Context

+  );

+

+EFI_STATUS

+EFIAPI

+DuetGetVariable (

+  IN      CHAR16            *VariableName,

+  IN      EFI_GUID          *VendorGuid,

+  OUT     UINT32            *Attributes OPTIONAL,

+  IN OUT  UINTN             *DataSize,

+  OUT     VOID              *Data

+  );

+

+EFI_STATUS

+EFIAPI

+GetNextVariableName (

+  IN OUT  UINTN             *VariableNameSize,

+  IN OUT  CHAR16            *VariableName,

+  IN OUT  EFI_GUID          *VendorGuid

+  );

+

+EFI_STATUS

+EFIAPI

+SetVariable (

+  IN CHAR16                  *VariableName,

+  IN EFI_GUID                *VendorGuid,

+  IN UINT32                  Attributes,

+  IN UINTN                   DataSize,

+  IN VOID                    *Data

+  );

+

+EFI_STATUS

+EFIAPI

+QueryVariableInfo (

+  IN  UINT32                 Attributes,

+  OUT UINT64                 *MaximumVariableStorageSize,

+  OUT UINT64                 *RemainingVariableStorageSize,

+  OUT UINT64                 *MaximumVariableSize

+  );

+

+#endif