diff options
author | Heiko J Schick <schihei@de.ibm.com> | 2006-03-30 15:47:14 -0500 |
---|---|---|
committer | Paul Mackerras <paulus@samba.org> | 2006-04-01 06:37:00 -0500 |
commit | b13a96cfb055fd4b9c61463f87534a6f406b174b (patch) | |
tree | 4ab32133b1a786ef9bd9448ffadff0f2fc9c36bf /arch/powerpc | |
parent | 706c8c93ba4865a19e981b9770151a7a63c15794 (diff) |
[PATCH] powerpc: Extends HCALL interface for InfiniBand usage
This extends the HCALL interface for InfiniBand usage. I've
made the patch against the linux-2.6 git tree and Segher's patch:
[PATCH] Change H_StudlyCaps to H_SHOUTING_CAPS
We moved this into the common powerpc code based on comments we
got after posting the first eHCA InfiniBand device driver patch.
Signed-off-by: Heiko j Schick <schickhj@de.ibm.com>
Signed-off-by: Paul Mackerras <paulus@samba.org>
Diffstat (limited to 'arch/powerpc')
-rw-r--r-- | arch/powerpc/platforms/pseries/hvCall.S | 100 | ||||
-rw-r--r-- | arch/powerpc/platforms/pseries/lpar.c | 3 |
2 files changed, 102 insertions, 1 deletions
diff --git a/arch/powerpc/platforms/pseries/hvCall.S b/arch/powerpc/platforms/pseries/hvCall.S index db7c19fe9297..c9ff547f9d25 100644 --- a/arch/powerpc/platforms/pseries/hvCall.S +++ b/arch/powerpc/platforms/pseries/hvCall.S | |||
@@ -127,3 +127,103 @@ _GLOBAL(plpar_hcall_4out) | |||
127 | 127 | ||
128 | mtcrf 0xff,r0 | 128 | mtcrf 0xff,r0 |
129 | blr /* return r3 = status */ | 129 | blr /* return r3 = status */ |
130 | |||
131 | /* plpar_hcall_7arg_7ret(unsigned long opcode, R3 | ||
132 | unsigned long arg1, R4 | ||
133 | unsigned long arg2, R5 | ||
134 | unsigned long arg3, R6 | ||
135 | unsigned long arg4, R7 | ||
136 | unsigned long arg5, R8 | ||
137 | unsigned long arg6, R9 | ||
138 | unsigned long arg7, R10 | ||
139 | unsigned long *out1, 112(R1) | ||
140 | unsigned long *out2, 110(R1) | ||
141 | unsigned long *out3, 108(R1) | ||
142 | unsigned long *out4, 106(R1) | ||
143 | unsigned long *out5, 104(R1) | ||
144 | unsigned long *out6, 102(R1) | ||
145 | unsigned long *out7); 100(R1) | ||
146 | */ | ||
147 | _GLOBAL(plpar_hcall_7arg_7ret) | ||
148 | HMT_MEDIUM | ||
149 | |||
150 | mfcr r0 | ||
151 | stw r0,8(r1) | ||
152 | |||
153 | HVSC /* invoke the hypervisor */ | ||
154 | |||
155 | lwz r0,8(r1) | ||
156 | |||
157 | ld r11,STK_PARM(r11)(r1) /* Fetch r4 ret arg */ | ||
158 | std r4,0(r11) | ||
159 | ld r11,STK_PARM(r12)(r1) /* Fetch r5 ret arg */ | ||
160 | std r5,0(r11) | ||
161 | ld r11,STK_PARM(r13)(r1) /* Fetch r6 ret arg */ | ||
162 | std r6,0(r11) | ||
163 | ld r11,STK_PARM(r14)(r1) /* Fetch r7 ret arg */ | ||
164 | std r7,0(r11) | ||
165 | ld r11,STK_PARM(r15)(r1) /* Fetch r8 ret arg */ | ||
166 | std r8,0(r11) | ||
167 | ld r11,STK_PARM(r16)(r1) /* Fetch r9 ret arg */ | ||
168 | std r9,0(r11) | ||
169 | ld r11,STK_PARM(r17)(r1) /* Fetch r10 ret arg */ | ||
170 | std r10,0(r11) | ||
171 | |||
172 | mtcrf 0xff,r0 | ||
173 | |||
174 | blr /* return r3 = status */ | ||
175 | |||
176 | /* plpar_hcall_9arg_9ret(unsigned long opcode, R3 | ||
177 | unsigned long arg1, R4 | ||
178 | unsigned long arg2, R5 | ||
179 | unsigned long arg3, R6 | ||
180 | unsigned long arg4, R7 | ||
181 | unsigned long arg5, R8 | ||
182 | unsigned long arg6, R9 | ||
183 | unsigned long arg7, R10 | ||
184 | unsigned long arg8, 112(R1) | ||
185 | unsigned long arg9, 110(R1) | ||
186 | unsigned long *out1, 108(R1) | ||
187 | unsigned long *out2, 106(R1) | ||
188 | unsigned long *out3, 104(R1) | ||
189 | unsigned long *out4, 102(R1) | ||
190 | unsigned long *out5, 100(R1) | ||
191 | unsigned long *out6, 98(R1) | ||
192 | unsigned long *out7); 96(R1) | ||
193 | unsigned long *out8, 94(R1) | ||
194 | unsigned long *out9, 92(R1) | ||
195 | */ | ||
196 | _GLOBAL(plpar_hcall_9arg_9ret) | ||
197 | HMT_MEDIUM | ||
198 | |||
199 | mfcr r0 | ||
200 | stw r0,8(r1) | ||
201 | |||
202 | ld r11,STK_PARM(r11)(r1) /* put arg8 in R11 */ | ||
203 | ld r12,STK_PARM(r12)(r1) /* put arg9 in R12 */ | ||
204 | |||
205 | HVSC /* invoke the hypervisor */ | ||
206 | |||
207 | ld r0,STK_PARM(r13)(r1) /* Fetch r4 ret arg */ | ||
208 | stdx r4,r0,r0 | ||
209 | ld r0,STK_PARM(r14)(r1) /* Fetch r5 ret arg */ | ||
210 | stdx r5,r0,r0 | ||
211 | ld r0,STK_PARM(r15)(r1) /* Fetch r6 ret arg */ | ||
212 | stdx r6,r0,r0 | ||
213 | ld r0,STK_PARM(r16)(r1) /* Fetch r7 ret arg */ | ||
214 | stdx r7,r0,r0 | ||
215 | ld r0,STK_PARM(r17)(r1) /* Fetch r8 ret arg */ | ||
216 | stdx r8,r0,r0 | ||
217 | ld r0,STK_PARM(r18)(r1) /* Fetch r9 ret arg */ | ||
218 | stdx r9,r0,r0 | ||
219 | ld r0,STK_PARM(r19)(r1) /* Fetch r10 ret arg */ | ||
220 | stdx r10,r0,r0 | ||
221 | ld r0,STK_PARM(r20)(r1) /* Fetch r11 ret arg */ | ||
222 | stdx r11,r0,r0 | ||
223 | ld r0,STK_PARM(r21)(r1) /* Fetch r12 ret arg */ | ||
224 | stdx r12,r0,r0 | ||
225 | |||
226 | lwz r0,8(r1) | ||
227 | mtcrf 0xff,r0 | ||
228 | |||
229 | blr /* return r3 = status */ | ||
diff --git a/arch/powerpc/platforms/pseries/lpar.c b/arch/powerpc/platforms/pseries/lpar.c index c72c0918b44b..634b7d06d3cc 100644 --- a/arch/powerpc/platforms/pseries/lpar.c +++ b/arch/powerpc/platforms/pseries/lpar.c | |||
@@ -54,7 +54,8 @@ EXPORT_SYMBOL(plpar_hcall); | |||
54 | EXPORT_SYMBOL(plpar_hcall_4out); | 54 | EXPORT_SYMBOL(plpar_hcall_4out); |
55 | EXPORT_SYMBOL(plpar_hcall_norets); | 55 | EXPORT_SYMBOL(plpar_hcall_norets); |
56 | EXPORT_SYMBOL(plpar_hcall_8arg_2ret); | 56 | EXPORT_SYMBOL(plpar_hcall_8arg_2ret); |
57 | 57 | EXPORT_SYMBOL(plpar_hcall_7arg_7ret); | |
58 | EXPORT_SYMBOL(plpar_hcall_9arg_9ret); | ||
58 | extern void pSeries_find_serial_port(void); | 59 | extern void pSeries_find_serial_port(void); |
59 | 60 | ||
60 | 61 | ||