~ [ source navigation ] ~ [ diff markup ] ~ [ identifier search ] ~ [ freetext search ] ~ [ file search ] ~

Linux Cross Reference
Linux/include/asm-alpha/termios.h

Version: ~ [ 2.4.0 ] ~
Architecture: ~ [ i386 ] ~ [ alpha ] ~ [ m68k ] ~ [ mips ] ~ [ ppc ] ~ [ sparc ] ~ [ sparc64 ] ~

  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://www.cs.uit.no/~dagb/irda/irda.html */
 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 
 86 #ifdef __KERNEL__
 87 /*      eof=^D          eol=\0          eol2=\0         erase=del
 88         werase=^W       kill=^U         reprint=^R      sxtc=\0
 89         intr=^C         quit=^\         susp=^Z         <OSF/1 VDSUSP>
 90         start=^Q        stop=^S         lnext=^V        discard=^U
 91         vmin=\1         vtime=\0
 92 */
 93 #define INIT_C_CC "\004\000\000\177\027\025\022\000\003\034\032\000\021\023\026\025\001\000"
 94 
 95 /*
 96  * Translate a "termio" structure into a "termios". Ugh.
 97  */
 98 
 99 #define user_termio_to_kernel_termios(a_termios, u_termio)                      \
100 ({                                                                              \
101         struct termios *k_termios = (a_termios);                                \
102         struct termio k_termio;                                                 \
103         int canon, ret;                                                         \
104                                                                                 \
105         ret = copy_from_user(&k_termio, u_termio, sizeof(k_termio));            \
106         if (!ret) {                                                             \
107                 /* Overwrite only the low bits.  */                             \
108                 *(unsigned short *)&k_termios->c_iflag = k_termio.c_iflag;      \
109                 *(unsigned short *)&k_termios->c_oflag = k_termio.c_oflag;      \
110                 *(unsigned short *)&k_termios->c_cflag = k_termio.c_cflag;      \
111                 *(unsigned short *)&k_termios->c_lflag = k_termio.c_lflag;      \
112                 canon = k_termio.c_lflag & ICANON;                              \
113                                                                                 \
114                 k_termios->c_cc[VINTR]  = k_termio.c_cc[_VINTR];                \
115                 k_termios->c_cc[VQUIT]  = k_termio.c_cc[_VQUIT];                \
116                 k_termios->c_cc[VERASE] = k_termio.c_cc[_VERASE];               \
117                 k_termios->c_cc[VKILL]  = k_termio.c_cc[_VKILL];                \
118                 k_termios->c_cc[VEOL2]  = k_termio.c_cc[_VEOL2];                \
119                 k_termios->c_cc[VSWTC]  = k_termio.c_cc[_VSWTC];                \
120                 k_termios->c_cc[canon ? VEOF : VMIN]  = k_termio.c_cc[_VEOF];   \
121                 k_termios->c_cc[canon ? VEOL : VTIME] = k_termio.c_cc[_VEOL];   \
122         }                                                                       \
123         ret;                                                                    \
124 })
125 
126 /*
127  * Translate a "termios" structure into a "termio". Ugh.
128  *
129  * Note the "fun" _VMIN overloading.
130  */
131 #define kernel_termios_to_user_termio(u_termio, a_termios)              \
132 ({                                                                      \
133         struct termios *k_termios = (a_termios);                        \
134         struct termio k_termio;                                         \
135         int canon;                                                      \
136                                                                         \
137         k_termio.c_iflag = k_termios->c_iflag;                          \
138         k_termio.c_oflag = k_termios->c_oflag;                          \
139         k_termio.c_cflag = k_termios->c_cflag;                          \
140         canon = (k_termio.c_lflag = k_termios->c_lflag) & ICANON;       \
141                                                                         \
142         k_termio.c_line = k_termios->c_line;                            \
143         k_termio.c_cc[_VINTR]  = k_termios->c_cc[VINTR];                \
144         k_termio.c_cc[_VQUIT]  = k_termios->c_cc[VQUIT];                \
145         k_termio.c_cc[_VERASE] = k_termios->c_cc[VERASE];               \
146         k_termio.c_cc[_VKILL]  = k_termios->c_cc[VKILL];                \
147         k_termio.c_cc[_VEOF]   = k_termios->c_cc[canon ? VEOF : VMIN];  \
148         k_termio.c_cc[_VEOL]   = k_termios->c_cc[canon ? VEOL : VTIME]; \
149         k_termio.c_cc[_VEOL2]  = k_termios->c_cc[VEOL2];                \
150         k_termio.c_cc[_VSWTC]  = k_termios->c_cc[VSWTC];                \
151                                                                         \
152         copy_to_user(u_termio, &k_termio, sizeof(k_termio));            \
153 })
154 
155 #define user_termios_to_kernel_termios(k, u) \
156         copy_from_user(k, u, sizeof(struct termios))
157 
158 #define kernel_termios_to_user_termios(u, k) \
159         copy_to_user(u, k, sizeof(struct termios))
160 
161 #endif  /* __KERNEL__ */
162 
163 #endif  /* _ALPHA_TERMIOS_H */
164 

~ [ source navigation ] ~ [ diff markup ] ~ [ identifier search ] ~ [ freetext search ] ~ [ file search ] ~

This page was automatically generated by the LXR engine.
Visit the LXR main site for more information.