| #ifndef __BFIN_ENTRY_H |
| #define __BFIN_ENTRY_H |
| |
| #include <asm/setup.h> |
| #include <asm/page.h> |
| |
| #ifdef __ASSEMBLY__ |
| |
| #define LFLUSH_I_AND_D 0x00000808 |
| #define LSIGTRAP 5 |
| |
| /* process bits for task_struct.flags */ |
| #define PF_TRACESYS_OFF 3 |
| #define PF_TRACESYS_BIT 5 |
| #define PF_PTRACED_OFF 3 |
| #define PF_PTRACED_BIT 4 |
| #define PF_DTRACE_OFF 1 |
| #define PF_DTRACE_BIT 5 |
| |
| /* |
| * NOTE! The single-stepping code assumes that all interrupt handlers |
| * start by saving SYSCFG on the stack with their first instruction. |
| */ |
| |
| /* This one is used for exceptions, emulation, and NMI. It doesn't push |
| RETI and doesn't do cli. */ |
| #define SAVE_ALL_SYS save_context_no_interrupts |
| /* This is used for all normal interrupts. It saves a minimum of registers |
| to the stack, loads the IRQ number, and jumps to common code. */ |
| #define INTERRUPT_ENTRY(N) \ |
| [--sp] = SYSCFG; \ |
| \ |
| [--sp] = P0; /*orig_p0*/ \ |
| [--sp] = R0; /*orig_r0*/ \ |
| [--sp] = (R7:0,P5:0); \ |
| R0 = (N); \ |
| jump __common_int_entry; |
| |
| /* For timer interrupts, we need to save IPEND, since the user_mode |
| macro accesses it to determine where to account time. */ |
| #define TIMER_INTERRUPT_ENTRY(N) \ |
| [--sp] = SYSCFG; \ |
| \ |
| [--sp] = P0; /*orig_p0*/ \ |
| [--sp] = R0; /*orig_r0*/ \ |
| [--sp] = (R7:0,P5:0); \ |
| p0.l = lo(IPEND); \ |
| p0.h = hi(IPEND); \ |
| r1 = [p0]; \ |
| R0 = (N); \ |
| jump __common_int_entry; |
| |
| /* This one pushes RETI without using CLI. Interrupts are enabled. */ |
| #define SAVE_CONTEXT_SYSCALL save_context_syscall |
| #define SAVE_CONTEXT save_context_with_interrupts |
| |
| #define RESTORE_ALL_SYS restore_context_no_interrupts |
| #define RESTORE_CONTEXT restore_context_with_interrupts |
| |
| #endif /* __ASSEMBLY__ */ |
| #endif /* __BFIN_ENTRY_H */ |