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// 22ASM_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//--------------------------------------------------------------------------- 43PROCEDURE_ENTRY (GetEsalEntryPoint) 44 45 NESTED_SETUP (0,8,0,0) 46 47EsalCalcStart: 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 57PROCEDURE_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//--------------------------------------------------------------------------- 76PROCEDURE_ENTRY (SetEsalPhysicalEntryPoint) 77 78 NESTED_SETUP (2,8,0,0) 79 80EsalCalcStart1: 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 90PROCEDURE_EXIT (SetEsalPhysicalEntryPoint) 91 92.align 32 93EsalEntryPoint: 94 data8 0 // Physical Entry 95 data8 0 // GP 96 data8 0 // Virtual Entry 97 data8 0 // GP 98