| /// @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 | |