Use a multiport console in qemu_manager.cpp

Change-Id: I431bf89f455d99d4457d9a33f30663c7ac2c7be8
Test: Run with u-boot change for multiport aosp/3102524
diff --git a/host/libs/vm_manager/qemu_manager.cpp b/host/libs/vm_manager/qemu_manager.cpp
index 3f4abac..1bbcc33 100644
--- a/host/libs/vm_manager/qemu_manager.cpp
+++ b/host/libs/vm_manager/qemu_manager.cpp
@@ -211,7 +211,8 @@
     case Arch::X86_64: {
       // QEMU has additional PCI devices for an ISA bridge and PIIX4
       // virtio_gpu precedes the first console or disk
-      int pci_offset = 2 + num_gpu - VmManager::kDefaultNumHvcs;
+      // TODO(schuffelen): Simplify this logic when crosvm uses multiport
+      int pci_offset = 3 + num_gpu - VmManager::kDefaultNumHvcs;
       return ConfigureMultipleBootDevices("pci0000:00/0000:00:", pci_offset,
                                           num_disks);
     }
@@ -249,12 +250,8 @@
     qemu_cmd.AddParameter("-chardev");
     qemu_cmd.AddParameter("null,id=hvc", hvc_num);
     qemu_cmd.AddParameter("-device");
-    qemu_cmd.AddParameter(
-        "virtio-serial-pci-non-transitional,max_ports=1,id=virtio-serial",
-        hvc_num, ",bus=hvc-bridge,addr=", fmt::format("{:0>2x}", hvc_num + 1));
-    qemu_cmd.AddParameter("-device");
-    qemu_cmd.AddParameter("virtconsole,bus=virtio-serial", hvc_num,
-                          ".0,chardev=hvc", hvc_num);
+    qemu_cmd.AddParameter("virtconsole,bus=virtio-serial.0,chardev=hvc",
+                          hvc_num);
     hvc_num++;
   };
   auto add_serial_sink = [&qemu_cmd, &serial_num]() {
@@ -286,36 +283,24 @@
     qemu_cmd.AddParameter("file,id=hvc", hvc_num, ",path=", output,
                           ",append=on");
     qemu_cmd.AddParameter("-device");
-    qemu_cmd.AddParameter(
-        "virtio-serial-pci-non-transitional,max_ports=1,id=virtio-serial",
-        hvc_num, ",bus=hvc-bridge,addr=", fmt::format("{:0>2x}", hvc_num + 1));
-    qemu_cmd.AddParameter("-device");
-    qemu_cmd.AddParameter("virtconsole,bus=virtio-serial", hvc_num,
-                          ".0,chardev=hvc", hvc_num);
+    qemu_cmd.AddParameter("virtconsole,bus=virtio-serial.0,chardev=hvc",
+                          hvc_num);
     hvc_num++;
   };
   auto add_hvc = [&qemu_cmd, &hvc_num](const std::string& prefix) {
     qemu_cmd.AddParameter("-chardev");
     qemu_cmd.AddParameter("pipe,id=hvc", hvc_num, ",path=", prefix);
     qemu_cmd.AddParameter("-device");
-    qemu_cmd.AddParameter(
-        "virtio-serial-pci-non-transitional,max_ports=1,id=virtio-serial",
-        hvc_num, ",bus=hvc-bridge,addr=", fmt::format("{:0>2x}", hvc_num + 1));
-    qemu_cmd.AddParameter("-device");
-    qemu_cmd.AddParameter("virtconsole,bus=virtio-serial", hvc_num,
-                          ".0,chardev=hvc", hvc_num);
+    qemu_cmd.AddParameter("virtconsole,bus=virtio-serial.0,chardev=hvc",
+                          hvc_num);
     hvc_num++;
   };
   auto add_hvc_serial = [&qemu_cmd, &hvc_num](const std::string& prefix) {
     qemu_cmd.AddParameter("-chardev");
     qemu_cmd.AddParameter("serial,id=hvc", hvc_num, ",path=", prefix);
     qemu_cmd.AddParameter("-device");
-    qemu_cmd.AddParameter(
-        "virtio-serial-pci-non-transitional,max_ports=1,id=virtio-serial",
-        hvc_num, ",bus=hvc-bridge,addr=", fmt::format("{:0>2x}", hvc_num + 1));
-    qemu_cmd.AddParameter("-device");
-    qemu_cmd.AddParameter("virtconsole,bus=virtio-serial", hvc_num,
-                          ".0,chardev=hvc", hvc_num);
+    qemu_cmd.AddParameter("virtconsole,bus=virtio-serial.0,chardev=hvc",
+                          hvc_num);
     hvc_num++;
   };
 
@@ -440,13 +425,6 @@
     qemu_cmd.AddParameter("none");
   }
 
-  qemu_cmd.AddParameter("-device");
-  if (is_x86) {
-    qemu_cmd.AddParameter("pcie-pci-bridge,id=hvc-bridge,addr=01.2");
-  } else {
-    qemu_cmd.AddParameter("pcie-pci-bridge,id=hvc-bridge");
-  }
-
   if (instance.hwcomposer() != kHwComposerNone) {
     auto display_configs = instance.display_configs();
     CF_EXPECT(display_configs.size() >= 1);
@@ -497,6 +475,10 @@
     }
   }
 
+  qemu_cmd.AddParameter("-device");
+  qemu_cmd.AddParameter(
+      "virtio-serial-pci-non-transitional,max_ports=31,id=virtio-serial");
+
   // /dev/hvc0 = kernel console
   // If kernel log is enabled, the virtio-console port will be specified as
   // a true console for Linux, and kernel messages will be printed there.