@@ -494,10 +494,10 @@ int calc_check_console_lines(void)
dev = sdev_file_has_uclass(stdout, UCLASS_VIDEO_CONSOLE);
if (dev) {
- struct vidconsole_priv *priv;
+ struct vidconsole_ctx *ctx;
- priv = dev_get_uclass_priv(dev);
- dev_lines = priv->rows;
+ ctx = vidconsole_ctx(dev);
+ dev_lines = ctx->rows;
}
}
/* get number of lines from the serial console, if available */
@@ -95,6 +95,7 @@ int console_normal_putc_xy(struct udevice *dev, uint x_frac, uint y, int cp)
static __maybe_unused int console_get_cursor_info(struct udevice *dev)
{
struct vidconsole_priv *vc_priv = dev_get_uclass_priv(dev);
+ struct vidconsole_ctx *ctx = vidconsole_ctx_from_priv(vc_priv);
struct console_simple_priv *priv = dev_get_priv(dev);
struct video_fontdata *fontdata = priv->fontdata;
struct vidconsole_cursor *curs = &vc_priv->curs;
@@ -112,7 +113,7 @@ static __maybe_unused int console_get_cursor_info(struct udevice *dev)
xpos = (x + vc_priv->x_charsize - 1) / vc_priv->x_charsize;
/* number of characters which can fit on this (first) line */
- xspace = vc_priv->cols - xpos;
+ xspace = ctx->cols - xpos;
if (!curs->indent && index > xspace) {
/* move to the next line */
@@ -121,7 +122,7 @@ static __maybe_unused int console_get_cursor_info(struct udevice *dev)
/* figure out the available space in subsequent lines */
if (!curs->indent) {
- xspace = vc_priv->cols;
+ xspace = ctx->cols;
x = 0;
}
@@ -932,6 +932,7 @@ static void set_bitmap_font(struct udevice *dev,
static void select_metrics(struct udevice *dev, struct console_tt_metrics *met)
{
struct vidconsole_priv *vc_priv = dev_get_uclass_priv(dev);
+ struct vidconsole_ctx *ctx = vidconsole_ctx_from_priv(vc_priv);
struct console_tt_priv *priv = dev_get_priv(dev);
struct udevice *vid_dev = dev_get_parent(dev);
struct video_priv *vid_priv = dev_get_uclass_priv(vid_dev);
@@ -940,8 +941,8 @@ static void select_metrics(struct udevice *dev, struct console_tt_metrics *met)
vc_priv->x_charsize = met->font_size;
vc_priv->y_charsize = met->font_size;
vc_priv->xstart_frac = VID_TO_POS(2);
- vc_priv->cols = vid_priv->xsize / met->font_size;
- vc_priv->rows = vid_priv->ysize / met->font_size;
+ ctx->cols = vid_priv->xsize / met->font_size;
+ ctx->rows = vid_priv->ysize / met->font_size;
vc_priv->tab_width_frac = VID_TO_POS(met->font_size) * 8 / 2;
}
@@ -63,6 +63,7 @@ int vidconsole_entry_start(struct udevice *dev)
static int vidconsole_back(struct udevice *dev)
{
struct vidconsole_priv *priv = dev_get_uclass_priv(dev);
+ struct vidconsole_ctx *ctx = vidconsole_ctx_from_priv(priv);
struct vidconsole_ops *ops = vidconsole_get_ops(dev);
int ret;
@@ -77,7 +78,7 @@ static int vidconsole_back(struct udevice *dev)
priv->xcur_frac -= VID_TO_POS(priv->x_charsize);
if (priv->xcur_frac < priv->xstart_frac) {
- priv->xcur_frac = (priv->cols - 1) *
+ priv->xcur_frac = (ctx->cols - 1) *
VID_TO_POS(priv->x_charsize);
priv->ycur -= priv->y_charsize;
if (priv->ycur < 0)
@@ -93,6 +94,7 @@ static int vidconsole_back(struct udevice *dev)
static void vidconsole_newline(struct udevice *dev)
{
struct vidconsole_priv *priv = dev_get_uclass_priv(dev);
+ struct vidconsole_ctx *ctx = vidconsole_ctx_from_priv(priv);
struct udevice *vid_dev = dev->parent;
struct video_priv *vid_priv = dev_get_uclass_priv(vid_dev);
const int rows = CONFIG_VAL(CONSOLE_SCROLL_LINES);
@@ -105,9 +107,9 @@ static void vidconsole_newline(struct udevice *dev)
if (vid_priv->rot % 2 ?
priv->ycur + priv->x_charsize > vid_priv->xsize :
priv->ycur + priv->y_charsize > vid_priv->ysize) {
- vidconsole_move_rows(dev, 0, rows, priv->rows - rows);
+ vidconsole_move_rows(dev, 0, rows, ctx->rows - rows);
for (i = 0; i < rows; i++)
- vidconsole_set_row(dev, priv->rows - i - 1,
+ vidconsole_set_row(dev, ctx->rows - i - 1,
vid_priv->colour_bg);
priv->ycur -= rows * priv->y_charsize;
}
@@ -153,15 +155,15 @@ void vidconsole_set_cursor_pos(struct udevice *dev, int x, int y)
*/
static void set_cursor_position(struct udevice *dev, int row, int col)
{
- struct vidconsole_priv *priv = dev_get_uclass_priv(dev);
+ struct vidconsole_ctx *ctx = vidconsole_ctx(dev);
/*
* Ensure we stay in the bounds of the screen.
*/
- if (row >= priv->rows)
- row = priv->rows - 1;
- if (col >= priv->cols)
- col = priv->cols - 1;
+ if (row >= ctx->rows)
+ row = ctx->rows - 1;
+ if (col >= ctx->cols)
+ col = ctx->cols - 1;
vidconsole_position_cursor(dev, col, row);
}
@@ -951,6 +953,7 @@ void vidconsole_set_bitmap_font(struct udevice *dev,
struct video_fontdata *fontdata)
{
struct vidconsole_priv *vc_priv = dev_get_uclass_priv(dev);
+ struct vidconsole_ctx *ctx = vidconsole_ctx_from_priv(vc_priv);
struct video_priv *vid_priv = dev_get_uclass_priv(dev->parent);
log_debug("console_simple: setting %s font\n", fontdata->name);
@@ -961,12 +964,12 @@ void vidconsole_set_bitmap_font(struct udevice *dev,
vc_priv->x_charsize = fontdata->width;
vc_priv->y_charsize = fontdata->height;
if (vid_priv->rot % 2) {
- vc_priv->cols = vid_priv->ysize / fontdata->width;
- vc_priv->rows = vid_priv->xsize / fontdata->height;
+ ctx->cols = vid_priv->ysize / fontdata->width;
+ ctx->rows = vid_priv->xsize / fontdata->height;
vc_priv->xsize_frac = VID_TO_POS(vid_priv->ysize);
} else {
- vc_priv->cols = vid_priv->xsize / fontdata->width;
- vc_priv->rows = vid_priv->ysize / fontdata->height;
+ ctx->cols = vid_priv->xsize / fontdata->width;
+ ctx->rows = vid_priv->ysize / fontdata->height;
/* xsize_frac is set in vidconsole_pre_probe() */
}
vc_priv->xstart_frac = 0;
@@ -78,15 +78,20 @@ struct vidconsole_cursor {
*
* This holds per-client state for video consoles. It can be used by clients
* to maintain separate contexts for different text-entry operations.
+ *
+ * @rows: Number of text rows
+ * @cols: Number of text columns
*/
struct vidconsole_ctx {
+ int rows;
+ int cols;
};
/**
* struct vidconsole_priv - uclass-private data about a console device
*
- * Drivers must set up @rows, @cols, @x_charsize, @y_charsize in their probe()
- * method. Drivers may set up @xstart_frac if desired.
+ * Drivers must set up @ctx.rows, @ctx.cols, @x_charsize, @y_charsize in their
+ * probe() method. Drivers may set up @xstart_frac if desired.
*
* Note that these values relate to the rotated console, so that an 80x25
* console which is rotated 90 degrees will have rows=80 and cols=25
@@ -99,8 +104,7 @@ struct vidconsole_ctx {
* @sdev: stdio device, acting as an output sink
* @xcur_frac: Current X position, in fractional units (VID_TO_POS(x))
* @ycur: Current Y position in pixels (0=top)
- * @rows: Number of text rows
- * @cols: Number of text columns
+ * @ctx: Per-client context
* @x_charsize: Character width in pixels
* @y_charsize: Character height in pixels
* @tab_width_frac: Tab width in fractional units
@@ -124,8 +128,6 @@ struct vidconsole_priv {
struct vidconsole_ctx ctx;
int xcur_frac;
int ycur;
- int rows;
- int cols;
int x_charsize;
int y_charsize;
int tab_width_frac;
@@ -213,7 +213,7 @@ static int __maybe_unused query_vidconsole(int *rows, int *cols)
const char *stdout_name = env_get("stdout");
struct stdio_dev *stdout_dev;
struct udevice *dev;
- struct vidconsole_priv *priv;
+ struct vidconsole_ctx *ctx;
if (!stdout_name || strncmp(stdout_name, "vidconsole", 10))
return -ENODEV;
@@ -223,11 +223,11 @@ static int __maybe_unused query_vidconsole(int *rows, int *cols)
dev = stdout_dev->priv;
if (!dev)
return -ENODEV;
- priv = dev_get_uclass_priv(dev);
- if (!priv)
+ ctx = vidconsole_ctx(dev);
+ if (!ctx)
return -ENODEV;
- *rows = priv->rows;
- *cols = priv->cols;
+ *rows = ctx->rows;
+ *cols = ctx->cols;
return 0;
}