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

[Xen-changelog] [xen-unstable] [HVM] Allow more dynamic use of the qemu serial lines by allowing the Summagraphics port to float.



# HG changeset patch
# User kaf24@xxxxxxxxxxxxxxxxxxxx
# Node ID 61e2ea81bd65f5df4b0e977ee9a457884b54597f
# Parent  bcfbbca9cf08e89d7e8fd4301ee44def21794071
[HVM] Allow more dynamic use of the qemu serial lines by allowing the 
Summagraphics port to float.

qemu will emulate up to 4 serial lines (COM1 - COM4).  One of these
lines supports a Summagraphics protocol.  This has changed recently,
and it's now always COM2.  This patch allows the user to specify
to qemu which lines should be serial lines, and the code will place
the Summagraphics compatible line at just above the last specified
serial line.  qemu defaults serial line 0 (COM1) to be "vc", resulting
in the Summagraphics support residing on COM2. This is in keeping
with the current behavior.

The results, via qemu command line, are:
<none>                                    COM2
-serial x                                 COM2
-serial x -serial x                       COM3
-serial x -serial x -serial x             COM4
-serial x -serial x -serial x -serial x  <none>

The results are deterministic, and allow the use of up to 4 serial
lines including none with Summagraphics support.  There is no
change from current behavior, unless requested.

Signed-off-by: Ben Thomas <ben@xxxxxxxxxxxxxxx>
---
 tools/ioemu/hw/pc.c |    5 ++++-
 tools/ioemu/vl.c    |   19 +++++++++++++++++--
 tools/ioemu/vl.h    |    2 +-
 3 files changed, 22 insertions(+), 4 deletions(-)

diff -r bcfbbca9cf08 -r 61e2ea81bd65 tools/ioemu/hw/pc.c
--- a/tools/ioemu/hw/pc.c       Thu Jun 01 18:30:28 2006 +0100
+++ b/tools/ioemu/hw/pc.c       Thu Jun 01 18:32:04 2006 +0100
@@ -537,8 +537,11 @@ void pc_init(uint64_t ram_size, int vga_
     for(i = 0; i < MAX_SERIAL_PORTS; i++) {
         if (serial_hds[i]) {
             sp = serial_init(serial_io[i], serial_irq[i], serial_hds[i]);
-            if (i == SUMMA_PORT)
+            if (i == serial_summa_port) {
                summa_init(sp, serial_hds[i]);
+               fprintf(stderr, "Serial port %d (COM%d) initialized for 
Summagraphics\n",
+                       i, i+1);
+           }
         }
     }
 
diff -r bcfbbca9cf08 -r 61e2ea81bd65 tools/ioemu/vl.c
--- a/tools/ioemu/vl.c  Thu Jun 01 18:30:28 2006 +0100
+++ b/tools/ioemu/vl.c  Thu Jun 01 18:32:04 2006 +0100
@@ -146,6 +146,7 @@ int repeat_key = 1;
 int repeat_key = 1;
 TextConsole *vga_console;
 CharDriverState *serial_hds[MAX_SERIAL_PORTS];
+int serial_summa_port = -1;
 int xc_handle;
 time_t timeoffset = 0;
 
@@ -2588,8 +2589,8 @@ int main(int argc, char **argv)
     pstrcpy(monitor_device, sizeof(monitor_device), "vc");
 
     pstrcpy(serial_devices[0], sizeof(serial_devices[0]), "vc");
-    pstrcpy(serial_devices[1], sizeof(serial_devices[1]), "null");
-    for(i = 2; i < MAX_SERIAL_PORTS; i++)
+    serial_summa_port = -1;
+    for(i = 1; i < MAX_SERIAL_PORTS; i++)
         serial_devices[i][0] = '\0';
     serial_device_index = 0;
 
@@ -3173,6 +3174,20 @@ int main(int argc, char **argv)
     }
     monitor_init(monitor_hd, !nographic);
 
+    /* Find which port should be the Summagraphics port */
+    /* It's the first unspecified serial line. Note that COM1 is set */
+    /* by default, so the Summagraphics port would be COM2 or higher */
+
+    for(i = 0; i < MAX_SERIAL_PORTS; i++) {
+      if (serial_devices[i][0] != '\0')
+       continue;
+      serial_summa_port = i;
+      pstrcpy(serial_devices[serial_summa_port], sizeof(serial_devices[0]), 
"null");
+      break;
+    }
+
+    /* Now, open the ports */
+
     for(i = 0; i < MAX_SERIAL_PORTS; i++) {
         if (serial_devices[i][0] != '\0') {
             serial_hds[i] = qemu_chr_open(serial_devices[i]);
diff -r bcfbbca9cf08 -r 61e2ea81bd65 tools/ioemu/vl.h
--- a/tools/ioemu/vl.h  Thu Jun 01 18:30:28 2006 +0100
+++ b/tools/ioemu/vl.h  Thu Jun 01 18:32:04 2006 +0100
@@ -238,9 +238,9 @@ void console_select(unsigned int index);
 /* serial ports */
 
 #define MAX_SERIAL_PORTS 4
-#define SUMMA_PORT     1
 
 extern CharDriverState *serial_hds[MAX_SERIAL_PORTS];
+extern int serial_summa_port;
 
 /* network redirectors support */
 

_______________________________________________
Xen-changelog mailing list
Xen-changelog@xxxxxxxxxxxxxxxxxxx
http://lists.xensource.com/xen-changelog


 


Rackspace

Lists.xenproject.org is hosted with RackSpace, monitoring our
servers 24x7x365 and backed by RackSpace's Fanatical Support®.