WARNING - OLD ARCHIVES

This is an archived copy of the Xen.org mailing list, which we have preserved to ensure that existing links to archives are not broken. The live archive, which contains the latest emails, can be found at http://lists.xen.org/
   
 
 
Xen 
 
Home Products Support Community News
 
   
 

xen-devel

[Xen-devel] [PATCH]fix VMX "xm console" issue

To: <xen-devel@xxxxxxxxxxxxxxxxxxx>
Subject: [Xen-devel] [PATCH]fix VMX "xm console" issue
From: "Yu, Ping Y" <ping.y.yu@xxxxxxxxx>
Date: Tue, 29 Nov 2005 11:03:30 +0800
Delivery-date: Tue, 29 Nov 2005 03:03:30 +0000
Envelope-to: www-data@xxxxxxxxxxxxxxxxxxx
List-help: <mailto:xen-devel-request@lists.xensource.com?subject=help>
List-id: Xen developer discussion <xen-devel.lists.xensource.com>
List-post: <mailto:xen-devel@lists.xensource.com>
List-subscribe: <http://lists.xensource.com/cgi-bin/mailman/listinfo/xen-devel>, <mailto:xen-devel-request@lists.xensource.com?subject=subscribe>
List-unsubscribe: <http://lists.xensource.com/cgi-bin/mailman/listinfo/xen-devel>, <mailto:xen-devel-request@lists.xensource.com?subject=unsubscribe>
Sender: xen-devel-bounces@xxxxxxxxxxxxxxxxxxx
Thread-index: AcX0kXm6P3GPNQq0SLeZDjrEEl/V+w==
Thread-topic: [PATCH]fix VMX "xm console" issue
Hi, all

  This patch fixes an issue about VMX "xm console" issue.

 "xm console" issue is that the serial parameter has not been set, and I add
a function to set this parameter. Code is mainly borrowed from Minicom and 
has been tested both in domU and VMX.
 

# HG changeset patch
# User Ping Yu <ping.y.yu@xxxxxxxxx>
# Node ID 71111788840f0dd557d7cfc4e919beb511c0237c
# Parent  8451c65671238604e2678a1f44c2f582ec6ebf96
Fix an issue for VMX console.
Add a function to set serial parameter, thus make "xm console" work well
both in domU and VMX

Signed-off-by: Ping Yu <ping.y.yu@xxxxxxxxx>

diff -r 8451c6567123 -r 71111788840f tools/console/client/main.c
--- a/tools/console/client/main.c       Wed Nov 23 19:37:33 2005
+++ b/tools/console/client/main.c       Mon Nov 28 15:53:17 2005
@@ -87,6 +87,92 @@
        tcsetattr(fd, TCSAFLUSH, &new_term);
 }
 
+/* Code borrowed from Minicom
+ * Set baudrate, parity and number of bits
+ */  
+static void set_serial_argument(int fd, char *baudr, char *par,
+               char *bits, char *stopb, int hwf, int swf)
+{
+       int spd = -1;
+       int newbaud;
+       int bit = bits[0];
+
+       struct termios tty;
+       
+       tcgetattr(fd, &tty);
+
+         /* We generate mark and space parity ourself. */
+       if (bit == '7' && (par[0] == 'M' || par[0] == 'S'))
+               bit = '8';
+
+        /* Check if 'baudr' is really a number */
+       if ((newbaud = (atol(baudr) / 100)) == 0 && baudr[0] != '0') 
+               newbaud = -1;
+
+       switch(newbaud) {
+       case 0:
+       case 3:         spd = B300;     break;
+       case 6:         spd = B600;     break;
+       case 12:        spd = B1200;    break;
+       case 24:        spd = B2400;    break;
+       case 48:        spd = B4800;    break;
+       case 96:        spd = B9600;    break;
+       case 192:       spd = B19200;   break;
+       case 384:       spd = B38400;   break;
+       case 576:       spd = B57600;   break;
+       case 1152:      spd = B115200;  break;
+       case 2304:      spd = B230400;  break;
+       }
+
+       if (spd != -1) {
+               cfsetospeed(&tty, (speed_t)spd);
+               cfsetispeed(&tty, (speed_t)spd);
+       }
+
+       switch (bit) {
+       case '5':
+               tty.c_cflag = (tty.c_cflag & ~CSIZE) | CS5;
+               break;
+       case '6':
+               tty.c_cflag = (tty.c_cflag & ~CSIZE) | CS6;
+               break;
+       case '7':
+               tty.c_cflag = (tty.c_cflag & ~CSIZE) | CS7;
+               break;
+       case '8':
+       default:
+               tty.c_cflag = (tty.c_cflag & ~CSIZE) | CS8;
+               break;
+       }
+
+         /* Set into raw, no echo mode */
+       tty.c_iflag =  IGNBRK;
+       tty.c_lflag = 0;
+       tty.c_oflag = 0;
+       tty.c_cflag |= CLOCAL | CREAD;
+       tty.c_cc[VMIN] = 1;
+       tty.c_cc[VTIME] = 5;
+
+       if (swf)
+               tty.c_iflag |= IXON | IXOFF;
+       else
+               tty.c_iflag &= ~(IXON|IXOFF|IXANY);
+
+       tty.c_cflag &= ~(PARENB | PARODD);
+       if (par[0] == 'E')
+               tty.c_cflag |= PARENB;
+       else if (par[0] == 'O')
+               tty.c_cflag |= (PARENB | PARODD);
+
+       if (stopb[0] == '2')
+               tty.c_cflag |= CSTOPB;
+       else
+               tty.c_cflag &= ~CSTOPB;
+
+       tcsetattr(fd, TCSANOW, &tty);
+
+}
+
 static void restore_term(int fd, struct termios *old)
 {
        tcsetattr(fd, TCSAFLUSH, old);
@@ -260,6 +346,7 @@
        free(path);
 
        init_term(STDIN_FILENO, &attr);
+       set_serial_argument(spty, "115200", "N", "8", "1", 1, 0);
        console_loop(xc_handle, domid, spty);
        restore_term(STDIN_FILENO, &attr);




Sincerely Yours

Yu Ping


Attachment: xm_console.patch
Description: xm_console.patch

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