[PATCH] fbcon: prefer pan when available
From: David Eger <hidden>
Date: 2004-06-04 02:24:55
Also in:
lkml
Dear Andrew, Thomas and Antonino are right; the following are better heuristics than I had for interpreting the accel flags. please apply on top of 2.6.7-rc2-mm2 -dte fbcon: improve heuristics to favor panning over copyarea() thanks to pseudocode from Antonino Daplas [off-list ref] Signed-off-by: David Eger <redacted> diff -Nru a/drivers/video/console/fbcon.c b/drivers/video/console/fbcon.c
--- a/drivers/video/console/fbcon.c Fri Jun 4 02:58:58 2004
+++ b/drivers/video/console/fbcon.c Fri Jun 4 02:58:58 2004@@ -1469,22 +1469,26 @@ static __inline__ void updatescrollmode(struct display *p, struct fb_info *info, struct vc_data *vc) { int cap = info->flags; + int good_pan = (cap & FBINFO_HWACCEL_YPAN) + && divides(info->fix.ypanstep, vc->vc_font.height) + && info->var.yres_virtual >= 2*info->var.yres; + int good_wrap = (cap & FBINFO_HWACCEL_YWRAP) + && divides(info->fix.ywrapstep, vc->vc_font.height) + && divides(vc->vc_font.height, info->var.yres_virtual); + int reading_fast = cap & FBINFO_READS_FAST; + int fast_copyarea = (cap & FBINFO_HWACCEL_COPYAREA) && !(cap & FBINFO_HWACCEL_DISABLED); - if ((cap & FBINFO_HWACCEL_COPYAREA) && !(cap & FBINFO_HWACCEL_DISABLED)) - p->scrollmode = SCROLL_ACCEL; - else if ((cap & FBINFO_HWACCEL_YWRAP) && - divides(info->fix.ywrapstep, vc->vc_font.height) && - divides(vc->vc_font.height, info->var.yres_virtual)) - p->scrollmode = SCROLL_WRAP; - else if ((cap & FBINFO_HWACCEL_YPAN) && - divides(info->fix.ypanstep, vc->vc_font.height) && - info->var.yres_virtual >= info->var.yres + vc->vc_font.height) - p->scrollmode = SCROLL_PAN; - else if (cap & FBINFO_READS_FAST) - /* okay, we'll use software version of accel funcs... */ - p->scrollmode = SCROLL_ACCEL; - else - p->scrollmode = SCROLL_REDRAW; + if (good_wrap || good_pan) { + if (reading_fast || fast_copyarea) + p->scrollmode = good_wrap ? SCROLL_WRAP : SCROLL_PAN; + else + p->scrollmode = SCROLL_REDRAW; + } else { + if (reading_fast || fast_copyarea) + p->scrollmode = SCROLL_ACCEL; + else + p->scrollmode = SCROLL_REDRAW; + } } static int fbcon_resize(struct vc_data *vc, unsigned int width, -------------------------------------------------------
This SF.Net email is sponsored by the new InstallShield X. From Windows to Linux, servers to mobile, InstallShield X is the one installation-authoring solution that does it all. Learn more and evaluate today! http://www.installshield.com/Dev2Dev/0504