static struct line_driver driver = {
.name = "UML serial line",
- .device_name = "ttS",
+ .device_name = "ttyS",
.devfs_name = "tts/",
.major = TTY_MAJOR,
.minor_start = 64,
int ssl_open(struct tty_struct *tty, struct file *filp)
{
- return(line_open(serial_lines, tty, &opts));
-}
-
-static void ssl_close(struct tty_struct *tty, struct file * filp)
-{
- line_close(serial_lines, tty);
-}
-
-static int ssl_write(struct tty_struct * tty, int from_user,
- const unsigned char *buf, int count)
-{
- return(line_write(serial_lines, tty, from_user, buf, count));
-}
-
-static void ssl_put_char(struct tty_struct *tty, unsigned char ch)
-{
- line_write(serial_lines, tty, 0, &ch, sizeof(ch));
-}
-
-static void ssl_flush_chars(struct tty_struct *tty)
-{
- return;
+ return line_open(serial_lines, tty, &opts);
}
+#if 0
static int ssl_chars_in_buffer(struct tty_struct *tty)
{
return(0);
return;
}
-static int ssl_ioctl(struct tty_struct *tty, struct file * file,
- unsigned int cmd, unsigned long arg)
-{
- int ret;
-
- ret = 0;
- switch(cmd){
- case TCGETS:
- case TCSETS:
- case TCFLSH:
- case TCSETSF:
- case TCSETSW:
- case TCGETA:
- case TIOCMGET:
- case TCSBRK:
- case TCSBRKP:
- case TIOCMSET:
- ret = -ENOIOCTLCMD;
- break;
- default:
- printk(KERN_ERR
- "Unimplemented ioctl in ssl_ioctl : 0x%x\n", cmd);
- ret = -ENOIOCTLCMD;
- break;
- }
- return(ret);
-}
-
static void ssl_throttle(struct tty_struct * tty)
{
printk(KERN_ERR "Someone should implement ssl_throttle\n");
printk(KERN_ERR "Someone should implement ssl_unthrottle\n");
}
-static void ssl_set_termios(struct tty_struct *tty,
- struct termios *old_termios)
-{
-}
-
static void ssl_stop(struct tty_struct *tty)
{
printk(KERN_ERR "Someone should implement ssl_stop\n");
void ssl_hangup(struct tty_struct *tty)
{
}
+#endif
static struct tty_operations ssl_ops = {
.open = ssl_open,
- .close = ssl_close,
- .write = ssl_write,
- .put_char = ssl_put_char,
+ .close = line_close,
+ .write = line_write,
+ .put_char = line_put_char,
+ .write_room = line_write_room,
+ .chars_in_buffer = line_chars_in_buffer,
+ .set_termios = line_set_termios,
+ .ioctl = line_ioctl,
+#if 0
.flush_chars = ssl_flush_chars,
- .chars_in_buffer = ssl_chars_in_buffer,
.flush_buffer = ssl_flush_buffer,
- .ioctl = ssl_ioctl,
.throttle = ssl_throttle,
.unthrottle = ssl_unthrottle,
- .set_termios = ssl_set_termios,
.stop = ssl_stop,
.start = ssl_start,
.hangup = ssl_hangup,
- .write_room = line_write_room,
+#endif
};
/* Changed by ssl_init and referenced by ssl_exit, which are both serialized
unsigned len)
{
struct line *line = &serial_lines[c->index];
- if(ssl_init_done)
- down(&line->sem);
+
+ down(&line->sem);
console_write_chan(&line->chan_list, string, len);
- if(ssl_init_done)
- up(&line->sem);
+ up(&line->sem);
}
static struct tty_driver *ssl_console_device(struct console *c, int *index)
static int ssl_console_setup(struct console *co, char *options)
{
- return(0);
+ struct line *line = &serial_lines[co->index];
+
+ return console_open_chan(line,co,&opts);
}
static struct console ssl_cons = {
- name: "ttyS",
- write: ssl_console_write,
- device: ssl_console_device,
- setup: ssl_console_setup,
- flags: CON_PRINTBUFFER,
- index: -1,
+ .name = "ttyS",
+ .write = ssl_console_write,
+ .device = ssl_console_device,
+ .setup = ssl_console_setup,
+ .flags = CON_PRINTBUFFER,
+ .index = -1,
};
int ssl_init(void)
printk(KERN_INFO "Initializing software serial port version %d\n",
ssl_version);
-
ssl_driver = line_register_devfs(&lines, &driver, &ssl_ops,
- serial_lines, sizeof(serial_lines)/sizeof(serial_lines[0]));
+ serial_lines, ARRAY_SIZE(serial_lines));
lines_init(serial_lines, sizeof(serial_lines)/sizeof(serial_lines[0]));
new_title = add_xterm_umid(opts.xterm_title);
- if(new_title != NULL) opts.xterm_title = new_title;
+ if (new_title != NULL)
+ opts.xterm_title = new_title;
- register_console(&ssl_cons);
ssl_init_done = 1;
+ register_console(&ssl_cons);
return(0);
}
-
late_initcall(ssl_init);
+static void ssl_exit(void)
+{
+ if (!ssl_init_done)
+ return;
+ close_lines(serial_lines,
+ sizeof(serial_lines)/sizeof(serial_lines[0]));
+}
+__uml_exitcall(ssl_exit);
+
static int ssl_chan_setup(char *str)
{
return(line_setup(serial_lines,
__setup("ssl", ssl_chan_setup);
__channel_help(ssl_chan_setup, "ssl");
-static void ssl_exit(void)
-{
- if(!ssl_init_done) return;
- close_lines(serial_lines,
- sizeof(serial_lines)/sizeof(serial_lines[0]));
-}
-
-__uml_exitcall(ssl_exit);
-
/*
* Overrides for Emacs so that we follow Linus's tabbing style.
* Emacs will notice this stuff at the end of the file and automatically