summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--drivers/s390/char/con3270.c31
1 files changed, 8 insertions, 23 deletions
diff --git a/drivers/s390/char/con3270.c b/drivers/s390/char/con3270.c
index 6d21e16a92cb..2d867f6f0b76 100644
--- a/drivers/s390/char/con3270.c
+++ b/drivers/s390/char/con3270.c
@@ -281,20 +281,6 @@ static int tty3270_add_status(struct tty3270 *tp)
return cp - (char *)tp->converted_line;
}
-/*
- * Set output offsets to 3270 datastream fragment of a tty string.
- * (TO_SBA offset at the start and TO_RA offset at the end of the string)
- */
-static void tty3270_update_string(struct tty3270 *tp, char *line, int len, int nr)
-{
- unsigned char *cp;
-
- raw3270_buffer_address(tp->view.dev, line + 1, 0, nr);
- cp = line + len - 4;
- if (*cp == TO_RA)
- raw3270_buffer_address(tp->view.dev, cp + 1, 0, nr + 1);
-}
-
static void tty3270_blank_screen(struct tty3270 *tp)
{
struct tty3270_line *line;
@@ -364,7 +350,7 @@ static int tty3270_required_length(struct tty3270 *tp, struct tty3270_line *line
}
static char *tty3270_add_reset_attributes(struct tty3270 *tp, struct tty3270_line *line,
- char *cp, struct tty3270_attribute *attr)
+ char *cp, struct tty3270_attribute *attr, int lineno)
{
if (attr->highlight)
cp = tty3270_add_sa(tp, cp, TAT_EXTHI, TAX_RESET);
@@ -373,7 +359,7 @@ static char *tty3270_add_reset_attributes(struct tty3270 *tp, struct tty3270_lin
if (attr->b_color != TAC_RESET)
cp = tty3270_add_sa(tp, cp, TAT_BGCOLOR, TAX_RESET);
if (line->len < tp->view.cols)
- cp = tty3270_add_ra(tp, cp, 0, 0, 0);
+ cp = tty3270_add_ra(tp, cp, 0, lineno + 1, 0);
return cp;
}
@@ -408,7 +394,7 @@ static char tty3270_graphics_translate(struct tty3270 *tp, char ch)
}
static char *tty3270_add_attributes(struct tty3270 *tp, struct tty3270_line *line,
- struct tty3270_attribute *attr, char *cp)
+ struct tty3270_attribute *attr, char *cp, int lineno)
{
const unsigned char colors[16] = {
[0] = TAC_DEFAULT,
@@ -431,7 +417,7 @@ static char *tty3270_add_attributes(struct tty3270 *tp, struct tty3270_line *lin
struct tty3270_cell *cell;
int c, i;
- cp = tty3270_add_ba(tp, cp, TO_SBA, 0, 0);
+ cp = tty3270_add_ba(tp, cp, TO_SBA, 0, lineno);
for (i = 0, cell = line->cells; i < line->len; i++, cell++) {
if (cell->attributes.highlight != attr->highlight) {
@@ -465,7 +451,7 @@ static void tty3270_reset_attributes(struct tty3270_attribute *attr)
/*
* Convert a tty3270_line to a 3270 data fragment usable for output.
*/
-static unsigned int tty3270_convert_line(struct tty3270 *tp, struct tty3270_line *line)
+static unsigned int tty3270_convert_line(struct tty3270 *tp, struct tty3270_line *line, int lineno)
{
struct tty3270_attribute attr;
int flen;
@@ -477,8 +463,8 @@ static unsigned int tty3270_convert_line(struct tty3270 *tp, struct tty3270_line
return 0;
/* Write 3270 data fragment. */
tty3270_reset_attributes(&attr);
- cp = tty3270_add_attributes(tp, line, &attr, tp->converted_line);
- cp = tty3270_add_reset_attributes(tp, line, cp, &attr);
+ cp = tty3270_add_attributes(tp, line, &attr, tp->converted_line, lineno);
+ cp = tty3270_add_reset_attributes(tp, line, cp, &attr, lineno);
return cp - (char *)tp->converted_line;
}
@@ -529,8 +515,7 @@ static void tty3270_update(struct timer_list *t)
line = tty3270_get_view_line(tp, i);
if (!line->dirty)
continue;
- len = tty3270_convert_line(tp, line);
- tty3270_update_string(tp, tp->converted_line, len, i);
+ len = tty3270_convert_line(tp, line, i);
if (raw3270_request_add_data(wrq, tp->converted_line, len))
break;
line->dirty = 0;