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 */ |