Return-Path: Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S932413AbZD0TLQ (ORCPT ); Mon, 27 Apr 2009 15:11:16 -0400 Received: (majordomo@vger.kernel.org) by vger.kernel.org id S1760260AbZD0TJZ (ORCPT ); Mon, 27 Apr 2009 15:09:25 -0400 Received: from vms173003pub.verizon.net ([206.46.173.3]:14764 "EHLO vms173003pub.verizon.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1759606AbZD0TJX convert rfc822-to-8bit (ORCPT ); Mon, 27 Apr 2009 15:09:23 -0400 From: Gene Heskett Organization: Organization? Not detectable Date: Mon, 27 Apr 2009 15:09:04 -0400 User-Agent: KMail/1.11.2 (Linux/2.6.30-rc3; KDE/4.2.2; i686; ; ) MIME-version: 1.0 Subject: Fwd: To: linux-kernel@vger.kernel.org Content-Type: Text/Plain; charset=US-ASCII Content-Transfer-Encoding: 7BIT Content-disposition: inline Message-id: <200904271509.04515.gene.heskett@verizon.net> Sender: linux-kernel-owner@vger.kernel.org List-ID: X-Mailing-List: linux-kernel@vger.kernel.org Content-Length: 7071 Lines: 239 ---------- Forwarded Message ---------- Subject: Date: Monday 27 April 2009 From: arnd@arndb.de To: "no To-header on input" >From arnd@arndb.de Mon Apr 27 16:28:40 2009 References: <20090427142010.587518220@arndb.de> User-Agent: quilt/0.46-1 Date: Mon, 27 Apr 2009 16:20:15 +0200 From: arnd@arndb.de To: linux-kernel@vger.kernel.org Cc: john.williams@petalogix.com, monstr@monstr.eu, linux-api@vger.kernel.org, linux-arch@vger.kernel.org, liqin.chen@sunplusct.com, Sam Ravnborg , Remis Lima Baima Subject: [RFC 05/17] asm-generic: add complete termios.h Content-Disposition: inline; filename=add-generic-termios-h.patch X-Provags-ID: V01U2FsdGVkX1843JWJKO1J3mO+QAC4k//5T+uyefOPaJT3QS0 JXWnoALYmSO+jdZwxzpHNuXXmHf5eMX8pWSNKiyav9JTY1JI8U L13xq9UgAJ25BKhTIFKBw== On most architectures, asm/termios.h is a straight copy from the x86 version. This adds a cleaned up copy of that version so that everybody can migrate to the common copy. The existing asm-generic/termios.h was an incomplete file and missing some bug fixes that went into a few of the architectures. Signed-off-by: Arnd Bergmann Signed-off-by: Remis Lima Baima --- include/asm-generic/Kbuild | 1 1 + 0 - 0 ! include/asm-generic/termios.h | 154 154 + 0 - 0 ! 2 files changed, 155 insertions(+) create mode 100644 include/asm-generic/termios-base.h Index: linux-2.6/include/asm-generic/Kbuild =================================================================== --- linux-2.6.orig/include/asm-generic/Kbuild +++ linux-2.6/include/asm-generic/Kbuild @@ -6,6 +6,7 @@ header-y += mman-common.h header-y += poll.h header-y += signal-defs.h header-y += statfs.h +header-y += termios.h unifdef-y += int-l64.h unifdef-y += int-ll64.h Index: linux-2.6/include/asm-generic/termios.h =================================================================== --- /dev/null +++ linux-2.6/include/asm-generic/termios.h @@ -0,0 +1,154 @@ +#ifndef _ASM_GENERIC_TERMIOS_H +#define _ASM_GENERIC_TERMIOS_H +/* + * Most architectures have straight copies of the x86 code, with + * varying levels of bug fixes on top. Usually it's a good idea + * to use this generic version instead, but be careful to avoid + * ABI changes. + * New architectures should not provide their own version. + */ + +#include +#include + +struct winsize { + unsigned short ws_row; + unsigned short ws_col; + unsigned short ws_xpixel; + unsigned short ws_ypixel; +}; + +#define NCC 8 +struct termio { + unsigned short c_iflag; /* input mode flags */ + unsigned short c_oflag; /* output mode flags */ + unsigned short c_cflag; /* control mode flags */ + unsigned short c_lflag; /* local mode flags */ + unsigned char c_line; /* line discipline */ + unsigned char c_cc[NCC]; /* control characters */ +}; + +/* modem lines */ +#define TIOCM_LE 0x001 +#define TIOCM_DTR 0x002 +#define TIOCM_RTS 0x004 +#define TIOCM_ST 0x008 +#define TIOCM_SR 0x010 +#define TIOCM_CTS 0x020 +#define TIOCM_CAR 0x040 +#define TIOCM_RNG 0x080 +#define TIOCM_DSR 0x100 +#define TIOCM_CD TIOCM_CAR +#define TIOCM_RI TIOCM_RNG +#define TIOCM_OUT1 0x2000 +#define TIOCM_OUT2 0x4000 +#define TIOCM_LOOP 0x8000 + +/* ioctl (fd, TIOCSERGETLSR, &result) where result may be as below */ + +#ifdef __KERNEL__ + +#include + +/* intr=^C quit=^\ erase=del kill=^U + eof=^D vtime=\0 vmin=\1 sxtc=\0 + start=^Q stop=^S susp=^Z eol=\0 + reprint=^R discard=^U werase=^W lnext=^V + eol2=\0 +*/ +#define INIT_C_CC "\003\034\177\025\004\0\1\0\021\023\032\0\022\017\027\026\0" + +/* + * Translate a "termio" structure into a "termios". Ugh. + */ +static inline int user_termio_to_kernel_termios(struct ktermios *termios, + struct termio __user *termio) +{ + unsigned short tmp; + + if (get_user(tmp, &termio->c_iflag) < 0) + goto fault; + termios->c_iflag = (0xffff0000 & termios->c_iflag) | tmp; + + if (get_user(tmp, &termio->c_oflag) < 0) + goto fault; + termios->c_oflag = (0xffff0000 & termios->c_oflag) | tmp; + + if (get_user(tmp, &termio->c_cflag) < 0) + goto fault; + termios->c_cflag = (0xffff0000 & termios->c_cflag) | tmp; + + if (get_user(tmp, &termio->c_lflag) < 0) + goto fault; + termios->c_lflag = (0xffff0000 & termios->c_lflag) | tmp; + + if (get_user(termios->c_line, &termio->c_line) < 0) + goto fault; + + if (copy_from_user(termios->c_cc, termio->c_cc, NCC) != 0) + goto fault; + + return 0; + + fault: + return -EFAULT; +} + +/* + * Translate a "termios" structure into a "termio". Ugh. + */ +static inline int kernel_termios_to_user_termio(struct termio __user *termio, + struct ktermios *termios) +{ + if (put_user(termios->c_iflag, &termio->c_iflag) < 0 || + put_user(termios->c_oflag, &termio->c_oflag) < 0 || + put_user(termios->c_cflag, &termio->c_cflag) < 0 || + put_user(termios->c_lflag, &termio->c_lflag) < 0 || + put_user(termios->c_line, &termio->c_line) < 0 || + copy_to_user(termio->c_cc, termios->c_cc, NCC) != 0) + return -EFAULT; + + return 0; +} + +#ifdef TCGETS2 +static inline int user_termios_to_kernel_termios(struct ktermios *k, + struct termios2 __user *u) +{ + return copy_from_user(k, u, sizeof(struct termios2)); +} + +static inline int kernel_termios_to_user_termios(struct termios2 __user *u, + struct ktermios *k) +{ + return copy_to_user(u, k, sizeof(struct termios2)); +} + +static inline int user_termios_to_kernel_termios_1(struct ktermios *k, + struct termios __user *u) +{ + return copy_from_user(k, u, sizeof(struct termios)); +} + +static inline int kernel_termios_to_user_termios_1(struct termios __user *u, + struct ktermios *k) +{ + return copy_to_user(u, k, sizeof(struct termios)); +} +#else /* TCGETS2 */ +static inline int user_termios_to_kernel_termios(struct ktermios *k, + struct termios __user *u) +{ + return copy_from_user(k, u, sizeof(struct termios)); +} + +static inline int kernel_termios_to_user_termios(struct termios __user *u, + struct ktermios *k) +{ + return copy_to_user(u, k, sizeof(struct termios)); +} +#endif /* TCGETS2 */ + +#endif /* __KERNEL__ */ + +#endif /* _ASM_GENERIC_TERMIOS_H */ -- -- To unsubscribe from this list: send the line "unsubscribe linux-kernel" in the body of a message to majordomo@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html Please read the FAQ at http://www.tux.org/lkml/ ------------------------------------------------------- -- Cheers, Gene "There are four boxes to be used in defense of liberty: soap, ballot, jury, and ammo. Please use in that order." -Ed Howdershelt (Author) "The four building blocks of the universe are fire, water, gravel and vinyl." -- Dave Barry -- To unsubscribe from this list: send the line "unsubscribe linux-kernel" in the body of a message to majordomo@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html Please read the FAQ at http://www.tux.org/lkml/