Commit | Line | Data |
---|---|---|
ab14de6c HC |
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 */ |