diff options
author | Heiko Carstens <heiko.carstens@de.ibm.com> | 2007-07-10 05:24:09 -0400 |
---|---|---|
committer | Martin Schwidefsky <schwidefsky@de.ibm.com> | 2007-07-10 05:24:42 -0400 |
commit | 05dd25307ca67cbfa0207bbba2e6c79fa97d125b (patch) | |
tree | 4601c5732e71883bffab31a4a786f838e8473f58 /arch/s390/kernel/ipl.c | |
parent | bccdbdc9bd7db3a32c14d8a47f1fb66e3de3c92f (diff) |
[S390] sclp: introduce some new interfaces.
Introduce some new interfaces so that random subsystems don't have to
mess around with sclp internal structures.
Signed-off-by: Heiko Carstens <heiko.carstens@de.ibm.com>
Signed-off-by: Martin Schwidefsky <schwidefsky@de.ibm.com>
Diffstat (limited to 'arch/s390/kernel/ipl.c')
-rw-r--r-- | arch/s390/kernel/ipl.c | 17 |
1 files changed, 8 insertions, 9 deletions
diff --git a/arch/s390/kernel/ipl.c b/arch/s390/kernel/ipl.c index 367caf92ea78..82b131ddd7ff 100644 --- a/arch/s390/kernel/ipl.c +++ b/arch/s390/kernel/ipl.c | |||
@@ -25,10 +25,6 @@ | |||
25 | 25 | ||
26 | #define IPL_PARM_BLOCK_VERSION 0 | 26 | #define IPL_PARM_BLOCK_VERSION 0 |
27 | 27 | ||
28 | #define SCCB_VALID (s390_readinfo_sccb.header.response_code == 0x10) | ||
29 | #define SCCB_LOADPARM (&s390_readinfo_sccb.loadparm) | ||
30 | #define SCCB_FLAG (s390_readinfo_sccb.flags) | ||
31 | |||
32 | #define IPL_UNKNOWN_STR "unknown" | 28 | #define IPL_UNKNOWN_STR "unknown" |
33 | #define IPL_CCW_STR "ccw" | 29 | #define IPL_CCW_STR "ccw" |
34 | #define IPL_FCP_STR "fcp" | 30 | #define IPL_FCP_STR "fcp" |
@@ -146,6 +142,8 @@ static struct ipl_parameter_block *dump_block_ccw; | |||
146 | 142 | ||
147 | static enum shutdown_action on_panic_action = SHUTDOWN_STOP; | 143 | static enum shutdown_action on_panic_action = SHUTDOWN_STOP; |
148 | 144 | ||
145 | static struct sclp_ipl_info sclp_ipl_info; | ||
146 | |||
149 | int diag308(unsigned long subcode, void *addr) | 147 | int diag308(unsigned long subcode, void *addr) |
150 | { | 148 | { |
151 | register unsigned long _addr asm("0") = (unsigned long) addr; | 149 | register unsigned long _addr asm("0") = (unsigned long) addr; |
@@ -375,9 +373,9 @@ static ssize_t ipl_ccw_loadparm_show(struct kset *kset, char *page) | |||
375 | { | 373 | { |
376 | char loadparm[LOADPARM_LEN + 1] = {}; | 374 | char loadparm[LOADPARM_LEN + 1] = {}; |
377 | 375 | ||
378 | if (!SCCB_VALID) | 376 | if (!sclp_ipl_info.is_valid) |
379 | return sprintf(page, "#unknown#\n"); | 377 | return sprintf(page, "#unknown#\n"); |
380 | memcpy(loadparm, SCCB_LOADPARM, LOADPARM_LEN); | 378 | memcpy(loadparm, &sclp_ipl_info.loadparm, LOADPARM_LEN); |
381 | EBCASC(loadparm, LOADPARM_LEN); | 379 | EBCASC(loadparm, LOADPARM_LEN); |
382 | strstrip(loadparm); | 380 | strstrip(loadparm); |
383 | return sprintf(page, "%s\n", loadparm); | 381 | return sprintf(page, "%s\n", loadparm); |
@@ -910,9 +908,9 @@ static int __init reipl_ccw_init(void) | |||
910 | reipl_block_ccw->hdr.blk0_len = IPL_PARM_BLK0_CCW_LEN; | 908 | reipl_block_ccw->hdr.blk0_len = IPL_PARM_BLK0_CCW_LEN; |
911 | reipl_block_ccw->hdr.pbt = DIAG308_IPL_TYPE_CCW; | 909 | reipl_block_ccw->hdr.pbt = DIAG308_IPL_TYPE_CCW; |
912 | /* check if read scp info worked and set loadparm */ | 910 | /* check if read scp info worked and set loadparm */ |
913 | if (SCCB_VALID) | 911 | if (sclp_ipl_info.is_valid) |
914 | memcpy(reipl_block_ccw->ipl_info.ccw.load_param, | 912 | memcpy(reipl_block_ccw->ipl_info.ccw.load_param, |
915 | SCCB_LOADPARM, LOADPARM_LEN); | 913 | &sclp_ipl_info.loadparm, LOADPARM_LEN); |
916 | else | 914 | else |
917 | /* read scp info failed: set empty loadparm (EBCDIC blanks) */ | 915 | /* read scp info failed: set empty loadparm (EBCDIC blanks) */ |
918 | memset(reipl_block_ccw->ipl_info.ccw.load_param, 0x40, | 916 | memset(reipl_block_ccw->ipl_info.ccw.load_param, 0x40, |
@@ -1007,7 +1005,7 @@ static int __init dump_fcp_init(void) | |||
1007 | { | 1005 | { |
1008 | int rc; | 1006 | int rc; |
1009 | 1007 | ||
1010 | if(!(SCCB_FLAG & 0x2) || !SCCB_VALID) | 1008 | if (!sclp_ipl_info.has_dump) |
1011 | return 0; /* LDIPL DUMP is not installed */ | 1009 | return 0; /* LDIPL DUMP is not installed */ |
1012 | if (!diag308_set_works) | 1010 | if (!diag308_set_works) |
1013 | return 0; | 1011 | return 0; |
@@ -1088,6 +1086,7 @@ static int __init s390_ipl_init(void) | |||
1088 | { | 1086 | { |
1089 | int rc; | 1087 | int rc; |
1090 | 1088 | ||
1089 | sclp_get_ipl_info(&sclp_ipl_info); | ||
1091 | reipl_probe(); | 1090 | reipl_probe(); |
1092 | rc = ipl_init(); | 1091 | rc = ipl_init(); |
1093 | if (rc) | 1092 | if (rc) |