These changes are the raw update to linux-4.4.6-rt14. Kernel sources
[kvmfornfv.git] / kernel / drivers / s390 / char / sclp_early.c
index f45cd0c..7bc6df3 100644 (file)
@@ -49,23 +49,10 @@ struct read_info_sccb {
 } __packed __aligned(PAGE_SIZE);
 
 static char sccb_early[PAGE_SIZE] __aligned(PAGE_SIZE) __initdata;
-static unsigned int sclp_con_has_vt220 __initdata;
-static unsigned int sclp_con_has_linemode __initdata;
-static unsigned long sclp_hsa_size;
-static unsigned int sclp_max_cpu;
 static struct sclp_ipl_info sclp_ipl_info;
-static unsigned char sclp_siif;
-static unsigned char sclp_sigpif;
-static u32 sclp_ibc;
-static unsigned int sclp_mtid;
-static unsigned int sclp_mtid_cp;
-static unsigned int sclp_mtid_max;
-static unsigned int sclp_mtid_prev;
-
-u64 sclp_facilities;
-u8 sclp_fac84;
-unsigned long long sclp_rzm;
-unsigned long long sclp_rnmax;
+
+struct sclp_info sclp;
+EXPORT_SYMBOL(sclp);
 
 static int __init sclp_cmd_sync_early(sclp_cmdw_t cmd, void *sccb)
 {
@@ -112,28 +99,29 @@ static int __init sclp_read_info_early(struct read_info_sccb *sccb)
 
 static void __init sclp_facilities_detect(struct read_info_sccb *sccb)
 {
-       struct sclp_cpu_entry *cpue;
+       struct sclp_core_entry *cpue;
        u16 boot_cpu_address, cpu;
 
        if (sclp_read_info_early(sccb))
                return;
 
-       sclp_facilities = sccb->facilities;
-       sclp_fac84 = sccb->fac84;
+       sclp.facilities = sccb->facilities;
+       sclp.has_sprp = !!(sccb->fac84 & 0x02);
+       sclp.has_core_type = !!(sccb->fac84 & 0x01);
        if (sccb->fac85 & 0x02)
                S390_lowcore.machine_flags |= MACHINE_FLAG_ESOP;
-       sclp_rnmax = sccb->rnmax ? sccb->rnmax : sccb->rnmax2;
-       sclp_rzm = sccb->rnsize ? sccb->rnsize : sccb->rnsize2;
-       sclp_rzm <<= 20;
-       sclp_ibc = sccb->ibc;
+       sclp.rnmax = sccb->rnmax ? sccb->rnmax : sccb->rnmax2;
+       sclp.rzm = sccb->rnsize ? sccb->rnsize : sccb->rnsize2;
+       sclp.rzm <<= 20;
+       sclp.ibc = sccb->ibc;
 
        if (!sccb->hcpua) {
                if (MACHINE_IS_VM)
-                       sclp_max_cpu = 64;
+                       sclp.max_cores = 64;
                else
-                       sclp_max_cpu = sccb->ncpurl;
+                       sclp.max_cores = sccb->ncpurl;
        } else {
-               sclp_max_cpu = sccb->hcpua + 1;
+               sclp.max_cores = sccb->hcpua + 1;
        }
 
        boot_cpu_address = stap();
@@ -141,8 +129,8 @@ static void __init sclp_facilities_detect(struct read_info_sccb *sccb)
        for (cpu = 0; cpu < sccb->ncpurl; cpue++, cpu++) {
                if (boot_cpu_address != cpue->core_id)
                        continue;
-               sclp_siif = cpue->siif;
-               sclp_sigpif = cpue->sigpif;
+               sclp.has_siif = cpue->siif;
+               sclp.has_sigpif = cpue->sigpif;
                break;
        }
 
@@ -152,68 +140,9 @@ static void __init sclp_facilities_detect(struct read_info_sccb *sccb)
                sclp_ipl_info.has_dump = 1;
        memcpy(&sclp_ipl_info.loadparm, &sccb->loadparm, LOADPARM_LEN);
 
-       sclp_mtid = (sccb->fac42 & 0x80) ? (sccb->fac42 & 31) : 0;
-       sclp_mtid_cp = (sccb->fac42 & 0x80) ? (sccb->fac43 & 31) : 0;
-       sclp_mtid_max = max(sclp_mtid, sclp_mtid_cp);
-       sclp_mtid_prev = (sccb->fac42 & 0x80) ? (sccb->fac66 & 31) : 0;
-}
-
-bool __init sclp_has_linemode(void)
-{
-       return !!sclp_con_has_linemode;
-}
-
-bool __init sclp_has_vt220(void)
-{
-       return !!sclp_con_has_vt220;
-}
-
-unsigned long long sclp_get_rnmax(void)
-{
-       return sclp_rnmax;
-}
-
-unsigned long long sclp_get_rzm(void)
-{
-       return sclp_rzm;
-}
-
-unsigned int sclp_get_max_cpu(void)
-{
-       return sclp_max_cpu;
-}
-
-int sclp_has_siif(void)
-{
-       return sclp_siif;
-}
-EXPORT_SYMBOL(sclp_has_siif);
-
-int sclp_has_sigpif(void)
-{
-       return sclp_sigpif;
-}
-EXPORT_SYMBOL(sclp_has_sigpif);
-
-unsigned int sclp_get_ibc(void)
-{
-       return sclp_ibc;
-}
-EXPORT_SYMBOL(sclp_get_ibc);
-
-unsigned int sclp_get_mtid(u8 cpu_type)
-{
-       return cpu_type ? sclp_mtid : sclp_mtid_cp;
-}
-
-unsigned int sclp_get_mtid_max(void)
-{
-       return sclp_mtid_max;
-}
-
-unsigned int sclp_get_mtid_prev(void)
-{
-       return sclp_mtid_prev;
+       sclp.mtid = (sccb->fac42 & 0x80) ? (sccb->fac42 & 31) : 0;
+       sclp.mtid_cp = (sccb->fac42 & 0x80) ? (sccb->fac43 & 31) : 0;
+       sclp.mtid_prev = (sccb->fac42 & 0x80) ? (sccb->fac66 & 31) : 0;
 }
 
 /*
@@ -287,11 +216,6 @@ static long __init sclp_hsa_copy_wait(struct sccb_header *sccb)
        return (((struct sdias_sccb *) sccb)->evbuf.blk_cnt - 1) * PAGE_SIZE;
 }
 
-unsigned long sclp_get_hsa_size(void)
-{
-       return sclp_hsa_size;
-}
-
 static void __init sclp_hsa_size_detect(void *sccb)
 {
        long size;
@@ -314,7 +238,7 @@ static void __init sclp_hsa_size_detect(void *sccb)
        if (size < 0)
                return;
 out:
-       sclp_hsa_size = size;
+       sclp.hsa_size = size;
 }
 
 static unsigned int __init sclp_con_check_linemode(struct init_sccb *sccb)
@@ -332,10 +256,10 @@ static void __init sclp_console_detect(struct init_sccb *sccb)
                return;
 
        if (sccb->sclp_send_mask & EVTYP_VT220MSG_MASK)
-               sclp_con_has_vt220 = 1;
+               sclp.has_vt220 = 1;
 
        if (sclp_con_check_linemode(sccb))
-               sclp_con_has_linemode = 1;
+               sclp.has_linemode = 1;
 }
 
 void __init sclp_early_detect(void)