fbcon: Move fbcon_bmove(_rec) functions
Avoids two forward declarations, and more importantly, matches what I've done in my fbcon scrolling restore patches - so I need this to avoid a bunch of conflicts in rebasing since we ended up merging Helge's series instead. Acked-by: Thomas Zimmermann <tzimmermann@suse.de> Reviewed-by: Javier Martinez Canillas <javierm@redhat.com> Signed-off-by: Daniel Vetter <daniel.vetter@intel.com> Cc: Helge Deller <deller@gmx.de> Cc: Daniel Vetter <daniel@ffwll.ch> Cc: Thomas Zimmermann <tzimmermann@suse.de> Cc: Du Cheng <ducheng2@gmail.com> Cc: Tetsuo Handa <penguin-kernel@I-love.SAKURA.ne.jp> Cc: Claudio Suarez <cssk@net-c.es> Cc: Greg Kroah-Hartman <gregkh@linuxfoundation.org> Link: https://patchwork.freedesktop.org/patch/msgid/20220405210335.3434130-3-daniel.vetter@ffwll.ch
This commit is contained in:
parent
9ad7acdad1
commit
6893331363
|
@ -164,15 +164,11 @@ static int fbcon_cursor_noblink;
|
|||
*/
|
||||
|
||||
static void fbcon_clear_margins(struct vc_data *vc, int bottom_only);
|
||||
static void fbcon_bmove(struct vc_data *vc, int sy, int sx, int dy, int dx,
|
||||
int height, int width);
|
||||
static void fbcon_set_palette(struct vc_data *vc, const unsigned char *table);
|
||||
|
||||
/*
|
||||
* Internal routines
|
||||
*/
|
||||
static void fbcon_bmove_rec(struct vc_data *vc, struct fbcon_display *p, int sy, int sx,
|
||||
int dy, int dx, int height, int width, u_int y_break);
|
||||
static void fbcon_set_disp(struct fb_info *info, struct fb_var_screeninfo *var,
|
||||
int unit);
|
||||
static void fbcon_redraw_move(struct vc_data *vc, struct fbcon_display *p,
|
||||
|
@ -1667,6 +1663,71 @@ static void fbcon_redraw(struct vc_data *vc, struct fbcon_display *p,
|
|||
}
|
||||
}
|
||||
|
||||
static void fbcon_bmove_rec(struct vc_data *vc, struct fbcon_display *p, int sy, int sx,
|
||||
int dy, int dx, int height, int width, u_int y_break)
|
||||
{
|
||||
struct fb_info *info = registered_fb[con2fb_map[vc->vc_num]];
|
||||
struct fbcon_ops *ops = info->fbcon_par;
|
||||
u_int b;
|
||||
|
||||
if (sy < y_break && sy + height > y_break) {
|
||||
b = y_break - sy;
|
||||
if (dy < sy) { /* Avoid trashing self */
|
||||
fbcon_bmove_rec(vc, p, sy, sx, dy, dx, b, width,
|
||||
y_break);
|
||||
fbcon_bmove_rec(vc, p, sy + b, sx, dy + b, dx,
|
||||
height - b, width, y_break);
|
||||
} else {
|
||||
fbcon_bmove_rec(vc, p, sy + b, sx, dy + b, dx,
|
||||
height - b, width, y_break);
|
||||
fbcon_bmove_rec(vc, p, sy, sx, dy, dx, b, width,
|
||||
y_break);
|
||||
}
|
||||
return;
|
||||
}
|
||||
|
||||
if (dy < y_break && dy + height > y_break) {
|
||||
b = y_break - dy;
|
||||
if (dy < sy) { /* Avoid trashing self */
|
||||
fbcon_bmove_rec(vc, p, sy, sx, dy, dx, b, width,
|
||||
y_break);
|
||||
fbcon_bmove_rec(vc, p, sy + b, sx, dy + b, dx,
|
||||
height - b, width, y_break);
|
||||
} else {
|
||||
fbcon_bmove_rec(vc, p, sy + b, sx, dy + b, dx,
|
||||
height - b, width, y_break);
|
||||
fbcon_bmove_rec(vc, p, sy, sx, dy, dx, b, width,
|
||||
y_break);
|
||||
}
|
||||
return;
|
||||
}
|
||||
ops->bmove(vc, info, real_y(p, sy), sx, real_y(p, dy), dx,
|
||||
height, width);
|
||||
}
|
||||
|
||||
static void fbcon_bmove(struct vc_data *vc, int sy, int sx, int dy, int dx,
|
||||
int height, int width)
|
||||
{
|
||||
struct fb_info *info = registered_fb[con2fb_map[vc->vc_num]];
|
||||
struct fbcon_display *p = &fb_display[vc->vc_num];
|
||||
|
||||
if (fbcon_is_inactive(vc, info))
|
||||
return;
|
||||
|
||||
if (!width || !height)
|
||||
return;
|
||||
|
||||
/* Split blits that cross physical y_wrap case.
|
||||
* Pathological case involves 4 blits, better to use recursive
|
||||
* code rather than unrolled case
|
||||
*
|
||||
* Recursive invocations don't need to erase the cursor over and
|
||||
* over again, so we use fbcon_bmove_rec()
|
||||
*/
|
||||
fbcon_bmove_rec(vc, p, sy, sx, dy, dx, height, width,
|
||||
p->vrows - p->yscroll);
|
||||
}
|
||||
|
||||
static bool fbcon_scroll(struct vc_data *vc, unsigned int t, unsigned int b,
|
||||
enum con_scroll dir, unsigned int count)
|
||||
{
|
||||
|
@ -1867,71 +1928,6 @@ static bool fbcon_scroll(struct vc_data *vc, unsigned int t, unsigned int b,
|
|||
}
|
||||
|
||||
|
||||
static void fbcon_bmove(struct vc_data *vc, int sy, int sx, int dy, int dx,
|
||||
int height, int width)
|
||||
{
|
||||
struct fb_info *info = registered_fb[con2fb_map[vc->vc_num]];
|
||||
struct fbcon_display *p = &fb_display[vc->vc_num];
|
||||
|
||||
if (fbcon_is_inactive(vc, info))
|
||||
return;
|
||||
|
||||
if (!width || !height)
|
||||
return;
|
||||
|
||||
/* Split blits that cross physical y_wrap case.
|
||||
* Pathological case involves 4 blits, better to use recursive
|
||||
* code rather than unrolled case
|
||||
*
|
||||
* Recursive invocations don't need to erase the cursor over and
|
||||
* over again, so we use fbcon_bmove_rec()
|
||||
*/
|
||||
fbcon_bmove_rec(vc, p, sy, sx, dy, dx, height, width,
|
||||
p->vrows - p->yscroll);
|
||||
}
|
||||
|
||||
static void fbcon_bmove_rec(struct vc_data *vc, struct fbcon_display *p, int sy, int sx,
|
||||
int dy, int dx, int height, int width, u_int y_break)
|
||||
{
|
||||
struct fb_info *info = registered_fb[con2fb_map[vc->vc_num]];
|
||||
struct fbcon_ops *ops = info->fbcon_par;
|
||||
u_int b;
|
||||
|
||||
if (sy < y_break && sy + height > y_break) {
|
||||
b = y_break - sy;
|
||||
if (dy < sy) { /* Avoid trashing self */
|
||||
fbcon_bmove_rec(vc, p, sy, sx, dy, dx, b, width,
|
||||
y_break);
|
||||
fbcon_bmove_rec(vc, p, sy + b, sx, dy + b, dx,
|
||||
height - b, width, y_break);
|
||||
} else {
|
||||
fbcon_bmove_rec(vc, p, sy + b, sx, dy + b, dx,
|
||||
height - b, width, y_break);
|
||||
fbcon_bmove_rec(vc, p, sy, sx, dy, dx, b, width,
|
||||
y_break);
|
||||
}
|
||||
return;
|
||||
}
|
||||
|
||||
if (dy < y_break && dy + height > y_break) {
|
||||
b = y_break - dy;
|
||||
if (dy < sy) { /* Avoid trashing self */
|
||||
fbcon_bmove_rec(vc, p, sy, sx, dy, dx, b, width,
|
||||
y_break);
|
||||
fbcon_bmove_rec(vc, p, sy + b, sx, dy + b, dx,
|
||||
height - b, width, y_break);
|
||||
} else {
|
||||
fbcon_bmove_rec(vc, p, sy + b, sx, dy + b, dx,
|
||||
height - b, width, y_break);
|
||||
fbcon_bmove_rec(vc, p, sy, sx, dy, dx, b, width,
|
||||
y_break);
|
||||
}
|
||||
return;
|
||||
}
|
||||
ops->bmove(vc, info, real_y(p, sy), sx, real_y(p, dy), dx,
|
||||
height, width);
|
||||
}
|
||||
|
||||
static void updatescrollmode_accel(struct fbcon_display *p,
|
||||
struct fb_info *info,
|
||||
struct vc_data *vc)
|
||||
|
|
Loading…
Reference in New Issue