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