1#ifndef __BFIN_ENTRY_H
2#define __BFIN_ENTRY_H
3
4#include <asm/setup.h>
5#include <asm/page.h>
6
7#ifdef __ASSEMBLY__
8
9#define	LFLUSH_I_AND_D	0x00000808
10#define	LSIGTRAP	5
11
12/* process bits for task_struct.flags */
13#define	PF_TRACESYS_OFF	3
14#define	PF_TRACESYS_BIT	5
15#define	PF_PTRACED_OFF	3
16#define	PF_PTRACED_BIT	4
17#define	PF_DTRACE_OFF	1
18#define	PF_DTRACE_BIT	5
19
20/* This one is used for exceptions, emulation, and NMI.  It doesn't push
21   RETI and doesn't do cli.  */
22#define SAVE_ALL_SYS		save_context_no_interrupts
23/* This is used for all normal interrupts.  It saves a minimum of registers
24   to the stack, loads the IRQ number, and jumps to common code.  */
25#define INTERRUPT_ENTRY(N)						\
26    [--sp] = SYSCFG;							\
27									\
28    [--sp] = P0;	/*orig_p0*/					\
29    [--sp] = R0;	/*orig_r0*/					\
30    [--sp] = (R7:0,P5:0);						\
31    R0 = (N);								\
32    jump __common_int_entry;
33
34/* For timer interrupts, we need to save IPEND, since the user_mode
35	   macro accesses it to determine where to account time.  */
36#define TIMER_INTERRUPT_ENTRY(N)					\
37    [--sp] = SYSCFG;							\
38									\
39    [--sp] = P0;	/*orig_p0*/					\
40    [--sp] = R0;	/*orig_r0*/					\
41    [--sp] = (R7:0,P5:0);						\
42    p0.l = lo(IPEND);							\
43    p0.h = hi(IPEND);							\
44    r1 = [p0];								\
45    R0 = (N);								\
46    jump __common_int_entry;
47
48/* This one pushes RETI without using CLI.  Interrupts are enabled.  */
49#define SAVE_CONTEXT_SYSCALL	save_context_syscall
50#define SAVE_CONTEXT		save_context_with_interrupts
51
52#define RESTORE_ALL_SYS		restore_context_no_interrupts
53#define RESTORE_CONTEXT		restore_context_with_interrupts
54
55#endif				/* __ASSEMBLY__ */
56#endif				/* __BFIN_ENTRY_H */
57