[U-Boot] [PATCH v2 04/22] x86: video: Add support for CONFIG_CONSOLE_SCROLL_LINES
Simon Glass
sjg at chromium.org
Tue Jan 20 01:33:08 CET 2015
Hi Anatolij,
On 1 January 2015 at 16:17, Simon Glass <sjg at chromium.org> wrote:
> Some machines are very slow to scroll their displays. To cope with this,
> support the CONFIG_CONSOLE_SCROLL_LINES option. Setting this to 5 allows
> the display to operate at an acceptable speed by scrolling 5 lines at
> a time.
>
> This same option is available for LCDs so when these systems are unified
> this code can be unified also.
>
> Signed-off-by: Simon Glass <sjg at chromium.org>
Are you happy with this patch? If so, is it OK for me to pick it up via x86?
> ---
>
> Changes in v2: None
>
> drivers/video/cfb_console.c | 26 +++++++++++++++++---------
> 1 file changed, 17 insertions(+), 9 deletions(-)
>
> diff --git a/drivers/video/cfb_console.c b/drivers/video/cfb_console.c
> index a653bb4..75cdf61 100644
> --- a/drivers/video/cfb_console.c
> +++ b/drivers/video/cfb_console.c
> @@ -312,7 +312,11 @@ void console_cursor(int state);
> #define CONSOLE_ROW_SECOND (video_console_address + CONSOLE_ROW_SIZE)
> #define CONSOLE_ROW_LAST (video_console_address + CONSOLE_SIZE - CONSOLE_ROW_SIZE)
> #define CONSOLE_SIZE (CONSOLE_ROW_SIZE * CONSOLE_ROWS)
> -#define CONSOLE_SCROLL_SIZE (CONSOLE_SIZE - CONSOLE_ROW_SIZE)
> +
> +/* By default we scroll by a single line */
> +#ifndef CONFIG_CONSOLE_SCROLL_LINES
> +#define CONFIG_CONSOLE_SCROLL_LINES 1
> +#endif
>
> /* Macros */
> #ifdef VIDEO_FB_LITTLE_ENDIAN
> @@ -753,26 +757,33 @@ static void console_clear_line(int line, int begin, int end)
>
> static void console_scrollup(void)
> {
> + const int rows = CONFIG_CONSOLE_SCROLL_LINES;
> + int i;
> +
> /* copy up rows ignoring the first one */
>
> #ifdef VIDEO_HW_BITBLT
> video_hw_bitblt(VIDEO_PIXEL_SIZE, /* bytes per pixel */
> 0, /* source pos x */
> video_logo_height +
> - VIDEO_FONT_HEIGHT, /* source pos y */
> + VIDEO_FONT_HEIGHT * rows, /* source pos y */
> 0, /* dest pos x */
> video_logo_height, /* dest pos y */
> VIDEO_VISIBLE_COLS, /* frame width */
> VIDEO_VISIBLE_ROWS
> - video_logo_height
> - - VIDEO_FONT_HEIGHT /* frame height */
> + - VIDEO_FONT_HEIGHT * rows /* frame height */
> );
> #else
> - memcpyl(CONSOLE_ROW_FIRST, CONSOLE_ROW_SECOND,
> - CONSOLE_SCROLL_SIZE >> 2);
> + memcpyl(CONSOLE_ROW_FIRST, CONSOLE_ROW_FIRST + rows * CONSOLE_ROW_SIZE,
> + (CONSOLE_SIZE - CONSOLE_ROW_SIZE * rows) >> 2);
> #endif
> /* clear the last one */
> - console_clear_line(CONSOLE_ROWS - 1, 0, CONSOLE_COLS - 1);
> + for (i = 1; i <= rows; i++)
> + console_clear_line(CONSOLE_ROWS - i, 0, CONSOLE_COLS - 1);
> +
> + /* Decrement row number */
> + console_row -= rows;
> }
>
> static void console_back(void)
> @@ -884,9 +895,6 @@ static void console_newline(int n)
> if (console_row >= CONSOLE_ROWS) {
> /* Scroll everything up */
> console_scrollup();
> -
> - /* Decrement row number */
> - console_row = CONSOLE_ROWS - 1;
> }
> }
>
> --
> 2.2.0.rc0.207.ga3a616c
>
Regards,
Simon
More information about the U-Boot
mailing list