From patchwork Tue Jan 23 18:26:51 2018 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: "Collin L. Walling" X-Patchwork-Id: 10180923 Return-Path: Received: from mail.wl.linuxfoundation.org (pdx-wl-mail.web.codeaurora.org [172.30.200.125]) by pdx-korg-patchwork.web.codeaurora.org (Postfix) with ESMTP id CE3186019D for ; Tue, 23 Jan 2018 18:34:41 +0000 (UTC) Received: from mail.wl.linuxfoundation.org (localhost [127.0.0.1]) by mail.wl.linuxfoundation.org (Postfix) with ESMTP id CBFBA284FC for ; Tue, 23 Jan 2018 18:34:41 +0000 (UTC) Received: by mail.wl.linuxfoundation.org (Postfix, from userid 486) id C0CE728522; Tue, 23 Jan 2018 18:34:41 +0000 (UTC) X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on pdx-wl-mail.web.codeaurora.org X-Spam-Level: X-Spam-Status: No, score=-6.9 required=2.0 tests=BAYES_00,RCVD_IN_DNSWL_HI autolearn=ham version=3.3.1 Received: from lists.gnu.org (lists.gnu.org [208.118.235.17]) (using TLSv1 with cipher AES256-SHA (256/256 bits)) (No client certificate requested) by mail.wl.linuxfoundation.org (Postfix) with ESMTPS id 687E3284FC for ; Tue, 23 Jan 2018 18:34:41 +0000 (UTC) Received: from localhost ([::1]:45049 helo=lists.gnu.org) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1ee3P6-0001Ac-Hl for patchwork-qemu-devel@patchwork.kernel.org; Tue, 23 Jan 2018 13:34:40 -0500 Received: from eggs.gnu.org ([2001:4830:134:3::10]:53757) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1ee3IG-0003zg-Im for qemu-devel@nongnu.org; Tue, 23 Jan 2018 13:27:39 -0500 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1ee3ID-0006Rt-E8 for qemu-devel@nongnu.org; Tue, 23 Jan 2018 13:27:36 -0500 Received: from mx0b-001b2d01.pphosted.com ([148.163.158.5]:35002 helo=mx0a-001b2d01.pphosted.com) by eggs.gnu.org with esmtps (TLS1.0:RSA_AES_256_CBC_SHA1:32) (Exim 4.71) (envelope-from ) id 1ee3ID-0006Rl-9W for qemu-devel@nongnu.org; Tue, 23 Jan 2018 13:27:33 -0500 Received: from pps.filterd (m0098416.ppops.net [127.0.0.1]) by mx0b-001b2d01.pphosted.com (8.16.0.22/8.16.0.22) with SMTP id w0NIQHN1140772 for ; Tue, 23 Jan 2018 13:27:32 -0500 Received: from e33.co.us.ibm.com (e33.co.us.ibm.com [32.97.110.151]) by mx0b-001b2d01.pphosted.com with ESMTP id 2fp7dg0yay-1 (version=TLSv1.2 cipher=AES256-SHA bits=256 verify=NOT) for ; Tue, 23 Jan 2018 13:27:32 -0500 Received: from localhost by e33.co.us.ibm.com with IBM ESMTP SMTP Gateway: Authorized Use Only! Violators will be prosecuted for from ; Tue, 23 Jan 2018 11:27:31 -0700 Received: from b03cxnp07029.gho.boulder.ibm.com (9.17.130.16) by e33.co.us.ibm.com (192.168.1.133) with IBM ESMTP SMTP Gateway: Authorized Use Only! Violators will be prosecuted; Tue, 23 Jan 2018 11:27:28 -0700 Received: from b03ledav001.gho.boulder.ibm.com (b03ledav001.gho.boulder.ibm.com [9.17.130.232]) by b03cxnp07029.gho.boulder.ibm.com (8.14.9/8.14.9/NCO v10.0) with ESMTP id w0NIRS9h9699836; Tue, 23 Jan 2018 11:27:28 -0700 Received: from b03ledav001.gho.boulder.ibm.com (unknown [127.0.0.1]) by IMSVA (Postfix) with ESMTP id 68E356E035; Tue, 23 Jan 2018 11:27:28 -0700 (MST) Received: from collin-ThinkPad-W541.pok.ibm.com (unknown [9.56.58.131]) by b03ledav001.gho.boulder.ibm.com (Postfix) with ESMTP id C52C56E03A; Tue, 23 Jan 2018 11:27:27 -0700 (MST) From: "Collin L. Walling" To: qemu-s390x@nongnu.org, qemu-devel@nongnu.org Date: Tue, 23 Jan 2018 13:26:51 -0500 X-Mailer: git-send-email 2.7.4 In-Reply-To: <1516732013-18272-1-git-send-email-walling@linux.vnet.ibm.com> References: <1516732013-18272-1-git-send-email-walling@linux.vnet.ibm.com> X-TM-AS-GCONF: 00 x-cbid: 18012318-0008-0000-0000-000009367330 X-IBM-SpamModules-Scores: X-IBM-SpamModules-Versions: BY=3.00008415; HX=3.00000241; KW=3.00000007; PH=3.00000004; SC=3.00000247; SDB=6.00979253; UDB=6.00496322; IPR=6.00758559; BA=6.00005792; NDR=6.00000001; ZLA=6.00000005; ZF=6.00000009; ZB=6.00000000; ZP=6.00000000; ZH=6.00000000; ZU=6.00000002; MB=3.00019170; XFM=3.00000015; UTC=2018-01-23 18:27:30 X-IBM-AV-DETECTION: SAVI=unused REMOTE=unused XFE=unused x-cbparentid: 18012318-0009-0000-0000-000045ADA58F Message-Id: <1516732013-18272-9-git-send-email-walling@linux.vnet.ibm.com> X-Proofpoint-Virus-Version: vendor=fsecure engine=2.50.10432:, , definitions=2018-01-23_06:, , signatures=0 X-Proofpoint-Spam-Details: rule=outbound_notspam policy=outbound score=0 priorityscore=1501 malwarescore=0 suspectscore=0 phishscore=0 bulkscore=0 spamscore=0 clxscore=1015 lowpriorityscore=0 impostorscore=0 adultscore=0 classifier=spam adjust=0 reason=mlx scancount=1 engine=8.0.1-1709140000 definitions=main-1801230252 X-detected-operating-system: by eggs.gnu.org: GNU/Linux 3.x [generic] [fuzzy] X-Received-From: 148.163.158.5 Subject: [Qemu-devel] [PATCH v4 08/10] s390-ccw: print zipl boot menu 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: frankja@linux.vnet.ibm.com, thuth@redhat.com, cohuck@redhat.com, david@redhat.com, alifm@linux.vnet.ibm.com, borntraeger@de.ibm.com Errors-To: qemu-devel-bounces+patchwork-qemu-devel=patchwork.kernel.org@nongnu.org Sender: "Qemu-devel" X-Virus-Scanned: ClamAV using ClamSMTP 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 Reviewed-by: Thomas Huth --- pc-bios/s390-ccw/menu.c | 51 ++++++++++++++++++++++++++++++++++++++++++++++++- 1 file changed, 50 insertions(+), 1 deletion(-) diff --git a/pc-bios/s390-ccw/menu.c b/pc-bios/s390-ccw/menu.c index de12c73..174285e 100644 --- a/pc-bios/s390-ccw/menu.c +++ b/pc-bios/s390-ccw/menu.c @@ -10,13 +10,62 @@ */ #include "menu.h" +#include "s390-ccw.h" static uint8_t flags; static uint64_t timeout; +/* Offsets from zipl fields to zipl banner start */ +#define ZIPL_TIMEOUT_OFFSET 138 +#define ZIPL_FLAG_OFFSET 140 + +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 flag; + size_t len; + int ct; + + flag = *(uint16_t *)(data - ZIPL_FLAG_OFFSET); + + if (flags & BOOT_MENU_FLAG_ZIPL_OPTS) { + if (flag) { + timeout = *(uint16_t *)(data - ZIPL_TIMEOUT_OFFSET); + } 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 get_boot_index(ct - 1); } void menu_set_parms(uint8_t boot_menu_flag, uint16_t boot_menu_timeout)