Merge git://git.kernel.org/pub/scm/linux/kernel/git/lethal/sh-2.6
[sfrench/cifs-2.6.git] / drivers / char / hvc_rtas.c
index 83364ea63cba7b23c71b9cc44bfdd922e47c7eff..88590d040046decb71f76629c3aa52fd0383817b 100644 (file)
 #define hvc_rtas_cookie 0x67781e15
 struct hvc_struct *hvc_rtas_dev;
 
-#define RTASCONS_PUT_ATTEMPTS  16
-
 static int rtascons_put_char_token = RTAS_UNKNOWN_SERVICE;
 static int rtascons_get_char_token = RTAS_UNKNOWN_SERVICE;
-static int rtascons_put_delay = 100;
-module_param_named(put_delay, rtascons_put_delay, int, 0644);
 
-static inline int hvc_rtas_write_console(uint32_t vtermno, const char *buf, int count)
+static inline int hvc_rtas_write_console(uint32_t vtermno, const char *buf,
+               int count)
 {
-       int done;
+       int i;
 
-       /* if there is more than one character to be displayed, wait a bit */
-       for (done = 0; done < count; done++) {
-               int result;
-               result = rtas_call(rtascons_put_char_token, 1, 1, NULL, buf[done]);
-               if (result)
+       for (i = 0; i < count; i++) {
+               if (rtas_call(rtascons_put_char_token, 1, 1, NULL, buf[i]))
                        break;
        }
-       /* the calling routine expects to receive the number of bytes sent */
-       return done;
+
+       return i;
 }
 
 static int hvc_rtas_read_console(uint32_t vtermno, char *buf, int count)
 {
-       int i;
+       int i, c;
 
        for (i = 0; i < count; i++) {
-               int c, err;
-
-               err = rtas_call(rtascons_get_char_token, 0, 2, &c);
-               if (err)
+               if (rtas_call(rtascons_get_char_token, 0, 2, &c))
                        break;
 
                buf[i] = c;
@@ -85,7 +76,7 @@ static struct hv_ops hvc_rtas_get_put_ops = {
        .put_chars = hvc_rtas_write_console,
 };
 
-static int hvc_rtas_init(void)
+static int __init hvc_rtas_init(void)
 {
        struct hvc_struct *hp;
 
@@ -103,10 +94,12 @@ static int hvc_rtas_init(void)
 
        /* Allocate an hvc_struct for the console device we instantiated
         * earlier.  Save off hp so that we can return it on exit */
-       hp = hvc_alloc(hvc_rtas_cookie, NO_IRQ, &hvc_rtas_get_put_ops);
+       hp = hvc_alloc(hvc_rtas_cookie, NO_IRQ, &hvc_rtas_get_put_ops, 16);
        if (IS_ERR(hp))
                return PTR_ERR(hp);
+
        hvc_rtas_dev = hp;
+
        return 0;
 }
 module_init(hvc_rtas_init);
@@ -114,25 +107,27 @@ module_init(hvc_rtas_init);
 /* This will tear down the tty portion of the driver */
 static void __exit hvc_rtas_exit(void)
 {
-       /* Really the fun isn't over until the worker thread breaks down and the
-        * tty cleans up */
+       /* Really the fun isn't over until the worker thread breaks down and
+        * the tty cleans up */
        if (hvc_rtas_dev)
                hvc_remove(hvc_rtas_dev);
 }
 module_exit(hvc_rtas_exit);
 
 /* This will happen prior to module init.  There is no tty at this time? */
-static int hvc_rtas_console_init(void)
+static int __init hvc_rtas_console_init(void)
 {
        rtascons_put_char_token = rtas_token("put-term-char");
        if (rtascons_put_char_token == RTAS_UNKNOWN_SERVICE)
                return -EIO;
+
        rtascons_get_char_token = rtas_token("get-term-char");
        if (rtascons_get_char_token == RTAS_UNKNOWN_SERVICE)
                return -EIO;
 
-       hvc_instantiate(hvc_rtas_cookie, 0, &hvc_rtas_get_put_ops );
+       hvc_instantiate(hvc_rtas_cookie, 0, &hvc_rtas_get_put_ops);
        add_preferred_console("hvc", 0, NULL);
+
        return 0;
 }
 console_initcall(hvc_rtas_console_init);