2007-10-15 15:57:47 +04:00
# ifndef _ASM_X86_TERMIOS_H
# define _ASM_X86_TERMIOS_H
# 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 */
2007-10-11 13:20:03 +04:00
# ifdef __KERNEL__
2007-10-15 15:57:47 +04:00
2008-02-07 11:13:27 +03:00
# include <asm/uaccess.h>
2007-10-15 15:57:47 +04:00
/* 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 .
*/
# define SET_LOW_TERMIOS_BITS(termios, termio, x) { \
unsigned short __tmp ; \
get_user ( __tmp , & ( termio ) - > x ) ; \
* ( unsigned short * ) & ( termios ) - > x = __tmp ; \
}
2008-02-07 11:13:27 +03:00
static inline int user_termio_to_kernel_termios ( struct ktermios * termios ,
struct termio __user * termio )
{
SET_LOW_TERMIOS_BITS ( termios , termio , c_iflag ) ;
SET_LOW_TERMIOS_BITS ( termios , termio , c_oflag ) ;
SET_LOW_TERMIOS_BITS ( termios , termio , c_cflag ) ;
SET_LOW_TERMIOS_BITS ( termios , termio , c_lflag ) ;
return copy_from_user ( termios - > c_cc , termio - > c_cc , NCC ) ;
}
2007-10-15 15:57:47 +04:00
/*
* Translate a " termios " structure into a " termio " . Ugh .
*/
2008-02-07 11:13:27 +03:00
static inline int kernel_termios_to_user_termio ( struct termio __user * termio ,
struct ktermios * termios )
{
put_user ( ( termios ) - > c_iflag , & ( termio ) - > c_iflag ) ;
put_user ( ( termios ) - > c_oflag , & ( termio ) - > c_oflag ) ;
put_user ( ( termios ) - > c_cflag , & ( termio ) - > c_cflag ) ;
put_user ( ( termios ) - > c_lflag , & ( termio ) - > c_lflag ) ;
put_user ( ( termios ) - > c_line , & ( termio ) - > c_line ) ;
return copy_to_user ( ( termio ) - > c_cc , ( termios ) - > c_cc , NCC ) ;
}
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 ) ) ;
}
2007-10-15 15:57:47 +04:00
# endif /* __KERNEL__ */
# endif /* _ASM_X86_TERMIOS_H */