Merge branch 'linus' into core/printk
[linux-2.6] / arch / s390 / kernel / base.S
1 /*
2  *  arch/s390/kernel/base.S
3  *
4  *    Copyright IBM Corp. 2006,2007
5  *    Author(s): Heiko Carstens <heiko.carstens@de.ibm.com>
6  *               Michael Holzheu <holzheu@de.ibm.com>
7  */
8
9 #include <asm/ptrace.h>
10 #include <asm/lowcore.h>
11
12 #ifdef CONFIG_64BIT
13
14         .globl  s390_base_mcck_handler
15 s390_base_mcck_handler:
16         basr    %r13,0
17 0:      lg      %r15,__LC_PANIC_STACK   # load panic stack
18         aghi    %r15,-STACK_FRAME_OVERHEAD
19         larl    %r1,s390_base_mcck_handler_fn
20         lg      %r1,0(%r1)
21         ltgr    %r1,%r1
22         jz      1f
23         basr    %r14,%r1
24 1:      la      %r1,4095
25         lmg     %r0,%r15,__LC_GPREGS_SAVE_AREA-4095(%r1)
26         lpswe   __LC_MCK_OLD_PSW
27
28         .section .bss
29         .globl  s390_base_mcck_handler_fn
30 s390_base_mcck_handler_fn:
31         .quad   0
32         .previous
33
34         .globl  s390_base_ext_handler
35 s390_base_ext_handler:
36         stmg    %r0,%r15,__LC_SAVE_AREA
37         basr    %r13,0
38 0:      aghi    %r15,-STACK_FRAME_OVERHEAD
39         larl    %r1,s390_base_ext_handler_fn
40         lg      %r1,0(%r1)
41         ltgr    %r1,%r1
42         jz      1f
43         basr    %r14,%r1
44 1:      lmg     %r0,%r15,__LC_SAVE_AREA
45         ni      __LC_EXT_OLD_PSW+1,0xfd # clear wait state bit
46         lpswe   __LC_EXT_OLD_PSW
47
48         .section .bss
49         .globl s390_base_ext_handler_fn
50 s390_base_ext_handler_fn:
51         .quad   0
52         .previous
53
54         .globl  s390_base_pgm_handler
55 s390_base_pgm_handler:
56         stmg    %r0,%r15,__LC_SAVE_AREA
57         basr    %r13,0
58 0:      aghi    %r15,-STACK_FRAME_OVERHEAD
59         larl    %r1,s390_base_pgm_handler_fn
60         lg      %r1,0(%r1)
61         ltgr    %r1,%r1
62         jz      1f
63         basr    %r14,%r1
64         lmg     %r0,%r15,__LC_SAVE_AREA
65         lpswe   __LC_PGM_OLD_PSW
66 1:      lpswe   disabled_wait_psw-0b(%r13)
67
68         .align  8
69 disabled_wait_psw:
70         .quad   0x0002000180000000,0x0000000000000000 + s390_base_pgm_handler
71
72         .section .bss
73         .globl s390_base_pgm_handler_fn
74 s390_base_pgm_handler_fn:
75         .quad   0
76         .previous
77
78 #else /* CONFIG_64BIT */
79
80         .globl  s390_base_mcck_handler
81 s390_base_mcck_handler:
82         basr    %r13,0
83 0:      l       %r15,__LC_PANIC_STACK   # load panic stack
84         ahi     %r15,-STACK_FRAME_OVERHEAD
85         l       %r1,2f-0b(%r13)
86         l       %r1,0(%r1)
87         ltr     %r1,%r1
88         jz      1f
89         basr    %r14,%r1
90 1:      lm      %r0,%r15,__LC_GPREGS_SAVE_AREA
91         lpsw    __LC_MCK_OLD_PSW
92
93 2:      .long   s390_base_mcck_handler_fn
94
95         .section .bss
96         .globl  s390_base_mcck_handler_fn
97 s390_base_mcck_handler_fn:
98         .long   0
99         .previous
100
101         .globl  s390_base_ext_handler
102 s390_base_ext_handler:
103         stm     %r0,%r15,__LC_SAVE_AREA
104         basr    %r13,0
105 0:      ahi     %r15,-STACK_FRAME_OVERHEAD
106         l       %r1,2f-0b(%r13)
107         l       %r1,0(%r1)
108         ltr     %r1,%r1
109         jz      1f
110         basr    %r14,%r1
111 1:      lm      %r0,%r15,__LC_SAVE_AREA
112         ni      __LC_EXT_OLD_PSW+1,0xfd # clear wait state bit
113         lpsw    __LC_EXT_OLD_PSW
114
115 2:      .long   s390_base_ext_handler_fn
116
117         .section .bss
118         .globl  s390_base_ext_handler_fn
119 s390_base_ext_handler_fn:
120         .long   0
121         .previous
122
123         .globl  s390_base_pgm_handler
124 s390_base_pgm_handler:
125         stm     %r0,%r15,__LC_SAVE_AREA
126         basr    %r13,0
127 0:      ahi     %r15,-STACK_FRAME_OVERHEAD
128         l       %r1,2f-0b(%r13)
129         l       %r1,0(%r1)
130         ltr     %r1,%r1
131         jz      1f
132         basr    %r14,%r1
133         lm      %r0,%r15,__LC_SAVE_AREA
134         lpsw    __LC_PGM_OLD_PSW
135
136 1:      lpsw    disabled_wait_psw-0b(%r13)
137
138 2:      .long   s390_base_pgm_handler_fn
139
140 disabled_wait_psw:
141         .align  8
142         .long   0x000a0000,0x00000000 + s390_base_pgm_handler
143
144         .section .bss
145         .globl  s390_base_pgm_handler_fn
146 s390_base_pgm_handler_fn:
147         .long   0
148         .previous
149
150 #endif /* CONFIG_64BIT */