]> pilppa.org Git - linux-2.6-omap-h63xx.git/blobdiff - arch/s390/kernel/ipl.c
Merge branch 'ioat-md-accel-for-linus' of git://lost.foo-projects.org/~dwillia2/git/iop
[linux-2.6-omap-h63xx.git] / arch / s390 / kernel / ipl.c
index 0ea048d350d8a8a2b51e9347823ae88327fab4cc..9a13b24ee1ab2e751715ce014823d22a60828b54 100644 (file)
 
 #define IPL_PARM_BLOCK_VERSION 0
 
-#define SCCB_VALID (s390_readinfo_sccb.header.response_code == 0x10)
-#define SCCB_LOADPARM (&s390_readinfo_sccb.loadparm)
-#define SCCB_FLAG (s390_readinfo_sccb.flags)
-
 #define IPL_UNKNOWN_STR                "unknown"
 #define IPL_CCW_STR            "ccw"
 #define IPL_FCP_STR            "fcp"
@@ -146,6 +142,8 @@ static struct ipl_parameter_block *dump_block_ccw;
 
 static enum shutdown_action on_panic_action = SHUTDOWN_STOP;
 
+static struct sclp_ipl_info sclp_ipl_info;
+
 int diag308(unsigned long subcode, void *addr)
 {
        register unsigned long _addr asm("0") = (unsigned long) addr;
@@ -314,7 +312,6 @@ static struct bin_attribute ipl_parameter_attr = {
        .attr = {
                .name = "binary_parameter",
                .mode = S_IRUGO,
-               .owner = THIS_MODULE,
        },
        .size = PAGE_SIZE,
        .read = &ipl_parameter_read,
@@ -338,7 +335,6 @@ static struct bin_attribute ipl_scp_data_attr = {
        .attr = {
                .name = "scp_data",
                .mode = S_IRUGO,
-               .owner = THIS_MODULE,
        },
        .size = PAGE_SIZE,
        .read = &ipl_scp_data_read,
@@ -375,9 +371,9 @@ static ssize_t ipl_ccw_loadparm_show(struct kset *kset, char *page)
 {
        char loadparm[LOADPARM_LEN + 1] = {};
 
-       if (!SCCB_VALID)
+       if (!sclp_ipl_info.is_valid)
                return sprintf(page, "#unknown#\n");
-       memcpy(loadparm, SCCB_LOADPARM, LOADPARM_LEN);
+       memcpy(loadparm, &sclp_ipl_info.loadparm, LOADPARM_LEN);
        EBCASC(loadparm, LOADPARM_LEN);
        strstrip(loadparm);
        return sprintf(page, "%s\n", loadparm);
@@ -816,23 +812,23 @@ static int __init ipl_register_fcp_files(void)
 {
        int rc;
 
-       rc = sysfs_create_group(&ipl_subsys.kset.kobj,
+       rc = sysfs_create_group(&ipl_subsys.kobj,
                                &ipl_fcp_attr_group);
        if (rc)
                goto out;
-       rc = sysfs_create_bin_file(&ipl_subsys.kset.kobj,
+       rc = sysfs_create_bin_file(&ipl_subsys.kobj,
                                   &ipl_parameter_attr);
        if (rc)
                goto out_ipl_parm;
-       rc = sysfs_create_bin_file(&ipl_subsys.kset.kobj,
+       rc = sysfs_create_bin_file(&ipl_subsys.kobj,
                                   &ipl_scp_data_attr);
        if (!rc)
                goto out;
 
-       sysfs_remove_bin_file(&ipl_subsys.kset.kobj, &ipl_parameter_attr);
+       sysfs_remove_bin_file(&ipl_subsys.kobj, &ipl_parameter_attr);
 
 out_ipl_parm:
-       sysfs_remove_group(&ipl_subsys.kset.kobj, &ipl_fcp_attr_group);
+       sysfs_remove_group(&ipl_subsys.kobj, &ipl_fcp_attr_group);
 out:
        return rc;
 }
@@ -846,7 +842,7 @@ static int __init ipl_init(void)
                return rc;
        switch (ipl_info.type) {
        case IPL_TYPE_CCW:
-               rc = sysfs_create_group(&ipl_subsys.kset.kobj,
+               rc = sysfs_create_group(&ipl_subsys.kobj,
                                        &ipl_ccw_attr_group);
                break;
        case IPL_TYPE_FCP:
@@ -854,11 +850,11 @@ static int __init ipl_init(void)
                rc = ipl_register_fcp_files();
                break;
        case IPL_TYPE_NSS:
-               rc = sysfs_create_group(&ipl_subsys.kset.kobj,
+               rc = sysfs_create_group(&ipl_subsys.kobj,
                                        &ipl_nss_attr_group);
                break;
        default:
-               rc = sysfs_create_group(&ipl_subsys.kset.kobj,
+               rc = sysfs_create_group(&ipl_subsys.kobj,
                                        &ipl_unknown_attr_group);
                break;
        }
@@ -885,7 +881,7 @@ static int __init reipl_nss_init(void)
 
        if (!MACHINE_IS_VM)
                return 0;
-       rc = sysfs_create_group(&reipl_subsys.kset.kobj, &reipl_nss_attr_group);
+       rc = sysfs_create_group(&reipl_subsys.kobj, &reipl_nss_attr_group);
        if (rc)
                return rc;
        strncpy(reipl_nss_name, kernel_nss_name, NSS_NAME_SIZE + 1);
@@ -900,7 +896,7 @@ static int __init reipl_ccw_init(void)
        reipl_block_ccw = (void *) get_zeroed_page(GFP_KERNEL);
        if (!reipl_block_ccw)
                return -ENOMEM;
-       rc = sysfs_create_group(&reipl_subsys.kset.kobj, &reipl_ccw_attr_group);
+       rc = sysfs_create_group(&reipl_subsys.kobj, &reipl_ccw_attr_group);
        if (rc) {
                free_page((unsigned long)reipl_block_ccw);
                return rc;
@@ -910,9 +906,9 @@ static int __init reipl_ccw_init(void)
        reipl_block_ccw->hdr.blk0_len = IPL_PARM_BLK0_CCW_LEN;
        reipl_block_ccw->hdr.pbt = DIAG308_IPL_TYPE_CCW;
        /* check if read scp info worked and set loadparm */
-       if (SCCB_VALID)
+       if (sclp_ipl_info.is_valid)
                memcpy(reipl_block_ccw->ipl_info.ccw.load_param,
-                      SCCB_LOADPARM, LOADPARM_LEN);
+                      &sclp_ipl_info.loadparm, LOADPARM_LEN);
        else
                /* read scp info failed: set empty loadparm (EBCDIC blanks) */
                memset(reipl_block_ccw->ipl_info.ccw.load_param, 0x40,
@@ -938,7 +934,7 @@ static int __init reipl_fcp_init(void)
        reipl_block_fcp = (void *) get_zeroed_page(GFP_KERNEL);
        if (!reipl_block_fcp)
                return -ENOMEM;
-       rc = sysfs_create_group(&reipl_subsys.kset.kobj, &reipl_fcp_attr_group);
+       rc = sysfs_create_group(&reipl_subsys.kobj, &reipl_fcp_attr_group);
        if (rc) {
                free_page((unsigned long)reipl_block_fcp);
                return rc;
@@ -990,7 +986,7 @@ static int __init dump_ccw_init(void)
        dump_block_ccw = (void *) get_zeroed_page(GFP_KERNEL);
        if (!dump_block_ccw)
                return -ENOMEM;
-       rc = sysfs_create_group(&dump_subsys.kset.kobj, &dump_ccw_attr_group);
+       rc = sysfs_create_group(&dump_subsys.kobj, &dump_ccw_attr_group);
        if (rc) {
                free_page((unsigned long)dump_block_ccw);
                return rc;
@@ -1007,14 +1003,14 @@ static int __init dump_fcp_init(void)
 {
        int rc;
 
-       if(!(SCCB_FLAG & 0x2) || !SCCB_VALID)
+       if (!sclp_ipl_info.has_dump)
                return 0; /* LDIPL DUMP is not installed */
        if (!diag308_set_works)
                return 0;
        dump_block_fcp = (void *) get_zeroed_page(GFP_KERNEL);
        if (!dump_block_fcp)
                return -ENOMEM;
-       rc = sysfs_create_group(&dump_subsys.kset.kobj, &dump_fcp_attr_group);
+       rc = sysfs_create_group(&dump_subsys.kobj, &dump_fcp_attr_group);
        if (rc) {
                free_page((unsigned long)dump_block_fcp);
                return rc;
@@ -1088,6 +1084,7 @@ static int __init s390_ipl_init(void)
 {
        int rc;
 
+       sclp_get_ipl_info(&sclp_ipl_info);
        reipl_probe();
        rc = ipl_init();
        if (rc)