1 /// @file 2 /// Assembly procedures to get and set ESAL entry point. 3 /// 4 /// Copyright (c) 2006 - 2011, Intel Corporation. All rights reserved.<BR> 5 /// This program and the accompanying materials 6 /// are licensed and made available under the terms and conditions of the BSD License 7 /// which accompanies this distribution. The full text of the license may be found at 8 /// http://opensource.org/licenses/bsd-license.php. 9 /// 10 /// THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS, 11 /// WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED. 12 /// 13 14 .auto 15 .text 16 17 #include "IpfMacro.i" 18 19 // 20 // Exports 21 // 22 ASM_GLOBAL GetEsalEntryPoint 23 24 //----------------------------------------------------------------------------- 25 //++ 26 // GetEsalEntryPoint 27 // 28 // Return Esal global and PSR register. 29 // 30 // On Entry : 31 // 32 // 33 // Return Value: 34 // r8 = EFI_SAL_SUCCESS 35 // r9 = Physical Plabel 36 // r10 = Virtual Plabel 37 // r11 = psr 38 // 39 // As per static calling conventions. 40 // 41 //-- 42 //--------------------------------------------------------------------------- 43 PROCEDURE_ENTRY (GetEsalEntryPoint) 44 45 NESTED_SETUP (0,8,0,0) 46 47 EsalCalcStart: 48 mov r8 = ip;; 49 add r8 = (EsalEntryPoint - EsalCalcStart), r8;; 50 mov r9 = r8;; 51 add r10 = 0x10, r8;; 52 mov r11 = psr;; 53 mov r8 = r0;; 54 55 NESTED_RETURN 56 57 PROCEDURE_EXIT (GetEsalEntryPoint) 58 59 //----------------------------------------------------------------------------- 60 //++ 61 // SetEsalPhysicalEntryPoint 62 // 63 // Set the dispatcher entry point 64 // 65 // On Entry: 66 // in0 = Physical address of Esal Dispatcher 67 // in1 = Physical GP 68 // 69 // Return Value: 70 // r8 = EFI_SAL_SUCCESS 71 // 72 // As per static calling conventions. 73 // 74 //-- 75 //--------------------------------------------------------------------------- 76 PROCEDURE_ENTRY (SetEsalPhysicalEntryPoint) 77 78 NESTED_SETUP (2,8,0,0) 79 80 EsalCalcStart1: 81 mov r8 = ip;; 82 add r8 = (EsalEntryPoint - EsalCalcStart1), r8;; 83 st8 [r8] = in0;; 84 add r8 = 0x08, r8;; 85 st8 [r8] = in1;; 86 mov r8 = r0;; 87 88 NESTED_RETURN 89 90 PROCEDURE_EXIT (SetEsalPhysicalEntryPoint) 91 92 //----------------------------------------------------------------------------- 93 //++ 94 // SetEsalVirtualEntryPoint 95 // 96 // Register physical address of Esal globals. 97 // 98 // On Entry : 99 // in0 = Virtual address of Esal Dispatcher 100 // in1 = Virtual GP 101 // 102 // Return Value: 103 // r8 = EFI_SAL_ERROR 104 // 105 // As per static calling conventions. 106 // 107 //-- 108 //--------------------------------------------------------------------------- 109 PROCEDURE_ENTRY (SetEsalVirtualEntryPoint) 110 111 NESTED_SETUP (2,8,0,0) 112 113 EsalCalcStart2: 114 mov r8 = ip;; 115 add r8 = (EsalEntryPoint - EsalCalcStart2), r8;; 116 add r8 = 0x10, r8;; 117 st8 [r8] = in0;; 118 add r8 = 0x08, r8;; 119 st8 [r8] = in1;; 120 mov r8 = r0;; 121 122 NESTED_RETURN 123 124 PROCEDURE_EXIT (SetEsalVirtualEntryPoint) 125 126 .align 32 127 EsalEntryPoint: 128 data8 0 // Physical Entry 129 data8 0 // GP 130 data8 0 // Virtual Entry 131 data8 0 // GP 132