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

Subversion Repositories test_project

[/] [test_project/] [trunk/] [linux_sd_driver/] [include/] [linux/] [tty_driver.h] - Blame information for rev 82

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

Line No. Rev Author Line
1 62 marcus.erl
#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,
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
 * long (*compat_ioctl)(struct tty_struct *tty, struct file * file,
57
 *                      unsigned int cmd, unsigned long arg);
58
 *
59
 *      implement ioctl processing for 32 bit process on 64 bit system
60
 *
61
 * void (*set_termios)(struct tty_struct *tty, struct ktermios * old);
62
 *
63
 *      This routine allows the tty driver to be notified when
64
 *      device's termios settings have changed.  Note that a
65
 *      well-designed tty driver should be prepared to accept the case
66
 *      where old == NULL, and try to do something rational.
67
 *
68
 * void (*set_ldisc)(struct tty_struct *tty);
69
 *
70
 *      This routine allows the tty driver to be notified when the
71
 *      device's termios settings have changed.
72
 *
73
 * void (*throttle)(struct tty_struct * tty);
74
 *
75
 *      This routine notifies the tty driver that input buffers for
76
 *      the line discipline are close to full, and it should somehow
77
 *      signal that no more characters should be sent to the tty.
78
 *
79
 * void (*unthrottle)(struct tty_struct * tty);
80
 *
81
 *      This routine notifies the tty drivers that it should signals
82
 *      that characters can now be sent to the tty without fear of
83
 *      overrunning the input buffers of the line disciplines.
84
 *
85
 * void (*stop)(struct tty_struct *tty);
86
 *
87
 *      This routine notifies the tty driver that it should stop
88
 *      outputting characters to the tty device.
89
 *
90
 * void (*start)(struct tty_struct *tty);
91
 *
92
 *      This routine notifies the tty driver that it resume sending
93
 *      characters to the tty device.
94
 *
95
 * void (*hangup)(struct tty_struct *tty);
96
 *
97
 *      This routine notifies the tty driver that it should hangup the
98
 *      tty device.
99
 *
100
 * void (*break_ctl)(struct tty_stuct *tty, int state);
101
 *
102
 *      This optional routine requests the tty driver to turn on or
103
 *      off BREAK status on the RS-232 port.  If state is -1,
104
 *      then the BREAK status should be turned on; if state is 0, then
105
 *      BREAK should be turned off.
106
 *
107
 *      If this routine is implemented, the high-level tty driver will
108
 *      handle the following ioctls: TCSBRK, TCSBRKP, TIOCSBRK,
109
 *      TIOCCBRK.  Otherwise, these ioctls will be passed down to the
110
 *      driver to handle.
111
 *
112
 * void (*wait_until_sent)(struct tty_struct *tty, int timeout);
113
 *
114
 *      This routine waits until the device has written out all of the
115
 *      characters in its transmitter FIFO.
116
 *
117
 * void (*send_xchar)(struct tty_struct *tty, char ch);
118
 *
119
 *      This routine is used to send a high-priority XON/XOFF
120
 *      character to the device.
121
 */
122
 
123
#include <linux/fs.h>
124
#include <linux/list.h>
125
#include <linux/cdev.h>
126
 
127
struct tty_struct;
128
 
129
struct tty_operations {
130
        int  (*open)(struct tty_struct * tty, struct file * filp);
131
        void (*close)(struct tty_struct * tty, struct file * filp);
132
        int  (*write)(struct tty_struct * tty,
133
                      const unsigned char *buf, int count);
134
        void (*put_char)(struct tty_struct *tty, unsigned char ch);
135
        void (*flush_chars)(struct tty_struct *tty);
136
        int  (*write_room)(struct tty_struct *tty);
137
        int  (*chars_in_buffer)(struct tty_struct *tty);
138
        int  (*ioctl)(struct tty_struct *tty, struct file * file,
139
                    unsigned int cmd, unsigned long arg);
140
        long (*compat_ioctl)(struct tty_struct *tty, struct file * file,
141
                             unsigned int cmd, unsigned long arg);
142
        void (*set_termios)(struct tty_struct *tty, struct ktermios * old);
143
        void (*throttle)(struct tty_struct * tty);
144
        void (*unthrottle)(struct tty_struct * tty);
145
        void (*stop)(struct tty_struct *tty);
146
        void (*start)(struct tty_struct *tty);
147
        void (*hangup)(struct tty_struct *tty);
148
        void (*break_ctl)(struct tty_struct *tty, int state);
149
        void (*flush_buffer)(struct tty_struct *tty);
150
        void (*set_ldisc)(struct tty_struct *tty);
151
        void (*wait_until_sent)(struct tty_struct *tty, int timeout);
152
        void (*send_xchar)(struct tty_struct *tty, char ch);
153
        int (*read_proc)(char *page, char **start, off_t off,
154
                          int count, int *eof, void *data);
155
        int (*write_proc)(struct file *file, const char __user *buffer,
156
                          unsigned long count, void *data);
157
        int (*tiocmget)(struct tty_struct *tty, struct file *file);
158
        int (*tiocmset)(struct tty_struct *tty, struct file *file,
159
                        unsigned int set, unsigned int clear);
160
};
161
 
162
struct tty_driver {
163
        int     magic;          /* magic number for this structure */
164
        struct cdev cdev;
165
        struct module   *owner;
166
        const char      *driver_name;
167
        const char      *name;
168
        int     name_base;      /* offset of printed name */
169
        int     major;          /* major device number */
170
        int     minor_start;    /* start of minor device number */
171
        int     minor_num;      /* number of *possible* devices */
172
        int     num;            /* number of devices allocated */
173
        short   type;           /* type of tty driver */
174
        short   subtype;        /* subtype of tty driver */
175
        struct ktermios init_termios; /* Initial termios */
176
        int     flags;          /* tty driver flags */
177
        int     refcount;       /* for loadable tty drivers */
178
        struct proc_dir_entry *proc_entry; /* /proc fs entry */
179
        struct tty_driver *other; /* only used for the PTY driver */
180
 
181
        /*
182
         * Pointer to the tty data structures
183
         */
184
        struct tty_struct **ttys;
185
        struct ktermios **termios;
186
        struct ktermios **termios_locked;
187
        void *driver_state;     /* only used for the PTY driver */
188
 
189
        /*
190
         * Interface routines from the upper tty layer to the tty
191
         * driver.      Will be replaced with struct tty_operations.
192
         */
193
        int  (*open)(struct tty_struct * tty, struct file * filp);
194
        void (*close)(struct tty_struct * tty, struct file * filp);
195
        int  (*write)(struct tty_struct * tty,
196
                      const unsigned char *buf, int count);
197
        void (*put_char)(struct tty_struct *tty, unsigned char ch);
198
        void (*flush_chars)(struct tty_struct *tty);
199
        int  (*write_room)(struct tty_struct *tty);
200
        int  (*chars_in_buffer)(struct tty_struct *tty);
201
        int  (*ioctl)(struct tty_struct *tty, struct file * file,
202
                    unsigned int cmd, unsigned long arg);
203
        long (*compat_ioctl)(struct tty_struct *tty, struct file * file,
204
                             unsigned int cmd, unsigned long arg);
205
        void (*set_termios)(struct tty_struct *tty, struct ktermios * old);
206
        void (*throttle)(struct tty_struct * tty);
207
        void (*unthrottle)(struct tty_struct * tty);
208
        void (*stop)(struct tty_struct *tty);
209
        void (*start)(struct tty_struct *tty);
210
        void (*hangup)(struct tty_struct *tty);
211
        void (*break_ctl)(struct tty_struct *tty, int state);
212
        void (*flush_buffer)(struct tty_struct *tty);
213
        void (*set_ldisc)(struct tty_struct *tty);
214
        void (*wait_until_sent)(struct tty_struct *tty, int timeout);
215
        void (*send_xchar)(struct tty_struct *tty, char ch);
216
        int (*read_proc)(char *page, char **start, off_t off,
217
                          int count, int *eof, void *data);
218
        int (*write_proc)(struct file *file, const char __user *buffer,
219
                          unsigned long count, void *data);
220
        int (*tiocmget)(struct tty_struct *tty, struct file *file);
221
        int (*tiocmset)(struct tty_struct *tty, struct file *file,
222
                        unsigned int set, unsigned int clear);
223
 
224
        struct list_head tty_drivers;
225
};
226
 
227
extern struct list_head tty_drivers;
228
 
229
struct tty_driver *alloc_tty_driver(int lines);
230
void put_tty_driver(struct tty_driver *driver);
231
void tty_set_operations(struct tty_driver *driver,
232
                        const struct tty_operations *op);
233
 
234
/* tty driver magic number */
235
#define TTY_DRIVER_MAGIC                0x5402
236
 
237
/*
238
 * tty driver flags
239
 *
240
 * TTY_DRIVER_RESET_TERMIOS --- requests the tty layer to reset the
241
 *      termios setting when the last process has closed the device.
242
 *      Used for PTY's, in particular.
243
 *
244
 * TTY_DRIVER_REAL_RAW --- if set, indicates that the driver will
245
 *      guarantee never not to set any special character handling
246
 *      flags if ((IGNBRK || (!BRKINT && !PARMRK)) && (IGNPAR ||
247
 *      !INPCK)).  That is, if there is no reason for the driver to
248
 *      send notifications of parity and break characters up to the
249
 *      line driver, it won't do so.  This allows the line driver to
250
 *      optimize for this case if this flag is set.  (Note that there
251
 *      is also a promise, if the above case is true, not to signal
252
 *      overruns, either.)
253
 *
254
 * TTY_DRIVER_DYNAMIC_DEV --- if set, the individual tty devices need
255
 *      to be registered with a call to tty_register_driver() when the
256
 *      device is found in the system and unregistered with a call to
257
 *      tty_unregister_device() so the devices will be show up
258
 *      properly in sysfs.  If not set, driver->num entries will be
259
 *      created by the tty core in sysfs when tty_register_driver() is
260
 *      called.  This is to be used by drivers that have tty devices
261
 *      that can appear and disappear while the main tty driver is
262
 *      registered with the tty core.
263
 *
264
 * TTY_DRIVER_DEVPTS_MEM -- don't use the standard arrays, instead
265
 *      use dynamic memory keyed through the devpts filesystem.  This
266
 *      is only applicable to the pty driver.
267
 */
268
#define TTY_DRIVER_INSTALLED            0x0001
269
#define TTY_DRIVER_RESET_TERMIOS        0x0002
270
#define TTY_DRIVER_REAL_RAW             0x0004
271
#define TTY_DRIVER_DYNAMIC_DEV          0x0008
272
#define TTY_DRIVER_DEVPTS_MEM           0x0010
273
 
274
/* tty driver types */
275
#define TTY_DRIVER_TYPE_SYSTEM          0x0001
276
#define TTY_DRIVER_TYPE_CONSOLE         0x0002
277
#define TTY_DRIVER_TYPE_SERIAL          0x0003
278
#define TTY_DRIVER_TYPE_PTY             0x0004
279
#define TTY_DRIVER_TYPE_SCC             0x0005  /* scc driver */
280
#define TTY_DRIVER_TYPE_SYSCONS         0x0006
281
 
282
/* system subtypes (magic, used by tty_io.c) */
283
#define SYSTEM_TYPE_TTY                 0x0001
284
#define SYSTEM_TYPE_CONSOLE             0x0002
285
#define SYSTEM_TYPE_SYSCONS             0x0003
286
#define SYSTEM_TYPE_SYSPTMX             0x0004
287
 
288
/* pty subtypes (magic, used by tty_io.c) */
289
#define PTY_TYPE_MASTER                 0x0001
290
#define PTY_TYPE_SLAVE                  0x0002
291
 
292
/* serial subtype definitions */
293
#define SERIAL_TYPE_NORMAL      1
294
 
295
#endif /* #ifdef _LINUX_TTY_DRIVER_H */

powered by: WebSVN 2.1.0

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