From: Antonino Daplas <adaplas@pol.net>
To: Thomas Winischhofer <thomas@winischhofer.net>
Cc: James Simmons <jsimmons@infradead.org>,
Sven Luther <luther@dpt-info.u-strasbg.fr>,
Linux Fbdev development list
<linux-fbdev-devel@lists.sourceforge.net>
Subject: Re: Some questions
Date: 09 Mar 2003 06:03:02 +0800 [thread overview]
Message-ID: <1047160870.1212.73.camel@localhost.localdomain> (raw)
In-Reply-To: <3E69FC34.50703@winischhofer.net>
On Sat, 2003-03-08 at 22:20, Thomas Winischhofer wrote:
>
>
> Continued: What happens with your solution of the virtual area is only
> 1.5 times the size of the visible area? Did your check this?
>
> >> p->vrows = info->var.yres_virtual / vc->vc_font.height;
> >>+ p->vrows -= info->var.yres/vc->vc_font.height - vc->vc_rows;
>
> yres = 768
> yres_virtual = 1152
> fontheight= 16
> rows = 48
>
> vrows = 1152 / 16 = 72
> 72 - (768 / 16) - 48 = -24
>
> :) Any question?
>
Why?
Your example - 1024x768, yres_virtual = 1152, font = 8x16
2 cases:
1. full screeen console
vc->vc_rows = 48
p->vrows = 72 - (768/16 - 48)
p->vrows = 72 - 0
p->vrows = 72
2. half-height console:
vc->vc_rows = 24
p->vrows = 1152 - (768/16 - 24)
p->vrows = 72 - 24
p->vrows = 48
Second case, 24 rows are wasted, why? See accel_clear_margins:
ch = vc->vc_font_height
bh = yres - (vc->vc_rows * ch)
bh = 768 - (24 * 16)
bh = 768 - 384
bh = 384
This means that a rectangle of height 384 scanlines (_always_) at the
bottom of the display will be cleared . If you pan to the end of
graphics memory, attempting to clear from yres_virtual + 384 will cause
the chipset to crash. But it won't because we reserved 24 rows (384
pixels) to accomodate this.
For the clincher, this is your code:
if(info->var.yres > (vc->vc_font.height * (vc->vc_rows + 1))) {
p->vrows -= (info->var.yres - (vc->vc_font.height *
vc->vc_rows)) / vc->vc_font.height;
}
Simplifying the second line....
p->vrows -= (info->var.yres/vc->vc_font.height) - (vc->vc_font.height *
vc->vc_rows)/vc->vc_font.height;
p->vrows -= info->var.yres/vc->vc_font.height - vc->vc_rows;
Do you recognize the last line? Yep, it's mine. It's also simpler (1
division and 1 subtraction vs 1 division, 1 multiplication and 1
subtraction).
Code correctness was never the issue. The only thing I'm questioning is
using info->var.yres instead of var.yres, and I have explained this
enough times already.
Granted, the patch I submitted was a quickwrite, never meant to be
applied but serves only to illustrate. This is a more proper patch,
applied against James latest fbdev.diff. It simplifies the equation,
remove the unnecessary 'if' conditional. Apply it, don't apply it, I
don't care.
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-08 21:33:25.000000000 +0000
+++ linux-2.5.64/drivers/video/console/fbcon.c 2003-03-08 21:47:26.000000000 +0000
@@ -1044,9 +1044,7 @@
vc->vc_rows = nr_rows;
}
p->vrows = info->var.yres_virtual / vc->vc_font.height;
- if(info->var.yres > (vc->vc_font.height * (vc->vc_rows + 1))) {
- p->vrows -= (info->var.yres - (vc->vc_font.height * vc->vc_rows)) / vc->vc_font.height;
- }
+ p->vrows -= info->var.yres/vc->vc_font.height - vc->vc_rows;
if ((info->var.yres % vc->vc_font.height) &&
(info->var.yres_virtual % vc->vc_font.height <
info->var.yres % vc->vc_font.height))
@@ -1825,9 +1823,8 @@
var.activate = FB_ACTIVATE_NOW;
fb_set_var(&var, info);
}
- p->vrows = var.yres_virtual/fh;
- if(var.yres > (fh * (height + 1)))
- p->vrows -= (var.yres - (fh * height)) / fh;
+ p->vrows = info->var.yres_virtual/fh;
+ p->vrows -= (info->var.yres + (fh - 1))/fh - height;
return 0;
}
@@ -2099,11 +2096,7 @@
/* reset wrap/pan */
info->var.xoffset = info->var.yoffset = p->yscroll = 0;
p->vrows = info->var.yres_virtual / h;
-
-#if 0 /* INCOMPLETE - let the console gurus handle this */
- if(info->var.yres > (h * (vc->vc_rows + 1))
- p->vrows -= (info->var.yres - (h * vc->vc_rows)) / h;
-#endif
+ p->vrows -= info->var.yres/h - vc->vc_rows;
if ((info->var.yres % h)
&& (info->var.yres_virtual % h < info->var.yres % h))
p->vrows--;
-------------------------------------------------------
This SF.net email is sponsored by: Etnus, makers of TotalView, The debugger
for complex code. Debugging C/C++ programs can leave you feeling lost and
disoriented. TotalView can help you find your way. Available on major UNIX
and Linux platforms. Try it free. www.etnus.com
next prev parent reply other threads:[~2003-03-08 22:03 UTC|newest]
Thread overview: 93+ messages / expand[flat|nested] mbox.gz Atom feed top
2003-03-05 12:18 Some questions Thomas Winischhofer
2003-03-05 13:26 ` Antonino Daplas
2003-03-05 14:06 ` Thomas Winischhofer
2003-03-05 15:25 ` Antonino Daplas
2003-03-05 15:37 ` Thomas Winischhofer
2003-03-05 15:44 ` Geert Uytterhoeven
2003-03-05 15:59 ` Thomas Winischhofer
2003-03-05 16:06 ` Geert Uytterhoeven
2003-03-05 16:34 ` Antonino Daplas
2003-03-05 16:06 ` Antonino Daplas
2003-03-05 16:17 ` Thomas Winischhofer
2003-03-05 16:44 ` Antonino Daplas
2003-03-05 17:01 ` Geert Uytterhoeven
2003-03-05 19:25 ` James Simmons
2003-03-05 19:27 ` James Simmons
2003-03-05 15:40 ` Geert Uytterhoeven
2003-03-05 15:54 ` Antonino Daplas
2003-03-05 19:31 ` James Simmons
2003-03-05 15:48 ` Antonino Daplas
2003-03-05 19:43 ` James Simmons
2003-03-05 22:21 ` Thomas Winischhofer
2003-03-06 0:18 ` James Simmons
2003-03-06 9:03 ` Thomas Winischhofer
2003-03-06 1:18 ` Antonino Daplas
2003-03-06 1:18 ` Antonino Daplas
2003-03-06 8:49 ` Thomas Winischhofer
2003-03-06 9:12 ` Geert Uytterhoeven
2003-03-06 9:58 ` Antonino Daplas
2003-03-06 10:14 ` Geert Uytterhoeven
2003-03-06 10:30 ` Antonino Daplas
2003-03-06 9:26 ` Antonino Daplas
2003-03-06 9:43 ` Thomas Winischhofer
2003-03-06 10:05 ` Antonino Daplas
2003-03-06 10:31 ` Sven Luther
2003-03-06 10:48 ` Antonino Daplas
2003-03-06 10:51 ` Antonino Daplas
2003-03-06 11:40 ` Sven Luther
2003-03-06 13:25 ` Antonino Daplas
2003-03-06 15:25 ` James Simmons
2003-03-06 15:27 ` James Simmons
2003-03-07 12:08 ` Thomas Winischhofer
2003-03-07 12:21 ` Geert Uytterhoeven
2003-03-07 18:19 ` James Simmons
2003-03-07 14:01 ` Antonino Daplas
2003-03-07 15:19 ` Thomas Winischhofer
2003-03-07 16:19 ` Antonino Daplas
2003-03-07 17:00 ` Thomas Winischhofer
2003-03-07 17:42 ` Antonino Daplas
2003-03-07 18:31 ` James Simmons
2003-03-07 17:49 ` Thomas Winischhofer
2003-03-11 16:23 ` James Simmons
2003-03-07 20:12 ` Antonino Daplas
2003-03-07 20:51 ` Thomas Winischhofer
2003-03-08 0:58 ` Antonino Daplas
2003-03-08 5:40 ` Antonino Daplas
2003-03-08 14:11 ` Thomas Winischhofer
2003-03-08 14:20 ` Thomas Winischhofer
2003-03-08 22:03 ` Antonino Daplas [this message]
2003-03-09 3:47 ` Thomas Winischhofer
2003-03-09 6:18 ` Antonino Daplas
2003-03-07 18:30 ` James Simmons
2003-03-11 16:07 ` James Simmons
2003-03-11 21:03 ` Thomas Winischhofer
2003-03-05 19:16 ` James Simmons
2003-03-05 19:30 ` Geert Uytterhoeven
2003-03-05 19:34 ` James Simmons
2003-03-05 22:13 ` Thomas Winischhofer
2003-03-05 23:53 ` James Simmons
2003-03-06 8:33 ` Geert Uytterhoeven
2003-03-06 9:00 ` Sven Luther
2003-03-06 9:03 ` Antonino Daplas
2003-03-11 16:29 ` James Simmons
2003-03-11 20:07 ` Antonino Daplas
2003-03-11 20:56 ` Thomas Winischhofer
2003-03-11 21:45 ` Antonino Daplas
2003-03-11 22:23 ` Thomas Winischhofer
2003-03-11 22:51 ` Antonino Daplas
2003-03-12 0:07 ` Michel Dänzer
2003-03-12 1:02 ` Antonino Daplas
2003-03-12 1:29 ` Michel Dänzer
2003-03-12 8:24 ` Geert Uytterhoeven
2003-03-12 15:56 ` Michel Dänzer
2003-03-11 22:27 ` Thomas Winischhofer
2003-03-11 22:51 ` Antonino Daplas
2003-03-11 23:12 ` Thomas Winischhofer
2003-03-05 14:12 ` Geert Uytterhoeven
2003-03-05 14:18 ` Thomas Winischhofer
2003-03-05 14:16 ` Thomas Winischhofer
2003-03-05 15:25 ` Antonino Daplas
2003-03-05 14:22 ` Thomas Winischhofer
2003-03-05 19:02 ` James Simmons
2003-03-06 1:18 ` Antonino Daplas
2003-03-05 18:57 ` James Simmons
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=1047160870.1212.73.camel@localhost.localdomain \
--to=adaplas@pol.net \
--cc=jsimmons@infradead.org \
--cc=linux-fbdev-devel@lists.sourceforge.net \
--cc=luther@dpt-info.u-strasbg.fr \
--cc=thomas@winischhofer.net \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).