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

Reply via email to