diff options
author | Ishizaki Kou <kou.ishizaki@toshiba.co.jp> | 2007-02-02 02:36:27 -0500 |
---|---|---|
committer | Paul Mackerras <paulus@samba.org> | 2007-02-06 22:03:21 -0500 |
commit | b8a590c496474ca80a8f1c2b228e8b8e6a33fb9d (patch) | |
tree | 4a1c80b3a84ea58c0088655e40cede39bcf3b687 /arch/powerpc/platforms/celleb/hvCall.S | |
parent | c23ef29c1efa6864527fb78249695679810d302e (diff) |
[POWERPC] Celleb: interfaces to the hypervisor
This patch creates Celleb platform dependent files which add
interfaces to call hypervisor.
Signed-off-by: Kou Ishizaki <kou.ishizaki@toshiba.co.jp>
Signed-off-by: Paul Mackerras <paulus@samba.org>
Diffstat (limited to 'arch/powerpc/platforms/celleb/hvCall.S')
-rw-r--r-- | arch/powerpc/platforms/celleb/hvCall.S | 287 |
1 files changed, 287 insertions, 0 deletions
diff --git a/arch/powerpc/platforms/celleb/hvCall.S b/arch/powerpc/platforms/celleb/hvCall.S new file mode 100644 index 000000000000..74c817448948 --- /dev/null +++ b/arch/powerpc/platforms/celleb/hvCall.S | |||
@@ -0,0 +1,287 @@ | |||
1 | /* | ||
2 | * Beat hypervisor call I/F | ||
3 | * | ||
4 | * (C) Copyright 2007 TOSHIBA CORPORATION | ||
5 | * | ||
6 | * This code is based on arch/powerpc/platforms/pseries/hvCall.S. | ||
7 | * | ||
8 | * This program is free software; you can redistribute it and/or modify | ||
9 | * it under the terms of the GNU General Public License as published by | ||
10 | * the Free Software Foundation; either version 2 of the License, or | ||
11 | * (at your option) any later version. | ||
12 | * | ||
13 | * This program is distributed in the hope that it will be useful, | ||
14 | * but WITHOUT ANY WARRANTY; without even the implied warranty of | ||
15 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the | ||
16 | * GNU General Public License for more details. | ||
17 | * | ||
18 | * You should have received a copy of the GNU General Public License along | ||
19 | * with this program; if not, write to the Free Software Foundation, Inc., | ||
20 | * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. | ||
21 | */ | ||
22 | |||
23 | #include <asm/ppc_asm.h> | ||
24 | |||
25 | #define STK_PARM(i) (48 + ((i)-3)*8) | ||
26 | |||
27 | /* Not implemented on Beat, now */ | ||
28 | #define HCALL_INST_PRECALL | ||
29 | #define HCALL_INST_POSTCALL | ||
30 | |||
31 | .text | ||
32 | |||
33 | #define HVSC .long 0x44000022 | ||
34 | |||
35 | /* Note: takes only 7 input parameters at maximum */ | ||
36 | _GLOBAL(beat_hcall_norets) | ||
37 | HMT_MEDIUM | ||
38 | |||
39 | mfcr r0 | ||
40 | stw r0,8(r1) | ||
41 | |||
42 | HCALL_INST_PRECALL | ||
43 | |||
44 | mr r11,r3 | ||
45 | mr r3,r4 | ||
46 | mr r4,r5 | ||
47 | mr r5,r6 | ||
48 | mr r6,r7 | ||
49 | mr r7,r8 | ||
50 | mr r8,r9 | ||
51 | |||
52 | HVSC /* invoke the hypervisor */ | ||
53 | |||
54 | HCALL_INST_POSTCALL | ||
55 | |||
56 | lwz r0,8(r1) | ||
57 | mtcrf 0xff,r0 | ||
58 | |||
59 | blr /* return r3 = status */ | ||
60 | |||
61 | /* Note: takes 8 input parameters at maximum */ | ||
62 | _GLOBAL(beat_hcall_norets8) | ||
63 | HMT_MEDIUM | ||
64 | |||
65 | mfcr r0 | ||
66 | stw r0,8(r1) | ||
67 | |||
68 | HCALL_INST_PRECALL | ||
69 | |||
70 | mr r11,r3 | ||
71 | mr r3,r4 | ||
72 | mr r4,r5 | ||
73 | mr r5,r6 | ||
74 | mr r6,r7 | ||
75 | mr r7,r8 | ||
76 | mr r8,r9 | ||
77 | ld r10,STK_PARM(r10)(r1) | ||
78 | |||
79 | HVSC /* invoke the hypervisor */ | ||
80 | |||
81 | HCALL_INST_POSTCALL | ||
82 | |||
83 | lwz r0,8(r1) | ||
84 | mtcrf 0xff,r0 | ||
85 | |||
86 | blr /* return r3 = status */ | ||
87 | |||
88 | /* Note: takes only 6 input parameters, 1 output parameters at maximum */ | ||
89 | _GLOBAL(beat_hcall1) | ||
90 | HMT_MEDIUM | ||
91 | |||
92 | mfcr r0 | ||
93 | stw r0,8(r1) | ||
94 | |||
95 | HCALL_INST_PRECALL | ||
96 | |||
97 | std r4,STK_PARM(r4)(r1) /* save ret buffer */ | ||
98 | |||
99 | mr r11,r3 | ||
100 | mr r3,r5 | ||
101 | mr r4,r6 | ||
102 | mr r5,r7 | ||
103 | mr r6,r8 | ||
104 | mr r7,r9 | ||
105 | mr r8,r10 | ||
106 | |||
107 | HVSC /* invoke the hypervisor */ | ||
108 | |||
109 | HCALL_INST_POSTCALL | ||
110 | |||
111 | ld r12,STK_PARM(r4)(r1) | ||
112 | std r4, 0(r12) | ||
113 | |||
114 | lwz r0,8(r1) | ||
115 | mtcrf 0xff,r0 | ||
116 | |||
117 | blr /* return r3 = status */ | ||
118 | |||
119 | /* Note: takes only 6 input parameters, 2 output parameters at maximum */ | ||
120 | _GLOBAL(beat_hcall2) | ||
121 | HMT_MEDIUM | ||
122 | |||
123 | mfcr r0 | ||
124 | stw r0,8(r1) | ||
125 | |||
126 | HCALL_INST_PRECALL | ||
127 | |||
128 | std r4,STK_PARM(r4)(r1) /* save ret buffer */ | ||
129 | |||
130 | mr r11,r3 | ||
131 | mr r3,r5 | ||
132 | mr r4,r6 | ||
133 | mr r5,r7 | ||
134 | mr r6,r8 | ||
135 | mr r7,r9 | ||
136 | mr r8,r10 | ||
137 | |||
138 | HVSC /* invoke the hypervisor */ | ||
139 | |||
140 | HCALL_INST_POSTCALL | ||
141 | |||
142 | ld r12,STK_PARM(r4)(r1) | ||
143 | std r4, 0(r12) | ||
144 | std r5, 8(r12) | ||
145 | |||
146 | lwz r0,8(r1) | ||
147 | mtcrf 0xff,r0 | ||
148 | |||
149 | blr /* return r3 = status */ | ||
150 | |||
151 | /* Note: takes only 6 input parameters, 3 output parameters at maximum */ | ||
152 | _GLOBAL(beat_hcall3) | ||
153 | HMT_MEDIUM | ||
154 | |||
155 | mfcr r0 | ||
156 | stw r0,8(r1) | ||
157 | |||
158 | HCALL_INST_PRECALL | ||
159 | |||
160 | std r4,STK_PARM(r4)(r1) /* save ret buffer */ | ||
161 | |||
162 | mr r11,r3 | ||
163 | mr r3,r5 | ||
164 | mr r4,r6 | ||
165 | mr r5,r7 | ||
166 | mr r6,r8 | ||
167 | mr r7,r9 | ||
168 | mr r8,r10 | ||
169 | |||
170 | HVSC /* invoke the hypervisor */ | ||
171 | |||
172 | HCALL_INST_POSTCALL | ||
173 | |||
174 | ld r12,STK_PARM(r4)(r1) | ||
175 | std r4, 0(r12) | ||
176 | std r5, 8(r12) | ||
177 | std r6, 16(r12) | ||
178 | |||
179 | lwz r0,8(r1) | ||
180 | mtcrf 0xff,r0 | ||
181 | |||
182 | blr /* return r3 = status */ | ||
183 | |||
184 | /* Note: takes only 6 input parameters, 4 output parameters at maximum */ | ||
185 | _GLOBAL(beat_hcall4) | ||
186 | HMT_MEDIUM | ||
187 | |||
188 | mfcr r0 | ||
189 | stw r0,8(r1) | ||
190 | |||
191 | HCALL_INST_PRECALL | ||
192 | |||
193 | std r4,STK_PARM(r4)(r1) /* save ret buffer */ | ||
194 | |||
195 | mr r11,r3 | ||
196 | mr r3,r5 | ||
197 | mr r4,r6 | ||
198 | mr r5,r7 | ||
199 | mr r6,r8 | ||
200 | mr r7,r9 | ||
201 | mr r8,r10 | ||
202 | |||
203 | HVSC /* invoke the hypervisor */ | ||
204 | |||
205 | HCALL_INST_POSTCALL | ||
206 | |||
207 | ld r12,STK_PARM(r4)(r1) | ||
208 | std r4, 0(r12) | ||
209 | std r5, 8(r12) | ||
210 | std r6, 16(r12) | ||
211 | std r7, 24(r12) | ||
212 | |||
213 | lwz r0,8(r1) | ||
214 | mtcrf 0xff,r0 | ||
215 | |||
216 | blr /* return r3 = status */ | ||
217 | |||
218 | /* Note: takes only 6 input parameters, 5 output parameters at maximum */ | ||
219 | _GLOBAL(beat_hcall5) | ||
220 | HMT_MEDIUM | ||
221 | |||
222 | mfcr r0 | ||
223 | stw r0,8(r1) | ||
224 | |||
225 | HCALL_INST_PRECALL | ||
226 | |||
227 | std r4,STK_PARM(r4)(r1) /* save ret buffer */ | ||
228 | |||
229 | mr r11,r3 | ||
230 | mr r3,r5 | ||
231 | mr r4,r6 | ||
232 | mr r5,r7 | ||
233 | mr r6,r8 | ||
234 | mr r7,r9 | ||
235 | mr r8,r10 | ||
236 | |||
237 | HVSC /* invoke the hypervisor */ | ||
238 | |||
239 | HCALL_INST_POSTCALL | ||
240 | |||
241 | ld r12,STK_PARM(r4)(r1) | ||
242 | std r4, 0(r12) | ||
243 | std r5, 8(r12) | ||
244 | std r6, 16(r12) | ||
245 | std r7, 24(r12) | ||
246 | std r8, 32(r12) | ||
247 | |||
248 | lwz r0,8(r1) | ||
249 | mtcrf 0xff,r0 | ||
250 | |||
251 | blr /* return r3 = status */ | ||
252 | |||
253 | /* Note: takes only 6 input parameters, 6 output parameters at maximum */ | ||
254 | _GLOBAL(beat_hcall6) | ||
255 | HMT_MEDIUM | ||
256 | |||
257 | mfcr r0 | ||
258 | stw r0,8(r1) | ||
259 | |||
260 | HCALL_INST_PRECALL | ||
261 | |||
262 | std r4,STK_PARM(r4)(r1) /* save ret buffer */ | ||
263 | |||
264 | mr r11,r3 | ||
265 | mr r3,r5 | ||
266 | mr r4,r6 | ||
267 | mr r5,r7 | ||
268 | mr r6,r8 | ||
269 | mr r7,r9 | ||
270 | mr r8,r10 | ||
271 | |||
272 | HVSC /* invoke the hypervisor */ | ||
273 | |||
274 | HCALL_INST_POSTCALL | ||
275 | |||
276 | ld r12,STK_PARM(r4)(r1) | ||
277 | std r4, 0(r12) | ||
278 | std r5, 8(r12) | ||
279 | std r6, 16(r12) | ||
280 | std r7, 24(r12) | ||
281 | std r8, 32(r12) | ||
282 | std r9, 40(r12) | ||
283 | |||
284 | lwz r0,8(r1) | ||
285 | mtcrf 0xff,r0 | ||
286 | |||
287 | blr /* return r3 = status */ | ||