5896l1

Listing 1. The struct tty_driver

struct tty_driver {
	int		magic;		/* magic number for this structure */
	const char	*driver_name;
	const char	*name;
	int		name_base;	/* offset of printed name */
	short		major;		/* major device number */
	short		minor_start;	/* start of minor device number*/
	short		num;		/* number of devices */
	short		type;		/* type of tty driver */
	short		subtype;	/* subtype of tty driver */
	struct termios	init_termios;	/* Initial termios */
	int		flags;		/* tty driver flags */
	int		*refcount;	/* for loadable tty drivers */
	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 **table;
	struct termios **termios;
	struct termios **termios_locked;
	void *driver_state;	/* only used for the PTY driver */
	
	/*
         * Interface routines from the upper tty layer to the tty
         * driver.
         */
	int  (*open)(struct tty_struct * tty, struct file * filp);
	void (*close)(struct tty_struct * tty, struct file * filp);
	int  (*write)(struct tty_struct * tty, int from_user,
                      const unsigned char *buf, int count);
	void (*put_char)(struct tty_struct *tty, unsigned char ch);
	void (*flush_chars)(struct tty_struct *tty);
	int  (*write_room)(struct tty_struct *tty);
	int  (*chars_in_buffer)(struct tty_struct *tty);
	int  (*ioctl)(struct tty_struct *tty, struct file * file,
                      unsigned int cmd, unsigned long arg);
	void (*set_termios)(struct tty_struct *tty, struct termios * old);
	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);
	void (*break_ctl)(struct tty_struct *tty, int state);
	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);
	int  (*read_proc)(char *page, char **start, off_t off,
                          int count, int *eof, void *data);
	int  (*write_proc)(struct file *file, const char *buffer,
                           unsigned long count, void *data);

	/*
         * linked list pointers
         */
	struct tty_driver *next;
	struct tty_driver *prev;
};
