aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorMartin Schwidefsky <schwidefsky@de.ibm.com>2019-02-20 08:26:51 -0500
committerMartin Schwidefsky <schwidefsky@de.ibm.com>2019-04-26 06:34:05 -0400
commit5f1207fbe74450eb887155ba432bfc079312b0fe (patch)
treea38a8b27c8135da4ecda152156138327534d22bc
parent86c74d869d321bee4753dc3f8c3d1c3809d8ed8a (diff)
s390/ipl: provide uapi header for list directed IPL
The IPL parameter block is used as an interface between Linux and the machine to query and change the boot device and boot options. To be able to create IPL parameter block in user space and pass it as segment to kexec provide an uapi header with proper structure definitions for the block. Signed-off-by: Martin Schwidefsky <schwidefsky@de.ibm.com>
-rw-r--r--arch/s390/boot/ipl_parm.c10
-rw-r--r--arch/s390/include/asm/ipl.h103
-rw-r--r--arch/s390/include/uapi/asm/ipl.h94
-rw-r--r--arch/s390/kernel/ipl.c80
-rw-r--r--arch/s390/kernel/ipl_vmparm.c2
5 files changed, 161 insertions, 128 deletions
diff --git a/arch/s390/boot/ipl_parm.c b/arch/s390/boot/ipl_parm.c
index 849cf786db91..96777092fb14 100644
--- a/arch/s390/boot/ipl_parm.c
+++ b/arch/s390/boot/ipl_parm.c
@@ -106,12 +106,12 @@ static void append_ipl_block_parm(void)
106 delim = early_command_line + len; /* '\0' character position */ 106 delim = early_command_line + len; /* '\0' character position */
107 parm = early_command_line + len + 1; /* append right after '\0' */ 107 parm = early_command_line + len + 1; /* append right after '\0' */
108 108
109 switch (ipl_block.hdr.pbt) { 109 switch (ipl_block.pb0_hdr.pbt) {
110 case DIAG308_IPL_TYPE_CCW: 110 case IPL_PBT_CCW:
111 rc = ipl_block_get_ascii_vmparm( 111 rc = ipl_block_get_ascii_vmparm(
112 parm, COMMAND_LINE_SIZE - len - 1, &ipl_block); 112 parm, COMMAND_LINE_SIZE - len - 1, &ipl_block);
113 break; 113 break;
114 case DIAG308_IPL_TYPE_FCP: 114 case IPL_PBT_FCP:
115 rc = ipl_block_get_ascii_scpdata( 115 rc = ipl_block_get_ascii_scpdata(
116 parm, COMMAND_LINE_SIZE - len - 1, &ipl_block); 116 parm, COMMAND_LINE_SIZE - len - 1, &ipl_block);
117 break; 117 break;
@@ -238,8 +238,8 @@ void setup_memory_end(void)
238{ 238{
239#ifdef CONFIG_CRASH_DUMP 239#ifdef CONFIG_CRASH_DUMP
240 if (!OLDMEM_BASE && ipl_block_valid && 240 if (!OLDMEM_BASE && ipl_block_valid &&
241 ipl_block.hdr.pbt == DIAG308_IPL_TYPE_FCP && 241 ipl_block.pb0_hdr.pbt == IPL_PBT_FCP &&
242 ipl_block.fcp.opt == DIAG308_IPL_OPT_DUMP) { 242 ipl_block.fcp.opt == IPL_PB0_FCP_OPT_DUMP) {
243 if (!sclp_early_get_hsa_size(&memory_end) && memory_end) 243 if (!sclp_early_get_hsa_size(&memory_end) && memory_end)
244 memory_end_set = 1; 244 memory_end_set = 1;
245 } 245 }
diff --git a/arch/s390/include/asm/ipl.h b/arch/s390/include/asm/ipl.h
index 3530b613234f..878f6fd5f2e7 100644
--- a/arch/s390/include/asm/ipl.h
+++ b/arch/s390/include/asm/ipl.h
@@ -12,74 +12,34 @@
12#include <asm/types.h> 12#include <asm/types.h>
13#include <asm/cio.h> 13#include <asm/cio.h>
14#include <asm/setup.h> 14#include <asm/setup.h>
15#include <uapi/asm/ipl.h>
15 16
16#define NSS_NAME_SIZE 8 17struct ipl_parameter_block {
17 18 struct ipl_pl_hdr hdr;
18#define IPL_PARM_BLK_FCP_LEN (sizeof(struct ipl_list_hdr) + \ 19 union {
19 sizeof(struct ipl_block_fcp)) 20 struct ipl_pb_hdr pb0_hdr;
20 21 struct ipl_pb0_common common;
21#define IPL_PARM_BLK0_FCP_LEN (sizeof(struct ipl_block_fcp) + 16) 22 struct ipl_pb0_fcp fcp;
23 struct ipl_pb0_ccw ccw;
24 char raw[PAGE_SIZE - sizeof(struct ipl_pl_hdr)];
25 };
26} __packed __aligned(PAGE_SIZE);
22 27
23#define IPL_PARM_BLK_CCW_LEN (sizeof(struct ipl_list_hdr) + \ 28#define NSS_NAME_SIZE 8
24 sizeof(struct ipl_block_ccw))
25 29
26#define IPL_PARM_BLK0_CCW_LEN (sizeof(struct ipl_block_ccw) + 16) 30#define IPL_BP_FCP_LEN (sizeof(struct ipl_pl_hdr) + \
31 sizeof(struct ipl_pb0_fcp))
32#define IPL_BP0_FCP_LEN (sizeof(struct ipl_pb0_fcp))
33#define IPL_BP_CCW_LEN (sizeof(struct ipl_pl_hdr) + \
34 sizeof(struct ipl_pb0_ccw))
35#define IPL_BP0_CCW_LEN (sizeof(struct ipl_pb0_ccw))
27 36
28#define IPL_MAX_SUPPORTED_VERSION (0) 37#define IPL_MAX_SUPPORTED_VERSION (0)
29 38
30struct ipl_list_hdr { 39#define DIAG308_VMPARM_SIZE (64)
31 u32 len; 40#define DIAG308_SCPDATA_OFFSET offsetof(struct ipl_parameter_block, \
32 u8 reserved1[3]; 41 fcp.scp_data)
33 u8 version; 42#define DIAG308_SCPDATA_SIZE (PAGE_SIZE - DIAG308_SCPDATA_OFFSET)
34 u32 blk0_len;
35 u8 pbt;
36 u8 flags;
37 u16 reserved2;
38 u8 loadparm[8];
39} __attribute__((packed));
40
41struct ipl_block_fcp {
42 u8 reserved1[305-1];
43 u8 opt;
44 u8 reserved2[3];
45 u16 reserved3;
46 u16 devno;
47 u8 reserved4[4];
48 u64 wwpn;
49 u64 lun;
50 u32 bootprog;
51 u8 reserved5[12];
52 u64 br_lba;
53 u32 scp_data_len;
54 u8 reserved6[260];
55 u8 scp_data[];
56} __attribute__((packed));
57
58#define DIAG308_VMPARM_SIZE 64
59#define DIAG308_SCPDATA_SIZE (PAGE_SIZE - (sizeof(struct ipl_list_hdr) + \
60 offsetof(struct ipl_block_fcp, scp_data)))
61
62struct ipl_block_ccw {
63 u8 reserved1[84];
64 u16 reserved2 : 13;
65 u8 ssid : 3;
66 u16 devno;
67 u8 vm_flags;
68 u8 reserved3[3];
69 u32 vm_parm_len;
70 u8 nss_name[8];
71 u8 vm_parm[DIAG308_VMPARM_SIZE];
72 u8 reserved4[8];
73} __attribute__((packed));
74
75struct ipl_parameter_block {
76 struct ipl_list_hdr hdr;
77 union {
78 struct ipl_block_fcp fcp;
79 struct ipl_block_ccw ccw;
80 char raw[PAGE_SIZE - sizeof(struct ipl_list_hdr)];
81 };
82} __packed __aligned(PAGE_SIZE);
83 43
84struct save_area; 44struct save_area;
85struct save_area * __init save_area_alloc(bool is_boot_cpu); 45struct save_area * __init save_area_alloc(bool is_boot_cpu);
@@ -132,25 +92,6 @@ enum diag308_subcode {
132 DIAG308_STORE = 6, 92 DIAG308_STORE = 6,
133}; 93};
134 94
135enum diag308_ipl_type {
136 DIAG308_IPL_TYPE_FCP = 0,
137 DIAG308_IPL_TYPE_CCW = 2,
138};
139
140enum diag308_opt {
141 DIAG308_IPL_OPT_IPL = 0x10,
142 DIAG308_IPL_OPT_DUMP = 0x20,
143};
144
145enum diag308_flags {
146 DIAG308_FLAGS_LP_VALID = 0x80,
147};
148
149enum diag308_vm_flags {
150 DIAG308_VM_FLAGS_NSS_VALID = 0x80,
151 DIAG308_VM_FLAGS_VP_VALID = 0x40,
152};
153
154enum diag308_rc { 95enum diag308_rc {
155 DIAG308_RC_OK = 0x0001, 96 DIAG308_RC_OK = 0x0001,
156 DIAG308_RC_NOCONFIG = 0x0102, 97 DIAG308_RC_NOCONFIG = 0x0102,
diff --git a/arch/s390/include/uapi/asm/ipl.h b/arch/s390/include/uapi/asm/ipl.h
new file mode 100644
index 000000000000..3b513b39fca0
--- /dev/null
+++ b/arch/s390/include/uapi/asm/ipl.h
@@ -0,0 +1,94 @@
1/* SPDX-License-Identifier: GPL-2.0 */
2#ifndef _ASM_S390_UAPI_IPL_H
3#define _ASM_S390_UAPI_IPL_H
4
5#include <linux/types.h>
6
7/* IPL Parameter List header */
8struct ipl_pl_hdr {
9 __u32 len;
10 __u8 reserved1[3];
11 __u8 version;
12} __packed;
13
14/* IPL Parameter Block header */
15struct ipl_pb_hdr {
16 __u32 len;
17 __u8 pbt;
18} __packed;
19
20/* IPL Parameter Block types */
21enum ipl_pbt {
22 IPL_PBT_FCP = 0,
23 IPL_PBT_SCP_DATA = 1,
24 IPL_PBT_CCW = 2,
25};
26
27/* IPL Parameter Block 0 with common fields */
28struct ipl_pb0_common {
29 __u32 len;
30 __u8 pbt;
31 __u8 flags;
32 __u8 reserved1[2];
33 __u8 loadparm[8];
34 __u8 reserved2[84];
35} __packed;
36
37#define IPL_PB0_FLAG_LOADPARM 0x80
38
39/* IPL Parameter Block 0 for FCP */
40struct ipl_pb0_fcp {
41 __u32 len;
42 __u8 pbt;
43 __u8 reserved1[3];
44 __u8 loadparm[8];
45 __u8 reserved2[304];
46 __u8 opt;
47 __u8 reserved3[3];
48 __u8 cssid;
49 __u8 reserved4[1];
50 __u16 devno;
51 __u8 reserved5[4];
52 __u64 wwpn;
53 __u64 lun;
54 __u32 bootprog;
55 __u8 reserved6[12];
56 __u64 br_lba;
57 __u32 scp_data_len;
58 __u8 reserved7[260];
59 __u8 scp_data[];
60} __packed;
61
62#define IPL_PB0_FCP_OPT_IPL 0x10
63#define IPL_PB0_FCP_OPT_DUMP 0x20
64
65/* IPL Parameter Block 0 for CCW */
66struct ipl_pb0_ccw {
67 __u32 len;
68 __u8 pbt;
69 __u8 flags;
70 __u8 reserved1[2];
71 __u8 loadparm[8];
72 __u8 reserved2[84];
73 __u16 reserved3 : 13;
74 __u8 ssid : 3;
75 __u16 devno;
76 __u8 vm_flags;
77 __u8 reserved4[3];
78 __u32 vm_parm_len;
79 __u8 nss_name[8];
80 __u8 vm_parm[64];
81 __u8 reserved5[8];
82} __packed;
83
84#define IPL_PB0_CCW_VM_FLAG_NSS 0x80
85#define IPL_PB0_CCW_VM_FLAG_VP 0x40
86
87/* IPL Parameter Block 1 for additional SCP data */
88struct ipl_pb1_scp_data {
89 __u32 len;
90 __u8 pbt;
91 __u8 scp_data[];
92} __packed;
93
94#endif
diff --git a/arch/s390/kernel/ipl.c b/arch/s390/kernel/ipl.c
index d452f403a429..f9718bc67cd4 100644
--- a/arch/s390/kernel/ipl.c
+++ b/arch/s390/kernel/ipl.c
@@ -244,11 +244,11 @@ static __init enum ipl_type get_ipl_type(void)
244 if (!ipl_block_valid) 244 if (!ipl_block_valid)
245 return IPL_TYPE_UNKNOWN; 245 return IPL_TYPE_UNKNOWN;
246 246
247 switch (ipl_block.hdr.pbt) { 247 switch (ipl_block.pb0_hdr.pbt) {
248 case DIAG308_IPL_TYPE_CCW: 248 case IPL_PBT_CCW:
249 return IPL_TYPE_CCW; 249 return IPL_TYPE_CCW;
250 case DIAG308_IPL_TYPE_FCP: 250 case IPL_PBT_FCP:
251 if (ipl_block.fcp.opt == DIAG308_IPL_OPT_DUMP) 251 if (ipl_block.fcp.opt == IPL_PB0_FCP_OPT_DUMP)
252 return IPL_TYPE_FCP_DUMP; 252 return IPL_TYPE_FCP_DUMP;
253 else 253 else
254 return IPL_TYPE_FCP; 254 return IPL_TYPE_FCP;
@@ -272,7 +272,7 @@ static ssize_t ipl_vm_parm_show(struct kobject *kobj,
272{ 272{
273 char parm[DIAG308_VMPARM_SIZE + 1] = {}; 273 char parm[DIAG308_VMPARM_SIZE + 1] = {};
274 274
275 if (ipl_block_valid && (ipl_block.hdr.pbt == DIAG308_IPL_TYPE_CCW)) 275 if (ipl_block_valid && (ipl_block.pb0_hdr.pbt == IPL_PBT_CCW))
276 ipl_block_get_ascii_vmparm(parm, sizeof(parm), &ipl_block); 276 ipl_block_get_ascii_vmparm(parm, sizeof(parm), &ipl_block);
277 return sprintf(page, "%s\n", parm); 277 return sprintf(page, "%s\n", parm);
278} 278}
@@ -495,11 +495,11 @@ static ssize_t reipl_generic_vmparm_store(struct ipl_parameter_block *ipb,
495 memset(ipb->ccw.vm_parm, 0, DIAG308_VMPARM_SIZE); 495 memset(ipb->ccw.vm_parm, 0, DIAG308_VMPARM_SIZE);
496 ipb->ccw.vm_parm_len = ip_len; 496 ipb->ccw.vm_parm_len = ip_len;
497 if (ip_len > 0) { 497 if (ip_len > 0) {
498 ipb->ccw.vm_flags |= DIAG308_VM_FLAGS_VP_VALID; 498 ipb->ccw.vm_flags |= IPL_PB0_CCW_VM_FLAG_VP;
499 memcpy(ipb->ccw.vm_parm, buf, ip_len); 499 memcpy(ipb->ccw.vm_parm, buf, ip_len);
500 ASCEBC(ipb->ccw.vm_parm, ip_len); 500 ASCEBC(ipb->ccw.vm_parm, ip_len);
501 } else { 501 } else {
502 ipb->ccw.vm_flags &= ~DIAG308_VM_FLAGS_VP_VALID; 502 ipb->ccw.vm_flags &= ~IPL_PB0_CCW_VM_FLAG_VP;
503 } 503 }
504 504
505 return len; 505 return len;
@@ -571,9 +571,9 @@ static ssize_t reipl_fcp_scpdata_write(struct file *filp, struct kobject *kobj,
571 scpdata_len += padding; 571 scpdata_len += padding;
572 } 572 }
573 573
574 reipl_block_fcp->hdr.len = IPL_BP_FCP_LEN + scpdata_len;
575 reipl_block_fcp->fcp.len = IPL_BP0_FCP_LEN + scpdata_len;
574 reipl_block_fcp->fcp.scp_data_len = scpdata_len; 576 reipl_block_fcp->fcp.scp_data_len = scpdata_len;
575 reipl_block_fcp->hdr.len = IPL_PARM_BLK_FCP_LEN + scpdata_len;
576 reipl_block_fcp->hdr.blk0_len = IPL_PARM_BLK0_FCP_LEN + scpdata_len;
577 577
578 return count; 578 return count;
579} 579}
@@ -600,7 +600,7 @@ DEFINE_IPL_ATTR_RW(reipl_fcp, device, "0.0.%04llx\n", "0.0.%llx\n",
600static void reipl_get_ascii_loadparm(char *loadparm, 600static void reipl_get_ascii_loadparm(char *loadparm,
601 struct ipl_parameter_block *ibp) 601 struct ipl_parameter_block *ibp)
602{ 602{
603 memcpy(loadparm, ibp->hdr.loadparm, LOADPARM_LEN); 603 memcpy(loadparm, ibp->common.loadparm, LOADPARM_LEN);
604 EBCASC(loadparm, LOADPARM_LEN); 604 EBCASC(loadparm, LOADPARM_LEN);
605 loadparm[LOADPARM_LEN] = 0; 605 loadparm[LOADPARM_LEN] = 0;
606 strim(loadparm); 606 strim(loadparm);
@@ -635,11 +635,11 @@ static ssize_t reipl_generic_loadparm_store(struct ipl_parameter_block *ipb,
635 return -EINVAL; 635 return -EINVAL;
636 } 636 }
637 /* initialize loadparm with blanks */ 637 /* initialize loadparm with blanks */
638 memset(ipb->hdr.loadparm, ' ', LOADPARM_LEN); 638 memset(ipb->common.loadparm, ' ', LOADPARM_LEN);
639 /* copy and convert to ebcdic */ 639 /* copy and convert to ebcdic */
640 memcpy(ipb->hdr.loadparm, buf, lp_len); 640 memcpy(ipb->common.loadparm, buf, lp_len);
641 ASCEBC(ipb->hdr.loadparm, LOADPARM_LEN); 641 ASCEBC(ipb->common.loadparm, LOADPARM_LEN);
642 ipb->hdr.flags |= DIAG308_FLAGS_LP_VALID; 642 ipb->common.flags |= IPL_PB0_FLAG_LOADPARM;
643 return len; 643 return len;
644} 644}
645 645
@@ -769,14 +769,12 @@ static ssize_t reipl_nss_name_store(struct kobject *kobj,
769 769
770 memset(reipl_block_nss->ccw.nss_name, 0x40, NSS_NAME_SIZE); 770 memset(reipl_block_nss->ccw.nss_name, 0x40, NSS_NAME_SIZE);
771 if (nss_len > 0) { 771 if (nss_len > 0) {
772 reipl_block_nss->ccw.vm_flags |= 772 reipl_block_nss->ccw.vm_flags |= IPL_PB0_CCW_VM_FLAG_NSS;
773 DIAG308_VM_FLAGS_NSS_VALID;
774 memcpy(reipl_block_nss->ccw.nss_name, buf, nss_len); 773 memcpy(reipl_block_nss->ccw.nss_name, buf, nss_len);
775 ASCEBC(reipl_block_nss->ccw.nss_name, nss_len); 774 ASCEBC(reipl_block_nss->ccw.nss_name, nss_len);
776 EBC_TOUPPER(reipl_block_nss->ccw.nss_name, nss_len); 775 EBC_TOUPPER(reipl_block_nss->ccw.nss_name, nss_len);
777 } else { 776 } else {
778 reipl_block_nss->ccw.vm_flags &= 777 reipl_block_nss->ccw.vm_flags &= ~IPL_PB0_CCW_VM_FLAG_NSS;
779 ~DIAG308_VM_FLAGS_NSS_VALID;
780 } 778 }
781 779
782 return len; 780 return len;
@@ -896,10 +894,10 @@ static void reipl_run(struct shutdown_trigger *trigger)
896 894
897static void reipl_block_ccw_init(struct ipl_parameter_block *ipb) 895static void reipl_block_ccw_init(struct ipl_parameter_block *ipb)
898{ 896{
899 ipb->hdr.len = IPL_PARM_BLK_CCW_LEN; 897 ipb->hdr.len = IPL_BP_CCW_LEN;
900 ipb->hdr.version = IPL_PARM_BLOCK_VERSION; 898 ipb->hdr.version = IPL_PARM_BLOCK_VERSION;
901 ipb->hdr.blk0_len = IPL_PARM_BLK0_CCW_LEN; 899 ipb->pb0_hdr.len = IPL_BP0_CCW_LEN;
902 ipb->hdr.pbt = DIAG308_IPL_TYPE_CCW; 900 ipb->pb0_hdr.pbt = IPL_PBT_CCW;
903} 901}
904 902
905static void reipl_block_ccw_fill_parms(struct ipl_parameter_block *ipb) 903static void reipl_block_ccw_fill_parms(struct ipl_parameter_block *ipb)
@@ -907,17 +905,17 @@ static void reipl_block_ccw_fill_parms(struct ipl_parameter_block *ipb)
907 /* LOADPARM */ 905 /* LOADPARM */
908 /* check if read scp info worked and set loadparm */ 906 /* check if read scp info worked and set loadparm */
909 if (sclp_ipl_info.is_valid) 907 if (sclp_ipl_info.is_valid)
910 memcpy(ipb->hdr.loadparm, &sclp_ipl_info.loadparm, LOADPARM_LEN); 908 memcpy(ipb->ccw.loadparm, &sclp_ipl_info.loadparm, LOADPARM_LEN);
911 else 909 else
912 /* read scp info failed: set empty loadparm (EBCDIC blanks) */ 910 /* read scp info failed: set empty loadparm (EBCDIC blanks) */
913 memset(ipb->hdr.loadparm, 0x40, LOADPARM_LEN); 911 memset(ipb->ccw.loadparm, 0x40, LOADPARM_LEN);
914 ipb->hdr.flags = DIAG308_FLAGS_LP_VALID; 912 ipb->ccw.flags = IPL_PB0_FLAG_LOADPARM;
915 913
916 /* VM PARM */ 914 /* VM PARM */
917 if (MACHINE_IS_VM && ipl_block_valid && 915 if (MACHINE_IS_VM && ipl_block_valid &&
918 (ipl_block.ccw.vm_flags & DIAG308_VM_FLAGS_VP_VALID)) { 916 (ipl_block.ccw.vm_flags & IPL_PB0_CCW_VM_FLAG_VP)) {
919 917
920 ipb->ccw.vm_flags |= DIAG308_VM_FLAGS_VP_VALID; 918 ipb->ccw.vm_flags |= IPL_PB0_CCW_VM_FLAG_VP;
921 ipb->ccw.vm_parm_len = ipl_block.ccw.vm_parm_len; 919 ipb->ccw.vm_parm_len = ipl_block.ccw.vm_parm_len;
922 memcpy(ipb->ccw.vm_parm, 920 memcpy(ipb->ccw.vm_parm,
923 ipl_block.ccw.vm_parm, DIAG308_VMPARM_SIZE); 921 ipl_block.ccw.vm_parm, DIAG308_VMPARM_SIZE);
@@ -999,14 +997,14 @@ static int __init reipl_fcp_init(void)
999 * is invalid in the SCSI IPL parameter block, so take it 997 * is invalid in the SCSI IPL parameter block, so take it
1000 * always from sclp_ipl_info. 998 * always from sclp_ipl_info.
1001 */ 999 */
1002 memcpy(reipl_block_fcp->hdr.loadparm, sclp_ipl_info.loadparm, 1000 memcpy(reipl_block_fcp->fcp.loadparm, sclp_ipl_info.loadparm,
1003 LOADPARM_LEN); 1001 LOADPARM_LEN);
1004 } else { 1002 } else {
1005 reipl_block_fcp->hdr.len = IPL_PARM_BLK_FCP_LEN; 1003 reipl_block_fcp->hdr.len = IPL_BP_FCP_LEN;
1006 reipl_block_fcp->hdr.version = IPL_PARM_BLOCK_VERSION; 1004 reipl_block_fcp->hdr.version = IPL_PARM_BLOCK_VERSION;
1007 reipl_block_fcp->hdr.blk0_len = IPL_PARM_BLK0_FCP_LEN; 1005 reipl_block_fcp->fcp.len = IPL_BP0_FCP_LEN;
1008 reipl_block_fcp->hdr.pbt = DIAG308_IPL_TYPE_FCP; 1006 reipl_block_fcp->fcp.pbt = IPL_PBT_FCP;
1009 reipl_block_fcp->fcp.opt = DIAG308_IPL_OPT_IPL; 1007 reipl_block_fcp->fcp.opt = IPL_PB0_FCP_OPT_IPL;
1010 } 1008 }
1011 reipl_capabilities |= IPL_TYPE_FCP; 1009 reipl_capabilities |= IPL_TYPE_FCP;
1012 return 0; 1010 return 0;
@@ -1024,10 +1022,10 @@ static int __init reipl_type_init(void)
1024 /* 1022 /*
1025 * If we have an OS info reipl block, this will be used 1023 * If we have an OS info reipl block, this will be used
1026 */ 1024 */
1027 if (reipl_block->hdr.pbt == DIAG308_IPL_TYPE_FCP) { 1025 if (reipl_block->pb0_hdr.pbt == IPL_PBT_FCP) {
1028 memcpy(reipl_block_fcp, reipl_block, size); 1026 memcpy(reipl_block_fcp, reipl_block, size);
1029 reipl_type = IPL_TYPE_FCP; 1027 reipl_type = IPL_TYPE_FCP;
1030 } else if (reipl_block->hdr.pbt == DIAG308_IPL_TYPE_CCW) { 1028 } else if (reipl_block->pb0_hdr.pbt == IPL_PBT_CCW) {
1031 memcpy(reipl_block_ccw, reipl_block, size); 1029 memcpy(reipl_block_ccw, reipl_block, size);
1032 reipl_type = IPL_TYPE_CCW; 1030 reipl_type = IPL_TYPE_CCW;
1033 } 1031 }
@@ -1191,10 +1189,10 @@ static int __init dump_ccw_init(void)
1191 free_page((unsigned long)dump_block_ccw); 1189 free_page((unsigned long)dump_block_ccw);
1192 return rc; 1190 return rc;
1193 } 1191 }
1194 dump_block_ccw->hdr.len = IPL_PARM_BLK_CCW_LEN; 1192 dump_block_ccw->hdr.len = IPL_BP_CCW_LEN;
1195 dump_block_ccw->hdr.version = IPL_PARM_BLOCK_VERSION; 1193 dump_block_ccw->hdr.version = IPL_PARM_BLOCK_VERSION;
1196 dump_block_ccw->hdr.blk0_len = IPL_PARM_BLK0_CCW_LEN; 1194 dump_block_ccw->ccw.len = IPL_BP0_CCW_LEN;
1197 dump_block_ccw->hdr.pbt = DIAG308_IPL_TYPE_CCW; 1195 dump_block_ccw->ccw.pbt = IPL_PBT_CCW;
1198 dump_capabilities |= DUMP_TYPE_CCW; 1196 dump_capabilities |= DUMP_TYPE_CCW;
1199 return 0; 1197 return 0;
1200} 1198}
@@ -1213,11 +1211,11 @@ static int __init dump_fcp_init(void)
1213 free_page((unsigned long)dump_block_fcp); 1211 free_page((unsigned long)dump_block_fcp);
1214 return rc; 1212 return rc;
1215 } 1213 }
1216 dump_block_fcp->hdr.len = IPL_PARM_BLK_FCP_LEN; 1214 dump_block_fcp->hdr.len = IPL_BP_FCP_LEN;
1217 dump_block_fcp->hdr.version = IPL_PARM_BLOCK_VERSION; 1215 dump_block_fcp->hdr.version = IPL_PARM_BLOCK_VERSION;
1218 dump_block_fcp->hdr.blk0_len = IPL_PARM_BLK0_FCP_LEN; 1216 dump_block_fcp->fcp.len = IPL_BP0_FCP_LEN;
1219 dump_block_fcp->hdr.pbt = DIAG308_IPL_TYPE_FCP; 1217 dump_block_fcp->fcp.pbt = IPL_PBT_FCP;
1220 dump_block_fcp->fcp.opt = DIAG308_IPL_OPT_DUMP; 1218 dump_block_fcp->fcp.opt = IPL_PB0_FCP_OPT_DUMP;
1221 dump_capabilities |= DUMP_TYPE_FCP; 1219 dump_capabilities |= DUMP_TYPE_FCP;
1222 return 0; 1220 return 0;
1223} 1221}
@@ -1576,7 +1574,7 @@ static int __init s390_ipl_init(void)
1576 * READ SCP info provides the correct value. 1574 * READ SCP info provides the correct value.
1577 */ 1575 */
1578 if (memcmp(sclp_ipl_info.loadparm, str, sizeof(str)) == 0 && ipl_block_valid) 1576 if (memcmp(sclp_ipl_info.loadparm, str, sizeof(str)) == 0 && ipl_block_valid)
1579 memcpy(sclp_ipl_info.loadparm, ipl_block.hdr.loadparm, LOADPARM_LEN); 1577 memcpy(sclp_ipl_info.loadparm, ipl_block.ccw.loadparm, LOADPARM_LEN);
1580 shutdown_actions_init(); 1578 shutdown_actions_init();
1581 shutdown_triggers_init(); 1579 shutdown_triggers_init();
1582 return 0; 1580 return 0;
diff --git a/arch/s390/kernel/ipl_vmparm.c b/arch/s390/kernel/ipl_vmparm.c
index 41613c1617ff..af43535a976d 100644
--- a/arch/s390/kernel/ipl_vmparm.c
+++ b/arch/s390/kernel/ipl_vmparm.c
@@ -11,7 +11,7 @@ size_t ipl_block_get_ascii_vmparm(char *dest, size_t size,
11 char has_lowercase = 0; 11 char has_lowercase = 0;
12 12
13 len = 0; 13 len = 0;
14 if ((ipb->ccw.vm_flags & DIAG308_VM_FLAGS_VP_VALID) && 14 if ((ipb->ccw.vm_flags & IPL_PB0_CCW_VM_FLAG_VP) &&
15 (ipb->ccw.vm_parm_len > 0)) { 15 (ipb->ccw.vm_parm_len > 0)) {
16 16
17 len = min_t(size_t, size - 1, ipb->ccw.vm_parm_len); 17 len = min_t(size_t, size - 1, ipb->ccw.vm_parm_len);