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

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


  • To: <xen-devel@xxxxxxxxxxxxxxxxxxx>
  • 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
  • List-id: Xen developer discussion <xen-devel.lists.xensource.com>
  • 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

 


Rackspace

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