From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from mailman by lists.gnu.org with tmda-scanned (Exim 4.43) id 1N2RDC-00047B-41 for qemu-devel@nongnu.org; Mon, 26 Oct 2009 11:10:22 -0400 Received: from exim by lists.gnu.org with spam-scanned (Exim 4.43) id 1N2RD6-00045G-NO for qemu-devel@nongnu.org; Mon, 26 Oct 2009 11:10:20 -0400 Received: from [199.232.76.173] (port=49804 helo=monty-python.gnu.org) by lists.gnu.org with esmtp (Exim 4.43) id 1N2RD6-00044z-4C for qemu-devel@nongnu.org; Mon, 26 Oct 2009 11:10:16 -0400 Received: from moutng.kundenserver.de ([212.227.17.10]:56699) by monty-python.gnu.org with esmtp (Exim 4.60) (envelope-from ) id 1N2RD5-0001l0-Ht for qemu-devel@nongnu.org; Mon, 26 Oct 2009 11:10:15 -0400 From: Stefan Weil Date: Mon, 26 Oct 2009 16:10:10 +0100 Message-Id: <1256569810-12920-1-git-send-email-weil@mail.berlios.de> Subject: [Qemu-devel] [PATCH] serial: Support additional serial speed values List-Id: qemu-devel.nongnu.org List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , To: QEMU Developers * Allow any speed value which is defined for Linux (and possibly other systems). * Compare int values instead of double values. Signed-off-by: Stefan Weil --- qemu-char.c | 87 +++++++++++++++++++++++++++++++++++++++++----------------- 1 files changed, 61 insertions(+), 26 deletions(-) diff --git a/qemu-char.c b/qemu-char.c index 0fd402c..cb65469 100644 --- a/qemu-char.c +++ b/qemu-char.c @@ -1018,33 +1018,68 @@ static void tty_serial_init(int fd, int speed, #endif tcgetattr (fd, &tty); -#define MARGIN 1.1 - if (speed <= 50 * MARGIN) - spd = B50; - else if (speed <= 75 * MARGIN) - spd = B75; - else if (speed <= 300 * MARGIN) - spd = B300; - else if (speed <= 600 * MARGIN) - spd = B600; - else if (speed <= 1200 * MARGIN) - spd = B1200; - else if (speed <= 2400 * MARGIN) - spd = B2400; - else if (speed <= 4800 * MARGIN) - spd = B4800; - else if (speed <= 9600 * MARGIN) - spd = B9600; - else if (speed <= 19200 * MARGIN) - spd = B19200; - else if (speed <= 38400 * MARGIN) - spd = B38400; - else if (speed <= 57600 * MARGIN) - spd = B57600; - else if (speed <= 115200 * MARGIN) - spd = B115200; - else +#define check_speed(val) if (speed <= val) { spd = B##val; break; } + speed = speed * 10 / 11; + do { + check_speed(50); + check_speed(75); + check_speed(110); + check_speed(134); + check_speed(150); + check_speed(200); + check_speed(300); + check_speed(600); + check_speed(1200); + check_speed(1800); + check_speed(2400); + check_speed(4800); + check_speed(9600); + check_speed(19200); + check_speed(38400); + /* Non-Posix values follow. They may be unsupported on some systems. */ + check_speed(57600); + check_speed(115200); +#ifdef B230400 + check_speed(230400); +#endif +#ifdef B460800 + check_speed(460800); +#endif +#ifdef B500000 + check_speed(500000); +#endif +#ifdef B576000 + check_speed(576000); +#endif +#ifdef B921600 + check_speed(921600); +#endif +#ifdef B1000000 + check_speed(1000000); +#endif +#ifdef B1152000 + check_speed(1152000); +#endif +#ifdef B1500000 + check_speed(1500000); +#endif +#ifdef B2000000 + check_speed(2000000); +#endif +#ifdef B2500000 + check_speed(2500000); +#endif +#ifdef B3000000 + check_speed(3000000); +#endif +#ifdef B3500000 + check_speed(3500000); +#endif +#ifdef B4000000 + check_speed(4000000); +#endif spd = B115200; + } while (0); cfsetispeed(&tty, spd); cfsetospeed(&tty, spd); -- 1.5.6.5