Blame view
include/linux/tty_driver.h
14.2 KB
1da177e4c Linux-2.6.12-rc2 |
1 2 3 4 5 6 7 8 9 |
#ifndef _LINUX_TTY_DRIVER_H #define _LINUX_TTY_DRIVER_H /* * This structure defines the interface between the low-level tty * driver and the tty routines. The following routines can be * defined; unless noted otherwise, they are optional, and can be * filled in with a null pointer. * |
99f1fe189 tty: Clean up the... |
10 11 12 13 14 15 16 17 |
* struct tty_struct * (*lookup)(struct tty_driver *self, int idx) * * Return the tty device corresponding to idx, NULL if there is not * one currently in use and an ERR_PTR value on error. Called under * tty_mutex (for now!) * * Optional method. Default behaviour is to use the ttys array * |
8b0a88d59 tty: More driver ... |
18 19 20 21 22 23 24 25 26 27 28 29 30 31 |
* int (*install)(struct tty_driver *self, struct tty_struct *tty) * * Install a new tty into the tty driver internal tables. Used in * conjunction with lookup and remove methods. * * Optional method. Default behaviour is to use the ttys array * * void (*remove)(struct tty_driver *self, struct tty_struct *tty) * * Remove a closed tty from the tty driver internal tables. Used in * conjunction with lookup and remove methods. * * Optional method. Default behaviour is to use the ttys array * |
1da177e4c Linux-2.6.12-rc2 |
32 33 34 35 36 |
* int (*open)(struct tty_struct * tty, struct file * filp); * * This routine is called when a particular tty device is opened. * This routine is mandatory; if this routine is not filled in, * the attempted open will fail with ENODEV. |
f34d7a5b7 tty: The big oper... |
37 38 |
* * Required method. |
1da177e4c Linux-2.6.12-rc2 |
39 40 41 42 43 |
* * void (*close)(struct tty_struct * tty, struct file * filp); * * This routine is called when a particular tty device is closed. * |
f34d7a5b7 tty: The big oper... |
44 45 |
* Required method. * |
feebed651 tty: shutdown method |
46 47 |
* void (*shutdown)(struct tty_struct * tty); * |
f278a2f7b tty: Fix regressi... |
48 49 |
* This routine is called synchronously when a particular tty device * is closed for the last time freeing up the resources. |
24d406a6b TTY: pty, fix pty... |
50 51 52 |
* Note that tty_shutdown() is not called if ops->shutdown is defined. * This means one is responsible to take care of calling ops->remove (e.g. * via tty_driver_remove_tty) and releasing tty->termios. |
f278a2f7b tty: Fix regressi... |
53 54 55 56 57 58 59 60 |
* * * void (*cleanup)(struct tty_struct * tty); * * This routine is called asynchronously when a particular tty device * is closed for the last time freeing up the resources. This is * actually the second part of shutdown for routines that might sleep. * |
feebed651 tty: shutdown method |
61 |
* |
1da177e4c Linux-2.6.12-rc2 |
62 63 64 65 66 67 |
* int (*write)(struct tty_struct * tty, * const unsigned char *buf, int count); * * This routine is called by the kernel to write a series of * characters to the tty device. The characters may come from * user space or kernel space. This routine will return the |
36c7343b4 tty_driver: Updat... |
68 |
* number of characters actually accepted for writing. |
1da177e4c Linux-2.6.12-rc2 |
69 |
* |
f34d7a5b7 tty: The big oper... |
70 71 72 |
* Optional: Required for writable devices. * * int (*put_char)(struct tty_struct *tty, unsigned char ch); |
1da177e4c Linux-2.6.12-rc2 |
73 74 75 76 77 78 79 |
* * This routine is called by the kernel to write a single * character to the tty device. If the kernel uses this routine, * it must call the flush_chars() routine (if defined) when it is * done stuffing characters into the driver. If there is no room * in the queue, the character is ignored. * |
f34d7a5b7 tty: The big oper... |
80 81 82 83 |
* Optional: Kernel will use the write method if not provided. * * Note: Do not call this function directly, call tty_put_char * |
1da177e4c Linux-2.6.12-rc2 |
84 85 86 87 |
* void (*flush_chars)(struct tty_struct *tty); * * This routine is called by the kernel after it has written a * series of characters to the tty device using put_char(). |
f34d7a5b7 tty: The big oper... |
88 89 90 91 |
* * Optional: * * Note: Do not call this function directly, call tty_driver_flush_chars |
1da177e4c Linux-2.6.12-rc2 |
92 93 94 95 96 97 98 |
* * int (*write_room)(struct tty_struct *tty); * * This routine returns the numbers of characters the tty driver * will accept for queuing to be written. This number is subject * to change as output buffers get emptied, or if the output flow * control is acted. |
f34d7a5b7 tty: The big oper... |
99 100 101 102 |
* * Required if write method is provided else not needed. * * Note: Do not call this function directly, call tty_write_room |
1da177e4c Linux-2.6.12-rc2 |
103 |
* |
6caa76b77 tty: now phase ou... |
104 |
* int (*ioctl)(struct tty_struct *tty, unsigned int cmd, unsigned long arg); |
1da177e4c Linux-2.6.12-rc2 |
105 106 |
* * This routine allows the tty driver to implement |
6ce5b1ce5 tty: fix typos/er... |
107 |
* device-specific ioctls. If the ioctl number passed in cmd |
1da177e4c Linux-2.6.12-rc2 |
108 |
* is not recognized by the driver, it should return ENOIOCTLCMD. |
e10cc1df1 tty: add compat_i... |
109 |
* |
f34d7a5b7 tty: The big oper... |
110 111 |
* Optional * |
6caa76b77 tty: now phase ou... |
112 |
* long (*compat_ioctl)(struct tty_struct *tty,, |
e10cc1df1 tty: add compat_i... |
113 114 115 |
* unsigned int cmd, unsigned long arg); * * implement ioctl processing for 32 bit process on 64 bit system |
f34d7a5b7 tty: The big oper... |
116 117 |
* * Optional |
1da177e4c Linux-2.6.12-rc2 |
118 |
* |
edc6afc54 [PATCH] tty: swit... |
119 |
* void (*set_termios)(struct tty_struct *tty, struct ktermios * old); |
1da177e4c Linux-2.6.12-rc2 |
120 121 |
* * This routine allows the tty driver to be notified when |
f34d7a5b7 tty: The big oper... |
122 123 124 125 |
* device's termios settings have changed. * * Optional: Called under the termios lock * |
1da177e4c Linux-2.6.12-rc2 |
126 127 128 129 130 |
* * void (*set_ldisc)(struct tty_struct *tty); * * This routine allows the tty driver to be notified when the * device's termios settings have changed. |
f34d7a5b7 tty: The big oper... |
131 132 |
* * Optional: Called under BKL (currently) |
1da177e4c Linux-2.6.12-rc2 |
133 134 135 136 137 138 |
* * void (*throttle)(struct tty_struct * tty); * * This routine notifies the tty driver that input buffers for * the line discipline are close to full, and it should somehow * signal that no more characters should be sent to the tty. |
39c2e60f8 tty: add throttle... |
139 |
* |
38db89799 tty: throttling r... |
140 141 |
* Optional: Always invoke via tty_throttle(), called under the * termios lock. |
1da177e4c Linux-2.6.12-rc2 |
142 143 144 145 146 147 148 |
* * void (*unthrottle)(struct tty_struct * tty); * * This routine notifies the tty drivers that it should signals * that characters can now be sent to the tty without fear of * overrunning the input buffers of the line disciplines. * |
38db89799 tty: throttling r... |
149 150 |
* Optional: Always invoke via tty_unthrottle(), called under the * termios lock. |
39c2e60f8 tty: add throttle... |
151 |
* |
1da177e4c Linux-2.6.12-rc2 |
152 153 154 155 |
* void (*stop)(struct tty_struct *tty); * * This routine notifies the tty driver that it should stop * outputting characters to the tty device. |
f34d7a5b7 tty: The big oper... |
156 157 158 159 |
* * Optional: * * Note: Call stop_tty not this method. |
1da177e4c Linux-2.6.12-rc2 |
160 161 162 163 164 |
* * void (*start)(struct tty_struct *tty); * * This routine notifies the tty driver that it resume sending * characters to the tty device. |
f34d7a5b7 tty: The big oper... |
165 166 167 168 |
* * Optional: * * Note: Call start_tty not this method. |
1da177e4c Linux-2.6.12-rc2 |
169 170 171 |
* * void (*hangup)(struct tty_struct *tty); * |
6ce5b1ce5 tty: fix typos/er... |
172 |
* This routine notifies the tty driver that it should hang up the |
1da177e4c Linux-2.6.12-rc2 |
173 174 |
* tty device. * |
36c7343b4 tty_driver: Updat... |
175 |
* Optional: |
f34d7a5b7 tty: The big oper... |
176 |
* |
6ce5b1ce5 tty: fix typos/er... |
177 |
* int (*break_ctl)(struct tty_struct *tty, int state); |
1da177e4c Linux-2.6.12-rc2 |
178 179 180 181 182 183 184 185 |
* * This optional routine requests the tty driver to turn on or * off BREAK status on the RS-232 port. If state is -1, * then the BREAK status should be turned on; if state is 0, then * BREAK should be turned off. * * If this routine is implemented, the high-level tty driver will * handle the following ioctls: TCSBRK, TCSBRKP, TIOCSBRK, |
f34d7a5b7 tty: The big oper... |
186 187 |
* TIOCCBRK. * |
9e98966c7 tty: rework break... |
188 189 190 191 |
* If the driver sets TTY_DRIVER_HARDWARE_BREAK then the interface * will also be called with actual times and the hardware is expected * to do the delay work itself. 0 and -1 are still used for on/off. * |
f34d7a5b7 tty: The big oper... |
192 |
* Optional: Required for TCSBRK/BRKP/etc handling. |
1da177e4c Linux-2.6.12-rc2 |
193 194 195 196 197 198 |
* * void (*wait_until_sent)(struct tty_struct *tty, int timeout); * * This routine waits until the device has written out all of the * characters in its transmitter FIFO. * |
f34d7a5b7 tty: The big oper... |
199 200 201 202 |
* Optional: If not provided the device is assumed to have no FIFO * * Note: Usually correct to call tty_wait_until_sent * |
1da177e4c Linux-2.6.12-rc2 |
203 204 205 206 |
* void (*send_xchar)(struct tty_struct *tty, char ch); * * This routine is used to send a high-priority XON/XOFF * character to the device. |
f34d7a5b7 tty: The big oper... |
207 208 209 |
* * Optional: If not provided then the write method is called under * the atomic write lock to keep it serialized with the ldisc. |
8c9a9dd0f tty: remove resiz... |
210 |
* |
fc6f62382 pty: simplify resize |
211 |
* int (*resize)(struct tty_struct *tty, struct winsize *ws) |
8c9a9dd0f tty: remove resiz... |
212 213 214 215 216 217 218 219 220 |
* * Called when a termios request is issued which changes the * requested terminal geometry. * * Optional: the default action is to update the termios structure * without error. This is usually the correct behaviour. Drivers should * not force errors here if they are not resizable objects (eg a serial * line). See tty_do_resize() if you need to wrap the standard method * in your own logic - the usual case. |
1d65b4a08 tty: Add termiox |
221 222 223 224 225 226 227 228 |
* * void (*set_termiox)(struct tty_struct *tty, struct termiox *new); * * Called when the device receives a termiox based ioctl. Passes down * the requested data from user space. This method will not be invoked * unless the tty also has a valid tty->termiox pointer. * * Optional: Called under the termios lock |
d281da7ff tty: Make tiocgic... |
229 230 231 232 233 234 |
* * int (*get_icount)(struct tty_struct *tty, struct serial_icounter *icount); * * Called when the device receives a TIOCGICOUNT ioctl. Passed a kernel * structure to complete. This method is optional and will only be called * if provided (otherwise EINVAL will be returned). |
1da177e4c Linux-2.6.12-rc2 |
235 236 237 238 239 |
*/ #include <linux/fs.h> #include <linux/list.h> #include <linux/cdev.h> |
3dfbd044d TTY: include term... |
240 |
#include <linux/termios.h> |
1da177e4c Linux-2.6.12-rc2 |
241 242 |
struct tty_struct; |
f2d937f3b consoles: polling... |
243 |
struct tty_driver; |
d281da7ff tty: Make tiocgic... |
244 |
struct serial_icounter_struct; |
1da177e4c Linux-2.6.12-rc2 |
245 246 |
struct tty_operations { |
15f1a6338 Add an instance p... |
247 248 |
struct tty_struct * (*lookup)(struct tty_driver *driver, struct inode *inode, int idx); |
8b0a88d59 tty: More driver ... |
249 250 |
int (*install)(struct tty_driver *driver, struct tty_struct *tty); void (*remove)(struct tty_driver *driver, struct tty_struct *tty); |
1da177e4c Linux-2.6.12-rc2 |
251 252 |
int (*open)(struct tty_struct * tty, struct file * filp); void (*close)(struct tty_struct * tty, struct file * filp); |
feebed651 tty: shutdown method |
253 |
void (*shutdown)(struct tty_struct *tty); |
f278a2f7b tty: Fix regressi... |
254 |
void (*cleanup)(struct tty_struct *tty); |
1da177e4c Linux-2.6.12-rc2 |
255 256 |
int (*write)(struct tty_struct * tty, const unsigned char *buf, int count); |
f34d7a5b7 tty: The big oper... |
257 |
int (*put_char)(struct tty_struct *tty, unsigned char ch); |
1da177e4c Linux-2.6.12-rc2 |
258 259 260 |
void (*flush_chars)(struct tty_struct *tty); int (*write_room)(struct tty_struct *tty); int (*chars_in_buffer)(struct tty_struct *tty); |
6caa76b77 tty: now phase ou... |
261 |
int (*ioctl)(struct tty_struct *tty, |
1da177e4c Linux-2.6.12-rc2 |
262 |
unsigned int cmd, unsigned long arg); |
6caa76b77 tty: now phase ou... |
263 |
long (*compat_ioctl)(struct tty_struct *tty, |
e10cc1df1 tty: add compat_i... |
264 |
unsigned int cmd, unsigned long arg); |
edc6afc54 [PATCH] tty: swit... |
265 |
void (*set_termios)(struct tty_struct *tty, struct ktermios * old); |
1da177e4c Linux-2.6.12-rc2 |
266 267 268 269 270 |
void (*throttle)(struct tty_struct * tty); void (*unthrottle)(struct tty_struct * tty); void (*stop)(struct tty_struct *tty); void (*start)(struct tty_struct *tty); void (*hangup)(struct tty_struct *tty); |
9e98966c7 tty: rework break... |
271 |
int (*break_ctl)(struct tty_struct *tty, int state); |
1da177e4c Linux-2.6.12-rc2 |
272 273 274 275 |
void (*flush_buffer)(struct tty_struct *tty); void (*set_ldisc)(struct tty_struct *tty); void (*wait_until_sent)(struct tty_struct *tty, int timeout); void (*send_xchar)(struct tty_struct *tty, char ch); |
60b33c133 tiocmget: kill of... |
276 |
int (*tiocmget)(struct tty_struct *tty); |
20b9d1771 tiocmset: kill th... |
277 |
int (*tiocmset)(struct tty_struct *tty, |
1da177e4c Linux-2.6.12-rc2 |
278 |
unsigned int set, unsigned int clear); |
fc6f62382 pty: simplify resize |
279 |
int (*resize)(struct tty_struct *tty, struct winsize *ws); |
1d65b4a08 tty: Add termiox |
280 |
int (*set_termiox)(struct tty_struct *tty, struct termiox *tnew); |
d281da7ff tty: Make tiocgic... |
281 282 |
int (*get_icount)(struct tty_struct *tty, struct serial_icounter_struct *icount); |
f2d937f3b consoles: polling... |
283 284 285 286 287 |
#ifdef CONFIG_CONSOLE_POLL int (*poll_init)(struct tty_driver *driver, int line, char *options); int (*poll_get_char)(struct tty_driver *driver, int line); void (*poll_put_char)(struct tty_driver *driver, int line, char ch); #endif |
ae149b6be proc tty: add str... |
288 |
const struct file_operations *proc_fops; |
1da177e4c Linux-2.6.12-rc2 |
289 290 291 292 |
}; struct tty_driver { int magic; /* magic number for this structure */ |
7d7b93c14 tty: kref the tty... |
293 |
struct kref kref; /* Reference management */ |
1da177e4c Linux-2.6.12-rc2 |
294 295 296 |
struct cdev cdev; struct module *owner; const char *driver_name; |
1da177e4c Linux-2.6.12-rc2 |
297 298 299 300 301 302 303 304 |
const char *name; int name_base; /* offset of printed name */ int major; /* major device number */ int minor_start; /* start of minor device number */ int minor_num; /* number of *possible* devices */ int num; /* number of devices allocated */ short type; /* type of tty driver */ short subtype; /* subtype of tty driver */ |
edc6afc54 [PATCH] tty: swit... |
305 |
struct ktermios init_termios; /* Initial termios */ |
1da177e4c Linux-2.6.12-rc2 |
306 |
int flags; /* tty driver flags */ |
1da177e4c Linux-2.6.12-rc2 |
307 308 309 310 311 312 313 |
struct proc_dir_entry *proc_entry; /* /proc fs entry */ struct tty_driver *other; /* only used for the PTY driver */ /* * Pointer to the tty data structures */ struct tty_struct **ttys; |
edc6afc54 [PATCH] tty: swit... |
314 315 |
struct ktermios **termios; struct ktermios **termios_locked; |
f34d7a5b7 tty: The big oper... |
316 |
void *driver_state; |
1da177e4c Linux-2.6.12-rc2 |
317 |
/* |
f34d7a5b7 tty: The big oper... |
318 |
* Driver methods |
1da177e4c Linux-2.6.12-rc2 |
319 |
*/ |
1da177e4c Linux-2.6.12-rc2 |
320 |
|
f34d7a5b7 tty: The big oper... |
321 |
const struct tty_operations *ops; |
1da177e4c Linux-2.6.12-rc2 |
322 323 324 325 |
struct list_head tty_drivers; }; extern struct list_head tty_drivers; |
7d7b93c14 tty: kref the tty... |
326 327 328 |
extern struct tty_driver *alloc_tty_driver(int lines); extern void put_tty_driver(struct tty_driver *driver); extern void tty_set_operations(struct tty_driver *driver, |
b68e31d0e [PATCH] const str... |
329 |
const struct tty_operations *op); |
f2d937f3b consoles: polling... |
330 |
extern struct tty_driver *tty_find_polling_driver(char *name, int *line); |
1da177e4c Linux-2.6.12-rc2 |
331 |
|
7d7b93c14 tty: kref the tty... |
332 |
extern void tty_driver_kref_put(struct tty_driver *driver); |
f786ddd28 tty: Correct inli... |
333 334 |
static inline struct tty_driver *tty_driver_kref_get(struct tty_driver *d) |
7d7b93c14 tty: kref the tty... |
335 336 337 338 |
{ kref_get(&d->kref); return d; } |
1da177e4c Linux-2.6.12-rc2 |
339 340 341 342 343 344 345 346 347 348 349 350 351 352 353 354 355 356 357 358 |
/* tty driver magic number */ #define TTY_DRIVER_MAGIC 0x5402 /* * tty driver flags * * TTY_DRIVER_RESET_TERMIOS --- requests the tty layer to reset the * termios setting when the last process has closed the device. * Used for PTY's, in particular. * * TTY_DRIVER_REAL_RAW --- if set, indicates that the driver will * guarantee never not to set any special character handling * flags if ((IGNBRK || (!BRKINT && !PARMRK)) && (IGNPAR || * !INPCK)). That is, if there is no reason for the driver to * send notifications of parity and break characters up to the * line driver, it won't do so. This allows the line driver to * optimize for this case if this flag is set. (Note that there * is also a promise, if the above case is true, not to signal * overruns, either.) * |
331b83198 [PATCH] devfs: Re... |
359 |
* TTY_DRIVER_DYNAMIC_DEV --- if set, the individual tty devices need |
6ce5b1ce5 tty: fix typos/er... |
360 |
* to be registered with a call to tty_register_device() when the |
331b83198 [PATCH] devfs: Re... |
361 362 363 364 365 366 367 |
* device is found in the system and unregistered with a call to * tty_unregister_device() so the devices will be show up * properly in sysfs. If not set, driver->num entries will be * created by the tty core in sysfs when tty_register_driver() is * called. This is to be used by drivers that have tty devices * that can appear and disappear while the main tty driver is * registered with the tty core. |
1da177e4c Linux-2.6.12-rc2 |
368 369 370 371 |
* * TTY_DRIVER_DEVPTS_MEM -- don't use the standard arrays, instead * use dynamic memory keyed through the devpts filesystem. This * is only applicable to the pty driver. |
9e98966c7 tty: rework break... |
372 373 374 375 376 |
* * TTY_DRIVER_HARDWARE_BREAK -- hardware handles break signals. Pass * the requested timeout to the caller instead of using a simple * on/off interface. * |
1da177e4c Linux-2.6.12-rc2 |
377 378 379 380 |
*/ #define TTY_DRIVER_INSTALLED 0x0001 #define TTY_DRIVER_RESET_TERMIOS 0x0002 #define TTY_DRIVER_REAL_RAW 0x0004 |
331b83198 [PATCH] devfs: Re... |
381 |
#define TTY_DRIVER_DYNAMIC_DEV 0x0008 |
1da177e4c Linux-2.6.12-rc2 |
382 |
#define TTY_DRIVER_DEVPTS_MEM 0x0010 |
9e98966c7 tty: rework break... |
383 |
#define TTY_DRIVER_HARDWARE_BREAK 0x0020 |
1da177e4c Linux-2.6.12-rc2 |
384 385 386 387 388 389 390 391 392 393 394 395 396 397 398 399 400 401 402 403 404 405 406 |
/* tty driver types */ #define TTY_DRIVER_TYPE_SYSTEM 0x0001 #define TTY_DRIVER_TYPE_CONSOLE 0x0002 #define TTY_DRIVER_TYPE_SERIAL 0x0003 #define TTY_DRIVER_TYPE_PTY 0x0004 #define TTY_DRIVER_TYPE_SCC 0x0005 /* scc driver */ #define TTY_DRIVER_TYPE_SYSCONS 0x0006 /* system subtypes (magic, used by tty_io.c) */ #define SYSTEM_TYPE_TTY 0x0001 #define SYSTEM_TYPE_CONSOLE 0x0002 #define SYSTEM_TYPE_SYSCONS 0x0003 #define SYSTEM_TYPE_SYSPTMX 0x0004 /* pty subtypes (magic, used by tty_io.c) */ #define PTY_TYPE_MASTER 0x0001 #define PTY_TYPE_SLAVE 0x0002 /* serial subtype definitions */ #define SERIAL_TYPE_NORMAL 1 #endif /* #ifdef _LINUX_TTY_DRIVER_H */ |