added a lot of printk output to ease writing of emulator
[linux-2.4.21-pre4.git] / include / linux / tty_driver.h
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
120 struct tty_driver {
121         int     magic;          /* magic number for this structure */
122         const char      *driver_name;
123         const char      *name;
124         int     name_base;      /* offset of printed name */
125         short   major;          /* major device number */
126         short   minor_start;    /* start of minor device number*/
127         short   num;            /* number of devices */
128         short   type;           /* type of tty driver */
129         short   subtype;        /* subtype of tty driver */
130         struct termios init_termios; /* Initial termios */
131         int     flags;          /* tty driver flags */
132         int     *refcount;      /* for loadable tty drivers */
133         struct proc_dir_entry *proc_entry; /* /proc fs entry */
134         struct tty_driver *other; /* only used for the PTY driver */
135
136         /*
137          * Pointer to the tty data structures
138          */
139         struct tty_struct **table;
140         struct termios **termios;
141         struct termios **termios_locked;
142         void *driver_state;     /* only used for the PTY driver */
143         
144         /*
145          * Interface routines from the upper tty layer to the tty
146          * driver.
147          */
148         int  (*open)(struct tty_struct * tty, struct file * filp);
149         void (*close)(struct tty_struct * tty, struct file * filp);
150         int  (*write)(struct tty_struct * tty, int from_user,
151                       const unsigned char *buf, int count);
152         void (*put_char)(struct tty_struct *tty, unsigned char ch);
153         void (*flush_chars)(struct tty_struct *tty);
154         int  (*write_room)(struct tty_struct *tty);
155         int  (*chars_in_buffer)(struct tty_struct *tty);
156         int  (*ioctl)(struct tty_struct *tty, struct file * file,
157                     unsigned int cmd, unsigned long arg);
158         void (*set_termios)(struct tty_struct *tty, struct termios * old);
159         void (*throttle)(struct tty_struct * tty);
160         void (*unthrottle)(struct tty_struct * tty);
161         void (*stop)(struct tty_struct *tty);
162         void (*start)(struct tty_struct *tty);
163         void (*hangup)(struct tty_struct *tty);
164         void (*break_ctl)(struct tty_struct *tty, int state);
165         void (*flush_buffer)(struct tty_struct *tty);
166         void (*set_ldisc)(struct tty_struct *tty);
167         void (*wait_until_sent)(struct tty_struct *tty, int timeout);
168         void (*send_xchar)(struct tty_struct *tty, char ch);
169         int (*read_proc)(char *page, char **start, off_t off,
170                           int count, int *eof, void *data);
171         int (*write_proc)(struct file *file, const char *buffer,
172                           unsigned long count, void *data);
173
174         /*
175          * linked list pointers
176          */
177         struct tty_driver *next;
178         struct tty_driver *prev;
179 };
180
181 /* tty driver magic number */
182 #define TTY_DRIVER_MAGIC                0x5402
183
184 /*
185  * tty driver flags
186  * 
187  * TTY_DRIVER_RESET_TERMIOS --- requests the tty layer to reset the
188  *      termios setting when the last process has closed the device.
189  *      Used for PTY's, in particular.
190  * 
191  * TTY_DRIVER_REAL_RAW --- if set, indicates that the driver will
192  *      guarantee never not to set any special character handling
193  *      flags if ((IGNBRK || (!BRKINT && !PARMRK)) && (IGNPAR ||
194  *      !INPCK)).  That is, if there is no reason for the driver to
195  *      send notifications of parity and break characters up to the
196  *      line driver, it won't do so.  This allows the line driver to
197  *      optimize for this case if this flag is set.  (Note that there
198  *      is also a promise, if the above case is true, not to signal
199  *      overruns, either.)
200  *
201  * TTY_DRIVER_NO_DEVFS --- if set, do not create devfs entries. This
202  *      is only used by tty_register_driver().
203  *
204  */
205 #define TTY_DRIVER_INSTALLED            0x0001
206 #define TTY_DRIVER_RESET_TERMIOS        0x0002
207 #define TTY_DRIVER_REAL_RAW             0x0004
208 #define TTY_DRIVER_NO_DEVFS             0x0008
209
210 /* tty driver types */
211 #define TTY_DRIVER_TYPE_SYSTEM          0x0001
212 #define TTY_DRIVER_TYPE_CONSOLE         0x0002
213 #define TTY_DRIVER_TYPE_SERIAL          0x0003
214 #define TTY_DRIVER_TYPE_PTY             0x0004
215 #define TTY_DRIVER_TYPE_SCC             0x0005  /* scc driver */
216 #define TTY_DRIVER_TYPE_SYSCONS         0x0006
217
218 /* system subtypes (magic, used by tty_io.c) */
219 #define SYSTEM_TYPE_TTY                 0x0001
220 #define SYSTEM_TYPE_CONSOLE             0x0002
221 #define SYSTEM_TYPE_SYSCONS             0x0003
222 #define SYSTEM_TYPE_SYSPTMX             0x0004
223
224 /* pty subtypes (magic, used by tty_io.c) */
225 #define PTY_TYPE_MASTER                 0x0001
226 #define PTY_TYPE_SLAVE                  0x0002
227
228 /* serial subtype definitions */
229 #define SERIAL_TYPE_NORMAL      1
230 #define SERIAL_TYPE_CALLOUT     2
231
232 #endif /* #ifdef _LINUX_TTY_DRIVER_H */