diff options
Diffstat (limited to 'drivers/char')
-rw-r--r-- | drivers/char/hvc_console.c | 4 | ||||
-rw-r--r-- | drivers/char/hvc_rtas.c | 37 | ||||
-rw-r--r-- | drivers/char/hvsi.c | 2 | ||||
-rw-r--r-- | drivers/char/viotape.c | 2 |
4 files changed, 20 insertions, 25 deletions
diff --git a/drivers/char/hvc_console.c b/drivers/char/hvc_console.c index 2b6a56b2bf35..a5c6a9d7ff08 100644 --- a/drivers/char/hvc_console.c +++ b/drivers/char/hvc_console.c | |||
@@ -553,7 +553,6 @@ static int hvc_chars_in_buffer(struct tty_struct *tty) | |||
553 | 553 | ||
554 | #define HVC_POLL_READ 0x00000001 | 554 | #define HVC_POLL_READ 0x00000001 |
555 | #define HVC_POLL_WRITE 0x00000002 | 555 | #define HVC_POLL_WRITE 0x00000002 |
556 | #define HVC_POLL_QUICK 0x00000004 | ||
557 | 556 | ||
558 | static int hvc_poll(struct hvc_struct *hp) | 557 | static int hvc_poll(struct hvc_struct *hp) |
559 | { | 558 | { |
@@ -568,6 +567,7 @@ static int hvc_poll(struct hvc_struct *hp) | |||
568 | /* Push pending writes */ | 567 | /* Push pending writes */ |
569 | if (hp->n_outbuf > 0) | 568 | if (hp->n_outbuf > 0) |
570 | hvc_push(hp); | 569 | hvc_push(hp); |
570 | |||
571 | /* Reschedule us if still some write pending */ | 571 | /* Reschedule us if still some write pending */ |
572 | if (hp->n_outbuf > 0) | 572 | if (hp->n_outbuf > 0) |
573 | poll_mask |= HVC_POLL_WRITE; | 573 | poll_mask |= HVC_POLL_WRITE; |
@@ -680,7 +680,7 @@ int khvcd(void *unused) | |||
680 | poll_mask |= HVC_POLL_READ; | 680 | poll_mask |= HVC_POLL_READ; |
681 | if (hvc_kicked) | 681 | if (hvc_kicked) |
682 | continue; | 682 | continue; |
683 | if (poll_mask & HVC_POLL_QUICK) { | 683 | if (poll_mask & HVC_POLL_WRITE) { |
684 | yield(); | 684 | yield(); |
685 | continue; | 685 | continue; |
686 | } | 686 | } |
diff --git a/drivers/char/hvc_rtas.c b/drivers/char/hvc_rtas.c index 83364ea63cba..57106e02fd2e 100644 --- a/drivers/char/hvc_rtas.c +++ b/drivers/char/hvc_rtas.c | |||
@@ -41,37 +41,28 @@ | |||
41 | #define hvc_rtas_cookie 0x67781e15 | 41 | #define hvc_rtas_cookie 0x67781e15 |
42 | struct hvc_struct *hvc_rtas_dev; | 42 | struct hvc_struct *hvc_rtas_dev; |
43 | 43 | ||
44 | #define RTASCONS_PUT_ATTEMPTS 16 | ||
45 | |||
46 | static int rtascons_put_char_token = RTAS_UNKNOWN_SERVICE; | 44 | static int rtascons_put_char_token = RTAS_UNKNOWN_SERVICE; |
47 | static int rtascons_get_char_token = RTAS_UNKNOWN_SERVICE; | 45 | static int rtascons_get_char_token = RTAS_UNKNOWN_SERVICE; |
48 | static int rtascons_put_delay = 100; | ||
49 | module_param_named(put_delay, rtascons_put_delay, int, 0644); | ||
50 | 46 | ||
51 | static inline int hvc_rtas_write_console(uint32_t vtermno, const char *buf, int count) | 47 | static inline int hvc_rtas_write_console(uint32_t vtermno, const char *buf, |
48 | int count) | ||
52 | { | 49 | { |
53 | int done; | 50 | int i; |
54 | 51 | ||
55 | /* if there is more than one character to be displayed, wait a bit */ | 52 | for (i = 0; i < count; i++) { |
56 | for (done = 0; done < count; done++) { | 53 | if (rtas_call(rtascons_put_char_token, 1, 1, NULL, buf[i])) |
57 | int result; | ||
58 | result = rtas_call(rtascons_put_char_token, 1, 1, NULL, buf[done]); | ||
59 | if (result) | ||
60 | break; | 54 | break; |
61 | } | 55 | } |
62 | /* the calling routine expects to receive the number of bytes sent */ | 56 | |
63 | return done; | 57 | return i; |
64 | } | 58 | } |
65 | 59 | ||
66 | static int hvc_rtas_read_console(uint32_t vtermno, char *buf, int count) | 60 | static int hvc_rtas_read_console(uint32_t vtermno, char *buf, int count) |
67 | { | 61 | { |
68 | int i; | 62 | int i, c; |
69 | 63 | ||
70 | for (i = 0; i < count; i++) { | 64 | for (i = 0; i < count; i++) { |
71 | int c, err; | 65 | if (rtas_call(rtascons_get_char_token, 0, 2, &c)) |
72 | |||
73 | err = rtas_call(rtascons_get_char_token, 0, 2, &c); | ||
74 | if (err) | ||
75 | break; | 66 | break; |
76 | 67 | ||
77 | buf[i] = c; | 68 | buf[i] = c; |
@@ -106,7 +97,9 @@ static int hvc_rtas_init(void) | |||
106 | hp = hvc_alloc(hvc_rtas_cookie, NO_IRQ, &hvc_rtas_get_put_ops); | 97 | hp = hvc_alloc(hvc_rtas_cookie, NO_IRQ, &hvc_rtas_get_put_ops); |
107 | if (IS_ERR(hp)) | 98 | if (IS_ERR(hp)) |
108 | return PTR_ERR(hp); | 99 | return PTR_ERR(hp); |
100 | |||
109 | hvc_rtas_dev = hp; | 101 | hvc_rtas_dev = hp; |
102 | |||
110 | return 0; | 103 | return 0; |
111 | } | 104 | } |
112 | module_init(hvc_rtas_init); | 105 | module_init(hvc_rtas_init); |
@@ -114,8 +107,8 @@ module_init(hvc_rtas_init); | |||
114 | /* This will tear down the tty portion of the driver */ | 107 | /* This will tear down the tty portion of the driver */ |
115 | static void __exit hvc_rtas_exit(void) | 108 | static void __exit hvc_rtas_exit(void) |
116 | { | 109 | { |
117 | /* Really the fun isn't over until the worker thread breaks down and the | 110 | /* Really the fun isn't over until the worker thread breaks down and |
118 | * tty cleans up */ | 111 | * the tty cleans up */ |
119 | if (hvc_rtas_dev) | 112 | if (hvc_rtas_dev) |
120 | hvc_remove(hvc_rtas_dev); | 113 | hvc_remove(hvc_rtas_dev); |
121 | } | 114 | } |
@@ -127,12 +120,14 @@ static int hvc_rtas_console_init(void) | |||
127 | rtascons_put_char_token = rtas_token("put-term-char"); | 120 | rtascons_put_char_token = rtas_token("put-term-char"); |
128 | if (rtascons_put_char_token == RTAS_UNKNOWN_SERVICE) | 121 | if (rtascons_put_char_token == RTAS_UNKNOWN_SERVICE) |
129 | return -EIO; | 122 | return -EIO; |
123 | |||
130 | rtascons_get_char_token = rtas_token("get-term-char"); | 124 | rtascons_get_char_token = rtas_token("get-term-char"); |
131 | if (rtascons_get_char_token == RTAS_UNKNOWN_SERVICE) | 125 | if (rtascons_get_char_token == RTAS_UNKNOWN_SERVICE) |
132 | return -EIO; | 126 | return -EIO; |
133 | 127 | ||
134 | hvc_instantiate(hvc_rtas_cookie, 0, &hvc_rtas_get_put_ops ); | 128 | hvc_instantiate(hvc_rtas_cookie, 0, &hvc_rtas_get_put_ops); |
135 | add_preferred_console("hvc", 0, NULL); | 129 | add_preferred_console("hvc", 0, NULL); |
130 | |||
136 | return 0; | 131 | return 0; |
137 | } | 132 | } |
138 | console_initcall(hvc_rtas_console_init); | 133 | console_initcall(hvc_rtas_console_init); |
diff --git a/drivers/char/hvsi.c b/drivers/char/hvsi.c index a9522189fc9e..a0370ed752ce 100644 --- a/drivers/char/hvsi.c +++ b/drivers/char/hvsi.c | |||
@@ -1179,7 +1179,7 @@ static int __init hvsi_init(void) | |||
1179 | if (tty_register_driver(hvsi_driver)) | 1179 | if (tty_register_driver(hvsi_driver)) |
1180 | panic("Couldn't register hvsi console driver\n"); | 1180 | panic("Couldn't register hvsi console driver\n"); |
1181 | 1181 | ||
1182 | printk(KERN_INFO "HVSI: registered %i devices\n", hvsi_count); | 1182 | printk(KERN_DEBUG "HVSI: registered %i devices\n", hvsi_count); |
1183 | 1183 | ||
1184 | return 0; | 1184 | return 0; |
1185 | } | 1185 | } |
diff --git a/drivers/char/viotape.c b/drivers/char/viotape.c index 60aabdb4a046..11c7e9de5958 100644 --- a/drivers/char/viotape.c +++ b/drivers/char/viotape.c | |||
@@ -989,7 +989,7 @@ static int viotape_remove(struct vio_dev *vdev) | |||
989 | * support. | 989 | * support. |
990 | */ | 990 | */ |
991 | static struct vio_device_id viotape_device_table[] __devinitdata = { | 991 | static struct vio_device_id viotape_device_table[] __devinitdata = { |
992 | { "viotape", "" }, | 992 | { "byte", "IBM,iSeries-viotape" }, |
993 | { "", "" } | 993 | { "", "" } |
994 | }; | 994 | }; |
995 | MODULE_DEVICE_TABLE(vio, viotape_device_table); | 995 | MODULE_DEVICE_TABLE(vio, viotape_device_table); |