File: /usr/src/linux/include/asm-sparc/termios.h

1     /* $Id: termios.h,v 1.32 2001/06/01 08:12:11 davem Exp $ */
2     #ifndef _SPARC_TERMIOS_H
3     #define _SPARC_TERMIOS_H
4     
5     #include <asm/ioctls.h>
6     #include <asm/termbits.h>
7     
8     #if defined(__KERNEL__) || defined(__DEFINE_BSD_TERMIOS)
9     struct sgttyb {
10     	char	sg_ispeed;
11     	char	sg_ospeed;
12     	char	sg_erase;
13     	char	sg_kill;
14     	short	sg_flags;
15     };
16     
17     struct tchars {
18     	char	t_intrc;
19     	char	t_quitc;
20     	char	t_startc;
21     	char	t_stopc;
22     	char	t_eofc;
23     	char	t_brkc;
24     };
25     
26     struct ltchars {
27     	char	t_suspc;
28     	char	t_dsuspc;
29     	char	t_rprntc;
30     	char	t_flushc;
31     	char	t_werasc;
32     	char	t_lnextc;
33     };
34     #endif /* __KERNEL__ */
35     
36     struct sunos_ttysize {
37     	int st_lines;   /* Lines on the terminal */
38     	int st_columns; /* Columns on the terminal */
39     };
40     
41     /* Used for packet mode */
42     #define TIOCPKT_DATA		 0
43     #define TIOCPKT_FLUSHREAD	 1
44     #define TIOCPKT_FLUSHWRITE	 2
45     #define TIOCPKT_STOP		 4
46     #define TIOCPKT_START		 8
47     #define TIOCPKT_NOSTOP		16
48     #define TIOCPKT_DOSTOP		32
49     
50     struct winsize {
51     	unsigned short ws_row;
52     	unsigned short ws_col;
53     	unsigned short ws_xpixel;
54     	unsigned short ws_ypixel;
55     };
56     
57     /* line disciplines */
58     #define N_TTY		0
59     #define N_SLIP		1
60     #define N_MOUSE		2
61     #define N_PPP		3
62     #define N_STRIP		4
63     #define N_AX25		5
64     #define N_X25		6
65     #define N_6PACK		7
66     #define N_MASC		8	/* Reserved for Mobitex module <kaz@cafe.net> */
67     #define N_R3964		9	/* Reserved for Simatic R3964 module */
68     #define N_PROFIBUS_FDL	10	/* Reserved for Profibus <Dave@mvhi.com> */
69     #define N_IRDA		11	/* Linux IrDa - http://irda.sourceforge.net/ */
70     #define N_SMSBLOCK	12	/* SMS block mode - for talking to GSM data cards about SMS messages */
71     #define N_HDLC		13	/* synchronous HDLC */
72     #define N_SYNC_PPP	14	/* synchronous PPP */
73     #define N_HCI		15  /* Bluetooth HCI UART */
74     
75     #ifdef __KERNEL__
76     
77     /*
78      * c_cc characters in the termio structure.  Oh, how I love being
79      * backwardly compatible.  Notice that character 4 and 5 are
80      * interpreted differently depending on whether ICANON is set in
81      * c_lflag.  If it's set, they are used as _VEOF and _VEOL, otherwise
82      * as _VMIN and V_TIME.  This is for compatibility with OSF/1 (which
83      * is compatible with sysV)...
84      */
85     #define _VMIN	4
86     #define _VTIME	5
87     
88     
89     /*	intr=^C		quit=^\		erase=del	kill=^U
90     	eof=^D		eol=\0		eol2=\0		sxtc=\0
91     	start=^Q	stop=^S		susp=^Z		dsusp=^Y
92     	reprint=^R	discard=^U	werase=^W	lnext=^V
93     	vmin=\1         vtime=\0
94     */
95     #define INIT_C_CC "\003\034\177\025\004\000\000\000\021\023\032\031\022\025\027\026\001\000"
96     
97     /*
98      * Translate a "termio" structure into a "termios". Ugh.
99      */
100     #define user_termio_to_kernel_termios(termios, termio) \
101     ({ \
102     	unsigned short tmp; \
103     	get_user(tmp, &(termio)->c_iflag); \
104     	(termios)->c_iflag = (0xffff0000 & ((termios)->c_iflag)) | tmp; \
105     	get_user(tmp, &(termio)->c_oflag); \
106     	(termios)->c_oflag = (0xffff0000 & ((termios)->c_oflag)) | tmp; \
107     	get_user(tmp, &(termio)->c_cflag); \
108     	(termios)->c_cflag = (0xffff0000 & ((termios)->c_cflag)) | tmp; \
109     	get_user(tmp, &(termio)->c_lflag); \
110     	(termios)->c_lflag = (0xffff0000 & ((termios)->c_lflag)) | tmp; \
111     	copy_from_user((termios)->c_cc, (termio)->c_cc, NCC); \
112     	0; \
113     })
114     
115     /*
116      * Translate a "termios" structure into a "termio". Ugh.
117      *
118      * Note the "fun" _VMIN overloading.
119      */
120     #define kernel_termios_to_user_termio(termio, termios) \
121     ({ \
122     	put_user((termios)->c_iflag, &(termio)->c_iflag); \
123     	put_user((termios)->c_oflag, &(termio)->c_oflag); \
124     	put_user((termios)->c_cflag, &(termio)->c_cflag); \
125     	put_user((termios)->c_lflag, &(termio)->c_lflag); \
126     	put_user((termios)->c_line,  &(termio)->c_line); \
127     	copy_to_user((termio)->c_cc, (termios)->c_cc, NCC); \
128     	if (!((termios)->c_lflag & ICANON)) { \
129     		put_user((termios)->c_cc[VMIN], &(termio)->c_cc[_VMIN]); \
130     		put_user((termios)->c_cc[VTIME], &(termio)->c_cc[_VTIME]); \
131     	} \
132     	0; \
133     })
134     
135     #define user_termios_to_kernel_termios(k, u) \
136     ({ \
137     	get_user((k)->c_iflag, &(u)->c_iflag); \
138     	get_user((k)->c_oflag, &(u)->c_oflag); \
139     	get_user((k)->c_cflag, &(u)->c_cflag); \
140     	get_user((k)->c_lflag, &(u)->c_lflag); \
141     	get_user((k)->c_line,  &(u)->c_line); \
142     	copy_from_user((k)->c_cc, (u)->c_cc, NCCS); \
143     	if((k)->c_lflag & ICANON) { \
144     		get_user((k)->c_cc[VEOF], &(u)->c_cc[VEOF]); \
145     		get_user((k)->c_cc[VEOL], &(u)->c_cc[VEOL]); \
146     	} else { \
147     		get_user((k)->c_cc[VMIN],  &(u)->c_cc[_VMIN]); \
148     		get_user((k)->c_cc[VTIME], &(u)->c_cc[_VTIME]); \
149     	} \
150     	0; \
151     })
152     
153     #define kernel_termios_to_user_termios(u, k) \
154     ({ \
155     	put_user((k)->c_iflag, &(u)->c_iflag); \
156     	put_user((k)->c_oflag, &(u)->c_oflag); \
157     	put_user((k)->c_cflag, &(u)->c_cflag); \
158     	put_user((k)->c_lflag, &(u)->c_lflag); \
159     	put_user((k)->c_line, &(u)->c_line); \
160     	copy_to_user((u)->c_cc, (k)->c_cc, NCCS); \
161     	if(!((k)->c_lflag & ICANON)) { \
162     		put_user((k)->c_cc[VMIN],  &(u)->c_cc[_VMIN]); \
163     		put_user((k)->c_cc[VTIME], &(u)->c_cc[_VTIME]); \
164     	} else { \
165     		put_user((k)->c_cc[VEOF], &(u)->c_cc[VEOF]); \
166     		put_user((k)->c_cc[VEOL], &(u)->c_cc[VEOL]); \
167     	} \
168     	0; \
169     })
170     
171     #endif	/* __KERNEL__ */
172     
173     #endif /* _SPARC_TERMIOS_H */
174