Linux Audio

Check our new training course

Loading...
v3.5.6
  1#ifndef _SPARC_TERMIOS_H
  2#define _SPARC_TERMIOS_H
  3
  4#include <asm/ioctls.h>
  5#include <asm/termbits.h>
  6
  7#if defined(__KERNEL__) || defined(__DEFINE_BSD_TERMIOS)
  8struct sgttyb {
  9	char	sg_ispeed;
 10	char	sg_ospeed;
 11	char	sg_erase;
 12	char	sg_kill;
 13	short	sg_flags;
 14};
 15
 16struct tchars {
 17	char	t_intrc;
 18	char	t_quitc;
 19	char	t_startc;
 20	char	t_stopc;
 21	char	t_eofc;
 22	char	t_brkc;
 23};
 24
 25struct ltchars {
 26	char	t_suspc;
 27	char	t_dsuspc;
 28	char	t_rprntc;
 29	char	t_flushc;
 30	char	t_werasc;
 31	char	t_lnextc;
 32};
 33#endif /* __KERNEL__ */
 34
 35struct winsize {
 36	unsigned short ws_row;
 37	unsigned short ws_col;
 38	unsigned short ws_xpixel;
 39	unsigned short ws_ypixel;
 40};
 41
 42#ifdef __KERNEL__
 43
 44/*
 45 * c_cc characters in the termio structure.  Oh, how I love being
 46 * backwardly compatible.  Notice that character 4 and 5 are
 47 * interpreted differently depending on whether ICANON is set in
 48 * c_lflag.  If it's set, they are used as _VEOF and _VEOL, otherwise
 49 * as _VMIN and V_TIME.  This is for compatibility with OSF/1 (which
 50 * is compatible with sysV)...
 51 */
 52#define _VMIN	4
 53#define _VTIME	5
 54
 55/*	intr=^C		quit=^\		erase=del	kill=^U
 56	eof=^D		eol=\0		eol2=\0		sxtc=\0
 57	start=^Q	stop=^S		susp=^Z		dsusp=^Y
 58	reprint=^R	discard=^U	werase=^W	lnext=^V
 59	vmin=\1         vtime=\0
 60*/
 61#define INIT_C_CC "\003\034\177\025\004\000\000\000\021\023\032\031\022\025\027\026\001"
 62
 63/*
 64 * Translate a "termio" structure into a "termios". Ugh.
 65 */
 66#define user_termio_to_kernel_termios(termios, termio) \
 67({ \
 68	unsigned short tmp; \
 69	int err; \
 70	err = get_user(tmp, &(termio)->c_iflag); \
 71	(termios)->c_iflag = (0xffff0000 & ((termios)->c_iflag)) | tmp; \
 72	err |= get_user(tmp, &(termio)->c_oflag); \
 73	(termios)->c_oflag = (0xffff0000 & ((termios)->c_oflag)) | tmp; \
 74	err |= get_user(tmp, &(termio)->c_cflag); \
 75	(termios)->c_cflag = (0xffff0000 & ((termios)->c_cflag)) | tmp; \
 76	err |= get_user(tmp, &(termio)->c_lflag); \
 77	(termios)->c_lflag = (0xffff0000 & ((termios)->c_lflag)) | tmp; \
 78	err |= copy_from_user((termios)->c_cc, (termio)->c_cc, NCC); \
 79	err; \
 80})
 81
 82/*
 83 * Translate a "termios" structure into a "termio". Ugh.
 84 *
 85 * Note the "fun" _VMIN overloading.
 86 */
 87#define kernel_termios_to_user_termio(termio, termios) \
 88({ \
 89	int err; \
 90	err  = put_user((termios)->c_iflag, &(termio)->c_iflag); \
 91	err |= put_user((termios)->c_oflag, &(termio)->c_oflag); \
 92	err |= put_user((termios)->c_cflag, &(termio)->c_cflag); \
 93	err |= put_user((termios)->c_lflag, &(termio)->c_lflag); \
 94	err |= put_user((termios)->c_line,  &(termio)->c_line); \
 95	err |= copy_to_user((termio)->c_cc, (termios)->c_cc, NCC); \
 96	if (!((termios)->c_lflag & ICANON)) { \
 97		err |= put_user((termios)->c_cc[VMIN], &(termio)->c_cc[_VMIN]); \
 98		err |= put_user((termios)->c_cc[VTIME], &(termio)->c_cc[_VTIME]); \
 99	} \
100	err; \
101})
102
103#define user_termios_to_kernel_termios(k, u) \
104({ \
105	int err; \
106	err  = get_user((k)->c_iflag, &(u)->c_iflag); \
107	err |= get_user((k)->c_oflag, &(u)->c_oflag); \
108	err |= get_user((k)->c_cflag, &(u)->c_cflag); \
109	err |= get_user((k)->c_lflag, &(u)->c_lflag); \
110	err |= get_user((k)->c_line,  &(u)->c_line); \
111	err |= copy_from_user((k)->c_cc, (u)->c_cc, NCCS); \
112	if ((k)->c_lflag & ICANON) { \
113		err |= get_user((k)->c_cc[VEOF], &(u)->c_cc[VEOF]); \
114		err |= get_user((k)->c_cc[VEOL], &(u)->c_cc[VEOL]); \
115	} else { \
116		err |= get_user((k)->c_cc[VMIN],  &(u)->c_cc[_VMIN]); \
117		err |= get_user((k)->c_cc[VTIME], &(u)->c_cc[_VTIME]); \
118	} \
119	err |= get_user((k)->c_ispeed,  &(u)->c_ispeed); \
120	err |= get_user((k)->c_ospeed,  &(u)->c_ospeed); \
121	err; \
122})
123
124#define kernel_termios_to_user_termios(u, k) \
125({ \
126	int err; \
127	err  = put_user((k)->c_iflag, &(u)->c_iflag); \
128	err |= put_user((k)->c_oflag, &(u)->c_oflag); \
129	err |= put_user((k)->c_cflag, &(u)->c_cflag); \
130	err |= put_user((k)->c_lflag, &(u)->c_lflag); \
131	err |= put_user((k)->c_line, &(u)->c_line); \
132	err |= copy_to_user((u)->c_cc, (k)->c_cc, NCCS); \
133	if (!((k)->c_lflag & ICANON)) { \
134		err |= put_user((k)->c_cc[VMIN],  &(u)->c_cc[_VMIN]); \
135		err |= put_user((k)->c_cc[VTIME], &(u)->c_cc[_VTIME]); \
136	} else { \
137		err |= put_user((k)->c_cc[VEOF], &(u)->c_cc[VEOF]); \
138		err |= put_user((k)->c_cc[VEOL], &(u)->c_cc[VEOL]); \
139	} \
140	err |= put_user((k)->c_ispeed, &(u)->c_ispeed); \
141	err |= put_user((k)->c_ospeed, &(u)->c_ospeed); \
142	err; \
143})
144
145#define user_termios_to_kernel_termios_1(k, u) \
146({ \
147	int err; \
148	err  = get_user((k)->c_iflag, &(u)->c_iflag); \
149	err |= get_user((k)->c_oflag, &(u)->c_oflag); \
150	err |= get_user((k)->c_cflag, &(u)->c_cflag); \
151	err |= get_user((k)->c_lflag, &(u)->c_lflag); \
152	err |= get_user((k)->c_line,  &(u)->c_line); \
153	err |= copy_from_user((k)->c_cc, (u)->c_cc, NCCS); \
154	if ((k)->c_lflag & ICANON) { \
155		err |= get_user((k)->c_cc[VEOF], &(u)->c_cc[VEOF]); \
156		err |= get_user((k)->c_cc[VEOL], &(u)->c_cc[VEOL]); \
157	} else { \
158		err |= get_user((k)->c_cc[VMIN],  &(u)->c_cc[_VMIN]); \
159		err |= get_user((k)->c_cc[VTIME], &(u)->c_cc[_VTIME]); \
160	} \
161	err; \
162})
163
164#define kernel_termios_to_user_termios_1(u, k) \
165({ \
166	int err; \
167	err  = put_user((k)->c_iflag, &(u)->c_iflag); \
168	err |= put_user((k)->c_oflag, &(u)->c_oflag); \
169	err |= put_user((k)->c_cflag, &(u)->c_cflag); \
170	err |= put_user((k)->c_lflag, &(u)->c_lflag); \
171	err |= put_user((k)->c_line, &(u)->c_line); \
172	err |= copy_to_user((u)->c_cc, (k)->c_cc, NCCS); \
173	if (!((k)->c_lflag & ICANON)) { \
174		err |= put_user((k)->c_cc[VMIN],  &(u)->c_cc[_VMIN]); \
175		err |= put_user((k)->c_cc[VTIME], &(u)->c_cc[_VTIME]); \
176	} else { \
177		err |= put_user((k)->c_cc[VEOF], &(u)->c_cc[VEOF]); \
178		err |= put_user((k)->c_cc[VEOL], &(u)->c_cc[VEOL]); \
179	} \
180	err; \
181})
182
183#endif	/* __KERNEL__ */
184
185#endif /* _SPARC_TERMIOS_H */
v4.6
  1#ifndef _SPARC_TERMIOS_H
  2#define _SPARC_TERMIOS_H
  3
  4#include <uapi/asm/termios.h>
 
  5
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
  6
  7/*
  8 * c_cc characters in the termio structure.  Oh, how I love being
  9 * backwardly compatible.  Notice that character 4 and 5 are
 10 * interpreted differently depending on whether ICANON is set in
 11 * c_lflag.  If it's set, they are used as _VEOF and _VEOL, otherwise
 12 * as _VMIN and V_TIME.  This is for compatibility with OSF/1 (which
 13 * is compatible with sysV)...
 14 */
 15#define _VMIN	4
 16#define _VTIME	5
 17
 18/*	intr=^C		quit=^\		erase=del	kill=^U
 19	eof=^D		eol=\0		eol2=\0		sxtc=\0
 20	start=^Q	stop=^S		susp=^Z		dsusp=^Y
 21	reprint=^R	discard=^U	werase=^W	lnext=^V
 22	vmin=\1         vtime=\0
 23*/
 24#define INIT_C_CC "\003\034\177\025\004\000\000\000\021\023\032\031\022\025\027\026\001"
 25
 26/*
 27 * Translate a "termio" structure into a "termios". Ugh.
 28 */
 29#define user_termio_to_kernel_termios(termios, termio) \
 30({ \
 31	unsigned short tmp; \
 32	int err; \
 33	err = get_user(tmp, &(termio)->c_iflag); \
 34	(termios)->c_iflag = (0xffff0000 & ((termios)->c_iflag)) | tmp; \
 35	err |= get_user(tmp, &(termio)->c_oflag); \
 36	(termios)->c_oflag = (0xffff0000 & ((termios)->c_oflag)) | tmp; \
 37	err |= get_user(tmp, &(termio)->c_cflag); \
 38	(termios)->c_cflag = (0xffff0000 & ((termios)->c_cflag)) | tmp; \
 39	err |= get_user(tmp, &(termio)->c_lflag); \
 40	(termios)->c_lflag = (0xffff0000 & ((termios)->c_lflag)) | tmp; \
 41	err |= copy_from_user((termios)->c_cc, (termio)->c_cc, NCC); \
 42	err; \
 43})
 44
 45/*
 46 * Translate a "termios" structure into a "termio". Ugh.
 47 *
 48 * Note the "fun" _VMIN overloading.
 49 */
 50#define kernel_termios_to_user_termio(termio, termios) \
 51({ \
 52	int err; \
 53	err  = put_user((termios)->c_iflag, &(termio)->c_iflag); \
 54	err |= put_user((termios)->c_oflag, &(termio)->c_oflag); \
 55	err |= put_user((termios)->c_cflag, &(termio)->c_cflag); \
 56	err |= put_user((termios)->c_lflag, &(termio)->c_lflag); \
 57	err |= put_user((termios)->c_line,  &(termio)->c_line); \
 58	err |= copy_to_user((termio)->c_cc, (termios)->c_cc, NCC); \
 59	if (!((termios)->c_lflag & ICANON)) { \
 60		err |= put_user((termios)->c_cc[VMIN], &(termio)->c_cc[_VMIN]); \
 61		err |= put_user((termios)->c_cc[VTIME], &(termio)->c_cc[_VTIME]); \
 62	} \
 63	err; \
 64})
 65
 66#define user_termios_to_kernel_termios(k, u) \
 67({ \
 68	int err; \
 69	err  = get_user((k)->c_iflag, &(u)->c_iflag); \
 70	err |= get_user((k)->c_oflag, &(u)->c_oflag); \
 71	err |= get_user((k)->c_cflag, &(u)->c_cflag); \
 72	err |= get_user((k)->c_lflag, &(u)->c_lflag); \
 73	err |= get_user((k)->c_line,  &(u)->c_line); \
 74	err |= copy_from_user((k)->c_cc, (u)->c_cc, NCCS); \
 75	if ((k)->c_lflag & ICANON) { \
 76		err |= get_user((k)->c_cc[VEOF], &(u)->c_cc[VEOF]); \
 77		err |= get_user((k)->c_cc[VEOL], &(u)->c_cc[VEOL]); \
 78	} else { \
 79		err |= get_user((k)->c_cc[VMIN],  &(u)->c_cc[_VMIN]); \
 80		err |= get_user((k)->c_cc[VTIME], &(u)->c_cc[_VTIME]); \
 81	} \
 82	err |= get_user((k)->c_ispeed,  &(u)->c_ispeed); \
 83	err |= get_user((k)->c_ospeed,  &(u)->c_ospeed); \
 84	err; \
 85})
 86
 87#define kernel_termios_to_user_termios(u, k) \
 88({ \
 89	int err; \
 90	err  = put_user((k)->c_iflag, &(u)->c_iflag); \
 91	err |= put_user((k)->c_oflag, &(u)->c_oflag); \
 92	err |= put_user((k)->c_cflag, &(u)->c_cflag); \
 93	err |= put_user((k)->c_lflag, &(u)->c_lflag); \
 94	err |= put_user((k)->c_line, &(u)->c_line); \
 95	err |= copy_to_user((u)->c_cc, (k)->c_cc, NCCS); \
 96	if (!((k)->c_lflag & ICANON)) { \
 97		err |= put_user((k)->c_cc[VMIN],  &(u)->c_cc[_VMIN]); \
 98		err |= put_user((k)->c_cc[VTIME], &(u)->c_cc[_VTIME]); \
 99	} else { \
100		err |= put_user((k)->c_cc[VEOF], &(u)->c_cc[VEOF]); \
101		err |= put_user((k)->c_cc[VEOL], &(u)->c_cc[VEOL]); \
102	} \
103	err |= put_user((k)->c_ispeed, &(u)->c_ispeed); \
104	err |= put_user((k)->c_ospeed, &(u)->c_ospeed); \
105	err; \
106})
107
108#define user_termios_to_kernel_termios_1(k, u) \
109({ \
110	int err; \
111	err  = get_user((k)->c_iflag, &(u)->c_iflag); \
112	err |= get_user((k)->c_oflag, &(u)->c_oflag); \
113	err |= get_user((k)->c_cflag, &(u)->c_cflag); \
114	err |= get_user((k)->c_lflag, &(u)->c_lflag); \
115	err |= get_user((k)->c_line,  &(u)->c_line); \
116	err |= copy_from_user((k)->c_cc, (u)->c_cc, NCCS); \
117	if ((k)->c_lflag & ICANON) { \
118		err |= get_user((k)->c_cc[VEOF], &(u)->c_cc[VEOF]); \
119		err |= get_user((k)->c_cc[VEOL], &(u)->c_cc[VEOL]); \
120	} else { \
121		err |= get_user((k)->c_cc[VMIN],  &(u)->c_cc[_VMIN]); \
122		err |= get_user((k)->c_cc[VTIME], &(u)->c_cc[_VTIME]); \
123	} \
124	err; \
125})
126
127#define kernel_termios_to_user_termios_1(u, k) \
128({ \
129	int err; \
130	err  = put_user((k)->c_iflag, &(u)->c_iflag); \
131	err |= put_user((k)->c_oflag, &(u)->c_oflag); \
132	err |= put_user((k)->c_cflag, &(u)->c_cflag); \
133	err |= put_user((k)->c_lflag, &(u)->c_lflag); \
134	err |= put_user((k)->c_line, &(u)->c_line); \
135	err |= copy_to_user((u)->c_cc, (k)->c_cc, NCCS); \
136	if (!((k)->c_lflag & ICANON)) { \
137		err |= put_user((k)->c_cc[VMIN],  &(u)->c_cc[_VMIN]); \
138		err |= put_user((k)->c_cc[VTIME], &(u)->c_cc[_VTIME]); \
139	} else { \
140		err |= put_user((k)->c_cc[VEOF], &(u)->c_cc[VEOF]); \
141		err |= put_user((k)->c_cc[VEOL], &(u)->c_cc[VEOL]); \
142	} \
143	err; \
144})
 
 
145
146#endif /* _SPARC_TERMIOS_H */