5896l2

Listing 2.
	
#define TINY_TTY_MAJOR	240	/* experimental range */
#define TINY_TTY_MINORS	255	/* use the whole major up */
static int tty_refcount;
static struct tty_struct *tiny_tty[TINY_TTY_MINORS];
static struct termios *tiny_termios[TINY_TTY_MINORS];
static struct termios *tiny_termios_locked[TINY_TTY_MINORS];
	
static struct tty_driver tiny_tty_driver {
	magic:		TTY_DRIVER_MAGIC,
	driver_name:	"tiny_tty",
#ifdef CONFIG_DEVFS_FS
	name:		"tts/ttty%d",
#else
	name:		"ttty",
#endif
	major:		TINY_TTY_MAJOR,
	num:		TINY_TTY_MINORS,
	type:		TTY_DRIVER_TYPE_SERIAL,
	subtype:	SERIAL_TYPE_NORMAL,
	flags:		TTY_DRIVER_REAL_RAW | TTY_DRIVER_NO_DEVFS,

	refcount:	&tiny_refcount,
	table:		tiny_tty,
	termios:	tiny_termios,
	termios_locked:	tiny_termios_locked,

	open:		tiny_open,
	close:		tiny_close,
	write:		tiny_write,
	write_room:	tiny_write_room,
};

static int __init tiny_init (void)
{
	/* register the tty driver */
	tiny_tty_driver.init_termios = tty_std_termios;
	tiny_tty_driver.init_termios.c_cflag = B9600 | CS8 | CREAD | HUPCL | CLOCAL;
	if (tty_register_driver (&tiny_tty_driver)) {
		printk (KERN_ERR "failed to register tiny tty driver");
		return -1;
	return 0;
}

static void __exit tiny_exit (void)
{
	tty_unregister_driver (&tiny_tty_driver);
}

module_init (tiny_init);
module_exit (tiny_exit);
