summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
Diffstat (limited to 'sys-kernel/thinkpad-sources/files/2.6.25-r1/vt-fix.patch')
-rw-r--r--sys-kernel/thinkpad-sources/files/2.6.25-r1/vt-fix.patch146
1 files changed, 146 insertions, 0 deletions
diff --git a/sys-kernel/thinkpad-sources/files/2.6.25-r1/vt-fix.patch b/sys-kernel/thinkpad-sources/files/2.6.25-r1/vt-fix.patch
new file mode 100644
index 0000000..62c7a7e
--- /dev/null
+++ b/sys-kernel/thinkpad-sources/files/2.6.25-r1/vt-fix.patch
@@ -0,0 +1,146 @@
+diff --git a/drivers/char/vt.c b/drivers/char/vt.c
+index 9b58b89..159c9e2 100644
+--- a/drivers/char/vt.c
++++ b/drivers/char/vt.c
+@@ -301,7 +301,7 @@ static void scrup(struct vc_data *vc, unsigned int t, unsigned int b, int nr)
+ d = (unsigned short *)(vc->vc_origin + vc->vc_size_row * t);
+ s = (unsigned short *)(vc->vc_origin + vc->vc_size_row * (t + nr));
+ scr_memmovew(d, s, (b - t - nr) * vc->vc_size_row);
+- scr_memsetw(d + (b - t - nr) * vc->vc_cols, vc->vc_video_erase_char,
++ scr_memsetw(d + (b - t - nr) * vc->vc_cols, vc->vc_scrl_erase_char,
+ vc->vc_size_row * nr);
+ }
+
+@@ -319,7 +319,7 @@ static void scrdown(struct vc_data *vc, unsigned int t, unsigned int b, int nr)
+ s = (unsigned short *)(vc->vc_origin + vc->vc_size_row * t);
+ step = vc->vc_cols * nr;
+ scr_memmovew(s + step, s, (b - t - nr) * vc->vc_size_row);
+- scr_memsetw(s, vc->vc_video_erase_char, 2 * step);
++ scr_memsetw(s, vc->vc_scrl_erase_char, 2 * step);
+ }
+
+ static void do_update_region(struct vc_data *vc, unsigned long start, int count)
+@@ -400,7 +400,7 @@ static u8 build_attr(struct vc_data *vc, u8 _color, u8 _intensity, u8 _blink,
+ * Bit 7 : blink
+ */
+ {
+- u8 a = vc->vc_color;
++ u8 a = _color;
+ if (!vc->vc_can_do_color)
+ return _intensity |
+ (_italic ? 2 : 0) |
+@@ -434,6 +434,7 @@ static void update_attr(struct vc_data *vc)
+ vc->vc_blink, vc->vc_underline,
+ vc->vc_reverse ^ vc->vc_decscnm, vc->vc_italic);
+ vc->vc_video_erase_char = (build_attr(vc, vc->vc_color, 1, vc->vc_blink, 0, vc->vc_decscnm, 0) << 8) | ' ';
++ vc->vc_scrl_erase_char = (build_attr(vc, vc->vc_def_color, 1, false, false, false, false) << 8) | ' ';
+ }
+
+ /* Note: inverting the screen twice should revert to the original state */
+diff --git a/drivers/video/console/fbcon.c b/drivers/video/console/fbcon.c
+index 0222824..ca2a543 100644
+--- a/drivers/video/console/fbcon.c
++++ b/drivers/video/console/fbcon.c
+@@ -1882,7 +1882,7 @@ static int fbcon_scroll(struct vc_data *vc, int t, int b, int dir,
+ scr_memsetw((unsigned short *) (vc->vc_origin +
+ vc->vc_size_row *
+ (b - count)),
+- vc->vc_video_erase_char,
++ vc->vc_scrl_erase_char,
+ vc->vc_size_row * count);
+ return 1;
+ break;
+@@ -1954,7 +1954,7 @@ static int fbcon_scroll(struct vc_data *vc, int t, int b, int dir,
+ scr_memsetw((unsigned short *) (vc->vc_origin +
+ vc->vc_size_row *
+ (b - count)),
+- vc->vc_video_erase_char,
++ vc->vc_scrl_erase_char,
+ vc->vc_size_row * count);
+ return 1;
+ }
+@@ -1973,7 +1973,7 @@ static int fbcon_scroll(struct vc_data *vc, int t, int b, int dir,
+ scr_memsetw((unsigned short *) (vc->vc_origin +
+ vc->vc_size_row *
+ t),
+- vc->vc_video_erase_char,
++ vc->vc_scrl_erase_char,
+ vc->vc_size_row * count);
+ return 1;
+ break;
+@@ -2043,7 +2043,7 @@ static int fbcon_scroll(struct vc_data *vc, int t, int b, int dir,
+ scr_memsetw((unsigned short *) (vc->vc_origin +
+ vc->vc_size_row *
+ t),
+- vc->vc_video_erase_char,
++ vc->vc_scrl_erase_char,
+ vc->vc_size_row * count);
+ return 1;
+ }
+diff --git a/drivers/video/console/mdacon.c b/drivers/video/console/mdacon.c
+index bd8d995..38a296b 100644
+--- a/drivers/video/console/mdacon.c
++++ b/drivers/video/console/mdacon.c
+@@ -531,7 +531,7 @@ static void mdacon_cursor(struct vc_data *c, int mode)
+
+ static int mdacon_scroll(struct vc_data *c, int t, int b, int dir, int lines)
+ {
+- u16 eattr = mda_convert_attr(c->vc_video_erase_char);
++ u16 eattr = mda_convert_attr(c->vc_scrl_erase_char);
+
+ if (!lines)
+ return 0;
+diff --git a/drivers/video/console/sticon.c b/drivers/video/console/sticon.c
+index 67a682d..a11cc2f 100644
+--- a/drivers/video/console/sticon.c
++++ b/drivers/video/console/sticon.c
+@@ -170,12 +170,12 @@ static int sticon_scroll(struct vc_data *conp, int t, int b, int dir, int count)
+ switch (dir) {
+ case SM_UP:
+ sti_bmove(sti, t + count, 0, t, 0, b - t - count, conp->vc_cols);
+- sti_clear(sti, b - count, 0, count, conp->vc_cols, conp->vc_video_erase_char);
++ sti_clear(sti, b - count, 0, count, conp->vc_cols, conp->vc_scrl_erase_char);
+ break;
+
+ case SM_DOWN:
+ sti_bmove(sti, t, 0, t + count, 0, b - t - count, conp->vc_cols);
+- sti_clear(sti, t, 0, count, conp->vc_cols, conp->vc_video_erase_char);
++ sti_clear(sti, t, 0, count, conp->vc_cols, conp->vc_scrl_erase_char);
+ break;
+ }
+
+diff --git a/drivers/video/console/vgacon.c b/drivers/video/console/vgacon.c
+index 6df29a6..bd1f57b 100644
+--- a/drivers/video/console/vgacon.c
++++ b/drivers/video/console/vgacon.c
+@@ -1350,7 +1350,7 @@ static int vgacon_scroll(struct vc_data *c, int t, int b, int dir,
+ } else
+ c->vc_origin += delta;
+ scr_memsetw((u16 *) (c->vc_origin + c->vc_screenbuf_size -
+- delta), c->vc_video_erase_char,
++ delta), c->vc_scrl_erase_char,
+ delta);
+ } else {
+ if (oldo - delta < vga_vram_base) {
+@@ -1363,7 +1363,7 @@ static int vgacon_scroll(struct vc_data *c, int t, int b, int dir,
+ } else
+ c->vc_origin -= delta;
+ c->vc_scr_end = c->vc_origin + c->vc_screenbuf_size;
+- scr_memsetw((u16 *) (c->vc_origin), c->vc_video_erase_char,
++ scr_memsetw((u16 *) (c->vc_origin), c->vc_scrl_erase_char,
+ delta);
+ }
+ c->vc_scr_end = c->vc_origin + c->vc_screenbuf_size;
+diff --git a/include/linux/console_struct.h b/include/linux/console_struct.h
+index d71f7c0..b03f80a 100644
+--- a/include/linux/console_struct.h
++++ b/include/linux/console_struct.h
+@@ -53,6 +53,7 @@ struct vc_data {
+ unsigned short vc_hi_font_mask; /* [#] Attribute set for upper 256 chars of font or 0 if not supported */
+ struct console_font vc_font; /* Current VC font set */
+ unsigned short vc_video_erase_char; /* Background erase character */
++ unsigned short vc_scrl_erase_char; /* Erase character for scroll */
+ /* VT terminal data */
+ unsigned int vc_state; /* Escape sequence parser state */
+ unsigned int vc_npar,vc_par[NPAR]; /* Parameters of current escape sequence */
+