diff options
author | Luc Verhaegen <libv@skynet.be> | 2006-04-17 15:56:41 +0200 |
---|---|---|
committer | Luc Verhaegen <libv@skynet.be> | 2006-04-17 15:56:41 +0200 |
commit | 8e87a79089cef494c8e6669ddf4e314af6bbca49 (patch) | |
tree | 83b27e4ed58b1f1828b8156297180d491588b9c7 | |
parent | 484262fdcffdc1ba008d324561543dd723ad3e57 (diff) |
Split up Mach64ChipIDInfo:
- chip version on the basis of revision -> Mach64ChipRevisionId.
- Bus checking -> Mach64BusType.
- LCDVBlendFIFOSize -> Mach64PanelInfoGet.
-rw-r--r-- | src/ati.c | 48 | ||||
-rw-r--r-- | src/atipreinit.c | 84 |
2 files changed, 74 insertions, 58 deletions
@@ -357,6 +357,52 @@ Mach64PciChipsets[] = { }; /* + * Handle sub versions, from revision data, here already. + */ +static void +Mach64ChipRevisionId(int entityIndex) +{ + EntityInfoPtr pEnt = xf86GetEntityInfo(entityIndex); + pciVideoPtr pPCI = xf86GetPciInfoForEntity(entityIndex); + + switch (pEnt->chipset) { + case ATI_CHIP_88800GX: + switch (pPCI->chipRev) { + case 0x00: + pEnt->chipset = ATI_CHIP_88800GXC; + break; + case 0x01: + pEnt->chipset = ATI_CHIP_88800GXD; + break; + case 0x02: + pEnt->chipset = ATI_CHIP_88800GXE; + break; + case 0x03: + pEnt->chipset = ATI_CHIP_88800GXF; + default: + pEnt->chipset = ATI_CHIP_88800GX; + break; + } + break; + case ATI_CHIP_264VT: + if ((pPCI->chipRev & GetBits(CFG_CHIP_VERSION, CFG_CHIP_REV))) + pEnt->chipset = ATI_CHIP_264VTB; + else + pEnt->chipset = ATI_CHIP_264VT; + + break; + case ATI_CHIP_264GT: + if ((pPCI->chipRev & GetBits(CFG_CHIP_VERSION, CFG_CHIP_REV))) + pEnt->chipset = ATI_CHIP_264GTB; + else + pEnt->chipset = ATI_CHIP_264GT; + break; + default: + break; + } +} + +/* * ATIProbe -- * * This function is called once, at the start of the first server generation to @@ -401,6 +447,8 @@ Mach64Probe(DriverPtr pDriver, int flags) if (!pScrn) continue; + Mach64ChipRevisionId(usedChips[i]); + pScrn->driverVersion = ATI_VERSION_CURRENT; pScrn->driverName = ATI_DRIVER_NAME; pScrn->name = ATI_NAME; diff --git a/src/atipreinit.c b/src/atipreinit.c index f457424..e57d075 100644 --- a/src/atipreinit.c +++ b/src/atipreinit.c @@ -261,10 +261,6 @@ ATIMach64Probe(ATIPtr pATI) CARD32 IOValue; IOValue = inr(CONFIG_STATUS64_0); - pATI->BusType = GetBits(IOValue, CFG_BUS_TYPE); - if (pATI->BusType != ATI_BUS_PCI) - xf86Msg(X_WARNING, "Mach64 GX/CX claims not to be a PCI device.\n"); - IOValue &= (CFG_VGA_EN | CFG_CHIP_EN); if (pATI->Chip == ATI_CHIP_88800CX) @@ -314,53 +310,23 @@ ATIClaimVGAResources(ATIPtr pATI) #endif /* AVOID_CPIO */ /* - * Further Chip level information. + * */ static void -Mach64ChipIDInfo(ATIPtr pATI) +Mach64BusType(ATIPtr pATI) { - /* Get some revision data */ - switch (pATI->Chip) { - case ATI_CHIP_88800GX: - switch (pATI->PCIInfo->chipRev) { - case 0x00: - pATI->Chip = ATI_CHIP_88800GXC; - break; - case 0x01: - pATI->Chip = ATI_CHIP_88800GXD; - break; - case 0x02: - pATI->Chip = ATI_CHIP_88800GXE; - break; - case 0x03: - pATI->Chip = ATI_CHIP_88800GXF; - default: - pATI->Chip = ATI_CHIP_88800GX; - break; - } - break; - case ATI_CHIP_264VT: - if ((pATI->PCIInfo->chipRev & GetBits(CFG_CHIP_VERSION, CFG_CHIP_REV))) - pATI->Chip = ATI_CHIP_264VTB; - else - pATI->Chip = ATI_CHIP_264VT; - - break; - case ATI_CHIP_264GT: - if ((pATI->PCIInfo->chipRev & GetBits(CFG_CHIP_VERSION, CFG_CHIP_REV))) - pATI->Chip = ATI_CHIP_264GTB; - else - pATI->Chip = ATI_CHIP_264GT; - break; - default: - break; - } - /* Bus? */ switch (pATI->PCIInfo->chipType) { case PCI_CHIP_MACH64GX: case PCI_CHIP_MACH64CX: - /* we have no idea here */ +#ifndef AVOID_CPIO + pATI->BusType = GetBits(inr(CONFIG_STATUS64_0), CFG_BUS_TYPE); + if (pATI->BusType != ATI_BUS_PCI) + xf86DrvMsg(pATI->scrnIndex, X_WARNING, + "Mach64 GX/CX claims not to be a PCI device.\n"); +#else + pATI->BusType = ATI_BUS_PCI; /* Guess. */ +#endif break; case PCI_CHIP_MACH64GW: case PCI_CHIP_MACH64GZ: @@ -378,19 +344,6 @@ Mach64ChipIDInfo(ATIPtr pATI) pATI->BusType = ATI_BUS_PCI; break; } - - /* LCD blending FIFO */ - switch (pATI->Chip) { - case ATI_CHIP_264LTPRO: - pATI->LCDVBlendFIFOSize = 800; - break; - case ATI_CHIP_264XL: - case ATI_CHIP_MOBILITY: - pATI->LCDVBlendFIFOSize = 1024; - break; - default: - break; - } } /* @@ -1341,6 +1294,20 @@ Mach64PanelInfoGet(ATIPtr pATI) xf86DrvMsg(pATI->scrnIndex, X_PROBED, "Panel clock is %.3f MHz.\n", (double)(pATI->LCDClock) / 1000.0); + + /* LCD blending FIFO */ + switch (pATI->Chip) { + case ATI_CHIP_264LTPRO: + pATI->LCDVBlendFIFOSize = 800; + break; + case ATI_CHIP_264XL: + case ATI_CHIP_MOBILITY: + pATI->LCDVBlendFIFOSize = 1024; + break; + default: + break; + } + xf86DrvMsg(pATI->scrnIndex, X_INFO, "Using digital flat panel interface%s.\n", pATI->OptionCRTDisplay ? " to display on both CRT and panel" : ""); return TRUE; @@ -1604,7 +1571,6 @@ ATIPreInit(ScrnInfoPtr pScreenInfo, int flags) xfree(pEntity); pATI->Chip = pEntity->chipset; - Mach64ChipIDInfo(pATI); Mach64IOSetup(pATI); @@ -1617,6 +1583,8 @@ ATIPreInit(ScrnInfoPtr pScreenInfo, int flags) return FALSE; } + Mach64BusType(pATI); + #ifndef AVOID_CPIO if (pATI->IsVGA) ATIClaimVGAResources(pATI); |