Subversion Repositories shark

Rev

Rev 422 | Details | Compare with Previous | Last modification | View Log | RSS feed

Rev Author Line No. Line
422 giacomo 1
#ifndef _LINUX_TTY_DRIVER_H
2
#define _LINUX_TTY_DRIVER_H
3
 
4
/*
5
 * This structure defines the interface between the low-level tty
6
 * driver and the tty routines.  The following routines can be
7
 * defined; unless noted otherwise, they are optional, and can be
8
 * filled in with a null pointer.
9
 *
10
 * int  (*open)(struct tty_struct * tty, struct file * filp);
11
 *
12
 *      This routine is called when a particular tty device is opened.
13
 *      This routine is mandatory; if this routine is not filled in,
14
 *      the attempted open will fail with ENODEV.
15
 *    
16
 * void (*close)(struct tty_struct * tty, struct file * filp);
17
 *
18
 *      This routine is called when a particular tty device is closed.
19
 *
20
 * int (*write)(struct tty_struct * tty, int from_user,
21
 *               const unsigned char *buf, int count);
22
 *
23
 *      This routine is called by the kernel to write a series of
24
 *      characters to the tty device.  The characters may come from
25
 *      user space or kernel space.  This routine will return the
26
 *      number of characters actually accepted for writing.  This
27
 *      routine is mandatory.
28
 *
29
 * void (*put_char)(struct tty_struct *tty, unsigned char ch);
30
 *
31
 *      This routine is called by the kernel to write a single
32
 *      character to the tty device.  If the kernel uses this routine,
33
 *      it must call the flush_chars() routine (if defined) when it is
34
 *      done stuffing characters into the driver.  If there is no room
35
 *      in the queue, the character is ignored.
36
 *
37
 * void (*flush_chars)(struct tty_struct *tty);
38
 *
39
 *      This routine is called by the kernel after it has written a
40
 *      series of characters to the tty device using put_char().  
41
 *
42
 * int  (*write_room)(struct tty_struct *tty);
43
 *
44
 *      This routine returns the numbers of characters the tty driver
45
 *      will accept for queuing to be written.  This number is subject
46
 *      to change as output buffers get emptied, or if the output flow
47
 *      control is acted.
48
 *
49
 * int  (*ioctl)(struct tty_struct *tty, struct file * file,
50
 *          unsigned int cmd, unsigned long arg);
51
 *
52
 *      This routine allows the tty driver to implement
53
 *      device-specific ioctl's.  If the ioctl number passed in cmd
54
 *      is not recognized by the driver, it should return ENOIOCTLCMD.
55
 *
56
 * void (*set_termios)(struct tty_struct *tty, struct termios * old);
57
 *
58
 *      This routine allows the tty driver to be notified when
59
 *      device's termios settings have changed.  Note that a
60
 *      well-designed tty driver should be prepared to accept the case
61
 *      where old == NULL, and try to do something rational.
62
 *
63
 * void (*set_ldisc)(struct tty_struct *tty);
64
 *
65
 *      This routine allows the tty driver to be notified when the
66
 *      device's termios settings have changed.
67
 *
68
 * void (*throttle)(struct tty_struct * tty);
69
 *
70
 *      This routine notifies the tty driver that input buffers for
71
 *      the line discipline are close to full, and it should somehow
72
 *      signal that no more characters should be sent to the tty.
73
 *
74
 * void (*unthrottle)(struct tty_struct * tty);
75
 *
76
 *      This routine notifies the tty drivers that it should signals
77
 *      that characters can now be sent to the tty without fear of
78
 *      overrunning the input buffers of the line disciplines.
79
 *
80
 * void (*stop)(struct tty_struct *tty);
81
 *
82
 *      This routine notifies the tty driver that it should stop
83
 *      outputting characters to the tty device.  
84
 *
85
 * void (*start)(struct tty_struct *tty);
86
 *
87
 *      This routine notifies the tty driver that it resume sending
88
 *      characters to the tty device.
89
 *
90
 * void (*hangup)(struct tty_struct *tty);
91
 *
92
 *      This routine notifies the tty driver that it should hangup the
93
 *      tty device.
94
 *
95
 * void (*break_ctl)(struct tty_stuct *tty, int state);
96
 *
97
 *      This optional routine requests the tty driver to turn on or
98
 *      off BREAK status on the RS-232 port.  If state is -1,
99
 *      then the BREAK status should be turned on; if state is 0, then
100
 *      BREAK should be turned off.
101
 *
102
 *      If this routine is implemented, the high-level tty driver will
103
 *      handle the following ioctls: TCSBRK, TCSBRKP, TIOCSBRK,
104
 *      TIOCCBRK.  Otherwise, these ioctls will be passed down to the
105
 *      driver to handle.
106
 *
107
 * void (*wait_until_sent)(struct tty_struct *tty, int timeout);
108
 *
109
 *      This routine waits until the device has written out all of the
110
 *      characters in its transmitter FIFO.
111
 *
112
 * void (*send_xchar)(struct tty_struct *tty, char ch);
113
 *
114
 *      This routine is used to send a high-priority XON/XOFF
115
 *      character to the device.
116
 */
117
 
118
#include <linux/fs.h>
119
#include <linux/list.h>
120
#include <linux/cdev.h>
121
 
122
struct tty_struct;
123
 
124
struct tty_operations {
125
        int  (*open)(struct tty_struct * tty, struct file * filp);
126
        void (*close)(struct tty_struct * tty, struct file * filp);
127
        int  (*write)(struct tty_struct * tty, int from_user,
128
                      const unsigned char *buf, int count);
129
        void (*put_char)(struct tty_struct *tty, unsigned char ch);
130
        void (*flush_chars)(struct tty_struct *tty);
131
        int  (*write_room)(struct tty_struct *tty);
132
        int  (*chars_in_buffer)(struct tty_struct *tty);
133
        int  (*ioctl)(struct tty_struct *tty, struct file * file,
134
                    unsigned int cmd, unsigned long arg);
135
        void (*set_termios)(struct tty_struct *tty, struct termios * old);
136
        void (*throttle)(struct tty_struct * tty);
137
        void (*unthrottle)(struct tty_struct * tty);
138
        void (*stop)(struct tty_struct *tty);
139
        void (*start)(struct tty_struct *tty);
140
        void (*hangup)(struct tty_struct *tty);
141
        void (*break_ctl)(struct tty_struct *tty, int state);
142
        void (*flush_buffer)(struct tty_struct *tty);
143
        void (*set_ldisc)(struct tty_struct *tty);
144
        void (*wait_until_sent)(struct tty_struct *tty, int timeout);
145
        void (*send_xchar)(struct tty_struct *tty, char ch);
146
        int (*read_proc)(char *page, char **start, off_t off,
147
                          int count, int *eof, void *data);
148
        int (*write_proc)(struct file *file, const char *buffer,
149
                          unsigned long count, void *data);
150
        int (*tiocmget)(struct tty_struct *tty, struct file *file);
151
        int (*tiocmset)(struct tty_struct *tty, struct file *file,
152
                        unsigned int set, unsigned int clear);
153
};
154
 
155
struct tty_driver {
156
        int     magic;          /* magic number for this structure */
157
        struct cdev cdev;
158
        struct module   *owner;
159
        const char      *driver_name;
160
        const char      *devfs_name;
161
        const char      *name;
162
        int     name_base;      /* offset of printed name */
163
        short   major;          /* major device number */
164
        short   minor_start;    /* start of minor device number*/
165
        short   num;            /* number of devices */
166
        short   type;           /* type of tty driver */
167
        short   subtype;        /* subtype of tty driver */
168
        struct termios init_termios; /* Initial termios */
169
        int     flags;          /* tty driver flags */
170
        int     refcount;       /* for loadable tty drivers */
171
        struct proc_dir_entry *proc_entry; /* /proc fs entry */
172
        struct tty_driver *other; /* only used for the PTY driver */
173
 
174
        /*
175
         * Pointer to the tty data structures
176
         */
177
        struct tty_struct **ttys;
178
        struct termios **termios;
179
        struct termios **termios_locked;
180
        void *driver_state;     /* only used for the PTY driver */
181
 
182
        /*
183
         * Interface routines from the upper tty layer to the tty
184
         * driver.      Will be replaced with struct tty_operations.
185
         */
186
        int  (*open)(struct tty_struct * tty, struct file * filp);
187
        void (*close)(struct tty_struct * tty, struct file * filp);
188
        int  (*write)(struct tty_struct * tty, int from_user,
189
                      const unsigned char *buf, int count);
190
        void (*put_char)(struct tty_struct *tty, unsigned char ch);
191
        void (*flush_chars)(struct tty_struct *tty);
192
        int  (*write_room)(struct tty_struct *tty);
193
        int  (*chars_in_buffer)(struct tty_struct *tty);
194
        int  (*ioctl)(struct tty_struct *tty, struct file * file,
195
                    unsigned int cmd, unsigned long arg);
196
        void (*set_termios)(struct tty_struct *tty, struct termios * old);
197
        void (*throttle)(struct tty_struct * tty);
198
        void (*unthrottle)(struct tty_struct * tty);
199
        void (*stop)(struct tty_struct *tty);
200
        void (*start)(struct tty_struct *tty);
201
        void (*hangup)(struct tty_struct *tty);
202
        void (*break_ctl)(struct tty_struct *tty, int state);
203
        void (*flush_buffer)(struct tty_struct *tty);
204
        void (*set_ldisc)(struct tty_struct *tty);
205
        void (*wait_until_sent)(struct tty_struct *tty, int timeout);
206
        void (*send_xchar)(struct tty_struct *tty, char ch);
207
        int (*read_proc)(char *page, char **start, off_t off,
208
                          int count, int *eof, void *data);
209
        int (*write_proc)(struct file *file, const char *buffer,
210
                          unsigned long count, void *data);
211
        int (*tiocmget)(struct tty_struct *tty, struct file *file);
212
        int (*tiocmset)(struct tty_struct *tty, struct file *file,
213
                        unsigned int set, unsigned int clear);
214
 
215
        struct list_head tty_drivers;
216
};
217
 
218
extern struct list_head tty_drivers;
219
 
220
struct tty_driver *alloc_tty_driver(int lines);
221
void put_tty_driver(struct tty_driver *driver);
222
void tty_set_operations(struct tty_driver *driver, struct tty_operations *op);
223
 
224
/* tty driver magic number */
225
#define TTY_DRIVER_MAGIC                0x5402
226
 
227
/*
228
 * tty driver flags
229
 *
230
 * TTY_DRIVER_RESET_TERMIOS --- requests the tty layer to reset the
231
 *      termios setting when the last process has closed the device.
232
 *      Used for PTY's, in particular.
233
 *
234
 * TTY_DRIVER_REAL_RAW --- if set, indicates that the driver will
235
 *      guarantee never not to set any special character handling
236
 *      flags if ((IGNBRK || (!BRKINT && !PARMRK)) && (IGNPAR ||
237
 *      !INPCK)).  That is, if there is no reason for the driver to
238
 *      send notifications of parity and break characters up to the
239
 *      line driver, it won't do so.  This allows the line driver to
240
 *      optimize for this case if this flag is set.  (Note that there
241
 *      is also a promise, if the above case is true, not to signal
242
 *      overruns, either.)
243
 *
244
 * TTY_DRIVER_NO_DEVFS --- if set, do not create devfs entries. This
245
 *      is only used by tty_register_driver().
246
 *
247
 */
248
#define TTY_DRIVER_INSTALLED            0x0001
249
#define TTY_DRIVER_RESET_TERMIOS        0x0002
250
#define TTY_DRIVER_REAL_RAW             0x0004
251
#define TTY_DRIVER_NO_DEVFS             0x0008
252
 
253
/* tty driver types */
254
#define TTY_DRIVER_TYPE_SYSTEM          0x0001
255
#define TTY_DRIVER_TYPE_CONSOLE         0x0002
256
#define TTY_DRIVER_TYPE_SERIAL          0x0003
257
#define TTY_DRIVER_TYPE_PTY             0x0004
258
#define TTY_DRIVER_TYPE_SCC             0x0005  /* scc driver */
259
#define TTY_DRIVER_TYPE_SYSCONS         0x0006
260
 
261
/* system subtypes (magic, used by tty_io.c) */
262
#define SYSTEM_TYPE_TTY                 0x0001
263
#define SYSTEM_TYPE_CONSOLE             0x0002
264
#define SYSTEM_TYPE_SYSCONS             0x0003
265
#define SYSTEM_TYPE_SYSPTMX             0x0004
266
 
267
/* pty subtypes (magic, used by tty_io.c) */
268
#define PTY_TYPE_MASTER                 0x0001
269
#define PTY_TYPE_SLAVE                  0x0002
270
 
271
/* serial subtype definitions */
272
#define SERIAL_TYPE_NORMAL      1
273
#define SERIAL_TYPE_CALLOUT     2
274
 
275
#endif /* #ifdef _LINUX_TTY_DRIVER_H */