From 4a3ca6f6d636d8730f73e739d1c8cee537ab44df Mon Sep 17 00:00:00 2001 From: Milton Miller Date: Thu, 7 Jul 2005 17:56:26 -0700 Subject: [PATCH] --- yaml --- r: 4233 b: refs/heads/master c: 70b234a40107596a713e9981c643f2717e31463f h: refs/heads/master i: 4231: 10fcd25bfea481445ad4d837fd16024e13e16406 v: v3 --- [refs] | 2 +- trunk/arch/ppc64/kernel/hvconsole.c | 19 ++----------------- trunk/drivers/char/hvc_vio.c | 24 +++++++++++++++++++++++- 3 files changed, 26 insertions(+), 19 deletions(-) diff --git a/[refs] b/[refs] index 59e883c6d846..b39c4ab5dc11 100644 --- a/[refs] +++ b/[refs] @@ -1,2 +1,2 @@ --- -refs/heads/master: 030ffad23fb28fc29608a3bc21f0c3b88bf28592 +refs/heads/master: 70b234a40107596a713e9981c643f2717e31463f diff --git a/trunk/arch/ppc64/kernel/hvconsole.c b/trunk/arch/ppc64/kernel/hvconsole.c index 9d8876d92eb9..138e128a3886 100644 --- a/trunk/arch/ppc64/kernel/hvconsole.c +++ b/trunk/arch/ppc64/kernel/hvconsole.c @@ -41,29 +41,14 @@ int hvc_get_chars(uint32_t vtermno, char *buf, int count) unsigned long got; if (plpar_hcall(H_GET_TERM_CHAR, vtermno, 0, 0, 0, &got, - (unsigned long *)buf, (unsigned long *)buf+1) == H_Success) { - /* - * Work around a HV bug where it gives us a null - * after every \r. -- paulus - */ - if (got > 0) { - int i; - for (i = 1; i < got; ++i) { - if (buf[i] == 0 && buf[i-1] == '\r') { - --got; - if (i < got) - memmove(&buf[i], &buf[i+1], - got - i); - } - } - } + (unsigned long *)buf, (unsigned long *)buf+1) == H_Success) return got; - } return 0; } EXPORT_SYMBOL(hvc_get_chars); + /** * hvc_put_chars: send characters to firmware for denoted vterm adapter * @vtermno: The vtermno or unit_address of the adapter from which the data diff --git a/trunk/drivers/char/hvc_vio.c b/trunk/drivers/char/hvc_vio.c index 430a2c284ad2..60bb9152b832 100644 --- a/trunk/drivers/char/hvc_vio.c +++ b/trunk/drivers/char/hvc_vio.c @@ -43,8 +43,30 @@ static struct vio_device_id hvc_driver_table[] __devinitdata = { }; MODULE_DEVICE_TABLE(vio, hvc_driver_table); +static int filtered_get_chars(uint32_t vtermno, char *buf, int count) +{ + unsigned long got; + int i; + + got = hvc_get_chars(vtermno, buf, count); + + /* + * Work around a HV bug where it gives us a null + * after every \r. -- paulus + */ + for (i = 1; i < got; ++i) { + if (buf[i] == 0 && buf[i-1] == '\r') { + --got; + if (i < got) + memmove(&buf[i], &buf[i+1], + got - i); + } + } + return got; +} + static struct hv_ops hvc_get_put_ops = { - .get_chars = hvc_get_chars, + .get_chars = filtered_get_chars, .put_chars = hvc_put_chars, };