161619b12078dc8b85a3d4cbfa16f650daa341bd1Greg Ungerer#ifndef __M68K_ENTRY_H 261619b12078dc8b85a3d4cbfa16f650daa341bd1Greg Ungerer#define __M68K_ENTRY_H 361619b12078dc8b85a3d4cbfa16f650daa341bd1Greg Ungerer 461619b12078dc8b85a3d4cbfa16f650daa341bd1Greg Ungerer#include <asm/setup.h> 561619b12078dc8b85a3d4cbfa16f650daa341bd1Greg Ungerer#include <asm/page.h> 661619b12078dc8b85a3d4cbfa16f650daa341bd1Greg Ungerer#ifdef __ASSEMBLY__ 761619b12078dc8b85a3d4cbfa16f650daa341bd1Greg Ungerer#include <asm/thread_info.h> 861619b12078dc8b85a3d4cbfa16f650daa341bd1Greg Ungerer#endif 961619b12078dc8b85a3d4cbfa16f650daa341bd1Greg Ungerer 1061619b12078dc8b85a3d4cbfa16f650daa341bd1Greg Ungerer/* 1161619b12078dc8b85a3d4cbfa16f650daa341bd1Greg Ungerer * Stack layout in 'ret_from_exception': 1261619b12078dc8b85a3d4cbfa16f650daa341bd1Greg Ungerer * 1361619b12078dc8b85a3d4cbfa16f650daa341bd1Greg Ungerer * This allows access to the syscall arguments in registers d1-d5 1461619b12078dc8b85a3d4cbfa16f650daa341bd1Greg Ungerer * 1561619b12078dc8b85a3d4cbfa16f650daa341bd1Greg Ungerer * 0(sp) - d1 1661619b12078dc8b85a3d4cbfa16f650daa341bd1Greg Ungerer * 4(sp) - d2 1761619b12078dc8b85a3d4cbfa16f650daa341bd1Greg Ungerer * 8(sp) - d3 1861619b12078dc8b85a3d4cbfa16f650daa341bd1Greg Ungerer * C(sp) - d4 1961619b12078dc8b85a3d4cbfa16f650daa341bd1Greg Ungerer * 10(sp) - d5 2061619b12078dc8b85a3d4cbfa16f650daa341bd1Greg Ungerer * 14(sp) - a0 2161619b12078dc8b85a3d4cbfa16f650daa341bd1Greg Ungerer * 18(sp) - a1 2261619b12078dc8b85a3d4cbfa16f650daa341bd1Greg Ungerer * 1C(sp) - a2 2361619b12078dc8b85a3d4cbfa16f650daa341bd1Greg Ungerer * 20(sp) - d0 2461619b12078dc8b85a3d4cbfa16f650daa341bd1Greg Ungerer * 24(sp) - orig_d0 2561619b12078dc8b85a3d4cbfa16f650daa341bd1Greg Ungerer * 28(sp) - stack adjustment 2661619b12078dc8b85a3d4cbfa16f650daa341bd1Greg Ungerer * 2C(sp) - [ sr ] [ format & vector ] 2761619b12078dc8b85a3d4cbfa16f650daa341bd1Greg Ungerer * 2E(sp) - [ pc-hiword ] [ sr ] 2861619b12078dc8b85a3d4cbfa16f650daa341bd1Greg Ungerer * 30(sp) - [ pc-loword ] [ pc-hiword ] 2961619b12078dc8b85a3d4cbfa16f650daa341bd1Greg Ungerer * 32(sp) - [ format & vector ] [ pc-loword ] 3061619b12078dc8b85a3d4cbfa16f650daa341bd1Greg Ungerer * ^^^^^^^^^^^^^^^^^ ^^^^^^^^^^^^^^^^^ 3161619b12078dc8b85a3d4cbfa16f650daa341bd1Greg Ungerer * M68K COLDFIRE 3261619b12078dc8b85a3d4cbfa16f650daa341bd1Greg Ungerer */ 3361619b12078dc8b85a3d4cbfa16f650daa341bd1Greg Ungerer 3461619b12078dc8b85a3d4cbfa16f650daa341bd1Greg Ungerer/* the following macro is used when enabling interrupts */ 3561619b12078dc8b85a3d4cbfa16f650daa341bd1Greg Ungerer#if defined(MACH_ATARI_ONLY) 36c663600584a596b5e66258cc10716fb781a5c2c9Mikael Pettersson /* block out HSYNC = ipl 2 on the atari */ 37c663600584a596b5e66258cc10716fb781a5c2c9Mikael Pettersson#define ALLOWINT (~0x500) 3849148020bcb6910ce71417bd990a5ce7017f9bd3Sam Ravnborg#else 3961619b12078dc8b85a3d4cbfa16f650daa341bd1Greg Ungerer /* portable version */ 4061619b12078dc8b85a3d4cbfa16f650daa341bd1Greg Ungerer#define ALLOWINT (~0x700) 4161619b12078dc8b85a3d4cbfa16f650daa341bd1Greg Ungerer#endif /* machine compilation types */ 4261619b12078dc8b85a3d4cbfa16f650daa341bd1Greg Ungerer 4361619b12078dc8b85a3d4cbfa16f650daa341bd1Greg Ungerer#ifdef __ASSEMBLY__ 4461619b12078dc8b85a3d4cbfa16f650daa341bd1Greg Ungerer/* 4561619b12078dc8b85a3d4cbfa16f650daa341bd1Greg Ungerer * This defines the normal kernel pt-regs layout. 4661619b12078dc8b85a3d4cbfa16f650daa341bd1Greg Ungerer * 4761619b12078dc8b85a3d4cbfa16f650daa341bd1Greg Ungerer * regs a3-a6 and d6-d7 are preserved by C code 4861619b12078dc8b85a3d4cbfa16f650daa341bd1Greg Ungerer * the kernel doesn't mess with usp unless it needs to 4961619b12078dc8b85a3d4cbfa16f650daa341bd1Greg Ungerer */ 5061619b12078dc8b85a3d4cbfa16f650daa341bd1Greg Ungerer#define SWITCH_STACK_SIZE (6*4+4) /* includes return address */ 5161619b12078dc8b85a3d4cbfa16f650daa341bd1Greg Ungerer 5261619b12078dc8b85a3d4cbfa16f650daa341bd1Greg Ungerer#ifdef CONFIG_COLDFIRE 5361619b12078dc8b85a3d4cbfa16f650daa341bd1Greg Ungerer#ifdef CONFIG_COLDFIRE_SW_A7 5461619b12078dc8b85a3d4cbfa16f650daa341bd1Greg Ungerer/* 5561619b12078dc8b85a3d4cbfa16f650daa341bd1Greg Ungerer * This is made a little more tricky on older ColdFires. There is no 5661619b12078dc8b85a3d4cbfa16f650daa341bd1Greg Ungerer * separate supervisor and user stack pointers. Need to artificially 5761619b12078dc8b85a3d4cbfa16f650daa341bd1Greg Ungerer * construct a usp in software... When doing this we need to disable 5861619b12078dc8b85a3d4cbfa16f650daa341bd1Greg Ungerer * interrupts, otherwise bad things will happen. 5961619b12078dc8b85a3d4cbfa16f650daa341bd1Greg Ungerer */ 6061619b12078dc8b85a3d4cbfa16f650daa341bd1Greg Ungerer.globl sw_usp 6161619b12078dc8b85a3d4cbfa16f650daa341bd1Greg Ungerer.globl sw_ksp 6261619b12078dc8b85a3d4cbfa16f650daa341bd1Greg Ungerer 6361619b12078dc8b85a3d4cbfa16f650daa341bd1Greg Ungerer.macro SAVE_ALL_SYS 6461619b12078dc8b85a3d4cbfa16f650daa341bd1Greg Ungerer move #0x2700,%sr /* disable intrs */ 6561619b12078dc8b85a3d4cbfa16f650daa341bd1Greg Ungerer btst #5,%sp@(2) /* from user? */ 6661619b12078dc8b85a3d4cbfa16f650daa341bd1Greg Ungerer bnes 6f /* no, skip */ 6761619b12078dc8b85a3d4cbfa16f650daa341bd1Greg Ungerer movel %sp,sw_usp /* save user sp */ 6861619b12078dc8b85a3d4cbfa16f650daa341bd1Greg Ungerer addql #8,sw_usp /* remove exception */ 6961619b12078dc8b85a3d4cbfa16f650daa341bd1Greg Ungerer movel sw_ksp,%sp /* kernel sp */ 7061619b12078dc8b85a3d4cbfa16f650daa341bd1Greg Ungerer subql #8,%sp /* room for exception */ 7161619b12078dc8b85a3d4cbfa16f650daa341bd1Greg Ungerer clrl %sp@- /* stkadj */ 7261619b12078dc8b85a3d4cbfa16f650daa341bd1Greg Ungerer movel %d0,%sp@- /* orig d0 */ 7361619b12078dc8b85a3d4cbfa16f650daa341bd1Greg Ungerer movel %d0,%sp@- /* d0 */ 7461619b12078dc8b85a3d4cbfa16f650daa341bd1Greg Ungerer lea %sp@(-32),%sp /* space for 8 regs */ 7561619b12078dc8b85a3d4cbfa16f650daa341bd1Greg Ungerer moveml %d1-%d5/%a0-%a2,%sp@ 7661619b12078dc8b85a3d4cbfa16f650daa341bd1Greg Ungerer movel sw_usp,%a0 /* get usp */ 7761619b12078dc8b85a3d4cbfa16f650daa341bd1Greg Ungerer movel %a0@-,%sp@(PT_OFF_PC) /* copy exception program counter */ 7861619b12078dc8b85a3d4cbfa16f650daa341bd1Greg Ungerer movel %a0@-,%sp@(PT_OFF_FORMATVEC)/*copy exception format/vector/sr */ 7961619b12078dc8b85a3d4cbfa16f650daa341bd1Greg Ungerer bra 7f 8061619b12078dc8b85a3d4cbfa16f650daa341bd1Greg Ungerer 6: 8161619b12078dc8b85a3d4cbfa16f650daa341bd1Greg Ungerer clrl %sp@- /* stkadj */ 8261619b12078dc8b85a3d4cbfa16f650daa341bd1Greg Ungerer movel %d0,%sp@- /* orig d0 */ 8361619b12078dc8b85a3d4cbfa16f650daa341bd1Greg Ungerer movel %d0,%sp@- /* d0 */ 8461619b12078dc8b85a3d4cbfa16f650daa341bd1Greg Ungerer lea %sp@(-32),%sp /* space for 8 regs */ 8561619b12078dc8b85a3d4cbfa16f650daa341bd1Greg Ungerer moveml %d1-%d5/%a0-%a2,%sp@ 8661619b12078dc8b85a3d4cbfa16f650daa341bd1Greg Ungerer 7: 8761619b12078dc8b85a3d4cbfa16f650daa341bd1Greg Ungerer.endm 8861619b12078dc8b85a3d4cbfa16f650daa341bd1Greg Ungerer 8961619b12078dc8b85a3d4cbfa16f650daa341bd1Greg Ungerer.macro SAVE_ALL_INT 9061619b12078dc8b85a3d4cbfa16f650daa341bd1Greg Ungerer SAVE_ALL_SYS 9161619b12078dc8b85a3d4cbfa16f650daa341bd1Greg Ungerer moveq #-1,%d0 /* not system call entry */ 9261619b12078dc8b85a3d4cbfa16f650daa341bd1Greg Ungerer movel %d0,%sp@(PT_OFF_ORIG_D0) 9361619b12078dc8b85a3d4cbfa16f650daa341bd1Greg Ungerer.endm 9461619b12078dc8b85a3d4cbfa16f650daa341bd1Greg Ungerer 9561619b12078dc8b85a3d4cbfa16f650daa341bd1Greg Ungerer.macro RESTORE_USER 9661619b12078dc8b85a3d4cbfa16f650daa341bd1Greg Ungerer move #0x2700,%sr /* disable intrs */ 9761619b12078dc8b85a3d4cbfa16f650daa341bd1Greg Ungerer movel sw_usp,%a0 /* get usp */ 9861619b12078dc8b85a3d4cbfa16f650daa341bd1Greg Ungerer movel %sp@(PT_OFF_PC),%a0@- /* copy exception program counter */ 9961619b12078dc8b85a3d4cbfa16f650daa341bd1Greg Ungerer movel %sp@(PT_OFF_FORMATVEC),%a0@-/*copy exception format/vector/sr */ 10061619b12078dc8b85a3d4cbfa16f650daa341bd1Greg Ungerer moveml %sp@,%d1-%d5/%a0-%a2 10161619b12078dc8b85a3d4cbfa16f650daa341bd1Greg Ungerer lea %sp@(32),%sp /* space for 8 regs */ 10261619b12078dc8b85a3d4cbfa16f650daa341bd1Greg Ungerer movel %sp@+,%d0 10361619b12078dc8b85a3d4cbfa16f650daa341bd1Greg Ungerer addql #4,%sp /* orig d0 */ 10461619b12078dc8b85a3d4cbfa16f650daa341bd1Greg Ungerer addl %sp@+,%sp /* stkadj */ 10561619b12078dc8b85a3d4cbfa16f650daa341bd1Greg Ungerer addql #8,%sp /* remove exception */ 10661619b12078dc8b85a3d4cbfa16f650daa341bd1Greg Ungerer movel %sp,sw_ksp /* save ksp */ 10761619b12078dc8b85a3d4cbfa16f650daa341bd1Greg Ungerer subql #8,sw_usp /* set exception */ 10861619b12078dc8b85a3d4cbfa16f650daa341bd1Greg Ungerer movel sw_usp,%sp /* restore usp */ 10961619b12078dc8b85a3d4cbfa16f650daa341bd1Greg Ungerer rte 11061619b12078dc8b85a3d4cbfa16f650daa341bd1Greg Ungerer.endm 11161619b12078dc8b85a3d4cbfa16f650daa341bd1Greg Ungerer 11261619b12078dc8b85a3d4cbfa16f650daa341bd1Greg Ungerer.macro RDUSP 11361619b12078dc8b85a3d4cbfa16f650daa341bd1Greg Ungerer movel sw_usp,%a3 11461619b12078dc8b85a3d4cbfa16f650daa341bd1Greg Ungerer.endm 11561619b12078dc8b85a3d4cbfa16f650daa341bd1Greg Ungerer 11661619b12078dc8b85a3d4cbfa16f650daa341bd1Greg Ungerer.macro WRUSP 11761619b12078dc8b85a3d4cbfa16f650daa341bd1Greg Ungerer movel %a3,sw_usp 11861619b12078dc8b85a3d4cbfa16f650daa341bd1Greg Ungerer.endm 11961619b12078dc8b85a3d4cbfa16f650daa341bd1Greg Ungerer 12061619b12078dc8b85a3d4cbfa16f650daa341bd1Greg Ungerer#else /* !CONFIG_COLDFIRE_SW_A7 */ 12161619b12078dc8b85a3d4cbfa16f650daa341bd1Greg Ungerer/* 12261619b12078dc8b85a3d4cbfa16f650daa341bd1Greg Ungerer * Modern ColdFire parts have separate supervisor and user stack 12361619b12078dc8b85a3d4cbfa16f650daa341bd1Greg Ungerer * pointers. Simple load and restore macros for this case. 12461619b12078dc8b85a3d4cbfa16f650daa341bd1Greg Ungerer */ 12561619b12078dc8b85a3d4cbfa16f650daa341bd1Greg Ungerer.macro SAVE_ALL_SYS 12661619b12078dc8b85a3d4cbfa16f650daa341bd1Greg Ungerer move #0x2700,%sr /* disable intrs */ 12761619b12078dc8b85a3d4cbfa16f650daa341bd1Greg Ungerer clrl %sp@- /* stkadj */ 12861619b12078dc8b85a3d4cbfa16f650daa341bd1Greg Ungerer movel %d0,%sp@- /* orig d0 */ 12961619b12078dc8b85a3d4cbfa16f650daa341bd1Greg Ungerer movel %d0,%sp@- /* d0 */ 13061619b12078dc8b85a3d4cbfa16f650daa341bd1Greg Ungerer lea %sp@(-32),%sp /* space for 8 regs */ 13161619b12078dc8b85a3d4cbfa16f650daa341bd1Greg Ungerer moveml %d1-%d5/%a0-%a2,%sp@ 13261619b12078dc8b85a3d4cbfa16f650daa341bd1Greg Ungerer.endm 13361619b12078dc8b85a3d4cbfa16f650daa341bd1Greg Ungerer 13461619b12078dc8b85a3d4cbfa16f650daa341bd1Greg Ungerer.macro SAVE_ALL_INT 13561619b12078dc8b85a3d4cbfa16f650daa341bd1Greg Ungerer move #0x2700,%sr /* disable intrs */ 13661619b12078dc8b85a3d4cbfa16f650daa341bd1Greg Ungerer clrl %sp@- /* stkadj */ 13761619b12078dc8b85a3d4cbfa16f650daa341bd1Greg Ungerer pea -1:w /* orig d0 */ 13861619b12078dc8b85a3d4cbfa16f650daa341bd1Greg Ungerer movel %d0,%sp@- /* d0 */ 13961619b12078dc8b85a3d4cbfa16f650daa341bd1Greg Ungerer lea %sp@(-32),%sp /* space for 8 regs */ 14061619b12078dc8b85a3d4cbfa16f650daa341bd1Greg Ungerer moveml %d1-%d5/%a0-%a2,%sp@ 14161619b12078dc8b85a3d4cbfa16f650daa341bd1Greg Ungerer.endm 14261619b12078dc8b85a3d4cbfa16f650daa341bd1Greg Ungerer 14361619b12078dc8b85a3d4cbfa16f650daa341bd1Greg Ungerer.macro RESTORE_USER 14461619b12078dc8b85a3d4cbfa16f650daa341bd1Greg Ungerer moveml %sp@,%d1-%d5/%a0-%a2 14561619b12078dc8b85a3d4cbfa16f650daa341bd1Greg Ungerer lea %sp@(32),%sp /* space for 8 regs */ 14661619b12078dc8b85a3d4cbfa16f650daa341bd1Greg Ungerer movel %sp@+,%d0 14761619b12078dc8b85a3d4cbfa16f650daa341bd1Greg Ungerer addql #4,%sp /* orig d0 */ 14861619b12078dc8b85a3d4cbfa16f650daa341bd1Greg Ungerer addl %sp@+,%sp /* stkadj */ 14961619b12078dc8b85a3d4cbfa16f650daa341bd1Greg Ungerer rte 15061619b12078dc8b85a3d4cbfa16f650daa341bd1Greg Ungerer.endm 15161619b12078dc8b85a3d4cbfa16f650daa341bd1Greg Ungerer 15261619b12078dc8b85a3d4cbfa16f650daa341bd1Greg Ungerer.macro RDUSP 15361619b12078dc8b85a3d4cbfa16f650daa341bd1Greg Ungerer /*move %usp,%a3*/ 15461619b12078dc8b85a3d4cbfa16f650daa341bd1Greg Ungerer .word 0x4e6b 15561619b12078dc8b85a3d4cbfa16f650daa341bd1Greg Ungerer.endm 15661619b12078dc8b85a3d4cbfa16f650daa341bd1Greg Ungerer 15761619b12078dc8b85a3d4cbfa16f650daa341bd1Greg Ungerer.macro WRUSP 15861619b12078dc8b85a3d4cbfa16f650daa341bd1Greg Ungerer /*move %a3,%usp*/ 15961619b12078dc8b85a3d4cbfa16f650daa341bd1Greg Ungerer .word 0x4e63 16061619b12078dc8b85a3d4cbfa16f650daa341bd1Greg Ungerer.endm 16161619b12078dc8b85a3d4cbfa16f650daa341bd1Greg Ungerer 16261619b12078dc8b85a3d4cbfa16f650daa341bd1Greg Ungerer#endif /* !CONFIG_COLDFIRE_SW_A7 */ 16361619b12078dc8b85a3d4cbfa16f650daa341bd1Greg Ungerer 16461619b12078dc8b85a3d4cbfa16f650daa341bd1Greg Ungerer.macro SAVE_SWITCH_STACK 16561619b12078dc8b85a3d4cbfa16f650daa341bd1Greg Ungerer lea %sp@(-24),%sp /* 6 regs */ 16661619b12078dc8b85a3d4cbfa16f650daa341bd1Greg Ungerer moveml %a3-%a6/%d6-%d7,%sp@ 16761619b12078dc8b85a3d4cbfa16f650daa341bd1Greg Ungerer.endm 16861619b12078dc8b85a3d4cbfa16f650daa341bd1Greg Ungerer 16961619b12078dc8b85a3d4cbfa16f650daa341bd1Greg Ungerer.macro RESTORE_SWITCH_STACK 17061619b12078dc8b85a3d4cbfa16f650daa341bd1Greg Ungerer moveml %sp@,%a3-%a6/%d6-%d7 17161619b12078dc8b85a3d4cbfa16f650daa341bd1Greg Ungerer lea %sp@(24),%sp /* 6 regs */ 17261619b12078dc8b85a3d4cbfa16f650daa341bd1Greg Ungerer.endm 17361619b12078dc8b85a3d4cbfa16f650daa341bd1Greg Ungerer 17461619b12078dc8b85a3d4cbfa16f650daa341bd1Greg Ungerer#else /* !CONFIG_COLDFIRE */ 17561619b12078dc8b85a3d4cbfa16f650daa341bd1Greg Ungerer 17661619b12078dc8b85a3d4cbfa16f650daa341bd1Greg Ungerer/* 17761619b12078dc8b85a3d4cbfa16f650daa341bd1Greg Ungerer * All other types of m68k parts (68000, 680x0, CPU32) have the same 17861619b12078dc8b85a3d4cbfa16f650daa341bd1Greg Ungerer * entry and exit code. 17961619b12078dc8b85a3d4cbfa16f650daa341bd1Greg Ungerer */ 18061619b12078dc8b85a3d4cbfa16f650daa341bd1Greg Ungerer 18161619b12078dc8b85a3d4cbfa16f650daa341bd1Greg Ungerer/* 18261619b12078dc8b85a3d4cbfa16f650daa341bd1Greg Ungerer * a -1 in the orig_d0 field signifies 18361619b12078dc8b85a3d4cbfa16f650daa341bd1Greg Ungerer * that the stack frame is NOT for syscall 18461619b12078dc8b85a3d4cbfa16f650daa341bd1Greg Ungerer */ 18561619b12078dc8b85a3d4cbfa16f650daa341bd1Greg Ungerer.macro SAVE_ALL_INT 18661619b12078dc8b85a3d4cbfa16f650daa341bd1Greg Ungerer clrl %sp@- /* stk_adj */ 18761619b12078dc8b85a3d4cbfa16f650daa341bd1Greg Ungerer pea -1:w /* orig d0 */ 18861619b12078dc8b85a3d4cbfa16f650daa341bd1Greg Ungerer movel %d0,%sp@- /* d0 */ 18961619b12078dc8b85a3d4cbfa16f650daa341bd1Greg Ungerer moveml %d1-%d5/%a0-%a2,%sp@- 19061619b12078dc8b85a3d4cbfa16f650daa341bd1Greg Ungerer.endm 19161619b12078dc8b85a3d4cbfa16f650daa341bd1Greg Ungerer 19261619b12078dc8b85a3d4cbfa16f650daa341bd1Greg Ungerer.macro SAVE_ALL_SYS 19361619b12078dc8b85a3d4cbfa16f650daa341bd1Greg Ungerer clrl %sp@- /* stk_adj */ 19461619b12078dc8b85a3d4cbfa16f650daa341bd1Greg Ungerer movel %d0,%sp@- /* orig d0 */ 19561619b12078dc8b85a3d4cbfa16f650daa341bd1Greg Ungerer movel %d0,%sp@- /* d0 */ 19661619b12078dc8b85a3d4cbfa16f650daa341bd1Greg Ungerer moveml %d1-%d5/%a0-%a2,%sp@- 19761619b12078dc8b85a3d4cbfa16f650daa341bd1Greg Ungerer.endm 19861619b12078dc8b85a3d4cbfa16f650daa341bd1Greg Ungerer 19961619b12078dc8b85a3d4cbfa16f650daa341bd1Greg Ungerer.macro RESTORE_ALL 20061619b12078dc8b85a3d4cbfa16f650daa341bd1Greg Ungerer moveml %sp@+,%a0-%a2/%d1-%d5 20161619b12078dc8b85a3d4cbfa16f650daa341bd1Greg Ungerer movel %sp@+,%d0 20261619b12078dc8b85a3d4cbfa16f650daa341bd1Greg Ungerer addql #4,%sp /* orig d0 */ 20361619b12078dc8b85a3d4cbfa16f650daa341bd1Greg Ungerer addl %sp@+,%sp /* stk adj */ 20461619b12078dc8b85a3d4cbfa16f650daa341bd1Greg Ungerer rte 20561619b12078dc8b85a3d4cbfa16f650daa341bd1Greg Ungerer.endm 20661619b12078dc8b85a3d4cbfa16f650daa341bd1Greg Ungerer 20761619b12078dc8b85a3d4cbfa16f650daa341bd1Greg Ungerer 20861619b12078dc8b85a3d4cbfa16f650daa341bd1Greg Ungerer.macro SAVE_SWITCH_STACK 20961619b12078dc8b85a3d4cbfa16f650daa341bd1Greg Ungerer moveml %a3-%a6/%d6-%d7,%sp@- 21061619b12078dc8b85a3d4cbfa16f650daa341bd1Greg Ungerer.endm 21161619b12078dc8b85a3d4cbfa16f650daa341bd1Greg Ungerer 21261619b12078dc8b85a3d4cbfa16f650daa341bd1Greg Ungerer.macro RESTORE_SWITCH_STACK 21361619b12078dc8b85a3d4cbfa16f650daa341bd1Greg Ungerer moveml %sp@+,%a3-%a6/%d6-%d7 21461619b12078dc8b85a3d4cbfa16f650daa341bd1Greg Ungerer.endm 21561619b12078dc8b85a3d4cbfa16f650daa341bd1Greg Ungerer 21661619b12078dc8b85a3d4cbfa16f650daa341bd1Greg Ungerer#endif /* !CONFIG_COLDFIRE */ 21761619b12078dc8b85a3d4cbfa16f650daa341bd1Greg Ungerer 21861619b12078dc8b85a3d4cbfa16f650daa341bd1Greg Ungerer/* 21961619b12078dc8b85a3d4cbfa16f650daa341bd1Greg Ungerer * Register %a2 is reserved and set to current task on MMU enabled systems. 22061619b12078dc8b85a3d4cbfa16f650daa341bd1Greg Ungerer * Non-MMU systems do not reserve %a2 in this way, and this definition is 22161619b12078dc8b85a3d4cbfa16f650daa341bd1Greg Ungerer * not used for them. 22261619b12078dc8b85a3d4cbfa16f650daa341bd1Greg Ungerer */ 223bbc6f1ba509cf9cda42ce63bbd40afe577ab028eGreg Ungerer#ifdef CONFIG_MMU 224bbc6f1ba509cf9cda42ce63bbd40afe577ab028eGreg Ungerer 22561619b12078dc8b85a3d4cbfa16f650daa341bd1Greg Ungerer#define curptr a2 22661619b12078dc8b85a3d4cbfa16f650daa341bd1Greg Ungerer 22761619b12078dc8b85a3d4cbfa16f650daa341bd1Greg Ungerer#define GET_CURRENT(tmp) get_current tmp 22861619b12078dc8b85a3d4cbfa16f650daa341bd1Greg Ungerer.macro get_current reg=%d0 22961619b12078dc8b85a3d4cbfa16f650daa341bd1Greg Ungerer movel %sp,\reg 230bbc6f1ba509cf9cda42ce63bbd40afe577ab028eGreg Ungerer andl #-THREAD_SIZE,\reg 23161619b12078dc8b85a3d4cbfa16f650daa341bd1Greg Ungerer movel \reg,%curptr 23261619b12078dc8b85a3d4cbfa16f650daa341bd1Greg Ungerer movel %curptr@,%curptr 23361619b12078dc8b85a3d4cbfa16f650daa341bd1Greg Ungerer.endm 23461619b12078dc8b85a3d4cbfa16f650daa341bd1Greg Ungerer 235bbc6f1ba509cf9cda42ce63bbd40afe577ab028eGreg Ungerer#else 236bbc6f1ba509cf9cda42ce63bbd40afe577ab028eGreg Ungerer 237bbc6f1ba509cf9cda42ce63bbd40afe577ab028eGreg Ungerer#define GET_CURRENT(tmp) 238bbc6f1ba509cf9cda42ce63bbd40afe577ab028eGreg Ungerer 239bbc6f1ba509cf9cda42ce63bbd40afe577ab028eGreg Ungerer#endif /* CONFIG_MMU */ 240bbc6f1ba509cf9cda42ce63bbd40afe577ab028eGreg Ungerer 24161619b12078dc8b85a3d4cbfa16f650daa341bd1Greg Ungerer#else /* C source */ 24261619b12078dc8b85a3d4cbfa16f650daa341bd1Greg Ungerer 24361619b12078dc8b85a3d4cbfa16f650daa341bd1Greg Ungerer#define STR(X) STR1(X) 24461619b12078dc8b85a3d4cbfa16f650daa341bd1Greg Ungerer#define STR1(X) #X 24561619b12078dc8b85a3d4cbfa16f650daa341bd1Greg Ungerer 24661619b12078dc8b85a3d4cbfa16f650daa341bd1Greg Ungerer#define SAVE_ALL_INT \ 24761619b12078dc8b85a3d4cbfa16f650daa341bd1Greg Ungerer "clrl %%sp@-;" /* stk_adj */ \ 24861619b12078dc8b85a3d4cbfa16f650daa341bd1Greg Ungerer "pea -1:w;" /* orig d0 = -1 */ \ 24961619b12078dc8b85a3d4cbfa16f650daa341bd1Greg Ungerer "movel %%d0,%%sp@-;" /* d0 */ \ 25061619b12078dc8b85a3d4cbfa16f650daa341bd1Greg Ungerer "moveml %%d1-%%d5/%%a0-%%a2,%%sp@-" 25161619b12078dc8b85a3d4cbfa16f650daa341bd1Greg Ungerer 25261619b12078dc8b85a3d4cbfa16f650daa341bd1Greg Ungerer#define GET_CURRENT(tmp) \ 25361619b12078dc8b85a3d4cbfa16f650daa341bd1Greg Ungerer "movel %%sp,"#tmp"\n\t" \ 25461619b12078dc8b85a3d4cbfa16f650daa341bd1Greg Ungerer "andw #-"STR(THREAD_SIZE)","#tmp"\n\t" \ 25561619b12078dc8b85a3d4cbfa16f650daa341bd1Greg Ungerer "movel "#tmp",%%a2\n\t" \ 25661619b12078dc8b85a3d4cbfa16f650daa341bd1Greg Ungerer "movel %%a2@,%%a2" 25761619b12078dc8b85a3d4cbfa16f650daa341bd1Greg Ungerer 25849148020bcb6910ce71417bd990a5ce7017f9bd3Sam Ravnborg#endif 25961619b12078dc8b85a3d4cbfa16f650daa341bd1Greg Ungerer 26061619b12078dc8b85a3d4cbfa16f650daa341bd1Greg Ungerer#endif /* __M68K_ENTRY_H */ 261