mirror of https://github.com/acidanthera/audk.git
513 lines
12 KiB
ArmAsm
513 lines
12 KiB
ArmAsm
/// @file
|
|
/// IPF specific External Interrupt Control Registers accessing functions
|
|
///
|
|
/// Copyright (c) 2006, 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: AccessEicr.s
|
|
///
|
|
///
|
|
|
|
//---------------------------------------------------------------------------------
|
|
//++
|
|
// AsmReadLid
|
|
//
|
|
// This routine is used to read the value of Local Interrupt ID Register (LID).
|
|
//
|
|
// Arguments :
|
|
//
|
|
// On Entry :
|
|
//
|
|
// Return Value: The current value of LID.
|
|
//
|
|
//--
|
|
//----------------------------------------------------------------------------------
|
|
.text
|
|
.type AsmReadLid, @function
|
|
.proc AsmReadLid
|
|
|
|
AsmReadLid::
|
|
mov r8 = cr.lid;;
|
|
srlz.d;;
|
|
br.ret.dpnt b0;;
|
|
.endp AsmReadLid
|
|
|
|
//---------------------------------------------------------------------------------
|
|
//++
|
|
// AsmWriteLid
|
|
//
|
|
// This routine is used to write the value to Local Interrupt ID Register (LID).
|
|
//
|
|
// Arguments :
|
|
//
|
|
// On Entry : The value need to be written to LID.
|
|
//
|
|
// Return Value: The value written to LID.
|
|
//
|
|
//--
|
|
//----------------------------------------------------------------------------------
|
|
.text
|
|
.type AsmWriteLid, @function
|
|
.proc AsmWriteLid
|
|
.regstk 1, 0, 0, 0
|
|
|
|
AsmWriteLid::
|
|
mov cr.lid = in0
|
|
mov r8 = in0;;
|
|
srlz.d;;
|
|
br.ret.dpnt b0;;
|
|
.endp AsmWriteLid
|
|
|
|
|
|
//---------------------------------------------------------------------------------
|
|
//++
|
|
// AsmReadIvr
|
|
//
|
|
// This routine is used to read the value of External Interrupt Vector Register (IVR).
|
|
//
|
|
// Arguments :
|
|
//
|
|
// On Entry :
|
|
//
|
|
// Return Value: The current value of IVR.
|
|
//
|
|
//--
|
|
//----------------------------------------------------------------------------------
|
|
.text
|
|
.type AsmReadIvr, @function
|
|
.proc AsmReadIvr
|
|
|
|
AsmReadIvr::
|
|
mov r8 = cr.ivr;;
|
|
srlz.d;;
|
|
br.ret.dpnt b0;;
|
|
.endp AsmReadIvr
|
|
|
|
|
|
//---------------------------------------------------------------------------------
|
|
//++
|
|
// AsmReadTpr
|
|
//
|
|
// This routine is used to read the value of Task Priority Register (TPR).
|
|
//
|
|
// Arguments :
|
|
//
|
|
// On Entry :
|
|
//
|
|
// Return Value: The current value of TPR.
|
|
//
|
|
//--
|
|
//----------------------------------------------------------------------------------
|
|
.text
|
|
.type AsmReadTpr, @function
|
|
.proc AsmReadTpr
|
|
|
|
AsmReadTpr::
|
|
mov r8 = cr.tpr;;
|
|
br.ret.dpnt b0;;
|
|
.endp AsmReadTpr
|
|
|
|
//---------------------------------------------------------------------------------
|
|
//++
|
|
// AsmWriteTpr
|
|
//
|
|
// This routine is used to write the value to Task Priority Register (TPR).
|
|
//
|
|
// Arguments :
|
|
//
|
|
// On Entry : The value need to be written to TPR.
|
|
//
|
|
// Return Value: The value written to TPR.
|
|
//
|
|
//--
|
|
//----------------------------------------------------------------------------------
|
|
.text
|
|
.type AsmWriteTpr, @function
|
|
.proc AsmWriteTpr
|
|
.regstk 1, 0, 0, 0
|
|
|
|
AsmWriteTpr::
|
|
mov cr.tpr = in0
|
|
mov r8 = in0;;
|
|
srlz.d;;
|
|
br.ret.dpnt b0;;
|
|
.endp AsmWriteTpr
|
|
|
|
|
|
//---------------------------------------------------------------------------------
|
|
//++
|
|
// AsmWriteEoi
|
|
//
|
|
// This routine is used to write the value to End of External Interrupt Register (EOI).
|
|
//
|
|
// Arguments :
|
|
//
|
|
// On Entry : The value need to be written to EOI.
|
|
//
|
|
// Return Value: The value written to EOI.
|
|
//
|
|
//--
|
|
//----------------------------------------------------------------------------------
|
|
.text
|
|
.type AsmWriteEoi, @function
|
|
.proc AsmWriteEoi
|
|
|
|
AsmWriteEoi::
|
|
mov cr.eoi = r0;;
|
|
srlz.d;;
|
|
br.ret.dpnt b0;;
|
|
.endp AsmWriteEoi
|
|
|
|
|
|
//---------------------------------------------------------------------------------
|
|
//++
|
|
// AsmReadIrr0
|
|
//
|
|
// This routine is used to Read the value of External Interrupt Request Register 0 (IRR0).
|
|
//
|
|
// Arguments :
|
|
//
|
|
// On Entry :
|
|
//
|
|
// Return Value: The current value of IRR0.
|
|
//
|
|
//--
|
|
//----------------------------------------------------------------------------------
|
|
.text
|
|
.type AsmReadIrr0, @function
|
|
.proc AsmReadIrr0
|
|
|
|
AsmReadIrr0::
|
|
mov r8 = cr.irr0;;
|
|
br.ret.dpnt b0;;
|
|
.endp AsmReadIrr0
|
|
|
|
|
|
//---------------------------------------------------------------------------------
|
|
//++
|
|
// AsmReadIrr1
|
|
//
|
|
// This routine is used to Read the value of External Interrupt Request Register 1 (IRR1).
|
|
//
|
|
// Arguments :
|
|
//
|
|
// On Entry :
|
|
//
|
|
// Return Value: The current value of IRR1.
|
|
//
|
|
//--
|
|
//----------------------------------------------------------------------------------
|
|
.text
|
|
.type AsmReadIrr1, @function
|
|
.proc AsmReadIrr1
|
|
|
|
AsmReadIrr1::
|
|
mov r8 = cr.irr1;;
|
|
br.ret.dpnt b0;;
|
|
.endp AsmReadIrr1
|
|
|
|
|
|
//---------------------------------------------------------------------------------
|
|
//++
|
|
// AsmReadIrr2
|
|
//
|
|
// This routine is used to Read the value of External Interrupt Request Register 2 (IRR2).
|
|
//
|
|
// Arguments :
|
|
//
|
|
// On Entry :
|
|
//
|
|
// Return Value: The current value of IRR2.
|
|
//
|
|
//--
|
|
//----------------------------------------------------------------------------------
|
|
.text
|
|
.type AsmReadIrr2, @function
|
|
.proc AsmReadIrr2
|
|
|
|
AsmReadIrr2::
|
|
mov r8 = cr.irr2;;
|
|
br.ret.dpnt b0;;
|
|
.endp AsmReadIrr2
|
|
|
|
|
|
//---------------------------------------------------------------------------------
|
|
//++
|
|
// AsmReadIrr3
|
|
//
|
|
// This routine is used to Read the value of External Interrupt Request Register 3 (IRR3).
|
|
//
|
|
// Arguments :
|
|
//
|
|
// On Entry :
|
|
//
|
|
// Return Value: The current value of IRR3.
|
|
//
|
|
//--
|
|
//----------------------------------------------------------------------------------
|
|
.text
|
|
.type AsmReadIrr3, @function
|
|
.proc AsmReadIrr3
|
|
|
|
AsmReadIrr3::
|
|
mov r8 = cr.irr3;;
|
|
br.ret.dpnt b0;;
|
|
.endp AsmReadIrr3
|
|
|
|
|
|
//---------------------------------------------------------------------------------
|
|
//++
|
|
// AsmReadItv
|
|
//
|
|
// This routine is used to Read the value of Interval Timer Vector Register (ITV).
|
|
//
|
|
// Arguments :
|
|
//
|
|
// On Entry :
|
|
//
|
|
// Return Value: The current value of ITV.
|
|
//
|
|
//--
|
|
//----------------------------------------------------------------------------------
|
|
.text
|
|
.type AsmReadItv, @function
|
|
.proc AsmReadItv
|
|
|
|
AsmReadItv::
|
|
mov r8 = cr.itv;;
|
|
br.ret.dpnt b0;;
|
|
.endp AsmReadItv
|
|
|
|
//---------------------------------------------------------------------------------
|
|
//++
|
|
// AsmWriteItv
|
|
//
|
|
// This routine is used to write the value to Interval Timer Vector Register (ITV).
|
|
//
|
|
// Arguments :
|
|
//
|
|
// On Entry : The value need to be written to ITV
|
|
//
|
|
// Return Value: The value written to ITV.
|
|
//
|
|
//--
|
|
//----------------------------------------------------------------------------------
|
|
.text
|
|
.type AsmWriteItv, @function
|
|
.proc AsmWriteItv
|
|
.regstk 1, 0, 0, 0
|
|
|
|
AsmWriteItv::
|
|
mov cr.itv = in0
|
|
mov r8 = in0;;
|
|
srlz.d;;
|
|
br.ret.dpnt b0;;
|
|
.endp AsmWriteItv
|
|
|
|
|
|
//---------------------------------------------------------------------------------
|
|
//++
|
|
// AsmReadPmv
|
|
//
|
|
// This routine is used to Read the value of Performance Monitoring Vector Register (PMV).
|
|
//
|
|
// Arguments :
|
|
//
|
|
// On Entry :
|
|
//
|
|
// Return Value: The current value of PMV.
|
|
//
|
|
//--
|
|
//----------------------------------------------------------------------------------
|
|
.text
|
|
.type AsmReadPmv, @function
|
|
.proc AsmReadPmv
|
|
|
|
AsmReadPmv::
|
|
mov r8 = cr.pmv;;
|
|
br.ret.dpnt b0;;
|
|
.endp AsmReadPmv
|
|
|
|
//---------------------------------------------------------------------------------
|
|
//++
|
|
// AsmWritePmv
|
|
//
|
|
// This routine is used to write the value to Performance Monitoring Vector Register (PMV).
|
|
//
|
|
// Arguments :
|
|
//
|
|
// On Entry : The value need to be written to PMV
|
|
//
|
|
// Return Value: The value written to PMV.
|
|
//
|
|
//--
|
|
//----------------------------------------------------------------------------------
|
|
.text
|
|
.type AsmWritePmv, @function
|
|
.proc AsmWritePmv
|
|
.regstk 1, 0, 0, 0
|
|
|
|
AsmWritePmv::
|
|
mov cr.pmv = in0
|
|
mov r8 = in0;;
|
|
srlz.d;;
|
|
br.ret.dpnt b0;;
|
|
.endp AsmWritePmv
|
|
|
|
|
|
//---------------------------------------------------------------------------------
|
|
//++
|
|
// AsmReadCmcv
|
|
//
|
|
// This routine is used to Read the value of Corrected Machine Check Vector Register (CMCV).
|
|
//
|
|
// Arguments :
|
|
//
|
|
// On Entry :
|
|
//
|
|
// Return Value: The current value of CMCV.
|
|
//
|
|
//--
|
|
//----------------------------------------------------------------------------------
|
|
.text
|
|
.type AsmReadCmcv, @function
|
|
.proc AsmReadCmcv
|
|
|
|
AsmReadCmcv::
|
|
mov r8 = cr.cmcv;;
|
|
br.ret.dpnt b0;;
|
|
.endp AsmReadCmcv
|
|
|
|
//---------------------------------------------------------------------------------
|
|
//++
|
|
// AsmWriteCmcv
|
|
//
|
|
// This routine is used to write the value to Corrected Machine Check Vector Register (CMCV).
|
|
//
|
|
// Arguments :
|
|
//
|
|
// On Entry : The value need to be written to CMCV
|
|
//
|
|
// Return Value: The value written to CMCV.
|
|
//
|
|
//--
|
|
//----------------------------------------------------------------------------------
|
|
.text
|
|
.type AsmWriteCmcv, @function
|
|
.proc AsmWriteCmcv
|
|
.regstk 1, 0, 0, 0
|
|
|
|
AsmWriteCmcv::
|
|
mov cr.cmcv = in0
|
|
mov r8 = in0;;
|
|
srlz.d;;
|
|
br.ret.dpnt b0;;
|
|
.endp AsmWriteCmcv
|
|
|
|
|
|
//---------------------------------------------------------------------------------
|
|
//++
|
|
// AsmReadLrr0
|
|
//
|
|
// This routine is used to read the value of Local Redirection Register 0 (LRR0).
|
|
//
|
|
// Arguments :
|
|
//
|
|
// On Entry :
|
|
//
|
|
// Return Value: The current value of LRR0.
|
|
//
|
|
//--
|
|
//----------------------------------------------------------------------------------
|
|
.text
|
|
.type AsmReadLrr0, @function
|
|
.proc AsmReadLrr0
|
|
|
|
AsmReadLrr0::
|
|
mov r8 = cr.lrr0;;
|
|
br.ret.dpnt b0;;
|
|
.endp AsmReadLrr0
|
|
|
|
//---------------------------------------------------------------------------------
|
|
//++
|
|
// AsmWriteLrr0
|
|
//
|
|
// This routine is used to write the value to Local Redirection Register 0 (LRR0).
|
|
//
|
|
// Arguments :
|
|
//
|
|
// On Entry : The value need to be written to LRR0.
|
|
//
|
|
// Return Value: The value written to LRR0.
|
|
//
|
|
//--
|
|
//----------------------------------------------------------------------------------
|
|
.text
|
|
.type AsmWriteLrr0, @function
|
|
.proc AsmWriteLrr0
|
|
.regstk 1, 0, 0, 0
|
|
|
|
AsmWriteLrr0::
|
|
mov cr.lrr0 = in0
|
|
mov r8 = in0;;
|
|
srlz.d;;
|
|
br.ret.dpnt b0;;
|
|
.endp AsmWriteLrr0
|
|
|
|
|
|
//---------------------------------------------------------------------------------
|
|
//++
|
|
// AsmReadLrr1
|
|
//
|
|
// This routine is used to read the value of Local Redirection Register 1 (LRR1).
|
|
//
|
|
// Arguments :
|
|
//
|
|
// On Entry :
|
|
//
|
|
// Return Value: The current value of LRR1.
|
|
//
|
|
//--
|
|
//----------------------------------------------------------------------------------
|
|
.text
|
|
.type AsmReadLrr1, @function
|
|
.proc AsmReadLrr1
|
|
|
|
AsmReadLrr1::
|
|
mov r8 = cr.lrr1;;
|
|
br.ret.dpnt b0;;
|
|
.endp AsmReadLrr1
|
|
|
|
//---------------------------------------------------------------------------------
|
|
//++
|
|
// AsmWriteLrr1
|
|
//
|
|
// This routine is used to write the value to Local Redirection Register 1 (LRR1).
|
|
//
|
|
// Arguments :
|
|
//
|
|
// On Entry : The value need to be written to LRR1.
|
|
//
|
|
// Return Value: The value written to LRR1.
|
|
//
|
|
//--
|
|
//----------------------------------------------------------------------------------
|
|
.text
|
|
.type AsmWriteLrr1, @function
|
|
.proc AsmWriteLrr1
|
|
.regstk 1, 0, 0, 0
|
|
|
|
AsmWriteLrr1::
|
|
mov cr.lrr1 = in0
|
|
mov r8 = in0;;
|
|
srlz.d;;
|
|
br.ret.dpnt b0;;
|
|
.endp AsmWriteLrr1
|
|
|