static int saveregs(unsigned char regs[]) { int i; unsigned int *p = (unsigned int *)(regs+VGA_TOTAL_REGS); unsigned char *q = regs+188; unlock(); p[0]=GLINT_READ_REG(Aperture0); p[1]=GLINT_READ_REG(Aperture1); p[2]=GLINT_READ_REG(PMFramebufferWriteMask); p[3]=GLINT_READ_REG(PMBypassWriteMask); p[4]=GLINT_READ_REG(DFIFODis); p[5]=GLINT_READ_REG(FIFODis); p[6]=GLINT_READ_REG(PMMemConfig); p[7]=GLINT_READ_REG(PMHTotal); p[8]=GLINT_READ_REG(PMHbEnd); p[9]=GLINT_READ_REG(PMHgEnd); p[10]=GLINT_READ_REG(PMScreenStride); p[24]=GLINT_READ_REG(PMHsStart); p[11]=GLINT_READ_REG(PMHsEnd); p[12]=GLINT_READ_REG(PMVTotal); p[13]=GLINT_READ_REG(PMVbEnd); p[14]=GLINT_READ_REG(PMVsStart); p[15]=GLINT_READ_REG(PMVsEnd); p[16]=GLINT_READ_REG(PMScreenBase); p[17]=GLINT_READ_REG(PMVideoControl); p[18]=GLINT_READ_REG(VClkCtl); p[19]=GLINT_READ_REG(ChipConfig); for(i=0;i<768;i++) { Permedia2ReadAddress(i); regs[128+VGA_TOTAL_REGS+i]=Permedia2ReadData(); } switch(chiptype) { case cPM2: p[25]=Permedia2InIndReg(PM2DACIndexMCR); p[26]=Permedia2InIndReg(PM2DACIndexMDCR); p[27]=Permedia2InIndReg(PM2DACIndexCMR); p[20]=Permedia2InIndReg(PM2DACIndexClockAM); p[21]=Permedia2InIndReg(PM2DACIndexClockAN); p[22]=Permedia2InIndReg(PM2DACIndexClockAP); break; case cPM2V: p[23]=GLINT_READ_REG(PM2VDACRDIndexControl); p[25]=Permedia2vInIndReg(PM2VDACRDOverlayKey); p[26]=Permedia2vInIndReg(PM2VDACRDSyncControl); p[27]=Permedia2vInIndReg(PM2VDACRDMiscControl); p[28]=Permedia2vInIndReg(PM2VDACRDDACControl); p[29]=Permedia2vInIndReg(PM2VDACRDPixelSize); p[30]=Permedia2vInIndReg(PM2VDACRDColorFormat); p[20]=Permedia2vInIndReg(PM2VDACRDDClk0PreScale); p[21]=Permedia2vInIndReg(PM2VDACRDDClk0FeedbackScale); p[22]=Permedia2vInIndReg(PM2VDACRDDClk0PostScale); for(i=0;i<6;i++) q[i]=Permedia2vInIndReg(PM2VDACRDCursorPalette+i); q[6]=Permedia2vInIndReg(PM2VDACRDCursorHotSpotX); q[7]=Permedia2vInIndReg(PM2VDACRDCursorHotSpotY); q[8]=Permedia2vInIndReg(PM2VDACRDCursorXLow); q[9]=Permedia2vInIndReg(PM2VDACRDCursorXHigh); q[10]=Permedia2vInIndReg(PM2VDACRDCursorYLow); q[11]=Permedia2vInIndReg(PM2VDACRDCursorYHigh); q[12]=Permedia2vInIndReg(PM2DACCursorControl); q[13]=Permedia2vInIndReg(PM2VDACRDCursorMode); break; } return TOTAL_REGS - VGA_TOTAL_REGS; }
void Permedia3Save(ScrnInfoPtr pScrn, GLINTRegPtr pReg) { GLINTPtr pGlint = GLINTPTR(pScrn); int i; /* We can't rely on the vgahw layer copying the font information * back properly, due to problems with MMIO access to VGA space * so we memcpy the information using the slow routines */ xf86SlowBcopy((CARD8*)pGlint->FbBase, (CARD8*)pGlint->VGAdata, 65536); if ((pGlint->numMultiDevices == 2) || (IS_J2000)) { SAVEREG(GCSRAperture); } if (pGlint->MultiAperture) { SAVEREG(GMultGLINTAperture); SAVEREG(GMultGLINT1); SAVEREG(GMultGLINT2); } /* Permedia 3 memory Timings */ SAVEREG(PM3MemBypassWriteMask); SAVEREG(PM3ByAperture1Mode); SAVEREG(PM3ByAperture2Mode); SAVEREG(ChipConfig); SAVEREG(Aperture0); SAVEREG(Aperture1); SAVEREG(PM3FifoControl); if (pGlint->Chipset == PCI_VENDOR_3DLABS_CHIP_GAMMA) SAVEREG(DFIFODis); SAVEREG(FIFODis); SAVEREG(PMHTotal); SAVEREG(PMHbEnd); SAVEREG(PMHgEnd); SAVEREG(PMScreenStride); SAVEREG(PMHsStart); SAVEREG(PMHsEnd); SAVEREG(PMVTotal); SAVEREG(PMVbEnd); SAVEREG(PMVsStart); SAVEREG(PMVsEnd); SAVEREG(PMScreenBase); SAVEREG(PMVideoControl); SAVEREG(VClkCtl); if (pGlint->UseFlatPanel) { SAVEREG(VSConfiguration); SAVEREG(VSBBase); } for (i=0;i<768;i++) { Permedia2ReadAddress(pScrn, i); pReg->cmap[i] = Permedia2ReadData(pScrn); } SAVEREG(PM2VDACRDIndexControl); P2VIN(PM2VDACRDOverlayKey); P2VIN(PM2VDACRDSyncControl); P2VIN(PM2VDACRDMiscControl); P2VIN(PM2VDACRDDACControl); P2VIN(PM2VDACRDPixelSize); P2VIN(PM2VDACRDColorFormat); P2VIN(PM2VDACRDDClk0PreScale); P2VIN(PM2VDACRDDClk0FeedbackScale); P2VIN(PM2VDACRDDClk0PostScale); }