diff options
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.patch | 146 |
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 */ + |