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 */ |