diff options
Diffstat (limited to 'arch/ppc/xmon/privinst.h')
-rw-r--r-- | arch/ppc/xmon/privinst.h | 91 |
1 files changed, 91 insertions, 0 deletions
diff --git a/arch/ppc/xmon/privinst.h b/arch/ppc/xmon/privinst.h new file mode 100644 index 00000000000..93978c027ca --- /dev/null +++ b/arch/ppc/xmon/privinst.h @@ -0,0 +1,91 @@ +/* + * Copyright (C) 1996 Paul Mackerras. + */ +#include <linux/config.h> + +#define GETREG(reg) \ + static inline int get_ ## reg (void) \ + { int ret; asm volatile ("mf" #reg " %0" : "=r" (ret) :); return ret; } + +#define SETREG(reg) \ + static inline void set_ ## reg (int val) \ + { asm volatile ("mt" #reg " %0" : : "r" (val)); } + +GETREG(msr) +SETREG(msr) +GETREG(cr) + +#define GSETSPR(n, name) \ + static inline int get_ ## name (void) \ + { int ret; asm volatile ("mfspr %0," #n : "=r" (ret) : ); return ret; } \ + static inline void set_ ## name (int val) \ + { asm volatile ("mtspr " #n ",%0" : : "r" (val)); } + +GSETSPR(0, mq) +GSETSPR(1, xer) +GSETSPR(4, rtcu) +GSETSPR(5, rtcl) +GSETSPR(8, lr) +GSETSPR(9, ctr) +GSETSPR(18, dsisr) +GSETSPR(19, dar) +GSETSPR(22, dec) +GSETSPR(25, sdr1) +GSETSPR(26, srr0) +GSETSPR(27, srr1) +GSETSPR(272, sprg0) +GSETSPR(273, sprg1) +GSETSPR(274, sprg2) +GSETSPR(275, sprg3) +GSETSPR(282, ear) +GSETSPR(287, pvr) +#ifndef CONFIG_8xx +GSETSPR(528, bat0u) +GSETSPR(529, bat0l) +GSETSPR(530, bat1u) +GSETSPR(531, bat1l) +GSETSPR(532, bat2u) +GSETSPR(533, bat2l) +GSETSPR(534, bat3u) +GSETSPR(535, bat3l) +GSETSPR(1008, hid0) +GSETSPR(1009, hid1) +GSETSPR(1010, iabr) +GSETSPR(1013, dabr) +GSETSPR(1023, pir) +#else +GSETSPR(144, cmpa) +GSETSPR(145, cmpb) +GSETSPR(146, cmpc) +GSETSPR(147, cmpd) +GSETSPR(158, ictrl) +#endif + +static inline int get_sr(int n) +{ + int ret; + + asm (" mfsrin %0,%1" : "=r" (ret) : "r" (n << 28)); + return ret; +} + +static inline void set_sr(int n, int val) +{ + asm ("mtsrin %0,%1" : : "r" (val), "r" (n << 28)); +} + +static inline void store_inst(void *p) +{ + asm volatile ("dcbst 0,%0; sync; icbi 0,%0; isync" : : "r" (p)); +} + +static inline void cflush(void *p) +{ + asm volatile ("dcbf 0,%0; icbi 0,%0" : : "r" (p)); +} + +static inline void cinval(void *p) +{ + asm volatile ("dcbi 0,%0; icbi 0,%0" : : "r" (p)); +} + |