linux/arch/alpha/include/asm/termios.h
<<
>>
Prefs
   1#ifndef _ALPHA_TERMIOS_H
   2#define _ALPHA_TERMIOS_H
   3
   4#include <uapi/asm/termios.h>
   5
   6/*      eof=^D          eol=\0          eol2=\0         erase=del
   7        werase=^W       kill=^U         reprint=^R      sxtc=\0
   8        intr=^C         quit=^\         susp=^Z         <OSF/1 VDSUSP>
   9        start=^Q        stop=^S         lnext=^V        discard=^U
  10        vmin=\1         vtime=\0
  11*/
  12#define INIT_C_CC "\004\000\000\177\027\025\022\000\003\034\032\000\021\023\026\025\001\000"
  13
  14/*
  15 * Translate a "termio" structure into a "termios". Ugh.
  16 */
  17
  18#define user_termio_to_kernel_termios(a_termios, u_termio)                      \
  19({                                                                              \
  20        struct ktermios *k_termios = (a_termios);                               \
  21        struct termio k_termio;                                                 \
  22        int canon, ret;                                                         \
  23                                                                                \
  24        ret = copy_from_user(&k_termio, u_termio, sizeof(k_termio));            \
  25        if (!ret) {                                                             \
  26                /* Overwrite only the low bits.  */                             \
  27                *(unsigned short *)&k_termios->c_iflag = k_termio.c_iflag;      \
  28                *(unsigned short *)&k_termios->c_oflag = k_termio.c_oflag;      \
  29                *(unsigned short *)&k_termios->c_cflag = k_termio.c_cflag;      \
  30                *(unsigned short *)&k_termios->c_lflag = k_termio.c_lflag;      \
  31                canon = k_termio.c_lflag & ICANON;                              \
  32                                                                                \
  33                k_termios->c_cc[VINTR]  = k_termio.c_cc[_VINTR];                \
  34                k_termios->c_cc[VQUIT]  = k_termio.c_cc[_VQUIT];                \
  35                k_termios->c_cc[VERASE] = k_termio.c_cc[_VERASE];               \
  36                k_termios->c_cc[VKILL]  = k_termio.c_cc[_VKILL];                \
  37                k_termios->c_cc[VEOL2]  = k_termio.c_cc[_VEOL2];                \
  38                k_termios->c_cc[VSWTC]  = k_termio.c_cc[_VSWTC];                \
  39                k_termios->c_cc[canon ? VEOF : VMIN]  = k_termio.c_cc[_VEOF];   \
  40                k_termios->c_cc[canon ? VEOL : VTIME] = k_termio.c_cc[_VEOL];   \
  41        }                                                                       \
  42        ret;                                                                    \
  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(u_termio, a_termios)              \
  51({                                                                      \
  52        struct ktermios *k_termios = (a_termios);                       \
  53        struct termio k_termio;                                         \
  54        int canon;                                                      \
  55                                                                        \
  56        k_termio.c_iflag = k_termios->c_iflag;                          \
  57        k_termio.c_oflag = k_termios->c_oflag;                          \
  58        k_termio.c_cflag = k_termios->c_cflag;                          \
  59        canon = (k_termio.c_lflag = k_termios->c_lflag) & ICANON;       \
  60                                                                        \
  61        k_termio.c_line = k_termios->c_line;                            \
  62        k_termio.c_cc[_VINTR]  = k_termios->c_cc[VINTR];                \
  63        k_termio.c_cc[_VQUIT]  = k_termios->c_cc[VQUIT];                \
  64        k_termio.c_cc[_VERASE] = k_termios->c_cc[VERASE];               \
  65        k_termio.c_cc[_VKILL]  = k_termios->c_cc[VKILL];                \
  66        k_termio.c_cc[_VEOF]   = k_termios->c_cc[canon ? VEOF : VMIN];  \
  67        k_termio.c_cc[_VEOL]   = k_termios->c_cc[canon ? VEOL : VTIME]; \
  68        k_termio.c_cc[_VEOL2]  = k_termios->c_cc[VEOL2];                \
  69        k_termio.c_cc[_VSWTC]  = k_termios->c_cc[VSWTC];                \
  70                                                                        \
  71        copy_to_user(u_termio, &k_termio, sizeof(k_termio));            \
  72})
  73
  74#define user_termios_to_kernel_termios(k, u) \
  75        copy_from_user(k, u, sizeof(struct termios))
  76
  77#define kernel_termios_to_user_termios(u, k) \
  78        copy_to_user(u, k, sizeof(struct termios))
  79
  80#endif  /* _ALPHA_TERMIOS_H */
  81