tty: Introduce a tty_port common structure
[linux-2.6-block.git] / include / linux / tty.h
index 013711ea7385fa09f4b53ed338a2e2463a47eb8e..d7c695b65c0e7a4be44b26977963dc1332193b5a 100644 (file)
@@ -166,6 +166,29 @@ struct tty_bufhead {
 
 struct device;
 struct signal_struct;
+
+/*
+ * Port level information. Each device keeps its own port level information
+ * so provide a common structure for those ports wanting to use common support
+ * routines.
+ *
+ * The tty port has a different lifetime to the tty so must be kept apart.
+ * In addition be careful as tty -> port mappings are valid for the life
+ * of the tty object but in many cases port -> tty mappings are valid only
+ * until a hangup so don't use the wrong path.
+ */
+struct tty_port {
+       struct tty_struct       *tty;           /* Back pointer */
+       int                     blocked_open;   /* Waiting to open */
+       int                     count;          /* Usage count */
+       wait_queue_head_t       open_wait;      /* Open waiters */
+       wait_queue_head_t       close_wait;     /* Close waiters */
+       unsigned long           flags;          /* TTY flags ASY_*/
+       struct mutex            mutex;          /* Locking */
+       unsigned char           *xmit_buf;      /* Optional buffer */
+};
+
 /*
  * Where all of the state associated with a tty is kept while the tty
  * is open.  Since the termios state should be kept even if the tty
@@ -214,7 +237,7 @@ struct tty_struct {
        struct list_head tty_files;
 
 #define N_TTY_BUF_SIZE 4096
-       
+
        /*
         * The following is data for the N_TTY line discipline.  For
         * historical reasons, this is included in the tty structure.
@@ -242,6 +265,7 @@ struct tty_struct {
        spinlock_t read_lock;
        /* If the tty has a pending do_SAK, queue it here - akpm */
        struct work_struct SAK_work;
+       struct tty_port *port;
 };
 
 /* tty magic number */
@@ -350,6 +374,10 @@ extern void tty_write_unlock(struct tty_struct *tty);
 extern int tty_write_lock(struct tty_struct *tty, int ndelay);
 #define tty_is_writelocked(tty)  (mutex_is_locked(&tty->atomic_write_lock))
 
+extern void tty_port_init(struct tty_port *port);
+extern int tty_port_alloc_xmit_buf(struct tty_port *port);
+extern void tty_port_free_xmit_buf(struct tty_port *port);
+
 
 
 /* n_tty.c */