summaryrefslogtreecommitdiff
path: root/pc-bios/s390-ccw/main.c
diff options
context:
space:
mode:
Diffstat (limited to 'pc-bios/s390-ccw/main.c')
-rw-r--r--pc-bios/s390-ccw/main.c24
1 files changed, 24 insertions, 0 deletions
diff --git a/pc-bios/s390-ccw/main.c b/pc-bios/s390-ccw/main.c
index e41b264a6f..32ed70ebdd 100644
--- a/pc-bios/s390-ccw/main.c
+++ b/pc-bios/s390-ccw/main.c
@@ -18,6 +18,9 @@ IplParameterBlock iplb __attribute__((__aligned__(PAGE_SIZE)));
static char loadparm[8] = { 0, 0, 0, 0, 0, 0, 0, 0 };
QemuIplParameters qipl;
+#define LOADPARM_PROMPT "PROMPT "
+#define LOADPARM_EMPTY "........"
+
/*
* Priniciples of Operations (SA22-7832-09) chapter 17 requires that
* a subsystem-identification is at 184-187 and bytes 188-191 are zero
@@ -74,6 +77,26 @@ static bool find_dev(Schib *schib, int dev_no)
return false;
}
+static void menu_setup(void)
+{
+ if (memcmp(loadparm, LOADPARM_PROMPT, 8) == 0) {
+ menu_set_parms(QIPL_FLAG_BM_OPTS_CMD, 0);
+ return;
+ }
+
+ /* If loadparm was set to any other value, then do not enable menu */
+ if (memcmp(loadparm, LOADPARM_EMPTY, 8) != 0) {
+ return;
+ }
+
+ switch (iplb.pbt) {
+ case S390_IPL_TYPE_CCW:
+ menu_set_parms(qipl.qipl_flags & QIPL_FLAG_BM_OPTS_CMD,
+ qipl.boot_menu_timeout);
+ return;
+ }
+}
+
static void virtio_setup(void)
{
Schib schib;
@@ -117,6 +140,7 @@ static void virtio_setup(void)
default:
panic("List-directed IPL not supported yet!\n");
}
+ menu_setup();
} else {
for (ssid = 0; ssid < 0x3; ssid++) {
blk_schid.ssid = ssid;