123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180 |
- /*
- * This file is subject to the terms and conditions of the GNU General Public
- * License. See the file "COPYING" in the main directory of this archive
- * for more details.
- *
- * Copyright (C) 1994, 1995, 1996, 1997, 2000, 2001 by Ralf Baechle
- * Copyright (C) 2000 Silicon Graphics, Inc.
- * Modified for further R[236]000 support by Paul M. Antoine, 1996.
- * Kevin D. Kissell, kevink@mips.com and Carsten Langgaard, carstenl@mips.com
- * Copyright (C) 2000, 07 MIPS Technologies, Inc.
- * Copyright (C) 2003, 2004 Maciej W. Rozycki
- */
- #ifndef _ASM_MIPSREGS_H
- #define _ASM_MIPSREGS_H
- #include <linux/linkage.h>
- #include <asm/hazards.h>
- #include <asm/war.h>
- /*
- * The following macros are especially useful for __asm__
- * inline assembler.
- */
- #ifndef __STR
- #define __STR(x) #x
- #endif
- #ifndef STR
- #define STR(x) __STR(x)
- #endif
- /*
- * Configure language
- */
- #ifdef __ASSEMBLY__
- #define _ULCAST_
- #else
- #define _ULCAST_ (unsigned long)
- #endif
- /*
- * Coprocessor 0 register names
- */
- #define CP0_INDEX $0
- #define CP0_RANDOM $1
- #define CP0_ENTRYLO0 $2
- #define CP0_ENTRYLO1 $3
- #define CP0_CONF $3
- #define CP0_CONTEXT $4
- #define CP0_PAGEMASK $5
- #define CP0_WIRED $6
- #define CP0_INFO $7
- #define CP0_BADVADDR $8
- #define CP0_COUNT $9
- #define CP0_ENTRYHI $10
- #define CP0_COMPARE $11
- #define CP0_STATUS $12
- #define CP0_CAUSE $13
- #define CP0_EPC $14
- #define CP0_PRID $15
- #define CP0_CONFIG $16
- #define CP0_LLADDR $17
- #define CP0_WATCHLO $18
- #define CP0_WATCHHI $19
- #define CP0_XCONTEXT $20
- #define CP0_FRAMEMASK $21
- #define CP0_DIAGNOSTIC $22
- #define CP0_DEBUG $23
- #define CP0_DEPC $24
- #define CP0_PERFORMANCE $25
- #define CP0_ECC $26
- #define CP0_CACHEERR $27
- #define CP0_TAGLO $28
- #define CP0_TAGHI $29
- #define CP0_ERROREPC $30
- #define CP0_DESAVE $31
- /*
- * R4640/R4650 cp0 register names. These registers are listed
- * here only for completeness; without MMU these CPUs are not useable
- * by Linux. A future ELKS port might take make Linux run on them
- * though ...
- */
- #define CP0_IBASE $0
- #define CP0_IBOUND $1
- #define CP0_DBASE $2
- #define CP0_DBOUND $3
- #define CP0_CALG $17
- #define CP0_IWATCH $18
- #define CP0_DWATCH $19
- /*
- * Coprocessor 0 Set 1 register names
- */
- #define CP0_S1_DERRADDR0 $26
- #define CP0_S1_DERRADDR1 $27
- #define CP0_S1_INTCONTROL $20
- /*
- * Coprocessor 0 Set 2 register names
- */
- #define CP0_S2_SRSCTL $12 /* MIPSR2 */
- /*
- * Coprocessor 0 Set 3 register names
- */
- #define CP0_S3_SRSMAP $12 /* MIPSR2 */
- /*
- * TX39 Series
- */
- #define CP0_TX39_CACHE $7
- /*
- * Coprocessor 1 (FPU) register names
- */
- #define CP1_REVISION $0
- #define CP1_STATUS $31
- /*
- * FPU Status Register Values
- */
- /*
- * Status Register Values
- */
- #define FPU_CSR_FLUSH 0x01000000 /* flush denormalised results to 0 */
- #define FPU_CSR_COND 0x00800000 /* $fcc0 */
- #define FPU_CSR_COND0 0x00800000 /* $fcc0 */
- #define FPU_CSR_COND1 0x02000000 /* $fcc1 */
- #define FPU_CSR_COND2 0x04000000 /* $fcc2 */
- #define FPU_CSR_COND3 0x08000000 /* $fcc3 */
- #define FPU_CSR_COND4 0x10000000 /* $fcc4 */
- #define FPU_CSR_COND5 0x20000000 /* $fcc5 */
- #define FPU_CSR_COND6 0x40000000 /* $fcc6 */
- #define FPU_CSR_COND7 0x80000000 /* $fcc7 */
- /*
- * Bits 18 - 20 of the FPU Status Register will be read as 0,
- * and should be written as zero.
- */
- #define FPU_CSR_RSVD 0x001c0000
- /*
- * X the exception cause indicator
- * E the exception enable
- * S the sticky/flag bit
- */
- #define FPU_CSR_ALL_X 0x0003f000
- #define FPU_CSR_UNI_X 0x00020000
- #define FPU_CSR_INV_X 0x00010000
- #define FPU_CSR_DIV_X 0x00008000
- #define FPU_CSR_OVF_X 0x00004000
- #define FPU_CSR_UDF_X 0x00002000
- #define FPU_CSR_INE_X 0x00001000
- #define FPU_CSR_ALL_E 0x00000f80
- #define FPU_CSR_INV_E 0x00000800
- #define FPU_CSR_DIV_E 0x00000400
- #define FPU_CSR_OVF_E 0x00000200
- #define FPU_CSR_UDF_E 0x00000100
- #define FPU_CSR_INE_E 0x00000080
- #define FPU_CSR_ALL_S 0x0000007c
- #define FPU_CSR_INV_S 0x00000040
- #define FPU_CSR_DIV_S 0x00000020
- #define FPU_CSR_OVF_S 0x00000010
- #define FPU_CSR_UDF_S 0x00000008
- #define FPU_CSR_INE_S 0x00000004
- /* Bits 0 and 1 of FPU Status Register specify the rounding mode */
- #define FPU_CSR_RM 0x00000003
- #define FPU_CSR_RN 0x0 /* nearest */
- #define FPU_CSR_RZ 0x1 /* towards zero */
- #define FPU_CSR_RU 0x2 /* towards +Infinity */
- #define FPU_CSR_RD 0x3 /* towards -Infinity */
- /*
- * Values for PageMask register
- */
|