From nobody Wed Oct 22 12:48:58 2025 Delivered-To: importer@patchew.org Received-SPF: pass (zoho.com: domain of gnu.org designates 208.118.235.17 as permitted sender) client-ip=208.118.235.17; envelope-from=qemu-devel-bounces+importer=patchew.org@nongnu.org; helo=lists.gnu.org; Authentication-Results: mx.zohomail.com; spf=pass (zoho.com: domain of gnu.org designates 208.118.235.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; dmarc=fail(p=none dis=none) header.from=redhat.com Return-Path: Received: from lists.gnu.org (lists.gnu.org [208.118.235.17]) by mx.zohomail.com with SMTPS id 1519738360529280.665237548283; Tue, 27 Feb 2018 05:32:40 -0800 (PST) Received: from localhost ([::1]:37128 helo=lists.gnu.org) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1eqfN1-0005fQ-B1 for importer@patchew.org; Tue, 27 Feb 2018 08:32:39 -0500 Received: from eggs.gnu.org ([2001:4830:134:3::10]:34801) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1eqfDM-0005X4-LW for qemu-devel@nongnu.org; Tue, 27 Feb 2018 08:22:44 -0500 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1eqfDL-0008Qq-CM for qemu-devel@nongnu.org; Tue, 27 Feb 2018 08:22:40 -0500 Received: from mx3-rdu2.redhat.com ([66.187.233.73]:45036 helo=mx1.redhat.com) by eggs.gnu.org with esmtps (TLS1.0:DHE_RSA_AES_256_CBC_SHA1:32) (Exim 4.71) (envelope-from ) id 1eqfDL-0008Qg-79; Tue, 27 Feb 2018 08:22:39 -0500 Received: from smtp.corp.redhat.com (int-mx03.intmail.prod.int.rdu2.redhat.com [10.11.54.3]) (using TLSv1.2 with cipher AECDH-AES256-SHA (256/256 bits)) (No client certificate requested) by mx1.redhat.com (Postfix) with ESMTPS id BE57A404008D; Tue, 27 Feb 2018 13:22:38 +0000 (UTC) Received: from localhost (ovpn-117-77.ams2.redhat.com [10.36.117.77]) by smtp.corp.redhat.com (Postfix) with ESMTPS id 9590D1134CD0; Tue, 27 Feb 2018 13:22:37 +0000 (UTC) From: Cornelia Huck To: peter.maydell@linaro.org Date: Tue, 27 Feb 2018 14:21:36 +0100 Message-Id: <20180227132150.13847-13-cohuck@redhat.com> In-Reply-To: <20180227132150.13847-1-cohuck@redhat.com> References: <20180227132150.13847-1-cohuck@redhat.com> X-Scanned-By: MIMEDefang 2.78 on 10.11.54.3 X-Greylist: Sender IP whitelisted, not delayed by milter-greylist-4.5.16 (mx1.redhat.com [10.11.55.5]); Tue, 27 Feb 2018 13:22:38 +0000 (UTC) X-Greylist: inspected by milter-greylist-4.5.16 (mx1.redhat.com [10.11.55.5]); Tue, 27 Feb 2018 13:22:38 +0000 (UTC) for IP:'10.11.54.3' DOMAIN:'int-mx03.intmail.prod.int.rdu2.redhat.com' HELO:'smtp.corp.redhat.com' FROM:'cohuck@redhat.com' RCPT:'' X-detected-operating-system: by eggs.gnu.org: GNU/Linux 2.2.x-3.x [generic] [fuzzy] X-Received-From: 66.187.233.73 Subject: [Qemu-devel] [PULL 12/26] s390-ccw: use zipl values when no boot menu options are present X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.21 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Cc: thuth@redhat.com, david@redhat.com, qemu-devel@nongnu.org, agraf@suse.de, borntraeger@de.ibm.com, qemu-s390x@nongnu.org, "Collin L. Walling" , rth@twiddle.net Errors-To: qemu-devel-bounces+importer=patchew.org@nongnu.org Sender: "Qemu-devel" X-ZohoMail: RSF_0 Z_629925259 SPT_0 Content-Transfer-Encoding: quoted-printable MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" From: "Collin L. Walling" If no boot menu options are present, then flag the boot menu to use the zipl options that were set in the zipl configuration file (and stored on disk by zipl). These options are found at some offset prior to the start of the zipl boot menu banner. The zipl timeout value is limited to a 16-bit unsigned integer and stored as seconds, so we take care to convert it to milliseconds in order to conform to the rest of the boot menu functionality. This is limited to CCW devices. For reference, the zipl configuration file uses the following fields in the menu section: prompt=3D1 enable the boot menu timeout=3DX set the timeout to X seconds To explicitly disregard any boot menu options, then menu=3Doff or must be specified. Signed-off-by: Collin L. Walling Reviewed-by: Thomas Huth Signed-off-by: Thomas Huth --- hw/s390x/ipl.c | 5 +++++ hw/s390x/ipl.h | 1 + pc-bios/s390-ccw/iplb.h | 1 + pc-bios/s390-ccw/main.c | 3 ++- pc-bios/s390-ccw/menu.c | 16 +++++++++++++++- 5 files changed, 24 insertions(+), 2 deletions(-) diff --git a/hw/s390x/ipl.c b/hw/s390x/ipl.c index ee2039dc69..c12e460a7f 100644 --- a/hw/s390x/ipl.c +++ b/hw/s390x/ipl.c @@ -241,6 +241,11 @@ static void s390_ipl_set_boot_menu(S390IPLState *ipl) =20 switch (ipl->iplb.pbt) { case S390_IPL_TYPE_CCW: + /* In the absence of -boot menu, use zipl parameters */ + if (!qemu_opt_get(opts, "menu")) { + *flags |=3D QIPL_FLAG_BM_OPTS_ZIPL; + return; + } break; default: error_report("boot menu is not supported for this device type."); diff --git a/hw/s390x/ipl.h b/hw/s390x/ipl.h index d6c6f75b76..0570d0ad75 100644 --- a/hw/s390x/ipl.h +++ b/hw/s390x/ipl.h @@ -93,6 +93,7 @@ void s390_reipl_request(void); =20 /* Boot Menu flags */ #define QIPL_FLAG_BM_OPTS_CMD 0x80 +#define QIPL_FLAG_BM_OPTS_ZIPL 0x40 =20 /* * The QEMU IPL Parameters will be stored at absolute address diff --git a/pc-bios/s390-ccw/iplb.h b/pc-bios/s390-ccw/iplb.h index 832bb94440..7dfce4fbcf 100644 --- a/pc-bios/s390-ccw/iplb.h +++ b/pc-bios/s390-ccw/iplb.h @@ -76,6 +76,7 @@ extern IplParameterBlock iplb __attribute__((__aligned__(= PAGE_SIZE))); =20 /* Boot Menu flags */ #define QIPL_FLAG_BM_OPTS_CMD 0x80 +#define QIPL_FLAG_BM_OPTS_ZIPL 0x40 =20 /* * This definition must be kept in sync with the defininition diff --git a/pc-bios/s390-ccw/main.c b/pc-bios/s390-ccw/main.c index 32ed70ebdd..a7473b0397 100644 --- a/pc-bios/s390-ccw/main.c +++ b/pc-bios/s390-ccw/main.c @@ -20,6 +20,7 @@ QemuIplParameters qipl; =20 #define LOADPARM_PROMPT "PROMPT " #define LOADPARM_EMPTY "........" +#define BOOT_MENU_FLAG_MASK (QIPL_FLAG_BM_OPTS_CMD | QIPL_FLAG_BM_OPTS_ZIP= L) =20 /* * Priniciples of Operations (SA22-7832-09) chapter 17 requires that @@ -91,7 +92,7 @@ static void menu_setup(void) =20 switch (iplb.pbt) { case S390_IPL_TYPE_CCW: - menu_set_parms(qipl.qipl_flags & QIPL_FLAG_BM_OPTS_CMD, + menu_set_parms(qipl.qipl_flags & BOOT_MENU_FLAG_MASK, qipl.boot_menu_timeout); return; } diff --git a/pc-bios/s390-ccw/menu.c b/pc-bios/s390-ccw/menu.c index 8d55869448..ee56939c21 100644 --- a/pc-bios/s390-ccw/menu.c +++ b/pc-bios/s390-ccw/menu.c @@ -18,6 +18,10 @@ #define KEYCODE_BACKSP '\177' #define KEYCODE_ENTER '\r' =20 +/* Offsets from zipl fields to zipl banner start */ +#define ZIPL_TIMEOUT_OFFSET 138 +#define ZIPL_FLAG_OFFSET 140 + #define TOD_CLOCK_MILLISECOND 0x3e8000 =20 #define LOW_CORE_EXTERNAL_INT_ADDR 0x86 @@ -187,6 +191,16 @@ int menu_get_zipl_boot_index(const char *menu_data) { size_t len; int entries; + uint16_t zipl_flag =3D *(uint16_t *)(menu_data - ZIPL_FLAG_OFFSET); + uint16_t zipl_timeout =3D *(uint16_t *)(menu_data - ZIPL_TIMEOUT_OFFSE= T); + + if (flag =3D=3D QIPL_FLAG_BM_OPTS_ZIPL) { + if (!zipl_flag) { + return 0; /* Boot default */ + } + /* zipl stores timeout as seconds */ + timeout =3D zipl_timeout * 1000; + } =20 /* Print and count all menu items, including the banner */ for (entries =3D 0; *menu_data; entries++) { @@ -211,5 +225,5 @@ void menu_set_parms(uint8_t boot_menu_flag, uint32_t bo= ot_menu_timeout) =20 bool menu_is_enabled_zipl(void) { - return flag & QIPL_FLAG_BM_OPTS_CMD; + return flag & (QIPL_FLAG_BM_OPTS_CMD | QIPL_FLAG_BM_OPTS_ZIPL); } --=20 2.13.6