root/include/asm-generic/termios.h

/* [<][>][^][v][top][bottom][index][help] */

INCLUDED FROM


DEFINITIONS

This source file includes following definitions.
  1. user_termio_to_kernel_termios
  2. kernel_termios_to_user_termio
  3. user_termios_to_kernel_termios
  4. kernel_termios_to_user_termios
  5. user_termios_to_kernel_termios_1
  6. kernel_termios_to_user_termios_1
  7. user_termios_to_kernel_termios
  8. kernel_termios_to_user_termios

   1 /* SPDX-License-Identifier: GPL-2.0 */
   2 #ifndef _ASM_GENERIC_TERMIOS_H
   3 #define _ASM_GENERIC_TERMIOS_H
   4 
   5 
   6 #include <linux/uaccess.h>
   7 #include <uapi/asm-generic/termios.h>
   8 
   9 /*      intr=^C         quit=^\         erase=del       kill=^U
  10         eof=^D          vtime=\0        vmin=\1         sxtc=\0
  11         start=^Q        stop=^S         susp=^Z         eol=\0
  12         reprint=^R      discard=^U      werase=^W       lnext=^V
  13         eol2=\0
  14 */
  15 #define INIT_C_CC "\003\034\177\025\004\0\1\0\021\023\032\0\022\017\027\026\0"
  16 
  17 /*
  18  * Translate a "termio" structure into a "termios". Ugh.
  19  */
  20 static inline int user_termio_to_kernel_termios(struct ktermios *termios,
  21                                                 const struct termio __user *termio)
  22 {
  23         unsigned short tmp;
  24 
  25         if (get_user(tmp, &termio->c_iflag) < 0)
  26                 goto fault;
  27         termios->c_iflag = (0xffff0000 & termios->c_iflag) | tmp;
  28 
  29         if (get_user(tmp, &termio->c_oflag) < 0)
  30                 goto fault;
  31         termios->c_oflag = (0xffff0000 & termios->c_oflag) | tmp;
  32 
  33         if (get_user(tmp, &termio->c_cflag) < 0)
  34                 goto fault;
  35         termios->c_cflag = (0xffff0000 & termios->c_cflag) | tmp;
  36 
  37         if (get_user(tmp, &termio->c_lflag) < 0)
  38                 goto fault;
  39         termios->c_lflag = (0xffff0000 & termios->c_lflag) | tmp;
  40 
  41         if (get_user(termios->c_line, &termio->c_line) < 0)
  42                 goto fault;
  43 
  44         if (copy_from_user(termios->c_cc, termio->c_cc, NCC) != 0)
  45                 goto fault;
  46 
  47         return 0;
  48 
  49  fault:
  50         return -EFAULT;
  51 }
  52 
  53 /*
  54  * Translate a "termios" structure into a "termio". Ugh.
  55  */
  56 static inline int kernel_termios_to_user_termio(struct termio __user *termio,
  57                                                 struct ktermios *termios)
  58 {
  59         if (put_user(termios->c_iflag, &termio->c_iflag) < 0 ||
  60             put_user(termios->c_oflag, &termio->c_oflag) < 0 ||
  61             put_user(termios->c_cflag, &termio->c_cflag) < 0 ||
  62             put_user(termios->c_lflag, &termio->c_lflag) < 0 ||
  63             put_user(termios->c_line,  &termio->c_line) < 0 ||
  64             copy_to_user(termio->c_cc, termios->c_cc, NCC) != 0)
  65                 return -EFAULT;
  66 
  67         return 0;
  68 }
  69 
  70 #ifdef TCGETS2
  71 static inline int user_termios_to_kernel_termios(struct ktermios *k,
  72                                                  struct termios2 __user *u)
  73 {
  74         return copy_from_user(k, u, sizeof(struct termios2));
  75 }
  76 
  77 static inline int kernel_termios_to_user_termios(struct termios2 __user *u,
  78                                                  struct ktermios *k)
  79 {
  80         return copy_to_user(u, k, sizeof(struct termios2));
  81 }
  82 
  83 static inline int user_termios_to_kernel_termios_1(struct ktermios *k,
  84                                                    struct termios __user *u)
  85 {
  86         return copy_from_user(k, u, sizeof(struct termios));
  87 }
  88 
  89 static inline int kernel_termios_to_user_termios_1(struct termios __user *u,
  90                                                    struct ktermios *k)
  91 {
  92         return copy_to_user(u, k, sizeof(struct termios));
  93 }
  94 #else /* TCGETS2 */
  95 static inline int user_termios_to_kernel_termios(struct ktermios *k,
  96                                                  struct termios __user *u)
  97 {
  98         return copy_from_user(k, u, sizeof(struct termios));
  99 }
 100 
 101 static inline int kernel_termios_to_user_termios(struct termios __user *u,
 102                                                  struct ktermios *k)
 103 {
 104         return copy_to_user(u, k, sizeof(struct termios));
 105 }
 106 #endif /* TCGETS2 */
 107 
 108 #endif /* _ASM_GENERIC_TERMIOS_H */

/* [<][>][^][v][top][bottom][index][help] */