aboutsummaryrefslogtreecommitdiffstats
path: root/arch/parisc/kernel/real2.S
diff options
context:
space:
mode:
Diffstat (limited to 'arch/parisc/kernel/real2.S')
-rw-r--r--arch/parisc/kernel/real2.S16
1 files changed, 9 insertions, 7 deletions
diff --git a/arch/parisc/kernel/real2.S b/arch/parisc/kernel/real2.S
index 789061f6ceb4..7a92695d95a6 100644
--- a/arch/parisc/kernel/real2.S
+++ b/arch/parisc/kernel/real2.S
@@ -11,6 +11,8 @@
11#include <asm/psw.h> 11#include <asm/psw.h>
12#include <asm/assembly.h> 12#include <asm/assembly.h>
13 13
14#include <linux/linkage.h>
15
14 .section .bss 16 .section .bss
15 .export real_stack 17 .export real_stack
16 .export real32_stack 18 .export real32_stack
@@ -39,8 +41,6 @@ save_cr_end:
39 41
40 .text 42 .text
41 43
42 .export real32_call_asm
43
44 /* unsigned long real32_call_asm(unsigned int *sp, 44 /* unsigned long real32_call_asm(unsigned int *sp,
45 * unsigned int *arg0p, 45 * unsigned int *arg0p,
46 * unsigned int iodc_fn) 46 * unsigned int iodc_fn)
@@ -49,7 +49,7 @@ save_cr_end:
49 * iodc_fn is the IODC function to call 49 * iodc_fn is the IODC function to call
50 */ 50 */
51 51
52real32_call_asm: 52ENTRY(real32_call_asm)
53 STREG %rp, -RP_OFFSET(%sp) /* save RP */ 53 STREG %rp, -RP_OFFSET(%sp) /* save RP */
54#ifdef CONFIG_64BIT 54#ifdef CONFIG_64BIT
55 callee_save 55 callee_save
@@ -107,6 +107,7 @@ ric_ret:
107 LDREG -RP_OFFSET(%sp), %rp /* restore RP */ 107 LDREG -RP_OFFSET(%sp), %rp /* restore RP */
108 bv 0(%rp) 108 bv 0(%rp)
109 nop 109 nop
110ENDPROC(real32_call_asm)
110 111
111 112
112# define PUSH_CR(r, where) mfctl r, %r1 ! STREG,ma %r1, REG_SZ(where) 113# define PUSH_CR(r, where) mfctl r, %r1 ! STREG,ma %r1, REG_SZ(where)
@@ -218,7 +219,6 @@ rfi_r2v_1:
218/************************ 64-bit real-mode calls ***********************/ 219/************************ 64-bit real-mode calls ***********************/
219/* This is only usable in wide kernels right now and will probably stay so */ 220/* This is only usable in wide kernels right now and will probably stay so */
220 .text 221 .text
221 .export real64_call_asm
222 /* unsigned long real64_call_asm(unsigned long *sp, 222 /* unsigned long real64_call_asm(unsigned long *sp,
223 * unsigned long *arg0p, 223 * unsigned long *arg0p,
224 * unsigned long fn) 224 * unsigned long fn)
@@ -226,7 +226,7 @@ rfi_r2v_1:
226 * arg0p points to where saved arg values may be found 226 * arg0p points to where saved arg values may be found
227 * iodc_fn is the IODC function to call 227 * iodc_fn is the IODC function to call
228 */ 228 */
229real64_call_asm: 229ENTRY(real64_call_asm)
230 std %rp, -0x10(%sp) /* save RP */ 230 std %rp, -0x10(%sp) /* save RP */
231 std %sp, -8(%arg0) /* save SP on real-mode stack */ 231 std %sp, -8(%arg0) /* save SP on real-mode stack */
232 copy %arg0, %sp /* adopt the real-mode SP */ 232 copy %arg0, %sp /* adopt the real-mode SP */
@@ -272,19 +272,21 @@ r64_ret:
272 ldd -0x10(%sp), %rp /* restore RP */ 272 ldd -0x10(%sp), %rp /* restore RP */
273 bv 0(%rp) 273 bv 0(%rp)
274 nop 274 nop
275ENDPROC(real64_call_asm)
275 276
276#endif 277#endif
277 278
278 .export __canonicalize_funcptr_for_compare
279 .text 279 .text
280 /* http://lists.parisc-linux.org/hypermail/parisc-linux/10916.html 280 /* http://lists.parisc-linux.org/hypermail/parisc-linux/10916.html
281 ** GCC 3.3 and later has a new function in libgcc.a for 281 ** GCC 3.3 and later has a new function in libgcc.a for
282 ** comparing function pointers. 282 ** comparing function pointers.
283 */ 283 */
284__canonicalize_funcptr_for_compare: 284ENTRY(__canonicalize_funcptr_for_compare)
285#ifdef CONFIG_64BIT 285#ifdef CONFIG_64BIT
286 bve (%r2) 286 bve (%r2)
287#else 287#else
288 bv %r0(%r2) 288 bv %r0(%r2)
289#endif 289#endif
290 copy %r26,%r28 290 copy %r26,%r28
291ENDPROC(__canonicalize_funcptr_for_compare)
292