From: "Antonino A. Daplas" <adaplas@gmail.com>
To: linux-fbdev-devel@lists.sourceforge.net
Cc: "Alexander E. Patrakov" <patrakov@ums.usu.ru>
Subject: Re: save_vga question
Date: Sat, 17 Sep 2005 05:15:51 +0800 [thread overview]
Message-ID: <432B3607.7000307@gmail.com> (raw)
In-Reply-To: <432AEB03.5020009@ums.usu.ru>
Alexander E. Patrakov wrote:
> Hello,
>
> I am currently developing a framebuffer driver for S3 Trio 3D/2X cards.
> Well, I have a working non-accelerated driver and I am going to submit
> it later, but serious code cleanup is needed now.
>
> I see that other fb drivers save the card state on the first open and
> restore it when the open count reaches zero. I also implemented this,
> but certainly not in the best way: by writing custom functions that save
> all CRTC, Sequencer, Graphics and Attribute VGA-like registers. I think
> that using vga_save is better here (because it also saves e.g. fonts),
> but there is a problem. Some registers of the card lock/unlock other
> registers. So the code in my custom save function looks like this (e.g.
> for Sequencer registers):
>
> static void save_state(struct s3d2xfb_par * par)
> {
> /* ... */
> u8 sr08;
> /* ... */
> sr08 = readSR(par, 0x08);
> writeSR(par, 0x06, 0x08); /* Unlock SR10-15, otherwise they are
> unreadable */
> for (i=0; i<sizeof(par->saved_SR); i++)
> par->saved_SR[i] = readSR(par, i);
> par->saved_SR[0x08] = sr08;
> writeSR(par, sr08, 0x08);
> /* ... */
> }
>
> and the corresponding code in the restore function:
>
> static void restore_state(struct fb_info *info)
> {
> int i;
> struct s3d2xfb_par *par = (struct s3d2xfb_par *) info->par;
> s3d2xfb_unlock_regs(info); /* includes a writeSR(par, sr08, 0x08); */
> /* ... */
> for (i=0; i<sizeof(par->saved_SR); i++)
> if (i!=0x08)
> writeSR(par, par->saved_SR[i], i);
> /* ... */
> writeSR(par, par->saved_SR[0x08], 0x08);
> /* ... */
> }
>
> What's the recommended way of using the save_vga() function when such
> locking problems exist? Is it acceptable to manually save the state
> necessary to restore locking (SR08 in the example above), unlock
> everything, and then save the "unlocked" state with vga_save?
>
save_vga will only save/restore standard VGA registers, ie, in the case of the
sequencers, SR00 - SR04. Any registers above those are extended VGA
registers, ie, their purpose depend from hardware to hardware.
So you can do it 2 ways: One, you can save all standard VGA registers using
save_vga and save the extended VGA registers using your own function, unlocking
the locked registers, if necessary.
Another way is to set state->num_seq = 16, unlock all locked registers, then
call save_vga.
I prefer doing the first, but it's up to you. In both case, I think it's
important to save the registers in their "unlocked" state.
Tony
-------------------------------------------------------
SF.Net email is sponsored by:
Tame your development challenges with Apache's Geronimo App Server. Download
it for free - -and be entered to win a 42" plasma tv or your very own
Sony(tm)PSP. Click here to play: http://sourceforge.net/geronimo.php
prev parent reply other threads:[~2005-09-16 21:16 UTC|newest]
Thread overview: 2+ messages / expand[flat|nested] mbox.gz Atom feed top
2005-09-16 15:55 save_vga question Alexander E. Patrakov
2005-09-16 21:15 ` Antonino A. Daplas [this message]
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=432B3607.7000307@gmail.com \
--to=adaplas@gmail.com \
--cc=linux-fbdev-devel@lists.sourceforge.net \
--cc=patrakov@ums.usu.ru \
/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 an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.