📄 atichip.c
字号:
/* $XFree86: xc/programs/Xserver/hw/xfree86/drivers/ati/atichip.c,v 1.38tsi Exp $ *//* * Copyright 1997 through 2004 by Marc Aurele La France (TSI @ UQV), tsi@xfree86.org * * Permission to use, copy, modify, distribute, and sell this software and its * documentation for any purpose is hereby granted without fee, provided that * the above copyright notice appear in all copies and that both that copyright * notice and this permission notice appear in supporting documentation, and * that the name of Marc Aurele La France not be used in advertising or * publicity pertaining to distribution of the software without specific, * written prior permission. Marc Aurele La France makes no representations * about the suitability of this software for any purpose. It is provided * "as-is" without express or implied warranty. * * MARC AURELE LA FRANCE DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, * INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO * EVENT SHALL MARC AURELE LA FRANCE BE LIABLE FOR ANY SPECIAL, INDIRECT OR * CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, * DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER * TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR * PERFORMANCE OF THIS SOFTWARE. */#ifdef HAVE_CONFIG_H#include "config.h"#endif#include "ati.h"#include "atibus.h"#include "atichip.h"#include "atimach64io.h"#include "ativersion.h"/* * Chip-related definitions. */const char *ATIChipNames[] ={ "Unknown",#ifndef AVOID_CPIO "IBM VGA or compatible", "ATI 18800", "ATI 18800-1", "ATI 28800-2", "ATI 28800-4", "ATI 28800-5", "ATI 28800-6", "IBM 8514/A", "Chips & Technologies 82C480", "ATI 38800-1", "ATI 68800", "ATI 68800-3", "ATI 68800-6", "ATI 68800LX", "ATI 68800AX",#endif /* AVOID_CPIO */ "ATI 88800GX-C", "ATI 88800GX-D", "ATI 88800GX-E", "ATI 88800GX-F", "ATI 88800GX", "ATI 88800CX", "ATI 264CT", "ATI 264ET", "ATI 264VT", "ATI 3D Rage", "ATI 264VT-B", "ATI 3D Rage II", "ATI 264VT3", "ATI 3D Rage II+DVD", "ATI 3D Rage LT", "ATI 264VT4", "ATI 3D Rage IIc", "ATI 3D Rage Pro", "ATI 3D Rage LT Pro", "ATI 3D Rage XL or XC", "ATI 3D Rage Mobility", "ATI unknown Mach64", "ATI Rage 128 GL", "ATI Rage 128 VR", "ATI Rage 128 Pro GL", "ATI Rage 128 Pro VR", "ATI Rage 128 Pro ULTRA", "ATI Rage 128 Mobility M3", "ATI Rage 128 Mobility M4", "ATI unknown Rage 128" "ATI Radeon 7200", "ATI Radeon 7000 (VE)", "ATI Radeon Mobility M6", "ATI Radeon IGP320", "ATI Radeon IGP330/340/350", "ATI Radeon 7000 IGP", "ATI Radeon 7500", "ATI Radeon Mobility M7", "ATI Radeon 8500/9100", "ATI Radeon 9000", "ATI Radeon Mobility M9", "ATI Radeon 9100 IGP", "ATI Radeon 9200 IGP", "ATI Radeon 9200", "ATI Radeon Mobility M9+", "ATI Radeon 9700/9500", "ATI Radeon 9600/9550", "ATI Radeon 9800", "ATI Radeon 9800XT", "ATI Radeon X300/X550/M22", "ATI Radeon X600/X550/M24", "ATI Radeon X800/M18 AGP", "ATI Radeon X800/M28 PCIE", "ATI Radeon X800XL PCIE", "ATI Radeon X850 PCIE", "ATI Radeon X850 AGP", "ATI Radeon X700", "ATI Xpress 200" "ATI unknown Radeon", "ATI Rage HDTV"};const char *ATIFoundryNames[] = { "SGS", "NEC", "KCS", "UMC", "TSMC", "5", "6", "UMC" };#ifndef AVOID_CPIO/* * ATIMach32ChipID -- * * Set variables whose value is dependent upon an 68800's CHIP_ID register. */voidATIMach32ChipID( ATIPtr pATI){ CARD16 IOValue = inw(CHIP_ID); pATI->ChipType = GetBits(IOValue, CHIP_CODE_0 | CHIP_CODE_1); pATI->ChipClass = GetBits(IOValue, CHIP_CLASS); pATI->ChipRevision = GetBits(IOValue, CHIP_REV); pATI->ChipRev = pATI->ChipRevision; if (IOValue == 0xFFFFU) IOValue = 0; switch (GetBits(IOValue, CHIP_CODE_0 | CHIP_CODE_1)) { case OldChipID('A', 'A'): pATI->Chip = ATI_CHIP_68800_3; break; case OldChipID('X', 'X'): pATI->Chip = ATI_CHIP_68800_6; break; case OldChipID('L', 'X'): pATI->Chip = ATI_CHIP_68800LX; break; case OldChipID('A', 'X'): pATI->Chip = ATI_CHIP_68800AX; break; default: pATI->Chip = ATI_CHIP_68800; break; }}#endif /* AVOID_CPIO *//* * ATIMach64ChipID -- * * Set variables whose value is dependent upon a Mach64's CONFIG_CHIP_ID * register. */voidATIMach64ChipID( ATIPtr pATI, const CARD16 ExpectedChipType){ pATI->config_chip_id = inr(CONFIG_CHIP_ID); pATI->ChipType = GetBits(pATI->config_chip_id, 0xFFFFU); pATI->ChipClass = GetBits(pATI->config_chip_id, CFG_CHIP_CLASS); pATI->ChipRevision = GetBits(pATI->config_chip_id, CFG_CHIP_REV); pATI->ChipVersion = GetBits(pATI->config_chip_id, CFG_CHIP_VERSION); pATI->ChipFoundry = GetBits(pATI->config_chip_id, CFG_CHIP_FOUNDRY); pATI->ChipRev = pATI->ChipRevision; switch (pATI->ChipType) { case OldChipID('G', 'X'): pATI->ChipType = OldToNewChipID(pATI->ChipType); case NewChipID('G', 'X'): switch (pATI->ChipRevision) { case 0x00U: pATI->Chip = ATI_CHIP_88800GXC; break; case 0x01U: pATI->Chip = ATI_CHIP_88800GXD; break; case 0x02U: pATI->Chip = ATI_CHIP_88800GXE; break; case 0x03U: pATI->Chip = ATI_CHIP_88800GXF; break; default: pATI->Chip = ATI_CHIP_88800GX; break; } break; case OldChipID('C', 'X'): pATI->ChipType = OldToNewChipID(pATI->ChipType); case NewChipID('C', 'X'): pATI->Chip = ATI_CHIP_88800CX; break; case OldChipID('C', 'T'): pATI->ChipType = OldToNewChipID(pATI->ChipType); case NewChipID('C', 'T'): pATI->ChipRevision = GetBits(pATI->config_chip_id, CFG_CHIP_REVISION); pATI->Chip = ATI_CHIP_264CT; pATI->BusType = ATI_BUS_PCI; break; case OldChipID('E', 'T'): pATI->ChipType = OldToNewChipID(pATI->ChipType); case NewChipID('E', 'T'): pATI->ChipRevision = GetBits(pATI->config_chip_id, CFG_CHIP_REVISION); pATI->Chip = ATI_CHIP_264ET; pATI->BusType = ATI_BUS_PCI; break; case OldChipID('V', 'T'): pATI->ChipType = OldToNewChipID(pATI->ChipType); case NewChipID('V', 'T'): pATI->ChipRevision = GetBits(pATI->config_chip_id, CFG_CHIP_REVISION); pATI->Chip = ATI_CHIP_264VT; pATI->BusType = ATI_BUS_PCI; /* Some early GT's are detected as VT's */ if (ExpectedChipType && (pATI->ChipType != ExpectedChipType)) { if (ExpectedChipType == NewChipID('G', 'T')) pATI->Chip = ATI_CHIP_264GT; else xf86Msg(X_WARNING, ATI_NAME ": Mach64 chip type probe discrepancy" " detected: PCI=0x%04X; CHIP_ID=0x%04X.\n", ExpectedChipType, pATI->ChipType); } else if (pATI->ChipVersion) pATI->Chip = ATI_CHIP_264VTB; break; case OldChipID('G', 'T'): pATI->ChipType = OldToNewChipID(pATI->ChipType); case NewChipID('G', 'T'): pATI->ChipRevision = GetBits(pATI->config_chip_id, CFG_CHIP_REVISION); pATI->BusType = ATI_BUS_PCI; if (!pATI->ChipVersion) pATI->Chip = ATI_CHIP_264GT; else pATI->Chip = ATI_CHIP_264GTB; break; case OldChipID('V', 'U'): pATI->ChipType = OldToNewChipID(pATI->ChipType); case NewChipID('V', 'U'): pATI->ChipRevision = GetBits(pATI->config_chip_id, CFG_CHIP_REVISION); pATI->Chip = ATI_CHIP_264VT3; pATI->BusType = ATI_BUS_PCI; break; case OldChipID('G', 'U'): pATI->ChipType = OldToNewChipID(pATI->ChipType); case NewChipID('G', 'U'): pATI->ChipRevision = GetBits(pATI->config_chip_id, CFG_CHIP_REVISION); pATI->Chip = ATI_CHIP_264GTDVD; pATI->BusType = ATI_BUS_PCI; break; case OldChipID('L', 'G'): pATI->ChipType = OldToNewChipID(pATI->ChipType); case NewChipID('L', 'G'): pATI->ChipRevision = GetBits(pATI->config_chip_id, CFG_CHIP_REVISION); pATI->Chip = ATI_CHIP_264LT; pATI->BusType = ATI_BUS_PCI; break; case OldChipID('V', 'V'): pATI->ChipType = OldToNewChipID(pATI->ChipType); case NewChipID('V', 'V'): pATI->ChipRevision = GetBits(pATI->config_chip_id, CFG_CHIP_REVISION); pATI->Chip = ATI_CHIP_264VT4; pATI->BusType = ATI_BUS_PCI; break; case OldChipID('G', 'V'): case OldChipID('G', 'Y'): pATI->ChipType = OldToNewChipID(pATI->ChipType); case NewChipID('G', 'V'): case NewChipID('G', 'Y'): pATI->ChipRevision = GetBits(pATI->config_chip_id, CFG_CHIP_REVISION); pATI->Chip = ATI_CHIP_264GT2C; pATI->BusType = ATI_BUS_PCI; break; case OldChipID('G', 'W'): case OldChipID('G', 'Z'): pATI->ChipType = OldToNewChipID(pATI->ChipType); case NewChipID('G', 'W'): case NewChipID('G', 'Z'): pATI->ChipRevision = GetBits(pATI->config_chip_id, CFG_CHIP_REVISION); pATI->Chip = ATI_CHIP_264GT2C; pATI->BusType = ATI_BUS_AGP; break; case OldChipID('G', 'I'): case OldChipID('G', 'P'): case OldChipID('G', 'Q'): pATI->ChipType = OldToNewChipID(pATI->ChipType); case NewChipID('G', 'I'): case NewChipID('G', 'P'): case NewChipID('G', 'Q'): pATI->ChipRevision = GetBits(pATI->config_chip_id, CFG_CHIP_REVISION); pATI->Chip = ATI_CHIP_264GTPRO; pATI->BusType = ATI_BUS_PCI; break; case OldChipID('G', 'B'): case OldChipID('G', 'D'): pATI->ChipType = OldToNewChipID(pATI->ChipType); case NewChipID('G', 'B'): case NewChipID('G', 'D'): pATI->ChipRevision = GetBits(pATI->config_chip_id, CFG_CHIP_REVISION); pATI->Chip = ATI_CHIP_264GTPRO; pATI->BusType = ATI_BUS_AGP; break; case OldChipID('L', 'I'): case OldChipID('L', 'P'): case OldChipID('L', 'Q'): pATI->ChipType = OldToNewChipID(pATI->ChipType); case NewChipID('L', 'I'): case NewChipID('L', 'P'): case NewChipID('L', 'Q'): pATI->ChipRevision = GetBits(pATI->config_chip_id, CFG_CHIP_REVISION); pATI->Chip = ATI_CHIP_264LTPRO; pATI->BusType = ATI_BUS_PCI; pATI->LCDVBlendFIFOSize = 800; break; case OldChipID('L', 'B'): case OldChipID('L', 'D'): pATI->ChipType = OldToNewChipID(pATI->ChipType); case NewChipID('L', 'B'): case NewChipID('L', 'D'): pATI->ChipRevision = GetBits(pATI->config_chip_id, CFG_CHIP_REVISION); pATI->Chip = ATI_CHIP_264LTPRO; pATI->BusType = ATI_BUS_AGP; pATI->LCDVBlendFIFOSize = 800; break; case OldChipID('G', 'L'): case OldChipID('G', 'O'): case OldChipID('G', 'R'): case OldChipID('G', 'S'): pATI->ChipType = OldToNewChipID(pATI->ChipType); case NewChipID('G', 'L'): case NewChipID('G', 'O'): case NewChipID('G', 'R'): case NewChipID('G', 'S'): pATI->ChipRevision = GetBits(pATI->config_chip_id, CFG_CHIP_REVISION); pATI->Chip = ATI_CHIP_264XL; pATI->BusType = ATI_BUS_PCI; pATI->LCDVBlendFIFOSize = 1024; break; case OldChipID('G', 'M'): case OldChipID('G', 'N'): pATI->ChipType = OldToNewChipID(pATI->ChipType); case NewChipID('G', 'M'): case NewChipID('G', 'N'): pATI->ChipRevision = GetBits(pATI->config_chip_id, CFG_CHIP_REVISION); pATI->Chip = ATI_CHIP_264XL; pATI->BusType = ATI_BUS_AGP; pATI->LCDVBlendFIFOSize = 1024; break; case OldChipID('L', 'R'): case OldChipID('L', 'S'): pATI->ChipType = OldToNewChipID(pATI->ChipType); case NewChipID('L', 'R'): case NewChipID('L', 'S'): pATI->ChipRevision = GetBits(pATI->config_chip_id, CFG_CHIP_REVISION); pATI->Chip = ATI_CHIP_MOBILITY; pATI->BusType = ATI_BUS_PCI; pATI->LCDVBlendFIFOSize = 1024; break; case OldChipID('L', 'M'): case OldChipID('L', 'N'): pATI->ChipType = OldToNewChipID(pATI->ChipType);
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -