From patchwork Mon Oct 26 15:10:10 2009 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Stefan Weil X-Patchwork-Id: 36925 Return-Path: X-Original-To: incoming@patchwork.ozlabs.org Delivered-To: patchwork-incoming@bilbo.ozlabs.org Received: from lists.gnu.org (lists.gnu.org [199.232.76.165]) (using TLSv1 with cipher DHE-RSA-AES256-SHA (256/256 bits)) (Client did not present a certificate) by ozlabs.org (Postfix) with ESMTPS id 9D2A5B7BB9 for ; Tue, 27 Oct 2009 02:32:20 +1100 (EST) Received: from localhost ([127.0.0.1]:40688 helo=lists.gnu.org) by lists.gnu.org with esmtp (Exim 4.43) id 1N2RYP-00016D-9I for incoming@patchwork.ozlabs.org; Mon, 26 Oct 2009 11:32:17 -0400 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 Received: from flocke.weilnetz.de (p54ADED8F.dip.t-dialin.net [84.173.237.143]) by mrelayeu.kundenserver.de (node=mrbap2) with ESMTP (Nemesis) id 0Mhf9f-1MpYsy1sMl-00MzEY; Mon, 26 Oct 2009 16:10:11 +0100 Received: from stefan by flocke.weilnetz.de with local (Exim 4.69) (envelope-from ) id 1N2RD0-0003Ms-Jg; Mon, 26 Oct 2009 16:10:10 +0100 From: Stefan Weil To: QEMU Developers Date: Mon, 26 Oct 2009 16:10:10 +0100 Message-Id: <1256569810-12920-1-git-send-email-weil@mail.berlios.de> X-Mailer: git-send-email 1.5.6.5 X-Provags-ID: V01U2FsdGVkX1+ktdTlbeHuXl6Rl5Rk/j7pdez6YT0qmmZl04m XZ6JAiZTN8Mmy2GKO3G+YH0Rf/GVoETgm8RedgI/e+SfG+o0Xs 64xnIW4iaHw1pAs2h3rvQB41OxskYx13YMGB9M2eZIzvRJ1xTy 7Mg== X-detected-operating-system: by monty-python.gnu.org: Genre and OS details not recognized. Cc: Subject: [Qemu-devel] [PATCH] serial: Support additional serial speed values X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.5 Precedence: list List-Id: qemu-devel.nongnu.org List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Sender: qemu-devel-bounces+incoming=patchwork.ozlabs.org@nongnu.org Errors-To: qemu-devel-bounces+incoming=patchwork.ozlabs.org@nongnu.org * 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);