c925cf0b80
Long ago, PT_TRACESYS_OFF and friends were introduced as hard defines to avoid straight constants in assembler parts of linux m68k. They are not used anymore, and were not updated to follow changes in linux kernel. Remove them. When similar constants are needed, they are now generated using asm-offsets.c. Signed-off-by: Philippe De Muyter <phdm@macqel.be> Acked-by: Mike Frysinger <vapier@gentoo.org> Acked-by: Geert Uytterhoeven <geert@linux-m68k.org> Acked-by: Greg Ungerer <gerg@uclinux.org> Signed-off-by: Andrew Morton <akpm@linux-foundation.org> Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
128 lines
2.5 KiB
C
128 lines
2.5 KiB
C
#ifndef __M68K_ENTRY_H
|
|
#define __M68K_ENTRY_H
|
|
|
|
#include <asm/setup.h>
|
|
#include <asm/page.h>
|
|
#ifdef __ASSEMBLY__
|
|
#include <asm/thread_info.h>
|
|
#endif
|
|
|
|
/*
|
|
* Stack layout in 'ret_from_exception':
|
|
*
|
|
* This allows access to the syscall arguments in registers d1-d5
|
|
*
|
|
* 0(sp) - d1
|
|
* 4(sp) - d2
|
|
* 8(sp) - d3
|
|
* C(sp) - d4
|
|
* 10(sp) - d5
|
|
* 14(sp) - a0
|
|
* 18(sp) - a1
|
|
* 1C(sp) - a2
|
|
* 20(sp) - d0
|
|
* 24(sp) - orig_d0
|
|
* 28(sp) - stack adjustment
|
|
* 2C(sp) - sr
|
|
* 2E(sp) - pc
|
|
* 32(sp) - format & vector
|
|
*/
|
|
|
|
/*
|
|
* 97/05/14 Andreas: Register %a2 is now set to the current task throughout
|
|
* the whole kernel.
|
|
*/
|
|
|
|
/* the following macro is used when enabling interrupts */
|
|
#if defined(MACH_ATARI_ONLY)
|
|
/* block out HSYNC on the atari */
|
|
#define ALLOWINT (~0x400)
|
|
#define MAX_NOINT_IPL 3
|
|
#else
|
|
/* portable version */
|
|
#define ALLOWINT (~0x700)
|
|
#define MAX_NOINT_IPL 0
|
|
#endif /* machine compilation types */
|
|
|
|
#ifdef __ASSEMBLY__
|
|
|
|
#define curptr a2
|
|
|
|
LFLUSH_I_AND_D = 0x00000808
|
|
|
|
#define SAVE_ALL_INT save_all_int
|
|
#define SAVE_ALL_SYS save_all_sys
|
|
#define RESTORE_ALL restore_all
|
|
/*
|
|
* This defines the normal kernel pt-regs layout.
|
|
*
|
|
* regs a3-a6 and d6-d7 are preserved by C code
|
|
* the kernel doesn't mess with usp unless it needs to
|
|
*/
|
|
|
|
/*
|
|
* a -1 in the orig_d0 field signifies
|
|
* that the stack frame is NOT for syscall
|
|
*/
|
|
.macro save_all_int
|
|
clrl %sp@- | stk_adj
|
|
pea -1:w | orig d0
|
|
movel %d0,%sp@- | d0
|
|
moveml %d1-%d5/%a0-%a1/%curptr,%sp@-
|
|
.endm
|
|
|
|
.macro save_all_sys
|
|
clrl %sp@- | stk_adj
|
|
movel %d0,%sp@- | orig d0
|
|
movel %d0,%sp@- | d0
|
|
moveml %d1-%d5/%a0-%a1/%curptr,%sp@-
|
|
.endm
|
|
|
|
.macro restore_all
|
|
moveml %sp@+,%a0-%a1/%curptr/%d1-%d5
|
|
movel %sp@+,%d0
|
|
addql #4,%sp | orig d0
|
|
addl %sp@+,%sp | stk adj
|
|
rte
|
|
.endm
|
|
|
|
#define SWITCH_STACK_SIZE (6*4+4) /* includes return address */
|
|
|
|
#define SAVE_SWITCH_STACK save_switch_stack
|
|
#define RESTORE_SWITCH_STACK restore_switch_stack
|
|
#define GET_CURRENT(tmp) get_current tmp
|
|
|
|
.macro save_switch_stack
|
|
moveml %a3-%a6/%d6-%d7,%sp@-
|
|
.endm
|
|
|
|
.macro restore_switch_stack
|
|
moveml %sp@+,%a3-%a6/%d6-%d7
|
|
.endm
|
|
|
|
.macro get_current reg=%d0
|
|
movel %sp,\reg
|
|
andw #-THREAD_SIZE,\reg
|
|
movel \reg,%curptr
|
|
movel %curptr@,%curptr
|
|
.endm
|
|
|
|
#else /* C source */
|
|
|
|
#define STR(X) STR1(X)
|
|
#define STR1(X) #X
|
|
|
|
#define SAVE_ALL_INT \
|
|
"clrl %%sp@-;" /* stk_adj */ \
|
|
"pea -1:w;" /* orig d0 = -1 */ \
|
|
"movel %%d0,%%sp@-;" /* d0 */ \
|
|
"moveml %%d1-%%d5/%%a0-%%a2,%%sp@-"
|
|
#define GET_CURRENT(tmp) \
|
|
"movel %%sp,"#tmp"\n\t" \
|
|
"andw #-"STR(THREAD_SIZE)","#tmp"\n\t" \
|
|
"movel "#tmp",%%a2\n\t" \
|
|
"movel %%a2@,%%a2"
|
|
|
|
#endif
|
|
|
|
#endif /* __M68K_ENTRY_H */
|