diff options
author | Linus Torvalds <torvalds@linux-foundation.org> | 2009-06-12 18:15:51 -0700 |
---|---|---|
committer | Linus Torvalds <torvalds@linux-foundation.org> | 2009-06-12 18:15:51 -0700 |
commit | cd166bd0dde265a97dd9aa8e3451a2646d96d04b (patch) | |
tree | 3a7fb5b8bb8d7676e804845b75977be380b8dcff /include/asm-generic/termios.h | |
parent | 6b702462cbe5b6f372966a53f4465d745d86b65c (diff) | |
parent | 5b02ee3d219f9e01b6e9146e25613822cfc2e5ce (diff) |
Merge branch 'for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/arnd/asm-generic
* 'for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/arnd/asm-generic:
add generic lib/checksum.c
asm-generic: add a generic uaccess.h
asm-generic: add generic NOMMU versions of some headers
asm-generic: add generic atomic.h and io.h
asm-generic: add legacy I/O header files
asm-generic: add generic versions of common headers
asm-generic: make bitops.h usable
asm-generic: make pci.h usable directly
asm-generic: make get_rtc_time overridable
asm-generic: rename page.h and uaccess.h
asm-generic: rename atomic.h to atomic-long.h
asm-generic: add a generic unistd.h
asm-generic: add generic ABI headers
asm-generic: add generic sysv ipc headers
asm-generic: introduce asm/bitsperlong.h
asm-generic: rename termios.h, signal.h and mman.h
Diffstat (limited to 'include/asm-generic/termios.h')
-rw-r--r-- | include/asm-generic/termios.h | 105 |
1 files changed, 91 insertions, 14 deletions
diff --git a/include/asm-generic/termios.h b/include/asm-generic/termios.h index 7d39ecc92d9..d0922adc56d 100644 --- a/include/asm-generic/termios.h +++ b/include/asm-generic/termios.h @@ -1,18 +1,68 @@ -/* termios.h: generic termios/termio user copying/translation - */ - #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 <asm/termbits.h> +#include <asm/ioctls.h> + +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 <asm/uaccess.h> -#ifndef __ARCH_TERMIO_GETPUT +/* 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) + const struct termio __user *termio) { unsigned short tmp; @@ -61,17 +111,44 @@ static inline int kernel_termios_to_user_termio(struct termio __user *termio, return 0; } -#ifndef user_termios_to_kernel_termios -#define user_termios_to_kernel_termios(k, u) copy_from_user(k, u, sizeof(struct termios)) -#endif +#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)); +} -#ifndef kernel_termios_to_user_termios -#define kernel_termios_to_user_termios(u, k) copy_to_user(u, k, sizeof(struct termios)) -#endif +static inline int kernel_termios_to_user_termios(struct termios2 __user *u, + struct ktermios *k) +{ + return copy_to_user(u, k, sizeof(struct termios2)); +} -#define user_termios_to_kernel_termios_1(k, u) copy_from_user(k, u, sizeof(struct termios)) -#define kernel_termios_to_user_termios_1(u, k) copy_to_user(u, k, sizeof(struct termios)) +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 /* __ARCH_TERMIO_GETPUT */ +#endif /* __KERNEL__ */ #endif /* _ASM_GENERIC_TERMIOS_H */ |