Lines Matching defs:psav
130 static void SavageGetTvMaxSize(SavagePtr psav);
394 SavagePtr psav = SAVPTR(pScrn);
395 pPriv = xf86GetEntityPrivate(psav->pEnt->index,
409 ResetBCI2K( SavagePtr psav )
431 ShadowWait( SavagePtr psav )
436 if( !psav->NoPCIRetry )
439 psav->ShadowCounter = (psav->ShadowCounter + 1) & 0xffff;
440 if (psav->ShadowCounter == 0)
441 psav->ShadowCounter++; /* 0 is reserved for the BIOS
443 BCI_SEND( psav->dwBCIWait2DIdle );
444 BCI_SEND( 0x98000000 + psav->ShadowCounter );
447 (int)(psav->ShadowVirtual[psav->eventStatusReg] & 0xffff) !=
448 psav->ShadowCounter && (loop++ < MAXLOOP)
456 ShadowWaitQueue( SavagePtr psav, int v )
461 if (slots >= psav->bciThresholdHi)
462 slots = psav->bciThresholdHi;
464 return ShadowWait( psav );
468 if (psav->Chipset == S3_SAVAGE2000)
471 while( ((psav->ShadowVirtual[0] & psav->bciUsedMask) >= slots) && (loop++ < MAXLOOP))
480 WaitQueue3D( SavagePtr psav, int v )
486 if( psav->ShadowVirtual )
488 psav->WaitQueue = ShadowWaitQueue;
489 return ShadowWaitQueue(psav, v);
501 WaitQueue4( SavagePtr psav, int v )
506 if( !psav->NoPCIRetry )
509 if( psav->ShadowVirtual )
511 psav->WaitQueue = ShadowWaitQueue;
512 return ShadowWaitQueue(psav, v);
520 WaitQueue2K( SavagePtr psav, int v )
525 if( !psav->NoPCIRetry )
528 if( psav->ShadowVirtual )
530 psav->WaitQueue = ShadowWaitQueue;
531 return ShadowWaitQueue(psav, v);
537 ResetBCI2K(psav);
544 WaitIdleEmpty3D(SavagePtr psav)
548 if( psav->ShadowVirtual )
550 psav->WaitIdleEmpty = ShadowWait;
551 return ShadowWait(psav);
559 WaitIdleEmpty4(SavagePtr psav)
563 if( psav->ShadowVirtual )
565 psav->WaitIdleEmpty = ShadowWait;
566 return ShadowWait(psav);
575 WaitIdleEmpty2K(SavagePtr psav)
579 if( psav->ShadowVirtual )
581 psav->WaitIdleEmpty = ShadowWait;
582 return ShadowWait(psav);
587 ResetBCI2K(psav);
594 WaitIdle3D(SavagePtr psav)
598 if( psav->ShadowVirtual )
600 psav->WaitIdle = ShadowWait;
601 return ShadowWait(psav);
608 WaitIdle4(SavagePtr psav)
612 if( psav->ShadowVirtual )
614 psav->WaitIdle = ShadowWait;
615 return ShadowWait(psav);
624 WaitIdle2K(SavagePtr psav)
628 if( psav->ShadowVirtual )
630 psav->WaitIdle = ShadowWait;
631 return ShadowWait(psav);
689 SavagePtr psav;
708 psav = SAVPTR(pScrn);
710 psav->PciInfo = dev;
711 psav->Chipset = match_data;
788 SavagePtr psav;
807 psav = SAVPTR(pScrn);
809 psav->PciInfo = xf86GetPciInfoForEntity(pEnt->index);
811 psav->Chipset = xf86StringToToken(SavageChipsets,
814 psav->Chipset = LookupChipID(SavagePciChipsets,
817 psav->Chipset = LookupChipID(SavagePciChipsets,
818 psav->PciInfo->chipType);
877 SavagePtr psav= SAVPTR(pScrn);
883 switch( psav->Chipset ) {
888 psav->DDCPort = 0xAA;
889 psav->I2CPort = 0xA0;
896 psav->DDCPort = 0xB1;
897 psav->I2CPort = 0xA0;
908 InI2CREG(tmp,psav->DDCPort);
909 OutI2CREG(tmp | 0x13,psav->DDCPort);
910 pMon = xf86PrintEDID(xf86DoEDID_DDC2(XF86_SCRN_ARG(pScrn),psav->I2C));
911 if (!psav->IgnoreEDID) xf86SetDDCproperties(pScrn, pMon);
912 OutI2CREG(tmp,psav->DDCPort);
947 SavagePtr psav= SAVPTR(pScrn);
950 Mode = xf86CVTMode(psav->PanelX, psav->PanelY, 60.00, TRUE, FALSE);
979 SavagePtr psav= SAVPTR(pScrn);
1040 psav->PanelX = panelX;
1041 psav->PanelY = panelY;
1068 if( psav->LCDClock > 0.0 )
1070 psav->maxClock = psav->LCDClock * 1000.0;
1073 psav->LCDClock );
1076 psav->DisplayType = MT_CRT;
1084 SavagePtr psav;
1190 psav = SAVPTR(pScrn);
1195 psav->vgaIOBase = hwp->IOBase;
1202 if (!(psav->Options = malloc(sizeof(SavageOptions))))
1204 memcpy(psav->Options, SavageOptions, sizeof(SavageOptions));
1205 xf86ProcessOptions(pScrn->scrnIndex, pScrn->options, psav->Options);
1207 xf86GetOptValBool(psav->Options, OPTION_IGNORE_EDID, &psav->IgnoreEDID);
1208 xf86GetOptValBool(psav->Options, OPTION_PCI_BURST, &psav->pci_burst);
1210 if (psav->pci_burst) {
1215 psav->NoPCIRetry = 1; /* default */
1216 if (xf86ReturnOptValBool(psav->Options, OPTION_PCI_RETRY, FALSE)) {
1217 if (xf86ReturnOptValBool(psav->Options, OPTION_PCI_BURST, FALSE)) {
1218 psav->NoPCIRetry = 0;
1224 xf86GetOptValBool( psav->Options, OPTION_SHADOW_FB, &psav->shadowFB );
1225 if (psav->shadowFB) {
1229 psav->primStreamBpp = pScrn->bitsPerPixel;
1231 if ((s = xf86GetOptValString(psav->Options, OPTION_ROTATE))) {
1237 psav->shadowFB = TRUE;
1238 psav->rotate = 1;
1250 psav->shadowFB = TRUE;
1251 psav->rotate = -1;
1271 if (xf86GetOptValBool(psav->Options, OPTION_NOACCEL, &psav->NoAccel))
1275 if (psav->shadowFB && !psav->NoAccel) {
1278 psav->NoAccel = TRUE;
1281 if(!psav->NoAccel) {
1285 if((strptr = (char *)xf86GetOptValString(psav->Options, OPTION_ACCELMETHOD))) {
1288 psav->useEXA = FALSE;
1291 psav->useEXA = TRUE;
1295 psav->useEXA = TRUE;
1298 psav->useEXA ? "EXA" : "XAA");
1301 if ((s = xf86GetOptValString(psav->Options, OPTION_OVERLAY))) {
1303 if (psav->shadowFB) {
1309 psav->overlayDepth = 24;
1310 psav->NoAccel = TRUE; /* Preliminary */
1314 psav->overlayDepth = 16;
1315 psav->NoAccel = TRUE; /* Preliminary */
1323 psav->overlayDepth = 8;
1324 psav->NoAccel = TRUE; /* Preliminary */
1335 if (psav->overlayDepth) {
1337 pScrn->depth,psav->overlayDepth);
1338 psav->primStreamBpp = 8;
1343 if (pScrn->bitsPerPixel == 24 && !psav->NoAccel) {
1346 psav->NoAccel = TRUE;
1356 psav->hwcursor = psav->shadowFB ? FALSE : TRUE;
1357 if (xf86GetOptValBool(psav->Options, OPTION_HWCURSOR, &psav->hwcursor))
1359 if (xf86ReturnOptValBool(psav->Options, OPTION_SWCURSOR, FALSE)) {
1360 psav->hwcursor = FALSE;
1364 psav->hwcursor ? "HW" : "SW");
1367 psav->UseBIOS = TRUE;
1368 if (xf86GetOptValBool(psav->Options, OPTION_USEBIOS, &psav->UseBIOS) )
1371 psav->UseBIOS ? "U" : "Not u" );
1373 psav->LCDClock = 0.0;
1374 if( xf86GetOptValFreq( psav->Options, OPTION_LCDCLOCK, OPTUNITS_MHZ, &psav->LCDClock ) )
1376 "Option: LCDClock %1.2f MHz\n", psav->LCDClock );
1378 if( xf86GetOptValBool( psav->Options, OPTION_SHADOW_STATUS, &psav->ShadowStatus)) {
1380 "Option: ShadowStatus %sabled\n", psav->ShadowStatus ? "en" : "dis" );
1381 psav->ForceShadowStatus = TRUE;
1383 psav->ForceShadowStatus = FALSE;
1386 psav->ConfigShadowStatus = psav->ShadowStatus;
1388 if( xf86GetOptValBool( psav->Options, OPTION_CRT_ONLY, &psav->CrtOnly))
1392 if( xf86GetOptValBool( psav->Options, OPTION_TV_ON, &psav->TvOn)) {
1393 psav->PAL = FALSE;
1394 SavageGetTvMaxSize(psav);
1397 if( xf86GetOptValBool( psav->Options, OPTION_TV_PAL, &psav->PAL)) {
1398 SavageGetTvMaxSize(psav);
1399 psav->TvOn = TRUE;
1402 if( psav->TvOn )
1405 psav->PAL ? "PAL" : "NTSC" );
1407 psav->ForceInit = 0;
1408 if( xf86GetOptValBool( psav->Options, OPTION_FORCE_INIT, &psav->ForceInit))
1425 psav->EntityIndex = pEnt->index;
1428 psav->pVbe = VBEInit(NULL, pEnt->index);
1440 psav->ChipId = pEnt->device->chipID;
1443 psav->ChipId = pEnt->device->chipID;
1445 psav->Chipset);
1451 psav->ChipId = DEVICE_ID(psav->PciInfo);
1453 psav->Chipset);
1457 psav->ChipId, xf86TokenToString( SavageChips, psav->ChipId ) );
1460 psav->ChipRev = pEnt->device->chipRev;
1462 psav->ChipRev);
1464 psav->ChipRev = CHIP_REVISION(psav->PciInfo);
1474 psav->PciTag = pciTag(psav->PciInfo->bus, psav->PciInfo->device,
1475 psav->PciInfo->func);
1487 psav->IsPCI = (pci_device_get_agp_info(psav->PciInfo) == NULL);
1529 psav->IsPCI = TRUE;
1531 if (pciReadLong(psav->PciTag, PCI_CMD_STAT_REG) & SAVAGE_CAP_LIST) {
1534 cap_ptr = pciReadLong(psav->PciTag,
1539 cap_id = pciReadLong(psav->PciTag, cap_ptr);
1541 psav->IsPCI = FALSE;
1550 (psav->IsPCI) ? "PCI" : "AGP");
1552 if ((s = xf86GetOptValString(psav->Options, OPTION_BUS_TYPE))) {
1554 if (psav->IsPCI) {
1561 psav->IsPCI = TRUE;
1566 psav->IsPCI ? "PCI" : "AGP");
1570 psav->AgpDMA = !psav->IsPCI;
1571 if ((s = xf86GetOptValString(psav->Options, OPTION_DMA_TYPE))) {
1573 if (psav->IsPCI) {
1580 psav->AgpDMA = FALSE;
1585 psav->AgpDMA ? "AGP" : "PCI");
1589 "Using %s DMA\n", psav->AgpDMA ? "AGP" : "PCI");
1592 psav->CommandDMA = TRUE;
1593 psav->VertexDMA = TRUE;
1595 if ((s = xf86GetOptValString(psav->Options, OPTION_DMA_MODE))) {
1598 psav->VertexDMA = FALSE;
1600 psav->CommandDMA = FALSE;
1602 psav->VertexDMA = psav->CommandDMA = FALSE;
1608 if (psav->CommandDMA && S3_SAVAGE3D_SERIES(psav->Chipset)) {
1611 psav->CommandDMA = FALSE;
1613 if ((psav->CommandDMA || psav->VertexDMA) &&
1614 psav->Chipset == S3_SUPERSAVAGE) {
1617 psav->CommandDMA = psav->VertexDMA = FALSE;
1619 if (psav->CommandDMA && psav->VertexDMA)
1622 else if (psav->CommandDMA && !psav->VertexDMA)
1625 else if (!psav->CommandDMA && psav->VertexDMA)
1632 if (!psav->IsPCI) {
1634 psav->agpMode = SAVAGE_DEFAULT_AGP_MODE;
1635 /*psav->agpMode = SAVAGE_MAX_AGP_MODE;*/
1636 psav->agpSize = 16;
1638 if (xf86GetOptValInteger(psav->Options,
1639 OPTION_AGP_MODE, &(psav->agpMode))) {
1640 if (psav->agpMode < 1) {
1641 psav->agpMode = 1;
1643 if (psav->agpMode > SAVAGE_MAX_AGP_MODE) {
1644 psav->agpMode = SAVAGE_MAX_AGP_MODE;
1646 if ((psav->agpMode > 2) &&
1647 (psav->Chipset == S3_SAVAGE3D ||
1648 psav->Chipset == S3_SAVAGE_MX))
1649 psav->agpMode = 2; /* old savages only support 2x */
1654 psav->agpMode);
1657 if (xf86GetOptValInteger(psav->Options,
1658 OPTION_AGP_SIZE, (int *)&(psav->agpSize))) {
1659 switch (psav->agpSize) {
1671 "Illegal AGP size: %d MB, defaulting to 16 MB\n", psav->agpSize);
1672 psav->agpSize = 16;
1677 "Using %d MB AGP aperture\n", psav->agpSize);
1679 psav->agpMode = 0;
1680 psav->agpSize = 0;
1686 if (psav->Chipset == S3_SUPERSAVAGE)
1688 psav->bDisableTile = TRUE;
1690 psav->bDisableTile = FALSE;
1691 if (xf86GetOptValBool(psav->Options, OPTION_DISABLE_TILE,&psav->bDisableTile)) {
1693 "Option: %s Tile Mode and Program it \n",(psav->bDisableTile?"Disable":"Enable"));
1698 psav->bDisableXvMC = TRUE; /* if you want to free up more mem for DRI,etc. */
1699 if (xf86GetOptValBool(psav->Options, OPTION_DISABLE_XVMC, &psav->bDisableXvMC)) {
1701 "Option: %s Hardware XvMC support\n",(psav->bDisableXvMC?"Disable":"Enable"));
1705 psav->disableCOB = FALSE; /* if you are having problems on savage4+ */
1706 if (xf86GetOptValBool(psav->Options, OPTION_DISABLE_COB, &psav->disableCOB)) {
1708 "Option: %s the COB\n",(psav->disableCOB?"Disable":"Enable"));
1710 if (psav->Chipset == S3_PROSAVAGE ||
1711 psav->Chipset == S3_TWISTER ||
1712 psav->Chipset == S3_PROSAVAGEDDR)
1713 psav->BCIforXv = TRUE;
1715 psav->BCIforXv = FALSE; /* use the BCI for Xv */
1716 if (xf86GetOptValBool(psav->Options, OPTION_BCI_FOR_XV, &psav->BCIforXv)) {
1718 "Option: %s use of the BCI for Xv\n",(psav->BCIforXv?"Enable":"Disable"));
1720 psav->dvi = FALSE;
1721 if (xf86GetOptValBool(psav->Options, OPTION_DVI, &psav->dvi)) {
1723 "%s DVI port support (Savage4 only)\n",(psav->dvi?"Force":"Disable"));
1727 psav->AGPforXv = FALSE;
1728 if (xf86GetOptValBool(psav->Options, OPTION_AGP_FOR_XV, &psav->AGPforXv)) {
1729 if (psav->AGPforXv) {
1730 if (psav->agpSize == 0) {
1731 psav->AGPforXv = FALSE;
1736 "Option: %s use of AGP buffer for Xv\n",(psav->AGPforXv?"Enable":"Disable"));
1743 psav = SAVPTR(pScrn);
1744 psav->IsSecondary = FALSE;
1745 psav->IsPrimary = FALSE;
1746 psav->pEnt = xf86GetEntityInfo(pScrn->entityList[pScrn->numEntities - 1]);
1748 if (xf86IsEntityShared(psav->pEnt->index)) {
1749 if (xf86IsPrimInitDone(psav->pEnt->index)) {
1753 psav->IsSecondary = TRUE;
1755 psav->TvOn = pSavageEnt->TvOn;
1759 xf86SetPrimInitDone(psav->pEnt->index);
1761 psav->IsPrimary = TRUE;
1763 pSavageEnt->TvOn = psav->TvOn;
1767 switch(psav->Chipset) {
1770 psav->HasCRTC2 = TRUE;
1773 psav->HasCRTC2 = FALSE;
1776 if ((psav->IsSecondary || psav->IsPrimary) && !psav->UseBIOS) {
1781 if (psav->IsSecondary &&
1783 !psav->NoAccel &&
1784 (psav->Chipset == S3_SAVAGE_MX)) {
1793 vbeFree(psav->pVbe);
1794 psav->pVbe = NULL;
1798 vgaCRIndex = psav->vgaIOBase + 4;
1799 vgaCRReg = psav->vgaIOBase + 5;
1824 vbeFree(psav->pVbe);
1825 psav->pVbe = NULL;
1847 switch( psav->Chipset ) {
1886 psav->videoRambytes = pScrn->videoRam * 1024;
1892 psav->videoRambytes = pScrn->videoRam * 1024;
1900 if( !pScrn->videoRam && psav->pVbe )
1906 vib = VBEGetVBEInfo( psav->pVbe );
1915 psav->videoRambytes = pScrn->videoRam * 1024;
1925 if (psav->NoAccel) {
1926 psav->cobIndex = 0;
1927 psav->cobSize = 0;
1929 else if( ((S3_SAVAGE4_SERIES(psav->Chipset)) ||
1930 (S3_SUPERSAVAGE == psav->Chipset)) && psav->disableCOB ) {
1936 psav->cobIndex = 2;
1937 psav->cobSize = 0x8000 << psav->cobIndex;
1939 psav->cobIndex = 0;
1940 psav->cobSize = 0;
1941 psav->bciThresholdHi = 32;
1942 psav->bciThresholdLo = 0;
1945 psav->cobSize = 0x20000;
1946 if (S3_SAVAGE3D_SERIES(psav->Chipset) ||
1947 psav->Chipset == S3_SAVAGE2000) {
1948 psav->cobIndex = 7; /* rev.A savage4 apparently also uses 7 */
1950 psav->cobIndex = 2;
1953 psav->bciThresholdHi = psav->cobSize/4 + 32 - 2560;
1954 psav->bciThresholdLo = psav->bciThresholdHi - 2560;
1958 psav->cobOffset = (psav->videoRambytes - psav->cobSize) & ~0x1ffff;
1961 psav->CursorKByte = (psav->cobOffset >> 10) - 4;
1962 psav->endfb = (psav->CursorKByte << 10) - 1;
1964 if (psav->IsPrimary) {
1966 psav->videoRambytes = pScrn->videoRam * 1024;
1967 psav->CursorKByte = (psav->videoRambytes >> 10) - 4;
1968 psav->endfb = (psav->CursorKByte << 10) - 1;
1969 psav->videoRambytes *= 2;
1975 if(psav->IsSecondary)
1978 /*psav->videoRambytes = pScrn->videoRam * 1024;*/
1984 pScrn->fbOffset = (psav->IsSecondary)
2002 if (psav->Chipset == S3_SAVAGE4) {
2014 if( (S3_SAVAGE_MOBILE_SERIES(psav->Chipset) ||
2015 S3_MOBILE_TWISTER_SERIES(psav->Chipset)) && !psav->CrtOnly ) {
2016 psav->DisplayType = MT_LCD;
2017 } else if (dvi || ((psav->Chipset == S3_SAVAGE4) && psav->dvi)) {
2018 psav->DisplayType = MT_DFP;
2020 psav->DisplayType = MT_CRT;
2023 if (psav->IsSecondary)
2024 psav->DisplayType = MT_CRT;
2031 psav->maxClock = 220000;
2033 psav->maxClock = 250000;
2057 if(psav->DisplayType == MT_LCD)
2061 if(psav->DisplayType == MT_LCD)
2065 if (psav->CrtOnly && !psav->UseBIOS) {
2068 if (S3_SAVAGE_MOBILE_SERIES(psav->Chipset) /*||
2069 S3_MOBILE_TWISTER_SERIES(psav->Chipset)*/) { /* not sure this works on mobile prosavage */
2076 if( psav->UseBIOS )
2080 if( psav->ModeTable )
2082 SavageFreeBIOSModeTable( psav, &psav->ModeTable );
2085 psav->ModeTable = SavageGetBIOSModeTable( psav, psav->primStreamBpp );
2087 if( !psav->ModeTable || !psav->ModeTable->NumModes ) {
2090 psav->UseBIOS = FALSE;
2099 psav->ModeTable->NumModes);
2102 i = 0, pmt = psav->ModeTable->Modes;
2103 i < psav->ModeTable->NumModes;
2121 clockRanges->maxClock = psav->maxClock;
2133 psav->videoRambytes, LOOKUP_BEST_REFRESH);
2138 vbeFree(psav->pVbe);
2139 psav->pVbe = NULL;
2148 vbeFree(psav->pVbe);
2149 psav->pVbe = NULL;
2160 vbeFree(psav->pVbe);
2161 psav->pVbe = NULL;
2165 if( !psav->NoAccel ) {
2166 if (psav->useEXA) {
2179 vbeFree(psav->pVbe);
2180 psav->pVbe = NULL;
2189 psav->NoAccel = 1;
2190 psav->shadowFB = 1;
2195 if (psav->hwcursor) {
2198 vbeFree(psav->pVbe);
2199 psav->pVbe = NULL;
2204 if (psav->shadowFB) {
2207 vbeFree(psav->pVbe);
2208 psav->pVbe = NULL;
2212 vbeFree(psav->pVbe);
2214 psav->pVbe = NULL;
2224 SavagePtr psav = SAVPTR(pScrn);
2232 if (psav->directRenderingEnabled) {
2236 psav->LockHeld = 0;
2256 SavagePtr psav = SAVPTR(pScrn);
2258 SavageRegPtr SavageSavePtr = &psav->SavedReg;
2267 if (psav->directRenderingEnabled) {
2270 psav->LockHeld = 1;
2273 if (psav->FBStart2nd || (psav->videoFlags & VF_STREAMS_ON))
2287 SavagePtr psav = SAVPTR(pScrn);
2288 SavageRegPtr save = &psav->SavedReg;
2289 unsigned short vgaCRReg = psav->vgaIOBase + 5;
2290 unsigned short vgaCRIndex = psav->vgaIOBase + 4;
2308 if (xf86IsPrimaryPci(psav->PciInfo))
2420 if( S3_SAVAGE_MOBILE_SERIES(psav->Chipset) ||
2421 S3_MOBILE_TWISTER_SERIES(psav->Chipset)) {
2437 if( ! S3_SAVAGE_MOBILE_SERIES(psav->Chipset) ) {
2449 if (!psav->ModeStructInit) {
2451 memcpy(&psav->ModeReg, save, sizeof(SavageRegRec));
2452 psav->ModeStructInit = TRUE;
2469 SavagePtr psav = SAVPTR(pScrn);
2480 if (psav->directRenderingEnabled) {
2482 psav->LockHeld = 1;
2486 if (psav->IsSecondary) {
2488 SavageSetVESAMode( psav, restore->mode | 0x8000, restore->refresh );
2494 (!S3_SAVAGE_MOBILE_SERIES(psav->Chipset) || (psav->ForceInit))
2503 if( psav->UseBIOS && restore->mode > 0x13 )
2510 SavageSetVESAMode( psav, restore->mode | 0x8000, restore->refresh );
2549 if( (pScrn->bitsPerPixel == 32) && !psav->DGAactive
2550 && ! psav->FBStart2nd )
2563 if( !S3_SAVAGE_MOBILE_SERIES(psav->Chipset) )
2572 if(psav->primStreamBpp == 32 )
2589 else if( psav->primStreamBpp == 16)
2609 if( (psav->Chipset != S3_SAVAGE2000) &&
2610 !S3_SAVAGE_MOBILE_SERIES(psav->Chipset) )
2626 width = (pScrn->displayWidth * (psav->primStreamBpp / 8)) >> 3;
2632 switch( psav->Chipset )
2673 if (psav->directRenderingEnabled)
2675 psav->LockHeld = 0;
2689 psav->STREAMSRunning = 0;
2703 if( ((restore->CR31 & 0x0a) == 0) && psav->pVbe ) {
2704 SavageSetTextMode( psav );
2740 if( S3_SAVAGE_MOBILE_SERIES(psav->Chipset) ||
2741 S3_MOBILE_TWISTER_SERIES(psav->Chipset)) {
2750 if (xf86IsPrimaryPci(psav->PciInfo))
2813 if( psav->Chipset == S3_SAVAGE4 )
2851 if( psav->DGAactive )
2891 if( !S3_SAVAGE_MOBILE_SERIES(psav->Chipset) )
2904 if( Entering && (!psav->NoAccel) )
2929 if (psav->directRenderingEnabled)
2931 psav->LockHeld = 0;
2940 SavagePtr psav = SAVPTR(pScrn);
2945 if( S3_SAVAGE3D_SERIES(psav->Chipset) ) {
2947 psav->MmioRegion.base = SAVAGE_NEWMMIO_REGBASE_S3
2948 + psav->PciInfo->regions[0].base_addr;
2949 psav->FbRegion.base = psav->PciInfo->regions[0].base_addr;
2951 psav->MmioRegion.base = SAVAGE_NEWMMIO_REGBASE_S3
2952 + psav->PciInfo->memBase[0];
2953 psav->FbRegion.base = psav->PciInfo->memBase[0];
2957 psav->MmioRegion.base = SAVAGE_NEWMMIO_REGBASE_S4
2958 + psav->PciInfo->regions[0].base_addr;
2959 psav->FbRegion.base = psav->PciInfo->regions[1].base_addr;
2961 psav->MmioRegion.base = SAVAGE_NEWMMIO_REGBASE_S4
2962 + psav->PciInfo->memBase[0];
2963 psav->FbRegion.base = psav->PciInfo->memBase[1];
2967 psav->MmioRegion.size = SAVAGE_NEWMMIO_REGSIZE;
2968 psav->FbRegion.size = psav->videoRambytes;
2974 psav->ApertureRegion.size = (psav->IsPrimary || psav->IsSecondary)
2977 if ((psav->Chipset == S3_SUPERSAVAGE)
2978 || (psav->Chipset == S3_SAVAGE2000)) {
2980 psav->ApertureRegion.base = psav->PciInfo->regions[2].base_addr;
2981 if (psav->ApertureRegion.size > psav->PciInfo->regions[2].size)
2982 psav->ApertureRegion.size = psav->PciInfo->regions[2].size;
2984 psav->ApertureRegion.base = psav->PciInfo->memBase[2];
2987 psav->ApertureRegion.base = psav->FbRegion.base + 0x02000000;
2992 if (psav->FbRegion.size != 0) {
2994 err = pci_device_map_range(psav->PciInfo, psav->FbRegion.base,
2995 psav->FbRegion.size,
2998 & psav->FbRegion.memory);
3000 psav->FbRegion.memory =
3002 psav->PciTag, psav->FbRegion.base,
3003 psav->FbRegion.size);
3004 err = (psav->FbRegion.memory == NULL) ? errno : 0;
3013 psav->FBBase = psav->FbRegion.memory;
3014 psav->FBStart = (psav->IsSecondary)
3015 ? psav->FBBase + 0x1000000 : psav->FBBase;
3018 if (psav->ApertureRegion.memory == NULL) {
3020 err = pci_device_map_range(psav->PciInfo, psav->ApertureRegion.base,
3021 psav->ApertureRegion.size,
3024 & psav->ApertureRegion.memory);
3026 psav->ApertureRegion.memory =
3028 psav->PciTag, psav->ApertureRegion.base,
3029 psav->ApertureRegion.size);
3030 err = (psav->ApertureRegion.memory == NULL) ? errno : 0;
3039 psav->ApertureMap = (psav->IsSecondary)
3040 ? psav->ApertureRegion.memory + 0x1000000
3041 : psav->ApertureRegion.memory;
3044 if (psav->MmioRegion.memory == NULL) {
3046 err = pci_device_map_range(psav->PciInfo, psav->MmioRegion.base,
3047 psav->MmioRegion.size,
3049 & psav->MmioRegion.memory);
3051 psav->MmioRegion.memory =
3053 psav->PciTag, psav->MmioRegion.base,
3054 psav->MmioRegion.size);
3055 err = (psav->MmioRegion.memory == NULL) ? errno : 0;
3064 psav->MapBase = psav->MmioRegion.memory;
3065 psav->BciMem = psav->MapBase + 0x10000;
3070 pScrn->memPhysBase = psav->FbRegion.base;
3077 SavagePtr psav = SAVPTR(pScrn);
3079 TRACE(("SavageUnmapMem(%p,%p)\n", psav->MapBase, psav->FBBase));
3081 if (psav->PrimaryVidMapped) {
3083 psav->PrimaryVidMapped = FALSE;
3088 if (All && (psav->MmioRegion.memory != NULL)) {
3090 pci_device_unmap_range(psav->PciInfo,
3091 psav->MmioRegion.memory,
3092 psav->MmioRegion.size);
3094 xf86UnMapVidMem(pScrn->scrnIndex, (pointer)psav->MapBase,
3098 psav->MmioRegion.memory = NULL;
3099 psav->MapBase = 0;
3100 psav->BciMem = 0;
3103 if (psav->FbRegion.memory != NULL) {
3105 pci_device_unmap_range(psav->PciInfo,
3106 psav->FbRegion.memory,
3107 psav->FbRegion.size);
3109 xf86UnMapVidMem(pScrn->scrnIndex, (pointer)psav->FbRegion.base,
3110 psav->FbRegion.size);
3114 if (psav->ApertureRegion.memory != NULL) {
3116 pci_device_unmap_range(psav->PciInfo,
3117 psav->ApertureRegion.memory,
3118 psav->ApertureRegion.size);
3120 xf86UnMapVidMem(pScrn->scrnIndex, (pointer)psav->ApertureRegion.base,
3121 psav->ApertureRegion.size);
3125 psav->FbRegion.memory = NULL;
3126 psav->ApertureRegion.memory = NULL;
3127 psav->FBBase = 0;
3128 psav->FBStart = 0;
3129 psav->ApertureMap = 0;
3137 SavagePtr psav = SAVPTR(pScrn);
3148 psav->cobSize + /*COB*/
3155 RamNeededFor3D/1024, psav->videoRambytes/1024);
3157 if (RamNeededFor3D <= psav->videoRambytes) {
3171 SavagePtr psav = SAVPTR(pScrn);
3173 switch( psav->Chipset ) {
3176 psav->WaitQueue = WaitQueue3D;
3177 psav->WaitIdle = WaitIdle3D;
3178 psav->WaitIdleEmpty = WaitIdleEmpty3D;
3179 psav->bciUsedMask = 0x1ffff;
3180 psav->eventStatusReg= 1;
3188 psav->WaitQueue = WaitQueue4;
3189 psav->WaitIdle = WaitIdle4;
3190 psav->WaitIdleEmpty = WaitIdleEmpty4;
3191 psav->bciUsedMask = 0x1fffff;
3192 psav->eventStatusReg= 1;
3196 psav->WaitQueue = WaitQueue2K;
3197 psav->WaitIdle = WaitIdle2K;
3198 psav->WaitIdleEmpty = WaitIdleEmpty2K;
3199 psav->bciUsedMask = 0xfffff;
3200 psav->eventStatusReg= 2;
3207 SavagePtr psav = SAVPTR(pScrn);
3209 psav->ShadowStatus = psav->ConfigShadowStatus;
3213 if( psav->ShadowStatus ) {
3214 psav->ShadowPhysical =
3215 psav->FbRegion.base + psav->CursorKByte*1024 + 4096 - 32;
3217 psav->ShadowVirtual = (CARD32 *)
3218 (psav->FBBase + psav->CursorKByte*1024 + 4096 - 32);
3222 psav->ShadowPhysical, (void *)psav->ShadowVirtual );
3224 psav->WaitQueue = ShadowWaitQueue;
3225 psav->WaitIdle = ShadowWait;
3226 psav->WaitIdleEmpty = ShadowWait;
3229 if( psav->Chipset == S3_SAVAGE2000 )
3230 psav->dwBCIWait2DIdle = 0xc0040000;
3232 psav->dwBCIWait2DIdle = 0xc0020000;
3238 SavagePtr psav;
3245 psav = SAVPTR(pScrn);
3248 if (!psav->pVbe)
3249 psav->pVbe = VBEInit(NULL, pEnt->index);
3256 psav->FBStart2nd = 0;
3258 if (psav->overlayDepth) {
3261 > (psav->CursorKByte * 1024))
3264 else psav->FBStart2nd = psav->FBStart
3270 psav->ShadowCounter = 0;
3277 if (!xf86ReturnOptValBool(psav->Options, OPTION_DRI, TRUE)) {
3278 psav->directRenderingEnabled = FALSE;
3281 } else if (psav->IsSecondary) {
3282 psav->directRenderingEnabled = FALSE;
3283 } else if (xf86IsEntityShared(psav->pEnt->index)) {
3285 psav->directRenderingEnabled = FALSE;
3290 } else if (/*!psav->bTiled*/psav->bDisableTile) {
3294 } else if (psav->cobSize == 0) {
3298 } else if (((psav->Chipset == S3_TWISTER)
3299 || (psav->Chipset == S3_PROSAVAGE)
3300 || (psav->Chipset == S3_SAVAGE4)
3301 || (psav->Chipset == S3_SAVAGE_MX)
3302 || (psav->Chipset == S3_SAVAGE3D)
3303 || (psav->Chipset == S3_SUPERSAVAGE)
3304 || (psav->Chipset == S3_PROSAVAGEDDR))
3305 && (!psav->NoAccel)
3308 psav->directRenderingEnabled = SAVAGEDRIScreenInit(pScreen);
3310 if (!psav->directRenderingEnabled &&
3311 psav->ShadowStatus != psav->ConfigShadowStatus) {
3317 else if (psav->ShadowStatus && !psav->ConfigShadowStatus) {
3318 psav->WaitQueue = ShadowWaitQueue;
3319 psav->WaitIdle = ShadowWait;
3320 psav->WaitIdleEmpty = ShadowWait;
3323 psav->directRenderingEnabled = FALSE;
3325 if(psav->directRenderingEnabled) {
3341 visual = ((psav->FBStart2nd && pScrn->bitsPerPixel > 8)
3348 if (psav->FBStart2nd) {/* we have overlay */
3349 visual = psav->overlayDepth > 8 ? TrueColorMask :
3350 miGetDefaultVisualMask(DEPTH_BPP(psav->overlayDepth));
3351 if (!miSetVisualTypes(psav->overlayDepth, visual,
3352 psav->overlayDepth > 8 ? 8 : 6,
3414 psav->overlay.redMask = visual->redMask;
3415 psav->overlay.greenMask = visual->greenMask;
3416 psav->overlay.blueMask = visual->blueMask;
3417 psav->overlay.redShift = visual->offsetRed + c_s;
3418 psav->overlay.greenShift = visual->offsetGreen + c_s;
3419 psav->overlay.blueShift = visual->offsetBlue + c_s;
3428 if( !psav->NoAccel ) {
3434 if( !psav->shadowFB && !psav->useEXA )
3439 if (psav->hwcursor)
3444 if (psav->shadowFB) {
3447 if(psav->rotate) {
3448 if (!psav->PointerMoved) {
3449 psav->PointerMoved = pScrn->PointerMoved;
3468 | ((psav->FBStart2nd) ? 0 : CMAP_PALETTED_TRUECOLOR);
3470 if (psav->Chipset == S3_SAVAGE4) {
3482 psav->CloseScreen = pScreen->CloseScreen;
3490 if (psav->directRenderingEnabled) {
3492 psav->directRenderingEnabled = SAVAGEDRIFinishScreenInit(pScreen);
3495 if (!psav->directRenderingEnabled &&
3496 psav->ShadowStatus != psav->ConfigShadowStatus) {
3502 if (psav->directRenderingEnabled) {
3511 if( !psav->FBStart2nd && !psav->NoAccel /*&& !SavagePanningCheck(pScrn)*/ ) {
3512 if (psav->IsSecondary)
3521 if ((psav->directRenderingEnabled) && (!psav->bDisableXvMC)) {
3528 if (!psav->directRenderingEnabled && psav->AGPforXv) {
3530 psav->AGPforXv = FALSE;
3545 SavagePtr psav;
3552 psav = SAVPTR(pScrn);
3556 if (psav->rotate) {
3565 if(psav->shadowFB) {
3566 psav->ShadowPitch = BitmapBytePad(pScrn->bitsPerPixel * width);
3567 psav->ShadowPtr = malloc(psav->ShadowPitch * height);
3568 displayWidth = psav->ShadowPitch / (pScrn->bitsPerPixel >> 3);
3569 FBStart = psav->ShadowPtr;
3571 psav->ShadowPtr = NULL;
3572 FBStart = psav->FBStart;
3575 if (!psav->FBStart2nd) {
3579 psav->ulAperturePitch / (pScrn->bitsPerPixel >> 3), /*displayWidth,*/
3590 psav->FBStart2nd, width,
3598 ret = fbOverlayFinishScreenInit (pScreen, psav->FBStart2nd,
3630 SavagePtr psav = SAVPTR(pScrn);
3638 if( psav->TvOn )
3640 if( pMode->HDisplay > psav->TVSizeX )
3643 if( pMode->VDisplay > psav->TVSizeY )
3648 if((psav->DisplayType == MT_LCD) &&
3649 ((pMode->HDisplay > psav->PanelX) ||
3650 (pMode->VDisplay > psav->PanelY)))
3661 if (psav->UseBIOS) {
3674 SavagePtr psav = SAVPTR(pScrn);
3678 SavageRegPtr new = &psav->ModeReg;
3708 if (psav->IsSecondary) {
3720 if (psav->FBStart2nd) {
3732 psav->HorizScaleFactor = 1;
3734 psav->HorizScaleFactor = 1; /* I don't think we ever want 2 */
3736 psav->HorizScaleFactor = 1;
3738 if (psav->HorizScaleFactor == 2)
3750 psav->HorizScaleFactor = 1;
3765 if( (psav->Chipset == S3_SAVAGE2000) && (dclk >= 230000) )
3772 S3_SAVAGE_MOBILE_SERIES(psav->Chipset) ||
3773 ((psav->Chipset == S3_SAVAGE2000) && (dclk >= 230000))
3781 S3_SAVAGE_MOBILE_SERIES(psav->Chipset) ||
3782 ((psav->Chipset == S3_SAVAGE2000) && (dclk >= 230000))
3789 if (psav->primStreamBpp == 24 )
3797 if( psav->UseBIOS ) {
3817 if (psav->pci_burst)
3833 if (psav->hwcursor)
3860 if (psav->fifo_aggressive || psav->fifo_moderate ||
3861 psav->fifo_conservative) {
3867 if (psav->MCLK <= 0) {
3872 psav->NeedSTREAMS = FALSE;
3880 if (psav->fifo_moderate) {
3881 if (psav->primStreamBpp < 24)
3885 } else if (psav->fifo_aggressive) {
3886 if (psav->primStreamBpp < 24)
3926 width = (pScrn->displayWidth * (psav->primStreamBpp / 8)) >> 3;
3934 if (psav->primStreamBpp <= 8)
3936 else if (psav->primStreamBpp <= 16)
3956 if( S3_SAVAGE_MOBILE_SERIES(psav->Chipset) )
3986 if (psav->FBStart2nd) {
4001 SavagePtr psav = SAVPTR(pScrn);
4003 SavageRegPtr SavageSavePtr = &psav->SavedReg;
4008 if (psav->directRenderingEnabled) {
4012 psav->directRenderingEnabled=FALSE;
4016 if (psav->EXADriverPtr) {
4018 psav->EXADriverPtr = NULL;
4022 if( psav->AccelInfoRec ) {
4023 XAADestroyInfoRec( psav->AccelInfoRec );
4024 psav->AccelInfoRec = NULL;
4028 if( psav->DGAModes ) {
4029 free( psav->DGAModes );
4030 psav->DGAModes = NULL;
4031 psav->numDGAModes = 0;
4035 if (psav->FBStart2nd)
4043 if (psav->pVbe)
4044 vbeFree(psav->pVbe);
4045 psav->pVbe = NULL;
4048 pScreen->CloseScreen = psav->CloseScreen;
4075 SavagePtr psav = SAVPTR(pScrn);
4077 if (psav->IsSecondary) {
4088 SavagePtr psav = SAVPTR(pScrn);
4093 if (psav->Chipset == S3_SAVAGE2000) {
4101 if (!psav->bTiled) {
4104 address = (top * psav->lDelta) + left * (pScrn->bitsPerPixel >> 3);
4110 address = top * psav->lDelta + left * tile_size / TILEWIDTH_16BPP;
4113 address = top * psav->lDelta + left * tile_size / TILEWIDTH_32BPP;
4119 if (psav->Chipset == S3_SAVAGE_MX) {
4127 } else if (psav->Chipset == S3_SUPERSAVAGE) {
4137 } else if (psav->Chipset == S3_SAVAGE2000) {
4152 SavagePtr psav = SAVPTR(pScrn);
4157 if (psav->FBStart2nd || (psav->videoFlags & VF_STREAMS_ON))
4163 if (psav->IsPrimary) {
4180 SavagePtr psav = SAVPTR(pScrn);
4187 vgaHWSetMmioFuncs(hwp, psav->MapBase, 0x8000);
4192 vgaCRIndex = psav->vgaIOBase + 4;
4193 vgaCRReg = psav->vgaIOBase + 5;
4195 if( psav->Chipset >= S3_SAVAGE4 )
4209 SavagePtr psav = SAVPTR(pScrn);
4215 vgaCRIndex = psav->vgaIOBase + 4;
4216 vgaCRReg = psav->vgaIOBase + 5;
4218 if( psav->Chipset >= S3_SAVAGE4 )
4233 SavagePtr psav = SAVPTR(pScrn);
4239 if (psav->IsPrimary) {
4248 } else if (psav->IsSecondary) {
4269 if (psav->IsPrimary || psav->IsSecondary) {
4285 SavagePtr psav = SAVPTR(pScrn);
4295 || !psav->FBStart2nd
4298 key = ((Shift(r,psav->overlay.redShift) & psav->overlay.redMask)
4299 | (Shift(g,psav->overlay.greenShift) & psav->overlay.greenMask)
4300 | (Shift(b,psav->overlay.blueShift) & psav->overlay.blueMask));
4316 SavagePtr psav = SAVPTR(pScrn);
4401 SavagePtr psav = SAVPTR(pScrn);
4411 if (psav->GEResetCnt++ < 10 || xf86GetVerbosity() > 1)
4415 psav->WaitIdleEmpty(psav);
4417 if (from_timeout && !S3_SAVAGE_MOBILE_SERIES(psav->Chipset) ) {
4435 psav->WaitIdleEmpty(psav);
4436 OUTREG(DEST_SRC_STR, psav->Bpl << 16 | psav->Bpl);
4439 switch(psav->Chipset) {
4466 if (from_timeout && !S3_SAVAGE_MOBILE_SERIES(psav->Chipset) ) {
4476 OUTREG(CLIP_T_B, ((0) << 16) | psav->ScissB);
4491 SavagePtr psav = SAVPTR(pScrn);
4519 SavagePtr psav = SAVPTR(pScrn);
4524 if (psav->DisplayType == MT_CRT) {
4556 if (psav->DisplayType == MT_LCD || psav->DisplayType == MT_DFP) {
4557 if (S3_MOBILE_TWISTER_SERIES(psav->Chipset) && psav->UseBIOS) {
4558 SavageSetPanelEnabled(psav, (mode == DPMSModeOn));
4597 SavagePtr psav = SAVPTR(pScrn);
4603 InI2CREG(tmp,psav->I2CPort);
4617 SavagePtr psav = SAVPTR(pScrn);
4624 InI2CREG(byte,psav->I2CPort);
4625 OutI2CREG(byte | 0x12,psav->I2CPort);
4634 if (!psav->IgnoreEDID)
4638 OutI2CREG(byte,psav->I2CPort);
4644 SavageGetTvMaxSize(SavagePtr psav)
4646 if( psav->PAL ) {
4647 psav->TVSizeX = 800;
4648 psav->TVSizeY = 600;
4651 psav->TVSizeX = 640;
4652 psav->TVSizeY = 480;
4660 SavagePtr psav = SAVPTR(pScrn);
4661 psav->iResX = pMode->CrtcHDisplay;
4662 psav->iResY = pMode->CrtcVDisplay;
4664 if ((psav->iResX < psav->PanelX || psav->iResY < psav->PanelY))
4665 psav->FPExpansion = TRUE;
4667 psav->FPExpansion = FALSE;
4669 if( psav->iResX < pScrn->virtualX || psav->iResY < pScrn->virtualY )
4678 SavagePtr psav = SAVPTR(pScrn);
4683 switch (psav->Chipset) {