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/MdePkg/Include/Protocol/McaInitPmi.h b/uefi/linaro-edk2/MdePkg/Include/Protocol/McaInitPmi.h
new file mode 100644
index 0000000..3306830
--- /dev/null
+++ b/uefi/linaro-edk2/MdePkg/Include/Protocol/McaInitPmi.h
@@ -0,0 +1,207 @@
+/** @file

+  MCA/PMI/INIT Protocol as defined in PI Specification VOLUME 4.

+

+  This protocol provides services to handle Machine Checks (MCA),

+  Initialization (INIT) events, and Platform Management Interrupt (PMI) events

+  on an Intel Itanium Processor Family based system.

+

+  Copyright (c) 2009 - 2010, 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.

+

+**/

+

+#ifndef __MCA_INIT_PMI_PROTOCOL_H__

+#define __MCA_INIT_PMI_PROTOCOL_H__

+

+///

+/// Global ID for the MCA/PMI/INIT Protocol.

+///

+#define EFI_SAL_MCA_INIT_PMI_PROTOCOL_GUID \

+  { 0xb60dc6e8, 0x3b6f, 0x11d5, {0xaf, 0x9, 0x0, 0xa0, 0xc9, 0x44, 0xa0, 0x5b} }

+

+

+///

+/// Declare forward reference for the Timer Architectural Protocol

+///

+typedef struct _EFI_SAL_MCA_INIT_PMI_PROTOCOL  EFI_SAL_MCA_INIT_PMI_PROTOCOL;

+

+#pragma pack(1)

+///

+/// MCA Records Structure

+///

+typedef struct {

+  UINT64  First : 1;

+  UINT64  Last : 1;

+  UINT64  EntryCount : 16;

+  UINT64  DispatchedCount : 16;

+  UINT64  Reserved : 30;

+} SAL_MCA_COUNT_STRUCTURE;

+

+#pragma pack()

+

+/**

+  Prototype of MCA handler.

+

+  @param  ModuleGlobal                The context of MCA Handler

+  @param  ProcessorStateParameters    The processor state parameters (PSP)

+  @param  MinstateBase                Base address of the min-state

+  @param  RendezvouseStateInformation Rendezvous state information to be passed to

+                                      the OS on OS MCA entry

+  @param  CpuIndex                    Index of the logical processor

+  @param  McaCountStructure           Pointer to the MCA records structure

+  @param  CorrectedMachineCheck       This flag is set to TRUE is the MCA has been

+                                      corrected by the handler or by a previous handler

+

+  @retval EFI_SUCCESS                 Handler successfully returned

+

+**/

+typedef

+EFI_STATUS

+(EFIAPI *EFI_SAL_MCA_HANDLER)(

+  IN  VOID                    *ModuleGlobal,

+  IN  UINT64                  ProcessorStateParameters,

+  IN  EFI_PHYSICAL_ADDRESS    MinstateBase,

+  IN  UINT64                  RendezvouseStateInformation,

+  IN  UINT64                  CpuIndex,

+  IN  SAL_MCA_COUNT_STRUCTURE *McaCountStructure,

+  OUT BOOLEAN                 *CorrectedMachineCheck

+  );

+

+/**

+  Prototype of INIT handler.

+

+  @param  ModuleGlobal                The context of INIT Handler

+  @param  ProcessorStateParameters    The processor state parameters (PSP)

+  @param  MinstateBase                Base address of the min-state

+  @param  McaInProgress               This flag indicates if an MCA is in progress

+  @param  CpuIndex                    Index of the logical processor

+  @param  McaCountStructure           Pointer to the MCA records structure

+  @param  DumpSwitchPressed           This flag indicates the crash dump switch has been pressed

+

+  @retval EFI_SUCCESS                 Handler successfully returned

+

+**/

+typedef

+EFI_STATUS

+(EFIAPI *EFI_SAL_INIT_HANDLER)(

+  IN  VOID                     *ModuleGlobal,

+  IN  UINT64                   ProcessorStateParameters,

+  IN  EFI_PHYSICAL_ADDRESS     MinstateBase,

+  IN  BOOLEAN                  McaInProgress,

+  IN  UINT64                   CpuIndex,

+  IN  SAL_MCA_COUNT_STRUCTURE  *McaCountStructure,

+  OUT BOOLEAN                  *DumpSwitchPressed

+  );

+

+/**

+  Prototype of PMI handler

+

+  @param  ModuleGlobal                The context of PMI Handler

+  @param  CpuIndex                    Index of the logical processor

+  @param  PmiVector                   The PMI vector number as received from the PALE_PMI exit state (GR24)

+

+  @retval EFI_SUCCESS                 Handler successfully returned

+

+**/

+typedef

+EFI_STATUS

+(EFIAPI *EFI_SAL_PMI_HANDLER)(

+  IN VOID          *ModuleGlobal,

+  IN UINT64        CpuIndex,

+  IN UINT64        PmiVector

+  );

+

+/**

+  Register a MCA handler with the MCA dispatcher.

+

+  @param  This                        The EFI_SAL_MCA_INIT_PMI_PROTOCOL instance

+  @param  McaHandler                  The MCA handler to register

+  @param  ModuleGlobal                The context of MCA Handler

+  @param  MakeFirst                   This flag specifies the handler should be made first in the list

+  @param  MakeLast                    This flag specifies the handler should be made last in the list

+

+  @retval EFI_SUCCESS                 MCA Handle was registered

+  @retval EFI_OUT_OF_RESOURCES        No more resources to register an MCA handler

+  @retval EFI_INVALID_PARAMETER       Invalid parameters were passed

+

+**/

+typedef

+EFI_STATUS

+(EFIAPI *EFI_SAL_REGISTER_MCA_HANDLER)(

+  IN  EFI_SAL_MCA_INIT_PMI_PROTOCOL         *This,

+  IN  EFI_SAL_MCA_HANDLER                   McaHandler,

+  IN  VOID                                  *ModuleGlobal,

+  IN  BOOLEAN                               MakeFirst,

+  IN  BOOLEAN                               MakeLast

+  );

+

+/**

+  Register an INIT handler with the INIT dispatcher.

+

+  @param  This                        The EFI_SAL_MCA_INIT_PMI_PROTOCOL instance

+  @param  InitHandler                 The INIT handler to register

+  @param  ModuleGlobal                The context of INIT Handler

+  @param  MakeFirst                   This flag specifies the handler should be made first in the list

+  @param  MakeLast                    This flag specifies the handler should be made last in the list

+

+  @retval EFI_SUCCESS                 INIT Handle was registered

+  @retval EFI_OUT_OF_RESOURCES        No more resources to register an INIT handler

+  @retval EFI_INVALID_PARAMETER       Invalid parameters were passed

+

+**/

+typedef

+EFI_STATUS

+(EFIAPI *EFI_SAL_REGISTER_INIT_HANDLER)(

+  IN  EFI_SAL_MCA_INIT_PMI_PROTOCOL         *This,

+  IN  EFI_SAL_INIT_HANDLER                  InitHandler,

+  IN  VOID                                  *ModuleGlobal,

+  IN  BOOLEAN                               MakeFirst,

+  IN  BOOLEAN                               MakeLast

+  );

+

+/**

+  Register a PMI handler with the PMI dispatcher.

+

+  @param  This                        The EFI_SAL_MCA_INIT_PMI_PROTOCOL instance

+  @param  PmiHandler                  The PMI handler to register

+  @param  ModuleGlobal                The context of PMI Handler

+  @param  MakeFirst                   This flag specifies the handler should be made first in the list

+  @param  MakeLast                    This flag specifies the handler should be made last in the list

+

+  @retval EFI_SUCCESS                 PMI Handle was registered

+  @retval EFI_OUT_OF_RESOURCES        No more resources to register an PMI handler

+  @retval EFI_INVALID_PARAMETER       Invalid parameters were passed

+

+**/

+typedef

+EFI_STATUS

+(EFIAPI *EFI_SAL_REGISTER_PMI_HANDLER)(

+  IN  EFI_SAL_MCA_INIT_PMI_PROTOCOL         *This,

+  IN  EFI_SAL_PMI_HANDLER                   PmiHandler,

+  IN  VOID                                  *ModuleGlobal,

+  IN  BOOLEAN                               MakeFirst,

+  IN  BOOLEAN                               MakeLast

+  );

+

+///

+/// This protocol is used to register MCA, INIT and PMI handlers with their respective dispatcher

+///

+struct _EFI_SAL_MCA_INIT_PMI_PROTOCOL {

+  EFI_SAL_REGISTER_MCA_HANDLER  RegisterMcaHandler;

+  EFI_SAL_REGISTER_INIT_HANDLER RegisterInitHandler;

+  EFI_SAL_REGISTER_PMI_HANDLER  RegisterPmiHandler;

+  BOOLEAN                       McaInProgress;       ///< Whether MCA handler is in progress

+  BOOLEAN                       InitInProgress;      ///< Whether Init handler is in progress

+  BOOLEAN                       PmiInProgress;       ///< Whether Pmi handler is in progress

+};

+

+extern EFI_GUID gEfiSalMcaInitPmiProtocolGuid;

+

+#endif

+