The Design and Implementation of the FreeBSD Operating System, Second Edition
Now available: The Design and Implementation of the FreeBSD Operating System (Second Edition)


[ source navigation ] [ diff markup ] [ identifier search ] [ freetext search ] [ file search ] [ list types ] [ track identifier ]

FreeBSD/Linux Kernel Cross Reference
sys/include/asm-alpha/termios.h

Version: -  FREEBSD  -  FREEBSD-13-STABLE  -  FREEBSD-13-0  -  FREEBSD-12-STABLE  -  FREEBSD-12-0  -  FREEBSD-11-STABLE  -  FREEBSD-11-0  -  FREEBSD-10-STABLE  -  FREEBSD-10-0  -  FREEBSD-9-STABLE  -  FREEBSD-9-0  -  FREEBSD-8-STABLE  -  FREEBSD-8-0  -  FREEBSD-7-STABLE  -  FREEBSD-7-0  -  FREEBSD-6-STABLE  -  FREEBSD-6-0  -  FREEBSD-5-STABLE  -  FREEBSD-5-0  -  FREEBSD-4-STABLE  -  FREEBSD-3-STABLE  -  FREEBSD22  -  l41  -  OPENBSD  -  linux-2.6  -  MK84  -  PLAN9  -  xnu-8792 
SearchContext: -  none  -  3  -  10 

    1 #ifndef _ALPHA_TERMIOS_H
    2 #define _ALPHA_TERMIOS_H
    3 
    4 #include <asm/ioctls.h>
    5 #include <asm/termbits.h>
    6 
    7 struct sgttyb {
    8         char    sg_ispeed;
    9         char    sg_ospeed;
   10         char    sg_erase;
   11         char    sg_kill;
   12         short   sg_flags;
   13 };
   14 
   15 struct tchars {
   16         char    t_intrc;
   17         char    t_quitc;
   18         char    t_startc;
   19         char    t_stopc;
   20         char    t_eofc;
   21         char    t_brkc;
   22 };
   23 
   24 struct ltchars {
   25         char    t_suspc;
   26         char    t_dsuspc;
   27         char    t_rprntc;
   28         char    t_flushc;
   29         char    t_werasc;
   30         char    t_lnextc;
   31 };
   32 
   33 struct winsize {
   34         unsigned short ws_row;
   35         unsigned short ws_col;
   36         unsigned short ws_xpixel;
   37         unsigned short ws_ypixel;
   38 };
   39 
   40 #define NCC 8
   41 struct termio {
   42         unsigned short c_iflag;         /* input mode flags */
   43         unsigned short c_oflag;         /* output mode flags */
   44         unsigned short c_cflag;         /* control mode flags */
   45         unsigned short c_lflag;         /* local mode flags */
   46         unsigned char c_line;           /* line discipline */
   47         unsigned char c_cc[NCC];        /* control characters */
   48 };
   49 
   50 /*
   51  * c_cc characters in the termio structure.  Oh, how I love being
   52  * backwardly compatible.  Notice that character 4 and 5 are
   53  * interpreted differently depending on whether ICANON is set in
   54  * c_lflag.  If it's set, they are used as _VEOF and _VEOL, otherwise
   55  * as _VMIN and V_TIME.  This is for compatibility with OSF/1 (which
   56  * is compatible with sysV)...
   57  */
   58 #define _VINTR  0
   59 #define _VQUIT  1
   60 #define _VERASE 2
   61 #define _VKILL  3
   62 #define _VEOF   4
   63 #define _VMIN   4
   64 #define _VEOL   5
   65 #define _VTIME  5
   66 #define _VEOL2  6
   67 #define _VSWTC  7
   68 
   69 /* line disciplines */
   70 #define N_TTY           0
   71 #define N_SLIP          1
   72 #define N_MOUSE         2
   73 #define N_PPP           3
   74 #define N_STRIP         4
   75 #define N_AX25          5
   76 #define N_X25           6       /* X.25 async */
   77 #define N_6PACK         7
   78 #define N_MASC          8       /* Reserved for Mobitex module <kaz@cafe.net> */
   79 #define N_R3964         9       /* Reserved for Simatic R3964 module */
   80 #define N_PROFIBUS_FDL  10      /* Reserved for Profibus <Dave@mvhi.com> */
   81 #define N_IRDA          11      /* Linux IrDa - http://irda.sourceforge.net/ */
   82 #define N_SMSBLOCK      12      /* SMS block mode - for talking to GSM data cards about SMS messages */
   83 #define N_HDLC          13      /* synchronous HDLC */
   84 #define N_SYNC_PPP      14
   85 #define N_HCI           15  /* Bluetooth HCI UART */
   86 
   87 #ifdef __KERNEL__
   88 /*      eof=^D          eol=\0          eol2=\0         erase=del
   89         werase=^W       kill=^U         reprint=^R      sxtc=\0
   90         intr=^C         quit=^\         susp=^Z         <OSF/1 VDSUSP>
   91         start=^Q        stop=^S         lnext=^V        discard=^U
   92         vmin=\1         vtime=\0
   93 */
   94 #define INIT_C_CC "\004\000\000\177\027\025\022\000\003\034\032\000\021\023\026\025\001\000"
   95 
   96 /*
   97  * Translate a "termio" structure into a "termios". Ugh.
   98  */
   99 
  100 #define user_termio_to_kernel_termios(a_termios, u_termio)                      \
  101 ({                                                                              \
  102         struct termios *k_termios = (a_termios);                                \
  103         struct termio k_termio;                                                 \
  104         int canon, ret;                                                         \
  105                                                                                 \
  106         ret = copy_from_user(&k_termio, u_termio, sizeof(k_termio));            \
  107         if (!ret) {                                                             \
  108                 /* Overwrite only the low bits.  */                             \
  109                 *(unsigned short *)&k_termios->c_iflag = k_termio.c_iflag;      \
  110                 *(unsigned short *)&k_termios->c_oflag = k_termio.c_oflag;      \
  111                 *(unsigned short *)&k_termios->c_cflag = k_termio.c_cflag;      \
  112                 *(unsigned short *)&k_termios->c_lflag = k_termio.c_lflag;      \
  113                 canon = k_termio.c_lflag & ICANON;                              \
  114                                                                                 \
  115                 k_termios->c_cc[VINTR]  = k_termio.c_cc[_VINTR];                \
  116                 k_termios->c_cc[VQUIT]  = k_termio.c_cc[_VQUIT];                \
  117                 k_termios->c_cc[VERASE] = k_termio.c_cc[_VERASE];               \
  118                 k_termios->c_cc[VKILL]  = k_termio.c_cc[_VKILL];                \
  119                 k_termios->c_cc[VEOL2]  = k_termio.c_cc[_VEOL2];                \
  120                 k_termios->c_cc[VSWTC]  = k_termio.c_cc[_VSWTC];                \
  121                 k_termios->c_cc[canon ? VEOF : VMIN]  = k_termio.c_cc[_VEOF];   \
  122                 k_termios->c_cc[canon ? VEOL : VTIME] = k_termio.c_cc[_VEOL];   \
  123         }                                                                       \
  124         ret;                                                                    \
  125 })
  126 
  127 /*
  128  * Translate a "termios" structure into a "termio". Ugh.
  129  *
  130  * Note the "fun" _VMIN overloading.
  131  */
  132 #define kernel_termios_to_user_termio(u_termio, a_termios)              \
  133 ({                                                                      \
  134         struct termios *k_termios = (a_termios);                        \
  135         struct termio k_termio;                                         \
  136         int canon;                                                      \
  137                                                                         \
  138         k_termio.c_iflag = k_termios->c_iflag;                          \
  139         k_termio.c_oflag = k_termios->c_oflag;                          \
  140         k_termio.c_cflag = k_termios->c_cflag;                          \
  141         canon = (k_termio.c_lflag = k_termios->c_lflag) & ICANON;       \
  142                                                                         \
  143         k_termio.c_line = k_termios->c_line;                            \
  144         k_termio.c_cc[_VINTR]  = k_termios->c_cc[VINTR];                \
  145         k_termio.c_cc[_VQUIT]  = k_termios->c_cc[VQUIT];                \
  146         k_termio.c_cc[_VERASE] = k_termios->c_cc[VERASE];               \
  147         k_termio.c_cc[_VKILL]  = k_termios->c_cc[VKILL];                \
  148         k_termio.c_cc[_VEOF]   = k_termios->c_cc[canon ? VEOF : VMIN];  \
  149         k_termio.c_cc[_VEOL]   = k_termios->c_cc[canon ? VEOL : VTIME]; \
  150         k_termio.c_cc[_VEOL2]  = k_termios->c_cc[VEOL2];                \
  151         k_termio.c_cc[_VSWTC]  = k_termios->c_cc[VSWTC];                \
  152                                                                         \
  153         copy_to_user(u_termio, &k_termio, sizeof(k_termio));            \
  154 })
  155 
  156 #define user_termios_to_kernel_termios(k, u) \
  157         copy_from_user(k, u, sizeof(struct termios))
  158 
  159 #define kernel_termios_to_user_termios(u, k) \
  160         copy_to_user(u, k, sizeof(struct termios))
  161 
  162 #endif  /* __KERNEL__ */
  163 
  164 #endif  /* _ALPHA_TERMIOS_H */

Cache object: 4973c8e08e6328c7481178a92656022d


[ source navigation ] [ diff markup ] [ identifier search ] [ freetext search ] [ file search ] [ list types ] [ track identifier ]


This page is part of the FreeBSD/Linux Linux Kernel Cross-Reference, and was automatically generated using a modified version of the LXR engine.