From: Thomas Huth Date: Wed, 9 Jul 2025 08:34:42 +0000 (+0200) Subject: pc-bios/s390-ccw: Add a boot menu for booting via pxelinux.cfg X-Git-Tag: v10.1.0-rc0~27^2~8 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=fc24fd9342ec5ddaeecdf2a28f7fc4c2cdf6b014;p=thirdparty%2Fqemu.git pc-bios/s390-ccw: Add a boot menu for booting via pxelinux.cfg Show a simple boot menu for pxelinux.cfg, too, if the user requested it. Reviewed-by: Jared Rossi Signed-off-by: Thomas Huth Message-ID: <20250709083443.41574-5-thuth@redhat.com> --- diff --git a/pc-bios/s390-ccw/netmain.c b/pc-bios/s390-ccw/netmain.c index 6f64323cd8..a9521dff41 100644 --- a/pc-bios/s390-ccw/netmain.c +++ b/pc-bios/s390-ccw/netmain.c @@ -332,6 +332,28 @@ static int load_kernel_with_initrd(filename_ip_t *fn_ip, return rc; } +static int net_boot_menu(int num_ent, int def_ent, + struct pl_cfg_entry *entries) +{ + bool valid_entries[MAX_BOOT_ENTRIES] = { false }; + int idx; + + puts("\ns390-ccw pxelinux.cfg boot menu:\n"); + printf(" [0] default (%d)\n", def_ent + 1); + valid_entries[0] = true; + + for (idx = 1; idx <= num_ent; idx++) { + printf(" [%d] %s\n", idx, entries[idx - 1].label); + valid_entries[idx] = true; + } + putchar('\n'); + + idx = menu_get_boot_index(valid_entries); + putchar('\n'); + + return idx; +} + static int net_select_and_load_kernel(filename_ip_t *fn_ip, int num_ent, int selected, struct pl_cfg_entry *entries) @@ -342,6 +364,10 @@ static int net_select_and_load_kernel(filename_ip_t *fn_ip, return -1; } + if (menu_is_enabled_enum() && num_ent > 1) { + loadparm = net_boot_menu(num_ent, selected, entries); + } + IPL_assert(loadparm <= num_ent, "loadparm is set to an entry that is not available in the " "pxelinux.cfg file!");