Lines Matching +full:num +full:- +full:rows

1 // SPDX-License-Identifier: GPL-2.0+
4 * (C) Copyright 2001-2015
5 * DENX Software Engineering -- wd@denx.de
6 * Compulab Ltd - http://compulab.co.il/
7 * Bernecker & Rainer Industrieelektronik GmbH - http://www.br-automation.com
35 if (!ops->putc_xy) in vidconsole_putc_xy()
36 return -ENOSYS; in vidconsole_putc_xy()
37 return ops->putc_xy(dev, x, y, ch); in vidconsole_putc_xy()
45 if (!ops->move_rows) in vidconsole_move_rows()
46 return -ENOSYS; in vidconsole_move_rows()
47 return ops->move_rows(dev, rowdst, rowsrc, count); in vidconsole_move_rows()
54 if (!ops->set_row) in vidconsole_set_row()
55 return -ENOSYS; in vidconsole_set_row()
56 return ops->set_row(dev, row, clr); in vidconsole_set_row()
63 if (!ops->entry_start) in vidconsole_entry_start()
64 return -ENOSYS; in vidconsole_entry_start()
65 return ops->entry_start(dev); in vidconsole_entry_start()
75 if (ops->backspace) { in vidconsole_back()
76 ret = ops->backspace(dev); in vidconsole_back()
77 if (ret != -ENOSYS) in vidconsole_back()
81 priv->xcur_frac -= VID_TO_POS(priv->x_charsize); in vidconsole_back()
82 if (priv->xcur_frac < priv->xstart_frac) { in vidconsole_back()
83 priv->xcur_frac = (priv->cols - 1) * in vidconsole_back()
84 VID_TO_POS(priv->x_charsize); in vidconsole_back()
85 priv->ycur -= priv->y_charsize; in vidconsole_back()
86 if (priv->ycur < 0) in vidconsole_back()
87 priv->ycur = 0; in vidconsole_back()
89 video_sync(dev->parent, false); in vidconsole_back()
98 struct udevice *vid_dev = dev->parent; in vidconsole_newline()
100 const int rows = CONFIG_CONSOLE_SCROLL_LINES; in vidconsole_newline() local
103 priv->xcur_frac = priv->xstart_frac; in vidconsole_newline()
104 priv->ycur += priv->y_charsize; in vidconsole_newline()
107 if ((priv->ycur + priv->y_charsize) / priv->y_charsize > priv->rows) { in vidconsole_newline()
108 vidconsole_move_rows(dev, 0, rows, priv->rows - rows); in vidconsole_newline()
109 for (i = 0; i < rows; i++) in vidconsole_newline()
110 vidconsole_set_row(dev, priv->rows - i - 1, in vidconsole_newline()
111 vid_priv->colour_bg); in vidconsole_newline()
112 priv->ycur -= rows * priv->y_charsize; in vidconsole_newline()
114 priv->last_ch = 0; in vidconsole_newline()
116 video_sync(dev->parent, false); in vidconsole_newline()
140 switch (priv->bpix) { in vid_console_color()
161 static char *parsenum(char *s, int *num) in parsenum() argument
164 *num = simple_strtol(s, &end, 10); in parsenum()
169 * set_cursor_position() - set cursor position
180 if (row >= priv->rows) in set_cursor_position()
181 row = priv->rows - 1; in set_cursor_position()
182 if (col >= priv->cols) in set_cursor_position()
183 col = priv->cols - 1; in set_cursor_position()
185 priv->ycur = row * priv->y_charsize; in set_cursor_position()
186 priv->xcur_frac = priv->xstart_frac + in set_cursor_position()
187 VID_TO_POS(col * priv->x_charsize); in set_cursor_position()
191 * get_cursor_position() - get cursor position
200 *row = priv->ycur / priv->y_charsize; in get_cursor_position()
201 *col = VID_TO_PIXEL(priv->xcur_frac - priv->xstart_frac) / in get_cursor_position()
202 priv->x_charsize; in get_cursor_position()
218 if (priv->escape_len >= sizeof(priv->escape_buf)) in vidconsole_escape_char()
220 if (priv->escape_len == 0) { in vidconsole_escape_char()
224 get_cursor_position(priv, &priv->row_saved, in vidconsole_escape_char()
225 &priv->col_saved); in vidconsole_escape_char()
226 priv->escape = 0; in vidconsole_escape_char()
231 int row = priv->row_saved; in vidconsole_escape_char()
232 int col = priv->col_saved; in vidconsole_escape_char()
235 priv->escape = 0; in vidconsole_escape_char()
245 priv->escape_buf[priv->escape_len++] = ch; in vidconsole_escape_char()
259 priv->escape = 0; in vidconsole_escape_char()
265 char *s = priv->escape_buf; in vidconsole_escape_char()
279 --row; in vidconsole_escape_char()
281 --col; in vidconsole_escape_char()
292 * [J or [0J - clear screen from cursor down in vidconsole_escape_char()
293 * [1J - clear screen from cursor up in vidconsole_escape_char()
294 * [2J - clear entire screen in vidconsole_escape_char()
296 * TODO we really only handle entire-screen case, others in vidconsole_escape_char()
297 * probably require some additions to video-uclass (and in vidconsole_escape_char()
300 parsenum(priv->escape_buf + 1, &mode); in vidconsole_escape_char()
303 video_clear(dev->parent); in vidconsole_escape_char()
304 video_sync(dev->parent, false); in vidconsole_escape_char()
305 priv->ycur = 0; in vidconsole_escape_char()
306 priv->xcur_frac = priv->xstart_frac; in vidconsole_escape_char()
313 struct video_priv *vid_priv = dev_get_uclass_priv(dev->parent); in vidconsole_escape_char()
314 char *s = priv->escape_buf; in vidconsole_escape_char()
315 char *end = &priv->escape_buf[priv->escape_len]; in vidconsole_escape_char()
355 video_set_default_colors(dev->parent, false); in vidconsole_escape_char()
359 vid_priv->fg_col_idx |= 8; in vidconsole_escape_char()
360 vid_priv->colour_fg = vid_console_color( in vidconsole_escape_char()
361 vid_priv, vid_priv->fg_col_idx); in vidconsole_escape_char()
365 vid_priv->fg_col_idx &= ~7; in vidconsole_escape_char()
366 vid_priv->fg_col_idx |= val - 30; in vidconsole_escape_char()
367 vid_priv->colour_fg = vid_console_color( in vidconsole_escape_char()
368 vid_priv, vid_priv->fg_col_idx); in vidconsole_escape_char()
372 vid_priv->colour_bg = vid_console_color( in vidconsole_escape_char()
373 vid_priv, val - 40); in vidconsole_escape_char()
385 priv->escape_len, priv->escape_buf); in vidconsole_escape_char()
392 priv->escape = 0; in vidconsole_escape_char()
400 if (priv->escape) { in vidconsole_put_char()
407 priv->escape_len = 0; in vidconsole_put_char()
408 priv->escape = 1; in vidconsole_put_char()
414 priv->xcur_frac = priv->xstart_frac; in vidconsole_put_char()
421 priv->xcur_frac = ((priv->xcur_frac / priv->tab_width_frac) in vidconsole_put_char()
422 + 1) * priv->tab_width_frac; in vidconsole_put_char()
424 if (priv->xcur_frac >= priv->xsize_frac) in vidconsole_put_char()
429 priv->last_ch = 0; in vidconsole_put_char()
437 ret = vidconsole_putc_xy(dev, priv->xcur_frac, priv->ycur, ch); in vidconsole_put_char()
438 if (ret == -EAGAIN) { in vidconsole_put_char()
440 ret = vidconsole_putc_xy(dev, priv->xcur_frac, in vidconsole_put_char()
441 priv->ycur, ch); in vidconsole_put_char()
445 priv->xcur_frac += ret; in vidconsole_put_char()
446 priv->last_ch = ch; in vidconsole_put_char()
447 if (priv->xcur_frac >= priv->xsize_frac) in vidconsole_put_char()
457 struct udevice *dev = sdev->priv; in vidconsole_putc()
460 video_sync(dev->parent, false); in vidconsole_putc()
465 struct udevice *dev = sdev->priv; in vidconsole_puts()
469 video_sync(dev->parent, false); in vidconsole_puts()
472 /* Set up the number of rows and colours (rotated drivers override this) */
476 struct udevice *vid = dev->parent; in vidconsole_pre_probe()
479 priv->xsize_frac = VID_TO_POS(vid_priv->xsize); in vidconsole_pre_probe()
488 struct stdio_dev *sdev = &priv->sdev; in vidconsole_post_probe()
490 if (!priv->tab_width_frac) in vidconsole_post_probe()
491 priv->tab_width_frac = VID_TO_POS(priv->x_charsize) * 8; in vidconsole_post_probe()
493 if (dev->seq) { in vidconsole_post_probe()
494 snprintf(sdev->name, sizeof(sdev->name), "vidconsole%d", in vidconsole_post_probe()
495 dev->seq); in vidconsole_post_probe()
497 strcpy(sdev->name, "vidconsole"); in vidconsole_post_probe()
500 sdev->flags = DEV_FLAGS_OUTPUT; in vidconsole_post_probe()
501 sdev->putc = vidconsole_putc; in vidconsole_post_probe()
502 sdev->puts = vidconsole_puts; in vidconsole_post_probe()
503 sdev->priv = dev; in vidconsole_post_probe()
519 struct udevice *vid_dev = dev->parent; in vidconsole_position_cursor()
522 col *= priv->x_charsize; in vidconsole_position_cursor()
523 row *= priv->y_charsize; in vidconsole_position_cursor()
524 priv->xcur_frac = VID_TO_POS(min_t(short, col, vid_priv->xsize - 1)); in vidconsole_position_cursor()
525 priv->ycur = min_t(short, row, vid_priv->ysize - 1); in vidconsole_position_cursor()
560 video_sync(dev->parent, false); in do_video_puts()