diff mbox series

[v1,1/2] s390/setup: set control program code via diag 318

Message ID 1543961190-31521-2-git-send-email-walling@linux.ibm.com (mailing list archive)
State New, archived
Headers show
Series Use DIAG318 to set Control Program Name & Version Codes | expand

Commit Message

Collin Walling Dec. 4, 2018, 10:06 p.m. UTC
The new s390x instruction, diagnose 318, sets the control program name 
code (CPNC) and control program version code (CPVC) to provide useful 
information regarding the OS during debugging. The CPNC is explicitly 
set to 4 to indicate a Linux/KVM environment.

The CPVC is a 7-byte value containing:

 - 3-byte Linux version code
 - 3-byte unique value, currently set to 0
 - 1-byte trailing null

Signed-off-by: Collin Walling <walling@linux.ibm.com>
Acked-by: Janosch Frank <frankja@linux.ibm.com>
Acked-by: Heiko Carstens <heiko.carstens@de.ibm.com>
---
 arch/s390/include/asm/diag.h   | 12 ++++++++++++
 arch/s390/include/asm/sclp.h   |  1 +
 arch/s390/kernel/diag.c        |  1 +
 arch/s390/kernel/setup.c       | 21 +++++++++++++++++++++
 drivers/s390/char/sclp.h       |  4 +++-
 drivers/s390/char/sclp_early.c |  2 ++
 6 files changed, 40 insertions(+), 1 deletion(-)

Comments

David Hildenbrand Dec. 5, 2018, 8:50 a.m. UTC | #1
On 04.12.18 23:06, Collin Walling wrote:
> The new s390x instruction, diagnose 318, sets the control program name 
> code (CPNC) and control program version code (CPVC) to provide useful 
> information regarding the OS during debugging. The CPNC is explicitly 
> set to 4 to indicate a Linux/KVM environment.
> 
> The CPVC is a 7-byte value containing:
> 
>  - 3-byte Linux version code
>  - 3-byte unique value, currently set to 0
>  - 1-byte trailing null
> 
> Signed-off-by: Collin Walling <walling@linux.ibm.com>
> Acked-by: Janosch Frank <frankja@linux.ibm.com>
> Acked-by: Heiko Carstens <heiko.carstens@de.ibm.com>
> ---
>  arch/s390/include/asm/diag.h   | 12 ++++++++++++
>  arch/s390/include/asm/sclp.h   |  1 +
>  arch/s390/kernel/diag.c        |  1 +
>  arch/s390/kernel/setup.c       | 21 +++++++++++++++++++++
>  drivers/s390/char/sclp.h       |  4 +++-
>  drivers/s390/char/sclp_early.c |  2 ++
>  6 files changed, 40 insertions(+), 1 deletion(-)
> 
> diff --git a/arch/s390/include/asm/diag.h b/arch/s390/include/asm/diag.h
> index cdbaad5..19562be 100644
> --- a/arch/s390/include/asm/diag.h
> +++ b/arch/s390/include/asm/diag.h
> @@ -32,6 +32,7 @@ enum diag_stat_enum {
>  	DIAG_STAT_X2FC,
>  	DIAG_STAT_X304,
>  	DIAG_STAT_X308,
> +	DIAG_STAT_X318,
>  	DIAG_STAT_X500,
>  	NR_DIAG_STAT
>  };
> @@ -293,6 +294,17 @@ struct diag26c_mac_resp {
>  	u8	res[2];
>  } __aligned(8);
>  
> +#define CPNC_LINUX		0x4
> +union diag318_info {
> +	unsigned long val;
> +	struct {
> +		unsigned int cpnc : 8;
> +		unsigned int cpvc_linux : 24;
> +		unsigned char cpvc_distro[3];
> +		unsigned char zero;
> +	};
> +};
> +
>  int diag204(unsigned long subcode, unsigned long size, void *addr);
>  int diag224(void *ptr);
>  int diag26c(void *req, void *resp, enum diag26c_sc subcode);
> diff --git a/arch/s390/include/asm/sclp.h b/arch/s390/include/asm/sclp.h
> index 0cd4bda..ef4c9de 100644
> --- a/arch/s390/include/asm/sclp.h
> +++ b/arch/s390/include/asm/sclp.h
> @@ -78,6 +78,7 @@ struct sclp_info {
>  	unsigned char has_skey : 1;
>  	unsigned char has_kss : 1;
>  	unsigned char has_gisaf : 1;
> +	unsigned char has_diag318 : 1;
>  	unsigned int ibc;
>  	unsigned int mtid;
>  	unsigned int mtid_cp;
> diff --git a/arch/s390/kernel/diag.c b/arch/s390/kernel/diag.c
> index 53a5316..7edaa73 100644
> --- a/arch/s390/kernel/diag.c
> +++ b/arch/s390/kernel/diag.c
> @@ -45,6 +45,7 @@ static const struct diag_desc diag_map[NR_DIAG_STAT] = {
>  	[DIAG_STAT_X2FC] = { .code = 0x2fc, .name = "Guest Performance Data" },
>  	[DIAG_STAT_X304] = { .code = 0x304, .name = "Partition-Resource Service" },
>  	[DIAG_STAT_X308] = { .code = 0x308, .name = "List-Directed IPL" },
> +	[DIAG_STAT_X318] = { .code = 0x318, .name = "CP Name and Version Codes" },
>  	[DIAG_STAT_X500] = { .code = 0x500, .name = "Virtio Service" },
>  };
>  
> diff --git a/arch/s390/kernel/setup.c b/arch/s390/kernel/setup.c
> index 72dd23e..9999bcc 100644
> --- a/arch/s390/kernel/setup.c
> +++ b/arch/s390/kernel/setup.c
> @@ -49,6 +49,7 @@
>  #include <linux/memory.h>
>  #include <linux/compat.h>
>  #include <linux/start_kernel.h>
> +#include <linux/version.h>
>  
>  #include <asm/ipl.h>
>  #include <asm/facility.h>
> @@ -990,6 +991,25 @@ static void __init setup_task_size(void)
>  }
>  
>  /*
> + * Issue diagnose 318 to set the control program name and
> + * version codes.
> + */
> +static void __init setup_control_program_code(void)
> +{
> +	union diag318_info diag318_info = {
> +		.cpnc = CPNC_LINUX,
> +		.cpvc_linux = LINUX_VERSION_CODE,
> +		.cpvc_distro = {0},
> +	};
> +
> +	if (!sclp.has_diag318)
> +		return;
> +
> +	diag_stat_inc(DIAG_STAT_X318);
> +	asm volatile("diag %0,0,0x318\n" : : "d" (diag318_info.val));
> +}
> +
> +/*
>   * Setup function called from init/main.c just after the banner
>   * was printed.
>   */
> @@ -1031,6 +1051,7 @@ void __init setup_arch(char **cmdline_p)
>  	os_info_init();
>  	setup_ipl();
>  	setup_task_size();
> +	setup_control_program_code();
>  
>  	/* Do some memory reservations *before* memory is added to memblock */
>  	reserve_memory_end();
> diff --git a/drivers/s390/char/sclp.h b/drivers/s390/char/sclp.h
> index b3fcc24..367e9d3 100644
> --- a/drivers/s390/char/sclp.h
> +++ b/drivers/s390/char/sclp.h
> @@ -195,7 +195,9 @@ struct read_info_sccb {
>  	u16	hcpua;			/* 120-121 */
>  	u8	_pad_122[124 - 122];	/* 122-123 */
>  	u32	hmfai;			/* 124-127 */
> -	u8	_pad_128[4096 - 128];	/* 128-4095 */
> +	u8	_pad_128[134 - 128];	/* 128-133 */
> +	u8	byte_134;				/* 134 */
> +	u8	_pad_135[4096 - 135];	/* 135-4095 */
>  } __packed __aligned(PAGE_SIZE);
>  
>  struct read_storage_sccb {
> diff --git a/drivers/s390/char/sclp_early.c b/drivers/s390/char/sclp_early.c
> index e792cee..8332788 100644
> --- a/drivers/s390/char/sclp_early.c
> +++ b/drivers/s390/char/sclp_early.c
> @@ -44,6 +44,8 @@ static void __init sclp_early_facilities_detect(struct read_info_sccb *sccb)
>  		S390_lowcore.machine_flags |= MACHINE_FLAG_ESOP;
>  	if (sccb->fac91 & 0x40)
>  		S390_lowcore.machine_flags |= MACHINE_FLAG_TLB_GUEST;
> +	if (sccb->cpuoff > 134)
> +		sclp.has_diag318 = !!(sccb->byte_134 & 0x80);
>  	sclp.rnmax = sccb->rnmax ? sccb->rnmax : sccb->rnmax2;
>  	sclp.rzm = sccb->rnsize ? sccb->rnsize : sccb->rnsize2;
>  	sclp.rzm <<= 20;
> 

Reviewed-by: David Hildenbrand <david@redhat.com>
Cornelia Huck Dec. 5, 2018, 10:59 a.m. UTC | #2
On Tue,  4 Dec 2018 17:06:29 -0500
Collin Walling <walling@linux.ibm.com> wrote:

> The new s390x instruction, diagnose 318, sets the control program name 
> code (CPNC) and control program version code (CPVC) to provide useful 
> information regarding the OS during debugging. The CPNC is explicitly 
> set to 4 to indicate a Linux/KVM environment.
> 
> The CPVC is a 7-byte value containing:
> 
>  - 3-byte Linux version code
>  - 3-byte unique value, currently set to 0
>  - 1-byte trailing null
> 
> Signed-off-by: Collin Walling <walling@linux.ibm.com>
> Acked-by: Janosch Frank <frankja@linux.ibm.com>
> Acked-by: Heiko Carstens <heiko.carstens@de.ibm.com>
> ---
>  arch/s390/include/asm/diag.h   | 12 ++++++++++++
>  arch/s390/include/asm/sclp.h   |  1 +
>  arch/s390/kernel/diag.c        |  1 +
>  arch/s390/kernel/setup.c       | 21 +++++++++++++++++++++
>  drivers/s390/char/sclp.h       |  4 +++-
>  drivers/s390/char/sclp_early.c |  2 ++
>  6 files changed, 40 insertions(+), 1 deletion(-)

Reviewed-by: Cornelia Huck <cohuck@redhat.com>
Collin Walling Dec. 5, 2018, 3 p.m. UTC | #3
On 12/5/18 3:50 AM, David Hildenbrand wrote:
> On 04.12.18 23:06, Collin Walling wrote:
>> The new s390x instruction, diagnose 318, sets the control program name 
>> code (CPNC) and control program version code (CPVC) to provide useful 
>> information regarding the OS during debugging. The CPNC is explicitly 
>> set to 4 to indicate a Linux/KVM environment.
>>
>> The CPVC is a 7-byte value containing:
>>
>>  - 3-byte Linux version code
>>  - 3-byte unique value, currently set to 0
>>  - 1-byte trailing null
>>
>> Signed-off-by: Collin Walling <walling@linux.ibm.com>
>> Acked-by: Janosch Frank <frankja@linux.ibm.com>
>> Acked-by: Heiko Carstens <heiko.carstens@de.ibm.com>
>> ---
>>  arch/s390/include/asm/diag.h   | 12 ++++++++++++
>>  arch/s390/include/asm/sclp.h   |  1 +
>>  arch/s390/kernel/diag.c        |  1 +
>>  arch/s390/kernel/setup.c       | 21 +++++++++++++++++++++
>>  drivers/s390/char/sclp.h       |  4 +++-
>>  drivers/s390/char/sclp_early.c |  2 ++
>>  6 files changed, 40 insertions(+), 1 deletion(-)
>>
>> diff --git a/arch/s390/include/asm/diag.h b/arch/s390/include/asm/diag.h
>> index cdbaad5..19562be 100644
>> --- a/arch/s390/include/asm/diag.h
>> +++ b/arch/s390/include/asm/diag.h
>> @@ -32,6 +32,7 @@ enum diag_stat_enum {
>>  	DIAG_STAT_X2FC,
>>  	DIAG_STAT_X304,
>>  	DIAG_STAT_X308,
>> +	DIAG_STAT_X318,
>>  	DIAG_STAT_X500,
>>  	NR_DIAG_STAT
>>  };
>> @@ -293,6 +294,17 @@ struct diag26c_mac_resp {
>>  	u8	res[2];
>>  } __aligned(8);
>>  
>> +#define CPNC_LINUX		0x4
>> +union diag318_info {
>> +	unsigned long val;
>> +	struct {
>> +		unsigned int cpnc : 8;
>> +		unsigned int cpvc_linux : 24;
>> +		unsigned char cpvc_distro[3];
>> +		unsigned char zero;
>> +	};
>> +};
>> +
>>  int diag204(unsigned long subcode, unsigned long size, void *addr);
>>  int diag224(void *ptr);
>>  int diag26c(void *req, void *resp, enum diag26c_sc subcode);
>> diff --git a/arch/s390/include/asm/sclp.h b/arch/s390/include/asm/sclp.h
>> index 0cd4bda..ef4c9de 100644
>> --- a/arch/s390/include/asm/sclp.h
>> +++ b/arch/s390/include/asm/sclp.h
>> @@ -78,6 +78,7 @@ struct sclp_info {
>>  	unsigned char has_skey : 1;
>>  	unsigned char has_kss : 1;
>>  	unsigned char has_gisaf : 1;
>> +	unsigned char has_diag318 : 1;
>>  	unsigned int ibc;
>>  	unsigned int mtid;
>>  	unsigned int mtid_cp;
>> diff --git a/arch/s390/kernel/diag.c b/arch/s390/kernel/diag.c
>> index 53a5316..7edaa73 100644
>> --- a/arch/s390/kernel/diag.c
>> +++ b/arch/s390/kernel/diag.c
>> @@ -45,6 +45,7 @@ static const struct diag_desc diag_map[NR_DIAG_STAT] = {
>>  	[DIAG_STAT_X2FC] = { .code = 0x2fc, .name = "Guest Performance Data" },
>>  	[DIAG_STAT_X304] = { .code = 0x304, .name = "Partition-Resource Service" },
>>  	[DIAG_STAT_X308] = { .code = 0x308, .name = "List-Directed IPL" },
>> +	[DIAG_STAT_X318] = { .code = 0x318, .name = "CP Name and Version Codes" },
>>  	[DIAG_STAT_X500] = { .code = 0x500, .name = "Virtio Service" },
>>  };
>>  
>> diff --git a/arch/s390/kernel/setup.c b/arch/s390/kernel/setup.c
>> index 72dd23e..9999bcc 100644
>> --- a/arch/s390/kernel/setup.c
>> +++ b/arch/s390/kernel/setup.c
>> @@ -49,6 +49,7 @@
>>  #include <linux/memory.h>
>>  #include <linux/compat.h>
>>  #include <linux/start_kernel.h>
>> +#include <linux/version.h>
>>  
>>  #include <asm/ipl.h>
>>  #include <asm/facility.h>
>> @@ -990,6 +991,25 @@ static void __init setup_task_size(void)
>>  }
>>  
>>  /*
>> + * Issue diagnose 318 to set the control program name and
>> + * version codes.
>> + */
>> +static void __init setup_control_program_code(void)
>> +{
>> +	union diag318_info diag318_info = {
>> +		.cpnc = CPNC_LINUX,
>> +		.cpvc_linux = LINUX_VERSION_CODE,
>> +		.cpvc_distro = {0},
>> +	};
>> +
>> +	if (!sclp.has_diag318)
>> +		return;
>> +
>> +	diag_stat_inc(DIAG_STAT_X318);
>> +	asm volatile("diag %0,0,0x318\n" : : "d" (diag318_info.val));
>> +}
>> +
>> +/*
>>   * Setup function called from init/main.c just after the banner
>>   * was printed.
>>   */
>> @@ -1031,6 +1051,7 @@ void __init setup_arch(char **cmdline_p)
>>  	os_info_init();
>>  	setup_ipl();
>>  	setup_task_size();
>> +	setup_control_program_code();
>>  
>>  	/* Do some memory reservations *before* memory is added to memblock */
>>  	reserve_memory_end();
>> diff --git a/drivers/s390/char/sclp.h b/drivers/s390/char/sclp.h
>> index b3fcc24..367e9d3 100644
>> --- a/drivers/s390/char/sclp.h
>> +++ b/drivers/s390/char/sclp.h
>> @@ -195,7 +195,9 @@ struct read_info_sccb {
>>  	u16	hcpua;			/* 120-121 */
>>  	u8	_pad_122[124 - 122];	/* 122-123 */
>>  	u32	hmfai;			/* 124-127 */
>> -	u8	_pad_128[4096 - 128];	/* 128-4095 */
>> +	u8	_pad_128[134 - 128];	/* 128-133 */
>> +	u8	byte_134;				/* 134 */
>> +	u8	_pad_135[4096 - 135];	/* 135-4095 */
>>  } __packed __aligned(PAGE_SIZE);
>>  
>>  struct read_storage_sccb {
>> diff --git a/drivers/s390/char/sclp_early.c b/drivers/s390/char/sclp_early.c
>> index e792cee..8332788 100644
>> --- a/drivers/s390/char/sclp_early.c
>> +++ b/drivers/s390/char/sclp_early.c
>> @@ -44,6 +44,8 @@ static void __init sclp_early_facilities_detect(struct read_info_sccb *sccb)
>>  		S390_lowcore.machine_flags |= MACHINE_FLAG_ESOP;
>>  	if (sccb->fac91 & 0x40)
>>  		S390_lowcore.machine_flags |= MACHINE_FLAG_TLB_GUEST;
>> +	if (sccb->cpuoff > 134)
>> +		sclp.has_diag318 = !!(sccb->byte_134 & 0x80);
>>  	sclp.rnmax = sccb->rnmax ? sccb->rnmax : sccb->rnmax2;
>>  	sclp.rzm = sccb->rnsize ? sccb->rnsize : sccb->rnsize2;
>>  	sclp.rzm <<= 20;
>>
> 
> Reviewed-by: David Hildenbrand <david@redhat.com>
> 

Thanks!
Collin Walling Dec. 5, 2018, 3 p.m. UTC | #4
On 12/5/18 5:59 AM, Cornelia Huck wrote:
> On Tue,  4 Dec 2018 17:06:29 -0500
> Collin Walling <walling@linux.ibm.com> wrote:
> 
>> The new s390x instruction, diagnose 318, sets the control program name 
>> code (CPNC) and control program version code (CPVC) to provide useful 
>> information regarding the OS during debugging. The CPNC is explicitly 
>> set to 4 to indicate a Linux/KVM environment.
>>
>> The CPVC is a 7-byte value containing:
>>
>>  - 3-byte Linux version code
>>  - 3-byte unique value, currently set to 0
>>  - 1-byte trailing null
>>
>> Signed-off-by: Collin Walling <walling@linux.ibm.com>
>> Acked-by: Janosch Frank <frankja@linux.ibm.com>
>> Acked-by: Heiko Carstens <heiko.carstens@de.ibm.com>
>> ---
>>  arch/s390/include/asm/diag.h   | 12 ++++++++++++
>>  arch/s390/include/asm/sclp.h   |  1 +
>>  arch/s390/kernel/diag.c        |  1 +
>>  arch/s390/kernel/setup.c       | 21 +++++++++++++++++++++
>>  drivers/s390/char/sclp.h       |  4 +++-
>>  drivers/s390/char/sclp_early.c |  2 ++
>>  6 files changed, 40 insertions(+), 1 deletion(-)
> 
> Reviewed-by: Cornelia Huck <cohuck@redhat.com>
> 

Thanks!
diff mbox series

Patch

diff --git a/arch/s390/include/asm/diag.h b/arch/s390/include/asm/diag.h
index cdbaad5..19562be 100644
--- a/arch/s390/include/asm/diag.h
+++ b/arch/s390/include/asm/diag.h
@@ -32,6 +32,7 @@  enum diag_stat_enum {
 	DIAG_STAT_X2FC,
 	DIAG_STAT_X304,
 	DIAG_STAT_X308,
+	DIAG_STAT_X318,
 	DIAG_STAT_X500,
 	NR_DIAG_STAT
 };
@@ -293,6 +294,17 @@  struct diag26c_mac_resp {
 	u8	res[2];
 } __aligned(8);
 
+#define CPNC_LINUX		0x4
+union diag318_info {
+	unsigned long val;
+	struct {
+		unsigned int cpnc : 8;
+		unsigned int cpvc_linux : 24;
+		unsigned char cpvc_distro[3];
+		unsigned char zero;
+	};
+};
+
 int diag204(unsigned long subcode, unsigned long size, void *addr);
 int diag224(void *ptr);
 int diag26c(void *req, void *resp, enum diag26c_sc subcode);
diff --git a/arch/s390/include/asm/sclp.h b/arch/s390/include/asm/sclp.h
index 0cd4bda..ef4c9de 100644
--- a/arch/s390/include/asm/sclp.h
+++ b/arch/s390/include/asm/sclp.h
@@ -78,6 +78,7 @@  struct sclp_info {
 	unsigned char has_skey : 1;
 	unsigned char has_kss : 1;
 	unsigned char has_gisaf : 1;
+	unsigned char has_diag318 : 1;
 	unsigned int ibc;
 	unsigned int mtid;
 	unsigned int mtid_cp;
diff --git a/arch/s390/kernel/diag.c b/arch/s390/kernel/diag.c
index 53a5316..7edaa73 100644
--- a/arch/s390/kernel/diag.c
+++ b/arch/s390/kernel/diag.c
@@ -45,6 +45,7 @@  static const struct diag_desc diag_map[NR_DIAG_STAT] = {
 	[DIAG_STAT_X2FC] = { .code = 0x2fc, .name = "Guest Performance Data" },
 	[DIAG_STAT_X304] = { .code = 0x304, .name = "Partition-Resource Service" },
 	[DIAG_STAT_X308] = { .code = 0x308, .name = "List-Directed IPL" },
+	[DIAG_STAT_X318] = { .code = 0x318, .name = "CP Name and Version Codes" },
 	[DIAG_STAT_X500] = { .code = 0x500, .name = "Virtio Service" },
 };
 
diff --git a/arch/s390/kernel/setup.c b/arch/s390/kernel/setup.c
index 72dd23e..9999bcc 100644
--- a/arch/s390/kernel/setup.c
+++ b/arch/s390/kernel/setup.c
@@ -49,6 +49,7 @@ 
 #include <linux/memory.h>
 #include <linux/compat.h>
 #include <linux/start_kernel.h>
+#include <linux/version.h>
 
 #include <asm/ipl.h>
 #include <asm/facility.h>
@@ -990,6 +991,25 @@  static void __init setup_task_size(void)
 }
 
 /*
+ * Issue diagnose 318 to set the control program name and
+ * version codes.
+ */
+static void __init setup_control_program_code(void)
+{
+	union diag318_info diag318_info = {
+		.cpnc = CPNC_LINUX,
+		.cpvc_linux = LINUX_VERSION_CODE,
+		.cpvc_distro = {0},
+	};
+
+	if (!sclp.has_diag318)
+		return;
+
+	diag_stat_inc(DIAG_STAT_X318);
+	asm volatile("diag %0,0,0x318\n" : : "d" (diag318_info.val));
+}
+
+/*
  * Setup function called from init/main.c just after the banner
  * was printed.
  */
@@ -1031,6 +1051,7 @@  void __init setup_arch(char **cmdline_p)
 	os_info_init();
 	setup_ipl();
 	setup_task_size();
+	setup_control_program_code();
 
 	/* Do some memory reservations *before* memory is added to memblock */
 	reserve_memory_end();
diff --git a/drivers/s390/char/sclp.h b/drivers/s390/char/sclp.h
index b3fcc24..367e9d3 100644
--- a/drivers/s390/char/sclp.h
+++ b/drivers/s390/char/sclp.h
@@ -195,7 +195,9 @@  struct read_info_sccb {
 	u16	hcpua;			/* 120-121 */
 	u8	_pad_122[124 - 122];	/* 122-123 */
 	u32	hmfai;			/* 124-127 */
-	u8	_pad_128[4096 - 128];	/* 128-4095 */
+	u8	_pad_128[134 - 128];	/* 128-133 */
+	u8	byte_134;				/* 134 */
+	u8	_pad_135[4096 - 135];	/* 135-4095 */
 } __packed __aligned(PAGE_SIZE);
 
 struct read_storage_sccb {
diff --git a/drivers/s390/char/sclp_early.c b/drivers/s390/char/sclp_early.c
index e792cee..8332788 100644
--- a/drivers/s390/char/sclp_early.c
+++ b/drivers/s390/char/sclp_early.c
@@ -44,6 +44,8 @@  static void __init sclp_early_facilities_detect(struct read_info_sccb *sccb)
 		S390_lowcore.machine_flags |= MACHINE_FLAG_ESOP;
 	if (sccb->fac91 & 0x40)
 		S390_lowcore.machine_flags |= MACHINE_FLAG_TLB_GUEST;
+	if (sccb->cpuoff > 134)
+		sclp.has_diag318 = !!(sccb->byte_134 & 0x80);
 	sclp.rnmax = sccb->rnmax ? sccb->rnmax : sccb->rnmax2;
 	sclp.rzm = sccb->rnsize ? sccb->rnsize : sccb->rnsize2;
 	sclp.rzm <<= 20;