Commit | Line | Data |
---|---|---|
1da177e4 LT |
1 | #ifndef __ALPHA_PAL_H |
2 | #define __ALPHA_PAL_H | |
3 | ||
96433f6e | 4 | #include <uapi/asm/pal.h> |
1da177e4 | 5 | |
ec221208 DH |
6 | #ifndef __ASSEMBLY__ |
7 | ||
8 | extern void halt(void) __attribute__((noreturn)); | |
9 | #define __halt() __asm__ __volatile__ ("call_pal %0 #halt" : : "i" (PAL_halt)) | |
10 | ||
11 | #define imb() \ | |
12 | __asm__ __volatile__ ("call_pal %0 #imb" : : "i" (PAL_imb) : "memory") | |
13 | ||
14 | #define draina() \ | |
15 | __asm__ __volatile__ ("call_pal %0 #draina" : : "i" (PAL_draina) : "memory") | |
16 | ||
17 | #define __CALL_PAL_R0(NAME, TYPE) \ | |
18 | extern inline TYPE NAME(void) \ | |
19 | { \ | |
20 | register TYPE __r0 __asm__("$0"); \ | |
21 | __asm__ __volatile__( \ | |
22 | "call_pal %1 # " #NAME \ | |
23 | :"=r" (__r0) \ | |
24 | :"i" (PAL_ ## NAME) \ | |
25 | :"$1", "$16", "$22", "$23", "$24", "$25"); \ | |
26 | return __r0; \ | |
27 | } | |
28 | ||
29 | #define __CALL_PAL_W1(NAME, TYPE0) \ | |
30 | extern inline void NAME(TYPE0 arg0) \ | |
31 | { \ | |
32 | register TYPE0 __r16 __asm__("$16") = arg0; \ | |
33 | __asm__ __volatile__( \ | |
34 | "call_pal %1 # "#NAME \ | |
35 | : "=r"(__r16) \ | |
36 | : "i"(PAL_ ## NAME), "0"(__r16) \ | |
37 | : "$1", "$22", "$23", "$24", "$25"); \ | |
38 | } | |
39 | ||
40 | #define __CALL_PAL_W2(NAME, TYPE0, TYPE1) \ | |
41 | extern inline void NAME(TYPE0 arg0, TYPE1 arg1) \ | |
42 | { \ | |
43 | register TYPE0 __r16 __asm__("$16") = arg0; \ | |
44 | register TYPE1 __r17 __asm__("$17") = arg1; \ | |
45 | __asm__ __volatile__( \ | |
46 | "call_pal %2 # "#NAME \ | |
47 | : "=r"(__r16), "=r"(__r17) \ | |
48 | : "i"(PAL_ ## NAME), "0"(__r16), "1"(__r17) \ | |
49 | : "$1", "$22", "$23", "$24", "$25"); \ | |
50 | } | |
51 | ||
52 | #define __CALL_PAL_RW1(NAME, RTYPE, TYPE0) \ | |
53 | extern inline RTYPE NAME(TYPE0 arg0) \ | |
54 | { \ | |
55 | register RTYPE __r0 __asm__("$0"); \ | |
56 | register TYPE0 __r16 __asm__("$16") = arg0; \ | |
57 | __asm__ __volatile__( \ | |
58 | "call_pal %2 # "#NAME \ | |
59 | : "=r"(__r16), "=r"(__r0) \ | |
60 | : "i"(PAL_ ## NAME), "0"(__r16) \ | |
61 | : "$1", "$22", "$23", "$24", "$25"); \ | |
62 | return __r0; \ | |
63 | } | |
64 | ||
65 | #define __CALL_PAL_RW2(NAME, RTYPE, TYPE0, TYPE1) \ | |
66 | extern inline RTYPE NAME(TYPE0 arg0, TYPE1 arg1) \ | |
67 | { \ | |
68 | register RTYPE __r0 __asm__("$0"); \ | |
69 | register TYPE0 __r16 __asm__("$16") = arg0; \ | |
70 | register TYPE1 __r17 __asm__("$17") = arg1; \ | |
71 | __asm__ __volatile__( \ | |
72 | "call_pal %3 # "#NAME \ | |
73 | : "=r"(__r16), "=r"(__r17), "=r"(__r0) \ | |
74 | : "i"(PAL_ ## NAME), "0"(__r16), "1"(__r17) \ | |
75 | : "$1", "$22", "$23", "$24", "$25"); \ | |
76 | return __r0; \ | |
77 | } | |
78 | ||
79 | __CALL_PAL_W1(cflush, unsigned long); | |
80 | __CALL_PAL_R0(rdmces, unsigned long); | |
81 | __CALL_PAL_R0(rdps, unsigned long); | |
82 | __CALL_PAL_R0(rdusp, unsigned long); | |
83 | __CALL_PAL_RW1(swpipl, unsigned long, unsigned long); | |
84 | __CALL_PAL_R0(whami, unsigned long); | |
85 | __CALL_PAL_W2(wrent, void*, unsigned long); | |
86 | __CALL_PAL_W1(wripir, unsigned long); | |
87 | __CALL_PAL_W1(wrkgp, unsigned long); | |
88 | __CALL_PAL_W1(wrmces, unsigned long); | |
89 | __CALL_PAL_RW2(wrperfmon, unsigned long, unsigned long, unsigned long); | |
90 | __CALL_PAL_W1(wrusp, unsigned long); | |
91 | __CALL_PAL_W1(wrvptptr, unsigned long); | |
92 | ||
93 | /* | |
94 | * TB routines.. | |
95 | */ | |
96 | #define __tbi(nr,arg,arg1...) \ | |
97 | ({ \ | |
98 | register unsigned long __r16 __asm__("$16") = (nr); \ | |
99 | register unsigned long __r17 __asm__("$17"); arg; \ | |
100 | __asm__ __volatile__( \ | |
101 | "call_pal %3 #__tbi" \ | |
102 | :"=r" (__r16),"=r" (__r17) \ | |
103 | :"0" (__r16),"i" (PAL_tbi) ,##arg1 \ | |
104 | :"$0", "$1", "$22", "$23", "$24", "$25"); \ | |
105 | }) | |
106 | ||
107 | #define tbi(x,y) __tbi(x,__r17=(y),"1" (__r17)) | |
108 | #define tbisi(x) __tbi(1,__r17=(x),"1" (__r17)) | |
109 | #define tbisd(x) __tbi(2,__r17=(x),"1" (__r17)) | |
110 | #define tbis(x) __tbi(3,__r17=(x),"1" (__r17)) | |
111 | #define tbiap() __tbi(-1, /* no second argument */) | |
112 | #define tbia() __tbi(-2, /* no second argument */) | |
113 | ||
114 | #endif /* !__ASSEMBLY__ */ | |
1da177e4 | 115 | #endif /* __ALPHA_PAL_H */ |