[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] [Xen-devel] [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 _______________________________________________ Xen-devel mailing list Xen-devel@xxxxxxxxxxxxxxxxxxx http://lists.xensource.com/xen-devel
|
![]() |
Lists.xenproject.org is hosted with RackSpace, monitoring our |