Prints the menu data starting from the zIPL menu banner. Signed-off-by: Collin L. Walling <wall...@linux.vnet.ibm.com> --- pc-bios/s390-ccw/bootmap.c | 3 +-- pc-bios/s390-ccw/menu.c | 42 ++++++++++++++++++++++++++++++++++++++++++ pc-bios/s390-ccw/menu.h | 1 + 3 files changed, 44 insertions(+), 2 deletions(-)
diff --git a/pc-bios/s390-ccw/bootmap.c b/pc-bios/s390-ccw/bootmap.c index fb8ff80..f894760 100644 --- a/pc-bios/s390-ccw/bootmap.c +++ b/pc-bios/s390-ccw/bootmap.c @@ -269,8 +269,7 @@ static int eckd_get_boot_menu_index(block_number_t s1b_block_nr) return 0; } - zipl_parms.menu_start++; /* make compiler happy -- does nothing vital */ - return 0; /* implemented next patch */ + return menu_get_zipl_boot_index(s2_cur_blk, zipl_parms); } static void run_eckd_boot_script(block_number_t mbr_block_nr, diff --git a/pc-bios/s390-ccw/menu.c b/pc-bios/s390-ccw/menu.c index e15a7f2..30470b3 100644 --- a/pc-bios/s390-ccw/menu.c +++ b/pc-bios/s390-ccw/menu.c @@ -10,10 +10,52 @@ */ #include "menu.h" +#include "s390-ccw.h" static uint8_t flags; static uint64_t timeout; +static void zipl_println(const char *data, size_t len) +{ + char buf[len + 1]; + + ebcdic_to_ascii(data, buf, len); + buf[len] = '\n'; + buf[len + 1] = '\0'; + + sclp_print(buf); +} + +int menu_get_zipl_boot_index(const void *stage2, ZiplParms zipl_parms) +{ + const char *data = stage2 + zipl_parms.menu_start; + size_t len; + int ct; + + if (flags & BOOT_MENU_FLAG_ZIPL_OPTS) { + if (zipl_parms.flag) { + timeout = zipl_parms.timeout; + } else { + return 0; /* Boot default */ + } + } + + /* Print and count all menu items, including the banner */ + for (ct = 0; *data; ct++) { + len = strlen(data); + zipl_println(data, len); + data += len + 1; + + if (ct < 2) { + sclp_print("\n"); + } + } + + sclp_print("\n"); + + return 0; /* return user input next patch */ +} + void menu_set_parms(uint8_t boot_menu_flag, uint16_t boot_menu_timeout) { flags = boot_menu_flag; diff --git a/pc-bios/s390-ccw/menu.h b/pc-bios/s390-ccw/menu.h index 3a8a487..c6615aa 100644 --- a/pc-bios/s390-ccw/menu.h +++ b/pc-bios/s390-ccw/menu.h @@ -27,6 +27,7 @@ typedef struct ZiplParms { uint64_t menu_start; } ZiplParms; +int menu_get_zipl_boot_index(const void *stage2, ZiplParms zipl_parms); void menu_set_parms(uint8_t boot_menu_flags, uint16_t boot_menu_timeout); bool menu_check_flags(uint8_t check_flags); -- 2.7.4