Merge master.kernel.org:/pub/scm/linux/kernel/git/jejb/scsi-for-linus-2.6
[sfrench/cifs-2.6.git] / arch / ppc64 / xmon / privinst.h
1 /*
2  * Copyright (C) 1996 Paul Mackerras.
3  *
4  *      This program is free software; you can redistribute it and/or
5  *      modify it under the terms of the GNU General Public License
6  *      as published by the Free Software Foundation; either version
7  *      2 of the License, or (at your option) any later version.
8  */
9
10 #define GETREG(reg)             \
11     static inline unsigned long get_ ## reg (void)      \
12         { unsigned long ret; asm volatile ("mf" #reg " %0" : "=r" (ret) :); return ret; }
13
14 #define SETREG(reg)             \
15     static inline void set_ ## reg (unsigned long val)  \
16         { asm volatile ("mt" #reg " %0" : : "r" (val)); }
17
18 GETREG(msr)
19 SETREG(msrd)
20 GETREG(cr)
21
22 #define GSETSPR(n, name)        \
23     static inline long get_ ## name (void) \
24         { long ret; asm volatile ("mfspr %0," #n : "=r" (ret) : ); return ret; } \
25     static inline void set_ ## name (long val) \
26         { asm volatile ("mtspr " #n ",%0" : : "r" (val)); }
27
28 GSETSPR(0, mq)
29 GSETSPR(1, xer)
30 GSETSPR(4, rtcu)
31 GSETSPR(5, rtcl)
32 GSETSPR(8, lr)
33 GSETSPR(9, ctr)
34 GSETSPR(18, dsisr)
35 GSETSPR(19, dar)
36 GSETSPR(22, dec)
37 GSETSPR(25, sdr1)
38 GSETSPR(26, srr0)
39 GSETSPR(27, srr1)
40 GSETSPR(272, sprg0)
41 GSETSPR(273, sprg1)
42 GSETSPR(274, sprg2)
43 GSETSPR(275, sprg3)
44 GSETSPR(282, ear)
45 GSETSPR(287, pvr)
46 GSETSPR(1008, hid0)
47 GSETSPR(1009, hid1)
48 GSETSPR(1010, iabr)
49 GSETSPR(1023, pir)
50
51 static inline void store_inst(void *p)
52 {
53         asm volatile ("dcbst 0,%0; sync; icbi 0,%0; isync" : : "r" (p));
54 }
55
56 static inline void cflush(void *p)
57 {
58         asm volatile ("dcbf 0,%0; icbi 0,%0" : : "r" (p));
59 }
60
61 static inline void cinval(void *p)
62 {
63         asm volatile ("dcbi 0,%0; icbi 0,%0" : : "r" (p));
64 }