mirror of
				https://git.proxmox.com/git/mirror_edk2
				synced 2025-10-31 08:32:28 +00:00 
			
		
		
		
	 c5b16b1b0b
			
		
	
	
		c5b16b1b0b
		
	
	
	
	
		
			
			git-svn-id: https://edk2.svn.sourceforge.net/svnroot/edk2/trunk/edk2@10594 6f19259b-4bc3-4df7-8a09-765794883524
		
			
				
	
	
		
			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
 | |
| 
 |