fbcon: Cursor fixes
Subsystems (2)
PATCH 3/10 fbcon: Cursor fixes
From Jiri Benc:
we found several bugs in framebuffer console code in recent kernels.
1. The escape sequence '\033[?25l' does not work (should disable cursor).
2. When scrolling console using Shift-PgUp with cursor in the upper half part of the screen, cursor position is not updated.
3. If cursor is placed at some character and console is scrolled using Shift-PgUp, that character remains on the screen.
Signed-off-by Antonino Daplas <[email protected]>
---
bitblit.c | 11 ++++++++++- fbcon.c | 24 ++++++++++-------------- fbcon.h | 2 +- tileblit.c | 3 ++- 4 files changed, 23 insertions(+), 17 deletions(-)
drivers/video/console/bitblit.c +10 -1
@@ -236,7 +236,7 @@ }static void bit_cursor (struct vc_data *vc,struct fb_info *info, -struct display *p,int mode,int fg,int bg) +struct display *p,int mode,int softback_lines,int fg,int bg) {struct fb_cursor cursor;struct fbcon_ops *ops = (struct fbcon_ops *) info->fbcon_par;
@@ -247,6 +247,15 @@char *src; cursor.set =0 ; + +if (softback_lines) { +if (y + softback_lines >= vc->vc_rows) { + mode =CM_ERASE ; + ops->cursor_flash =0 ; +return ; + }else + y += softback_lines; + } c =scr_readw ((u16 *) vc->vc_pos); attribute =get_attribute (info, c);
drivers/video/console/fbcon.c +10 -14
@@ -279,7 +279,7 @@ c =scr_readw ((u16 *) vc->vc_pos); mode = (!ops->cursor_flash || ops->cursor_state.enable) ?CM_ERASE :CM_DRAW ; - ops->cursor (vc, info, p, mode,get_color (vc, info, c,1 ), + ops->cursor (vc, info, p, mode, softback_lines,get_color (vc, info, c,1 ),get_color (vc, info, c,0 ));release_console_sem (); }
@@ -1086,27 +1086,23 @@struct fb_info *info = registered_fb[con2fb_map[vc->vc_num]];struct fbcon_ops *ops = info->fbcon_par;struct display *p = &fb_display[vc->vc_num]; -int y =real_y (p, vc->vc_y); +int y;int c =scr_readw ((u16 *) vc->vc_pos);if (fbcon_is_inactive (vc, info))return ; - ops->cursor_flash =1 ; + ops->cursor_flash = (mode ==CM_ERASE ) ?0 :1 ;if (mode &CM_SOFTBACK ) { mode &= ~CM_SOFTBACK ; -if (softback_lines) { -if (y + softback_lines >= vc->vc_rows) { - mode =CM_ERASE ; - ops->cursor_flash =0 ; - } -else - y += softback_lines; - } - }else if (softback_lines) -fbcon_set_origin (vc); + y = softback_lines; + }else { +if (softback_lines) +fbcon_set_origin (vc); + y =0 ; + } - ops->cursor (vc, info, p, mode,get_color (vc, info, c,1 ), + ops->cursor (vc, info, p, mode, y,get_color (vc, info, c,1 ),get_color (vc, info, c,0 )); vbl_cursor_cnt =CURSOR_DRAW_DELAY ; }
drivers/video/console/fbcon.h +1 -1
@@ -59,7 +59,7 @@void (*clear_margins)(struct vc_data *vc,struct fb_info *info,int bottom_only);void (*cursor)(struct vc_data *vc,struct fb_info *info, -struct display *p,int mode,int fg,int bg); +struct display *p,int mode,int softback_lines,int fg,int bg);struct timer_list cursor_timer;/* Cursor timer */ struct fb_cursor cursor_state;
drivers/video/console/tileblit.c +2 -1
@@ -81,7 +81,8 @@ }static void tile_cursor (struct vc_data *vc,struct fb_info *info, -struct display *p,int mode,int fg,int bg) +struct display *p,int mode,int softback_lines, +int fg,int bg) {struct fb_tilecursor cursor;int use_sw = (vc->vc_cursor_type &0x01 );
-------------------------------------------------------
SF email is sponsored by - The IT Product Guide
Read honest & candid reviews on hundreds of IT Products from real users. Discover which products truly live up to the hype. Start reading now.
http://ads.osdn.com/?ad_id=6595&alloc_id=14396&op=click