On Wed, 2002-12-18 at 01:34, Dr Andrew C Aitchison wrote:
> These are in the order of my docs., but they show spaces between some of
> these registers; the frambuffer driver doesn't have a mapping array for
> this list of interesting registers to their addresses does it ?
You are correct, the framebuffer driver, to save space, saves the
register state in an 80 byte array (for later retrieval during VT
switching, I think). There's a parallel array of the actual register
offsets. This setup helps with registers that must be changed in order;
the linear setup of this array reflects proper order; the code doesn't
have to worry about that.
BUT...
I found the problem (actually, somebody else spotted it). Although the
mga driver is reaching the statement:
if (pMga->SyncOnGreen) {
MGA_NOT_HAL(pReg->DacRegs[MGA1064_GEN_CTL] &= ~0x20);
pReg->ExtVga[3] |= 0x40;
}
MGA_NOT_HAL not allowing the register to be set. It's definition is:
#define MGA_NOT_HAL(x) { \
MGAPtr pMga = MGAPTR(pScrn); \
if (!pMga->HALLoaded || !HAL_CHIPSETS) { x; } \
}
In this case, both "pMga->HALLoaded" and "HAL_CHIPSETS" are true.
So, sync-on-green isn't getting set.
Can anybody explain this code? Where would be a proper place to set the
sync-on-green?
I tried forcing the setting of that register at that place in the code,
and X crashed. So, it is indeed bad timing to set that register there.
Unfortunately, it never gets set anywhere else.
Help?
Chris
_______________________________________________
Xpert mailing list
[EMAIL PROTECTED]
http://XFree86.Org/mailman/listinfo/xpert