This works - perfectly, I must say. However, the scrolling problem is still here, but I think I know the reason for this: Imagine a console of 120x40 (using the std 8x16 font), on a screen of 1024x768, using ypanning. This uses only 40*16=640 pixels vertically instead of the 768 available. The problem is the y panning, and is kind of both console's as well as the driver's fault: When the y panning area reaches its end, it's supposed to copy the screen to the beginning of this area and pan to position 0. However, fbcon calculates p->vrows by info->var.yres_virtual / fontheight. This disregards the fact that the visible screen area is actually larger than the area console is supposed to use. Therefore, the calculation of vrows has to take the difference between these two into account. The attached patch fixes this for me but I have no idea if I cought all possible itches. It will no apply cleanly, because I had made changes to fbcon.c before making a backup copy - but it sure illustrates the problem. Why you used info->var.yres_virtual (and not the adapted var.yres_virtual) in fbcon_resize() is beyond me, BTW. Thomas Antonino Daplas wrote: > On Fri, 2003-03-07 at 20:08, Thomas Winischhofer wrote: > >> >>However, there is still (at least) one problem within the console layer. >> >>With my patch, I can now have a console of for instance 128x20 >>characters, on a 1024x768 screen. Scrolling mostly works, but sometimes >>console seems to forget to pan. I can't reproduce this on purpose, but >>printing eg. a directory with ls works in 90% of the cases (=scrolls >>correctly), but prints text beyond the current amount of rows in the >>remaining 10% of the cases. If I press enter until the last line of the >>console is on the very bottom of the 1024x768 screen, then it remembers >>its amount of rows and pans correctly. >> > > > Try this patch. The fbcon_resize test is more liberal and it now correctly > updates p->vrows and scroll_phys_max (for panning glitches). > > Tony > > > diff -Naur linux-2.5.64-fbdev/drivers/video/console/fbcon.c linux-2.5.64/drivers/video/console/fbcon.c > --- linux-2.5.64-fbdev/drivers/video/console/fbcon.c 2003-03-06 01:29:29.000000000 +0000 > +++ linux-2.5.64/drivers/video/console/fbcon.c 2003-03-07 13:54:04.000000000 +0000 > @@ -580,8 +580,8 @@ > struct fb_info *info = p->fb_info; > unsigned int cw = vc->vc_font.width; > unsigned int ch = vc->vc_font.height; > - unsigned int rw = info->var.xres % cw; > - unsigned int bh = info->var.yres % ch; > + unsigned int rw = info->var.xres - (cw * vc->vc_cols); > + unsigned int bh = info->var.yres - (ch * vc->vc_rows); > unsigned int rs = info->var.xres - rw; > unsigned int bs = info->var.yres - bh; > struct fb_fillrect region; > @@ -1815,14 +1815,14 @@ > (y_diff < 0 || y_diff > fh)) { > var.activate = FB_ACTIVATE_TEST; > err = fb_set_var(&var, info); > - if (err || width != var.xres/fw || > - height != var.yres/fh) > + if (err || width > var.xres/fw || > + height > var.yres/fh) > return -EINVAL; > DPRINTK("resize now %ix%i\n", var.xres, var.yres); > var.activate = FB_ACTIVATE_NOW; > fb_set_var(&var, info); > - p->vrows = info->var.yres_virtual/fh; > } > + p->vrows = info->var.yres_virtual/fh; > return 0; > } > > @@ -1857,6 +1857,7 @@ > } > if (info) > info->var.yoffset = p->yscroll = 0; > + fbcon_resize(vc, vc->vc_cols, vc->vc_rows); > switch (p->scrollmode & __SCROLL_YMASK) { > case __SCROLL_YWRAP: > scrollback_phys_max = p->vrows - vc->vc_rows; > @@ -1875,7 +1876,6 @@ > > info->currcon = unit; > > - fbcon_resize(vc, vc->vc_cols, vc->vc_rows); > update_var(unit, info); > fbcon_set_palette(vc, color_table); > > > -- Thomas Winischhofer Vienna/Austria mailto:thomas@winischhofer.net http://www.winischhofer.net/