On 16.02.2018 23:07, Collin L. Walling wrote:
[...]
diff --git a/hw/s390x/ipl.h b/hw/s390x/ipl.h
index 74469b1..f632c59 100644
--- a/hw/s390x/ipl.h
+++ b/hw/s390x/ipl.h
@@ -60,6 +60,9 @@ typedef struct IplBlockQemuScsi IplBlockQemuScsi;
#define QIPL_ADDRESS 0xcc
+#define BOOT_MENU_FLAG_CMD_OPTS 0x80
+#define BOOT_MENU_FLAG_ZIPL_OPTS 0x40
+
/*
* The QEMU IPL Parameters will be stored 32-bit word aligned.
* Placement of data fields in this area must account for
@@ -67,9 +70,11 @@ typedef struct IplBlockQemuScsi IplBlockQemuScsi;
* The entire structure must not be larger than 28 bytes.
*/
struct QemuIplParameters {
- uint8_t reserved1[4];
+ uint8_t boot_menu_flags;
+ uint8_t reserved1[3];
+ uint32_t boot_menu_timeout;
uint64_t netboot_start_addr;
- uint8_t reserved2[16];
+ uint8_t reserved2[12];
} QEMU_PACKED;Since this has to be touched anyway to re-establish proper
alignment, I
could also imagine to define the struct as
struct QemuIplParameters {
struct {
uint32_t flags:8;
uint32_t timeout:24;
} QEMU_PACKED boot_menu;
uint64_t netboot_start_addr;
uint8_t reserved2[16];
} QEMU_PACKED;
would allow to keep the boot menu stuff together without creating
unnecessary holes.
It would allow for a timeout value of more than 4 hours. The code to set
the boot menu would have to be adapted though to properly deal with the
bitfields.