diff options
Diffstat (limited to 'arch/x86/include/asm/termios.h')
-rw-r--r-- | arch/x86/include/asm/termios.h | 155 |
1 files changed, 1 insertions, 154 deletions
diff --git a/arch/x86/include/asm/termios.h b/arch/x86/include/asm/termios.h index d0922adc56d..280d78a9d96 100644 --- a/arch/x86/include/asm/termios.h +++ b/arch/x86/include/asm/termios.h | |||
@@ -1,154 +1 @@ | |||
1 | #ifndef _ASM_GENERIC_TERMIOS_H | #include <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__ | ||
50 | |||
51 | #include <asm/uaccess.h> | ||
52 | |||
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" | ||
60 | |||
61 | /* | ||
62 | * Translate a "termio" structure into a "termios". Ugh. | ||
63 | */ | ||
64 | static inline int user_termio_to_kernel_termios(struct ktermios *termios, | ||
65 | const struct termio __user *termio) | ||
66 | { | ||
67 | unsigned short tmp; | ||
68 | |||
69 | if (get_user(tmp, &termio->c_iflag) < 0) | ||
70 | goto fault; | ||
71 | termios->c_iflag = (0xffff0000 & termios->c_iflag) | tmp; | ||
72 | |||
73 | if (get_user(tmp, &termio->c_oflag) < 0) | ||
74 | goto fault; | ||
75 | termios->c_oflag = (0xffff0000 & termios->c_oflag) | tmp; | ||
76 | |||
77 | if (get_user(tmp, &termio->c_cflag) < 0) | ||
78 | goto fault; | ||
79 | termios->c_cflag = (0xffff0000 & termios->c_cflag) | tmp; | ||
80 | |||
81 | if (get_user(tmp, &termio->c_lflag) < 0) | ||
82 | goto fault; | ||
83 | termios->c_lflag = (0xffff0000 & termios->c_lflag) | tmp; | ||
84 | |||
85 | if (get_user(termios->c_line, &termio->c_line) < 0) | ||
86 | goto fault; | ||
87 | |||
88 | if (copy_from_user(termios->c_cc, termio->c_cc, NCC) != 0) | ||
89 | goto fault; | ||
90 | |||
91 | return 0; | ||
92 | |||
93 | fault: | ||
94 | return -EFAULT; | ||
95 | } | ||
96 | |||
97 | /* | ||
98 | * Translate a "termios" structure into a "termio". Ugh. | ||
99 | */ | ||
100 | static inline int kernel_termios_to_user_termio(struct termio __user *termio, | ||
101 | struct ktermios *termios) | ||
102 | { | ||
103 | if (put_user(termios->c_iflag, &termio->c_iflag) < 0 || | ||
104 | put_user(termios->c_oflag, &termio->c_oflag) < 0 || | ||
105 | put_user(termios->c_cflag, &termio->c_cflag) < 0 || | ||
106 | put_user(termios->c_lflag, &termio->c_lflag) < 0 || | ||
107 | put_user(termios->c_line, &termio->c_line) < 0 || | ||
108 | copy_to_user(termio->c_cc, termios->c_cc, NCC) != 0) | ||
109 | return -EFAULT; | ||
110 | |||
111 | return 0; | ||
112 | } | ||
113 | |||
114 | #ifdef TCGETS2 | ||
115 | static inline int user_termios_to_kernel_termios(struct ktermios *k, | ||
116 | struct termios2 __user *u) | ||
117 | { | ||
118 | return copy_from_user(k, u, sizeof(struct termios2)); | ||
119 | } | ||
120 | |||
121 | static inline int kernel_termios_to_user_termios(struct termios2 __user *u, | ||
122 | struct ktermios *k) | ||
123 | { | ||
124 | return copy_to_user(u, k, sizeof(struct termios2)); | ||
125 | } | ||
126 | |||
127 | static inline int user_termios_to_kernel_termios_1(struct ktermios *k, | ||
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 */ | ||
151 | |||
152 | #endif /* __KERNEL__ */ | ||
153 | |||
154 | #endif /* _ASM_GENERIC_TERMIOS_H */ | ||