When NDEBUG is not defined, assert that the IOBase is set correctly and is in sync MiscOut register bit 1. This is to catch issues in drivers.
Signed-off-by: Egbert Eich <[email protected]> --- hw/xfree86/vgahw/vgaHW.c | 36 ++++++++++++++++++++++++++++++++++++ 1 file changed, 36 insertions(+) diff --git a/hw/xfree86/vgahw/vgaHW.c b/hw/xfree86/vgahw/vgaHW.c index a64f4f8..947d242 100644 --- a/hw/xfree86/vgahw/vgaHW.c +++ b/hw/xfree86/vgahw/vgaHW.c @@ -565,6 +565,28 @@ vgaHWSetMmioFuncs(vgaHWPtr hwp, CARD8 *base, int offset) hwp->writeEnable = mmioWriteEnable; } +static +void vgaHWAssertIOBase(vgaHWPtr hwp) +{ +#ifndef NDEBUG + int scrnIndex = hwp->pScrn->scrnIndex; + switch (hwp->IOBase) { + case VGA_IOBASE_COLOR: + if ((hwp->readMiscOut(hwp) & 0x01) == 0) + xf86DrvMsg(scrnIndex, X_ERROR, + "VGA IOBase set to COLOR but hardware set to MONO\n"); + break; + case VGA_IOBASE_MONO: + if ((hwp->readMiscOut(hwp) & 0x01)) + xf86DrvMsg(scrnIndex, X_ERROR, + "VGA IOBase set to MONO but hardware set to COLOR\n"); + break; + default: + xf86DrvMsg(scrnIndex, X_ERROR, "VGA IOBase not initialized\n"); + } +#endif +} + /* * vgaHWProtect -- * Protect VGA registers and memory from corruption during loads. @@ -578,6 +600,9 @@ vgaHWProtect(ScrnInfoPtr pScrn, Bool on) unsigned char tmp; if (pScrn->vtSema) { + + vgaHWAssertIOBase(hwp); + if (on) { /* * Turn off screen and disable sequencer. @@ -683,6 +708,8 @@ vgaHWDPMSSet(ScrnInfoPtr pScrn, int PowerManagementMode, int flags) if (!pScrn->vtSema) return; + vgaHWAssertIOBase(hwp); + switch (PowerManagementMode) { case DPMSModeOn: /* Screen: On; HSync: On, VSync: On */ @@ -878,6 +905,7 @@ vgaHWRestoreColormap(ScrnInfoPtr scrninfp, vgaRegPtr restore) vgaHWPtr hwp = VGAHWPTR(scrninfp); int i; + vgaHWAssertIOBase(hwp); #if 0 hwp->enablePalette(hwp); #endif @@ -1054,6 +1082,8 @@ vgaHWSaveColormap(ScrnInfoPtr scrninfp, vgaRegPtr save) Bool readError = FALSE; int i; + vgaHWAssertIOBase(hwp); + #ifdef NEED_SAVED_CMAP /* * Some ET4000 chips from 1991 have a HW bug that prevents the reading @@ -1826,6 +1856,8 @@ vgaHWLoadPalette(ScrnInfoPtr pScrn, int numColors, int *indices, LOCO * colors, vgaHWPtr hwp = VGAHWPTR(pScrn); int i, index; + vgaHWAssertIOBase(hwp); + for (i = 0; i < numColors; i++) { index = indices[i]; hwp->writeDacWriteAddr(hwp, index); @@ -1847,6 +1879,8 @@ vgaHWSetOverscan(ScrnInfoPtr pScrn, int overscan) { vgaHWPtr hwp = VGAHWPTR(pScrn); + vgaHWAssertIOBase(hwp); + if (overscan < 0 || overscan > 255) return; @@ -1920,6 +1954,8 @@ vgaHWddc1SetSpeed(ScrnInfoPtr pScrn, xf86ddcSpeed speed) unsigned char tmp; struct _vgaDdcSave *save; + vgaHWAssertIOBase(hwp); + switch (speed) { case DDC_FAST: -- 1.8.1.4 _______________________________________________ [email protected]: X.Org development Archives: http://lists.x.org/archives/xorg-devel Info: http://lists.x.org/mailman/listinfo/xorg-devel
