diff --git a/pc-bios/s390-ccw/main.c b/pc-bios/s390-ccw/main.c index 393d7323531c91c5dbb6a11aa6440e564c652f86..1cacc1b46f54fff58ade792742e770e35ad57f88 100644 --- a/pc-bios/s390-ccw/main.c +++ b/pc-bios/s390-ccw/main.c @@ -14,6 +14,7 @@ char stack[PAGE_SIZE * 8] __attribute__((__aligned__(PAGE_SIZE))); static SubChannelId blk_schid = { .one = 1 }; IplParameterBlock iplb __attribute__((__aligned__(PAGE_SIZE))); +static char loadparm[8] = { 0, 0, 0, 0, 0, 0, 0, 0 }; const unsigned char ebc2asc[256] = /* 0123456789abcdef0123456789abcdef */ @@ -40,7 +41,6 @@ void write_subsystem_identification(void) *zeroes = 0; } - void panic(const char *string) { sclp_print(string); @@ -48,6 +48,26 @@ void panic(const char *string) while (1) { } } +unsigned int get_loadparm_index(void) +{ + const char *lp = loadparm; + int i; + unsigned int idx = 0; + + for (i = 0; i < 8; i++) { + char c = lp[i]; + + if (c < '0' || c > '9') { + break; + } + + idx *= 10; + idx += c - '0'; + } + + return idx; +} + static bool find_dev(Schib *schib, int dev_no) { int i, r; @@ -84,6 +104,7 @@ static void virtio_setup(void) int ssid; bool found = false; uint16_t dev_no; + char ldp[] = "LOADPARM=[________]\n"; VDev *vdev = virtio_get_device(); /* @@ -93,6 +114,10 @@ static void virtio_setup(void) */ enable_mss_facility(); + sclp_get_loadparm_ascii(loadparm); + memcpy(ldp + 10, loadparm, 8); + sclp_print(ldp); + if (store_iplb(&iplb)) { switch (iplb.pbt) { case S390_IPL_TYPE_CCW: diff --git a/pc-bios/s390-ccw/s390-ccw.h b/pc-bios/s390-ccw/s390-ccw.h index 903d2ce81688cf75dba529c97bd559e36f3e9f76..07d8cbcb202f087e857ea956895159443ba5ab4b 100644 --- a/pc-bios/s390-ccw/s390-ccw.h +++ b/pc-bios/s390-ccw/s390-ccw.h @@ -62,6 +62,7 @@ void consume_sclp_int(void); void panic(const char *string); void write_subsystem_identification(void); extern char stack[PAGE_SIZE * 8] __attribute__((__aligned__(PAGE_SIZE))); +unsigned int get_loadparm_index(void); /* sclp.c */ void sclp_print(const char *string);