mirror of
https://source.denx.de/u-boot/u-boot.git
synced 2025-08-17 12:46:59 +02:00
vidconsole: Add damage notifications to all vidconsole drivers
Now that we have a damage tracking API, let's populate damage done by vidconsole drivers. We try to declare as little memory as damaged as possible. Signed-off-by: Alexander Graf <agraf@csgraf.de> Reported-by: Da Xue <da@libre.computer> [Alper: Rebase for met->baseline, fontdata->height/width, make rotated console_putc_xy() damages pass tests, edit patch message] Co-developed-by: Alper Nebi Yasak <alpernebiyasak@gmail.com> Signed-off-by: Alper Nebi Yasak <alpernebiyasak@gmail.com> Link: https://lore.kernel.org/u-boot/20230821135111.3558478-7-alpernebiyasak@gmail.com/
This commit is contained in:
parent
b5ffd6bdb4
commit
17f0f77a59
@ -39,6 +39,12 @@ static int console_set_row(struct udevice *dev, uint row, int clr)
|
|||||||
if (ret)
|
if (ret)
|
||||||
return ret;
|
return ret;
|
||||||
|
|
||||||
|
video_damage(dev->parent,
|
||||||
|
0,
|
||||||
|
fontdata->height * row,
|
||||||
|
vid_priv->xsize,
|
||||||
|
fontdata->height);
|
||||||
|
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -60,6 +66,12 @@ static int console_move_rows(struct udevice *dev, uint rowdst,
|
|||||||
if (ret)
|
if (ret)
|
||||||
return ret;
|
return ret;
|
||||||
|
|
||||||
|
video_damage(dev->parent,
|
||||||
|
0,
|
||||||
|
fontdata->height * rowdst,
|
||||||
|
vid_priv->xsize,
|
||||||
|
fontdata->height * count);
|
||||||
|
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -91,6 +103,12 @@ static int console_putc_xy(struct udevice *dev, uint x_frac, uint y, int cp)
|
|||||||
if (ret)
|
if (ret)
|
||||||
return ret;
|
return ret;
|
||||||
|
|
||||||
|
video_damage(dev->parent,
|
||||||
|
x,
|
||||||
|
y,
|
||||||
|
fontdata->width,
|
||||||
|
fontdata->height);
|
||||||
|
|
||||||
ret = vidconsole_sync_copy(dev, start, line);
|
ret = vidconsole_sync_copy(dev, start, line);
|
||||||
if (ret)
|
if (ret)
|
||||||
return ret;
|
return ret;
|
||||||
|
@ -36,6 +36,12 @@ static int console_set_row_1(struct udevice *dev, uint row, int clr)
|
|||||||
if (ret)
|
if (ret)
|
||||||
return ret;
|
return ret;
|
||||||
|
|
||||||
|
video_damage(dev->parent,
|
||||||
|
vid_priv->xsize - ((row + 1) * fontdata->height),
|
||||||
|
0,
|
||||||
|
fontdata->height,
|
||||||
|
vid_priv->ysize);
|
||||||
|
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -64,6 +70,12 @@ static int console_move_rows_1(struct udevice *dev, uint rowdst, uint rowsrc,
|
|||||||
dst += vid_priv->line_length;
|
dst += vid_priv->line_length;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
video_damage(dev->parent,
|
||||||
|
vid_priv->xsize - ((rowdst + count) * fontdata->height),
|
||||||
|
0,
|
||||||
|
count * fontdata->height,
|
||||||
|
vid_priv->ysize);
|
||||||
|
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -97,6 +109,12 @@ static int console_putc_xy_1(struct udevice *dev, uint x_frac, uint y, int cp)
|
|||||||
if (ret)
|
if (ret)
|
||||||
return ret;
|
return ret;
|
||||||
|
|
||||||
|
video_damage(dev->parent,
|
||||||
|
vid_priv->xsize - y - fontdata->height,
|
||||||
|
linenum - 1,
|
||||||
|
fontdata->height,
|
||||||
|
fontdata->width);
|
||||||
|
|
||||||
return VID_TO_POS(fontdata->width);
|
return VID_TO_POS(fontdata->width);
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -121,6 +139,12 @@ static int console_set_row_2(struct udevice *dev, uint row, int clr)
|
|||||||
if (ret)
|
if (ret)
|
||||||
return ret;
|
return ret;
|
||||||
|
|
||||||
|
video_damage(dev->parent,
|
||||||
|
0,
|
||||||
|
vid_priv->ysize - (row + 1) * fontdata->height,
|
||||||
|
vid_priv->xsize,
|
||||||
|
fontdata->height);
|
||||||
|
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -142,6 +166,12 @@ static int console_move_rows_2(struct udevice *dev, uint rowdst, uint rowsrc,
|
|||||||
vidconsole_memmove(dev, dst, src,
|
vidconsole_memmove(dev, dst, src,
|
||||||
fontdata->height * vid_priv->line_length * count);
|
fontdata->height * vid_priv->line_length * count);
|
||||||
|
|
||||||
|
video_damage(dev->parent,
|
||||||
|
0,
|
||||||
|
vid_priv->ysize - (rowdst + count) * fontdata->height,
|
||||||
|
vid_priv->xsize,
|
||||||
|
count * fontdata->height);
|
||||||
|
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -175,6 +205,12 @@ static int console_putc_xy_2(struct udevice *dev, uint x_frac, uint y, int cp)
|
|||||||
if (ret)
|
if (ret)
|
||||||
return ret;
|
return ret;
|
||||||
|
|
||||||
|
video_damage(dev->parent,
|
||||||
|
x - fontdata->width + 1,
|
||||||
|
linenum - fontdata->height + 1,
|
||||||
|
fontdata->width,
|
||||||
|
fontdata->height);
|
||||||
|
|
||||||
return VID_TO_POS(fontdata->width);
|
return VID_TO_POS(fontdata->width);
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -199,6 +235,12 @@ static int console_set_row_3(struct udevice *dev, uint row, int clr)
|
|||||||
if (ret)
|
if (ret)
|
||||||
return ret;
|
return ret;
|
||||||
|
|
||||||
|
video_damage(dev->parent,
|
||||||
|
row * fontdata->height,
|
||||||
|
0,
|
||||||
|
fontdata->height,
|
||||||
|
vid_priv->ysize);
|
||||||
|
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -225,6 +267,12 @@ static int console_move_rows_3(struct udevice *dev, uint rowdst, uint rowsrc,
|
|||||||
dst += vid_priv->line_length;
|
dst += vid_priv->line_length;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
video_damage(dev->parent,
|
||||||
|
rowdst * fontdata->height,
|
||||||
|
0,
|
||||||
|
count * fontdata->height,
|
||||||
|
vid_priv->ysize);
|
||||||
|
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -257,6 +305,12 @@ static int console_putc_xy_3(struct udevice *dev, uint x_frac, uint y, int cp)
|
|||||||
if (ret)
|
if (ret)
|
||||||
return ret;
|
return ret;
|
||||||
|
|
||||||
|
video_damage(dev->parent,
|
||||||
|
y,
|
||||||
|
linenum - fontdata->width + 1,
|
||||||
|
fontdata->height,
|
||||||
|
fontdata->width);
|
||||||
|
|
||||||
return VID_TO_POS(fontdata->width);
|
return VID_TO_POS(fontdata->width);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -190,6 +190,7 @@ struct console_tt_store {
|
|||||||
static int console_truetype_set_row(struct udevice *dev, uint row, int clr)
|
static int console_truetype_set_row(struct udevice *dev, uint row, int clr)
|
||||||
{
|
{
|
||||||
struct video_priv *vid_priv = dev_get_uclass_priv(dev->parent);
|
struct video_priv *vid_priv = dev_get_uclass_priv(dev->parent);
|
||||||
|
struct vidconsole_priv *vc_priv = dev_get_uclass_priv(dev);
|
||||||
struct console_tt_priv *priv = dev_get_priv(dev);
|
struct console_tt_priv *priv = dev_get_priv(dev);
|
||||||
struct console_tt_metrics *met = priv->cur_met;
|
struct console_tt_metrics *met = priv->cur_met;
|
||||||
void *end, *line;
|
void *end, *line;
|
||||||
@ -233,6 +234,12 @@ static int console_truetype_set_row(struct udevice *dev, uint row, int clr)
|
|||||||
if (ret)
|
if (ret)
|
||||||
return ret;
|
return ret;
|
||||||
|
|
||||||
|
video_damage(dev->parent,
|
||||||
|
0,
|
||||||
|
vc_priv->y_charsize * row,
|
||||||
|
vid_priv->xsize,
|
||||||
|
vc_priv->y_charsize);
|
||||||
|
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -240,6 +247,7 @@ static int console_truetype_move_rows(struct udevice *dev, uint rowdst,
|
|||||||
uint rowsrc, uint count)
|
uint rowsrc, uint count)
|
||||||
{
|
{
|
||||||
struct video_priv *vid_priv = dev_get_uclass_priv(dev->parent);
|
struct video_priv *vid_priv = dev_get_uclass_priv(dev->parent);
|
||||||
|
struct vidconsole_priv *vc_priv = dev_get_uclass_priv(dev);
|
||||||
struct console_tt_priv *priv = dev_get_priv(dev);
|
struct console_tt_priv *priv = dev_get_priv(dev);
|
||||||
struct console_tt_metrics *met = priv->cur_met;
|
struct console_tt_metrics *met = priv->cur_met;
|
||||||
void *dst;
|
void *dst;
|
||||||
@ -258,6 +266,12 @@ static int console_truetype_move_rows(struct udevice *dev, uint rowdst,
|
|||||||
for (i = 0; i < priv->pos_ptr; i++)
|
for (i = 0; i < priv->pos_ptr; i++)
|
||||||
priv->pos[i].ypos -= diff;
|
priv->pos[i].ypos -= diff;
|
||||||
|
|
||||||
|
video_damage(dev->parent,
|
||||||
|
0,
|
||||||
|
vc_priv->y_charsize * rowdst,
|
||||||
|
vid_priv->xsize,
|
||||||
|
vc_priv->y_charsize * count);
|
||||||
|
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -418,6 +432,13 @@ static int console_truetype_putc_xy(struct udevice *dev, uint x, uint y,
|
|||||||
|
|
||||||
line += vid_priv->line_length;
|
line += vid_priv->line_length;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
video_damage(dev->parent,
|
||||||
|
VID_TO_PIXEL(x) + xoff,
|
||||||
|
y + met->baseline + yoff,
|
||||||
|
width,
|
||||||
|
height);
|
||||||
|
|
||||||
ret = vidconsole_sync_copy(dev, start, line);
|
ret = vidconsole_sync_copy(dev, start, line);
|
||||||
if (ret)
|
if (ret)
|
||||||
return ret;
|
return ret;
|
||||||
|
Loading…
Reference in New Issue
Block a user