AsmExtendedSalLib.s revision 4fd606d1f5abe38e1f42c38de1d2e895166bd0f4
abc3b8d235d6078e683d4d936027c8c8fb606084Eugenia Sergueeva/// @file
abc3b8d235d6078e683d4d936027c8c8fb606084Eugenia Sergueeva/// Assembly procedures to get and set ESAL entry point.
abc3b8d235d6078e683d4d936027c8c8fb606084Eugenia Sergueeva///
abc3b8d235d6078e683d4d936027c8c8fb606084Eugenia Sergueeva/// Copyright (c) 2006 - 2011, Intel Corporation. All rights reserved.<BR>
abc3b8d235d6078e683d4d936027c8c8fb606084Eugenia Sergueeva/// This program and the accompanying materials
abc3b8d235d6078e683d4d936027c8c8fb606084Eugenia Sergueeva/// are licensed and made available under the terms and conditions of the BSD License
abc3b8d235d6078e683d4d936027c8c8fb606084Eugenia Sergueeva/// which accompanies this distribution. The full text of the license may be found at
abc3b8d235d6078e683d4d936027c8c8fb606084Eugenia Sergueeva/// http://opensource.org/licenses/bsd-license.php.
abc3b8d235d6078e683d4d936027c8c8fb606084Eugenia Sergueeva///
abc3b8d235d6078e683d4d936027c8c8fb606084Eugenia Sergueeva/// THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,
abc3b8d235d6078e683d4d936027c8c8fb606084Eugenia Sergueeva/// WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.
abc3b8d235d6078e683d4d936027c8c8fb606084Eugenia Sergueeva///
abc3b8d235d6078e683d4d936027c8c8fb606084Eugenia Sergueeva
abc3b8d235d6078e683d4d936027c8c8fb606084Eugenia Sergueeva.auto
f8151934bcee266b109165fc13fafbb7bd8042efEugenia Sergueeva.text
abc3b8d235d6078e683d4d936027c8c8fb606084Eugenia Sergueeva
abc3b8d235d6078e683d4d936027c8c8fb606084Eugenia Sergueeva#include "IpfMacro.i"
abc3b8d235d6078e683d4d936027c8c8fb606084Eugenia Sergueeva
abc3b8d235d6078e683d4d936027c8c8fb606084Eugenia Sergueeva//
abc3b8d235d6078e683d4d936027c8c8fb606084Eugenia Sergueeva// Exports
f8151934bcee266b109165fc13fafbb7bd8042efEugenia Sergueeva//
abc3b8d235d6078e683d4d936027c8c8fb606084Eugenia SergueevaASM_GLOBAL GetEsalEntryPoint
abc3b8d235d6078e683d4d936027c8c8fb606084Eugenia Sergueeva
abc3b8d235d6078e683d4d936027c8c8fb606084Eugenia Sergueeva//-----------------------------------------------------------------------------
6f602c19622f2fb2276856ed1d9f3bbbcaffe09fEugenia Sergueeva//++
abc3b8d235d6078e683d4d936027c8c8fb606084Eugenia Sergueeva// GetEsalEntryPoint
abc3b8d235d6078e683d4d936027c8c8fb606084Eugenia Sergueeva//
abc3b8d235d6078e683d4d936027c8c8fb606084Eugenia Sergueeva// Return Esal global and PSR register.
6f602c19622f2fb2276856ed1d9f3bbbcaffe09fEugenia Sergueeva//
abc3b8d235d6078e683d4d936027c8c8fb606084Eugenia Sergueeva// On Entry :
abc3b8d235d6078e683d4d936027c8c8fb606084Eugenia Sergueeva//
abc3b8d235d6078e683d4d936027c8c8fb606084Eugenia Sergueeva//
abc3b8d235d6078e683d4d936027c8c8fb606084Eugenia Sergueeva// Return Value:
abc3b8d235d6078e683d4d936027c8c8fb606084Eugenia Sergueeva// r8 = EFI_SAL_SUCCESS
abc3b8d235d6078e683d4d936027c8c8fb606084Eugenia Sergueeva// r9 = Physical Plabel
abc3b8d235d6078e683d4d936027c8c8fb606084Eugenia Sergueeva// r10 = Virtual Plabel
abc3b8d235d6078e683d4d936027c8c8fb606084Eugenia Sergueeva// r11 = psr
9f461d45aa84261166b4f4d53523ed36ee2645a9Phill Cunnington//
abc3b8d235d6078e683d4d936027c8c8fb606084Eugenia Sergueeva// As per static calling conventions.
9f461d45aa84261166b4f4d53523ed36ee2645a9Phill Cunnington//
9f461d45aa84261166b4f4d53523ed36ee2645a9Phill Cunnington//--
abc3b8d235d6078e683d4d936027c8c8fb606084Eugenia Sergueeva//---------------------------------------------------------------------------
abc3b8d235d6078e683d4d936027c8c8fb606084Eugenia SergueevaPROCEDURE_ENTRY (GetEsalEntryPoint)
abc3b8d235d6078e683d4d936027c8c8fb606084Eugenia Sergueeva
abc3b8d235d6078e683d4d936027c8c8fb606084Eugenia Sergueeva NESTED_SETUP (0,8,0,0)
abc3b8d235d6078e683d4d936027c8c8fb606084Eugenia Sergueeva
abc3b8d235d6078e683d4d936027c8c8fb606084Eugenia SergueevaEsalCalcStart:
f8151934bcee266b109165fc13fafbb7bd8042efEugenia Sergueeva mov r8 = ip;;
abc3b8d235d6078e683d4d936027c8c8fb606084Eugenia Sergueeva add r8 = (EsalEntryPoint - EsalCalcStart), r8;;
abc3b8d235d6078e683d4d936027c8c8fb606084Eugenia Sergueeva mov r9 = r8;;
abc3b8d235d6078e683d4d936027c8c8fb606084Eugenia Sergueeva add r10 = 0x10, r8;;
9f461d45aa84261166b4f4d53523ed36ee2645a9Phill Cunnington mov r11 = psr;;
f8151934bcee266b109165fc13fafbb7bd8042efEugenia Sergueeva mov r8 = r0;;
abc3b8d235d6078e683d4d936027c8c8fb606084Eugenia Sergueeva
abc3b8d235d6078e683d4d936027c8c8fb606084Eugenia Sergueeva NESTED_RETURN
abc3b8d235d6078e683d4d936027c8c8fb606084Eugenia Sergueeva
abc3b8d235d6078e683d4d936027c8c8fb606084Eugenia SergueevaPROCEDURE_EXIT (GetEsalEntryPoint)
9f461d45aa84261166b4f4d53523ed36ee2645a9Phill Cunnington
9f461d45aa84261166b4f4d53523ed36ee2645a9Phill Cunnington//-----------------------------------------------------------------------------
9f461d45aa84261166b4f4d53523ed36ee2645a9Phill Cunnington//++
9f461d45aa84261166b4f4d53523ed36ee2645a9Phill Cunnington// SetEsalPhysicalEntryPoint
9f461d45aa84261166b4f4d53523ed36ee2645a9Phill Cunnington//
9f461d45aa84261166b4f4d53523ed36ee2645a9Phill Cunnington// Set the dispatcher entry point
9f461d45aa84261166b4f4d53523ed36ee2645a9Phill Cunnington//
9f461d45aa84261166b4f4d53523ed36ee2645a9Phill Cunnington// On Entry:
9f461d45aa84261166b4f4d53523ed36ee2645a9Phill Cunnington// in0 = Physical address of Esal Dispatcher
9f461d45aa84261166b4f4d53523ed36ee2645a9Phill Cunnington// in1 = Physical GP
9f461d45aa84261166b4f4d53523ed36ee2645a9Phill Cunnington//
9f461d45aa84261166b4f4d53523ed36ee2645a9Phill Cunnington// Return Value:
9f461d45aa84261166b4f4d53523ed36ee2645a9Phill Cunnington// r8 = EFI_SAL_SUCCESS
9f461d45aa84261166b4f4d53523ed36ee2645a9Phill Cunnington//
9f461d45aa84261166b4f4d53523ed36ee2645a9Phill Cunnington// As per static calling conventions.
f8151934bcee266b109165fc13fafbb7bd8042efEugenia Sergueeva//
9f461d45aa84261166b4f4d53523ed36ee2645a9Phill Cunnington//--
9f461d45aa84261166b4f4d53523ed36ee2645a9Phill Cunnington//---------------------------------------------------------------------------
9f461d45aa84261166b4f4d53523ed36ee2645a9Phill CunningtonPROCEDURE_ENTRY (SetEsalPhysicalEntryPoint)
9f461d45aa84261166b4f4d53523ed36ee2645a9Phill Cunnington
f8151934bcee266b109165fc13fafbb7bd8042efEugenia Sergueeva NESTED_SETUP (2,8,0,0)
9f461d45aa84261166b4f4d53523ed36ee2645a9Phill Cunnington
9f461d45aa84261166b4f4d53523ed36ee2645a9Phill CunningtonEsalCalcStart1:
9f461d45aa84261166b4f4d53523ed36ee2645a9Phill Cunnington mov r8 = ip;;
9f461d45aa84261166b4f4d53523ed36ee2645a9Phill Cunnington add r8 = (EsalEntryPoint - EsalCalcStart1), r8;;
9f461d45aa84261166b4f4d53523ed36ee2645a9Phill Cunnington st8 [r8] = in0;;
abc3b8d235d6078e683d4d936027c8c8fb606084Eugenia Sergueeva add r8 = 0x08, r8;;
abc3b8d235d6078e683d4d936027c8c8fb606084Eugenia Sergueeva st8 [r8] = in1;;
mov r8 = r0;;
NESTED_RETURN
PROCEDURE_EXIT (SetEsalPhysicalEntryPoint)
//-----------------------------------------------------------------------------
//++
// SetEsalVirtualEntryPoint
//
// Register physical address of Esal globals.
//
// On Entry :
// in0 = Virtual address of Esal Dispatcher
// in1 = Virtual GP
//
// Return Value:
// r8 = EFI_SAL_ERROR
//
// As per static calling conventions.
//
//--
//---------------------------------------------------------------------------
PROCEDURE_ENTRY (SetEsalVirtualEntryPoint)
NESTED_SETUP (2,8,0,0)
EsalCalcStart2:
mov r8 = ip;;
add r8 = (EsalEntryPoint - EsalCalcStart2), r8;;
add r8 = 0x10, r8;;
st8 [r8] = in0;;
add r8 = 0x08, r8;;
st8 [r8] = in1;;
mov r8 = r0;;
NESTED_RETURN
PROCEDURE_EXIT (SetEsalVirtualEntryPoint)
.align 32
EsalEntryPoint:
data8 0 // Physical Entry
data8 0 // GP
data8 0 // Virtual Entry
data8 0 // GP