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/Nt32Pkg/Sec/Stack.asm b/uefi/linaro-edk2/Nt32Pkg/Sec/Stack.asm
new file mode 100644
index 0000000..7defff6
--- /dev/null
+++ b/uefi/linaro-edk2/Nt32Pkg/Sec/Stack.asm
@@ -0,0 +1,94 @@
+;------------------------------------------------------------------------------

+;

+; Copyright (c) 2007, 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:

+;

+;   Stack.asm

+;

+; Abstract:

+;

+;   Switch the stack from temporary memory to permenent memory.

+;

+;------------------------------------------------------------------------------

+

+    .586p

+    .model  flat,C

+    .code

+    

+;------------------------------------------------------------------------------

+; VOID

+; EFIAPI

+; SecSwitchStack (

+;   UINT32   TemporaryMemoryBase,

+;   UINT32   PermenentMemoryBase

+;   );

+;------------------------------------------------------------------------------    

+SecSwitchStack   PROC

+    ;

+    ; Save three register: eax, ebx, ecx

+    ;

+    push  eax

+    push  ebx

+    push  ecx

+    push  edx

+    

+    ;

+    ; !!CAUTION!! this function address's is pushed into stack after

+    ; migration of whole temporary memory, so need save it to permenent

+    ; memory at first!

+    ;

+    

+    mov   ebx, [esp + 20]          ; Save the first parameter

+    mov   ecx, [esp + 24]          ; Save the second parameter

+    

+    ;

+    ; Save this function's return address into permenent memory at first.

+    ; Then, Fixup the esp point to permenent memory

+    ;

+    mov   eax, esp

+    sub   eax, ebx

+    add   eax, ecx

+    mov   edx, dword ptr [esp]         ; copy pushed register's value to permenent memory

+    mov   dword ptr [eax], edx    

+    mov   edx, dword ptr [esp + 4]

+    mov   dword ptr [eax + 4], edx    

+    mov   edx, dword ptr [esp + 8]

+    mov   dword ptr [eax + 8], edx    

+    mov   edx, dword ptr [esp + 12]

+    mov   dword ptr [eax + 12], edx    

+    mov   edx, dword ptr [esp + 16]    ; Update this function's return address into permenent memory

+    mov   dword ptr [eax + 16], edx    

+    mov   esp, eax                     ; From now, esp is pointed to permenent memory

+        

+    ;

+    ; Fixup the ebp point to permenent memory

+    ;

+    mov   eax, ebp

+    sub   eax, ebx

+    add   eax, ecx

+    mov   ebp, eax                ; From now, ebp is pointed to permenent memory

+    

+    ;

+    ; Fixup callee's ebp point for PeiDispatch

+    ;

+    mov   eax, dword ptr [ebp]

+    sub   eax, ebx

+    add   eax, ecx

+    mov   dword ptr [ebp], eax    ; From now, Temporary's PPI caller's stack is in permenent memory

+    

+    pop   edx

+    pop   ecx

+    pop   ebx

+    pop   eax

+    ret

+SecSwitchStack   ENDP

+

+    END