diff options
author | Alan Cox <alan@redhat.com> | 2008-07-16 16:53:41 -0400 |
---|---|---|
committer | Linus Torvalds <torvalds@linux-foundation.org> | 2008-07-20 20:12:35 -0400 |
commit | 6f67048cd010afe19d79d821f16055d9c704c6f0 (patch) | |
tree | 1fbd4717f97632a4753ea98555e285483e35cd45 /include/linux | |
parent | d87a6d951c6c09d191d9c10903deb3cc353fcd2c (diff) |
tty: Introduce a tty_port common structure
Every tty driver has its own concept of a port structure and because
they all differ we cannot extract commonality. Begin fixing this by
creating a structure drivers can elect to use so that over time we can
push fields into this and create commonality and then introduce common
methods.
Signed-off-by: Alan Cox <alan@redhat.com>
Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
Diffstat (limited to 'include/linux')
-rw-r--r-- | include/linux/tty.h | 30 |
1 files changed, 29 insertions, 1 deletions
diff --git a/include/linux/tty.h b/include/linux/tty.h index 013711ea7385..d7c695b65c0e 100644 --- a/include/linux/tty.h +++ b/include/linux/tty.h | |||
@@ -166,6 +166,29 @@ struct tty_bufhead { | |||
166 | 166 | ||
167 | struct device; | 167 | struct device; |
168 | struct signal_struct; | 168 | struct signal_struct; |
169 | |||
170 | /* | ||
171 | * Port level information. Each device keeps its own port level information | ||
172 | * so provide a common structure for those ports wanting to use common support | ||
173 | * routines. | ||
174 | * | ||
175 | * The tty port has a different lifetime to the tty so must be kept apart. | ||
176 | * In addition be careful as tty -> port mappings are valid for the life | ||
177 | * of the tty object but in many cases port -> tty mappings are valid only | ||
178 | * until a hangup so don't use the wrong path. | ||
179 | */ | ||
180 | |||
181 | struct tty_port { | ||
182 | struct tty_struct *tty; /* Back pointer */ | ||
183 | int blocked_open; /* Waiting to open */ | ||
184 | int count; /* Usage count */ | ||
185 | wait_queue_head_t open_wait; /* Open waiters */ | ||
186 | wait_queue_head_t close_wait; /* Close waiters */ | ||
187 | unsigned long flags; /* TTY flags ASY_*/ | ||
188 | struct mutex mutex; /* Locking */ | ||
189 | unsigned char *xmit_buf; /* Optional buffer */ | ||
190 | }; | ||
191 | |||
169 | /* | 192 | /* |
170 | * Where all of the state associated with a tty is kept while the tty | 193 | * Where all of the state associated with a tty is kept while the tty |
171 | * is open. Since the termios state should be kept even if the tty | 194 | * is open. Since the termios state should be kept even if the tty |
@@ -214,7 +237,7 @@ struct tty_struct { | |||
214 | struct list_head tty_files; | 237 | struct list_head tty_files; |
215 | 238 | ||
216 | #define N_TTY_BUF_SIZE 4096 | 239 | #define N_TTY_BUF_SIZE 4096 |
217 | 240 | ||
218 | /* | 241 | /* |
219 | * The following is data for the N_TTY line discipline. For | 242 | * The following is data for the N_TTY line discipline. For |
220 | * historical reasons, this is included in the tty structure. | 243 | * historical reasons, this is included in the tty structure. |
@@ -242,6 +265,7 @@ struct tty_struct { | |||
242 | spinlock_t read_lock; | 265 | spinlock_t read_lock; |
243 | /* If the tty has a pending do_SAK, queue it here - akpm */ | 266 | /* If the tty has a pending do_SAK, queue it here - akpm */ |
244 | struct work_struct SAK_work; | 267 | struct work_struct SAK_work; |
268 | struct tty_port *port; | ||
245 | }; | 269 | }; |
246 | 270 | ||
247 | /* tty magic number */ | 271 | /* tty magic number */ |
@@ -350,6 +374,10 @@ extern void tty_write_unlock(struct tty_struct *tty); | |||
350 | extern int tty_write_lock(struct tty_struct *tty, int ndelay); | 374 | extern int tty_write_lock(struct tty_struct *tty, int ndelay); |
351 | #define tty_is_writelocked(tty) (mutex_is_locked(&tty->atomic_write_lock)) | 375 | #define tty_is_writelocked(tty) (mutex_is_locked(&tty->atomic_write_lock)) |
352 | 376 | ||
377 | extern void tty_port_init(struct tty_port *port); | ||
378 | extern int tty_port_alloc_xmit_buf(struct tty_port *port); | ||
379 | extern void tty_port_free_xmit_buf(struct tty_port *port); | ||
380 | |||
353 | 381 | ||
354 | 382 | ||
355 | /* n_tty.c */ | 383 | /* n_tty.c */ |