2 * This file is subject to the terms and conditions of the GNU General Public
3 * License. See the file "COPYING" in the main directory of this archive
6 * Copyright (C) 1995, 1996, 2000, 2001 by Ralf Baechle
7 * Copyright (C) 2000, 2001 Silicon Graphics, Inc.
10 #define _ASM_TERMIOS_H
12 #include <linux/errno.h>
13 #include <asm/termbits.h>
14 #include <asm/ioctls.h>
21 int sg_flags
; /* SGI special - int, not short */
34 char t_suspc
; /* stop process signal */
35 char t_dsuspc
; /* delayed stop process signal */
36 char t_rprntc
; /* reprint line */
37 char t_flushc
; /* flush output (toggles) */
38 char t_werasc
; /* word erase */
39 char t_lnextc
; /* literal next character */
42 /* TIOCGSIZE, TIOCSSIZE not defined yet. Only needed for SunOS source
43 compatibility anyway ... */
46 unsigned short ws_row
;
47 unsigned short ws_col
;
48 unsigned short ws_xpixel
;
49 unsigned short ws_ypixel
;
54 unsigned short c_iflag
; /* input mode flags */
55 unsigned short c_oflag
; /* output mode flags */
56 unsigned short c_cflag
; /* control mode flags */
57 unsigned short c_lflag
; /* local mode flags */
58 char c_line
; /* line discipline */
59 unsigned char c_cc
[NCCS
]; /* control characters */
63 #include <linux/module.h>
66 * intr=^C quit=^\ erase=del kill=^U
67 * vmin=\1 vtime=\0 eol2=\0 swtc=\0
68 * start=^Q stop=^S susp=^Z vdsusp=
69 * reprint=^R discard=^U werase=^W lnext=^V
72 #define INIT_C_CC "\003\034\177\025\1\0\0\0\021\023\032\0\022\017\027\026\004\0"
76 #define TIOCM_LE 0x001 /* line enable */
77 #define TIOCM_DTR 0x002 /* data terminal ready */
78 #define TIOCM_RTS 0x004 /* request to send */
79 #define TIOCM_ST 0x010 /* secondary transmit */
80 #define TIOCM_SR 0x020 /* secondary receive */
81 #define TIOCM_CTS 0x040 /* clear to send */
82 #define TIOCM_CAR 0x100 /* carrier detect */
83 #define TIOCM_CD TIOCM_CAR
84 #define TIOCM_RNG 0x200 /* ring */
85 #define TIOCM_RI TIOCM_RNG
86 #define TIOCM_DSR 0x400 /* data set ready */
87 #define TIOCM_OUT1 0x2000
88 #define TIOCM_OUT2 0x4000
89 #define TIOCM_LOOP 0x8000
93 #include <linux/string.h>
96 * Translate a "termio" structure into a "termios". Ugh.
98 static inline int user_termio_to_kernel_termios(struct ktermios
*termios
,
99 struct termio __user
*termio
)
101 unsigned short iflag
, oflag
, cflag
, lflag
;
104 if (!access_ok(VERIFY_READ
, termio
, sizeof(struct termio
)))
107 err
= __get_user(iflag
, &termio
->c_iflag
);
108 termios
->c_iflag
= (termios
->c_iflag
& 0xffff0000) | iflag
;
109 err
|=__get_user(oflag
, &termio
->c_oflag
);
110 termios
->c_oflag
= (termios
->c_oflag
& 0xffff0000) | oflag
;
111 err
|=__get_user(cflag
, &termio
->c_cflag
);
112 termios
->c_cflag
= (termios
->c_cflag
& 0xffff0000) | cflag
;
113 err
|=__get_user(lflag
, &termio
->c_lflag
);
114 termios
->c_lflag
= (termios
->c_lflag
& 0xffff0000) | lflag
;
115 err
|=__get_user(termios
->c_line
, &termio
->c_line
);
119 if (__copy_from_user(termios
->c_cc
, termio
->c_cc
, NCC
))
126 * Translate a "termios" structure into a "termio". Ugh.
128 static inline int kernel_termios_to_user_termio(struct termio __user
*termio
,
129 struct ktermios
*termios
)
133 if (!access_ok(VERIFY_WRITE
, termio
, sizeof(struct termio
)))
136 err
= __put_user(termios
->c_iflag
, &termio
->c_iflag
);
137 err
|= __put_user(termios
->c_oflag
, &termio
->c_oflag
);
138 err
|= __put_user(termios
->c_cflag
, &termio
->c_cflag
);
139 err
|= __put_user(termios
->c_lflag
, &termio
->c_lflag
);
140 err
|= __put_user(termios
->c_line
, &termio
->c_line
);
144 if (__copy_to_user(termio
->c_cc
, termios
->c_cc
, NCC
))
150 static inline int user_termios_to_kernel_termios(struct ktermios __user
*k
,
153 return copy_from_user(k
, u
, sizeof(struct termios2
)) ? -EFAULT
: 0;
156 static inline int kernel_termios_to_user_termios(struct termios2 __user
*u
,
159 return copy_to_user(u
, k
, sizeof(struct termios2
)) ? -EFAULT
: 0;
162 static inline int user_termios_to_kernel_termios_1(struct ktermios
*k
,
163 struct termios __user
*u
)
165 return copy_from_user(k
, u
, sizeof(struct termios
)) ? -EFAULT
: 0;
168 static inline int kernel_termios_to_user_termios_1(struct termios __user
*u
,
171 return copy_to_user(u
, k
, sizeof(struct termios
)) ? -EFAULT
: 0;
174 #endif /* defined(__KERNEL__) */
176 #endif /* _ASM_TERMIOS_H */