[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[qemu-s390x] [PATCH v7 09/12] s390-ccw: print zipl boot menu
From: |
Collin L. Walling |
Subject: |
[qemu-s390x] [PATCH v7 09/12] s390-ccw: print zipl boot menu |
Date: |
Fri, 16 Feb 2018 17:07:56 -0500 |
When the boot menu options are present and the guest's
disk has been configured by the zipl tool, then the user
will be presented with an interactive boot menu with
labeled entries. An example of what the menu might look
like:
zIPL v1.37.1-build-20170714 interactive boot menu.
0. default (linux-4.13.0)
1. linux-4.13.0
2. performance
3. kvm
Signed-off-by: Collin L. Walling <address@hidden>
Reviewed-by: Thomas Huth <address@hidden>
---
pc-bios/s390-ccw/menu.c | 49 ++++++++++++++++++++++++++++++++++++++++++++++++-
1 file changed, 48 insertions(+), 1 deletion(-)
diff --git a/pc-bios/s390-ccw/menu.c b/pc-bios/s390-ccw/menu.c
index 5790e0c..9631ac0 100644
--- a/pc-bios/s390-ccw/menu.c
+++ b/pc-bios/s390-ccw/menu.c
@@ -10,13 +10,60 @@
*/
#include "menu.h"
+#include "s390-ccw.h"
+
+/* Offsets from zipl fields to zipl banner start */
+#define ZIPL_TIMEOUT_OFFSET 138
+#define ZIPL_FLAG_OFFSET 140
static uint8_t flags;
static uint64_t timeout;
+static int get_boot_index(int entries)
+{
+ return 0; /* Implemented next patch */
+}
+
+static void zipl_println(const char *data, size_t len)
+{
+ char buf[len + 2];
+
+ 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, int offset)
{
- return 0; /* implemented next patch */
+ const char *data = stage2 + offset;
+ uint16_t zipl_flag = *(uint16_t *)(data - ZIPL_FLAG_OFFSET);
+ uint16_t zipl_timeout = *(uint16_t *)(data - ZIPL_TIMEOUT_OFFSET);
+ size_t len;
+ int ct;
+
+ if (flags & BOOT_MENU_FLAG_ZIPL_OPTS) {
+ if (!zipl_flag) {
+ return 0; /* Boot default */
+ }
+ timeout = zipl_timeout * 1000;
+ }
+
+ /* 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 get_boot_index(ct - 1);
}
void menu_set_parms(uint8_t boot_menu_flag, uint32_t boot_menu_timeout)
--
2.7.4
- Re: [qemu-s390x] [Qemu-devel] [PATCH v7 05/12] s390-ccw: move auxiliary IPL data to separate location, (continued)
- [qemu-s390x] [PATCH v7 07/12] s390-ccw: set up interactive boot menu parameters, Collin L. Walling, 2018/02/16
- [qemu-s390x] [PATCH v7 11/12] s390-ccw: set cp_receive mask only when needed and consume pending service irqs, Collin L. Walling, 2018/02/16
- [qemu-s390x] [PATCH v7 12/12] s390-ccw: interactive boot menu for scsi, Collin L. Walling, 2018/02/16
- [qemu-s390x] [PATCH v7 09/12] s390-ccw: print zipl boot menu,
Collin L. Walling <=
- [qemu-s390x] [PATCH v7 08/12] s390-ccw: read stage2 boot loader data to find menu, Collin L. Walling, 2018/02/16
- [qemu-s390x] [PATCH v7 10/12] s390-ccw: read user input for boot index via the SCLP console, Collin L. Walling, 2018/02/16