X-Git-Url: http://git.onelab.eu/?a=blobdiff_plain;f=arch%2Fum%2Fdrivers%2Fssl.c;h=af687e29a41d273fb999e54629dc3b0d6d9532ee;hb=f1227cd3e0e73c48b93368800aa89f4341103a00;hp=b32a77010fbe5743aace38839dcf21f477c7da25;hpb=340e2b1a4c74f653454348914c408420d5d3c28a;p=linux-2.6.git diff --git a/arch/um/drivers/ssl.c b/arch/um/drivers/ssl.c index b32a77010..af687e29a 100644 --- a/arch/um/drivers/ssl.c +++ b/arch/um/drivers/ssl.c @@ -22,6 +22,7 @@ #include "init.h" #include "irq_user.h" #include "mconsole_kern.h" +#include "2_5compat.h" static int ssl_version = 1; @@ -53,7 +54,7 @@ static int ssl_remove(char *str); static struct line_driver driver = { .name = "UML serial line", - .device_name = "ttyS", + .device_name = "ttS", .devfs_name = "tts/", .major = TTY_MAJOR, .minor_start = 64, @@ -102,15 +103,68 @@ static int ssl_remove(char *str) int ssl_open(struct tty_struct *tty, struct file *filp) { - return line_open(serial_lines, tty, &opts); + 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, + const unsigned char *buf, int count) +{ + return(line_write(serial_lines, tty, buf, count)); +} + +static void ssl_put_char(struct tty_struct *tty, unsigned char ch) +{ + line_write(serial_lines, tty, &ch, sizeof(ch)); +} + +static void ssl_flush_chars(struct tty_struct *tty) +{ + return; +} + +static int ssl_chars_in_buffer(struct tty_struct *tty) +{ + return(0); } -#if 0 static void ssl_flush_buffer(struct tty_struct *tty) { 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"); @@ -121,6 +175,11 @@ static void ssl_unthrottle(struct tty_struct * tty) 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"); @@ -134,26 +193,23 @@ static void ssl_start(struct tty_struct *tty) void ssl_hangup(struct tty_struct *tty) { } -#endif static struct tty_operations ssl_ops = { .open = ssl_open, - .close = line_close, - .write = line_write, - .put_char = line_put_char, - .write_room = line_write_room, - .chars_in_buffer = line_chars_in_buffer, - .flush_buffer = line_flush_buffer, - .flush_chars = line_flush_chars, - .set_termios = line_set_termios, - .ioctl = line_ioctl, -#if 0 + .close = ssl_close, + .write = ssl_write, + .put_char = ssl_put_char, + .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, -#endif + .write_room = line_write_room, }; /* Changed by ssl_init and referenced by ssl_exit, which are both serialized @@ -165,11 +221,11 @@ static void ssl_console_write(struct console *c, const char *string, unsigned len) { struct line *line = &serial_lines[c->index]; - unsigned long flags; - - spin_lock_irqsave(&line->lock, flags); + if(ssl_init_done) + down(&line->sem); console_write_chan(&line->chan_list, string, len); - spin_unlock_irqrestore(&line->lock, flags); + if(ssl_init_done) + up(&line->sem); } static struct tty_driver *ssl_console_device(struct console *c, int *index) @@ -180,18 +236,16 @@ static struct tty_driver *ssl_console_device(struct console *c, int *index) static int ssl_console_setup(struct console *co, char *options) { - struct line *line = &serial_lines[co->index]; - - return console_open_chan(line,co,&opts); + return(0); } 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) @@ -200,29 +254,21 @@ 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, ARRAY_SIZE(serial_lines)); + serial_lines, sizeof(serial_lines)/sizeof(serial_lines[0])); 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; - ssl_init_done = 1; register_console(&ssl_cons); + ssl_init_done = 1; 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); +late_initcall(ssl_init); static int ssl_chan_setup(char *str) { @@ -233,3 +279,23 @@ static int ssl_chan_setup(char *str) __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 + * adjust the settings for this buffer only. This must remain at the end + * of the file. + * --------------------------------------------------------------------------- + * Local variables: + * c-file-style: "linux" + * End: + */