From: James S. <jsi...@us...> - 2001-12-23 00:04:21
|
Update of /cvsroot/linuxconsole/ruby/linux/drivers/char In directory usw-pr-cvs1:/tmp/cvs-serv17799/drivers/char Modified Files: keyboard.c vt.c Log Message: multihead support is back. Index: keyboard.c =================================================================== RCS file: /cvsroot/linuxconsole/ruby/linux/drivers/char/keyboard.c,v retrieving revision 1.61 retrieving revision 1.62 diff -u -d -r1.61 -r1.62 --- keyboard.c 2001/10/06 16:11:13 1.61 +++ keyboard.c 2001/12/23 00:04:18 1.62 @@ -1078,6 +1078,7 @@ if (!vt->keyboard) { vt->keyboard = handle; handle->private = vt; + vt_map_input(vt); break; } else vt = vt->next; Index: vt.c =================================================================== RCS file: /cvsroot/linuxconsole/ruby/linux/drivers/char/vt.c,v retrieving revision 1.115 retrieving revision 1.116 diff -u -d -r1.115 -r1.116 --- vt.c 2001/12/09 01:43:35 1.115 +++ vt.c 2001/12/23 00:04:18 1.116 @@ -1497,9 +1497,9 @@ } /* - * Mapping and unmapping VT display + * Mapping and unmapping devices to a VT */ -const char *create_vt(struct vt_struct *vt, int init) +const char *vt_map_display(struct vt_struct *vt, int init) { const char *display_desc = vt->vt_sw->con_startup(vt, init); @@ -1543,6 +1543,50 @@ return display_desc; } +/* + * This is called when we have detected a keyboard and have a VT lacking one + */ +void vt_map_input(struct vt_struct *vt) +{ + struct tty_driver *vty_driver; + + vty_driver = kmalloc(sizeof(struct tty_driver), GFP_KERNEL); + memset(vty_driver, 0, sizeof(struct tty_driver)); + + vty_driver->refcount = kmalloc(sizeof(int), GFP_KERNEL); + vty_driver->table = kmalloc(sizeof(struct tty_struct) * MAX_NR_USER_CONSOLES, GFP_KERNEL); + vty_driver->termios = kmalloc(sizeof(struct termios) * MAX_NR_USER_CONSOLES, GFP_KERNEL); + vty_driver->termios_locked = kmalloc(sizeof(struct termios) * MAX_NR_USER_CONSOLES, GFP_KERNEL); + + vty_driver->magic = TTY_DRIVER_MAGIC; + vty_driver->name = "vc/%d"; + vty_driver->name_base = vt->first_vc; + vty_driver->major = TTY_MAJOR; + vty_driver->minor_start = vt->first_vc; + vty_driver->num = MAX_NR_USER_CONSOLES; + vty_driver->type = TTY_DRIVER_TYPE_CONSOLE; + vty_driver->init_termios = tty_std_termios; + vty_driver->flags = TTY_DRIVER_REAL_RAW | TTY_DRIVER_RESET_TERMIOS; +#ifdef CONFIG_VT_CONSOLE + if (admin_vt == vt) + vty_driver->console = &vt_console_driver; +#endif + vty_driver->open = vt_open; + vty_driver->close = vt_close; + vty_driver->write = vt_write; + vty_driver->write_room = vt_write_room; + vty_driver->put_char = vt_put_char; + vty_driver->flush_chars = vt_flush_chars; + vty_driver->chars_in_buffer = vt_chars_in_buffer; + vty_driver->ioctl = vt_ioctl; + vty_driver->stop = vt_stop; + vty_driver->start = vt_start; + vty_driver->throttle = vt_throttle; + vty_driver->unthrottle = vt_unthrottle; + if (tty_register_driver(vty_driver)) + printk("Couldn't register console driver\n"); +} + int release_vt(struct vt_struct *vt) { return 0; @@ -1565,8 +1609,6 @@ int __init vty_init(void) { - struct tty_driver *vty_driver; - #if defined (CONFIG_PROM_CONSOLE) prom_con_init(); #endif @@ -1575,41 +1617,6 @@ #endif kbd_init(); console_map_init(); - - vty_driver = kmalloc(sizeof(struct tty_driver), GFP_KERNEL); - memset(vty_driver, 0, sizeof(struct tty_driver)); - - vty_driver->refcount = kmalloc(sizeof(int), GFP_KERNEL); - vty_driver->table = kmalloc(sizeof(struct tty_struct) * MAX_NR_USER_CONSOLES, GFP_KERNEL); - vty_driver->termios = kmalloc(sizeof(struct termios) * MAX_NR_USER_CONSOLES, GFP_KERNEL); - vty_driver->termios_locked = kmalloc(sizeof(struct termios) * MAX_NR_USER_CONSOLES, GFP_KERNEL); - - vty_driver->magic = TTY_DRIVER_MAGIC; - vty_driver->name = "vc/%d"; - vty_driver->name_base = 0; //current_vc; - vty_driver->major = TTY_MAJOR; - vty_driver->minor_start = 0; //current_vc; - vty_driver->num = MAX_NR_USER_CONSOLES; - vty_driver->type = TTY_DRIVER_TYPE_CONSOLE; - vty_driver->init_termios = tty_std_termios; - vty_driver->flags = TTY_DRIVER_REAL_RAW | TTY_DRIVER_RESET_TERMIOS; -#ifdef CONFIG_VT_CONSOLE - vty_driver->console = &vt_console_driver; -#endif - vty_driver->open = vt_open; - vty_driver->close = vt_close; - vty_driver->write = vt_write; - vty_driver->write_room = vt_write_room; - vty_driver->put_char = vt_put_char; - vty_driver->flush_chars = vt_flush_chars; - vty_driver->chars_in_buffer = vt_chars_in_buffer; - vty_driver->ioctl = vt_ioctl; - vty_driver->stop = vt_stop; - vty_driver->start = vt_start; - vty_driver->throttle = vt_throttle; - vty_driver->unthrottle = vt_unthrottle; - if (tty_register_driver(vty_driver)) - printk("Couldn't register console driver\n"); vcs_init(); return 0; } @@ -1689,7 +1696,7 @@ EXPORT_SYMBOL(default_red); EXPORT_SYMBOL(default_grn); EXPORT_SYMBOL(default_blu); -EXPORT_SYMBOL(create_vt); +EXPORT_SYMBOL(vt_map_display); EXPORT_SYMBOL(release_vt); EXPORT_SYMBOL(vc_resize); EXPORT_SYMBOL(vc_init); |