]> git.sur5r.net Git - u-boot/commitdiff
cfb_console: Add console_clear_line function
authorPali Rohár <pali.rohar@gmail.com>
Sat, 28 Apr 2012 07:26:44 +0000 (07:26 +0000)
committerAnatolij Gustschin <agust@denx.de>
Mon, 4 Jun 2012 20:43:31 +0000 (22:43 +0200)
console_clear_line() clears part of specified line or the full line.

Signed-off-by: Pali Rohár <pali.rohar@gmail.com>
Signed-off-by: Anatolij Gustschin <agust@denx.de>
drivers/video/cfb_console.c

index 51ea1671cf6b4a2eea31404ec4d034dfb857444e..6fa61d2728e522647f26cf1f81fe602f368631f7 100644 (file)
@@ -683,6 +683,41 @@ static void memcpyl(int *d, int *s, int c)
 }
 #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 */
+                         video_logo_height +
+                         VIDEO_FONT_HEIGHT * line,     /* dest pos y */
+                         VIDEO_FONT_WIDTH * (end - begin + 1), /* fr. width */
+                         VIDEO_FONT_HEIGHT,            /* frame height */
+                         bgx                           /* fill color */
+               );
+#else
+       if (begin == 0 && (end + 1) == CONSOLE_COLS) {
+               memsetl(CONSOLE_ROW_FIRST +
+                       CONSOLE_ROW_SIZE * line,        /* offset of row */
+                       CONSOLE_ROW_SIZE >> 2,          /* length of row */
+                       bgx                             /* fill color */
+               );
+       } else {
+               void *offset;
+               int i, size;
+
+               offset = CONSOLE_ROW_FIRST +
+                        CONSOLE_ROW_SIZE * line +      /* offset of row */
+                        VIDEO_FONT_WIDTH *
+                        VIDEO_PIXEL_SIZE * begin;      /* offset of col */
+               size = VIDEO_FONT_WIDTH * VIDEO_PIXEL_SIZE * (end - begin + 1);
+               size >>= 2; /* length to end for memsetl() */
+               /* fill at col offset of i'th line using bgx as fill color */
+               for (i = 0; i < VIDEO_FONT_HEIGHT; i++)
+                       memsetl(offset + i * VIDEO_LINE_LEN, size, bgx);
+       }
+#endif
+}
+
 static void console_scrollup(void)
 {
        /* copy up rows ignoring the first one */
@@ -703,20 +738,8 @@ static void console_scrollup(void)
        memcpyl(CONSOLE_ROW_FIRST, CONSOLE_ROW_SECOND,
                CONSOLE_SCROLL_SIZE >> 2);
 #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 - 1);
 }
 
 static void console_back(void)