From: "Alexander E. Patrakov" <patrakov@ums.usu.ru>
To: Linux Fbdev development list <linux-fbdev-devel@lists.sourceforge.net>
Subject: save_vga question
Date: Fri, 16 Sep 2005 21:55:47 +0600 [thread overview]
Message-ID: <432AEB03.5020009@ums.usu.ru> (raw)
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?
--
Alexander E. Patrakov
-------------------------------------------------------
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
next reply other threads:[~2005-09-16 16:00 UTC|newest]
Thread overview: 2+ messages / expand[flat|nested] mbox.gz Atom feed top
2005-09-16 15:55 Alexander E. Patrakov [this message]
2005-09-16 21:15 ` save_vga question Antonino A. Daplas
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=432AEB03.5020009@ums.usu.ru \
--to=patrakov@ums.usu.ru \
--cc=linux-fbdev-devel@lists.sourceforge.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 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.