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

+  The file provides basic SMBus host controller management 

+  and basic data transactions over the SMBus.

+

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

+

+  @par Revision Reference: PI

+  Version 1.00.

+

+**/

+

+#ifndef __SMBUS_HC_H__

+#define __SMBUS_HC_H__

+

+#include <IndustryStandard/SmBus.h>

+

+#define EFI_SMBUS_HC_PROTOCOL_GUID \

+  {0xe49d33ed, 0x513d, 0x4634, { 0xb6, 0x98, 0x6f, 0x55, 0xaa, 0x75, 0x1c, 0x1b} }

+

+typedef struct _EFI_SMBUS_HC_PROTOCOL EFI_SMBUS_HC_PROTOCOL;

+

+/**

+     

+  The Execute() function provides a standard way to execute an

+  operation as defined in the System Management Bus (SMBus)

+  Specification. The resulting transaction will be either that

+  the SMBus slave devices accept this transaction or that this

+  function returns with error. 

+  

+  @param This     A pointer to the EFI_SMBUS_HC_PROTOCOL instance.

+                  SlaveAddress The SMBus slave address of the device

+                  with which to communicate. Type

+                  EFI_SMBUS_DEVICE_ADDRESS is defined in

+                  EFI_PEI_SMBUS_PPI.Execute() in the Platform

+                  Initialization SMBus PPI Specification.

+

+  @param Command  This command is transmitted by the SMBus host

+                  controller to the SMBus slave device and the

+                  interpretation is SMBus slave device specific.

+                  It can mean the offset to a list of functions

+                  inside an SMBus slave device. Not all

+                  operations or slave devices support this

+                  command's registers. Type

+                  EFI_SMBUS_DEVICE_COMMAND is defined in

+                  EFI_PEI_SMBUS_PPI.Execute() in the Platform

+                  Initialization SMBus PPI Specification.

+

+ @param Operation Signifies the particular SMBus

+                  hardware protocol instance it will use to

+                  execute the SMBus transactions. This SMBus

+                  hardware protocol is defined by the SMBus

+                  Specification and is not related to PI

+                  Architecture. Type EFI_SMBUS_OPERATION is

+                  defined in EFI_PEI_SMBUS_PPI.Execute() in the

+                  Platform Initialization SMBus PPI

+                  Specification.

+

+  @param PecCheck Defines if Packet Error Code (PEC) checking

+                  is required for this operation. SMBus Host

+                  Controller Code Definitions Version 1.0

+                  August 21, 2006 13 

+                  

+ @param Length    Signifies the number of bytes that this operation will do.

+                  The maximum number of bytes can be revision

+                  specific and operation specific. This field

+                  will contain the actual number of bytes that

+                  are executed for this operation. Not all

+                  operations require this argument.

+

+  @param Buffer   Contains the value of data to execute to the

+                  SMBus slave device. Not all operations require

+                  this argument. The length of this buffer is

+                  identified by Length.

+  

+  

+  @retval EFI_SUCCESS           The last data that was returned from the

+                                access matched the poll exit criteria.

+

+  @retval EFI_CRC_ERROR         Checksum is not correct (PEC is incorrect).

+

+  @retval EFI_TIMEOUT           Timeout expired before the operation was

+                                completed. Timeout is determined by the

+                                SMBus host controller device.

+

+  @retval EFI_OUT_OF_RESOURCES  The request could not be

+                                completed due to a lack of

+                                resources.

+

+  @retval EFI_DEVICE_ERROR      The request was not completed

+                                because a failure that was reflected

+                                in the Host Status Register bit.

+                                Device errors are a result of a

+                                transaction collision, illegal

+                                command field, unclaimed cycle (host

+                                initiated), or bus errors

+                                (collisions).

+

+  @retval EFI_INVALID_PARAMETER Operation is not defined in

+                                EFI_SMBUS_OPERATION.

+

+  @retval EFI_INVALID_PARAMETER Length/Buffer is NULL for

+                                operations except for

+                                EfiSmbusQuickRead and

+                                EfiSmbusQuickWrite. Length is

+                                outside the range of valid

+                                values.

+

+  @retval EFI_UNSUPPORTED       The SMBus operation or PEC is not

+                                supported. 

+

+  @retval EFI_BUFFER_TOO_SMALL  Buffer is not sufficient for

+                                this operation.

+

+**/

+typedef

+EFI_STATUS

+(EFIAPI *EFI_SMBUS_HC_EXECUTE_OPERATION)(

+  IN CONST  EFI_SMBUS_HC_PROTOCOL     *This,

+  IN        EFI_SMBUS_DEVICE_ADDRESS  SlaveAddress,

+  IN        EFI_SMBUS_DEVICE_COMMAND  Command,

+  IN        EFI_SMBUS_OPERATION       Operation,

+  IN        BOOLEAN                   PecCheck,

+  IN OUT    UINTN                     *Length,

+  IN OUT    VOID                      *Buffer

+);

+

+

+

+/**

+   

+  The ArpDevice() function provides a standard way for a device driver to 

+  enumerate the entire SMBus or specific devices on the bus.

+  

+  @param This           A pointer to the EFI_SMBUS_HC_PROTOCOL instance.

+

+  @param ArpAll         A Boolean expression that indicates if the

+                        host drivers need to enumerate all the devices

+                        or enumerate only the device that is

+                        identified by SmbusUdid. If ArpAll is TRUE,

+                        SmbusUdid and SlaveAddress are optional. If

+                        ArpAll is FALSE, ArpDevice will enumerate

+                        SmbusUdid and the address will be at

+                        SlaveAddress.

+

+  @param SmbusUdid      The Unique Device Identifier (UDID) that is

+                        associated with this device. Type

+                        EFI_SMBUS_UDID is defined in

+                        EFI_PEI_SMBUS_PPI.ArpDevice() in the

+                        Platform Initialization SMBus PPI

+                        Specification.

+

+  @param SlaveAddress   The SMBus slave address that is

+                        associated with an SMBus UDID.

+

+  @retval EFI_SUCCESS           The last data that was returned from the

+                                access matched the poll exit criteria.

+

+  @retval EFI_CRC_ERROR         Checksum is not correct (PEC is

+                                incorrect).

+

+  @retval EFI_TIMEOUT           Timeout expired before the operation was

+                                completed. Timeout is determined by the

+                                SMBus host controller device.

+

+  @retval EFI_OUT_OF_RESOURCES  The request could not be

+                                completed due to a lack of

+                                resources.

+

+  @retval EFI_DEVICE_ERROR      The request was not completed

+                                because a failure was reflected in

+                                the Host Status Register bit. Device

+                                Errors are a result of a transaction

+                                collision, illegal command field,

+                                unclaimed cycle (host initiated), or

+                                bus errors (collisions).

+

+  @retval EFI_UNSUPPORTED       ArpDevice, GetArpMap, and Notify are

+                                not implemented by this driver.

+   

+**/

+typedef

+EFI_STATUS

+(EFIAPI *EFI_SMBUS_HC_PROTOCOL_ARP_DEVICE)(

+  IN CONST  EFI_SMBUS_HC_PROTOCOL     *This,

+  IN        BOOLEAN                   ArpAll,

+  IN        EFI_SMBUS_UDID            *SmbusUdid,   OPTIONAL

+  IN OUT    EFI_SMBUS_DEVICE_ADDRESS  *SlaveAddress OPTIONAL

+);

+

+

+/**

+  The GetArpMap() function returns the mapping of all the SMBus devices 

+  that were enumerated by the SMBus host driver.

+  

+  @param This           A pointer to the EFI_SMBUS_HC_PROTOCOL instance.

+  

+  @param Length         Size of the buffer that contains the SMBus

+                        device map.

+  

+  @param SmbusDeviceMap The pointer to the device map as

+                        enumerated by the SMBus controller

+                        driver.

+  

+  @retval EFI_SUCCESS       The SMBus returned the current device map.

+  

+  @retval EFI_UNSUPPORTED   ArpDevice, GetArpMap, and Notify are

+                            not implemented by this driver.

+  

+**/

+typedef

+EFI_STATUS

+(EFIAPI *EFI_SMBUS_HC_PROTOCOL_GET_ARP_MAP)(

+  IN CONST  EFI_SMBUS_HC_PROTOCOL   *This,

+  IN OUT    UINTN                   *Length,

+  IN OUT    EFI_SMBUS_DEVICE_MAP    **SmbusDeviceMap

+);

+

+/**

+  The notify function does some actions.

+  

+  @param SlaveAddress

+  The SMBUS hardware address to which the SMBUS device is preassigned or allocated.

+

+  @param Data

+  Data of the SMBus host notify command that the caller wants to be called.

+  

+  @return EFI_STATUS

+**/

+typedef

+EFI_STATUS

+(EFIAPI *EFI_SMBUS_NOTIFY_FUNCTION)(

+  IN        EFI_SMBUS_DEVICE_ADDRESS  SlaveAddress,

+  IN        UINTN                     Data

+);

+

+

+/**

+   

+  The Notify() function registers all the callback functions to

+  allow the bus driver to call these functions when the 

+  SlaveAddress/Data pair happens.

+  

+  @param  This            A pointer to the EFI_SMBUS_HC_PROTOCOL instance.

+  

+  @param  SlaveAddress    Address that the host controller detects

+                          as sending a message and calls all the registered function.

+

+  @param  Data            Data that the host controller detects as sending

+                          message and calls all the registered function.

+

+

+  @param  NotifyFunction  The function to call when the bus

+                          driver detects the SlaveAddress and

+                          Data pair.

+

+  @retval EFI_SUCCESS       NotifyFunction was registered.

+  

+  @retval EFI_UNSUPPORTED   ArpDevice, GetArpMap, and Notify are

+                            not implemented by this driver.

+

+**/

+typedef

+EFI_STATUS

+(EFIAPI *EFI_SMBUS_HC_PROTOCOL_NOTIFY)(

+  IN CONST  EFI_SMBUS_HC_PROTOCOL     *This,

+  IN        EFI_SMBUS_DEVICE_ADDRESS  SlaveAddress,

+  IN        UINTN                     Data,

+  IN        EFI_SMBUS_NOTIFY_FUNCTION NotifyFunction

+);

+

+

+///

+/// The EFI_SMBUS_HC_PROTOCOL provides SMBus host controller management and basic data

+/// transactions over SMBus. There is one EFI_SMBUS_HC_PROTOCOL instance for each SMBus

+/// host controller.

+///

+struct _EFI_SMBUS_HC_PROTOCOL {

+  EFI_SMBUS_HC_EXECUTE_OPERATION    Execute;

+  EFI_SMBUS_HC_PROTOCOL_ARP_DEVICE  ArpDevice;

+  EFI_SMBUS_HC_PROTOCOL_GET_ARP_MAP GetArpMap;

+  EFI_SMBUS_HC_PROTOCOL_NOTIFY      Notify;

+};

+

+

+extern EFI_GUID gEfiSmbusHcProtocolGuid;

+

+#endif

+