OpenCores
URL https://opencores.org/ocsvn/or1k/or1k/trunk

Subversion Repositories or1k

[/] [or1k/] [trunk/] [linux/] [linux-2.4/] [include/] [asm-alpha/] [termios.h] - Blame information for rev 1774

Go to most recent revision | Details | Compare with Previous | View Log

Line No. Rev Author Line
1 1275 phoenix
#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 */

powered by: WebSVN 2.1.0

© copyright 1999-2024 OpenCores.org, equivalent to Oliscience, all rights reserved. OpenCores®, registered trademark.