Add qemu 2.4.0
[kvmfornfv.git] / qemu / roms / openbios / arch / sparc32 / call-romvec.S
1 #define __ASSEMBLY
2 #include "psr.h"
3 #include "asm/asi.h"
4
5         .text
6         .align  4
7
8 #define STACKFRAME_SZ     0x60
9
10 /* These are just handy. */
11 #define _SV     save    %sp, -STACKFRAME_SZ, %sp
12 #define _RS     restore
13
14 #define FLUSH_ALL_KERNEL_WINDOWS \
15         _SV; _SV; _SV; _SV; _SV; _SV; _SV; \
16         _RS; _RS; _RS; _RS; _RS; _RS; _RS;
17
18 /* Macro for romvec handlers */
19 #define ROMVEC_HANDLER(type) \
20         \
21         .globl type##_handler; \
22         \
23 type##_handler: \
24         \
25         FLUSH_ALL_KERNEL_WINDOWS; \
26         \
27         save %sp, -STACKFRAME_SZ - 0x20, %sp; \
28         \
29         st %g1, [ %sp + STACKFRAME_SZ + 0x0]; \
30         st %g2, [ %sp + STACKFRAME_SZ + 0x4]; \
31         st %g3, [ %sp + STACKFRAME_SZ + 0x8]; \
32         st %g4, [ %sp + STACKFRAME_SZ + 0xc]; \
33         st %g5, [ %sp + STACKFRAME_SZ + 0x10]; \
34         st %g6, [ %sp + STACKFRAME_SZ + 0x14]; \
35         st %g7, [ %sp + STACKFRAME_SZ + 0x18]; \
36         \
37         mov %i0, %o0; \
38         mov %i1, %o1; \
39         mov %i2, %o2; \
40         mov %i3, %o3; \
41         mov %i4, %o4; \
42         mov %i5, %o5; \
43         \
44         call    type; \
45          nop; \
46         \
47         mov %o0, %i0; \
48         \
49         ld [ %sp + STACKFRAME_SZ + 0x0], %g1; \
50         ld [ %sp + STACKFRAME_SZ + 0x4], %g2; \
51         ld [ %sp + STACKFRAME_SZ + 0x8], %g3; \
52         ld [ %sp + STACKFRAME_SZ + 0xc], %g4; \
53         ld [ %sp + STACKFRAME_SZ + 0x10], %g5; \
54         ld [ %sp + STACKFRAME_SZ + 0x14], %g6; \
55         ld [ %sp + STACKFRAME_SZ + 0x18], %g7; \
56         \
57         ret; \
58          restore; \
59
60
61 /* Generate handlers which are proxy functions to the 
62    real C functions that correctly save the globals
63    and stack */
64 ROMVEC_HANDLER(obp_devopen)
65 ROMVEC_HANDLER(obp_devclose)
66 ROMVEC_HANDLER(obp_rdblkdev)
67 ROMVEC_HANDLER(obp_nbgetchar)
68 ROMVEC_HANDLER(obp_nbputchar)
69 ROMVEC_HANDLER(obp_putstr)
70 ROMVEC_HANDLER(obp_printf)
71 ROMVEC_HANDLER(obp_reboot)
72 ROMVEC_HANDLER(obp_abort)
73 ROMVEC_HANDLER(obp_halt)
74 ROMVEC_HANDLER(obp_fortheval_v2)
75 ROMVEC_HANDLER(obp_inst2pkg)
76 ROMVEC_HANDLER(obp_dumb_memalloc)
77 ROMVEC_HANDLER(obp_dumb_memfree)
78 ROMVEC_HANDLER(obp_dumb_mmap)
79 ROMVEC_HANDLER(obp_dumb_munmap)
80 ROMVEC_HANDLER(obp_devread)
81 ROMVEC_HANDLER(obp_devwrite)
82 ROMVEC_HANDLER(obp_devseek)
83 ROMVEC_HANDLER(obp_cpustart)
84 ROMVEC_HANDLER(obp_cpustop)
85 ROMVEC_HANDLER(obp_cpuidle)
86 ROMVEC_HANDLER(obp_cpuresume)
87 ROMVEC_HANDLER(obp_nextnode)
88 ROMVEC_HANDLER(obp_child)
89 ROMVEC_HANDLER(obp_proplen)
90 ROMVEC_HANDLER(obp_getprop)
91 ROMVEC_HANDLER(obp_setprop)
92 ROMVEC_HANDLER(obp_nextprop)
93 ROMVEC_HANDLER(obp_memalloc)
94