Blame view
include/linux/tty_ldisc.h
8.08 KB
1da177e4c Linux-2.6.12-rc2 |
1 2 3 4 5 6 7 8 9 10 11 |
#ifndef _LINUX_TTY_LDISC_H #define _LINUX_TTY_LDISC_H /* * This structure defines the interface between the tty line discipline * implementation 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. * * int (*open)(struct tty_struct *); * |
6be06e727 tty: Fix checkpat... |
12 13 14 15 |
* This function is called when the line discipline is associated * with the tty. The line discipline can use this as an * opportunity to initialize any state needed by the ldisc routines. * |
1da177e4c Linux-2.6.12-rc2 |
16 17 18 |
* void (*close)(struct tty_struct *); * * This function is called when the line discipline is being |
6be06e727 tty: Fix checkpat... |
19 20 21 |
* shutdown, either because the tty is being closed or because * the tty is being changed to use a new line discipline * |
1da177e4c Linux-2.6.12-rc2 |
22 23 |
* void (*flush_buffer)(struct tty_struct *tty); * |
6be06e727 tty: Fix checkpat... |
24 25 26 27 |
* This function instructs the line discipline to clear its * buffers of any input characters it may have queued to be * delivered to the user mode process. * |
1da177e4c Linux-2.6.12-rc2 |
28 29 |
* ssize_t (*chars_in_buffer)(struct tty_struct *tty); * |
6be06e727 tty: Fix checkpat... |
30 |
* This function returns the number of input characters the line |
1da177e4c Linux-2.6.12-rc2 |
31 32 |
* discipline may have queued up to be delivered to the user mode * process. |
6be06e727 tty: Fix checkpat... |
33 |
* |
1da177e4c Linux-2.6.12-rc2 |
34 35 36 |
* ssize_t (*read)(struct tty_struct * tty, struct file * file, * unsigned char * buf, size_t nr); * |
6be06e727 tty: Fix checkpat... |
37 38 39 40 41 |
* This function is called when the user requests to read from * the tty. The line discipline will return whatever characters * it has buffered up for the user. If this function is not * defined, the user will receive an EIO error. * |
1da177e4c Linux-2.6.12-rc2 |
42 |
* ssize_t (*write)(struct tty_struct * tty, struct file * file, |
6be06e727 tty: Fix checkpat... |
43 44 45 46 47 48 49 50 |
* const unsigned char * buf, size_t nr); * * This function is called when the user requests to write to the * tty. The line discipline will deliver the characters to the * low-level tty device for transmission, optionally performing * some processing on the characters first. If this function is * not defined, the user will receive an EIO error. * |
1da177e4c Linux-2.6.12-rc2 |
51 |
* int (*ioctl)(struct tty_struct * tty, struct file * file, |
6be06e727 tty: Fix checkpat... |
52 |
* unsigned int cmd, unsigned long arg); |
1da177e4c Linux-2.6.12-rc2 |
53 54 |
* * This function is called when the user requests an ioctl which |
6be06e727 tty: Fix checkpat... |
55 56 57 58 59 60 61 |
* is not handled by the tty layer or the low-level tty driver. * It is intended for ioctls which affect line discpline * operation. Note that the search order for ioctls is (1) tty * layer, (2) tty low-level driver, (3) line discpline. So a * low-level driver can "grab" an ioctl request before the line * discpline has a chance to see it. * |
e10cc1df1 tty: add compat_i... |
62 |
* long (*compat_ioctl)(struct tty_struct * tty, struct file * file, |
6be06e727 tty: Fix checkpat... |
63 |
* unsigned int cmd, unsigned long arg); |
e10cc1df1 tty: add compat_i... |
64 |
* |
6be06e727 tty: Fix checkpat... |
65 |
* Process ioctl calls from 32-bit process on 64-bit system |
e10cc1df1 tty: add compat_i... |
66 |
* |
edc6afc54 [PATCH] tty: swit... |
67 |
* void (*set_termios)(struct tty_struct *tty, struct ktermios * old); |
1da177e4c Linux-2.6.12-rc2 |
68 |
* |
6be06e727 tty: Fix checkpat... |
69 70 71 |
* This function notifies the line discpline that a change has * been made to the termios structure. * |
1da177e4c Linux-2.6.12-rc2 |
72 |
* int (*poll)(struct tty_struct * tty, struct file * file, |
6be06e727 tty: Fix checkpat... |
73 |
* poll_table *wait); |
1da177e4c Linux-2.6.12-rc2 |
74 |
* |
6be06e727 tty: Fix checkpat... |
75 76 77 |
* This function is called when a user attempts to select/poll on a * tty device. It is solely the responsibility of the line * discipline to handle poll requests. |
1da177e4c Linux-2.6.12-rc2 |
78 |
* |
55db4c64e Revert "tty: make... |
79 |
* void (*receive_buf)(struct tty_struct *, const unsigned char *cp, |
6be06e727 tty: Fix checkpat... |
80 81 82 83 84 85 86 |
* char *fp, int count); * * This function is called by the low-level tty driver to send * characters received by the hardware to the line discpline for * processing. <cp> is a pointer to the buffer of input * character received by the device. <fp> is a pointer to a * pointer of flag bytes which indicate whether a character was |
82f91fe09 tty: Always handl... |
87 88 |
* received with a parity error, etc. <fp> may be NULL to indicate * all data received is TTY_NORMAL. |
6be06e727 tty: Fix checkpat... |
89 |
* |
1da177e4c Linux-2.6.12-rc2 |
90 91 |
* void (*write_wakeup)(struct tty_struct *); * |
6be06e727 tty: Fix checkpat... |
92 93 94 |
* This function is called by the low-level tty driver to signal * that line discpline should try to send more characters to the * low-level driver for transmission. If the line discpline does |
879eb9c3f tty_ldisc: add mo... |
95 96 97 98 |
* not have any more data to send, it can just return. If the line * discipline does have some data to send, please arise a tasklet * or workqueue to do the real data transfer. Do not send data in * this hook, it may leads to a deadlock. |
1da177e4c Linux-2.6.12-rc2 |
99 100 101 102 103 104 105 |
* * int (*hangup)(struct tty_struct *) * * Called on a hangup. Tells the discipline that it should * cease I/O to the tty driver. Can sleep. The driver should * seek to perform this action quickly but should wait until * any pending driver I/O is completed. |
b3e63afe8 ldisc: new dcd_ch... |
106 |
* |
f6c8dbe6e n_tty: Encapsulat... |
107 108 109 110 111 |
* void (*fasync)(struct tty_struct *, int on) * * Notify line discipline when signal-driven I/O is enabled or * disabled. * |
593fb1ae4 pps: Move timesta... |
112 |
* void (*dcd_change)(struct tty_struct *tty, unsigned int status) |
b3e63afe8 ldisc: new dcd_ch... |
113 |
* |
593fb1ae4 pps: Move timesta... |
114 115 |
* Tells the discipline that the DCD pin has changed its status. * Used exclusively by the N_PPS (Pulse-Per-Second) line discipline. |
24a89d1cb tty: Make ldisc i... |
116 117 118 119 120 121 122 123 124 |
* * int (*receive_buf2)(struct tty_struct *, const unsigned char *cp, * char *fp, int count); * * This function is called by the low-level tty driver to send * characters received by the hardware to the line discpline for * processing. <cp> is a pointer to the buffer of input * character received by the device. <fp> is a pointer to a * pointer of flag bytes which indicate whether a character was |
82f91fe09 tty: Always handl... |
125 126 |
* received with a parity error, etc. <fp> may be NULL to indicate * all data received is TTY_NORMAL. |
24a89d1cb tty: Make ldisc i... |
127 |
* If assigned, prefer this function for automatic flow control. |
1da177e4c Linux-2.6.12-rc2 |
128 129 130 131 |
*/ #include <linux/fs.h> #include <linux/wait.h> |
4898e640c tty: Add timed, w... |
132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 |
/* * the semaphore definition */ struct ld_semaphore { long count; raw_spinlock_t wait_lock; unsigned int wait_readers; struct list_head read_wait; struct list_head write_wait; #ifdef CONFIG_DEBUG_LOCK_ALLOC struct lockdep_map dep_map; #endif }; extern void __init_ldsem(struct ld_semaphore *sem, const char *name, struct lock_class_key *key); #define init_ldsem(sem) \ do { \ static struct lock_class_key __key; \ \ __init_ldsem((sem), #sem, &__key); \ } while (0) extern int ldsem_down_read(struct ld_semaphore *sem, long timeout); extern int ldsem_down_read_trylock(struct ld_semaphore *sem); extern int ldsem_down_write(struct ld_semaphore *sem, long timeout); extern int ldsem_down_write_trylock(struct ld_semaphore *sem); extern void ldsem_up_read(struct ld_semaphore *sem); extern void ldsem_up_write(struct ld_semaphore *sem); #ifdef CONFIG_DEBUG_LOCK_ALLOC extern int ldsem_down_read_nested(struct ld_semaphore *sem, int subclass, long timeout); extern int ldsem_down_write_nested(struct ld_semaphore *sem, int subclass, long timeout); #else # define ldsem_down_read_nested(sem, subclass, timeout) \ ldsem_down_read(sem, timeout) # define ldsem_down_write_nested(sem, subclass, timeout) \ ldsem_down_write(sem, timeout) #endif |
a352def21 tty: Ldisc revamp |
176 |
struct tty_ldisc_ops { |
1da177e4c Linux-2.6.12-rc2 |
177 178 179 180 |
int magic; char *name; int num; int flags; |
6be06e727 tty: Fix checkpat... |
181 |
|
1da177e4c Linux-2.6.12-rc2 |
182 183 184 185 186 187 188 |
/* * The following routines are called from above. */ int (*open)(struct tty_struct *); void (*close)(struct tty_struct *); void (*flush_buffer)(struct tty_struct *tty); ssize_t (*chars_in_buffer)(struct tty_struct *tty); |
6be06e727 tty: Fix checkpat... |
189 190 191 192 193 |
ssize_t (*read)(struct tty_struct *tty, struct file *file, unsigned char __user *buf, size_t nr); ssize_t (*write)(struct tty_struct *tty, struct file *file, const unsigned char *buf, size_t nr); int (*ioctl)(struct tty_struct *tty, struct file *file, |
1da177e4c Linux-2.6.12-rc2 |
194 |
unsigned int cmd, unsigned long arg); |
6be06e727 tty: Fix checkpat... |
195 |
long (*compat_ioctl)(struct tty_struct *tty, struct file *file, |
e10cc1df1 tty: add compat_i... |
196 |
unsigned int cmd, unsigned long arg); |
6be06e727 tty: Fix checkpat... |
197 |
void (*set_termios)(struct tty_struct *tty, struct ktermios *old); |
1da177e4c Linux-2.6.12-rc2 |
198 199 200 |
unsigned int (*poll)(struct tty_struct *, struct file *, struct poll_table_struct *); int (*hangup)(struct tty_struct *tty); |
6be06e727 tty: Fix checkpat... |
201 |
|
1da177e4c Linux-2.6.12-rc2 |
202 203 204 |
/* * The following routines are called from below. */ |
55db4c64e Revert "tty: make... |
205 206 |
void (*receive_buf)(struct tty_struct *, const unsigned char *cp, char *fp, int count); |
1da177e4c Linux-2.6.12-rc2 |
207 |
void (*write_wakeup)(struct tty_struct *); |
593fb1ae4 pps: Move timesta... |
208 |
void (*dcd_change)(struct tty_struct *, unsigned int); |
f6c8dbe6e n_tty: Encapsulat... |
209 |
void (*fasync)(struct tty_struct *tty, int on); |
24a89d1cb tty: Make ldisc i... |
210 211 |
int (*receive_buf2)(struct tty_struct *, const unsigned char *cp, char *fp, int count); |
1da177e4c Linux-2.6.12-rc2 |
212 213 |
struct module *owner; |
6be06e727 tty: Fix checkpat... |
214 |
|
1da177e4c Linux-2.6.12-rc2 |
215 216 |
int refcount; }; |
a352def21 tty: Ldisc revamp |
217 218 |
struct tty_ldisc { struct tty_ldisc_ops *ops; |
36697529b tty: Replace ldis... |
219 |
struct tty_struct *tty; |
a352def21 tty: Ldisc revamp |
220 |
}; |
1da177e4c Linux-2.6.12-rc2 |
221 222 223 224 225 226 227 228 |
#define TTY_LDISC_MAGIC 0x5403 #define LDISC_FLAG_DEFINED 0x00000001 #define MODULE_ALIAS_LDISC(ldisc) \ MODULE_ALIAS("tty-ldisc-" __stringify(ldisc)) #endif /* _LINUX_TTY_LDISC_H */ |