zipl: move command line processing into its own function

Makes the code easier to read.

Signed-off-by: Sven Schnelle <svens@linux.ibm.com>
Reviewed-by: Marc Hartmayer <mhartmay@linux.ibm.com>
Reviewed-by: Stefan Haberland<sth@linux.ibm.com>
Signed-off-by: Jan Höppner <hoeppner@linux.ibm.com>
This commit is contained in:
Sven Schnelle
2021-10-20 08:03:26 +02:00
committed by Jan Höppner
parent cff4b0384f
commit 970c697983

View File

@@ -345,40 +345,21 @@ static void verify_secure_boot(void)
panic(ESECUREBOOT, "%s", msg_sipl_unverified);
}
void start(void)
static void setup_cmdline(void)
{
unsigned int subchannel_id;
unsigned char *cextra = (unsigned char *)COMMAND_LINE_EXTRA;
unsigned char *cmdline = (unsigned char *)COMMAND_LINE;
unsigned int cmdline_len = 0, cextra_len = 0;
if (secure_boot_enabled())
verify_secure_boot();
/*
* cut the kernel header
*/
memmove((void *)_stage3_parms.image_addr,
(void *)_stage3_parms.image_addr + IMAGE_LOAD_ADDRESS,
_stage3_parms.image_len - IMAGE_LOAD_ADDRESS);
/* store subchannel ID into low core and into new kernel space */
subchannel_id = S390_lowcore.subchannel_id;
*(unsigned int *)__LC_IPLDEV = subchannel_id;
*(unsigned long long *)IPL_DEVICE = subchannel_id;
/* if valid command line is given, copy it into new kernel space */
if (_stage3_parms.parm_addr != UNSPECIFIED_ADDRESS) {
memcpy(cmdline,
(void *)(unsigned long *)_stage3_parms.parm_addr,
memcpy(cmdline, (void *)(unsigned long *)_stage3_parms.parm_addr,
COMMAND_LINE_SIZE);
/* terminate \0 */
cmdline[COMMAND_LINE_SIZE - 1] = 0;
}
/* determine length of original parm line */
cmdline_len = MIN(strlen((const char *)cmdline),
COMMAND_LINE_SIZE - 1);
cmdline_len = MIN(strlen((const char *)cmdline), COMMAND_LINE_SIZE - 1);
/* convert extra parameter to ascii */
if (!_stage3_parms.extra_parm || !*cextra)
@@ -417,8 +398,31 @@ void start(void)
/* terminate 0 */
cmdline[cmdline_len + cextra_len] = 0;
}
noextra:
handle_environment(cmdline_len + cextra_len);
}
void start(void)
{
unsigned int subchannel_id;
if (secure_boot_enabled())
verify_secure_boot();
/*
* cut the kernel header
*/
memmove((void *)_stage3_parms.image_addr,
(void *)_stage3_parms.image_addr + IMAGE_LOAD_ADDRESS,
_stage3_parms.image_len - IMAGE_LOAD_ADDRESS);
/* store subchannel ID into low core and into new kernel space */
subchannel_id = S390_lowcore.subchannel_id;
*(unsigned int *)__LC_IPLDEV = subchannel_id;
*(unsigned long long *)IPL_DEVICE = subchannel_id;
setup_cmdline();
/* copy initrd start address and size intop new kernle space */
*(unsigned long long *)INITRD_START = _stage3_parms.initrd_addr;