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