From patchwork Mon Nov 30 14:17:11 2020 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Pierre-Marie de Rodat X-Patchwork-Id: 1408324 Return-Path: X-Original-To: incoming@patchwork.ozlabs.org Delivered-To: patchwork-incoming@bilbo.ozlabs.org Authentication-Results: ozlabs.org; spf=pass (sender SPF authorized) smtp.mailfrom=gcc.gnu.org (client-ip=8.43.85.97; helo=sourceware.org; envelope-from=gcc-patches-bounces@gcc.gnu.org; receiver=) Authentication-Results: ozlabs.org; dmarc=none (p=none dis=none) header.from=adacore.com Received: from sourceware.org (server2.sourceware.org [8.43.85.97]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature RSA-PSS (4096 bits) server-digest SHA256) (No client certificate requested) by ozlabs.org (Postfix) with ESMTPS id 4Cl6l60kMtz9sTR for ; Tue, 1 Dec 2020 01:17:54 +1100 (AEDT) Received: from server2.sourceware.org (localhost [IPv6:::1]) by sourceware.org (Postfix) with ESMTP id 653283896812; Mon, 30 Nov 2020 14:17:22 +0000 (GMT) X-Original-To: gcc-patches@gcc.gnu.org Delivered-To: gcc-patches@gcc.gnu.org Received: from rock.gnat.com (rock.gnat.com [205.232.38.15]) by sourceware.org (Postfix) with ESMTP id F3AB4388A420 for ; Mon, 30 Nov 2020 14:17:12 +0000 (GMT) DMARC-Filter: OpenDMARC Filter v1.3.2 sourceware.org F3AB4388A420 Authentication-Results: sourceware.org; dmarc=none (p=none dis=none) header.from=adacore.com Authentication-Results: sourceware.org; spf=pass smtp.mailfrom=derodat@adacore.com Received: from localhost (localhost.localdomain [127.0.0.1]) by filtered-rock.gnat.com (Postfix) with ESMTP id B4968561D8; Mon, 30 Nov 2020 09:17:11 -0500 (EST) X-Virus-Scanned: Debian amavisd-new at gnat.com Received: from rock.gnat.com ([127.0.0.1]) by localhost (rock.gnat.com [127.0.0.1]) (amavisd-new, port 10024) with LMTP id EI-iCm3PbgAE; Mon, 30 Nov 2020 09:17:11 -0500 (EST) Received: from tron.gnat.com (tron.gnat.com [IPv6:2620:20:4000:0:46a8:42ff:fe0e:e294]) by rock.gnat.com (Postfix) with ESMTP id A32BE561E4; Mon, 30 Nov 2020 09:17:11 -0500 (EST) Received: by tron.gnat.com (Postfix, from userid 4862) id A25CBCB; Mon, 30 Nov 2020 09:17:11 -0500 (EST) Date: Mon, 30 Nov 2020 09:17:11 -0500 From: Pierre-Marie de Rodat To: gcc-patches@gcc.gnu.org Subject: [Ada] Fix serial port control setting on GNU/Linux Message-ID: <20201130141711.GA117766@adacore.com> MIME-Version: 1.0 Content-Disposition: inline User-Agent: Mutt/1.5.23 (2014-03-12) X-Spam-Status: No, score=-11.3 required=5.0 tests=BAYES_00, GIT_PATCH_0, KAM_DMARC_STATUS, SPF_HELO_NONE, SPF_PASS, TXREP autolearn=ham autolearn_force=no version=3.4.2 X-Spam-Checker-Version: SpamAssassin 3.4.2 (2018-09-13) on server2.sourceware.org X-BeenThere: gcc-patches@gcc.gnu.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: Gcc-patches mailing list List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Cc: Pascal Obry Errors-To: gcc-patches-bounces@gcc.gnu.org Sender: "Gcc-patches" This fixes an issue when setting the control flags of the serial communication port. The c_cflag termios field should not be set with the baud rate. The speed of the communication is set using the c_ispeed and c_ospeed fields. Setting the baud rate into the c_cflag has unexpected results as it will wrongly set some bits used to control other aspects of the communication channel (bits, parity...). Tested on x86_64-pc-linux-gnu, committed on trunk gcc/ada/ * libgnat/g-sercom__linux.adb (Set): Fix control flags of the serial port setting. diff --git a/gcc/ada/libgnat/g-sercom__linux.adb b/gcc/ada/libgnat/g-sercom__linux.adb --- a/gcc/ada/libgnat/g-sercom__linux.adb +++ b/gcc/ada/libgnat/g-sercom__linux.adb @@ -52,34 +52,6 @@ package body GNAT.Serial_Communications is function fcntl (fd : int; cmd : int; value : int) return int; pragma Import (C, fcntl, "fcntl"); - C_Data_Rate : constant array (Data_Rate) of unsigned := - (B75 => OSC.B75, - B110 => OSC.B110, - B150 => OSC.B150, - B300 => OSC.B300, - B600 => OSC.B600, - B1200 => OSC.B1200, - B2400 => OSC.B2400, - B4800 => OSC.B4800, - B9600 => OSC.B9600, - B19200 => OSC.B19200, - B38400 => OSC.B38400, - B57600 => OSC.B57600, - B115200 => OSC.B115200, - B230400 => OSC.B230400, - B460800 => OSC.B460800, - B500000 => OSC.B500000, - B576000 => OSC.B576000, - B921600 => OSC.B921600, - B1000000 => OSC.B1000000, - B1152000 => OSC.B1152000, - B1500000 => OSC.B1500000, - B2000000 => OSC.B2000000, - B2500000 => OSC.B2500000, - B3000000 => OSC.B3000000, - B3500000 => OSC.B3500000, - B4000000 => OSC.B4000000); - C_Bits : constant array (Data_Bits) of unsigned := (CS7 => OSC.CS7, CS8 => OSC.CS8); @@ -229,8 +201,7 @@ package body GNAT.Serial_Communications is -- Change settings now - Current.c_cflag := C_Data_Rate (Rate) - or C_Bits (Bits) + Current.c_cflag := C_Bits (Bits) or C_Stop_Bits (Stop_Bits) or C_Parity (Parity) or CREAD;