git-svn-id: https://edk2.svn.sourceforge.net/svnroot/edk2/trunk/edk2@10594 6f19259b-4bc3-4df7-8a09-765794883524
		
			
				
	
	
		
			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.<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: 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
 | |
| 
 | |
| AsmWriteIva::
 | |
|         alloc loc1=ar.pfs,1,4,0,0 ;;
 | |
| 
 | |
|         mov         loc2 = psr
 | |
|         rsm         0x6000                      // Make sure interrupts are masked
 | |
| 
 | |
|         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
 |