606d099cdd
This is the grungy swap all the occurrences in the right places patch that goes with the updates. At this point we have the same functionality as before (except that sgttyb() returns speeds not zero) and are ready to begin turning new stuff on providing nobody reports lots of bugs If you are a tty driver author converting an out of tree driver the only impact should be termios->ktermios name changes for the speed/property setting functions from your upper layers. If you are implementing your own TCGETS function before then your driver was broken already and its about to get a whole lot more painful for you so please fix it 8) Also fill in c_ispeed/ospeed on init for most devices, although the current code will do this for you anyway but I'd like eventually to lose that extra paranoia [akpm@osdl.org: bluetooth fix] [mp3@de.ibm.com: sclp fix] [mp3@de.ibm.com: warning fix for tty3270] [hugh@veritas.com: fix tty_ioctl powerpc build] [jdike@addtoit.com: uml: fix ->set_termios declaration] Signed-off-by: Alan Cox <alan@redhat.com> Signed-off-by: Martin Peschke <mp3@de.ibm.com> Acked-by: Peter Oberparleiter <oberpar@de.ibm.com> Cc: Cornelia Huck <cornelia.huck@de.ibm.com> Signed-off-by: Hugh Dickins <hugh@veritas.com> Signed-off-by: Jeff Dike <jdike@addtoit.com> Cc: Paolo 'Blaisorblade' Giarrusso <blaisorblade@yahoo.it> Signed-off-by: Andrew Morton <akpm@osdl.org> Signed-off-by: Linus Torvalds <torvalds@osdl.org>
70 lines
1.8 KiB
C
70 lines
1.8 KiB
C
/* termios.h: generic termios/termio user copying/translation
|
|
*/
|
|
|
|
#ifndef _ASM_GENERIC_TERMIOS_H
|
|
#define _ASM_GENERIC_TERMIOS_H
|
|
|
|
#include <asm/uaccess.h>
|
|
|
|
#ifndef __ARCH_TERMIO_GETPUT
|
|
|
|
/*
|
|
* Translate a "termio" structure into a "termios". Ugh.
|
|
*/
|
|
static inline int user_termio_to_kernel_termios(struct ktermios *termios,
|
|
struct termio __user *termio)
|
|
{
|
|
unsigned short tmp;
|
|
|
|
if (get_user(tmp, &termio->c_iflag) < 0)
|
|
goto fault;
|
|
termios->c_iflag = (0xffff0000 & termios->c_iflag) | tmp;
|
|
|
|
if (get_user(tmp, &termio->c_oflag) < 0)
|
|
goto fault;
|
|
termios->c_oflag = (0xffff0000 & termios->c_oflag) | tmp;
|
|
|
|
if (get_user(tmp, &termio->c_cflag) < 0)
|
|
goto fault;
|
|
termios->c_cflag = (0xffff0000 & termios->c_cflag) | tmp;
|
|
|
|
if (get_user(tmp, &termio->c_lflag) < 0)
|
|
goto fault;
|
|
termios->c_lflag = (0xffff0000 & termios->c_lflag) | tmp;
|
|
|
|
if (get_user(termios->c_line, &termio->c_line) < 0)
|
|
goto fault;
|
|
|
|
if (copy_from_user(termios->c_cc, termio->c_cc, NCC) != 0)
|
|
goto fault;
|
|
|
|
return 0;
|
|
|
|
fault:
|
|
return -EFAULT;
|
|
}
|
|
|
|
/*
|
|
* Translate a "termios" structure into a "termio". Ugh.
|
|
*/
|
|
static inline int kernel_termios_to_user_termio(struct termio __user *termio,
|
|
struct ktermios *termios)
|
|
{
|
|
if (put_user(termios->c_iflag, &termio->c_iflag) < 0 ||
|
|
put_user(termios->c_oflag, &termio->c_oflag) < 0 ||
|
|
put_user(termios->c_cflag, &termio->c_cflag) < 0 ||
|
|
put_user(termios->c_lflag, &termio->c_lflag) < 0 ||
|
|
put_user(termios->c_line, &termio->c_line) < 0 ||
|
|
copy_to_user(termio->c_cc, termios->c_cc, NCC) != 0)
|
|
return -EFAULT;
|
|
|
|
return 0;
|
|
}
|
|
|
|
#define user_termios_to_kernel_termios(k, u) copy_from_user(k, u, sizeof(struct termios))
|
|
#define kernel_termios_to_user_termios(u, k) copy_to_user(u, k, sizeof(struct termios))
|
|
|
|
#endif /* __ARCH_TERMIO_GETPUT */
|
|
|
|
#endif /* _ASM_GENERIC_TERMIOS_H */
|