patch-2.3.50 linux/drivers/video/vgacon.c

Next file: linux/drivers/zorro/Makefile
Previous file: linux/drivers/video/vesafb.c
Back to the patch index
Back to the overall index

diff -u --recursive --new-file v2.3.49/linux/drivers/video/vgacon.c linux/drivers/video/vgacon.c
@@ -94,6 +94,8 @@
 static void vgacon_invert_region(struct vc_data *c, u16 *p, int count);
 static unsigned long vgacon_uni_pagedir[2];
 
+void clear_status_line( void );
+
 
 /* Description of the hardware situation */
 static unsigned long   vga_vram_base;		/* Base of video memory */
@@ -349,6 +351,7 @@
 static inline void vga_set_mem_top(struct vc_data *c)
 {
 	write_vga(12, (c->vc_visible_origin-vga_vram_base)/2);
+	clear_status_line();
 }
 
 static void vgacon_deinit(struct vc_data *c)
@@ -1057,3 +1060,80 @@
 	vgacon_build_attr,
 	vgacon_invert_region
 };
+
+
+int inited = 0;
+
+void
+clear_status_line( void )
+{
+#if CONFIG_COMMENT_INT==3
+        u16 *org;
+        int i;
+        int currcons = fg_console;
+	struct vc_data *c = vc_cons[fg_console].d;
+	if (!inited) return;
+        if (vga_is_gfx) return;
+	if (c->vc_origin != c->vc_visible_origin) return;
+        org = screen_pos( fg_console, video_num_lines*video_num_columns, 1 );
+        for (i=0; i<video_num_columns; i++)
+                scr_writew( (0x0f << 8) + ' ', org++ );
+#endif
+}
+
+#if CONFIG_COMMENT_INT==3
+void
+paint_status_line( int timer )
+{
+	u16 *org;
+	int i,j;
+	int currcons = fg_console;
+	struct vc_data *c = vc_cons[fg_console].d;
+
+	if (!inited) return;
+	if (vga_is_gfx)		/* We don't play origin tricks in graphic modes */
+		return;
+	if (c->vc_origin != c->vc_visible_origin) return;
+
+	org = screen_pos( fg_console, video_num_lines*video_num_columns, 1 );
+
+	/* Are we busy? */
+	{
+		i = current->pid;
+		j = 0;
+		if (i)
+			j = (i>16) ? ((current->priority < DEF_PRIORITY) ? 0xA0:0xE0) : 0xC0;
+		scr_writew( (j<<8) + ' ', org++ );
+
+#if 0
+		org++;
+
+#define DISP( x ) scr_writew(  (((i&x) ? 0x90:0) << 8) + ' ', org++ );
+		DISP( 0x80 );
+		DISP( 0x40 );
+		DISP( 0x20 );
+		DISP( 0x10 );
+		DISP( 0x08 );
+		DISP( 0x04 );
+		DISP( 0x02 );
+		DISP( 0x01 );
+#endif
+	}
+
+	if (!timer) return;
+
+	org++;
+	/* Serial? */
+	{
+		j = (ledflags & 0x10) ? 0x90 : 0x00;
+		scr_writew( (j<<8) + 'S', org++ );
+	}
+
+	org++;
+	/* NE2000? */
+	{
+		j = (ledflags & 0x20) ? 0x90 : 0x00;
+		scr_writew( (j<<8) + 'N', org++ );
+	}
+}
+#endif

FUNET's LINUX-ADM group, linux-adm@nic.funet.fi
TCL-scripts by Sam Shen (who was at: slshen@lbl.gov)