1 |
1633 |
jcastillo |
#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 |
|
|
*/
|
96 |
|
|
|
97 |
|
|
#include <linux/fs.h>
|
98 |
|
|
|
99 |
|
|
struct tty_driver {
|
100 |
|
|
int magic; /* magic number for this structure */
|
101 |
|
|
const char *name;
|
102 |
|
|
int name_base; /* offset of printed name */
|
103 |
|
|
short major; /* major device number */
|
104 |
|
|
short minor_start; /* start of minor device number*/
|
105 |
|
|
short num; /* number of devices */
|
106 |
|
|
short type; /* type of tty driver */
|
107 |
|
|
short subtype; /* subtype of tty driver */
|
108 |
|
|
struct termios init_termios; /* Initial termios */
|
109 |
|
|
int flags; /* tty driver flags */
|
110 |
|
|
int *refcount; /* for loadable tty drivers */
|
111 |
|
|
struct tty_driver *other; /* only used for the PTY driver */
|
112 |
|
|
|
113 |
|
|
/*
|
114 |
|
|
* Pointer to the tty data structures
|
115 |
|
|
*/
|
116 |
|
|
struct tty_struct **table;
|
117 |
|
|
struct termios **termios;
|
118 |
|
|
struct termios **termios_locked;
|
119 |
|
|
|
120 |
|
|
/*
|
121 |
|
|
* Interface routines from the upper tty layer to the tty
|
122 |
|
|
* driver.
|
123 |
|
|
*/
|
124 |
|
|
int (*open)(struct tty_struct * tty, struct file * filp);
|
125 |
|
|
void (*close)(struct tty_struct * tty, struct file * filp);
|
126 |
|
|
int (*write)(struct tty_struct * tty, int from_user,
|
127 |
|
|
const unsigned char *buf, int count);
|
128 |
|
|
void (*put_char)(struct tty_struct *tty, unsigned char ch);
|
129 |
|
|
void (*flush_chars)(struct tty_struct *tty);
|
130 |
|
|
int (*write_room)(struct tty_struct *tty);
|
131 |
|
|
int (*chars_in_buffer)(struct tty_struct *tty);
|
132 |
|
|
int (*ioctl)(struct tty_struct *tty, struct file * file,
|
133 |
|
|
unsigned int cmd, unsigned long arg);
|
134 |
|
|
void (*set_termios)(struct tty_struct *tty, struct termios * old);
|
135 |
|
|
void (*throttle)(struct tty_struct * tty);
|
136 |
|
|
void (*unthrottle)(struct tty_struct * tty);
|
137 |
|
|
void (*stop)(struct tty_struct *tty);
|
138 |
|
|
void (*start)(struct tty_struct *tty);
|
139 |
|
|
void (*hangup)(struct tty_struct *tty);
|
140 |
|
|
void (*flush_buffer)(struct tty_struct *tty);
|
141 |
|
|
void (*set_ldisc)(struct tty_struct *tty);
|
142 |
|
|
|
143 |
|
|
/*
|
144 |
|
|
* linked list pointers
|
145 |
|
|
*/
|
146 |
|
|
struct tty_driver *next;
|
147 |
|
|
struct tty_driver *prev;
|
148 |
|
|
};
|
149 |
|
|
|
150 |
|
|
/* tty driver magic number */
|
151 |
|
|
#define TTY_DRIVER_MAGIC 0x5402
|
152 |
|
|
|
153 |
|
|
/*
|
154 |
|
|
* tty driver flags
|
155 |
|
|
*
|
156 |
|
|
* TTY_DRIVER_RESET_TERMIOS --- requests the tty layer to reset the
|
157 |
|
|
* termios setting when the last process has closed the device.
|
158 |
|
|
* Used for PTY's, in particular.
|
159 |
|
|
*
|
160 |
|
|
* TTY_DRIVER_REAL_RAW --- if set, indicates that the driver will
|
161 |
|
|
* guarantee never not to set any special character handling
|
162 |
|
|
* flags if ((IGNBRK || (!BRKINT && !PARMRK)) && (IGNPAR ||
|
163 |
|
|
* !INPCK)). That is, if there is no reason for the driver to
|
164 |
|
|
* send notifications of parity and break characters up to the
|
165 |
|
|
* line driver, it won't do so. This allows the line driver to
|
166 |
|
|
* optimize for this case if this flag is set. (Note that there
|
167 |
|
|
* is also a promise, if the above case is true, not to signal
|
168 |
|
|
* overruns, either.)
|
169 |
|
|
*/
|
170 |
|
|
#define TTY_DRIVER_INSTALLED 0x0001
|
171 |
|
|
#define TTY_DRIVER_RESET_TERMIOS 0x0002
|
172 |
|
|
#define TTY_DRIVER_REAL_RAW 0x0004
|
173 |
|
|
|
174 |
|
|
/* tty driver types */
|
175 |
|
|
#define TTY_DRIVER_TYPE_SYSTEM 0x0001
|
176 |
|
|
#define TTY_DRIVER_TYPE_CONSOLE 0x0002
|
177 |
|
|
#define TTY_DRIVER_TYPE_SERIAL 0x0003
|
178 |
|
|
#define TTY_DRIVER_TYPE_PTY 0x0004
|
179 |
|
|
#define TTY_DRIVER_TYPE_SCC 0x0005 /* scc driver */
|
180 |
|
|
|
181 |
|
|
/* system subtypes (magic, used by tty_io.c) */
|
182 |
|
|
#define SYSTEM_TYPE_TTY 0x0001
|
183 |
|
|
#define SYSTEM_TYPE_CONSOLE 0x0002
|
184 |
|
|
|
185 |
|
|
/* pty subtypes (magic, used by tty_io.c) */
|
186 |
|
|
#define PTY_TYPE_MASTER 0x0001
|
187 |
|
|
#define PTY_TYPE_SLAVE 0x0002
|
188 |
|
|
|
189 |
|
|
#endif /* #ifdef _LINUX_TTY_DRIVER_H */
|