Blame view

include/asm-generic/termios-base.h 2.07 KB
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
1
2
  /* termios.h: generic termios/termio user copying/translation
   */
63b852a6b   Arnd Bergmann   asm-generic: rena...
3
4
  #ifndef _ASM_GENERIC_TERMIOS_BASE_H
  #define _ASM_GENERIC_TERMIOS_BASE_H
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
5
6
7
8
9
10
11
12
  
  #include <asm/uaccess.h>
  
  #ifndef __ARCH_TERMIO_GETPUT
  
  /*
   * Translate a "termio" structure into a "termios". Ugh.
   */
606d099cd   Alan Cox   [PATCH] tty: swit...
13
  static inline int user_termio_to_kernel_termios(struct ktermios *termios,
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
  						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,
606d099cd   Alan Cox   [PATCH] tty: swit...
50
  						struct ktermios *termios)
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
51
52
53
54
55
56
57
58
59
60
61
  {
  	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;
  }
aa7738a5f   Heiko Carstens   tty: let architec...
62
  #ifndef user_termios_to_kernel_termios
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
63
  #define user_termios_to_kernel_termios(k, u) copy_from_user(k, u, sizeof(struct termios))
aa7738a5f   Heiko Carstens   tty: let architec...
64
65
66
  #endif
  
  #ifndef kernel_termios_to_user_termios
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
67
  #define kernel_termios_to_user_termios(u, k) copy_to_user(u, k, sizeof(struct termios))
aa7738a5f   Heiko Carstens   tty: let architec...
68
  #endif
b0052fcae   Paul Mackerras   Define termios_1 ...
69
70
  #define user_termios_to_kernel_termios_1(k, u) copy_from_user(k, u, sizeof(struct termios))
  #define kernel_termios_to_user_termios_1(u, k) copy_to_user(u, k, sizeof(struct termios))
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
71
72
  
  #endif	/* __ARCH_TERMIO_GETPUT */
63b852a6b   Arnd Bergmann   asm-generic: rena...
73
  #endif /* _ASM_GENERIC_TERMIOS_BASE_H */