|
@@ -603,3 +603,65 @@
|
|
|
#define MIPS_CONF6_SYND (_ULCAST_(1) << 13)
|
|
|
|
|
|
#define MIPS_CONF7_WII (_ULCAST_(1) << 31)
|
|
|
+
|
|
|
+#define MIPS_CONF7_RPS (_ULCAST_(1) << 2)
|
|
|
+
|
|
|
+
|
|
|
+/*
|
|
|
+ * Bits in the MIPS32/64 coprocessor 1 (FPU) revision register.
|
|
|
+ */
|
|
|
+#define MIPS_FPIR_S (_ULCAST_(1) << 16)
|
|
|
+#define MIPS_FPIR_D (_ULCAST_(1) << 17)
|
|
|
+#define MIPS_FPIR_PS (_ULCAST_(1) << 18)
|
|
|
+#define MIPS_FPIR_3D (_ULCAST_(1) << 19)
|
|
|
+#define MIPS_FPIR_W (_ULCAST_(1) << 20)
|
|
|
+#define MIPS_FPIR_L (_ULCAST_(1) << 21)
|
|
|
+#define MIPS_FPIR_F64 (_ULCAST_(1) << 22)
|
|
|
+
|
|
|
+#ifndef __ASSEMBLY__
|
|
|
+
|
|
|
+/*
|
|
|
+ * Functions to access the R10000 performance counters. These are basically
|
|
|
+ * mfc0 and mtc0 instructions from and to coprocessor register with a 5-bit
|
|
|
+ * performance counter number encoded into bits 1 ... 5 of the instruction.
|
|
|
+ * Only performance counters 0 to 1 actually exist, so for a non-R10000 aware
|
|
|
+ * disassembler these will look like an access to sel 0 or 1.
|
|
|
+ */
|
|
|
+#define read_r10k_perf_cntr(counter) \
|
|
|
+({ \
|
|
|
+ unsigned int __res; \
|
|
|
+ __asm__ __volatile__( \
|
|
|
+ "mfpc\t%0, %1" \
|
|
|
+ : "=r" (__res) \
|
|
|
+ : "i" (counter)); \
|
|
|
+ \
|
|
|
+ __res; \
|
|
|
+})
|
|
|
+
|
|
|
+#define write_r10k_perf_cntr(counter,val) \
|
|
|
+do { \
|
|
|
+ __asm__ __volatile__( \
|
|
|
+ "mtpc\t%0, %1" \
|
|
|
+ : \
|
|
|
+ : "r" (val), "i" (counter)); \
|
|
|
+} while (0)
|
|
|
+
|
|
|
+#define read_r10k_perf_event(counter) \
|
|
|
+({ \
|
|
|
+ unsigned int __res; \
|
|
|
+ __asm__ __volatile__( \
|
|
|
+ "mfps\t%0, %1" \
|
|
|
+ : "=r" (__res) \
|
|
|
+ : "i" (counter)); \
|
|
|
+ \
|
|
|
+ __res; \
|
|
|
+})
|
|
|
+
|
|
|
+#define write_r10k_perf_cntl(counter,val) \
|
|
|
+do { \
|
|
|
+ __asm__ __volatile__( \
|
|
|
+ "mtps\t%0, %1" \
|
|
|
+ : \
|
|
|
+ : "r" (val), "i" (counter)); \
|
|
|
+} while (0)
|
|
|
+
|