Framebuffer Console
Subsystems (2)
Hi,
while testing linux-2.6.0-test2 I have some strange framebuffer(rivafb, but maybe this appears on other card's too)
behaviour:
1) Screen is not restored after switching from X11 back to textmode
2) Cursor shows wrong characters
This patch solve the problems for me:
-------------------------------------8<--------------------------------
drivers/video/console/fbcon.c +6 -1
@@ -1056,7 +1056,7 @@ cursor.set |=FB_CUR_SETHOT ; } -if ((cursor.set &FB_CUR_SETSIZE ) || ((vc->vc_cursor_type &0x0f ) != p->cursor_shape)) { +if ((cursor.set &FB_CUR_SETSIZE ) || (cursor.set &FB_CUR_SETCUR ) || ((vc->vc_cursor_type &0x0f ) != p->cursor_shape)) {char *mask =kmalloc (w*vc->vc_font.height,GFP_ATOMIC );int cur_height, size, i =0 ;
@@ -1704,8 +1704,13 @@if (blank <0 )/* Entering graphics mode */ return 0 ; +/* FIXME: Dirty Hack */ + info->cursor.image.height =0 ;/* Need to set cursor size */ + info->cursor.image.width =0 ;fbcon_cursor (vc, blank ?CM_ERASE :CM_DRAW ); +fbcon_clear (vc,0 ,0 , vc->vc_rows, vc->vc_cols); +update_screen (vc->vc_num);if (!info->fbops->fb_blank) {if (blank) {unsigned short oldc;
-----------------------------------8<--------------------------------------
don't know if this is the right way, but it works...
Regards,
Signature · 2 lines
Sven Schnelle, <[email protected]> -----------------------------------------
Though I did not check this patch below, with 2.6.0-test1 kernel MGA framebuffer console is totally unusable. Eg scrolling and major screen update tasks corrupt the screen heavily with vertical lines everywhere and other even "funnier" effects occured. With plain text consol there is no problem however I NEED framebuffer console (eg playing video on the console without X). It as a Matrox G400 card.
Quoted 47 lines · Sven Schnelle
Hi,
while testing linux-2.6.0-test2 I have some strange
framebuffer(rivafb, but maybe this appears on other card's too)
behaviour:1) Screen is not restored after switching from X11 back to textmode
2) Cursor shows wrong charactersThis patch solve the problems for me:
-------------------------------------8<--------------------------------
diff -urlinux-2.6.0-test2/drivers/video/console/fbcon.clinux-2.6.0-test2-sv/drivers/video/console/fbcon.cdrivers/video/console/fbcon.c +6
-2@@ -1056,7 +1056,7 @@ cursor.set |=FB_CUR_SETHOT ; } -if ((cursor.set &FB_CUR_SETSIZE ) || ((vc->vc_cursor_type &0x0f ) != p->cursor_shape)) { +if ((cursor.set &FB_CUR_SETSIZE ) || (cursor.set &FB_CUR_SETCUR ) || ((vc->vc_cursor_type &0x0f ) != p->cursor_shape)) {char *mask =kmalloc (w*vc->vc_font.height,GFP_ATOMIC );int cur_height, size, i =0 ;@@ -1704,8 +1704,13 @@if (blank <0 )/* Entering graphics mode */ return 0 ; +/* FIXME: Dirty Hack */ + info->cursor.image.height =0 ;/* Need to set cursor size */ + info->cursor.image.width =0 ;fbcon_cursor (vc, blank ?CM_ERASE :CM_DRAW ); +fbcon_clear (vc,0 ,0 , vc->vc_rows, vc->vc_cols); +update_screen (vc->vc_num);if (!info->fbops->fb_blank) {if (blank) {unsigned short oldc; -----------------------------------8<--------------------------------------don't know if this is the right way, but it works...
Regards,
Signature · 2 lines
Sven Schnelle, <[email protected]> -----------------------------------------
Signature · 1 line
- Gábor (larta'H)
Quoted 6 lines
while testing linux-2.6.0-test2 I have some strange
framebuffer(rivafb, but maybe this appears on other card's too)
behaviour:1) Screen is not restored after switching from X11 back to textmode
Try adding UseFBDev "true" to your XF86Config file.
Quoted 9 lines
2) Cursor shows wrong characters
This patch solve the problems for me:
-------------------------------------8<--------------------------------
diff -urlinux-2.6.0-test2/drivers/video/console/fbcon.clinux-2.6.0-test2-sv/drivers/video/console/fbcon.c
drivers/video/console/fbcon.c line 1061
Quoted 7 lines
drivers/video/console/fbcon.c +1
-1@@ -1056,7 +1056,7 @@ cursor.set |=FB_CUR_SETHOT ; } -if ((cursor.set &FB_CUR_SETSIZE ) || ((vc->vc_cursor_type &0x0f ) != p->cursor_shape)) { +if ((cursor.set &FB_CUR_SETSIZE ) || (cursor.set &FB_CUR_SETCUR ) || ((vc->vc_cursor_type &0x0f ) != p->cursor_shape)) {char *mask =kmalloc (w*vc->vc_font.height,GFP_ATOMIC );int cur_height, size, i =0 ;
This is wrong. FB_CUR_SETCUR is used only by the userland cursor interface. We use it to turn the cursor on and off via userland this way. Internal to the kernel we just toggle the enable flag.
Quoted 4 lines
drivers/video/console/fbcon.c +0
-0@@ -1704,8 +1704,13 @@if (blank <0 )/* Entering graphics mode */ return 0 ;
drivers/video/console/fbcon.c line 1716
Quoted 10 lines
drivers/video/console/fbcon.c +5
-0+/* FIXME: Dirty Hack */ + info->cursor.image.height =0 ;/* Need to set cursor size */ + info->cursor.image.width =0 ;fbcon_cursor (vc, blank ?CM_ERASE :CM_DRAW ); +fbcon_clear (vc,0 ,0 , vc->vc_rows, vc->vc_cols); +update_screen (vc->vc_num);if (!info->fbops->fb_blank) {if (blank) {unsigned short oldc;
This is a fluke that it helps. The cursor shows wrong characters because the code logic is wrong. I'm working on the new code.