qemu-devel
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: [Qemu-devel] [PATCH 03/15] s390-bios: decouple common boot logic fro


From: Farhan Ali
Subject: Re: [Qemu-devel] [PATCH 03/15] s390-bios: decouple common boot logic from virtio
Date: Thu, 13 Dec 2018 08:17:11 -0500
User-agent: Mozilla/5.0 (X11; Linux x86_64; rv:52.0) Gecko/20100101 Thunderbird/52.4.0



On 12/12/2018 09:11 AM, Jason J. Herne wrote:
Create a boot_setup function to handle getting boot information from
the machine/hypervisor. This decouples common boot logic from the
virtio code path and allows us to make use of it for the real dasd boot
scenario.

Signed-off-by: Jason J. Herne <address@hidden>
Acked-by: Halil Pasic <address@hidden>
Reviewed-by: Collin Walling <address@hidden
Reviewed-by: Thomas Huth <address@hidden>
---
  pc-bios/s390-ccw/main.c | 28 ++++++++++++++++++++--------
  1 file changed, 20 insertions(+), 8 deletions(-)

diff --git a/pc-bios/s390-ccw/main.c b/pc-bios/s390-ccw/main.c
index e82fe2c..67df421 100644
--- a/pc-bios/s390-ccw/main.c
+++ b/pc-bios/s390-ccw/main.c
@@ -14,16 +14,17 @@

  char stack[PAGE_SIZE * 8] __attribute__((__aligned__(PAGE_SIZE)));
  static SubChannelId blk_schid = { .one = 1 };
-IplParameterBlock iplb __attribute__((__aligned__(PAGE_SIZE)));
  static char loadparm_str[LOADPARM_LEN + 1] = { 0, 0, 0, 0, 0, 0, 0, 0, 0 };
  QemuIplParameters qipl;
+IplParameterBlock iplb __attribute__((__aligned__(PAGE_SIZE)));
+static bool have_iplb;

  #define LOADPARM_PROMPT "PROMPT  "
  #define LOADPARM_EMPTY  "        "
  #define BOOT_MENU_FLAG_MASK (QIPL_FLAG_BM_OPTS_CMD | QIPL_FLAG_BM_OPTS_ZIPL)

  /*
- * Priniciples of Operations (SA22-7832-09) chapter 17 requires that
+ * Principles of Operations (SA22-7832-09) chapter 17 requires that
   * a subsystem-identification is at 184-187 and bytes 188-191 are zero
   * after list-directed-IPL and ccw-IPL.
   */
@@ -111,23 +112,33 @@ static void css_setup(void)
      enable_mss_facility();
  }

+/*
+ * Collect various pieces of information from the hypervisor/hardware that
+ * we'll use to determine exactly how we'll boot.
+ */
+static void boot_setup(void)
+{
+    char lpmsg[] = "LOADPARM=[________]\n";
+
+    sclp_get_loadparm_ascii(loadparm_str);
+    memcpy(lpmsg + 10, loadparm_str, 8);
+    sclp_print(lpmsg);
+
+    have_iplb = store_iplb(&iplb);
+}
+
  static void virtio_setup(void)
  {
      Schib schib;
      int ssid;
      bool found = false;
      uint16_t dev_no;
-    char ldp[] = "LOADPARM=[________]\n";
      VDev *vdev = virtio_get_device();
      QemuIplParameters *early_qipl = (QemuIplParameters *)QIPL_ADDRESS;

-    sclp_get_loadparm_ascii(loadparm_str);
-    memcpy(ldp + 10, loadparm_str, LOADPARM_LEN);
-    sclp_print(ldp);
-
      memcpy(&qipl, early_qipl, sizeof(QemuIplParameters));

-    if (store_iplb(&iplb)) {
+    if (have_iplb) {
          switch (iplb.pbt) {
          case S390_IPL_TYPE_CCW:
              dev_no = iplb.ccw.devno;
@@ -174,6 +185,7 @@ int main(void)
  {
      sclp_setup();
      css_setup();
+    boot_setup();
      virtio_setup();

      zipl_load(); /* no return */



Reviewed-by: Farhan Ali <address@hidden>




reply via email to

[Prev in Thread] Current Thread [Next in Thread]