Patchwork [U-Boot,08/16] drivers/video/cfb_console.c: Add function console_clear and console_clear_line

login
register
mail settings
Submitter Pali Rohár
Date Dec. 17, 2011, 5:03 p.m.
Message ID <1324141398-14859-8-git-send-email-pali.rohar@gmail.com>
Download mbox | patch
Permalink /patch/132009/
State Changes Requested
Headers show

Comments

Pali Rohár - Dec. 17, 2011, 5:03 p.m.
* console_clear - clear full console framebuffer output
 * console_clear_line - clear part of specified line (or full)

Signed-off-by: Pali Rohár <pali.rohar@gmail.com>
---
 drivers/video/cfb_console.c |   56 +++++++++++++++++++++++++++++++++---------
 1 files changed, 44 insertions(+), 12 deletions(-)
Mike Frysinger - Dec. 18, 2011, 7 p.m.
On Saturday 17 December 2011 12:03:10 Pali Rohár wrote:
> --- a/drivers/video/cfb_console.c
> +++ b/drivers/video/cfb_console.c
> 
> +static void console_clear_line(int line, int begin, int end)
> +{
> +#ifdef VIDEO_HW_RECTFILL
> +	video_hw_rectfill(VIDEO_PIXEL_SIZE,				/* bytes per pixel */
> +			  VIDEO_FONT_WIDTH * begin,			/* dest pos x */  /* FIXME: 
correct? */
> +			  video_logo_height + CONSOLE_ROW_SIZE * line,	/* dest pos y */  
/*
> FIXME: correct? */ +			  VIDEO_FONT_WIDTH * ( end - begin ),		
/* frame
> width */ /* FIXME: correct? */ +			  VIDEO_FONT_HEIGHT,				
/* frame height
> */
> +			  bgx						/* fill color */
> +		);
> +#else
> +	int i;
> +	if ( begin == 0 && end == CONSOLE_COLS )
> +		memsetl(CONSOLE_ROW_FIRST + CONSOLE_ROW_SIZE * line,	/* offset of 
row */
> +			CONSOLE_ROW_SIZE >> 2,				/* length of row */
> +			bgx						/* fill color */
> +		);
> +	else
> +		for ( i = 0; i < VIDEO_FONT_HEIGHT; ++i )
> +			memsetl(CONSOLE_ROW_FIRST + CONSOLE_ROW_SIZE * line +	/* offset 
of row
> */ +				VIDEO_FONT_WIDTH * VIDEO_PIXEL_SIZE * begin +	/* 
offset of col */
> +				i * VIDEO_LINE_LEN,				/* col offset of i-th 
line */
> +				(VIDEO_FONT_WIDTH * VIDEO_PIXEL_SIZE * ( end - begin + 1)) 
>> 2, /*
> length to end of line */ +				bgx						/* 
fill color */
> +				);

these lines are way too long -- notice how my e-mail client craps everywhere 
because of it ;).  put the comments on their own line, move them all to before 
the func call, or drop them.
-mike

Patch

diff --git a/drivers/video/cfb_console.c b/drivers/video/cfb_console.c
index 867c789..7a4f0f3 100644
--- a/drivers/video/cfb_console.c
+++ b/drivers/video/cfb_console.c
@@ -691,6 +691,49 @@  static void memcpyl(int *d, int *s, int c)
 }
 #endif
 
+static void console_clear(void)
+{
+#ifdef VIDEO_HW_RECTFILL
+	video_hw_rectfill(VIDEO_PIXEL_SIZE,	/* bytes per pixel */
+			  0,			/* dest pos x */
+			  video_logo_height,	/* dest pos y */
+			  VIDEO_VISIBLE_COLS,	/* frame width */
+			  VIDEO_VISIBLE_ROWS,	/* frame height */
+			  bgx			/* fill color */
+	);
+#else
+	memsetl(CONSOLE_ROW_FIRST, CONSOLE_SIZE, bgx);
+#endif
+}
+
+static void console_clear_line(int line, int begin, int end)
+{
+#ifdef VIDEO_HW_RECTFILL
+	video_hw_rectfill(VIDEO_PIXEL_SIZE,				/* bytes per pixel */
+			  VIDEO_FONT_WIDTH * begin,			/* dest pos x */  /* FIXME: correct? */
+			  video_logo_height + CONSOLE_ROW_SIZE * line,	/* dest pos y */  /* FIXME: correct? */
+			  VIDEO_FONT_WIDTH * ( end - begin ),		/* frame width */ /* FIXME: correct? */
+			  VIDEO_FONT_HEIGHT,				/* frame height */
+			  bgx						/* fill color */
+		);
+#else
+	int i;
+	if ( begin == 0 && end == CONSOLE_COLS )
+		memsetl(CONSOLE_ROW_FIRST + CONSOLE_ROW_SIZE * line,	/* offset of row */
+			CONSOLE_ROW_SIZE >> 2,				/* length of row */
+			bgx						/* fill color */
+		);
+	else
+		for ( i = 0; i < VIDEO_FONT_HEIGHT; ++i )
+			memsetl(CONSOLE_ROW_FIRST + CONSOLE_ROW_SIZE * line +	/* offset of row */
+				VIDEO_FONT_WIDTH * VIDEO_PIXEL_SIZE * begin +	/* offset of col */
+				i * VIDEO_LINE_LEN,				/* col offset of i-th line */
+				(VIDEO_FONT_WIDTH * VIDEO_PIXEL_SIZE * ( end - begin + 1)) >> 2, /* length to end of line */
+				bgx						/* fill color */
+				);
+#endif
+}
+
 static void console_scrollup(void)
 {
 	/* copy up rows ignoring the first one */
@@ -713,18 +756,7 @@  static void console_scrollup(void)
 #endif
 
 	/* clear the last one */
-#ifdef VIDEO_HW_RECTFILL
-	video_hw_rectfill(VIDEO_PIXEL_SIZE,	/* bytes per pixel */
-			  0,			/* dest pos x */
-			  VIDEO_VISIBLE_ROWS
-			  - VIDEO_FONT_HEIGHT,	/* dest pos y */
-			  VIDEO_VISIBLE_COLS,	/* frame width */
-			  VIDEO_FONT_HEIGHT,	/* frame height */
-			  CONSOLE_BG_COL	/* fill color */
-		);
-#else
-	memsetl(CONSOLE_ROW_LAST, CONSOLE_ROW_SIZE >> 2, CONSOLE_BG_COL);
-#endif
+	console_clear_line(CONSOLE_ROWS-1, 0, CONSOLE_COLS);
 }
 
 static void console_back(void)