mirror of https://github.com/acidanthera/audk.git
275 lines
6.8 KiB
ArmAsm
275 lines
6.8 KiB
ArmAsm
/// @file
|
|
/// IPF specific Global Control Registers accessing functions
|
|
///
|
|
/// Copyright (c) 2006 - 2008, Intel Corporation
|
|
/// All rights reserved. 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: AccessGcr.s
|
|
///
|
|
///
|
|
|
|
//---------------------------------------------------------------------------------
|
|
//++
|
|
// AsmReadDcr
|
|
//
|
|
// This routine is used to Read the value of Default Control Register (DCR).
|
|
//
|
|
// Arguments :
|
|
//
|
|
// On Entry :
|
|
//
|
|
// Return Value: The current value of DCR.
|
|
//
|
|
//--
|
|
//----------------------------------------------------------------------------------
|
|
.text
|
|
.type AsmReadDcr, @function
|
|
.proc AsmReadDcr
|
|
|
|
AsmReadDcr::
|
|
mov r8 = cr.dcr;;
|
|
br.ret.dpnt b0;;
|
|
.endp AsmReadDcr
|
|
|
|
//---------------------------------------------------------------------------------
|
|
//++
|
|
// AsmWriteDcr
|
|
//
|
|
// This routine is used to write the value to Default Control Register (DCR).
|
|
//
|
|
// Arguments :
|
|
//
|
|
// On Entry : The value need to be written to DCR
|
|
//
|
|
// Return Value: The value written to DCR.
|
|
//
|
|
//--
|
|
//----------------------------------------------------------------------------------
|
|
.text
|
|
.type AsmWriteDcr, @function
|
|
.proc AsmWriteDcr
|
|
.regstk 1, 0, 0, 0
|
|
|
|
AsmWriteDcr::
|
|
mov cr.dcr = in0
|
|
mov r8 = in0;;
|
|
srlz.i;;
|
|
srlz.d;;
|
|
br.ret.dpnt b0;;
|
|
.endp AsmWriteDcr
|
|
|
|
|
|
//---------------------------------------------------------------------------------
|
|
//++
|
|
// AsmReadItc
|
|
//
|
|
// This routine is used to Read the value of Interval Timer Counter Register (ITC).
|
|
//
|
|
// Arguments :
|
|
//
|
|
// On Entry :
|
|
//
|
|
// Return Value: The current value of ITC.
|
|
//
|
|
//--
|
|
//----------------------------------------------------------------------------------
|
|
.text
|
|
.type AsmReadItc, @function
|
|
.proc AsmReadItc
|
|
|
|
AsmReadItc::
|
|
mov r8 = ar.itc;;
|
|
br.ret.dpnt b0;;
|
|
.endp AsmReadItc
|
|
|
|
//---------------------------------------------------------------------------------
|
|
//++
|
|
// AsmWriteItc
|
|
//
|
|
// This routine is used to write the value to Interval Timer Counter Register (ITC).
|
|
//
|
|
// Arguments :
|
|
//
|
|
// On Entry : The value need to be written to the ITC
|
|
//
|
|
// Return Value: The value written to the ITC.
|
|
//
|
|
//--
|
|
//----------------------------------------------------------------------------------
|
|
.text
|
|
.type AsmWriteItc, @function
|
|
.proc AsmWriteItc
|
|
.regstk 1, 0, 0, 0
|
|
|
|
AsmWriteItc::
|
|
mov ar.itc = in0
|
|
mov r8 = in0;;
|
|
br.ret.dpnt b0;;
|
|
.endp AsmWriteItc
|
|
|
|
|
|
//---------------------------------------------------------------------------------
|
|
//++
|
|
// AsmReadItm
|
|
//
|
|
// This routine is used to Read the value of Interval Timer Match Register (ITM).
|
|
//
|
|
// Arguments :
|
|
//
|
|
// On Entry :
|
|
//
|
|
// Return Value: The current value of ITM.
|
|
//
|
|
//--
|
|
//----------------------------------------------------------------------------------
|
|
.text
|
|
.type AsmReadItm, @function
|
|
.proc AsmReadItm
|
|
|
|
AsmReadItm::
|
|
mov r8 = cr.itm;;
|
|
br.ret.dpnt b0;;
|
|
.endp AsmReadItm
|
|
|
|
//---------------------------------------------------------------------------------
|
|
//++
|
|
// AsmWriteItm
|
|
//
|
|
// This routine is used to write the value to Interval Timer Match Register (ITM).
|
|
//
|
|
// Arguments :
|
|
//
|
|
// On Entry : The value need to be written to ITM
|
|
//
|
|
// Return Value: The value written to ITM.
|
|
//
|
|
//--
|
|
//----------------------------------------------------------------------------------
|
|
.text
|
|
.type AsmWriteItm, @function
|
|
.proc AsmWriteItm
|
|
.regstk 1, 0, 0, 0
|
|
|
|
AsmWriteItm::
|
|
mov cr.itm = in0
|
|
mov r8 = in0;;
|
|
srlz.d;
|
|
br.ret.dpnt b0;;
|
|
.endp AsmWriteItm
|
|
|
|
|
|
//---------------------------------------------------------------------------------
|
|
//++
|
|
// AsmReadIva
|
|
//
|
|
// This routine is used to read the value of Interruption Vector Address Register (IVA).
|
|
//
|
|
// Arguments :
|
|
//
|
|
// On Entry :
|
|
//
|
|
// Return Value: The current value of IVA.
|
|
//
|
|
//--
|
|
//----------------------------------------------------------------------------------
|
|
.text
|
|
.type AsmReadIva, @function
|
|
.proc AsmReadIva
|
|
|
|
AsmReadIva::
|
|
mov r8 = cr.iva;;
|
|
br.ret.dpnt b0;;
|
|
.endp AsmReadIva
|
|
|
|
//---------------------------------------------------------------------------------
|
|
//++
|
|
// AsmWriteIva
|
|
//
|
|
// This routine is used to write the value to Interruption Vector Address Register (IVA).
|
|
//
|
|
// Arguments :
|
|
//
|
|
// On Entry : The value need to be written to IVA
|
|
//
|
|
// Return Value: The value written to IVA.
|
|
//
|
|
//--
|
|
//----------------------------------------------------------------------------------
|
|
.text
|
|
.type AsmWriteIva, @function
|
|
.proc AsmWriteIva
|
|
.regstk 1, 3, 0, 0
|
|
|
|
alloc loc1=ar.pfs,1,4,0,0 ;;
|
|
|
|
mov loc2 = psr
|
|
rsm 0x6000 // Make sure interrupts are masked
|
|
|
|
AsmWriteIva::
|
|
mov cr.iva = in0
|
|
srlz.i;;
|
|
mov psr.l = loc2;;
|
|
srlz.i;;
|
|
srlz.d;;
|
|
mov ar.pfs=loc1 ;;
|
|
mov r8 = in0;;
|
|
br.ret.dpnt b0;;
|
|
.endp AsmWriteIva
|
|
|
|
|
|
//---------------------------------------------------------------------------------
|
|
//++
|
|
// AsmReadPta
|
|
//
|
|
// This routine is used to read the value of Page Table Address Register (PTA).
|
|
//
|
|
// Arguments :
|
|
//
|
|
// On Entry :
|
|
//
|
|
// Return Value: The current value of PTA.
|
|
//
|
|
//--
|
|
//----------------------------------------------------------------------------------
|
|
.text
|
|
.type AsmReadPta, @function
|
|
.proc AsmReadPta
|
|
|
|
AsmReadPta::
|
|
mov r8 = cr.pta;;
|
|
br.ret.dpnt b0;;
|
|
.endp AsmReadPta
|
|
|
|
//---------------------------------------------------------------------------------
|
|
//++
|
|
// AsmWritePta
|
|
//
|
|
// This routine is used to write the value to Page Table Address Register (PTA)).
|
|
//
|
|
// Arguments :
|
|
//
|
|
// On Entry : The value need to be written to PTA
|
|
//
|
|
// Return Value: The value written to PTA.
|
|
//
|
|
//--
|
|
//----------------------------------------------------------------------------------
|
|
.text
|
|
.type AsmWritePta, @function
|
|
.proc AsmWritePta
|
|
.regstk 1, 0, 0, 0
|
|
|
|
AsmWritePta::
|
|
mov cr.pta = in0
|
|
mov r8 = in0;;
|
|
srlz.i;;
|
|
srlz.d;;
|
|
br.ret.dpnt b0;;
|
|
.endp AsmWritePta
|