patch-2.4.21 linux-2.4.21/arch/sparc64/kernel/entry.S
Next file: linux-2.4.21/arch/sparc64/kernel/etrap.S
Previous file: linux-2.4.21/arch/sparc64/kernel/binfmt_elf32.c
Back to the patch index
Back to the overall index
- Lines: 491
- Date:
2003-06-13 07:51:32.000000000 -0700
- Orig file:
linux-2.4.20/arch/sparc64/kernel/entry.S
- Orig date:
2002-11-28 15:53:12.000000000 -0800
diff -urN linux-2.4.20/arch/sparc64/kernel/entry.S linux-2.4.21/arch/sparc64/kernel/entry.S
@@ -20,6 +20,7 @@
#include <asm/processor.h>
#include <asm/visasm.h>
#include <asm/estate.h>
+#include <asm/auxio.h>
/* #define SYSCALL_TRACING 1 */
@@ -272,7 +273,7 @@
.align 32
fp_other_bounce:
call do_fpother
- add %sp, STACK_BIAS + REGWIN_SZ, %o0
+ add %sp, PTREGS_OFF, %o0
ba,pt %xcc, rtrap
clr %l6
@@ -499,7 +500,7 @@
ba,pt %xcc, etrap
109: or %g7, %lo(109b), %g7
call catch_disabled_ivec
- add %sp, STACK_BIAS + REGWIN_SZ, %o0
+ add %sp, PTREGS_OFF, %o0
ba,pt %xcc, rtrap
clr %l6
@@ -606,7 +607,7 @@
done
utrap_ill:
call bad_trap
- add %sp, STACK_BIAS + REGWIN_SZ, %o0
+ add %sp, PTREGS_OFF, %o0
ba,pt %xcc, rtrap
clr %l6
@@ -662,9 +663,11 @@
sethi %hi(auxio_register), %g1
ldx [%g1 + %lo(auxio_register)], %g7
lduba [%g7] ASI_PHYS_BYPASS_EC_E, %g5
- or %g5, 0xc2, %g5
+ or %g5, AUXIO_AUX1_FTCNT, %g5
+/* andn %g5, AUXIO_AUX1_MASK, %g5 */
stba %g5, [%g7] ASI_PHYS_BYPASS_EC_E
- andn %g5, 0x02, %g5
+ andn %g5, AUXIO_AUX1_FTCNT, %g5
+/* andn %g5, AUXIO_AUX1_MASK, %g5 */
nop; nop; nop; nop; nop; nop;
nop; nop; nop; nop; nop; nop;
@@ -711,7 +714,7 @@
mov 11, %o0
mov 0, %o1
call sparc_floppy_irq
- add %sp, STACK_BIAS + REGWIN_SZ, %o2
+ add %sp, PTREGS_OFF, %o2
b,pt %xcc, rtrap
clr %l6
@@ -757,7 +760,7 @@
mov %l4, %o1
mov %l5, %o2
call data_access_exception
- add %sp, STACK_BIAS + REGWIN_SZ, %o0
+ add %sp, PTREGS_OFF, %o0
ba,pt %xcc, rtrap
clr %l6
@@ -778,7 +781,7 @@
mov %l4, %o1
mov %l5, %o2
call instruction_access_exception_tl1
- add %sp, STACK_BIAS + REGWIN_SZ, %o0
+ add %sp, PTREGS_OFF, %o0
ba,pt %xcc, rtrap
clr %l6
@@ -797,7 +800,7 @@
mov %l4, %o1
mov %l5, %o2
call instruction_access_exception
- add %sp, STACK_BIAS + REGWIN_SZ, %o0
+ add %sp, PTREGS_OFF, %o0
ba,pt %xcc, rtrap
clr %l6
@@ -889,7 +892,7 @@
mov %l5, %o1
call cee_log
- add %sp, STACK_BIAS + REGWIN_SZ, %o2
+ add %sp, PTREGS_OFF, %o2
ba,a,pt %xcc, rtrap_clr_l6
/* Capture I/D/E-cache state into per-cpu error scoreboard.
@@ -1104,7 +1107,7 @@
rd %pc, %g7
mov 0x0, %o0
call cheetah_plus_parity_error
- add %sp, STACK_BIAS + REGWIN_SZ, %o1
+ add %sp, PTREGS_OFF, %o1
ba,pt %xcc, rtrap
clr %l6
@@ -1134,7 +1137,7 @@
rd %pc, %g7
mov 0x1, %o0
call cheetah_plus_parity_error
- add %sp, STACK_BIAS + REGWIN_SZ, %o1
+ add %sp, PTREGS_OFF, %o1
ba,pt %xcc, rtrap
clr %l6
@@ -1196,7 +1199,7 @@
1: or %g7, %lo(1b), %g7
mov 0x2, %o0
call cheetah_plus_parity_error
- add %sp, STACK_BIAS + REGWIN_SZ, %o1
+ add %sp, PTREGS_OFF, %o1
ba,pt %xcc, rtrap
clr %l6
@@ -1234,7 +1237,7 @@
1: or %g7, %lo(1b), %g7
mov 0x3, %o0
call cheetah_plus_parity_error
- add %sp, STACK_BIAS + REGWIN_SZ, %o1
+ add %sp, PTREGS_OFF, %o1
ba,pt %xcc, rtrap
clr %l6
@@ -1290,7 +1293,7 @@
mov %l4, %o1
mov %l5, %o2
call cheetah_fecc_handler
- add %sp, STACK_BIAS + REGWIN_SZ, %o0
+ add %sp, PTREGS_OFF, %o0
ba,a,pt %xcc, rtrap_clr_l6
/* Our caller has disabled I-cache and performed membar Sync. */
@@ -1316,7 +1319,7 @@
mov %l4, %o1
mov %l5, %o2
call cheetah_cee_handler
- add %sp, STACK_BIAS + REGWIN_SZ, %o0
+ add %sp, PTREGS_OFF, %o0
ba,a,pt %xcc, rtrap_clr_l6
/* Our caller has disabled I-cache+D-cache and performed membar Sync. */
@@ -1342,7 +1345,7 @@
mov %l4, %o1
mov %l5, %o2
call cheetah_deferred_handler
- add %sp, STACK_BIAS + REGWIN_SZ, %o0
+ add %sp, PTREGS_OFF, %o0
ba,a,pt %xcc, rtrap_clr_l6
.globl __do_privact
@@ -1354,7 +1357,7 @@
ba,pt %xcc, etrap
109: or %g7, %lo(109b), %g7
call do_privact
- add %sp, STACK_BIAS + REGWIN_SZ, %o0
+ add %sp, PTREGS_OFF, %o0
ba,pt %xcc, rtrap
clr %l6
@@ -1381,7 +1384,7 @@
mov %l4, %o1
mov %l5, %o2
call mem_address_unaligned
- add %sp, STACK_BIAS + REGWIN_SZ, %o0
+ add %sp, PTREGS_OFF, %o0
ba,pt %xcc, rtrap
clr %l6
@@ -1399,7 +1402,7 @@
mov %l4, %o1
mov %l5, %o2
call handle_lddfmna
- add %sp, STACK_BIAS + REGWIN_SZ, %o0
+ add %sp, PTREGS_OFF, %o0
ba,pt %xcc, rtrap
clr %l6
@@ -1417,14 +1420,14 @@
mov %l4, %o1
mov %l5, %o2
call handle_stdfmna
- add %sp, STACK_BIAS + REGWIN_SZ, %o0
+ add %sp, PTREGS_OFF, %o0
ba,pt %xcc, rtrap
clr %l6
.globl breakpoint_trap
breakpoint_trap:
call sparc_breakpoint
- add %sp, STACK_BIAS + REGWIN_SZ, %o0
+ add %sp, PTREGS_OFF, %o0
ba,pt %xcc, rtrap
nop
@@ -1460,9 +1463,9 @@
call sys_getppid
nop
call sys_getpid
- stx %o0, [%sp + STACK_BIAS + REGWIN_SZ + PT_V9_I1]
+ stx %o0, [%sp + PTREGS_OFF + PT_V9_I1]
b,pt %xcc, ret_sys_call
- stx %o0, [%sp + STACK_BIAS + REGWIN_SZ + PT_V9_I0]
+ stx %o0, [%sp + PTREGS_OFF + PT_V9_I0]
/* SunOS getuid() returns uid in %o0 and euid in %o1 */
.globl sunos_getuid
@@ -1470,9 +1473,9 @@
call sys32_geteuid16
nop
call sys32_getuid16
- stx %o0, [%sp + STACK_BIAS + REGWIN_SZ + PT_V9_I1]
+ stx %o0, [%sp + PTREGS_OFF + PT_V9_I1]
b,pt %xcc, ret_sys_call
- stx %o0, [%sp + STACK_BIAS + REGWIN_SZ + PT_V9_I0]
+ stx %o0, [%sp + PTREGS_OFF + PT_V9_I0]
/* SunOS getgid() returns gid in %o0 and egid in %o1 */
.globl sunos_getgid
@@ -1480,9 +1483,9 @@
call sys32_getegid16
nop
call sys32_getgid16
- stx %o0, [%sp + STACK_BIAS + REGWIN_SZ + PT_V9_I1]
+ stx %o0, [%sp + PTREGS_OFF + PT_V9_I1]
b,pt %xcc, ret_sys_call
- stx %o0, [%sp + STACK_BIAS + REGWIN_SZ + PT_V9_I0]
+ stx %o0, [%sp + PTREGS_OFF + PT_V9_I0]
#endif
/* SunOS's execv() call only specifies the argv argument, the
@@ -1494,14 +1497,14 @@
ba,pt %xcc, execve_merge
or %g1, %lo(sparc_execve), %g1
sunos_execv:
- stx %g0, [%sp + STACK_BIAS + REGWIN_SZ + PT_V9_I2]
+ stx %g0, [%sp + PTREGS_OFF + PT_V9_I2]
sys32_execve:
sethi %hi(sparc32_execve), %g1
or %g1, %lo(sparc32_execve), %g1
execve_merge:
flushw
jmpl %g1, %g0
- add %sp, STACK_BIAS + REGWIN_SZ, %o0
+ add %sp, PTREGS_OFF, %o0
.globl sys_pipe, sys_sigpause, sys_nis_syscall
.globl sys_sigsuspend, sys_rt_sigsuspend, sys32_rt_sigsuspend
@@ -1512,12 +1515,12 @@
.globl sys32_sigstack
.align 32
sys_pipe: ba,pt %xcc, sparc_pipe
- add %sp, STACK_BIAS + REGWIN_SZ, %o0
+ add %sp, PTREGS_OFF, %o0
sys_nis_syscall:ba,pt %xcc, c_sys_nis_syscall
- add %sp, STACK_BIAS + REGWIN_SZ, %o0
+ add %sp, PTREGS_OFF, %o0
sys_memory_ordering:
ba,pt %xcc, sparc_memory_ordering
- add %sp, STACK_BIAS + REGWIN_SZ, %o1
+ add %sp, PTREGS_OFF, %o1
sys_sigaltstack:ba,pt %xcc, do_sigaltstack
add %i6, STACK_BIAS, %o2
sys32_sigstack: ba,pt %xcc, do_sys32_sigstack
@@ -1527,41 +1530,41 @@
mov %i6, %o2
.align 32
-sys_sigsuspend: add %sp, STACK_BIAS + REGWIN_SZ, %o0
+sys_sigsuspend: add %sp, PTREGS_OFF, %o0
call do_sigsuspend
add %o7, 1f-.-4, %o7
nop
sys_rt_sigsuspend: /* NOTE: %o0,%o1 have a correct value already */
- add %sp, STACK_BIAS + REGWIN_SZ, %o2
+ add %sp, PTREGS_OFF, %o2
call do_rt_sigsuspend
add %o7, 1f-.-4, %o7
nop
sys32_rt_sigsuspend: /* NOTE: %o0,%o1 have a correct value already */
srl %o0, 0, %o0
- add %sp, STACK_BIAS + REGWIN_SZ, %o2
+ add %sp, PTREGS_OFF, %o2
call do_rt_sigsuspend32
add %o7, 1f-.-4, %o7
/* NOTE: %o0 has a correct value already */
-sys_sigpause: add %sp, STACK_BIAS + REGWIN_SZ, %o1
+sys_sigpause: add %sp, PTREGS_OFF, %o1
call do_sigpause
add %o7, 1f-.-4, %o7
nop
sys32_sigreturn:
- add %sp, STACK_BIAS + REGWIN_SZ, %o0
+ add %sp, PTREGS_OFF, %o0
call do_sigreturn32
add %o7, 1f-.-4, %o7
nop
sys_rt_sigreturn:
- add %sp, STACK_BIAS + REGWIN_SZ, %o0
+ add %sp, PTREGS_OFF, %o0
call do_rt_sigreturn
add %o7, 1f-.-4, %o7
nop
sys32_rt_sigreturn:
- add %sp, STACK_BIAS + REGWIN_SZ, %o0
+ add %sp, PTREGS_OFF, %o0
call do_rt_sigreturn32
add %o7, 1f-.-4, %o7
nop
-sys_ptrace: add %sp, STACK_BIAS + REGWIN_SZ, %o0
+sys_ptrace: add %sp, PTREGS_OFF, %o0
call do_ptrace
add %o7, 1f-.-4, %o7
nop
@@ -1612,7 +1615,7 @@
movrz %o1, %fp, %o1
mov 0, %o3
ba,pt %xcc, do_fork
- add %sp, STACK_BIAS + REGWIN_SZ, %o2
+ add %sp, PTREGS_OFF, %o2
ret_from_syscall:
/* Clear SPARC_FLAG_NEWCHILD, switch_to leaves thread.flags in
* %o7 for us. Check performance counter stuff too.
@@ -1638,7 +1641,7 @@
rd %pic, %g0
1: b,pt %xcc, ret_sys_call
- ldx [%sp + STACK_BIAS + REGWIN_SZ + PT_V9_I0], %o0
+ ldx [%sp + PTREGS_OFF + PT_V9_I0], %o0
sparc_exit: wrpr %g0, (PSTATE_RMO | PSTATE_PEF | PSTATE_PRIV), %pstate
rdpr %otherwin, %g1
rdpr %cansave, %g3
@@ -1686,7 +1689,7 @@
sll %g1, 2, %l4 ! IEU0 Group
#ifdef SYSCALL_TRACING
call syscall_trace_entry
- add %sp, STACK_BIAS + REGWIN_SZ, %o0
+ add %sp, PTREGS_OFF, %o0
srl %i0, 0, %o0
#endif
mov %i4, %o4 ! IEU1
@@ -1714,7 +1717,7 @@
sll %g1, 2, %l4 ! IEU0 Group
#ifdef SYSCALL_TRACING
call syscall_trace_entry
- add %sp, STACK_BIAS + REGWIN_SZ, %o0
+ add %sp, PTREGS_OFF, %o0
mov %i0, %o0
#endif
mov %i1, %o1 ! IEU1
@@ -1731,16 +1734,16 @@
mov %i5, %o5 ! IEU0
nop
-3: stx %o0, [%sp + STACK_BIAS + REGWIN_SZ + PT_V9_I0]
+3: stx %o0, [%sp + PTREGS_OFF + PT_V9_I0]
ret_sys_call:
#ifdef SYSCALL_TRACING
mov %o0, %o1
call syscall_trace_exit
- add %sp, STACK_BIAS + REGWIN_SZ, %o0
+ add %sp, PTREGS_OFF, %o0
mov %o1, %o0
#endif
- ldx [%sp + STACK_BIAS + REGWIN_SZ + PT_V9_TSTATE], %g3
- ldx [%sp + STACK_BIAS + REGWIN_SZ + PT_V9_TNPC], %l1 ! pc = npc
+ ldx [%sp + PTREGS_OFF + PT_V9_TSTATE], %g3
+ ldx [%sp + PTREGS_OFF + PT_V9_TNPC], %l1 ! pc = npc
sra %o0, 0, %o0
mov %ulo(TSTATE_XCARRY | TSTATE_ICARRY), %g2
cmp %o0, -ENOIOCTLCMD
@@ -1749,12 +1752,12 @@
andcc %l0, 0x02, %l6
andn %g3, %g2, %g3 /* System call success, clear Carry condition code. */
- stx %g3, [%sp + STACK_BIAS + REGWIN_SZ + PT_V9_TSTATE]
+ stx %g3, [%sp + PTREGS_OFF + PT_V9_TSTATE]
bne,pn %icc, linux_syscall_trace2
add %l1, 0x4, %l2 ! npc = npc+4
- stx %l1, [%sp + STACK_BIAS + REGWIN_SZ + PT_V9_TPC]
+ stx %l1, [%sp + PTREGS_OFF + PT_V9_TPC]
ba,pt %xcc, rtrap_clr_l6
- stx %l2, [%sp + STACK_BIAS + REGWIN_SZ + PT_V9_TNPC]
+ stx %l2, [%sp + PTREGS_OFF + PT_V9_TNPC]
1:
/* System call failure, set Carry condition code.
@@ -1762,21 +1765,21 @@
*/
sub %g0, %o0, %o0
or %g3, %g2, %g3
- stx %o0, [%sp + STACK_BIAS + REGWIN_SZ + PT_V9_I0]
+ stx %o0, [%sp + PTREGS_OFF + PT_V9_I0]
mov 1, %l6
- stx %g3, [%sp + STACK_BIAS + REGWIN_SZ + PT_V9_TSTATE]
+ stx %g3, [%sp + PTREGS_OFF + PT_V9_TSTATE]
bne,pn %icc, linux_syscall_trace2
add %l1, 0x4, %l2 !npc = npc+4
- stx %l1, [%sp + STACK_BIAS + REGWIN_SZ + PT_V9_TPC]
+ stx %l1, [%sp + PTREGS_OFF + PT_V9_TPC]
b,pt %xcc, rtrap
- stx %l2, [%sp + STACK_BIAS + REGWIN_SZ + PT_V9_TNPC]
+ stx %l2, [%sp + PTREGS_OFF + PT_V9_TNPC]
linux_syscall_trace2:
call syscall_trace
nop
- stx %l1, [%sp + STACK_BIAS + REGWIN_SZ + PT_V9_TPC]
+ stx %l1, [%sp + PTREGS_OFF + PT_V9_TPC]
ba,pt %xcc, rtrap
- stx %l2, [%sp + STACK_BIAS + REGWIN_SZ + PT_V9_TNPC]
+ stx %l2, [%sp + PTREGS_OFF + PT_V9_TNPC]
.align 32
.globl __flushw_user
@@ -1793,69 +1796,3 @@
restore %g0, %g0, %g0
2: retl
nop
-
-/* This need not obtain the xtime_lock as it is coded in
- * an implicitly SMP safe way already.
- */
- .align 64
- .globl do_gettimeofday
-do_gettimeofday: /* %o0 = timevalp */
- /* Load doubles must be used on xtime so that what we get
- * is guarenteed to be atomic, this is why we can run this
- * with interrupts on full blast. Don't touch this... -DaveM
- *
- * Note with time_t changes to the timeval type, I must now use
- * nucleus atomic quad 128-bit loads.
- *
- * If xtime was stored recently, I've seen crap from the
- * quad load on Cheetah. Putting a membar SYNC before
- * the quad load seems to make the problem go away. -DaveM
- * (we should nop out workarounds like this on spitfire)
- */
- sethi %hi(timer_tick_offset), %g3
- sethi %hi(xtime), %g2
- sethi %hi(timer_tick_compare), %g1
- ldx [%g3 + %lo(timer_tick_offset)], %g3
- or %g2, %lo(xtime), %g2
- or %g1, %lo(timer_tick_compare), %g1
-1: membar #Sync
- ldda [%g2] ASI_NUCLEUS_QUAD_LDD, %o4
- BRANCH_IF_ANY_CHEETAH(o2,o1,2f)
- ba,pt %xcc, 3f
- rd %tick, %o1
-2: ba,pt %xcc, 3f
- rd %asr24, %o1
-3: ldx [%g1], %g7
- membar #Sync
- ldda [%g2] ASI_NUCLEUS_QUAD_LDD, %o2
- xor %o4, %o2, %o2
- xor %o5, %o3, %o3
- orcc %o2, %o3, %g0
- bne,pn %xcc, 1b
- sethi %hi(wall_jiffies), %o2
- sethi %hi(jiffies), %o3
- ldx [%o2 + %lo(wall_jiffies)], %o2
- ldx [%o3 + %lo(jiffies)], %o3
- sub %o3, %o2, %o2
- sethi %hi(timer_ticks_per_usec_quotient), %o3
- add %g3, %o1, %o1
- ldx [%o3 + %lo(timer_ticks_per_usec_quotient)], %o3
- sub %o1, %g7, %o1
- mulx %o3, %o1, %o1
- brz,pt %o2, 1f
- srlx %o1, 32, %o1
- sethi %hi(10000), %g2
- or %g2, %lo(10000), %g2
- add %o1, %g2, %o1
-1: sethi %hi(1000000), %o2
- srlx %o5, 32, %o5
- or %o2, %lo(1000000), %o2
- add %o5, %o1, %o5
- cmp %o5, %o2
- bl,a,pn %xcc, 1f
- stx %o4, [%o0 + 0x0]
- add %o4, 0x1, %o4
- sub %o5, %o2, %o5
- stx %o4, [%o0 + 0x0]
-1: retl
- st %o5, [%o0 + 0x8]
FUNET's LINUX-ADM group, linux-adm@nic.funet.fi
TCL-scripts by Sam Shen (who was at: slshen@lbl.gov)