Skip to contentSkip to conversation

Framebuffer Console

PATCH Sven Schnelle 3 participants 3 messages Jul 28, 2003 – Jul 29, 2003

Subsystems (2)
lore
Share & tools
lore
#0 lore raw

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
diff -ur linux-2.6.0-test2/drivers/video/console/fbcon.c linux-2.6.0-test2-sv/drivers/video/console/fbcon.c
@@ -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]>
-----------------------------------------
#1 lore raw

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 characters

This patch solve the problems for me:

-------------------------------------8<--------------------------------
diff -ur linux-2.6.0-test2/drivers/video/console/fbcon.c linux-2.6.0-test2-sv/drivers/video/console/fbcon.c

drivers/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)
#2 lore raw
In reply to Sven Schnelle
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 -ur linux-2.6.0-test2/drivers/video/console/fbcon.c linux-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.