diff options
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 7d39ecc92d94..d0922adc56d4 100644 --- a/include/asm-generic/termios.h +++ b/include/asm-generic/termios.h | |||
| @@ -1,18 +1,68 @@ | |||
| 1 | /* termios.h: generic termios/termio user copying/translation | ||
| 2 | */ | ||
| 3 | |||
| 4 | #ifndef _ASM_GENERIC_TERMIOS_H | 1 | #ifndef _ASM_GENERIC_TERMIOS_H |
| 5 | #define _ASM_GENERIC_TERMIOS_H | 2 | #define _ASM_GENERIC_TERMIOS_H |
| 3 | /* | ||
| 4 | * Most architectures have straight copies of the x86 code, with | ||
| 5 | * varying levels of bug fixes on top. Usually it's a good idea | ||
| 6 | * to use this generic version instead, but be careful to avoid | ||
| 7 | * ABI changes. | ||
| 8 | * New architectures should not provide their own version. | ||
| 9 | */ | ||
| 10 | |||
| 11 | #include <asm/termbits.h> | ||
| 12 | #include <asm/ioctls.h> | ||
| 13 | |||
| 14 | struct winsize { | ||
| 15 | unsigned short ws_row; | ||
| 16 | unsigned short ws_col; | ||
| 17 | unsigned short ws_xpixel; | ||
| 18 | unsigned short ws_ypixel; | ||
| 19 | }; | ||
| 20 | |||
| 21 | #define NCC 8 | ||
| 22 | struct termio { | ||
| 23 | unsigned short c_iflag; /* input mode flags */ | ||
| 24 | unsigned short c_oflag; /* output mode flags */ | ||
| 25 | unsigned short c_cflag; /* control mode flags */ | ||
| 26 | unsigned short c_lflag; /* local mode flags */ | ||
| 27 | unsigned char c_line; /* line discipline */ | ||
| 28 | unsigned char c_cc[NCC]; /* control characters */ | ||
| 29 | }; | ||
| 30 | |||
| 31 | /* modem lines */ | ||
| 32 | #define TIOCM_LE 0x001 | ||
| 33 | #define TIOCM_DTR 0x002 | ||
| 34 | #define TIOCM_RTS 0x004 | ||
| 35 | #define TIOCM_ST 0x008 | ||
| 36 | #define TIOCM_SR 0x010 | ||
| 37 | #define TIOCM_CTS 0x020 | ||
| 38 | #define TIOCM_CAR 0x040 | ||
| 39 | #define TIOCM_RNG 0x080 | ||
| 40 | #define TIOCM_DSR 0x100 | ||
| 41 | #define TIOCM_CD TIOCM_CAR | ||
| 42 | #define TIOCM_RI TIOCM_RNG | ||
| 43 | #define TIOCM_OUT1 0x2000 | ||
| 44 | #define TIOCM_OUT2 0x4000 | ||
| 45 | #define TIOCM_LOOP 0x8000 | ||
| 46 | |||
| 47 | /* ioctl (fd, TIOCSERGETLSR, &result) where result may be as below */ | ||
| 48 | |||
| 49 | #ifdef __KERNEL__ | ||
| 6 | 50 | ||
| 7 | #include <asm/uaccess.h> | 51 | #include <asm/uaccess.h> |
| 8 | 52 | ||
| 9 | #ifndef __ARCH_TERMIO_GETPUT | 53 | /* intr=^C quit=^\ erase=del kill=^U |
| 54 | eof=^D vtime=\0 vmin=\1 sxtc=\0 | ||
| 55 | start=^Q stop=^S susp=^Z eol=\0 | ||
| 56 | reprint=^R discard=^U werase=^W lnext=^V | ||
| 57 | eol2=\0 | ||
| 58 | */ | ||
| 59 | #define INIT_C_CC "\003\034\177\025\004\0\1\0\021\023\032\0\022\017\027\026\0" | ||
| 10 | 60 | ||
| 11 | /* | 61 | /* |
| 12 | * Translate a "termio" structure into a "termios". Ugh. | 62 | * Translate a "termio" structure into a "termios". Ugh. |
| 13 | */ | 63 | */ |
| 14 | static inline int user_termio_to_kernel_termios(struct ktermios *termios, | 64 | static inline int user_termio_to_kernel_termios(struct ktermios *termios, |
| 15 | struct termio __user *termio) | 65 | const struct termio __user *termio) |
| 16 | { | 66 | { |
| 17 | unsigned short tmp; | 67 | unsigned short tmp; |
| 18 | 68 | ||
| @@ -61,17 +111,44 @@ static inline int kernel_termios_to_user_termio(struct termio __user *termio, | |||
| 61 | return 0; | 111 | return 0; |
| 62 | } | 112 | } |
| 63 | 113 | ||
| 64 | #ifndef user_termios_to_kernel_termios | 114 | #ifdef TCGETS2 |
| 65 | #define user_termios_to_kernel_termios(k, u) copy_from_user(k, u, sizeof(struct termios)) | 115 | static inline int user_termios_to_kernel_termios(struct ktermios *k, |
| 66 | #endif | 116 | struct termios2 __user *u) |
| 117 | { | ||
| 118 | return copy_from_user(k, u, sizeof(struct termios2)); | ||
| 119 | } | ||
| 67 | 120 | ||
| 68 | #ifndef kernel_termios_to_user_termios | 121 | static inline int kernel_termios_to_user_termios(struct termios2 __user *u, |
| 69 | #define kernel_termios_to_user_termios(u, k) copy_to_user(u, k, sizeof(struct termios)) | 122 | struct ktermios *k) |
| 70 | #endif | 123 | { |
| 124 | return copy_to_user(u, k, sizeof(struct termios2)); | ||
| 125 | } | ||
| 71 | 126 | ||
| 72 | #define user_termios_to_kernel_termios_1(k, u) copy_from_user(k, u, sizeof(struct termios)) | 127 | static inline int user_termios_to_kernel_termios_1(struct ktermios *k, |
| 73 | #define kernel_termios_to_user_termios_1(u, k) copy_to_user(u, k, sizeof(struct termios)) | 128 | struct termios __user *u) |
| 129 | { | ||
| 130 | return copy_from_user(k, u, sizeof(struct termios)); | ||
| 131 | } | ||
| 132 | |||
| 133 | static inline int kernel_termios_to_user_termios_1(struct termios __user *u, | ||
| 134 | struct ktermios *k) | ||
| 135 | { | ||
| 136 | return copy_to_user(u, k, sizeof(struct termios)); | ||
| 137 | } | ||
| 138 | #else /* TCGETS2 */ | ||
| 139 | static inline int user_termios_to_kernel_termios(struct ktermios *k, | ||
| 140 | struct termios __user *u) | ||
| 141 | { | ||
| 142 | return copy_from_user(k, u, sizeof(struct termios)); | ||
| 143 | } | ||
| 144 | |||
| 145 | static inline int kernel_termios_to_user_termios(struct termios __user *u, | ||
| 146 | struct ktermios *k) | ||
| 147 | { | ||
| 148 | return copy_to_user(u, k, sizeof(struct termios)); | ||
| 149 | } | ||
| 150 | #endif /* TCGETS2 */ | ||
| 74 | 151 | ||
| 75 | #endif /* __ARCH_TERMIO_GETPUT */ | 152 | #endif /* __KERNEL__ */ |
| 76 | 153 | ||
| 77 | #endif /* _ASM_GENERIC_TERMIOS_H */ | 154 | #endif /* _ASM_GENERIC_TERMIOS_H */ |
