diff options
author | Martin Schwidefsky <schwidefsky@de.ibm.com> | 2010-02-26 16:37:53 -0500 |
---|---|---|
committer | Martin Schwidefsky <sky@mschwide.boeblingen.de.ibm.com> | 2010-02-26 16:37:33 -0500 |
commit | 1844c9bc0b2fed3023551c1affe033ab38e90b9a (patch) | |
tree | b9aca066ec58a0b211a4931032b74093fdb6ff49 /arch/s390/kernel/sclp.S | |
parent | 73bfa5f2f71efcdcaad8d18cbed96b9d7ed86948 (diff) |
[S390] add support for compressed kernels
Add the "bzImage" compile target and the necessary code to generate
compressed kernel images. The old style uncompressed "image" target
is preserved, a simple make will build them both.
Signed-off-by: Martin Schwidefsky <schwidefsky@de.ibm.com>
Diffstat (limited to 'arch/s390/kernel/sclp.S')
-rw-r--r-- | arch/s390/kernel/sclp.S | 36 |
1 files changed, 32 insertions, 4 deletions
diff --git a/arch/s390/kernel/sclp.S b/arch/s390/kernel/sclp.S index e27ca63076d1..27af3bf3a009 100644 --- a/arch/s390/kernel/sclp.S +++ b/arch/s390/kernel/sclp.S | |||
@@ -9,8 +9,10 @@ | |||
9 | */ | 9 | */ |
10 | 10 | ||
11 | LC_EXT_NEW_PSW = 0x58 # addr of ext int handler | 11 | LC_EXT_NEW_PSW = 0x58 # addr of ext int handler |
12 | LC_EXT_NEW_PSW_64 = 0x1b0 # addr of ext int handler 64 bit | ||
12 | LC_EXT_INT_PARAM = 0x80 # addr of ext int parameter | 13 | LC_EXT_INT_PARAM = 0x80 # addr of ext int parameter |
13 | LC_EXT_INT_CODE = 0x86 # addr of ext int code | 14 | LC_EXT_INT_CODE = 0x86 # addr of ext int code |
15 | LC_AR_MODE_ID = 0xa3 | ||
14 | 16 | ||
15 | # | 17 | # |
16 | # Subroutine which waits synchronously until either an external interruption | 18 | # Subroutine which waits synchronously until either an external interruption |
@@ -30,8 +32,16 @@ _sclp_wait_int: | |||
30 | .LbaseS1: | 32 | .LbaseS1: |
31 | ahi %r15,-96 # create stack frame | 33 | ahi %r15,-96 # create stack frame |
32 | la %r8,LC_EXT_NEW_PSW # register int handler | 34 | la %r8,LC_EXT_NEW_PSW # register int handler |
33 | mvc .LoldpswS1-.LbaseS1(8,%r13),0(%r8) | 35 | la %r9,.LextpswS1-.LbaseS1(%r13) |
34 | mvc 0(8,%r8),.LextpswS1-.LbaseS1(%r13) | 36 | #ifdef CONFIG_64BIT |
37 | tm LC_AR_MODE_ID,1 | ||
38 | jno .Lesa1 | ||
39 | la %r8,LC_EXT_NEW_PSW_64 # register int handler 64 bit | ||
40 | la %r9,.LextpswS1_64-.LbaseS1(%r13) | ||
41 | .Lesa1: | ||
42 | #endif | ||
43 | mvc .LoldpswS1-.LbaseS1(16,%r13),0(%r8) | ||
44 | mvc 0(16,%r8),0(%r9) | ||
35 | lhi %r6,0x0200 # cr mask for ext int (cr0.54) | 45 | lhi %r6,0x0200 # cr mask for ext int (cr0.54) |
36 | ltr %r2,%r2 | 46 | ltr %r2,%r2 |
37 | jz .LsetctS1 | 47 | jz .LsetctS1 |
@@ -64,15 +74,19 @@ _sclp_wait_int: | |||
64 | .LtimeoutS1: | 74 | .LtimeoutS1: |
65 | lctl %c0,%c0,.LctlS1-.LbaseS1(%r13) # restore interrupt setting | 75 | lctl %c0,%c0,.LctlS1-.LbaseS1(%r13) # restore interrupt setting |
66 | # restore old handler | 76 | # restore old handler |
67 | mvc 0(8,%r8),.LoldpswS1-.LbaseS1(%r13) | 77 | mvc 0(16,%r8),.LoldpswS1-.LbaseS1(%r13) |
68 | lm %r6,%r15,120(%r15) # restore registers | 78 | lm %r6,%r15,120(%r15) # restore registers |
69 | br %r14 # return to caller | 79 | br %r14 # return to caller |
70 | 80 | ||
71 | .align 8 | 81 | .align 8 |
72 | .LoldpswS1: | 82 | .LoldpswS1: |
73 | .long 0, 0 # old ext int PSW | 83 | .long 0, 0, 0, 0 # old ext int PSW |
74 | .LextpswS1: | 84 | .LextpswS1: |
75 | .long 0x00080000, 0x80000000+.LwaitS1 # PSW to handle ext int | 85 | .long 0x00080000, 0x80000000+.LwaitS1 # PSW to handle ext int |
86 | #ifdef CONFIG_64BIT | ||
87 | .LextpswS1_64: | ||
88 | .quad 0x0000000180000000, .LwaitS1 # PSW to handle ext int, 64 bit | ||
89 | #endif | ||
76 | .LwaitpswS1: | 90 | .LwaitpswS1: |
77 | .long 0x010a0000, 0x00000000+.LloopS1 # PSW to wait for ext int | 91 | .long 0x010a0000, 0x00000000+.LloopS1 # PSW to wait for ext int |
78 | .LtimeS1: | 92 | .LtimeS1: |
@@ -250,6 +264,13 @@ _sclp_print: | |||
250 | _sclp_print_early: | 264 | _sclp_print_early: |
251 | stm %r6,%r15,24(%r15) # save registers | 265 | stm %r6,%r15,24(%r15) # save registers |
252 | ahi %r15,-96 # create stack frame | 266 | ahi %r15,-96 # create stack frame |
267 | #ifdef CONFIG_64BIT | ||
268 | tm LC_AR_MODE_ID,1 | ||
269 | jno .Lesa2 | ||
270 | ahi %r15,-80 | ||
271 | stmh %r6,%r15,96(%r15) # store upper register halves | ||
272 | .Lesa2: | ||
273 | #endif | ||
253 | lr %r10,%r2 # save string pointer | 274 | lr %r10,%r2 # save string pointer |
254 | lhi %r2,0 | 275 | lhi %r2,0 |
255 | bras %r14,_sclp_setup # enable console | 276 | bras %r14,_sclp_setup # enable console |
@@ -262,6 +283,13 @@ _sclp_print_early: | |||
262 | lhi %r2,1 | 283 | lhi %r2,1 |
263 | bras %r14,_sclp_setup # disable console | 284 | bras %r14,_sclp_setup # disable console |
264 | .LendS5: | 285 | .LendS5: |
286 | #ifdef CONFIG_64BIT | ||
287 | tm LC_AR_MODE_ID,1 | ||
288 | jno .Lesa3 | ||
289 | lmh %r6,%r15,96(%r15) # store upper register halves | ||
290 | ahi %r15,80 | ||
291 | .Lesa3: | ||
292 | #endif | ||
265 | lm %r6,%r15,120(%r15) # restore registers | 293 | lm %r6,%r15,120(%r15) # restore registers |
266 | br %r14 | 294 | br %r14 |
267 | 295 | ||