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>
173 lines
4.1 KiB
C
173 lines
4.1 KiB
C
#ifndef __M68KNOMMU_ENTRY_H
|
|
#define __M68KNOMMU_ENTRY_H
|
|
|
|
#include <asm/setup.h>
|
|
#include <asm/page.h>
|
|
|
|
/*
|
|
* 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 ] [ format & vector ]
|
|
* 2E(sp) - [ pc-hiword ] [ sr ]
|
|
* 30(sp) - [ pc-loword ] [ pc-hiword ]
|
|
* 32(sp) - [ format & vector ] [ pc-loword ]
|
|
* ^^^^^^^^^^^^^^^^^ ^^^^^^^^^^^^^^^^^
|
|
* M68K COLDFIRE
|
|
*/
|
|
|
|
#define ALLOWINT (~0x700)
|
|
|
|
#ifdef __ASSEMBLY__
|
|
|
|
#define SWITCH_STACK_SIZE (6*4+4) /* Includes return address */
|
|
|
|
/*
|
|
* This defines the normal kernel pt-regs layout.
|
|
*
|
|
* regs are a2-a6 and d6-d7 preserved by C code
|
|
* the kernel doesn't mess with usp unless it needs to
|
|
*/
|
|
|
|
#ifdef CONFIG_COLDFIRE
|
|
/*
|
|
* This is made a little more tricky on the ColdFire. There is no
|
|
* separate kernel and user stack pointers. Need to artificially
|
|
* construct a usp in software... When doing this we need to disable
|
|
* interrupts, otherwise bad things could happen.
|
|
*/
|
|
.macro SAVE_ALL
|
|
move #0x2700,%sr /* disable intrs */
|
|
btst #5,%sp@(2) /* from user? */
|
|
bnes 6f /* no, skip */
|
|
movel %sp,sw_usp /* save user sp */
|
|
addql #8,sw_usp /* remove exception */
|
|
movel sw_ksp,%sp /* kernel sp */
|
|
subql #8,%sp /* room for exception */
|
|
clrl %sp@- /* stkadj */
|
|
movel %d0,%sp@- /* orig d0 */
|
|
movel %d0,%sp@- /* d0 */
|
|
lea %sp@(-32),%sp /* space for 8 regs */
|
|
moveml %d1-%d5/%a0-%a2,%sp@
|
|
movel sw_usp,%a0 /* get usp */
|
|
movel %a0@-,%sp@(PT_OFF_PC) /* copy exception program counter */
|
|
movel %a0@-,%sp@(PT_OFF_FORMATVEC)/*copy exception format/vector/sr */
|
|
bra 7f
|
|
6:
|
|
clrl %sp@- /* stkadj */
|
|
movel %d0,%sp@- /* orig d0 */
|
|
movel %d0,%sp@- /* d0 */
|
|
lea %sp@(-32),%sp /* space for 8 regs */
|
|
moveml %d1-%d5/%a0-%a2,%sp@
|
|
7:
|
|
.endm
|
|
|
|
.macro RESTORE_ALL
|
|
btst #5,%sp@(PT_SR) /* going user? */
|
|
bnes 8f /* no, skip */
|
|
move #0x2700,%sr /* disable intrs */
|
|
movel sw_usp,%a0 /* get usp */
|
|
movel %sp@(PT_OFF_PC),%a0@- /* copy exception program counter */
|
|
movel %sp@(PT_OFF_FORMATVEC),%a0@-/*copy exception format/vector/sr */
|
|
moveml %sp@,%d1-%d5/%a0-%a2
|
|
lea %sp@(32),%sp /* space for 8 regs */
|
|
movel %sp@+,%d0
|
|
addql #4,%sp /* orig d0 */
|
|
addl %sp@+,%sp /* stkadj */
|
|
addql #8,%sp /* remove exception */
|
|
movel %sp,sw_ksp /* save ksp */
|
|
subql #8,sw_usp /* set exception */
|
|
movel sw_usp,%sp /* restore usp */
|
|
rte
|
|
8:
|
|
moveml %sp@,%d1-%d5/%a0-%a2
|
|
lea %sp@(32),%sp /* space for 8 regs */
|
|
movel %sp@+,%d0
|
|
addql #4,%sp /* orig d0 */
|
|
addl %sp@+,%sp /* stkadj */
|
|
rte
|
|
.endm
|
|
|
|
/*
|
|
* Quick exception save, use current stack only.
|
|
*/
|
|
.macro SAVE_LOCAL
|
|
move #0x2700,%sr /* disable intrs */
|
|
clrl %sp@- /* stkadj */
|
|
movel %d0,%sp@- /* orig d0 */
|
|
movel %d0,%sp@- /* d0 */
|
|
lea %sp@(-32),%sp /* space for 8 regs */
|
|
moveml %d1-%d5/%a0-%a2,%sp@
|
|
.endm
|
|
|
|
.macro RESTORE_LOCAL
|
|
moveml %sp@,%d1-%d5/%a0-%a2
|
|
lea %sp@(32),%sp /* space for 8 regs */
|
|
movel %sp@+,%d0
|
|
addql #4,%sp /* orig d0 */
|
|
addl %sp@+,%sp /* stkadj */
|
|
rte
|
|
.endm
|
|
|
|
.macro SAVE_SWITCH_STACK
|
|
lea %sp@(-24),%sp /* 6 regs */
|
|
moveml %a3-%a6/%d6-%d7,%sp@
|
|
.endm
|
|
|
|
.macro RESTORE_SWITCH_STACK
|
|
moveml %sp@,%a3-%a6/%d6-%d7
|
|
lea %sp@(24),%sp /* 6 regs */
|
|
.endm
|
|
|
|
/*
|
|
* Software copy of the user and kernel stack pointers... Ugh...
|
|
* Need these to get around ColdFire not having separate kernel
|
|
* and user stack pointers.
|
|
*/
|
|
.globl sw_usp
|
|
.globl sw_ksp
|
|
|
|
#else /* !CONFIG_COLDFIRE */
|
|
|
|
/*
|
|
* Standard 68k interrupt entry and exit macros.
|
|
*/
|
|
.macro SAVE_ALL
|
|
clrl %sp@- /* stkadj */
|
|
movel %d0,%sp@- /* orig d0 */
|
|
movel %d0,%sp@- /* d0 */
|
|
moveml %d1-%d5/%a0-%a2,%sp@-
|
|
.endm
|
|
|
|
.macro RESTORE_ALL
|
|
moveml %sp@+,%a0-%a2/%d1-%d5
|
|
movel %sp@+,%d0
|
|
addql #4,%sp /* orig d0 */
|
|
addl %sp@+,%sp /* stkadj */
|
|
rte
|
|
.endm
|
|
|
|
.macro SAVE_SWITCH_STACK
|
|
moveml %a3-%a6/%d6-%d7,%sp@-
|
|
.endm
|
|
|
|
.macro RESTORE_SWITCH_STACK
|
|
moveml %sp@+,%a3-%a6/%d6-%d7
|
|
.endm
|
|
|
|
#endif /* !CONFIG_COLDFIRE */
|
|
#endif /* __ASSEMBLY__ */
|
|
#endif /* __M68KNOMMU_ENTRY_H */
|