summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorGeorge Sapountzis <gsap7@yahoo.gr>2007-02-05 19:16:51 +0200
committerGeorge Sapountzis <gsap7@yahoo.gr>2007-02-05 19:16:51 +0200
commit9d77aabdff919360f0c9333105436c31f1f5749a (patch)
treefa0617724e538435cf2b04b7a63ef006fc73fe04
parentff8ea19fcdce099732f9359e53cd62b9a04bfa6d (diff)
parent57822be75740f339445f2375d44632560f4bbe57 (diff)
Merge branch 'mach64-pci-1'
-rw-r--r--configure.ac16
-rw-r--r--src/Makefile.am5
-rw-r--r--src/atiaccel.c7
-rw-r--r--src/atiadapter.c57
-rw-r--r--src/atiadapter.h59
-rw-r--r--src/atiadjust.c99
-rw-r--r--src/atibank.c304
-rw-r--r--src/atibank.h44
-rw-r--r--src/atibus.c80
-rw-r--r--src/atibus.h10
-rw-r--r--src/atichip.c84
-rw-r--r--src/atichip.h27
-rw-r--r--src/aticlock.c1196
-rw-r--r--src/aticlock.h21
-rw-r--r--src/aticonfig.c43
-rw-r--r--src/aticonsole.c50
-rw-r--r--src/aticursor.c9
-rw-r--r--src/atidac.c147
-rw-r--r--src/atidga.c16
-rw-r--r--src/atidsp.c29
-rw-r--r--src/atii2c.c9
-rw-r--r--src/atiident.c91
-rw-r--r--src/atiident.h24
-rw-r--r--src/atiio.h82
-rw-r--r--src/atiload.c29
-rw-r--r--src/atiload.h6
-rw-r--r--src/atilock.c82
-rw-r--r--src/atimach64.c41
-rw-r--r--src/atimach64accel.c11
-rw-r--r--src/atimach64cursor.c15
-rw-r--r--src/atimach64io.h17
-rw-r--r--src/atimisc.c7
-rw-r--r--src/atimode.c216
-rw-r--r--src/atimono.h42
-rw-r--r--src/atioption.c26
-rw-r--r--src/atioption.h8
-rw-r--r--src/atipreinit.c1147
-rw-r--r--src/atiprint.c51
-rw-r--r--src/atiprobe.c2192
-rw-r--r--src/atiscreen.c63
-rw-r--r--src/atistruct.h39
-rw-r--r--src/ativalid.c77
-rw-r--r--src/ativga.c361
-rw-r--r--src/ativga.h2
-rw-r--r--src/ativgaio.h4
-rw-r--r--src/atividmem.c46
-rw-r--r--src/atiwonder.c149
-rw-r--r--src/atiwonder.h1
-rw-r--r--src/atiwonderio.c23
-rw-r--r--src/atixv.c29
50 files changed, 516 insertions, 6677 deletions
diff --git a/configure.ac b/configure.ac
index 869493f5..16b93e12 100644
--- a/configure.ac
+++ b/configure.ac
@@ -115,14 +115,10 @@ fi
# AVOID_CPIO: Only x86, amd64, and alpha are cool with CPIO. It needs a
# little-endian, undirected PIO space of at least 64kB.
-# AVOID_NON_PCI: Platforms which don't deal with PCI master aborts should
-# stick to PCI-only probing, stick their fingers in their ears, and pretend
-# that ISA cards simply don't exist.
# AVOID_DGA: ???
# ATI_TV_OUT: This only works on x86.
ATIMISC_CPIO=no
-ATIMISC_NON_PCI=yes
ATIMISC_DGA=yes
ATIMISC_TV_OUT=no
@@ -137,9 +133,6 @@ case $host_cpu in
sparc)
ATIMISC_DGA=no
;;
- powerpc)
- ATIMISC_NON_PCI=no
- ;;
*)
;;
esac
@@ -153,15 +146,6 @@ else
AC_MSG_RESULT([no, MMIO])
fi
-AC_MSG_CHECKING([whether to include support for non-PCI devices])
-AM_CONDITIONAL(ATIMISC_NON_PCI, test "x$ATIMISC_NON_PCI" = xyes)
-if test "x$ATI_AVOID_NON_PCI" = xyes; then
- AC_MSG_RESULT([yes, PCI and ISA])
-else
- AC_DEFINE(AVOID_NON_PCI, 1, [Only probe PCI cards; do not probe ISA.])
- AC_MSG_RESULT([no, PCI only])
-fi
-
AC_MSG_CHECKING([whether to include DGA support])
AC_MSG_RESULT([$ATIMISC_DGA])
AM_CONDITIONAL(ATIMISC_DGA, test "x$ATIMISC_DGA" = xyes)
diff --git a/src/Makefile.am b/src/Makefile.am
index b1410f73..ee4911b8 100644
--- a/src/Makefile.am
+++ b/src/Makefile.am
@@ -52,7 +52,7 @@ ati_drv_la_LTLIBRARIES = ati_drv.la
ati_drv_la_LDFLAGS = -module -avoid-version
ati_drv_ladir = @moduledir@/drivers
ati_drv_la_SOURCES = \
- ati.c atiadapter.c atibus.c atichip.c atiident.c atioption.c \
+ ati.c atibus.c atichip.c atiident.c atioption.c \
atiprobe.c atividmem.c atimodule.c $(ATI_CPIO_SOURCES) \
radeon_probe.c r128_probe.c
@@ -109,7 +109,6 @@ EXTRA_DIST = \
radeon_accelfuncs.c \
\
atiaccel.h \
- atiadapter.h \
atiadjust.h \
atiaudio.h \
atibank.h \
@@ -130,7 +129,6 @@ EXTRA_DIST = \
ati.h \
atii2c.h \
atiident.h \
- atiio.h \
atiload.h \
atilock.h \
atimach64accel.h \
@@ -142,7 +140,6 @@ EXTRA_DIST = \
atimach64xv.h \
atimode.h \
atimodule.h \
- atimono.h \
atioption.h \
atipreinit.h \
atiprint.h \
diff --git a/src/atiaccel.c b/src/atiaccel.c
index 61cb864a..11c39c79 100644
--- a/src/atiaccel.c
+++ b/src/atiaccel.c
@@ -28,7 +28,6 @@
#endif
#include "atiaccel.h"
-#include "atiadapter.h"
#include "atimach64accel.h"
#include "atistruct.h"
@@ -52,14 +51,8 @@ ATIInitializeAcceleration
if (!(pATI->pXAAInfo = XAACreateInfoRec()))
return FALSE;
- switch (pATI->Adapter)
{
- case ATI_ADAPTER_MACH64:
ATIMach64AccelInit(pATI, pATI->pXAAInfo);
- break;
-
- default:
- break;
}
}
diff --git a/src/atiadapter.c b/src/atiadapter.c
deleted file mode 100644
index b0b55806..00000000
--- a/src/atiadapter.c
+++ /dev/null
@@ -1,57 +0,0 @@
-/*
- * 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 "atiadapter.h"
-
-/*
- * Adapter-related definitions.
- */
-const char *ATIAdapterNames[] =
-{
- "Unknown",
-
-#ifndef AVOID_CPIO
-
- "ATI EGA Wonder800",
- "ATI EGA Wonder800+",
- "IBM VGA or compatible",
- "ATI VGA Basic16",
- "ATI VGA Wonder V3",
- "ATI VGA Wonder V4",
- "ATI VGA Wonder V5",
- "ATI VGA Wonder+",
- "ATI VGA Wonder XL or XL24",
- "ATI VGA Wonder VLB or PCI",
- "IBM 8514/A or compatible",
- "ATI Mach8",
- "ATI Mach32",
-
-#endif /* AVOID_CPIO */
-
- "ATI Mach64",
- "ATI Rage128",
- "ATI Radeon"
-};
diff --git a/src/atiadapter.h b/src/atiadapter.h
deleted file mode 100644
index 66a5e998..00000000
--- a/src/atiadapter.h
+++ /dev/null
@@ -1,59 +0,0 @@
-/*
- * Copyright 1997 through 2003 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.
- */
-
-#ifndef ___ATIADAPTER_H___
-#define ___ATIADAPTER_H___ 1
-
-/*
- * Adapter-related definitions.
- */
-typedef enum
-{
- ATI_ADAPTER_NONE = 0,
-
-#ifndef AVOID_CPIO
-
- ATI_ADAPTER_EGA,
- ATI_ADAPTER_EGA_PLUS,
- ATI_ADAPTER_VGA,
- ATI_ADAPTER_BASIC,
- ATI_ADAPTER_V3,
- ATI_ADAPTER_V4,
- ATI_ADAPTER_V5,
- ATI_ADAPTER_PLUS,
- ATI_ADAPTER_XL,
- ATI_ADAPTER_NONISA,
- ATI_ADAPTER_8514A,
- ATI_ADAPTER_MACH8,
- ATI_ADAPTER_MACH32,
-
-#endif /* AVOID_CPIO */
-
- ATI_ADAPTER_MACH64,
- ATI_ADAPTER_RAGE128,
- ATI_ADAPTER_RADEON,
- ATI_ADAPTER_MAX /* Must be last */
-} ATIAdapterType;
-
-extern const char *ATIAdapterNames[];
-
-#endif /* ___ATIADAPTER_H___ */
diff --git a/src/atiadjust.c b/src/atiadjust.c
index ef748e9c..f01fee69 100644
--- a/src/atiadjust.c
+++ b/src/atiadjust.c
@@ -27,7 +27,6 @@
#include "ati.h"
#include "atiadjust.h"
#include "atichip.h"
-#include "aticrtc.h"
#include "atilock.h"
#include "atimach64io.h"
#include "atiwonderio.h"
@@ -54,21 +53,6 @@ ATIAdjustPreInit
{
unsigned long MaxBase;
-#ifndef AVOID_CPIO
-
- if ((pATI->CPIO_VGAWonder) &&
- (pATI->Chip <= ATI_CHIP_18800_1) &&
- (pATI->VideoRAM == 256) &&
- (pATI->depth >= 8))
- {
- /* Strange, to say the least ... */
- pATI->AdjustDepth = (pATI->bitsPerPixel + 3) >> 2;
- pATI->AdjustMask = (unsigned long)(-32);
- }
- else
-
-#endif /* AVOID_CPIO */
-
{
pATI->AdjustDepth = (pATI->bitsPerPixel + 7) >> 3;
@@ -80,41 +64,8 @@ ATIAdjustPreInit
1);
}
- switch (pATI->NewHW.crtc)
{
-
-#ifndef AVOID_CPIO
-
- case ATI_CRTC_VGA:
- if (pATI->Chip >= ATI_CHIP_264CT)
- {
- pATI->AdjustMaxBase = MaxBits(CRTC_OFFSET_VGA) << 2;
- if (pATI->depth <= 4)
- pATI->AdjustMaxBase <<= 1;
- }
- else if (!pATI->CPIO_VGAWonder)
- {
- pATI->AdjustMaxBase = 0xFFFFU << 3;
- }
- else if (pATI->Chip <= ATI_CHIP_28800_6)
- {
- pATI->AdjustMaxBase = 0x03FFFFU << 3;
- }
- else /* Mach32 & Mach64 */
- {
- pATI->AdjustMaxBase = 0x0FFFFFU << 3;
- }
- break;
-
-#endif /* AVOID_CPIO */
-
- case ATI_CRTC_MACH64:
pATI->AdjustMaxBase = MaxBits(CRTC_OFFSET) << 3;
- break;
-
- default:
- pATI->AdjustMaxBase = 0;
- break;
}
MaxBase = (pATI->AdjustMaxBase / (unsigned long)pATI->AdjustDepth) |
@@ -176,57 +127,7 @@ ATIAdjustFrame
/* Unlock registers */
ATIUnlock(pATI);
-#ifndef AVOID_CPIO
-
- if ((pATI->NewHW.crtc == ATI_CRTC_VGA) && (pATI->Chip < ATI_CHIP_264CT))
- {
- PutReg(CRTX(pATI->CPIO_VGABase), 0x0CU, GetByte(Base, 1));
- PutReg(CRTX(pATI->CPIO_VGABase), 0x0DU, GetByte(Base, 0));
-
- if (pATI->CPIO_VGAWonder)
- {
- if (pATI->Chip <= ATI_CHIP_18800_1)
- ATIModifyExtReg(pATI, 0xB0U, -1, 0x3FU, Base >> 10);
- else
- {
- ATIModifyExtReg(pATI, 0xB0U, -1, 0xBFU, Base >> 10);
- ATIModifyExtReg(pATI, 0xA3U, -1, 0xEFU, Base >> 13);
-
- /*
- * I don't know if this also applies to Mach64's, but give it a
- * shot...
- */
- if (pATI->Chip >= ATI_CHIP_68800)
- ATIModifyExtReg(pATI, 0xADU, -1, 0xF3U, Base >> 16);
- }
- }
- }
- else
- /*
- * On integrated controllers, there is only one set of CRTC control bits,
- * many of which are simultaneously accessible through both VGA and
- * accelerator I/O ports. Given VGA's architectural limitations, setting
- * the CRTC's offset register to more than 256k needs to be done through
- * the accelerator port.
- */
- if (pATI->depth <= 4)
{
- outr(CRTC_OFF_PITCH, SetBits(pATI->displayWidth >> 4, CRTC_PITCH) |
- SetBits(Base, CRTC_OFFSET));
- }
- else
-
-#endif /* AVOID_CPIO */
-
- {
-
-#ifndef AVOID_CPIO
-
- if (pATI->NewHW.crtc == ATI_CRTC_VGA)
- Base <<= 1; /* LSBit must be zero */
-
-#endif /* AVOID_CPIO */
-
outr(CRTC_OFF_PITCH, SetBits(pATI->displayWidth >> 3, CRTC_PITCH) |
SetBits(Base, CRTC_OFFSET));
}
diff --git a/src/atibank.c b/src/atibank.c
index 446c55ff..514a4145 100644
--- a/src/atibank.c
+++ b/src/atibank.c
@@ -32,148 +32,6 @@
#ifndef AVOID_CPIO
/*
- * ATI VGA Wonder V3 adapters use an ATI 18800 chip and are single-banked.
- * Bank selection is done with bits 0x1E of ATI extended VGA register index
- * 0xB2.
- */
-
-/*
- * ATIV3SetBank --
- *
- * Set an ATI 18800's bank number.
- */
-void
-ATIV3SetBank
-(
- ATIPtr pATI,
- unsigned int iBank
-)
-{
- ATIModifyExtReg(pATI, 0xB2U, -1, (CARD8)(~0x1EU), SetBits(iBank, 0x1EU));
-}
-
-/*
- * ATIV3SetReadWrite --
- *
- * Set an ATI 18800's bank number.
- */
-int
-ATIV3SetReadWrite
-(
- ScreenPtr pScreen,
- unsigned int iBank
-)
-{
- ATIPtr pATI = ATIPTR(XF86SCRNINFO(pScreen));
-
- ATIModifyExtReg(pATI, 0xB2U, -1, (CARD8)(~0x1EU), SetBits(iBank, 0x1EU));
- return 0;
-}
-
-/*
- * ATI VGA Wonder V4 and V5 adapters use an ATI 18800-1 chip. Bank selection
- * is done with ATI extended VGA register index 0xB2. The format is:
- *
- * 0xE0 - Read bank select bits 0x07
- * 0x1E - Write bank select bits 0x0F
- * 0x01 - Read bank select bit 0x08.
- */
-
-/*
- * ATIV4V5SetBank --
- *
- * Set an ATI 18800-1's read and write bank numbers.
- */
-void
-ATIV4V5SetBank
-(
- ATIPtr pATI,
- unsigned int iBank
-)
-{
- pATI->B2Reg = SetBits(iBank, 0x1EU) | SetBits(iBank, 0xE0U) |
- SetBits(GetBits(iBank, 0x08U), 0x01U);
- ATIPutExtReg(0xB2U, pATI->B2Reg);
-}
-
-/*
- * ATIV4V5SetRead --
- *
- * Set an ATI 18800-1's read bank number.
- */
-int
-ATIV4V5SetRead
-(
- ScreenPtr pScreen,
- unsigned int iBank
-)
-{
- ATIPtr pATI = ATIPTR(XF86SCRNINFO(pScreen));
- CARD8 B2Reg = (pATI->B2Reg & 0x1EU) | SetBits(iBank, 0xE0U) |
- SetBits(GetBits(iBank, 0x08U), 0x01U);
-
- if (B2Reg != pATI->B2Reg)
- {
- ATIPutExtReg(0xB2U, B2Reg);
- pATI->B2Reg = B2Reg;
- }
-
- return 0;
-}
-
-/*
- * ATIV4V5SetWrite --
- *
- * Set an ATI 18800-1's write bank number.
- */
-int
-ATIV4V5SetWrite
-(
- ScreenPtr pScreen,
- unsigned int iBank
-)
-{
- ATIPtr pATI = ATIPTR(XF86SCRNINFO(pScreen));
- CARD8 B2Reg = (pATI->B2Reg & 0xE1U) | SetBits(iBank, 0x1EU);
-
- if (B2Reg != pATI->B2Reg)
- {
- ATIPutExtReg(0xB2U, B2Reg);
- pATI->B2Reg = B2Reg;
- }
- return 0;
-}
-
-/*
- * ATIV4V5SetReadWrite --
- *
- * Set an ATI 18800-1's read and write bank numbers.
- */
-int
-ATIV4V5SetReadWrite
-(
- ScreenPtr pScreen,
- unsigned int iBank
-)
-{
- ATIV4V5SetBank(ATIPTR(XF86SCRNINFO(pScreen)), iBank);
- return 0;
-}
-
-/*
- * In addition to ATI extended register index 0xB2, 28800's, 68800's and
- * 88800's define banking bits in bits 0x0F of ATI extended VGA register index
- * 0xAE. These are only needed for adapters with more than 1MB of video
- * memory, and it is questionable whether or not they are actually implemented
- * by 28800's and 88800's. ATI extended VGA register index 0xAE is defined as
- * follows:
- *
- * 0xF0 - reserved
- * 0x0C - read bank select bits 0x30
- * 0x03 - write bank select bits 0x30
- */
-
-/*
* ATIx8800SetBank --
*
* Set an ATI 28800's, 68800's or 88800's read and write bank numbers.
@@ -185,62 +43,10 @@ ATIx8800SetBank
unsigned int iBank
)
{
- ATIV4V5SetBank(pATI, iBank);
- iBank = GetBits(iBank, 0x30U);
- ATIModifyExtReg(pATI, 0xAEU, -1, (CARD8)(~0x0FU),
- SetBits(iBank, 0x03U) | SetBits(iBank, 0x0CU));
-}
-
-/*
- * ATIx8800SetRead --
- *
- * Set an ATI 28800's, 68800's or 88800's read bank numbers.
- */
-int
-ATIx8800SetRead
-(
- ScreenPtr pScreen,
- unsigned int iBank
-)
-{
- (void)ATIV4V5SetRead(pScreen, iBank);
- ATIModifyExtReg(ATIPTR(XF86SCRNINFO(pScreen)), 0xAEU, -1, (CARD8)(~0x0CU),
- SetBits(GetBits(iBank, 0x30U), 0x0CU));
- return 0;
-}
-
-/*
- * ATIx8800SetWrite --
- *
- * Set an ATI 28800's, 68800's or 88800's write bank numbers.
- */
-int
-ATIx8800SetWrite
-(
- ScreenPtr pScreen,
- unsigned int iBank
-)
-{
- (void)ATIV4V5SetWrite(pScreen, iBank);
- ATIModifyExtReg(ATIPTR(XF86SCRNINFO(pScreen)), 0xAEU, -1, (CARD8)(~0x03U),
- SetBits(GetBits(iBank, 0x30U), 0x03U));
- return 0;
-}
+ (void)iBank; /* always called with iBank = 0 */
-/*
- * ATIx8800SetReadWrite --
- *
- * Set an ATI 28800's, 68800's or 88800's read and write bank numbers.
- */
-int
-ATIx8800SetReadWrite
-(
- ScreenPtr pScreen,
- unsigned int iBank
-)
-{
- ATIx8800SetBank(ATIPTR(XF86SCRNINFO(pScreen)), iBank);
- return 0;
+ ATIPutExtReg(0xB2U, 0x00U);
+ ATIModifyExtReg(pATI, 0xAEU, -1, (CARD8)(~0x0FU), 0x00U);
}
/*
@@ -277,58 +83,6 @@ ATIMach64SetBankPacked
outr(MEM_VGA_WP_SEL, tmp);
}
-/*
- * ATIMach64SetReadPacked --
- *
- * Set read bank number for small dual paged apertures.
- */
-int
-ATIMach64SetReadPacked
-(
- ScreenPtr pScreen,
- unsigned int iBank
-)
-{
- ATIPtr pATI = ATIPTR(XF86SCRNINFO(pScreen));
-
- outr(MEM_VGA_RP_SEL, ATIMach64MassagePackedBankNumber(iBank));
- return 0;
-}
-
-/*
- * ATIMach64SetWritePacked --
- *
- * Set write bank number for small dual paged apertures.
- */
-int
-ATIMach64SetWritePacked
-(
- ScreenPtr pScreen,
- unsigned int iBank
-)
-{
- ATIPtr pATI = ATIPTR(XF86SCRNINFO(pScreen));
-
- outr(MEM_VGA_WP_SEL, ATIMach64MassagePackedBankNumber(iBank));
- return 0;
-}
-
-/*
- * ATIMach64SetReadWritePacked --
- *
- * Set read and write bank numbers for small dual paged apertures.
- */
-int
-ATIMach64SetReadWritePacked
-(
- ScreenPtr pScreen,
- unsigned int iBank
-)
-{
- ATIMach64SetBankPacked(ATIPTR(XF86SCRNINFO(pScreen)), iBank);
- return 0;
-}
-
static CARD32
ATIMach64MassagePlanarBankNumber
(
@@ -357,56 +111,4 @@ ATIMach64SetBankPlanar
outr(MEM_VGA_WP_SEL, tmp);
}
-/*
- * ATIMach64SetReadPlanar --
- *
- * Set read bank number for small dual paged apertures.
- */
-int
-ATIMach64SetReadPlanar
-(
- ScreenPtr pScreen,
- unsigned int iBank
-)
-{
- ATIPtr pATI = ATIPTR(XF86SCRNINFO(pScreen));
-
- outr(MEM_VGA_RP_SEL, ATIMach64MassagePlanarBankNumber(iBank));
- return 0;
-}
-
-/*
- * ATIMach64SetWritePlanar --
- *
- * Set write bank number for small dual paged apertures.
- */
-int
-ATIMach64SetWritePlanar
-(
- ScreenPtr pScreen,
- unsigned int iBank
-)
-{
- ATIPtr pATI = ATIPTR(XF86SCRNINFO(pScreen));
-
- outr(MEM_VGA_WP_SEL, ATIMach64MassagePlanarBankNumber(iBank));
- return 0;
-}
-
-/*
- * ATIMach64SetReadWritePlanar --
- *
- * Set read and write bank numbers for small dual paged apertures.
- */
-int
-ATIMach64SetReadWritePlanar
-(
- ScreenPtr pScreen,
- unsigned int iBank
-)
-{
- ATIMach64SetBankPlanar(ATIPTR(XF86SCRNINFO(pScreen)), iBank);
- return 0;
-}
-
#endif /* AVOID_CPIO */
diff --git a/src/atibank.h b/src/atibank.h
index 49ffc549..d56da684 100644
--- a/src/atibank.h
+++ b/src/atibank.h
@@ -25,49 +25,9 @@
#include "atipriv.h"
-#include "mibank.h"
-
#ifndef AVOID_CPIO
/*
- * Banking definitions.
- */
-
-/*
- * Bank selection function for VGA Wonder V3 adapters (which are
- * single-banked).
- */
-#define ATIV3SetRead ATIV3SetReadWrite
-#define ATIV3SetWrite ATIV3SetReadWrite
-extern miBankProc ATIV3SetReadWrite;
-
-/*
- * Bank selection functions for VGA Wonder V4 and V5 adapters.
- */
-extern miBankProc ATIV4V5SetRead,
- ATIV4V5SetWrite,
- ATIV4V5SetReadWrite;
-
-/*
- * Bank selection functions for 28800-x, 68800-x and 88800 based adapters.
- */
-extern miBankProc ATIx8800SetRead,
- ATIx8800SetWrite,
- ATIx8800SetReadWrite;
-
-/*
- * Bank selection functions used to simulate a banked VGA aperture with a
- * Mach64's small dual paged apertures. There are two sets of these: one for
- * packed modes, and one for planar modes.
- */
-extern miBankProc ATIMach64SetReadPacked,
- ATIMach64SetWritePacked,
- ATIMach64SetReadWritePacked;
-extern miBankProc ATIMach64SetReadPlanar,
- ATIMach64SetWritePlanar,
- ATIMach64SetReadWritePlanar;
-
-/*
* The CRT save/restore code also needs a separate banking interface that can
* used before ATIScreenInit() is called.
*/
@@ -75,9 +35,7 @@ extern miBankProc ATIMach64SetReadPlanar,
typedef void ATIBankProc(ATIPtr, unsigned int);
typedef ATIBankProc *ATIBankProcPtr;
-extern ATIBankProc ATIV3SetBank,
- ATIV4V5SetBank,
- ATIx8800SetBank,
+extern ATIBankProc ATIx8800SetBank,
ATIMach64SetBankPacked,
ATIMach64SetBankPlanar;
diff --git a/src/atibus.c b/src/atibus.c
index cf2969fb..32f02b61 100644
--- a/src/atibus.c
+++ b/src/atibus.c
@@ -27,10 +27,9 @@
#include <string.h>
#include "ati.h"
-#include "atiadapter.h"
#include "atibus.h"
#include "atichip.h"
-#include "atiio.h"
+#include "atimach64io.h"
#include "atistruct.h"
#include "ativersion.h"
@@ -40,13 +39,6 @@
const char *ATIBusNames[] =
{
- "16-Bit ISA",
- "EISA",
- "16-Bit MicroChannel",
- "32-Bit MicroChannel",
- "386SX Local Bus",
- "386DX Local Bus",
- "VESA Local Bus",
"PCI",
"AGP"
};
@@ -67,14 +59,13 @@ ATIClaimResources
Bool Active
)
{
- resPtr pResources;
#ifndef AVOID_CPIO
resRange Resources[2] = {{0, 0, 0}, _END};
/* Claim VGA and VGAWonder resources */
- if ((pATI->VGAAdapter != ATI_ADAPTER_NONE) && (Active || !pATI->SharedVGA))
+ if ((pATI->VGAAdapter) && (Active))
{
/*
* 18800-x's are the only ATI controllers that decode all ISA aliases
@@ -82,23 +73,13 @@ ATIClaimResources
* VGA aliases, but do decode VGA Wonder aliases whose most significant
* nibble is zero.
*/
- xf86ClaimFixedResources(
- (pATI->Chip <= ATI_CHIP_18800_1) ?
- (pATI->SharedVGA ? resVgaSparseShared : resVgaSparseExclusive) :
- (pATI->SharedVGA ? resVgaShared : resVgaExclusive),
- pATI->iEntity);
+ xf86ClaimFixedResources(resVgaShared, pATI->iEntity);
if (pATI->CPIO_VGAWonder)
{
- if (pATI->SharedVGA)
- Resources[0].type = ResShrIoSparse | ResBus;
- else
- Resources[0].type = ResExcIoSparse | ResBus;
+ Resources[0].type = ResShrIoSparse | ResBus;
Resources[0].rBase = pATI->CPIO_VGAWonder;
- if (pATI->Chip <= ATI_CHIP_18800_1)
- Resources[0].rMask = 0x03FEU;
- else
- Resources[0].rMask = 0xF3FEU;
+ Resources[0].rMask = 0xF3FEU;
xf86ClaimFixedResources(Resources, pATI->iEntity);
@@ -107,54 +88,21 @@ ATIClaimResources
}
}
- if (!Active && pATI->SharedAccelerator)
+ if (!Active)
return;
- /* Claim 8514/A resources */
- if (pATI->ChipHasSUBSYS_CNTL)
- xf86ClaimFixedResources(
- pATI->SharedAccelerator ? res8514Shared : res8514Exclusive,
- pATI->iEntity);
-
/* Claim Mach64 sparse I/O resources */
- if ((pATI->Adapter == ATI_ADAPTER_MACH64) &&
- (pATI->CPIODecoding == SPARSE_IO))
+ if ((pATI->CPIODecoding == SPARSE_IO))
{
- if (pATI->SharedAccelerator)
- Resources[0].type = ResShrIoSparse | ResBus;
- else
- Resources[0].type = ResExcIoSparse | ResBus;
+ Resources[0].type = ResShrIoSparse | ResBus;
Resources[0].rBase = pATI->CPIOBase;
Resources[0].rMask = 0x03FCU;
xf86ClaimFixedResources(Resources, pATI->iEntity);
}
- if (Active)
- return;
-
-#else /* AVOID_CPIO */
-
- if (pATI->SharedAccelerator)
- return;
-
#endif /* AVOID_CPIO */
- /* Register unshared relocatable resources for inactive adapters */
- do
- {
- pResources = xf86RegisterResources(pATI->iEntity, NULL, ResExclusive);
- if (!pResources)
- return;
-
- pResources = xf86ReallocatePciResources(pATI->iEntity, pResources);
- } while (!pResources);
-
- xf86Msg(X_WARNING,
- ATI_NAME ": Unable to register the following resources for inactive"
- " adapter:\n");
- xf86PrintResList(1, pResources);
- xf86FreeResList(pResources);
}
/*
@@ -165,22 +113,10 @@ ATIClaimResources
int
ATIClaimBusSlot
(
- DriverPtr pDriver,
- int Chipset,
- GDevPtr pGDev,
Bool Active,
ATIPtr pATI
)
{
- pciVideoPtr pVideo = pATI->PCIInfo;
-
- if (pVideo)
- pATI->iEntity =
- xf86ClaimPciSlot(pVideo->bus, pVideo->device, pVideo->func,
- pDriver, Chipset, pGDev, Active);
- else
- pATI->iEntity = xf86ClaimIsaSlot(pDriver, Chipset, pGDev, Active);
-
if (pATI->iEntity >= 0)
ATIClaimResources(pATI, Active);
diff --git a/src/atibus.h b/src/atibus.h
index b719702a..c5c676ef 100644
--- a/src/atibus.h
+++ b/src/atibus.h
@@ -38,19 +38,13 @@
*/
typedef enum
{
- ATI_BUS_ISA = 0,
- ATI_BUS_EISA,
- ATI_BUS_MCA16,
- ATI_BUS_MCA32,
- ATI_BUS_SXLB,
- ATI_BUS_DXLB,
- ATI_BUS_VLB,
ATI_BUS_PCI,
ATI_BUS_AGP
} ATIBusType;
extern const char *ATIBusNames[];
-extern int ATIClaimBusSlot(DriverPtr, int, GDevPtr, Bool, ATIPtr);
+extern Bool ATIMach64ProbeIO(pciVideoPtr, ATIPtr);
+extern int ATIClaimBusSlot(Bool, ATIPtr);
#endif /* ___ATIBUS_H___ */
diff --git a/src/atichip.c b/src/atichip.c
index 09d2cad9..ddc7e0a7 100644
--- a/src/atichip.c
+++ b/src/atichip.c
@@ -36,27 +36,6 @@
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",
@@ -122,52 +101,6 @@ const char *ATIChipNames[] =
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.
- */
-void
-ATIMach32ChipID
-(
- 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 --
*
@@ -456,23 +389,6 @@ ATIChipID
{
switch (ChipID)
{
-
-#ifndef AVOID_CPIO
-
- case OldChipID('A', 'A'): case NewChipID('A', 'A'):
- return ATI_CHIP_68800_3;
-
- case OldChipID('X', 'X'): case NewChipID('X', 'X'):
- return ATI_CHIP_68800_6;
-
- case OldChipID('L', 'X'):
- return ATI_CHIP_68800LX;
-
- case OldChipID('A', 'X'): case NewChipID('A', 'X'):
- return ATI_CHIP_68800AX;
-
-#endif /* AVOID_CPIO */
-
case OldChipID('G', 'X'): case NewChipID('G', 'X'):
switch (ChipRev)
{
diff --git a/src/atichip.h b/src/atichip.h
index ee3e0cf0..733c7b1f 100644
--- a/src/atichip.h
+++ b/src/atichip.h
@@ -34,27 +34,6 @@
typedef enum
{
ATI_CHIP_NONE = 0,
-
-#ifndef AVOID_CPIO
-
- ATI_CHIP_VGA, /* Generic VGA */
- ATI_CHIP_18800,
- ATI_CHIP_18800_1,
- ATI_CHIP_28800_2,
- ATI_CHIP_28800_4,
- ATI_CHIP_28800_5,
- ATI_CHIP_28800_6,
- ATI_CHIP_8514A, /* 8514/A */
- ATI_CHIP_CT480, /* 8514/A clone */
- ATI_CHIP_38800_1, /* Mach8 */
- ATI_CHIP_68800, /* Mach32 */
- ATI_CHIP_68800_3, /* Mach32 */
- ATI_CHIP_68800_6, /* Mach32 */
- ATI_CHIP_68800LX, /* Mach32 */
- ATI_CHIP_68800AX, /* Mach32 */
-
-#endif /* AVOID_CPIO */
-
ATI_CHIP_88800GXC, /* Mach64 */
ATI_CHIP_88800GXD, /* Mach64 */
ATI_CHIP_88800GXE, /* Mach64 */
@@ -136,12 +115,6 @@ typedef enum
extern const char *ATIFoundryNames[];
-#ifndef AVOID_CPIO
-
-extern void ATIMach32ChipID(ATIPtr);
-
-#endif /* AVOID_CPIO */
-
extern void ATIMach64ChipID(ATIPtr, const CARD16);
extern ATIChipType ATIChipID(const CARD16, const CARD8);
diff --git a/src/aticlock.c b/src/aticlock.c
index 548cb620..2aa65c48 100644
--- a/src/aticlock.c
+++ b/src/aticlock.c
@@ -21,157 +21,6 @@
*/
/*
- * Adapters prior to V5 use 4 crystals. Adapters V5 and later use a clock
- * generator chip. V3 and V4 adapters differ when it comes to choosing clock
- * frequencies.
- *
- * VGA Wonder V3/V4 Adapter Clock Frequencies
- * R E G I S T E R S
- * 1CE(*) 3C2 3C2 Frequency
- * B2h/BEh
- * Bit 6/4 Bit 3 Bit 2 (MHz)
- * ------- ------- ------- -------
- * 0 0 0 50.000
- * 0 0 1 56.644
- * 0 1 0 Spare 1
- * 0 1 1 44.900
- * 1 0 0 44.900
- * 1 0 1 50.000
- * 1 1 0 Spare 2
- * 1 1 1 36.000
- *
- * (*): V3 uses index B2h, bit 6; V4 uses index BEh, bit 4
- *
- * V5, PLUS, XL and XL24 usually have an ATI 18810 clock generator chip, but
- * some have an ATI 18811-0, and it's quite conceivable that some exist with
- * ATI 18811-1's or ATI 18811-2's. Mach32 adapters are known to use any one of
- * these clock generators. Mach32 adapters also use a different dot clock
- * ordering. ATI says there is no reliable way for the driver to determine
- * which clock generator is on the adapter, but this driver will do its best to
- * do so anyway.
- *
- * VGA Wonder V5/PLUS/XL/XL24 Clock Frequencies
- * R E G I S T E R S
- * 1CE 1CE 3C2 3C2 Frequency
- * B9h BEh (MHz) 18811-0 18811-1
- * Bit 1 Bit 4 Bit 3 Bit 2 18810 18812-0 18811-2 (*5)
- * ------- ------- ------- ------- ------- ------- ------- -------
- * 0 0 0 0 30.240 30.240 135.000 75.000
- * 0 0 0 1 32.000 32.000 32.000 77.500
- * 0 0 1 0 37.500 110.000 110.000 80.000
- * 0 0 1 1 39.000 80.000 80.000 90.000
- * 0 1 0 0 42.954 42.954 100.000 25.175
- * 0 1 0 1 48.771 48.771 126.000 28.322
- * 0 1 1 0 (*1) 92.400 92.400 31.500
- * 0 1 1 1 36.000 36.000 36.000 36.000
- * 1 0 0 0 40.000 39.910 39.910 100.000
- * 1 0 0 1 (*4) 44.900 44.900 110.000
- * 1 0 1 0 75.000 75.000 75.000 126.000
- * 1 0 1 1 65.000 65.000 65.000 135.000
- * 1 1 0 0 50.350 50.350 50.350 40.000
- * 1 1 0 1 56.640 56.640 56.640 44.900
- * 1 1 1 0 (*2) (*3) (*3) 50.000
- * 1 1 1 1 44.900 44.900 44.900 65.000
- *
- * (*1) External 0 (supposedly 16.657 Mhz)
- * (*2) External 1 (supposedly 28.322 MHz)
- * (*3) This setting doesn't seem to generate anything
- * (*4) This setting is documented to be 56.644 MHz, but something close to 82
- * MHz has also been encountered.
- * (*5) This setting is for Dell OmniPlex 590 systems, with a 68800AX on the
- * motherboard, along with an AT&T21C498 DAC (which is reported as an
- * STG1700) and ICS2494AM clock generator (a.k.a. ATI 18811-?).
- *
- * Mach32 Clock Frequencies
- * R E G I S T E R S
- * 1CE 1CE 3C2 3C2 Frequency
- * B9h BEh (MHz) 18811-0 18811-1
- * Bit 1 Bit 4 Bit 3 Bit 2 18810 18812-0 18811-2 (*5)
- * ------- ------- ------- ------- ------- ------- ------- -------
- * 0 0 0 0 42.954 42.954 100.000 25.175
- * 0 0 0 1 48.771 48.771 126.000 28.322
- * 0 0 1 0 (*1) 92.400 92.400 31.500
- * 0 0 1 1 36.000 36.000 36.000 36.000
- * 0 1 0 0 30.240 30.240 135.000 75.000
- * 0 1 0 1 32.000 32.000 32.000 77.500
- * 0 1 1 0 37.500 110.000 110.000 80.000
- * 0 1 1 1 39.000 80.000 80.000 90.000
- * 1 0 0 0 50.350 50.350 50.350 40.000
- * 1 0 0 1 56.640 56.640 56.640 44.900
- * 1 0 1 0 (*2) (*3) (*3) 50.000
- * 1 0 1 1 44.900 44.900 44.900 65.000
- * 1 1 0 0 40.000 39.910 39.910 100.000
- * 1 1 0 1 (*4) 44.900 44.900 110.000
- * 1 1 1 0 75.000 75.000 75.000 126.000
- * 1 1 1 1 65.000 65.000 65.000 135.000
- *
- * (*1) External 0 (supposedly 16.657 Mhz)
- * (*2) External 1 (supposedly 28.322 MHz)
- * (*3) This setting doesn't seem to generate anything
- * (*4) This setting is documented to be 56.644 MHz, but something close to 82
- * MHz has also been encountered.
- * (*5) This setting is for Dell OmniPlex 590 systems, with a 68800AX on the
- * motherboard, along with an AT&T21C498 DAC (which is reported as an
- * STG1700) and ICS2494AM clock generator (a.k.a. ATI 18811-?).
- *
- * Note that, to reduce confusion, this driver masks out the different clock
- * ordering.
- *
- * For all adapters, these frequencies can be divided by 1 or 2. For all
- * adapters, except Mach32's and Mach64's, frequencies can also be divided by 3
- * or 4.
- *
- * Register 1CE, index B8h
- * Bit 7 Bit 6
- * ------- -------
- * 0 0 Divide by 1
- * 0 1 Divide by 2
- * 1 0 Divide by 3
- * 1 1 Divide by 4
- *
- * With respect to clocks, Mach64's are entirely different animals.
- *
- * The oldest Mach64's use one of the non-programmable clock generators
- * described above. In this case, the driver will handle clocks in much the
- * same way as it would for a Mach32.
- *
- * All other Mach64 adapters use a programmable clock generator. BIOS
- * initialisation programmes an initial set of frequencies. Two of these are
- * reserved to allow for the setting of modes that do not use a frequency from
- * this initial set. One of these reserved slots is used by the BIOS mode set
- * routine, the other by the particular accelerated driver used (MS-Windows,
- * AutoCAD, etc.). The slots reserved in this way are dependent on the
- * particular clock generator used by the adapter.
- *
- * If the driver does not support the adapter's clock generator, it will try to
- * match the (probed or specified) clocks to one of the following sets.
- *
- * Mach64 Clock Frequencies for unsupported programmable clock generators
- * R E G I S T E R S
- * 1CE 1CE 3C2 3C2 Frequency
- * B9h BEh (MHz)
- * Bit 1 Bit 4 Bit 3 Bit 2 Set 1 Set 2 Set 3
- * ------- ------- ------- ------- ------- ------- -------
- * 0 0 0 0 50.350 25.180 25.180
- * 0 0 0 1 56.640 28.320 28.320
- * 0 0 1 0 63.000 31.500 0.000
- * 0 0 1 1 72.000 36.000 0.000
- * 0 1 0 0 0.000 0.000 0.000
- * 0 1 0 1 110.000 110.000 0.000
- * 0 1 1 0 126.000 126.000 0.000
- * 0 1 1 1 135.000 135.000 0.000
- * 1 0 0 0 40.000 40.000 0.000
- * 1 0 0 1 44.900 44.900 0.000
- * 1 0 1 0 49.500 49.500 0.000
- * 1 0 1 1 50.000 50.000 0.000
- * 1 1 0 0 0.000 0.000 0.000
- * 1 1 0 1 80.000 80.000 0.000
- * 1 1 1 0 75.000 75.000 0.000
- * 1 1 1 1 65.000 65.000 0.000
- *
- * The driver will never select a setting of 0.000 MHz. The above comments on
- * clock ordering and clock divider apply here also.
- *
* For all supported programmable clock generators, the driver will ignore any
* XF86Config clock line and programme, as needed, the clock number reserved by
* the BIOS for accelerated drivers. The driver's mode initialisation routine
@@ -197,7 +46,6 @@
#include <stdlib.h>
#include "ati.h"
-#include "atiadapter.h"
#include "atichip.h"
#include "atidac.h"
#include "atidsp.h"
@@ -206,23 +54,6 @@
#include "atiwonderio.h"
/*
- * Definitions related to non-programmable clock generators.
- */
-const char *ATIClockNames[] =
-{
- "unknown",
- "IBM VGA compatible",
- "crystals",
- "ATI 18810 or similar",
- "ATI 18811-0 or similar",
- "ATI 18811-1 or similar",
- "ICS 2494-AM or similar",
- "Programmable (BIOS setting 1)",
- "Programmable (BIOS setting 2)",
- "Programmable (BIOS setting 3)"
-};
-
-/*
* Definitions related to programmable clock generators.
*/
static CARD16 ATIPostDividers[] = {1, 2, 4, 8, 16, 32, 64, 128},
@@ -274,264 +105,6 @@ ClockRec ATIClockDescriptors[] =
};
/*
- * XF86Config clocks line that start with the following will either be rejected
- * for ATI adapters, or accepted for non-ATI adapters.
- */
-static const int
-ATIVGAClocks[] =
-{
- 25175, 28322,
- -1
-};
-
-/*
- * The driver will attempt to match fixed clocks to one of the following
- * specifications.
- */
-static const int
-ATICrystalFrequencies[] =
-{
- 50000, 56644, 0, 44900, 44900, 50000, 0, 36000,
- -1
-},
-ATI18810Frequencies[] =
-{
- 30240, 32000, 37500, 39000, 42954, 48771, 0, 36000,
- 40000, 0, 75000, 65000, 50350, 56640, 0, 44900
-},
-ATI188110Frequencies[] =
-{
- 30240, 32000, 110000, 80000, 42954, 48771, 92400, 36000,
- 39910, 44900, 75000, 65000, 50350, 56640, 0, 44900
-},
-ATI188111Frequencies[] =
-{
- 135000, 32000, 110000, 80000, 100000, 126000, 92400, 36000,
- 39910, 44900, 75000, 65000, 50350, 56640, 0, 44900
-},
-ATI2494AMFrequencies[] =
-{
- 75000, 77500, 80000, 90000, 25175, 28322, 31500, 36000,
- 100000, 110000, 126000, 135000, 40000, 44900, 50000, 65000
-},
-ATIMach64AFrequencies[] =
-{
- 0, 110000, 126000, 135000, 50350, 56640, 63000, 72000,
- 0, 80000, 75000, 65000, 40000, 44900, 49500, 50000
-},
-ATIMach64BFrequencies[] =
-{
- 0, 110000, 126000, 135000, 25180, 28320, 31500, 36000,
- 0, 80000, 75000, 65000, 40000, 44900, 49500, 50000
-},
-ATIMach64CFrequencies[] =
-{
- 0, 0, 0, 0, 25180, 28320, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0
-},
-*SpecificationClockLine[] =
-{
- NULL,
- ATIVGAClocks,
- ATICrystalFrequencies,
- ATI18810Frequencies,
- ATI188110Frequencies,
- ATI188111Frequencies,
- ATI2494AMFrequencies,
- ATIMach64AFrequencies,
- ATIMach64BFrequencies,
- ATIMach64CFrequencies,
- NULL
-};
-
-/*
- * The driver will reject XF86Config clocks lines that start with, or are an
- * initial subset of, one of the following.
- */
-static const int
-ATIPre_2_1_1_Clocks_A[] = /* Based on 18810 */
-{
- 18000, 22450, 25175, 28320, 36000, 44900, 50350, 56640,
- 30240, 32000, 37500, 39000, 40000, 0, 75000, 65000,
- -1
-},
-ATIPre_2_1_1_Clocks_B[] = /* Based on 18811-0 */
-{
- 18000, 22450, 25175, 28320, 36000, 44900, 50350, 56640,
- 30240, 32000, 110000, 80000, 39910, 44900, 75000, 65000,
- -1
-},
-ATIPre_2_1_1_Clocks_C[] = /* Based on 18811-1 (or -2) */
-{
- 18000, 22450, 25175, 28320, 36000, 44900, 50350, 56640,
- 135000, 32000, 110000, 80000, 39910, 44900, 75000, 65000,
- -1
-},
-ATIPre_2_1_1_Clocks_D[] = /* Based on ICS 2494AM */
-{
- 18000, 32500, 20000, 22450, 36000, 65000, 40000, 44900,
- 75000, 77500, 80000, 90000, 100000, 110000, 126000, 135000,
- -1
-},
-ATIPre_2_1_1_Clocks_E[] = /* Based on programmable setting 1 */
-{
- 36000, 25000, 20000, 22450, 72000, 50000, 40000, 44900,
- 0, 110000, 126000, 135000, 0, 80000, 75000, 65000,
- -1
-},
-ATIPre_2_1_1_Clocks_F[] = /* Based on programmable setting 2 */
-{
- 18000, 25000, 20000, 22450, 36000, 50000, 40000, 44900,
- 0, 110000, 126000, 135000, 0, 80000, 75000, 65000,
- -1
-},
-*InvalidClockLine[] =
-{
- NULL,
- ATIVGAClocks,
- ATIPre_2_1_1_Clocks_A,
- ATIPre_2_1_1_Clocks_B,
- ATIPre_2_1_1_Clocks_C,
- ATIPre_2_1_1_Clocks_D,
- ATIPre_2_1_1_Clocks_E,
- ATIPre_2_1_1_Clocks_F,
- NULL
-};
-
-/*
- * Clock maps.
- */
-static const CARD8 ClockMaps[][4] =
-{
- /* Null map */
- { 0, 1, 2, 3},
- /* VGA Wonder map <-> Mach{8,32,64} */
- { 1, 0, 3, 2},
- /* VGA Wonder map <-> Accelerator */
- { 0, 2, 1, 3},
- /* VGA -> Accelerator map */
- { 2, 0, 3, 1},
- /* Accelerator -> VGA map */
- { 1, 3, 0, 2}
-};
-#define ATIVGAWonderClockMap ClockMaps[0]
-#define ATIVGAWonderClockUnmap ATIVGAWonderClockMap
-#define ATIMachVGAClockMap ClockMaps[1]
-#define ATIMachVGAClockUnmap ATIMachVGAClockMap
-#define ATIVGAProgrammableClockMap ClockMaps[2]
-#define ATIVGAProgrammableClockUnmap ATIVGAProgrammableClockMap
-#define ATIAcceleratorClockMap ClockMaps[3]
-#define ATIAcceleratorClockUnmap ClockMaps[4]
-#define ATIProgrammableClockMap ClockMaps[0]
-#define ATIProgrammableClockUnmap ATIProgrammableClockMap
-#define MapClockIndex(_ClockMap, _Index) \
- (SetBits((_ClockMap)[GetBits(_Index, 0x0CU)], 0x0CU) | \
- ((_Index) & ~0x0CU))
-
-/*
- * ATIMatchClockLine --
- *
- * This function tries to match the XF86Config clocks to one of an array of
- * clock lines. It returns a clock line number or 0.
- */
-static int
-ATIMatchClockLine
-(
- ScrnInfoPtr pScreenInfo,
- ATIPtr pATI,
- const int **ClockLine,
- const unsigned short int NumberOfClocks,
- const int CalibrationClockNumber,
- const int ClockMap
-)
-{
- int ClockChip = 0, ClockChipIndex = 0;
- int NumberOfMatchingClocks = 0;
- int MinimumGap = CLOCK_TOLERANCE + 1;
-
- /* For ATI adapters, reject generic VGA clocks */
-
-#ifndef AVOID_CPIO
-
- if (pATI->Adapter != ATI_ADAPTER_VGA)
-
-#endif /* AVOID_CPIO */
-
- {
- if (ClockLine == SpecificationClockLine)
- ClockChipIndex++;
- }
-
- /* If checking for XF86Config clock order, skip crystals */
- if (ClockMap)
- ClockChipIndex++;
-
- for (; ClockLine[++ClockChipIndex]; )
- {
- int MaximumGap = 0, ClockCount = 0, ClockIndex = 0;
-
-#ifndef AVOID_CPIO
-
- /* Only Mach64's and later can have programmable clocks */
- if ((ClockChipIndex >= ATI_CLOCK_MACH64A) &&
- (pATI->Adapter < ATI_ADAPTER_MACH64))
- break;
-
-#endif /* AVOID_CPIO */
-
- for (; ClockIndex < NumberOfClocks; ClockIndex++)
- {
- int Gap, XF86ConfigClock, SpecificationClock;
-
- SpecificationClock = ClockLine[ClockChipIndex]
- [MapClockIndex(ClockMaps[ClockMap], ClockIndex)];
- if (SpecificationClock < 0)
- break;
- if (!SpecificationClock)
- continue;
-
- XF86ConfigClock = pScreenInfo->clock[ClockIndex];
- if (!XF86ConfigClock)
- continue;
-
- Gap = abs(XF86ConfigClock - SpecificationClock);
- if (Gap >= MinimumGap)
- goto SkipThisClockGenerator;
- if (!Gap)
- {
- if (ClockIndex == CalibrationClockNumber)
- continue;
- }
- else if (Gap > MaximumGap)
- {
- MaximumGap = Gap;
- }
- ClockCount++;
- }
-
- if (ClockCount <= NumberOfMatchingClocks)
- continue;
- NumberOfMatchingClocks = ClockCount;
- ClockChip = ClockChipIndex;
- if (!(MinimumGap = MaximumGap))
- break;
-
-SkipThisClockGenerator:;
-
-#ifndef AVOID_CPIO
-
- /* For non-ATI adapters, only normalise standard VGA clocks */
- if (pATI->Adapter == ATI_ADAPTER_VGA)
- break;
-
-#endif /* AVOID_CPIO */
-
- }
-
- return ClockChip;
-}
-
-/*
* ATIClockPreInit --
*
* This function is called by ATIPreInit() and handles the XF86Config clocks
@@ -541,72 +114,16 @@ void
ATIClockPreInit
(
ScrnInfoPtr pScreenInfo,
- ATIPtr pATI,
- GDevPtr pGDev,
- ClockRangePtr pRange
+ ATIPtr pATI
)
{
- double ScaleFactor;
- unsigned short int NumberOfUndividedClocks;
- unsigned short int NumberOfDividers, NumberOfClocks;
- int CalibrationClockNumber, CalibrationClockValue;
- int ClockIndex, SpecificationClock, ClockMap = 0, Index;
- CARD8 CanDisableInterrupts;
-
-#ifndef AVOID_CPIO
-
- CARD8 genmo;
-
-#endif /* AVOID_CPIO */
-
- /*
- * Decide what to do about the XF86Config clocks for programmable clock
- * generators.
- */
- if (pATI->ProgrammableClock != ATI_CLOCK_FIXED)
- {
- /* Check for those that are not (yet) handled */
- if ((pATI->ProgrammableClock == ATI_CLOCK_UNKNOWN) ||
- (pATI->ProgrammableClock > NumberOf(ATIClockDescriptors)))
- {
- xf86DrvMsgVerb(pScreenInfo->scrnIndex, X_WARNING, 0,
- "Unknown programmable clock generator type (0x%02X)"
- " detected.\n", pATI->ProgrammableClock);
- }
- else if (pATI->ClockDescriptor.MaxN <= 0)
- {
- xf86DrvMsgVerb(pScreenInfo->scrnIndex, X_WARNING, 0,
- "Unsupported programmable clock generator detected: %s.\n",
- pATI->ClockDescriptor.ClockName);
- }
- else
- {
/*
* Recognise supported clock generators. This involves telling the
* rest of the server about it and (re-)initializing the XF86Config
* clocks line.
*/
- pRange->clockIndex = -1;
pScreenInfo->progClock = TRUE;
- /* Set internal clock ordering */
-
-#ifndef AVOID_CPIO
-
- if (pATI->NewHW.crtc == ATI_CRTC_VGA)
- {
- pATI->NewHW.ClockMap = ATIVGAProgrammableClockMap;
- pATI->NewHW.ClockUnmap = ATIVGAProgrammableClockUnmap;
- }
- else
-
-#endif /* AVOID_CPIO */
-
- {
- pATI->NewHW.ClockMap = ATIProgrammableClockMap;
- pATI->NewHW.ClockUnmap = ATIProgrammableClockUnmap;
- }
-
xf86DrvMsg(pScreenInfo->scrnIndex, X_PROBED,
"%s programmable clock generator detected.\n",
pATI->ClockDescriptor.ClockName);
@@ -622,11 +139,6 @@ ATIClockPreInit
(double)pATI->ReferenceNumerator /
((double)pATI->ReferenceDenominator * 1000.0));
- /* Clobber XF86Config clocks line */
- if (pGDev->numclocks)
- xf86DrvMsg(pScreenInfo->scrnIndex, X_NOTICE,
- "XF86Config clocks specification ignored.\n");
-
if (pATI->ProgrammableClock == ATI_CLOCK_CH8398)
{ /* First two are fixed */
pScreenInfo->numClocks = 2;
@@ -641,656 +153,6 @@ ATIClockPreInit
*/
pATI->ReferenceNumerator <<= 1;
}
-
- return; /* ... to ATIPreInit() */
- }
- }
-
-#ifndef AVOID_CPIO
-
- /* Set default clock maps */
- pATI->NewHW.ClockMap = ATIVGAWonderClockMap;
- pATI->NewHW.ClockUnmap = ATIVGAWonderClockUnmap;
-
-#endif /* AVOID_CPIO */
-
- /*
- * Determine the number of clock values the adapter should be able to
- * generate and the dot clock to use for probe calibration.
- */
-ProbeClocks:
-
-#ifndef AVOID_CPIO
-
- if (pATI->Adapter == ATI_ADAPTER_VGA)
- {
- NumberOfDividers = 1;
- NumberOfUndividedClocks = 4;
- CalibrationClockNumber = 1;
- CalibrationClockValue = 28322;
- }
- else
-
-#endif /* AVOID_CPIO */
-
- {
-
-#ifndef AVOID_CPIO
-
- NumberOfDividers = 4;
- if ((pATI->Chip <= ATI_CHIP_18800) ||
- (pATI->Adapter == ATI_ADAPTER_V4))
- {
- NumberOfUndividedClocks = 8;
- /* Actually, any undivided clock will do */
- CalibrationClockNumber = 1;
- CalibrationClockValue = 56644;
- }
- else
-
-#endif /* AVOID_CPIO */
-
- {
- NumberOfUndividedClocks = 16;
-
-#ifndef AVOID_CPIO
-
- CalibrationClockNumber = 7;
- CalibrationClockValue = 36000;
- if (pATI->Chip >= ATI_CHIP_68800)
-
-#endif /* AVOID_CPIO */
-
- {
- NumberOfDividers = 2;
- if (pATI->Chip >= ATI_CHIP_264CT)
- {
- NumberOfDividers = 1;
- NumberOfUndividedClocks = 4;
- CalibrationClockNumber = 1;
- CalibrationClockValue = 28322;
- }
- else
-
-#ifndef AVOID_CPIO
-
- if (pATI->Adapter >= ATI_ADAPTER_MACH64)
-
-#endif /* AVOID_CPIO */
-
- {
- CalibrationClockNumber = 10 /* or 11 */;
- CalibrationClockValue = 75000 /* or 65000 */;
- }
-
- /*
- * When selecting clocks, all ATI accelerators use a different
- * clock ordering.
- */
-
-#ifndef AVOID_CPIO
-
- if (pATI->NewHW.crtc == ATI_CRTC_VGA)
- {
- pATI->NewHW.ClockMap = ATIMachVGAClockMap;
- pATI->NewHW.ClockUnmap = ATIMachVGAClockUnmap;
- }
- else
-
-#endif /* AVOID_CPIO */
-
- {
- pATI->NewHW.ClockMap = ATIAcceleratorClockMap;
- pATI->NewHW.ClockUnmap = ATIAcceleratorClockUnmap;
- }
- }
- }
- }
-
- pATI->OldHW.ClockMap = pATI->NewHW.ClockMap;
- pATI->OldHW.ClockUnmap = pATI->NewHW.ClockUnmap;
-
- NumberOfClocks = NumberOfUndividedClocks * NumberOfDividers;
-
- /*
- * Respect any XF86Config clocks line. Well, that's the theory, anyway.
- * In practice, however, the regular use of probed values is widespread, at
- * times causing otherwise inexplicable results. So, attempt to normalise
- * the clocks to known (i.e. specification) values.
- */
- if (!pGDev->numclocks || pATI->OptionProbeClocks ||
- xf86ServerIsOnlyProbing())
- {
- if (pATI->ProgrammableClock != ATI_CLOCK_FIXED)
- {
- /*
- * For unsupported programmable clock generators, pick the highest
- * frequency set by BIOS initialisation for clock calibration.
- */
- CalibrationClockNumber = CalibrationClockValue = 0;
- for (ClockIndex = 0;
- ClockIndex < NumberOfUndividedClocks;
- ClockIndex++)
- {
- if (CalibrationClockValue < pATI->BIOSClocks[ClockIndex])
- {
- CalibrationClockNumber = ClockIndex;
- CalibrationClockValue = pATI->BIOSClocks[ClockIndex];
- }
- }
- CalibrationClockNumber =
- MapClockIndex(pATI->NewHW.ClockUnmap, CalibrationClockNumber);
- CalibrationClockValue *= 10;
- }
-
-#ifndef AVOID_CPIO
-
- if (pATI->VGAAdapter != ATI_ADAPTER_NONE)
- {
- /*
- * The current video state needs to be saved before the clock
- * probe, and restored after. Video memory corruption and other
- * effects occur because, at this early stage, the clock probe
- * cannot reliably be prevented from enabling frequencies that are
- * greater than what the adapter can handle.
- */
- ATIModeSave(pScreenInfo, pATI, &pATI->OldHW);
-
- /* Ensure clock select pins are not OR'ed with anything */
- if (pATI->CPIO_VGAWonder && (pATI->OldHW.crtc == ATI_CRTC_VGA))
- ATIModifyExtReg(pATI, 0xB5U, pATI->OldHW.b5, 0x7FU, 0x00U);
- }
-
-#endif /* AVOID_CPIO */
-
- /*
- * Probe the adapter for clock values. The following is essentially
- * the common layer's xf86GetClocks() reworked to fit. One difference
- * is the ability to monitor a VSync bit in MMIO space.
- */
- CanDisableInterrupts = TRUE; /* An assumption verified below */
-
- for (ClockIndex = 0; ClockIndex < NumberOfClocks; ClockIndex++)
- {
- pScreenInfo->clock[ClockIndex] = 0;
-
- /* Remap clock number */
- Index = MapClockIndex(pATI->OldHW.ClockMap, ClockIndex);
-
- /* Select the clock */
- switch (pATI->OldHW.crtc)
- {
-
-#ifndef AVOID_CPIO
-
- case ATI_CRTC_VGA:
- /* Get generic two low-order bits */
- genmo = (inb(R_GENMO) & 0xF3U) | ((Index << 2) & 0x0CU);
-
- if (pATI->CPIO_VGAWonder)
- {
- /*
- * On adapters with crystals, switching to one of the
- * spare assignments doesn't do anything (i.e. the
- * previous setting remains in effect). So, disable
- * their selection.
- */
- if (((Index & 0x03U) == 0x02U) &&
- ((pATI->Chip <= ATI_CHIP_18800) ||
- (pATI->Adapter == ATI_ADAPTER_V4)))
- continue;
-
- /* Start sequencer reset */
- PutReg(SEQX, 0x00U, 0x00U);
-
- /* Set high-order bits */
- if (pATI->Chip <= ATI_CHIP_18800)
- {
- ATIModifyExtReg(pATI, 0xB2U, -1, 0xBFU,
- Index << 4);
- }
- else
- {
- ATIModifyExtReg(pATI, 0xBEU, -1, 0xEFU,
- Index << 2);
- if (pATI->Adapter != ATI_ADAPTER_V4)
- {
- Index >>= 1;
- ATIModifyExtReg(pATI, 0xB9U, -1, 0xFDU,
- Index >> 1);
- }
- }
-
- /* Set clock divider bits */
- ATIModifyExtReg(pATI, 0xB8U, -1, 0x00U,
- (Index << 3) & 0xC0U);
- }
- else
- {
- /*
- * Reject clocks that cannot be selected.
- */
- if (Index & ~0x03U)
- continue;
-
- /* Start sequencer reset */
- PutReg(SEQX, 0x00U, 0x00U);
- }
-
- /* Must set miscellaneous output register last */
- outb(GENMO, genmo);
-
- /* End sequencer reset */
- PutReg(SEQX, 0x00U, 0x03U);
-
- break;
-
-#endif /* AVOID_CPIO */
-
- case ATI_CRTC_MACH64:
- out8(CLOCK_CNTL, CLOCK_STROBE |
- SetBits(Index, CLOCK_SELECT | CLOCK_DIVIDER));
- break;
-
- default:
- continue;
- }
-
- usleep(50000); /* Let clock stabilise */
-
- xf86SetPriority(TRUE);
-
- /* Try to disable interrupts */
- if (CanDisableInterrupts && !xf86DisableInterrupts())
- {
- xf86DrvMsg(pScreenInfo->scrnIndex, X_WARNING,
- "Unable to disable interrupts; Clock probe will not be as"
- " accurate.\n");
- CanDisableInterrupts = FALSE;
- }
-
- /*
- * Generate a count while monitoring the vertical sync or blanking
- * pulse. This is dependent on the CRTC used by the mode on server
- * entry.
- */
- switch (pATI->OldHW.crtc)
- {
-
-#ifndef AVOID_CPIO
-
- case ATI_CRTC_VGA:
- /* Verify vertical sync pulses are in fact occurring */
- Index = 1 << 19;
- while (!(inb(GENS1(pATI->CPIO_VGABase)) & 0x08U))
- if (Index-- <= 0)
- goto EnableInterrupts;
- Index = 1 << 19;
- while (inb(GENS1(pATI->CPIO_VGABase)) & 0x08U)
- if (Index-- <= 0)
- goto EnableInterrupts;
- Index = 1 << 19;
- while (!(inb(GENS1(pATI->CPIO_VGABase)) & 0x08U))
- if (Index-- <= 0)
- goto EnableInterrupts;
-
- /* Generate the count */
- for (Index = 0; Index < 8; Index++)
- {
- while (inb(GENS1(pATI->CPIO_VGABase)) & 0x08U)
- pScreenInfo->clock[ClockIndex]++;
- while (!(inb(GENS1(pATI->CPIO_VGABase)) & 0x08U))
- pScreenInfo->clock[ClockIndex]++;
- }
- break;
-
-#endif /* AVOID_CPIO */
-
- case ATI_CRTC_MACH64:
- /* Verify vertical blanking pulses are in fact occurring */
- Index = 1 << 19;
- while (!(inr(CRTC_INT_CNTL) & CRTC_VBLANK))
- if (Index-- <= 0)
- goto EnableInterrupts;
- Index = 1 << 19;
- while (inr(CRTC_INT_CNTL) & CRTC_VBLANK)
- if (Index-- <= 0)
- goto EnableInterrupts;
- Index = 1 << 19;
- while (!(inr(CRTC_INT_CNTL) & CRTC_VBLANK))
- if (Index-- <= 0)
- goto EnableInterrupts;
-
- /* Generate the count */
- for (Index = 0; Index < 4; Index++)
- {
- while (inr(CRTC_INT_CNTL) & CRTC_VBLANK)
- pScreenInfo->clock[ClockIndex]++;
- while (!(inr(CRTC_INT_CNTL) & CRTC_VBLANK))
- pScreenInfo->clock[ClockIndex]++;
- }
- break;
-
- default:
- break;
- }
-
- EnableInterrupts:
- if (CanDisableInterrupts)
- xf86EnableInterrupts();
-
- xf86SetPriority(FALSE);
- }
-
- ScaleFactor = (double)CalibrationClockValue *
- (double)pScreenInfo->clock[CalibrationClockNumber];
-
- /* Scale the clocks from counts to kHz */
- for (ClockIndex = 0; ClockIndex < NumberOfClocks; ClockIndex++)
- {
- if (ClockIndex == CalibrationClockNumber)
- pScreenInfo->clock[ClockIndex] = CalibrationClockValue;
- else if (pScreenInfo->clock[ClockIndex])
- /* Round to the nearest 10 kHz */
- pScreenInfo->clock[ClockIndex] =
- (int)(((ScaleFactor /
- (double)pScreenInfo->clock[ClockIndex]) +
- 5) / 10) * 10;
- }
-
- pScreenInfo->numClocks = NumberOfClocks;
-
-#ifndef AVOID_CPIO
-
- if (pATI->VGAAdapter != ATI_ADAPTER_NONE)
- {
- /* Restore video state */
- ATIModeSet(pScreenInfo, pATI, &pATI->OldHW);
- xfree(pATI->OldHW.frame_buffer);
- pATI->OldHW.frame_buffer = NULL;
- }
-
-#endif /* AVOID_CPIO */
-
- /* Tell user clocks were probed, instead of supplied */
- pATI->OptionProbeClocks = TRUE;
-
- /* Attempt to match probed clocks to a known specification */
- pATI->Clock = ATIMatchClockLine(pScreenInfo, pATI,
- SpecificationClockLine, NumberOfUndividedClocks,
- CalibrationClockNumber, 0);
-
-#ifndef AVOID_CPIO
-
- if ((pATI->Chip <= ATI_CHIP_18800) ||
- (pATI->Adapter == ATI_ADAPTER_V4))
- {
- /* V3 and V4 adapters don't have clock chips */
- if (pATI->Clock > ATI_CLOCK_CRYSTALS)
- pATI->Clock = ATI_CLOCK_NONE;
- }
- else
-
-#endif /* AVOID_CPIO */
-
- {
- /* All others don't have crystals */
- if (pATI->Clock == ATI_CLOCK_CRYSTALS)
- pATI->Clock = ATI_CLOCK_NONE;
- }
- }
- else
- {
- /*
- * Allow for an initial subset of specification clocks. Can't allow
- * for any more than that though...
- */
- if (NumberOfClocks > pGDev->numclocks)
- {
- NumberOfClocks = pGDev->numclocks;
- if (NumberOfUndividedClocks > NumberOfClocks)
- NumberOfUndividedClocks = NumberOfClocks;
- }
-
- /* Move XF86Config clocks into the ScrnInfoRec */
- for (ClockIndex = 0; ClockIndex < NumberOfClocks; ClockIndex++)
- pScreenInfo->clock[ClockIndex] = pGDev->clock[ClockIndex];
- pScreenInfo->numClocks = NumberOfClocks;
-
- /* Attempt to match clocks to a known specification */
- pATI->Clock = ATIMatchClockLine(pScreenInfo, pATI,
- SpecificationClockLine, NumberOfUndividedClocks, -1, 0);
-
-#ifndef AVOID_CPIO
-
- if (pATI->Adapter != ATI_ADAPTER_VGA)
-
-#endif /* AVOID_CPIO */
-
- {
- if (pATI->Clock == ATI_CLOCK_NONE)
- {
- /*
- * Reject certain clock lines that are obviously wrong. This
- * includes the standard VGA clocks for ATI adapters, and clock
- * lines that could have been used with the pre-2.1.1 driver.
- */
- if (ATIMatchClockLine(pScreenInfo, pATI, InvalidClockLine,
- NumberOfClocks, -1, 0))
- {
- pATI->OptionProbeClocks = TRUE;
- }
- else
-
-#ifndef AVOID_CPIO
-
- if ((pATI->Chip >= ATI_CHIP_18800) &&
- (pATI->Adapter != ATI_ADAPTER_V4))
-
-#endif /* AVOID_CPIO */
-
- {
- /*
- * Check for clocks that are specified in the wrong order.
- * This is meant to catch those who are trying to use the
- * clock order intended for the old accelerated servers.
- */
- while ((++ClockMap, ClockMap %= NumberOf(ClockMaps)))
- {
- pATI->Clock = ATIMatchClockLine(pScreenInfo, pATI,
- SpecificationClockLine, NumberOfUndividedClocks,
- -1, ClockMap);
- if (pATI->Clock != ATI_CLOCK_NONE)
- {
- xf86DrvMsgVerb(pScreenInfo->scrnIndex,
- X_WARNING, 0,
- "XF86Config clock ordering incorrect. Clocks"
- " will be reordered.\n");
- break;
- }
- }
- }
- }
- else
- /* Ensure crystals are not matched to clock chips, and vice versa */
-
-#ifndef AVOID_CPIO
-
- if ((pATI->Chip <= ATI_CHIP_18800) ||
- (pATI->Adapter == ATI_ADAPTER_V4))
- {
- if (pATI->Clock > ATI_CLOCK_CRYSTALS)
- pATI->OptionProbeClocks = TRUE;
- }
- else
-
-#endif /* AVOID_CPIO */
-
- {
- if (pATI->Clock == ATI_CLOCK_CRYSTALS)
- pATI->OptionProbeClocks = TRUE;
- }
-
- if (pATI->OptionProbeClocks)
- {
- xf86DrvMsgVerb(pScreenInfo->scrnIndex, X_WARNING, 0,
- "Invalid or obsolete XF86Config clocks line rejected.\n"
- " Clocks will be probed.\n");
- goto ProbeClocks;
- }
- }
- }
-
- if (pATI->ProgrammableClock != ATI_CLOCK_FIXED)
- {
- pATI->ProgrammableClock = ATI_CLOCK_FIXED;
- }
- else if (pATI->Clock == ATI_CLOCK_NONE)
- {
- xf86DrvMsgVerb(pScreenInfo->scrnIndex, X_WARNING, 0,
- "Unknown clock generator detected.\n");
- }
- else
-
-#ifndef AVOID_CPIO
-
- if (pATI->Clock == ATI_CLOCK_CRYSTALS)
- {
- xf86DrvMsg(pScreenInfo->scrnIndex, X_PROBED,
- "This adapter uses crystals to generate clock frequencies.\n");
- }
- else if (pATI->Clock != ATI_CLOCK_VGA)
-
-#endif /* AVOID_CPIO */
-
- {
- xf86DrvMsg(pScreenInfo->scrnIndex, X_PROBED,
- "%s clock chip detected.\n", ATIClockNames[pATI->Clock]);
- }
-
- if (pATI->Clock != ATI_CLOCK_NONE)
- {
- /* Replace undivided clocks with specification values */
- for (ClockIndex = 0;
- ClockIndex < NumberOfUndividedClocks;
- ClockIndex++)
- {
- /*
- * Don't replace clocks that are probed, documented, or set by the
- * user to zero. One exception is that we need to override the
- * user's value for the spare settings on a crystal-based adapter.
- * Another exception is when the user specifies the clock ordering
- * intended for the old accelerated servers.
- */
- SpecificationClock =
- SpecificationClockLine[pATI->Clock][ClockIndex];
- if (SpecificationClock < 0)
- break;
- if (!ClockMap)
- {
- if (!pScreenInfo->clock[ClockIndex])
- continue;
- if (!SpecificationClock)
- {
- if (pATI->Clock != ATI_CLOCK_CRYSTALS)
- continue;
- }
- else
- {
- /*
- * Due to the way clock lines are matched, the following
- * can prevent the override if the clock is probed,
- * documented or set by the user to a value greater than
- * maxClock.
- */
- if (abs(SpecificationClock -
- pScreenInfo->clock[ClockIndex]) > CLOCK_TOLERANCE)
- continue;
- }
- }
- pScreenInfo->clock[ClockIndex] = SpecificationClock;
- }
-
- /* Adjust divided clocks */
- for (ClockIndex = NumberOfUndividedClocks;
- ClockIndex < NumberOfClocks;
- ClockIndex++)
- pScreenInfo->clock[ClockIndex] = ATIDivide(
- pScreenInfo->clock[ClockIndex % NumberOfUndividedClocks],
- (ClockIndex / NumberOfUndividedClocks) + 1, 0, 0);
- }
-
- /* Tell user about fixed clocks */
- xf86ShowClocks(pScreenInfo, pATI->OptionProbeClocks ? X_PROBED : X_CONFIG);
-
- /* Prevent selection of high clocks, even by V_CLKDIV2 modes */
- for (ClockIndex = 0; ClockIndex < NumberOfClocks; ClockIndex++)
- if (pScreenInfo->clock[ClockIndex] > pRange->maxClock)
- pScreenInfo->clock[ClockIndex] = 0;
-}
-
-/*
- * ATIClockSave --
- *
- * This function saves that part of an ATIHWRec that relates to clocks.
- */
-void
-ATIClockSave
-(
- ScrnInfoPtr pScreenInfo,
- ATIPtr pATI,
- ATIHWPtr pATIHW
-)
-{
- if (pScreenInfo->vtSema && (pATI->ProgrammableClock > ATI_CLOCK_FIXED))
- {
-
-#ifndef AVOID_CPIO
-
- if (pATIHW->crtc == ATI_CRTC_VGA)
- {
- pATIHW->ClockMap = ATIVGAProgrammableClockMap;
- pATIHW->ClockUnmap = ATIVGAProgrammableClockUnmap;
- }
- else
-
-#endif /* AVOID_CPIO */
-
- {
- pATIHW->ClockMap = ATIProgrammableClockMap;
- pATIHW->ClockUnmap = ATIProgrammableClockUnmap;
- }
- }
- else
- {
-
-#ifndef AVOID_CPIO
-
- if (pATIHW->crtc != ATI_CRTC_VGA)
-
-#endif /* AVOID_CPIO */
-
- {
- pATIHW->ClockMap = ATIAcceleratorClockMap;
- pATIHW->ClockUnmap = ATIAcceleratorClockUnmap;
- }
-
-#ifndef AVOID_CPIO
-
- else if (pATI->Chip < ATI_CHIP_68800)
- {
- pATIHW->ClockMap = ATIVGAWonderClockMap;
- pATIHW->ClockUnmap = ATIVGAWonderClockUnmap;
- }
- else
- {
- pATIHW->ClockMap = ATIMachVGAClockMap;
- pATIHW->ClockUnmap = ATIMachVGAClockUnmap;
- }
-
-#endif /* AVOID_CPIO */
-
- }
}
/*
@@ -1315,14 +177,14 @@ ATIClockCalculate
/* Set default values */
pATIHW->FeedbackDivider = pATIHW->ReferenceDivider = pATIHW->PostDivider = 0;
- if ((pATI->ProgrammableClock <= ATI_CLOCK_FIXED) ||
- ((pATI->ProgrammableClock == ATI_CLOCK_CH8398) &&
+ if (((pATI->ProgrammableClock == ATI_CLOCK_CH8398) &&
(pMode->ClockIndex < 2)))
{
- /* Use a fixed clock */
- ClockSelect = pMode->ClockIndex;
+ xf86DrvMsg(iScreen, X_ERROR,
+ "First two clocks of Chrontel 8398 clock generator are fixed\n");
+ return FALSE;
}
- else
+
{
/* Generate clock programme word, using units of kHz */
MinimumGap = ((unsigned int)(-1)) >> 1;
@@ -1410,54 +272,12 @@ ATIClockCalculate
ATIDSPCalculate(pATI, pATIHW, pMode);
}
- /* Set clock select bits, after remapping them */
- pATIHW->clock = ClockSelect; /* Save pre-map clock number */
- ClockSelect = MapClockIndex(pATIHW->ClockMap, ClockSelect);
+ /* Set clock select bits */
+ pATIHW->clock = ClockSelect;
- switch (pATIHW->crtc)
{
-
-#ifndef AVOID_CPIO
-
- case ATI_CRTC_VGA:
- pATIHW->genmo = (pATIHW->genmo & 0xF3U) |
- ((ClockSelect << 2) & 0x0CU);
-
- if (pATI->CPIO_VGAWonder)
- {
- /* Set ATI clock select bits */
- if (pATI->Chip <= ATI_CHIP_18800)
- {
- pATIHW->b2 = (pATIHW->b2 & 0xBFU) |
- ((ClockSelect << 4) & 0x40U);
- }
- else
- {
- pATIHW->be = (pATIHW->be & 0xEFU) |
- ((ClockSelect << 2) & 0x10U);
- if (pATI->Adapter != ATI_ADAPTER_V4)
- {
- ClockSelect >>= 1;
- pATIHW->b9 = (pATIHW->b9 & 0xFDU) |
- ((ClockSelect >> 1) & 0x02U);
- }
- }
-
- /* Set clock divider bits */
- pATIHW->b8 = (pATIHW->b8 & 0x3FU) |
- ((ClockSelect << 3) & 0xC0U);
- }
- break;
-
-#endif /* AVOID_CPIO */
-
- case ATI_CRTC_MACH64:
pATIHW->clock_cntl = CLOCK_STROBE |
SetBits(ClockSelect, CLOCK_SELECT | CLOCK_DIVIDER);
- break;
-
- default:
- break;
}
return TRUE;
diff --git a/src/aticlock.h b/src/aticlock.h
index b58b8246..1d3f1b9c 100644
--- a/src/aticlock.h
+++ b/src/aticlock.h
@@ -28,24 +28,6 @@
#include "xf86str.h"
/*
- * Definitions related to non-programmable clock generators.
- */
-typedef enum
-{
- ATI_CLOCK_NONE = 0,
- ATI_CLOCK_VGA = 1,
- ATI_CLOCK_CRYSTALS = 2,
- ATI_CLOCK_18810,
- ATI_CLOCK_18811_0,
- ATI_CLOCK_18811_1,
- ATI_CLOCK_2494AM,
- ATI_CLOCK_MACH64A,
- ATI_CLOCK_MACH64B,
- ATI_CLOCK_MACH64C
-} ATIClockType;
-extern const char *ATIClockNames[];
-
-/*
* Definitions related to programmable clock generators.
*/
typedef enum
@@ -73,8 +55,7 @@ typedef struct
} ClockRec, *ClockPtr;
extern ClockRec ATIClockDescriptors[];
-extern void ATIClockPreInit(ScrnInfoPtr, ATIPtr, GDevPtr, ClockRangePtr);
-extern void ATIClockSave(ScrnInfoPtr, ATIPtr, ATIHWPtr);
+extern void ATIClockPreInit(ScrnInfoPtr, ATIPtr);
extern Bool ATIClockCalculate(int, ATIPtr, ATIHWPtr, DisplayModePtr);
extern void ATIClockSet(ATIPtr, ATIHWPtr);
diff --git a/src/aticonfig.c b/src/aticonfig.c
index feb5b95b..988edfda 100644
--- a/src/aticonfig.c
+++ b/src/aticonfig.c
@@ -30,7 +30,6 @@
#include <string.h>
#include "ati.h"
-#include "atiadapter.h"
#include "atichip.h"
#include "aticonfig.h"
#include "aticursor.h"
@@ -113,6 +112,7 @@ ATIProcessOptions
(void)memcpy(PublicOption, ATIPublicOptions, ATIPublicOptionSize);
+# define ProbeSparse PublicOption[ATI_OPTION_PROBE_SPARSE].value.bool
# define Accel PublicOption[ATI_OPTION_ACCEL].value.bool
# define BIOSDisplay PrivateOption[ATI_OPTION_BIOS_DISPLAY].value.bool
# define Blend PrivateOption[ATI_OPTION_BLEND].value.bool
@@ -122,12 +122,6 @@ ATIProcessOptions
# define Devel PrivateOption[ATI_OPTION_DEVEL].value.bool
# define HWCursor PublicOption[ATI_OPTION_HWCURSOR].value.bool
-#ifndef AVOID_CPIO
-
-# define Linear PublicOption[ATI_OPTION_LINEAR].value.bool
-
-#endif /* AVOID_CPIO */
-
#ifdef XF86DRI_DEVEL
# define IsPCI PublicOption[ATI_OPTION_IS_PCI].value.bool
@@ -149,7 +143,6 @@ ATIProcessOptions
# define CacheMMIO PublicOption[ATI_OPTION_MMIO_CACHE].value.bool
# define TestCacheMMIO PublicOption[ATI_OPTION_TEST_MMIO_CACHE].value.bool
# define PanelDisplay PublicOption[ATI_OPTION_PANEL_DISPLAY].value.bool
-# define ProbeClocks PublicOption[ATI_OPTION_PROBE_CLOCKS].value.bool
# define ShadowFB PublicOption[ATI_OPTION_SHADOW_FB].value.bool
# define SWCursor PublicOption[ATI_OPTION_SWCURSOR].value.bool
# define AccelMethod PublicOption[ATI_OPTION_ACCELMETHOD].value.str
@@ -163,22 +156,9 @@ ATIProcessOptions
xf86CollectOptions(pScreenInfo, NULL);
/* Set non-zero defaults */
-
-#ifndef AVOID_CPIO
-
- if (pATI->Adapter >= ATI_ADAPTER_MACH64)
-
-#endif /* AVOID_CPIO */
-
{
Accel = CacheMMIO = HWCursor = TRUE;
-#ifndef AVOID_CPIO
-
- Linear = TRUE;
-
-#endif /* AVOID_CPIO */
-
#ifdef TV_OUT
TvStd = "None"; /* No tv standard change requested */
@@ -208,20 +188,8 @@ ATIProcessOptions
xf86ProcessOptions(pScreenInfo->scrnIndex, pScreenInfo->options,
PrivateOption);
-#ifndef AVOID_CPIO
-
- /* Disable linear apertures if the OS doesn't support them */
- if (!xf86LinearVidMem() && Linear)
- {
- if (PublicOption[ATI_OPTION_LINEAR].found)
- xf86DrvMsg(pScreenInfo->scrnIndex, X_WARNING,
- "OS does not support linear apertures.\n");
- Linear = FALSE;
- }
-
-#endif /* AVOID_CPIO */
-
/* Move option values into driver private structure */
+ pATI->OptionProbeSparse = ProbeSparse;
pATI->OptionAccel = Accel;
pATI->OptionBIOSDisplay = BIOSDisplay;
pATI->OptionBlend = Blend;
@@ -229,12 +197,6 @@ ATIProcessOptions
pATI->OptionCSync = CSync;
pATI->OptionDevel = Devel;
-#ifndef AVOID_CPIO
-
- pATI->OptionLinear = Linear;
-
-#endif /* AVOID_CPIO */
-
#ifdef TV_OUT
if (TvOut && pATI->Chip < ATI_CHIP_264GT) {
@@ -262,7 +224,6 @@ ATIProcessOptions
pATI->OptionMMIOCache = CacheMMIO;
pATI->OptionTestMMIOCache = TestCacheMMIO;
- pATI->OptionProbeClocks = ProbeClocks;
pATI->OptionShadowFB = ShadowFB;
pATI->OptionLCDSync = LCDSync;
diff --git a/src/aticonsole.c b/src/aticonsole.c
index 5e06578a..6d0c662a 100644
--- a/src/aticonsole.c
+++ b/src/aticonsole.c
@@ -29,9 +29,7 @@
#endif
#include "ati.h"
-#include "atiadapter.h"
#include "aticonsole.h"
-#include "aticrtc.h"
#include "atii2c.h"
#include "atilock.h"
#include "atimach64.h"
@@ -46,12 +44,6 @@
#include "atidri.h"
#endif
-#include "mach64_common.h"
-
-
-
-#include "xf86.h"
-
#ifdef TV_OUT
#include "atichip.h"
@@ -92,23 +84,8 @@ ATISaveScreen
return TRUE;
pATI = ATIPTR(pScreenInfo);
- switch (pATI->NewHW.crtc)
{
-
-#ifndef AVOID_CPIO
-
- case ATI_CRTC_VGA:
- ATIVGASaveScreen(pATI, Mode);
- break;
-
-#endif /* AVOID_CPIO */
-
- case ATI_CRTC_MACH64:
ATIMach64SaveScreen(pATI, Mode);
- break;
-
- default:
- break;
}
return TRUE;
@@ -135,27 +112,8 @@ ATISetDPMSMode
pATI = ATIPTR(pScreenInfo);
- switch (pATI->Adapter)
{
- case ATI_ADAPTER_MACH64:
ATIMach64SetDPMSMode(pScreenInfo, pATI, DPMSMode);
- break;
-
- default:
-
-#ifndef AVOID_CPIO
-
- /* Assume EGA/VGA */
- ATIVGASetDPMSMode(pATI, DPMSMode);
- break;
-
- case ATI_ADAPTER_NONE:
- case ATI_ADAPTER_8514A:
- case ATI_ADAPTER_MACH8:
-
-#endif /* AVOID_CPIO */
-
- break;
}
}
@@ -758,14 +716,6 @@ ATIEnterVT
return TRUE;
}
-#ifndef AVOID_CPIO
-
- /* If used, modify banking interface */
- if (!miModifyBanking(pScreen, &pATI->BankInfo))
- return FALSE;
-
-#endif /* AVOID_CPIO */
-
pScreenPixmap = (*pScreen->GetScreenPixmap)(pScreen);
PixmapPrivate = pScreenPixmap->devPrivate;
if (!PixmapPrivate.ptr)
diff --git a/src/aticursor.c b/src/aticursor.c
index a7c98ac8..e2da78cb 100644
--- a/src/aticursor.c
+++ b/src/aticursor.c
@@ -24,7 +24,6 @@
#include "config.h"
#endif
-#include "atiadapter.h"
#include "aticursor.h"
#include "atimach64cursor.h"
#include "atistruct.h"
@@ -53,14 +52,8 @@ ATIInitializeCursor
if (!(pATI->pCursorInfo = xf86CreateCursorInfoRec()))
return FALSE;
- switch (pATI->Adapter)
+ if (!ATIMach64CursorInit(pATI->pCursorInfo))
{
- case ATI_ADAPTER_MACH64:
- if (ATIMach64CursorInit(pATI->pCursorInfo))
- break;
- /* Fall through */
-
- default:
xf86DestroyCursorInfoRec(pATI->pCursorInfo);
pATI->pCursorInfo = NULL;
return FALSE;
diff --git a/src/atidac.c b/src/atidac.c
index 95b478de..f94e8ad7 100644
--- a/src/atidac.c
+++ b/src/atidac.c
@@ -29,7 +29,6 @@
#include "ati.h"
#include "atidac.h"
#include "atimach64io.h"
-#include "atimono.h"
/*
* RAMDAC-related definitions.
@@ -186,55 +185,6 @@ ATIDACPreInit
pATIHW->lut[Index2 + 1] = 0x00U;
pATIHW->lut[Index2 + 2] = maxColour;
}
-
-#ifndef AVOID_CPIO
-
- if (pATI->depth == 1)
- {
- rgb blackColour = pScreenInfo->display->blackColour,
- whiteColour = pScreenInfo->display->whiteColour;
-
- if (blackColour.red > maxColour)
- blackColour.red = maxColour;
- if (blackColour.green > maxColour)
- blackColour.green = maxColour;
- if (blackColour.blue > maxColour)
- blackColour.blue = maxColour;
- if (whiteColour.red > maxColour)
- whiteColour.red = maxColour;
- if (whiteColour.green > maxColour)
- whiteColour.green = maxColour;
- if (whiteColour.blue > maxColour)
- whiteColour.blue = maxColour;
-
- if ((blackColour.red == whiteColour.red) &&
- (blackColour.green == whiteColour.green) &&
- (blackColour.blue == whiteColour.blue))
- {
- blackColour.red ^= maxColour;
- blackColour.green ^= maxColour;
- blackColour.blue ^= maxColour;
- }
-
- pATIHW->lut[(MONO_BLACK * 3) + 0] = blackColour.red;
- pATIHW->lut[(MONO_BLACK * 3) + 1] = blackColour.green;
- pATIHW->lut[(MONO_BLACK * 3) + 2] = blackColour.blue;
- pATIHW->lut[(MONO_WHITE * 3) + 0] = whiteColour.red;
- pATIHW->lut[(MONO_WHITE * 3) + 1] = whiteColour.green;
- pATIHW->lut[(MONO_WHITE * 3) + 2] = whiteColour.blue;
- }
-
- if (pATIHW->crtc == ATI_CRTC_VGA)
- {
- /* Initialise overscan to black */
- Index = pATIHW->attr[17] * 3;
- pATIHW->lut[Index + 0] =
- pATIHW->lut[Index + 1] =
- pATIHW->lut[Index + 2] = 0x00U;
- }
-
-#endif /* AVOID_CPIO */
-
}
}
@@ -370,6 +320,44 @@ ATIDACSet
}
/*
+ * ATISetLUTEntry --
+ *
+ * This function is called to set one of a DAC's LUT entries.
+ */
+static void
+ATISetLUTEntry
+(
+ ATIPtr pATI,
+ int Index,
+ CARD8 *LUTEntry
+)
+{
+#ifdef AVOID_CPIO
+
+ out8(M64_DAC_WRITE, Index);
+ DACDelay;
+ out8(M64_DAC_DATA, LUTEntry[0]);
+ DACDelay;
+ out8(M64_DAC_DATA, LUTEntry[1]);
+ DACDelay;
+ out8(M64_DAC_DATA, LUTEntry[2]);
+ DACDelay;
+
+#else /* AVOID_CPIO */
+
+ outb(pATI->CPIO_DAC_WRITE, Index);
+ DACDelay;
+ outb(pATI->CPIO_DAC_DATA, LUTEntry[0]);
+ DACDelay;
+ outb(pATI->CPIO_DAC_DATA, LUTEntry[1]);
+ DACDelay;
+ outb(pATI->CPIO_DAC_DATA, LUTEntry[2]);
+ DACDelay;
+
+#endif /* AVOID_CPIO */
+}
+
+/*
* ATILoadPalette --
*
* This function updates the RAMDAC's LUT and the in-memory copy of it in
@@ -450,35 +438,8 @@ ATILoadPalette
for (Index = 0;
Index < (SizeOf(pATI->NewHW.lut) / 3);
Index += i, LUTEntry += i * 3)
- {
- if (!fChanged[Index])
- continue;
-
-#ifdef AVOID_CPIO
-
- out8(M64_DAC_WRITE, Index);
- DACDelay;
- out8(M64_DAC_DATA, LUTEntry[0]);
- DACDelay;
- out8(M64_DAC_DATA, LUTEntry[1]);
- DACDelay;
- out8(M64_DAC_DATA, LUTEntry[2]);
- DACDelay;
-
-#else /* AVOID_CPIO */
-
- outb(pATI->CPIO_DAC_WRITE, Index);
- DACDelay;
- outb(pATI->CPIO_DAC_DATA, LUTEntry[0]);
- DACDelay;
- outb(pATI->CPIO_DAC_DATA, LUTEntry[1]);
- DACDelay;
- outb(pATI->CPIO_DAC_DATA, LUTEntry[2]);
- DACDelay;
-
-#endif /* AVOID_CPIO */
-
- }
+ if (fChanged[Index])
+ ATISetLUTEntry(pATI, Index, LUTEntry);
}
}
else
@@ -495,33 +456,7 @@ ATILoadPalette
LUTEntry[2] = Colours[Index].blue;
if (pScreenInfo->vtSema || pATI->currentMode)
- {
-
-#ifdef AVOID_CPIO
-
- out8(M64_DAC_WRITE, Index);
- DACDelay;
- out8(M64_DAC_DATA, LUTEntry[0]);
- DACDelay;
- out8(M64_DAC_DATA, LUTEntry[1]);
- DACDelay;
- out8(M64_DAC_DATA, LUTEntry[2]);
- DACDelay;
-
-#else /* AVOID_CPIO */
-
- outb(pATI->CPIO_DAC_WRITE, Index);
- DACDelay;
- outb(pATI->CPIO_DAC_DATA, LUTEntry[0]);
- DACDelay;
- outb(pATI->CPIO_DAC_DATA, LUTEntry[1]);
- DACDelay;
- outb(pATI->CPIO_DAC_DATA, LUTEntry[2]);
- DACDelay;
-
-#endif /* AVOID_CPIO */
-
- }
+ ATISetLUTEntry(pATI, Index, LUTEntry);
}
}
}
diff --git a/src/atidga.c b/src/atidga.c
index 5367610a..e6783a44 100644
--- a/src/atidga.c
+++ b/src/atidga.c
@@ -414,19 +414,6 @@ ATIDGAInit
if (!pATI->nDGAMode)
{
-
-#ifndef AVOID_CPIO
-
- /*
- * Contrary to previous extension versions, DGA 2 does not support
- * banked framebuffers. Also, disable DGA when non-DGA server modes
- * are planar.
- */
- if (pATI->BankInfo.BankSize || (pScreenInfo->depth <= 4))
- return FALSE;
-
-#endif /* AVOID_CPIO */
-
/* Set up DGA callbacks */
pATI->ATIDGAFunctions.OpenFramebuffer = ATIDGAOpenFramebuffer;
pATI->ATIDGAFunctions.SetMode = ATIDGASetMode;
@@ -459,8 +446,7 @@ ATIDGAInit
ATIDGAAddModes(pScreenInfo, pATI, flags,
8, 8, 0, 0, 0, PseudoColor);
- if ((pATI->Chip >= ATI_CHIP_264CT) &&
- (pATI->Chipset == ATI_CHIPSET_ATI))
+ if ((pATI->Chip >= ATI_CHIP_264CT))
{
ATIDGAAddModes(pScreenInfo, pATI, flags,
15, 16, 0x7C00U, 0x03E0U, 0x001FU, TrueColor);
diff --git a/src/atidsp.c b/src/atidsp.c
index 66924259..adea2cdc 100644
--- a/src/atidsp.c
+++ b/src/atidsp.c
@@ -25,7 +25,6 @@
#endif
#include "ati.h"
#include "atichip.h"
-#include "aticrtc.h"
#include "atidsp.h"
#include "atimach64io.h"
#include "atividmem.h"
@@ -222,12 +221,6 @@ ATIDSPCalculate
pATI->ClockDescriptor.PostDividers[pATIHW->PostDivider];
Divider = pATIHW->FeedbackDivider * pATI->XCLKReferenceDivider;
-#ifndef AVOID_CPIO
-
- if (pATI->depth >= 8)
-
-#endif /* AVOID_CPIO */
-
{
Divider *= pATI->bitsPerPixel / 4;
}
@@ -235,13 +228,6 @@ ATIDSPCalculate
/* Start by assuming a display FIFO width of 64 bits */
vshift = (6 - 2) - pATI->XCLKPostDivider;
-#ifndef AVOID_CPIO
-
- if (pATIHW->crtc == ATI_CRTC_VGA)
- vshift--; /* Nope, it's 32 bits wide */
-
-#endif /* AVOID_CPIO */
-
if (pATI->OptionPanelDisplay && (pATI->LCDPanelID >= 0))
{
/* Compensate for horizontal stretching */
@@ -269,21 +255,6 @@ ATIDSPCalculate
vshift, -1) - ATIDivide(1, 1, vshift - xshift, 1);
/* Next is dsp_on */
-
-#ifndef AVOID_CPIO
-
- if ((pATIHW->crtc == ATI_CRTC_VGA) /* && (dsp_precision < 3) */)
- {
- /*
- * TODO: I don't yet know why something like this appears necessary.
- * But I don't have time to explore this right now.
- */
- dsp_on = ATIDivide(Multiplier * 5, Divider, vshift + 2, 1);
- }
- else
-
-#endif /* AVOID_CPIO */
-
{
dsp_on = ATIDivide(Multiplier, Divider, vshift, 1);
tmp = ATIDivide(RASMultiplier, RASDivider, xshift, 1);
diff --git a/src/atii2c.c b/src/atii2c.c
index a32ea5e7..73febf7a 100644
--- a/src/atii2c.c
+++ b/src/atii2c.c
@@ -24,7 +24,6 @@
#include "config.h"
#endif
-#include "atiadapter.h"
#include "atii2c.h"
#include "atiload.h"
#include "atimach64i2c.h"
@@ -366,18 +365,10 @@ ATII2CPreInit
ATIPtr pATI
)
{
- switch (pATI->Adapter)
- {
- case ATI_ADAPTER_MACH64:
if (!ATILoadModule(pScreenInfo, "i2c", ATIi2cSymbols))
return;
ATIMach64I2CPreInit(pScreenInfo, pATI);
- break;
-
- default:
- break;
- }
}
/*
diff --git a/src/atiident.c b/src/atiident.c
index dfbe1e7d..cffa8170 100644
--- a/src/atiident.c
+++ b/src/atiident.c
@@ -32,45 +32,6 @@
#include "r128_probe.h"
#include "radeon_probe.h"
-const char *ATIChipsetNames[] =
-{
- "ati",
-
-#ifndef AVOID_CPIO
-
- "ativga",
- "ibmvga",
- "ibm8514",
- "vgawonder",
- "mach8",
- "mach32",
-
-#endif /* AVOID_CPIO */
-
- "mach64",
- "rage128",
- "radeon"
-};
-
-static SymTabRec ATIPublicChipsetNames[] =
-{
- {ATI_CHIPSET_ATI, "ati"},
-
-#ifndef AVOID_CPIO
-
- {ATI_CHIPSET_ATIVGA, "ativga"},
-#ifdef __MAYBE_NOT__
- {ATI_CHIPSET_IBMVGA, "ibmvga"},
-#endif
-#ifdef __NOT_YET__
- {ATI_CHIPSET_IBM8514, "ibm8514"},
-#endif
-
-#endif /* AVOID_CPIO */
-
- {-1, NULL}
-};
-
/*
* ATIIdentify --
*
@@ -82,56 +43,8 @@ ATIIdentify
int flags
)
{
- xf86PrintChipsets(ATI_NAME,
- (NumberOf(ATIPublicChipsetNames) <= 2) ?
- "ATI driver (version " ATI_VERSION_NAME ") for chipset" :
- "ATI driver (version " ATI_VERSION_NAME ") for chipsets",
- ATIPublicChipsetNames);
+ xf86Msg(X_INFO, "%s: %s\n", ATI_NAME,
+ "ATI driver (version " ATI_VERSION_NAME ") for chipset: mach64");
R128Identify(flags);
RADEONIdentify(flags);
}
-
-/*
- * ATIIdentProbe --
- *
- * This function determines if the user specified a chipset name acceptable to
- * the driver. It returns an ATIChipsetType or -1.
- */
-int
-ATIIdentProbe
-(
- const char *ChipsetName
-)
-{
- int Chipset;
-
- static SymTabRec SpecificNames[] =
- {
-
-#ifndef AVOID_CPIO
-
- {ATI_CHIPSET_VGAWONDER, "vgawonder"},
-#ifdef __NOT_YET__
- {ATI_CHIPSET_MACH8, "mach8"},
-#endif
- {ATI_CHIPSET_MACH32, "mach32"},
-
-#endif /* AVOID_CPIO */
-
- {ATI_CHIPSET_MACH64, "mach64"},
- {ATI_CHIPSET_RAGE128, "rage128"},
- {ATI_CHIPSET_RADEON, "radeon"},
- {-1, NULL}
- };
-
- /* If no Chipset specification, default to "ati" */
- if (!ChipsetName || !*ChipsetName)
- return ATI_CHIPSET_ATI;
-
- Chipset = xf86StringToToken(ATIPublicChipsetNames, ChipsetName);
- if (Chipset != -1)
- return Chipset;
-
- /* Check for some other chipset names */
- return xf86StringToToken(SpecificNames, ChipsetName);
-}
diff --git a/src/atiident.h b/src/atiident.h
index 84777e08..38699ec6 100644
--- a/src/atiident.h
+++ b/src/atiident.h
@@ -23,30 +23,6 @@
#ifndef ___ATIIDENT_H___
#define ___ATIIDENT_H___ 1
-typedef enum
-{
- ATI_CHIPSET_ATI,
-
-#ifndef AVOID_CPIO
-
- ATI_CHIPSET_ATIVGA,
- ATI_CHIPSET_IBMVGA,
- ATI_CHIPSET_IBM8514,
- ATI_CHIPSET_VGAWONDER,
- ATI_CHIPSET_MACH8,
- ATI_CHIPSET_MACH32,
-
-#endif /* AVOID_CPIO */
-
- ATI_CHIPSET_MACH64,
- ATI_CHIPSET_RAGE128,
- ATI_CHIPSET_RADEON,
- ATI_CHIPSET_MAX /* Must be last */
-} ATIChipsetType;
-
-extern const char *ATIChipsetNames[];
-
extern void ATIIdentify(int);
-extern int ATIIdentProbe(const char *);
#endif /* ___ATIIDENT_H___ */
diff --git a/src/atiio.h b/src/atiio.h
deleted file mode 100644
index 6477f36d..00000000
--- a/src/atiio.h
+++ /dev/null
@@ -1,82 +0,0 @@
-/*
- * Copyright 1997 through 2003 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.
- */
-
-#ifndef ___ATIIO_H___
-
-#if !defined(___ATI_H___) && defined(XFree86Module)
-# error missing #include "ati.h" before #include "atiio.h"
-# undef XFree86Module
-#endif
-
-#define ___ATIIO_H___ 1
-
-#include "atiregs.h"
-
-#include "compiler.h"
-
-/* I/O decoding definitions */
-typedef enum
-{
- SPARSE_IO,
- BLOCK_IO
-} ATIIODecodingType;
-
-#ifndef AVOID_CPIO
-
-/* Wait until "n" queue entries are free */
-#define ibm8514WaitQueue(_n) \
- { \
- while (inw(GP_STAT) & (0x0100U >> (_n))); \
- }
-#define ATIWaitQueue(_n) \
- { \
- while (inw(EXT_FIFO_STATUS) & (0x010000U >> (_n))); \
- }
-
-/* Wait until GP is idle and queue is empty */
-#define WaitIdleEmpty() \
- { \
- while (inw(GP_STAT) & (GPBUSY | 1)); \
- }
-#define ProbeWaitIdleEmpty() \
- { \
- int _i; \
- CARD16 _value; \
- for (_i = 0; _i < 100000; _i++) \
- { \
- _value = inw(GP_STAT); \
- if (_value == (CARD16)(-1)) \
- break; \
- if (!(_value & (GPBUSY | 1))) \
- break; \
- } \
- }
-
-/* Wait until GP has data available */
-#define WaitDataReady() \
- { \
- while (!(inw(GP_STAT) & DATARDY)); \
- }
-
-#endif /* AVOID_CPIO */
-
-#endif /* ___ATIIO_H___ */
diff --git a/src/atiload.c b/src/atiload.c
index aa36d461..0001ced9 100644
--- a/src/atiload.c
+++ b/src/atiload.c
@@ -62,22 +62,6 @@ const char *ATIvbeSymbols[] =
NULL
};
-#ifndef AVOID_CPIO
-
-const char *ATIxf1bppSymbols[] =
-{
- "xf1bppScreenInit",
- NULL
-};
-
-const char *ATIxf4bppSymbols[] =
-{
- "xf4bppScreenInit",
- NULL
-};
-
-#endif /* AVOID_CPIO */
-
#ifdef XF86DRI_DEVEL
const char *ATIdrmSymbols[] = {
@@ -228,19 +212,6 @@ ATILoadModules
/* Load depth-specific entry points */
switch (pATI->bitsPerPixel)
{
-
-#ifndef AVOID_CPIO
-
- case 1:
- fbPtr = ATILoadModule(pScreenInfo, "xf1bpp", ATIxf1bppSymbols);
- break;
-
- case 4:
- fbPtr = ATILoadModule(pScreenInfo, "xf4bpp", ATIxf4bppSymbols);
- break;
-
-#endif /* AVOID_CPIO */
-
case 8:
case 16:
case 24:
diff --git a/src/atiload.h b/src/atiload.h
index ac8fa151..ebccd758 100644
--- a/src/atiload.h
+++ b/src/atiload.h
@@ -34,12 +34,6 @@
extern const char *ATIint10Symbols[], *ATIddcSymbols[], *ATIvbeSymbols[],
-#ifndef AVOID_CPIO
-
- *ATIxf1bppSymbols[], *ATIxf4bppSymbols[],
-
-#endif /* AVOID_CPIO */
-
#ifdef XF86DRI_DEVEL
*ATIdrmSymbols[], *ATIdriSymbols[],
diff --git a/src/atilock.c b/src/atilock.c
index 7b963c1f..ba700877 100644
--- a/src/atilock.c
+++ b/src/atilock.c
@@ -25,7 +25,6 @@
#endif
#include "ati.h"
-#include "atiadapter.h"
#include "atichip.h"
#include "atilock.h"
#include "atimach64io.h"
@@ -55,49 +54,6 @@ ATIUnlock
return;
pATI->Unlocked = TRUE;
-#ifndef AVOID_CPIO
-
- if (pATI->ChipHasSUBSYS_CNTL)
- {
- /* Save register values to be modified */
- pATI->LockData.clock_sel = inw(CLOCK_SEL);
- if (pATI->Chip >= ATI_CHIP_68800)
- {
- pATI->LockData.misc_options = inw(MISC_OPTIONS);
- pATI->LockData.mem_bndry = inw(MEM_BNDRY);
- pATI->LockData.mem_cfg = inw(MEM_CFG);
- }
-
- tmp = inw(SUBSYS_STAT) & _8PLANE;
-
- /* Reset the 8514/A and disable all interrupts */
- outw(SUBSYS_CNTL, tmp | (GPCTRL_RESET | CHPTEST_NORMAL));
- outw(SUBSYS_CNTL, tmp | (GPCTRL_ENAB | CHPTEST_NORMAL | RVBLNKFLG |
- RPICKFLAG | RINVALIDIO | RGPIDLE));
-
- /* Ensure VGA is enabled */
- outw(CLOCK_SEL, pATI->LockData.clock_sel &~DISABPASSTHRU);
- if (pATI->Chip >= ATI_CHIP_68800)
- {
- outw(MISC_OPTIONS, pATI->LockData.misc_options &
- ~(DISABLE_VGA | DISABLE_DAC));
-
- /* Disable any video memory boundary */
- outw(MEM_BNDRY, pATI->LockData.mem_bndry &
- ~(MEM_PAGE_BNDRY | MEM_BNDRY_ENA));
-
- /* Disable direct video memory aperture */
- outw(MEM_CFG, pATI->LockData.mem_cfg &
- ~(MEM_APERT_SEL | MEM_APERT_PAGE | MEM_APERT_LOC));
- }
-
- /* Wait for all activity to die down */
- ProbeWaitIdleEmpty();
- }
- else if (pATI->Chip >= ATI_CHIP_88800GXC)
-
-#endif /* AVOID_CPIO */
-
{
/* Reset everything */
pATI->LockData.bus_cntl = inr(BUS_CNTL);
@@ -219,12 +175,11 @@ ATIUnlock
}
}
}
+ }
#ifndef AVOID_CPIO
- }
-
- if (pATI->VGAAdapter != ATI_ADAPTER_NONE)
+ if (pATI->VGAAdapter)
{
if (pATI->CPIO_VGAWonder)
{
@@ -244,11 +199,9 @@ ATIUnlock
ATIModifyExtReg(pATI, 0xB8U, pATI->LockData.b8, 0xC0U, 0x00U);
pATI->LockData.b9 = ATIGetExtReg(0xB9U);
ATIModifyExtReg(pATI, 0xB9U, pATI->LockData.b9, 0x7FU, 0x00U);
- if (pATI->Chip > ATI_CHIP_18800)
{
pATI->LockData.be = ATIGetExtReg(0xBEU);
ATIModifyExtReg(pATI, 0xBEU, pATI->LockData.be, 0xFAU, 0x01U);
- if (pATI->Chip >= ATI_CHIP_28800_2)
{
pATI->LockData.a6 = ATIGetExtReg(0xA6U);
ATIModifyExtReg(pATI, 0xA6U, pATI->LockData.a6,
@@ -417,10 +370,10 @@ ATIUnlock
out8(LCD_INDEX, GetByte(pATI->LockData.lcd_index, 0));
}
}
+ }
#endif /* AVOID_CPIO */
- }
}
/*
@@ -437,7 +390,7 @@ ATILock
#ifndef AVOID_CPIO
- CARD32 tmp, saved_lcd_gen_ctrl = 0, lcd_gen_ctrl = 0;
+ CARD32 saved_lcd_gen_ctrl = 0, lcd_gen_ctrl = 0;
#endif /* AVOID_CPIO */
@@ -447,7 +400,7 @@ ATILock
#ifndef AVOID_CPIO
- if (pATI->VGAAdapter != ATI_ADAPTER_NONE)
+ if (pATI->VGAAdapter)
{
if (pATI->LCDPanelID >= 0)
{
@@ -519,10 +472,8 @@ ATILock
ATIModifyExtReg(pATI, 0xB6U, -1, 0xDDU, pATI->LockData.b6);
ATIModifyExtReg(pATI, 0xB8U, -1, 0xC0U, pATI->LockData.b8 & 0x03U);
ATIModifyExtReg(pATI, 0xB9U, -1, 0x7FU, pATI->LockData.b9);
- if (pATI->Chip > ATI_CHIP_18800)
{
ATIModifyExtReg(pATI, 0xBEU, -1, 0xFAU, pATI->LockData.be);
- if (pATI->Chip >= ATI_CHIP_28800_2)
{
ATIModifyExtReg(pATI, 0xA6U, -1, 0x7FU, pATI->LockData.a6);
ATIModifyExtReg(pATI, 0xABU, -1, 0xE7U, pATI->LockData.ab);
@@ -532,29 +483,6 @@ ATILock
}
}
- if (pATI->ChipHasSUBSYS_CNTL)
- {
- tmp = inw(SUBSYS_STAT) & _8PLANE;
-
- /* Reset the 8514/A and disable all interrupts */
- outw(SUBSYS_CNTL, tmp | (GPCTRL_RESET | CHPTEST_NORMAL));
- outw(SUBSYS_CNTL, tmp | (GPCTRL_ENAB | CHPTEST_NORMAL | RVBLNKFLG |
- RPICKFLAG | RINVALIDIO | RGPIDLE));
-
- /* Restore modified accelerator registers */
- outw(CLOCK_SEL, pATI->LockData.clock_sel);
- if (pATI->Chip >= ATI_CHIP_68800)
- {
- outw(MISC_OPTIONS, pATI->LockData.misc_options);
- outw(MEM_BNDRY, pATI->LockData.mem_bndry);
- outw(MEM_CFG, pATI->LockData.mem_cfg);
- }
-
- /* Wait for all activity to die down */
- ProbeWaitIdleEmpty();
- }
- else if (pATI->Chip >= ATI_CHIP_88800GXC)
-
#endif /* AVOID_CPIO */
{
diff --git a/src/atimach64.c b/src/atimach64.c
index 38e0de24..98eb894d 100644
--- a/src/atimach64.c
+++ b/src/atimach64.c
@@ -84,16 +84,6 @@ ATIMach64PreInit
{
CARD32 bus_cntl, config_cntl;
-#ifndef AVOID_CPIO
-
- if (pATI->depth <= 4)
- {
- pATIHW->crtc_off_pitch = SetBits(pATI->displayWidth >> 4, CRTC_PITCH);
- }
- else
-
-#endif /* AVOID_CPIO */
-
{
pATIHW->crtc_off_pitch = SetBits(pATI->displayWidth >> 3, CRTC_PITCH);
}
@@ -156,7 +146,7 @@ ATIMach64PreInit
#ifndef AVOID_CPIO
- if (pATI->UseSmallApertures)
+ if (pATI->VGAAdapter)
{
pATIHW->config_cntl |= CFG_MEM_VGA_AP_EN;
}
@@ -168,7 +158,7 @@ ATIMach64PreInit
pATIHW->config_cntl &= ~CFG_MEM_VGA_AP_EN;
}
- if (pATI->LinearBase && (pATI->Chip < ATI_CHIP_264CT))
+ if ((pATI->Chip < ATI_CHIP_264CT))
{
/* Replace linear aperture size and address */
pATIHW->config_cntl &= ~(CFG_MEM_AP_LOC | CFG_MEM_AP_SIZE);
@@ -656,15 +646,16 @@ ATIMach64Calculate
{
pMode->Flags &= ~(V_PHSYNC | V_NHSYNC | V_PVSYNC | V_NVSYNC);
- if (pATI->OptionPanelDisplay && (pATI->LCDPanelID >= 0)
-#ifdef TV_OUT
- && !pATI->tvActive
-#endif
-)
+ if (pATI->OptionPanelDisplay && (pATI->LCDPanelID >= 0))
VDisplay = pATI->LCDVertical;
else
VDisplay = pMode->CrtcVDisplay;
+#ifdef TV_OUT
+ if (pATI->tvActive)
+ VDisplay = pMode->CrtcVDisplay;
+#endif
+
if (VDisplay < 400)
pMode->Flags |= V_PHSYNC | V_NVSYNC;
else if (VDisplay < 480)
@@ -722,19 +713,6 @@ ATIMach64Calculate
CRTC_EXT_DISP_EN | CRTC_EN | CRTC_VGA_LINEAR | CRTC_CNT_EN;
switch (pATI->depth)
{
-
-#ifndef AVOID_CPIO
-
- case 1:
- pATIHW->crtc_gen_cntl |= SetBits(PIX_WIDTH_1BPP, CRTC_PIX_WIDTH);
- break;
-
- case 4:
- pATIHW->crtc_gen_cntl |= SetBits(PIX_WIDTH_4BPP, CRTC_PIX_WIDTH);
- break;
-
-#endif /* AVOID_CPIO */
-
case 8:
pATIHW->crtc_gen_cntl |= SetBits(PIX_WIDTH_8BPP, CRTC_PIX_WIDTH);
break;
@@ -796,8 +774,7 @@ ATIMach64Set
#endif /* AVOID_CPIO */
{
- if ((pATIHW->FeedbackDivider > 0) &&
- (pATI->ProgrammableClock != ATI_CLOCK_NONE))
+ if ((pATIHW->FeedbackDivider > 0))
ATIClockSet(pATI, pATIHW); /* Programme clock */
if (pATI->DAC == ATI_DAC_IBMRGB514)
diff --git a/src/atimach64accel.c b/src/atimach64accel.c
index e1908b10..090ae788 100644
--- a/src/atimach64accel.c
+++ b/src/atimach64accel.c
@@ -981,16 +981,7 @@ ATIMach64AccelInit
if (pATI->XModifier == 1)
{
pXAAInfo->Flags = PIXMAP_CACHE | OFFSCREEN_PIXMAPS;
-
-#ifndef AVOID_CPIO
-
- if (!pATI->BankInfo.BankSize)
-
-#endif /* AVOID_CPIO */
-
- {
- pXAAInfo->Flags |= LINEAR_FRAMEBUFFER;
- }
+ pXAAInfo->Flags |= LINEAR_FRAMEBUFFER;
}
/* Sync */
diff --git a/src/atimach64cursor.c b/src/atimach64cursor.c
index d1fb5fd0..be8ea111 100644
--- a/src/atimach64cursor.c
+++ b/src/atimach64cursor.c
@@ -25,7 +25,6 @@
#endif
#include "ati.h"
-#include "aticrtc.h"
#include "atimach64accel.h"
#include "atimach64cursor.h"
#include "atimach64io.h"
@@ -353,20 +352,6 @@ ATIMach64UseHWCursor
if (!pATI->CursorBase)
return FALSE;
-#ifndef AVOID_CPIO
-
- /*
- * For some reason, the hardware cursor isn't vertically scaled when a VGA
- * doublescanned or multiscanned mode is in effect.
- */
- if (pATI->NewHW.crtc == ATI_CRTC_MACH64)
- return TRUE;
- if ((pScreenInfo->currentMode->Flags & V_DBLSCAN) ||
- (pScreenInfo->currentMode->VScan > 1))
- return FALSE;
-
-#endif /* AVOID_CPIO */
-
return TRUE;
}
diff --git a/src/atimach64io.h b/src/atimach64io.h
index 15a92ad6..d1b14d24 100644
--- a/src/atimach64io.h
+++ b/src/atimach64io.h
@@ -33,17 +33,17 @@
#define ___ATIMACH64IO_H___ 1
-#include "atiio.h"
+#include "atiregs.h"
#include "atistruct.h"
+#include "compiler.h"
+
/*
* A few important notes on some of the I/O statements provided:
*
* inl/outl 32-bit R/W through PIO space. The register is specified as the
* actual PIO address. These are actually defined in compiler.h.
*
- * inw/outw 16-bit counterparts to inl/outl. Not used for Mach64 support.
- *
* inb/outb 8-bit counterparts to inl/outl.
*
* inm/outm 32-bit R/W through MMIO space. The register is specified as
@@ -88,6 +88,13 @@
* accessed (nor by what).
*/
+/* I/O decoding definitions */
+typedef enum
+{
+ SPARSE_IO,
+ BLOCK_IO
+} ATIIODecodingType;
+
#define inm(_Register) \
MMIO_IN32(pATI->pBlock[GetBits(_Register, BLOCK_SELECT)], \
(_Register) & MM_IO_SELECT)
@@ -111,17 +118,13 @@
/* Cause a cpp syntax error if any of these are used */
#undef inb
-#undef inw
#undef inl
#undef outb
-#undef outw
#undef outl
#define inb() /* Nothing */
-#define inw() /* Nothing */
#define inl() /* Nothing */
#define outb() /* Nothing */
-#define outw() /* Nothing */
#define outl() /* Nothing */
#else /* AVOID_CPIO */
diff --git a/src/atimisc.c b/src/atimisc.c
index 8670112c..e6012ecd 100644
--- a/src/atimisc.c
+++ b/src/atimisc.c
@@ -110,13 +110,6 @@ ATISetup
ATIddcSymbols,
ATIvbeSymbols,
-#ifndef AVOID_CPIO
-
- ATIxf1bppSymbols,
- ATIxf4bppSymbols,
-
-#endif /* AVOID_CPIO */
-
#ifdef XF86DRI_DEVEL
ATIdrmSymbols,
diff --git a/src/atimode.c b/src/atimode.c
index 17210de1..d4554048 100644
--- a/src/atimode.c
+++ b/src/atimode.c
@@ -27,7 +27,6 @@
#include <string.h>
#include "ati.h"
-#include "atiadapter.h"
#include "atichip.h"
#include "atidac.h"
#include "atidsp.h"
@@ -231,16 +230,6 @@ ATISwap
/* Back to bank 0 */
(*pATIHW->SetBank)(pATI, 0);
-
- /*
- * If restoring video memory for a server video mode, free the frame buffer
- * save area.
- */
- if (ToFB && (pATIHW == &pATI->NewHW))
- {
- xfree(pATIHW->frame_buffer);
- pATIHW->frame_buffer = NULL;
- }
}
#endif /* AVOID_CPIO */
@@ -263,7 +252,7 @@ ATIModePreInit
#ifndef AVOID_CPIO
- if (pATI->VGAAdapter != ATI_ADAPTER_NONE)
+ if (pATI->VGAAdapter)
{
/* Fill in VGA data */
ATIVGAPreInit(pATI, pATIHW);
@@ -273,8 +262,6 @@ ATIModePreInit
ATIVGAWonderPreInit(pATI, pATIHW);
}
- if (pATI->Chip >= ATI_CHIP_88800GXC)
-
#endif /* AVOID_CPIO */
{
@@ -386,9 +373,6 @@ ATIModeSave
#endif /* AVOID_CPIO */
- /* Save clock data */
- ATIClockSave(pScreenInfo, pATI, pATIHW);
-
if (pATI->Chip >= ATI_CHIP_264CT)
{
pATIHW->pll_vclk_cntl = ATIMach64GetPLLReg(PLL_VCLK_CNTL) |
@@ -437,7 +421,7 @@ ATIModeSave
#ifndef AVOID_CPIO
- if (pATI->VGAAdapter != ATI_ADAPTER_NONE)
+ if (pATI->VGAAdapter)
{
/* Save VGA data */
ATIVGASave(pATI, pATIHW);
@@ -447,8 +431,6 @@ ATIModeSave
ATIVGAWonderSave(pATI, pATIHW);
}
- if (pATI->Chip >= ATI_CHIP_88800GXC)
-
#endif /* AVOID_CPIO */
{
@@ -507,47 +489,20 @@ ATIModeSave
ATIRGB514Save(pATI, pATIHW);
}
-#ifndef AVOID_CPIO
-
- /*
- * For some unknown reason, CLKDIV2 needs to be turned off to save the
- * DAC's LUT reliably on VGA Wonder VLB adapters.
- */
- if ((pATI->Adapter == ATI_ADAPTER_NONISA) && (pATIHW->seq[1] & 0x08U))
- PutReg(SEQX, 0x01U, pATIHW->seq[1] & ~0x08U);
-
-#endif /* AVOID_CPIO */
-
/* Save RAMDAC state */
ATIDACSave(pATI, pATIHW);
-#ifndef AVOID_CPIO
-
- if ((pATI->Adapter == ATI_ADAPTER_NONISA) && (pATIHW->seq[1] & 0x08U))
- PutReg(SEQX, 0x01U, pATIHW->seq[1]);
-
-#endif /* AVOID_CPIO */
-
- /*
- * The server has already saved video memory contents when switching out of
- * its virtual console, so don't do it again.
- */
if (pATIHW != &pATI->NewHW)
{
pATIHW->FeedbackDivider = 0; /* Don't programme clock */
+ }
#ifndef AVOID_CPIO
/* Save video memory */
ATISwap(pScreenInfo->scrnIndex, pATI, pATIHW, FALSE);
-#endif /* AVOID_CPIO */
-
- }
-
-#ifndef AVOID_CPIO
-
- if (pATI->VGAAdapter != ATI_ADAPTER_NONE)
+ if (pATI->VGAAdapter)
ATIVGASaveScreen(pATI, SCREEN_SAVER_OFF); /* Turn on screen */
#endif /* AVOID_CPIO */
@@ -588,29 +543,13 @@ ATIModeCalculate
* limitations.
*/
VScan = pATI->LCDVertical / pMode->VDisplay;
- switch (pATIHW->crtc)
{
-
-#ifndef AVOID_CPIO
-
- case ATI_CRTC_VGA:
- if (VScan > 64)
- VScan = 64;
- pMode->VScan = VScan;
- break;
-
-#endif /* AVOID_CPIO */
-
- case ATI_CRTC_MACH64:
pMode->VScan = 0;
- if (VScan <= 1)
- break;
+ if (VScan > 1)
+ {
VScan = 2;
pMode->Flags |= V_DBLSCAN;
- break;
-
- default:
- break;
+ }
}
pMode->HSyncStart = pMode->HDisplay + pATI->LCDHSyncStart;
@@ -625,132 +564,9 @@ ATIModeCalculate
ATIDivide(pATI->LCDVBlankWidth, VScan, 0, 0);
}
- switch (pATIHW->crtc)
{
-
-#ifndef AVOID_CPIO
-
- case ATI_CRTC_VGA:
- /* Fill in VGA data */
- ATIVGACalculate(pATI, pATIHW, pMode);
-
- /* Fill in VGA Wonder data */
- if (pATI->CPIO_VGAWonder)
- ATIVGAWonderCalculate(pATI, pATIHW, pMode);
-
- if (pATI->Chip >= ATI_CHIP_88800GXC)
- {
- if (pATI->Chip >= ATI_CHIP_264CT)
- {
- /*
- * Selected bits of accelerator & VGA CRTC registers are
- * actually copies of each other.
- */
- pATIHW->crtc_h_total_disp =
- SetBits(pMode->CrtcHTotal, CRTC_H_TOTAL) |
- SetBits(pMode->CrtcHDisplay, CRTC_H_DISP);
- pATIHW->crtc_h_sync_strt_wid =
- SetBits(pMode->CrtcHSyncStart, CRTC_H_SYNC_STRT) |
- SetBits(pMode->CrtcHSkew, CRTC_H_SYNC_DLY) | /* ? */
- SetBits(GetBits(pMode->CrtcHSyncStart, 0x0100U),
- CRTC_H_SYNC_STRT_HI) |
- SetBits(pMode->CrtcHSyncEnd, CRTC_H_SYNC_WID);
- if (pMode->Flags & V_NHSYNC)
- pATIHW->crtc_h_sync_strt_wid |= CRTC_H_SYNC_POL;
-
- pATIHW->crtc_v_total_disp =
- SetBits(pMode->CrtcVTotal, CRTC_V_TOTAL) |
- SetBits(pMode->CrtcVDisplay, CRTC_V_DISP);
- pATIHW->crtc_v_sync_strt_wid =
- SetBits(pMode->CrtcVSyncStart, CRTC_V_SYNC_STRT) |
- SetBits(pMode->CrtcVSyncEnd, CRTC_V_SYNC_END_VGA);
- if (pMode->Flags & V_NVSYNC)
- pATIHW->crtc_v_sync_strt_wid |= CRTC_V_SYNC_POL;
- }
-
- pATIHW->crtc_gen_cntl = inr(CRTC_GEN_CNTL) &
- ~(CRTC_DBL_SCAN_EN | CRTC_INTERLACE_EN |
- CRTC_HSYNC_DIS | CRTC_VSYNC_DIS | CRTC_CSYNC_EN |
- CRTC_PIX_BY_2_EN | CRTC_DISPLAY_DIS |
- CRTC_VGA_XOVERSCAN | CRTC_PIX_WIDTH |
- CRTC_BYTE_PIX_ORDER | CRTC_VGA_128KAP_PAGING |
- CRTC_VFC_SYNC_TRISTATE |
- CRTC_LOCK_REGS | /* Already off, but ... */
- CRTC_SYNC_TRISTATE | CRTC_EXT_DISP_EN |
- CRTC_DISP_REQ_EN | CRTC_VGA_LINEAR | CRTC_VGA_TEXT_132 |
- CRTC_CUR_B_TEST);
- /* Some of these are not relevent, but that doesn't matter */
- switch (pATI->depth)
- {
- case 1:
- pATIHW->crtc_gen_cntl |=
- SetBits(PIX_WIDTH_1BPP, CRTC_PIX_WIDTH);
- break;
-
- case 4:
- pATIHW->crtc_gen_cntl |=
- SetBits(PIX_WIDTH_4BPP, CRTC_PIX_WIDTH);
- break;
-
- case 8:
- pATIHW->crtc_gen_cntl |=
- SetBits(PIX_WIDTH_8BPP, CRTC_PIX_WIDTH);
- break;
-
- case 15:
- pATIHW->crtc_gen_cntl |=
- SetBits(PIX_WIDTH_15BPP, CRTC_PIX_WIDTH);
- break;
-
- case 16:
- pATIHW->crtc_gen_cntl |=
- SetBits(PIX_WIDTH_16BPP, CRTC_PIX_WIDTH);
- break;
-
- case 24:
- if (pATI->bitsPerPixel == 24)
- {
- pATIHW->crtc_gen_cntl |=
- SetBits(PIX_WIDTH_24BPP, CRTC_PIX_WIDTH);
- break;
- }
- if (pATI->bitsPerPixel != 32)
- break;
- /* Fall through */
-
- case 32:
- pATIHW->crtc_gen_cntl |=
- SetBits(PIX_WIDTH_32BPP, CRTC_PIX_WIDTH);
- break;
-
- default:
- break;
- }
-#if 0 /* This isn't needed, but is kept for reference */
- if (pMode->Flags & V_DBLSCAN)
- pATIHW->crtc_gen_cntl |= CRTC_DBL_SCAN_EN;
-#endif
- if (pMode->Flags & V_INTERLACE)
- pATIHW->crtc_gen_cntl |= CRTC_INTERLACE_EN;
- if ((pMode->Flags & (V_CSYNC | V_PCSYNC)) || pATI->OptionCSync)
- pATIHW->crtc_gen_cntl |= CRTC_CSYNC_EN;
- if (pATI->depth <= 4)
- pATIHW->crtc_gen_cntl |= CRTC_EN | CRTC_CNT_EN;
- else
- pATIHW->crtc_gen_cntl |=
- CRTC_EN | CRTC_VGA_LINEAR | CRTC_CNT_EN;
- }
- break;
-
-#endif /* AVOID_CPIO */
-
- case ATI_CRTC_MACH64:
/* Fill in Mach64 data */
ATIMach64Calculate(pATI, pATIHW, pMode);
- break;
-
- default:
- break;
}
/* Set up LCD register values */
@@ -925,16 +741,17 @@ ATIModeCalculate
MaxScalerClock = 80000; /* Conservative */
pATIHW->pll_vclk_cntl &= ~PLL_ECP_DIV;
#ifdef TV_OUT
- if (!pATI->OptionTvOut) {
-#endif /* TV_OUT */
+ if (pATI->OptionTvOut) {
/* XXX Don't do this for TVOut! */
+ }
+ else
+#endif /* TV_OUT */
+ {
ECPClock = pMode->SynthClock;
for (Index = 0; (ECPClock > MaxScalerClock) && (Index < 2); Index++)
ECPClock >>= 1;
pATIHW->pll_vclk_cntl |= SetBits(Index, PLL_ECP_DIV);
-#ifdef TV_OUT
}
-#endif /* TV_OUT */
}
else if (pATI->DAC == ATI_DAC_IBMRGB514)
{
@@ -1070,7 +887,6 @@ ATIModeSet
#endif /* AVOID_CPIO */
- if (pATI->Chip >= ATI_CHIP_88800GXC)
{
/* Stop CRTC */
outr(CRTC_GEN_CNTL,
@@ -1138,8 +954,7 @@ ATIModeSet
PutReg(SEQX, 0x00U, 0x00U);
/* Set pixel clock */
- if ((pATIHW->FeedbackDivider > 0) &&
- (pATI->ProgrammableClock > ATI_CLOCK_FIXED))
+ if ((pATIHW->FeedbackDivider > 0))
ATIClockSet(pATI, pATIHW);
/* Set up RAMDAC */
@@ -1154,7 +969,6 @@ ATIModeSet
ATIVGASet(pATI, pATIHW);
/* Load Mach64 registers */
- if (pATI->Chip >= ATI_CHIP_88800GXC)
{
/* Load MMIO registers */
if (pATI->Block0Base)
@@ -1201,7 +1015,7 @@ ATIModeSet
#ifndef AVOID_CPIO
- if (pATI->UseSmallApertures)
+ if (pATI->VGAAdapter)
{
/* Oddly enough, these need to be set also, maybe others */
PutReg(SEQX, 0x02U, pATIHW->seq[2]);
@@ -1302,7 +1116,7 @@ ATIModeSet
/* Restore video memory */
ATISwap(pScreenInfo->scrnIndex, pATI, pATIHW, TRUE);
- if (pATI->VGAAdapter != ATI_ADAPTER_NONE)
+ if (pATI->VGAAdapter)
ATIVGASaveScreen(pATI, SCREEN_SAVER_OFF); /* Turn on screen */
#endif /* AVOID_CPIO */
diff --git a/src/atimono.h b/src/atimono.h
deleted file mode 100644
index 7830e5e0..00000000
--- a/src/atimono.h
+++ /dev/null
@@ -1,42 +0,0 @@
-/*
- * Copyright 1997 through 2003 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.
- */
-
-#ifndef ___ATIMONO_H___
-#define ___ATIMONO_H___ 1
-
-#ifndef BIT_PLANE
-# define BIT_PLANE 3
-#endif
-
-#ifndef MONO_BLACK
-# define MONO_BLACK 0x00U
-#endif
-
-#ifndef MONO_WHITE
-# define MONO_WHITE 0x3FU
-#endif
-
-#ifndef MONO_OVERSCAN
-# define MONO_OVERSCAN 0x01U
-#endif
-
-#endif /* ___ATIMONO_H___ */
diff --git a/src/atioption.c b/src/atioption.c
index 5f2bd011..4cb965d4 100644
--- a/src/atioption.c
+++ b/src/atioption.c
@@ -61,6 +61,13 @@ const char *ATITVStandardNames[ATI_TV_STDS_MAX_VALID+1] = {
const OptionInfoRec ATIPublicOptions[] =
{
{
+ ATI_OPTION_PROBE_SPARSE,
+ "probe_sparse",
+ OPTV_BOOLEAN,
+ {0, },
+ FALSE
+ },
+ {
ATI_OPTION_ACCEL,
"accel",
OPTV_BOOLEAN,
@@ -89,18 +96,6 @@ const OptionInfoRec ATIPublicOptions[] =
FALSE,
},
-#ifndef AVOID_CPIO
-
- {
- ATI_OPTION_LINEAR,
- "linear",
- OPTV_BOOLEAN,
- {0, },
- FALSE
- },
-
-#endif /* AVOID_CPIO */
-
#ifdef XF86DRI_DEVEL
{
@@ -190,13 +185,6 @@ const OptionInfoRec ATIPublicOptions[] =
FALSE
},
{
- ATI_OPTION_PROBE_CLOCKS,
- "probe_clocks",
- OPTV_BOOLEAN,
- {0, },
- FALSE
- },
- {
ATI_OPTION_REFERENCE_CLOCK,
"reference_clock",
OPTV_FREQ,
diff --git a/src/atioption.h b/src/atioption.h
index 23a9fcf3..f68f6418 100644
--- a/src/atioption.h
+++ b/src/atioption.h
@@ -33,17 +33,12 @@
*/
typedef enum
{
+ ATI_OPTION_PROBE_SPARSE,
ATI_OPTION_ACCEL,
ATI_OPTION_CRT_DISPLAY,
ATI_OPTION_CSYNC,
ATI_OPTION_HWCURSOR,
-#ifndef AVOID_CPIO
-
- ATI_OPTION_LINEAR,
-
-#endif /* AVOID_CPIO */
-
#ifdef XF86DRI_DEVEL
ATI_OPTION_IS_PCI,
@@ -65,7 +60,6 @@ typedef enum
ATI_OPTION_MMIO_CACHE,
ATI_OPTION_TEST_MMIO_CACHE,
ATI_OPTION_PANEL_DISPLAY,
- ATI_OPTION_PROBE_CLOCKS,
ATI_OPTION_REFERENCE_CLOCK,
ATI_OPTION_SHADOW_FB,
ATI_OPTION_SWCURSOR,
diff --git a/src/atipreinit.c b/src/atipreinit.c
index 047aeedd..b9111fc3 100644
--- a/src/atipreinit.c
+++ b/src/atipreinit.c
@@ -28,7 +28,6 @@
#include <stdio.h>
#include "ati.h"
-#include "atiadapter.h"
#include "atiadjust.h"
#include "atiaudio.h"
#include "atibus.h"
@@ -54,251 +53,21 @@
#include "vbe.h"
#include "xf86RAC.h"
-#ifndef AVOID_CPIO
-
-typedef CARD16 Colour; /* The correct spelling should be OK :-) */
-
/*
- * Bit patterns which are extremely unlikely to show up when reading from
- * nonexistant memory (which normally shows up as either all bits set or all
- * bits clear).
+ * FreeScreen handles the clean-up.
*/
-static const Colour Test_Pixel[] = {0x5AA5U, 0x55AAU, 0xA55AU, 0xCA53U};
-
-static const struct
+static Bool
+Mach64GetRec(ScrnInfoPtr pScrn)
{
- int videoRamSize;
- int Miscellaneous_Options_Setting;
- struct
- {
- short int x, y;
+ if (!pScrn->driverPrivate) {
+ pScrn->driverPrivate = xnfcalloc(sizeof(ATIRec), 1);
+ memset(pScrn->driverPrivate, 0, sizeof(ATIRec));
}
- Coordinates[NumberOf(Test_Pixel) + 1];
-}
-Test_Case[] =
-{
- /*
- * Given the engine settings used, only a 4M card will have enough memory
- * to back up the 1025th line of the display. Since the pixel coordinates
- * are zero-based, line 1024 will be the first one which is only backed on
- * 4M cards.
- *
- * <Mark_Weaver@brown.edu>:
- * In case memory is being wrapped, (0,0) and (0,1024) to make sure they
- * can each hold a unique value.
- */
- {4096, MEM_SIZE_4M, {{0,0}, {0,1024}, {-1,-1}}},
-
- /*
- * This card has 2M or less. On a 1M card, the first 2M of the card's
- * memory will have even doublewords backed by physical memory and odd
- * doublewords unbacked.
- *
- * Pixels 0 and 1 of a row will be in the zeroth doubleword, while pixels 2
- * and 3 will be in the first. Check both pixels 2 and 3 in case this is a
- * pseudo-1M card (one chip pulled to turn a 2M card into a 1M card).
- *
- * <Mark_Weaver@brown.edu>:
- * I don't have a 1M card, so I'm taking a stab in the dark. Maybe memory
- * wraps every 512 lines, or maybe odd doublewords are aliases of their
- * even doubleword counterparts. I try everything here.
- */
- {2048, MEM_SIZE_2M, {{0,0}, {0,512}, {2,0}, {3,0}, {-1,-1}}},
-
- /*
- * This is a either a 1M card or a 512k card. Test pixel 1, since it is an
- * odd word in an even doubleword.
- *
- * <Mark_Weaver@brown.edu>:
- * This is the same idea as the test above.
- */
- {1024, MEM_SIZE_1M, {{0,0}, {0,256}, {1,0}, {-1,-1}}},
-
- /*
- * Assume it is a 512k card by default, since that is the minimum
- * configuration.
- */
- {512, MEM_SIZE_512K, {{-1,-1}}}
-};
-
-/*
- * ATIMach32ReadPixel --
- *
- * Return the colour of the specified screen location. Called from
- * ATIMach32videoRam function below.
- */
-static Colour
-ATIMach32ReadPixel
-(
- const short int X,
- const short int Y
-)
-{
- Colour Pixel_Colour;
-
- /* Wait for idle engine */
- ProbeWaitIdleEmpty();
-
- /* Set up engine for pixel read */
- ATIWaitQueue(7);
- outw(RD_MASK, (CARD16)(~0));
- outw(DP_CONFIG, FG_COLOR_SRC_BLIT | DATA_WIDTH | DRAW | DATA_ORDER);
- outw(CUR_X, X);
- outw(CUR_Y, Y);
- outw(DEST_X_START, X);
- outw(DEST_X_END, X + 1);
- outw(DEST_Y_END, Y + 1);
-
- /* Wait for data to become ready */
- ATIWaitQueue(16);
- WaitDataReady();
-
- /* Read pixel colour */
- Pixel_Colour = inw(PIX_TRANS);
- ProbeWaitIdleEmpty();
- return Pixel_Colour;
-}
-/*
- * ATIMach32WritePixel --
- *
- * Set the colour of the specified screen location. Called from
- * ATIMach32videoRam function below.
- */
-static void
-ATIMach32WritePixel
-(
- const short int X,
- const short int Y,
- const Colour Pixel_Colour
-)
-{
- /* Set up engine for pixel write */
- ATIWaitQueue(9);
- outw(WRT_MASK, (CARD16)(~0));
- outw(DP_CONFIG, FG_COLOR_SRC_FG | DRAW | READ_WRITE);
- outw(ALU_FG_FN, MIX_FN_PAINT);
- outw(FRGD_COLOR, Pixel_Colour);
- outw(CUR_X, X);
- outw(CUR_Y, Y);
- outw(DEST_X_START, X);
- outw(DEST_X_END, X + 1);
- outw(DEST_Y_END, Y + 1);
+ return TRUE;
}
/*
- * ATIMach32videoRam --
- *
- * Determine the amount of video memory installed on an 68800-6 based adapter.
- * This is done because these chips exhibit a bug that causes their
- * MISC_OPTIONS register to report 1M rather than the true amount of memory.
- *
- * This function is adapted from a similar function in mach32mem.c written by
- * Robert Wolff, David Dawes and Mark Weaver.
- */
-static int
-ATIMach32videoRam
-(
- void
-)
-{
- CARD16 clock_sel, mem_bndry, misc_options, ext_ge_config;
- Colour saved_Pixel[NumberOf(Test_Pixel)];
- unsigned int Case_Number, Pixel_Number;
- Bool AllPixelsOK;
-
- /* Save register values to be modified */
- clock_sel = inw(CLOCK_SEL);
- mem_bndry = inw(MEM_BNDRY);
- misc_options = inw(MISC_OPTIONS) & ~MEM_SIZE_ALIAS;
- ext_ge_config = inw(R_EXT_GE_CONFIG);
-
- /* Wait for enough FIFO entries */
- ATIWaitQueue(7);
-
- /* Enable accelerator */
- outw(CLOCK_SEL, clock_sel | DISABPASSTHRU);
-
- /* Make accelerator and VGA share video memory */
- outw(MEM_BNDRY, mem_bndry & ~(MEM_PAGE_BNDRY | MEM_BNDRY_ENA));
-
- /* Prevent video memory wrap */
- outw(MISC_OPTIONS, misc_options | MEM_SIZE_4M);
-
- /*
- * Set up the drawing engine for a pitch of 1024 at 16 bits per pixel. No
- * need to mess with the CRT because the results of this test are not
- * intended to be seen.
- */
- outw(EXT_GE_CONFIG, PIXEL_WIDTH_16 | ORDER_16BPP_565 | MONITOR_8514 |
- ALIAS_ENA);
- outw(GE_PITCH, 1024 >> 3);
- outw(GE_OFFSET_HI, 0);
- outw(GE_OFFSET_LO, 0);
-
- for (Case_Number = 0;
- Case_Number < (NumberOf(Test_Case) - 1);
- Case_Number++)
- {
- /* Reduce redundancy as per Mark_Weaver@brown.edu */
-# define TestPixel Test_Case[Case_Number].Coordinates[Pixel_Number]
-# define ForEachTestPixel \
- for (Pixel_Number = 0; TestPixel.x >= 0; Pixel_Number++)
-
- /* Save pixel colours that will be clobbered */
- ForEachTestPixel
- saved_Pixel[Pixel_Number] =
- ATIMach32ReadPixel(TestPixel.x, TestPixel.y);
-
- /* Write test patterns */
- ForEachTestPixel
- ATIMach32WritePixel(TestPixel.x, TestPixel.y,
- Test_Pixel[Pixel_Number]);
-
- /* Test for lost pixels */
- AllPixelsOK = TRUE;
- ForEachTestPixel
- {
- if (ATIMach32ReadPixel(TestPixel.x, TestPixel.y) !=
- Test_Pixel[Pixel_Number])
- {
- AllPixelsOK = FALSE;
- break;
- }
- }
-
- /* Restore clobbered pixels */
- ForEachTestPixel
- ATIMach32WritePixel(TestPixel.x, TestPixel.y,
- saved_Pixel[Pixel_Number]);
-
- /* End test on success */
- if (AllPixelsOK)
- break;
-
- /* Completeness */
-# undef ForEachTestPixel
-# undef TestPixel
- }
-
- /* Restore what was changed and correct MISC_OPTIONS register */
- ATIWaitQueue(4);
- outw(EXT_GE_CONFIG, ext_ge_config);
- misc_options |= Test_Case[Case_Number].Miscellaneous_Options_Setting;
- outw(MISC_OPTIONS, misc_options);
- outw(MEM_BNDRY, mem_bndry);
- outw(CLOCK_SEL, clock_sel);
-
- /* Wait for activity to die down */
- ProbeWaitIdleEmpty();
-
- /* Tell ATIPreInit the REAL story */
- return Test_Case[Case_Number].videoRamSize;
-}
-
-#endif /* AVOID_CPIO */
-
-/*
* ATIReportMemory --
*
* This function reports on the amount and type of video memory found.
@@ -317,19 +86,6 @@ ATIReportMemory
snprintf(Buffer, SizeOf(Buffer), "%d kB of %s detected",
pATI->VideoRAM, MemoryTypeName);
-#ifndef AVOID_CPIO
-
- if (pATI->depth == 1)
- {
- /* 1bpp only uses one plane of four */
- pScreenInfo->videoRam /= 4;
- Message += snprintf(Message, Buffer + SizeOf(Buffer) - Message,
- " (using %d kB)", pScreenInfo->videoRam);
- }
- else
-
-#endif /* AVOID_CPIO */
-
if (pATI->VideoRAM > pScreenInfo->videoRam)
{
Message += snprintf(Message, Buffer + SizeOf(Buffer) - Message,
@@ -339,7 +95,7 @@ ATIReportMemory
}
static const int videoRamSizes[] =
- {0, 256, 512, 1024, 2*1024, 4*1024, 6*1024, 8*1024, 12*1024, 16*1024, 0};
+ {512, 1024, 2*1024, 4*1024, 6*1024, 8*1024, 12*1024, 16*1024};
static const rgb defaultWeight = {0, 0, 0};
static const Gamma defaultGamma = {0.0, 0.0, 0.0};
@@ -420,10 +176,10 @@ ATIPreInit
DisplayModePtr pMode;
unsigned long Block0Base;
CARD32 IOValue;
- int i, j, AcceleratorVideoRAM = 0, ServerVideoRAM;
+ int i, j;
int Numerator, Denominator;
int MinX, MinY;
- ClockRange ATIClockRange = {NULL, 0, 80000, 0, TRUE, TRUE, 1, 1, 0};
+ ClockRange ATIClockRange = {NULL, 0, 80000, -1, TRUE, TRUE, 1, 1, 0};
int DefaultmaxClock = 0;
int minPitch, maxPitch = 0xFFU, maxHeight = 0;
int ApertureSize = 0x00010000U;
@@ -436,10 +192,8 @@ ATIPreInit
#ifndef AVOID_CPIO
xf86Int10InfoPtr pInt10Info = NULL;
- vbeInfoPtr pVBE;
+ vbeInfoPtr pVBE = NULL;
pointer pInt10Module, pDDCModule = NULL, pVBEModule = NULL;
- int VGAVideoRAM = 0;
- resRange Resources[2] = {{0, 0, 0}, _END};
#endif /* AVOID_CPIO */
@@ -450,23 +204,24 @@ ATIPreInit
return FALSE;
}
- pATI = ATIPTR(pScreenInfo);
-
- if (pATI->iEntity != pScreenInfo->entityList[0])
- {
- xf86DrvMsg(pScreenInfo->scrnIndex, X_ERROR,
- "Logic error: Entity mismatch.\n");
+ if (!Mach64GetRec(pScreenInfo))
return FALSE;
- }
+
+ pATI = ATIPTR(pScreenInfo);
/* Register resources */
- pEntity = xf86GetEntityInfo(pATI->iEntity);
+ pEntity = xf86GetEntityInfo(pScreenInfo->entityList[0]);
pGDev = pEntity->device;
pResources = pEntity->resources;
+
+ pATI->iEntity = pEntity->index;
+ pATI->Chip = pEntity->chipset;
+ pVideo = xf86GetPciInfoForEntity(pATI->iEntity);
+
xfree(pEntity);
+
if (!pResources)
- pResources = xf86RegisterResources(pATI->iEntity, NULL,
- pATI->SharedAccelerator ? ResShared : ResExclusive);
+ pResources = xf86RegisterResources(pATI->iEntity, NULL, ResShared);
if (pResources)
{
xf86DrvMsg(pScreenInfo->scrnIndex, X_ERROR,
@@ -481,51 +236,11 @@ ATIPreInit
if (!(flags & PROBE_DETECT))
{
- xf86DrvMsg(pScreenInfo->scrnIndex,
- pATI->Chipset ? X_CONFIG : X_DEFAULT,
- "Chipset: \"%s\".\n", ATIChipsetNames[pATI->Chipset]);
-
- /* Promote chipset specification */
- switch (pATI->Chipset)
- {
-
-#ifndef AVOID_CPIO
-
- case ATI_CHIPSET_IBMVGA:
- if (pATI->Adapter == ATI_ADAPTER_VGA)
- break; /* XXX */
- /* Fall through */
-
- case ATI_CHIPSET_VGAWONDER:
- pATI->Chipset = ATI_CHIPSET_ATIVGA;
- break;
-
- case ATI_CHIPSET_IBM8514:
- if (pATI->Adapter == ATI_ADAPTER_8514A)
- break; /* XXX */
- /* Fall through */
-
- case ATI_CHIPSET_MACH8:
- case ATI_CHIPSET_MACH32:
-
-#endif /* AVOID_CPIO */
-
- case ATI_CHIPSET_MACH64:
- case ATI_CHIPSET_RAGE128:
- case ATI_CHIPSET_RADEON:
- pATI->Chipset = ATI_CHIPSET_ATI;
- break;
-
- default:
- break;
- }
-
/* Set monitor */
pScreenInfo->monitor = pScreenInfo->confScreen->monitor;
/* Set depth, bpp, etc. */
- if ((pATI->Chipset != ATI_CHIPSET_ATI) ||
- (pATI->Chip < ATI_CHIP_264CT))
+ if ((pATI->Chip < ATI_CHIP_264CT))
{
i = NoDepth24Support; /* No support for >8bpp either */
DefaultDepth = 8;
@@ -543,15 +258,6 @@ ATIPreInit
{
static const CARD8 AllowedDepthBpp[][2] =
{
-
-#ifndef AVOID_CPIO
-
- { 1, 1},
- { 4, 4},
- { 4, 8},
-
-#endif /* AVOID_CPIO */
-
{ 8, 8},
{15, 16},
{16, 16},
@@ -594,14 +300,12 @@ ATIPreInit
ATIProcessOptions(pScreenInfo, pATI);
}
-#ifdef AVOID_CPIO
+ if (!ATIMach64ProbeIO(pVideo, pATI))
+ return FALSE;
- else /* if (flags & PROBE_DETECT) */
- {
- return TRUE;
- }
+ ATIClaimBusSlot(pGDev->active, pATI);
-#else /* AVOID_CPIO */
+#ifndef AVOID_CPIO
#ifdef TV_OUT
@@ -642,17 +346,7 @@ ATIPreInit
if ((pVBE = VBEInit(pInt10Info, pATI->iEntity)))
{
ConfiguredMonitor = vbeDoEDID(pVBE, pDDCModule);
-#ifdef TV_OUT
- pATI->pInt10 = pInt10Info;
- pATI->pVBE = pVBE;
- pVBE = NULL;
-#else
- vbeFree(pVBE);
-#endif /* TV_OUT */
}
-#ifndef TV_OUT
- xf86UnloadSubModule(pVBEModule);
-#endif /* TV_OUT */
}
if (!(flags & PROBE_DETECT))
@@ -676,20 +370,21 @@ ATIPreInit
}
#ifndef TV_OUT
+ /* De-activate VBE */
+ vbeFree(pVBE);
+ xf86UnloadSubModule(pVBEModule);
+
/* De-activate int10 */
xf86FreeInt10(pInt10Info);
xf86UnloadSubModule(pInt10Module);
#else
+ pATI->pInt10 = pInt10Info;
+ pATI->pVBE = pVBE;
+ pVBE = NULL;
pInt10Info = NULL;
#endif /* TV_OUT */
- if (flags & PROBE_DETECT)
- {
- xf86UnloadSubModule(pDDCModule);
- return TRUE;
- }
-
- if (ConfiguredMonitor)
+ if (ConfiguredMonitor && !(flags & PROBE_DETECT))
{
xf86PrintEDID(ConfiguredMonitor);
xf86SetDDCproperties(pScreenInfo, ConfiguredMonitor);
@@ -700,6 +395,11 @@ ATIPreInit
#endif /* AVOID_CPIO */
+ if (flags & PROBE_DETECT)
+ {
+ return TRUE;
+ }
+
pATI->Block0Base = 0; /* Might no longer be valid */
if ((pVideo = pATI->PCIInfo))
{
@@ -729,124 +429,15 @@ ATIPreInit
#endif /* AVOID_CPIO */
- /* Deal with ChipID & ChipRev overrides */
- if (pGDev->chipID >= 0)
- {
- ATIChipType Chip;
-
- Chip = ATIChipID(pGDev->chipID,
- (pGDev->chipRev < 0) ? pATI->ChipRev : pGDev->chipRev);
- if (Chip != pATI->Chip)
- {
- pATI->Chip = Chip;
- pATI->ChipType = pGDev->chipID;
- if (pGDev->chipRev < 0)
- {
- xf86DrvMsg(pScreenInfo->scrnIndex, X_CONFIG,
- "Driver messages reflect ChipID 0x%04X override.\n",
- pATI->ChipType);
- }
- else
- {
- pATI->ChipRev = pGDev->chipRev;
- pATI->ChipVersion = GetBits(pATI->ChipRev,
- GetBits(CFG_CHIP_VERSION, CFG_CHIP_REV));
- pATI->ChipFoundry = GetBits(pATI->ChipRev,
- GetBits(CFG_CHIP_FOUNDRY, CFG_CHIP_REV));
- pATI->ChipRevision = GetBits(pATI->ChipRev,
- GetBits(CFG_CHIP_REVISION, CFG_CHIP_REV));
- xf86DrvMsg(pScreenInfo->scrnIndex, X_CONFIG,
- "Driver messages reflect ChipID 0x%04X and ChipRev 0x%02X"
- " overrides.\n", pATI->ChipType, pATI->ChipRev);
- }
- }
- }
-
/* Finish private area initialisation */
pATI->DAC = ATI_DAC_GENERIC;
-#ifndef AVOID_CPIO
-
- pATI->NewHW.SetBank = ATIx8800SetBank;
- pATI->BankInfo.SetSourceBank = ATIx8800SetRead;
- pATI->BankInfo.SetDestinationBank = ATIx8800SetWrite;
- pATI->BankInfo.SetSourceAndDestinationBanks = ATIx8800SetReadWrite;
- pATI->BankInfo.BankSize = 0x00010000U; /* 64kB */
-
-#endif /* AVOID_CPIO */
-
pATI->LCDPanelID = -1;
pATI->nFIFOEntries = 16; /* For now */
pATI->Audio = ATI_AUDIO_NONE;
/* Finish probing the adapter */
- switch (pATI->Adapter)
{
-
-#ifndef AVOID_CPIO
-
- case ATI_ADAPTER_NONE:
- case ATI_ADAPTER_EGA:
- case ATI_ADAPTER_EGA_PLUS:
- case ATI_ADAPTER_VGA:
- case ATI_ADAPTER_BASIC:
- pATI->NewHW.SetBank = (ATIBankProcPtr)NoopDDA;
- pATI->BankInfo.SetSourceBank =
- pATI->BankInfo.SetDestinationBank =
- pATI->BankInfo.SetSourceAndDestinationBanks =
- (miBankProcPtr)NoopDDA;
- break;
-
- case ATI_ADAPTER_V3:
- pATI->NewHW.SetBank = ATIV3SetBank;
- pATI->BankInfo.SetSourceBank = ATIV3SetRead;
- pATI->BankInfo.SetDestinationBank = ATIV3SetWrite;
- pATI->BankInfo.SetSourceAndDestinationBanks = ATIV3SetReadWrite;
- break;
-
- case ATI_ADAPTER_V4:
- case ATI_ADAPTER_V5:
- pATI->NewHW.SetBank = ATIV4V5SetBank;
- pATI->BankInfo.SetSourceBank = ATIV4V5SetRead;
- pATI->BankInfo.SetDestinationBank = ATIV4V5SetWrite;
- pATI->BankInfo.SetSourceAndDestinationBanks = ATIV4V5SetReadWrite;
- break;
-
- case ATI_ADAPTER_XL:
- pATI->DAC = ATI_DAC_SC11483;
- break;
-
- case ATI_ADAPTER_8514A:
- pATI->VideoRAM =
- videoRamSizes[GetBits(inw(SUBSYS_STAT), _8PLANE) + 2];
- break;
-
- case ATI_ADAPTER_MACH8:
- pATI->VideoRAM =
- videoRamSizes[GetBits(inw(CONFIG_STATUS_1), MEM_INSTALLED) + 2];
- break;
-
- case ATI_ADAPTER_MACH32:
- IOValue = inw(CONFIG_STATUS_1);
- pATI->DAC = ATI_DAC(GetBits(IOValue, DACTYPE), 0);
- pATI->MemoryType = GetBits(IOValue, MEM_TYPE);
-
- IOValue = inw(MISC_OPTIONS);
- pATI->VideoRAM =
- videoRamSizes[GetBits(IOValue, MEM_SIZE_ALIAS) + 2];
-
- /*
- * The 68800-6 doesn't necessarily report the correct video memory
- * size.
- */
- if ((pATI->Chip == ATI_CHIP_68800_6) && (pATI->VideoRAM == 1024))
- pATI->VideoRAM = ATIMach32videoRam();
-
- break;
-
-#endif /* AVOID_CPIO */
-
- case ATI_ADAPTER_MACH64:
do
{
/*
@@ -919,8 +510,8 @@ ATIPreInit
pATIHW->mem_cntl = inr(MEM_CNTL);
if (pATI->Chip < ATI_CHIP_264VTB)
{
- pATI->VideoRAM =
- videoRamSizes[GetBits(pATIHW->mem_cntl, CTL_MEM_SIZE) + 2];
+ IOValue = GetBits(pATIHW->mem_cntl, CTL_MEM_SIZE);
+ pATI->VideoRAM = videoRamSizes[IOValue];
}
else
{
@@ -1025,24 +616,12 @@ ATIPreInit
*/
if (pATI->DAC < ATI_DAC_ATI68875)
pATI->DAC += ATI_DAC_INTERNAL;
-
- break;
-
- default:
- break;
}
/*
* For Mach64 adapters, pick up, from the BIOS, the type of programmable
* clock generator (if any), and various information about it.
*/
-
-#ifndef AVOID_CPIO
-
- if (pATI->Chip >= ATI_CHIP_88800GXC)
-
-#endif /* AVOID_CPIO */
-
{
CARD16 ClockDac;
@@ -1085,16 +664,6 @@ ATIPreInit
if (ClockTable > 0)
{
- FrequencyTable = BIOSWord(ClockTable - 0x02U);
- if ((FrequencyTable > 0) &&
- ((FrequencyTable + 0x20U) <= BIOSSize))
- {
- for (i = 0; i < 16; i++)
- {
- pATI->BIOSClocks[i] = BIOSWord(FrequencyTable);
- FrequencyTable += 2;
- }
- }
pATI->ProgrammableClock = BIOSByte(ClockTable);
pATI->ClockNumberToProgramme = BIOSByte(ClockTable + 0x06U);
switch (BIOSWord(ClockTable + 0x08U) / 10)
@@ -1162,9 +731,7 @@ ATIPreInit
* accelerator modes.
*/
if ((pATI->ProgrammableClock == ATI_CLOCK_ICS2595) &&
- (pATI->DAC == ATI_DAC_IBMRGB514) &&
- (pScreenInfo->depth >= 8) &&
- (pATI->Chipset == ATI_CHIPSET_ATI))
+ (pATI->DAC == ATI_DAC_IBMRGB514))
pATI->ProgrammableClock = ATI_CLOCK_IBMRGB514;
pATI->ClockDescriptor =
@@ -1415,29 +982,10 @@ ATIPreInit
ATIUnlock(pATI); /* Unlock registers */
-#ifndef AVOID_CPIO
-
- /* Sometimes, the BIOS lies about the chip */
- if ((pATI->Chip >= ATI_CHIP_28800_4) && (pATI->Chip <= ATI_CHIP_28800_6))
- {
- IOValue = GetBits(ATIGetExtReg(0xAAU), 0x0FU) +
- (ATI_CHIP_28800_4 - 4);
- if ((IOValue <= ATI_CHIP_28800_6) && (IOValue > pATI->Chip))
- pATI->Chip = IOValue;
- }
-
-#endif /* AVOID_CPIO */
-
/* Report what was found */
xf86DrvMsg(pScreenInfo->scrnIndex, X_PROBED,
"%s graphics controller detected.\n", ATIChipNames[pATI->Chip]);
-#ifndef AVOID_CPIO
-
- if ((pATI->Chip >= ATI_CHIP_68800) && (pATI->Chip != ATI_CHIP_68800_3))
-
-#endif /* AVOID_CPIO */
-
{
Message = Buffer + snprintf(Buffer, SizeOf(Buffer), "Chip type %04X",
pATI->ChipType);
@@ -1459,19 +1007,12 @@ ATIPreInit
Buffer, pATI->ChipClass, pATI->ChipRevision);
}
-#ifndef AVOID_CPIO
-
- if (pATI->Adapter >= ATI_ADAPTER_MACH8)
-
-#endif /* AVOID_CPIO */
-
{
Message = Buffer + snprintf(Buffer, SizeOf(Buffer),
"%s bus interface detected", ATIBusNames[pATI->BusType]);
#ifndef AVOID_CPIO
- if (pATI->Adapter >= ATI_ADAPTER_MACH64)
{
Message += snprintf(Message, Buffer + SizeOf(Buffer) - Message,
"; %s I/O base is 0x%04lX",
@@ -1491,16 +1032,10 @@ ATIPreInit
"VGA Wonder registers at I/O port 0x%04lX.\n",
pATI->CPIO_VGAWonder);
- if (pATI->Coprocessor != ATI_CHIP_NONE)
- xf86DrvMsg(pScreenInfo->scrnIndex, X_PROBED,
- "%s graphics accelerator detected,\n with %d kB of coprocessor"
- " memory.\n",
- ATIChipNames[pATI->Coprocessor], pATI->VideoRAM);
-
#endif /* AVOID_CPIO */
xf86DrvMsg(pScreenInfo->scrnIndex, X_PROBED,
- "%s adapter detected.\n", ATIAdapterNames[pATI->Adapter]);
+ "ATI Mach64 adapter detected.\n");
if (pATI->Chip >= ATI_CHIP_264GT)
xf86DrvMsg(pScreenInfo->scrnIndex, X_NOTICE,
@@ -1534,8 +1069,6 @@ ATIPreInit
}
}
-#ifdef AVOID_CPIO
-
if (!xf86LinearVidMem())
{
xf86DrvMsg(pScreenInfo->scrnIndex, X_ERROR,
@@ -1546,8 +1079,6 @@ ATIPreInit
return FALSE;
}
-#endif /* AVOID_CPIO */
-
/*
* Set colour weights.
*/
@@ -1612,14 +1143,6 @@ ATIPreInit
/*
* Set colour gamma.
*/
-
-#ifndef AVOID_CPIO
-
- if (pScreenInfo->depth > 1)
-
-#endif /* AVOID_CPIO */
-
- {
if (!xf86SetGamma(pScreenInfo, defaultGamma))
{
ATILock(pATI);
@@ -1627,7 +1150,6 @@ ATIPreInit
ATIUnmapApertures(pScreenInfo->scrnIndex, pATI);
return FALSE;
}
- }
pATI->depth = pScreenInfo->depth;
pATI->bitsPerPixel = pScreenInfo->bitsPerPixel;
@@ -1638,14 +1160,6 @@ ATIPreInit
* Determine which CRT controller to use for video modes.
*/
-#ifndef AVOID_CPIO
-
- if ((pATI->Chip >= ATI_CHIP_88800GXC) &&
- (pATI->depth >= 8) &&
- (pATI->Chipset == ATI_CHIPSET_ATI))
-
-#endif /* AVOID_CPIO */
-
{
pATI->NewHW.crtc = ATI_CRTC_MACH64;
@@ -1654,7 +1168,7 @@ ATIPreInit
#ifndef AVOID_CPIO
- if (pATI->VGAAdapter != ATI_ADAPTER_NONE)
+ if (pATI->VGAAdapter)
{
/*
* No need for VGA I/O resources during operating state (but they
@@ -1687,42 +1201,6 @@ ATIPreInit
}
-#ifndef AVOID_CPIO
-
- else
- {
- pATI->NewHW.crtc = ATI_CRTC_VGA;
-
- xf86DrvMsg(pScreenInfo->scrnIndex, X_INFO,
- "Using VGA CRTC.\n");
- }
-
- /* Complain if VGA is needed but not there */
- if ((pATI->NewHW.crtc == ATI_CRTC_VGA) || !pATI->OptionLinear)
- {
- /* VGA is required at this point */
- if (pATI->VGAAdapter == ATI_ADAPTER_NONE)
- {
- xf86DrvMsg(pScreenInfo->scrnIndex, X_ERROR,
- "VGA is not available through this adapter.\n");
- ATILock(pATI);
- ATIPrintNoiseIfRequested(pATI, BIOS, BIOSSize);
- ATIUnmapApertures(pScreenInfo->scrnIndex, pATI);
- return FALSE;
- }
-
- if (pATI->Coprocessor != ATI_CHIP_NONE)
- {
- /* Ignore any 8514/A or Mach8 accelerator from this point on */
- pATI->Adapter = pATI->VGAAdapter;
-
- /* Accelerator and VGA cannot share memory */
- pATI->VideoRAM = 0;
- }
- }
-
-#endif /* AVOID_CPIO */
-
/*
* Decide between the CRT and the panel.
*/
@@ -2330,89 +1808,7 @@ ATIPreInit
*/
pScreenInfo->videoRam = pATI->VideoRAM;
-#ifndef AVOID_CPIO
-
- AcceleratorVideoRAM = pScreenInfo->videoRam;
- if (pATI->Chip == ATI_CHIP_VGA)
- {
- if (pATI->depth <= 4)
- VGAVideoRAM = 256;
- else
- VGAVideoRAM = 64;
-
- /* For VGA, allow a lower override */
- if ((pGDev->videoRam > 0) && (pGDev->videoRam < VGAVideoRAM))
- VGAVideoRAM = pGDev->videoRam;
- }
- else if (pATI->CPIO_VGAWonder)
- {
- /*
- * XXX There's an assumption here that the values retrieved are those
- * set by BIOS initialisation.
- */
- if (pATI->Chip <= ATI_CHIP_18800_1)
- {
- VGAVideoRAM =
- videoRamSizes[GetBits(ATIGetExtReg(0xBBU), 0x20U) + 1];
- if (AcceleratorVideoRAM > 512)
- AcceleratorVideoRAM = 512;
- }
- else
- {
- IOValue = ATIGetExtReg(0xB0U);
- if (IOValue & 0x08U)
- VGAVideoRAM = 1024;
- else if (IOValue & 0x10U)
- VGAVideoRAM = 512;
- else
- VGAVideoRAM = 256;
- if (AcceleratorVideoRAM > 1024)
- AcceleratorVideoRAM = 1024;
- }
- }
-
- /* Check for hardware limitations */
- if (!AcceleratorVideoRAM)
- {
- pScreenInfo->videoRam = pATI->VideoRAM = VGAVideoRAM;
-
- /*
- * VGA Wonder V3's, V4's and V5's don't appear to support banking in
- * planar modes.
- */
- if ((pATI->depth <= 4) &&
- (pATI->Chip <= ATI_CHIP_18800_1) &&
- (VGAVideoRAM > 256))
- {
- if (pATI->OptionDevel)
- {
- xf86DrvMsg(pScreenInfo->scrnIndex, X_NOTICE,
- "Virtual resolutions requiring more than %s kB\n of video"
- " memory might not function properly.\n",
- (pATI->depth == 1) ? "64" : "256");
- }
- else
- {
- xf86DrvMsg(pScreenInfo->scrnIndex, X_NOTICE,
- "VideoRAM reduced to 256 kB due to hardware"
- " limitations.\n");
- pScreenInfo->videoRam = 256;
- }
- }
- }
- else if ((pATI->NewHW.crtc == ATI_CRTC_MACH64) ||
- (pATI->Chip >= ATI_CHIP_264CT))
-
-#endif /* AVOID_CPIO */
-
{
-
-#ifndef AVOID_CPIO
-
- if (pATI->depth >= 8)
-
-#endif /* AVOID_CPIO */
-
{
/* Get adapter's linear aperture configuration */
pATIHW->config_cntl = inr(CONFIG_CNTL);
@@ -2437,63 +1833,11 @@ ATIPreInit
}
}
-#ifndef AVOID_CPIO
-
- /* Except for PCI & AGP, allow for user override */
- if (!pVideo)
- {
- if (pATI->Chip == ATI_CHIP_88800CX)
- IOValue = ~((CARD32)((1 << 23) - 1));
- else if (pATI->Chip >= ATI_CHIP_88800GXE)
- IOValue = ~((CARD32)((1 << 24) - 1));
- else if (pATI->VideoRAM >= 4096)
- IOValue = ~((CARD32)((1 << 23) - 1));
- else
- IOValue = ~((CARD32)((1 << 22) - 1));
-
- IOValue &= pGDev->MemBase;
- if (IOValue &&
- (IOValue <= (CARD32)(MaxBits(CFG_MEM_AP_LOC) << 22)))
- pATI->LinearBase = IOValue;
-
- if (!pATI->LinearBase)
- {
- xf86DrvMsg(pScreenInfo->scrnIndex, X_WARNING,
- "Linear aperture not configured. Specify \"MemBase\""
- " override in XF86Config \"Device\" section.\n");
- }
- else
- {
- if (!pATI->LinearSize)
- {
- if ((pATI->Chip <= ATI_CHIP_88800GXD) &&
- (pATI->VideoRAM < 4096))
- pATI->LinearSize = 4 * 1024 * 1024;
- else
- pATI->LinearSize = 8 * 1024 * 1024;
- }
-
- Resources[0].type = ResExcMemBlock | ResBus;
- Resources[0].rBegin = pATI->LinearBase;
- Resources[0].rEnd =
- pATI->LinearBase + pATI->LinearSize - 1;
- if (xf86RegisterResources(pATI->iEntity, Resources,
- ResNone))
- {
- xf86DrvMsg(pScreenInfo->scrnIndex, X_WARNING,
- "Unable to register %d MB linear aperture at"
- " 0x%08lX.\n", pATI->LinearSize >> 10,
- pATI->LinearBase);
-
- pATI->LinearSize = 0;
- }
- }
- }
-
-#endif /* AVOID_CPIO */
-
if (pATI->LinearBase && pATI->LinearSize)
{
+ int AcceleratorVideoRAM = pATI->LinearSize >> 10;
+ int ServerVideoRAM = pATI->VideoRAM;
+
/*
* Unless specified in PCI configuration space, set MMIO
* address to tail end of linear aperture.
@@ -2505,8 +1849,6 @@ ATIPreInit
pATI->MMIOInLinear = TRUE;
}
- AcceleratorVideoRAM = pATI->LinearSize >> 10;
-
/*
* Account for MMIO area at the tail end of the linear
* aperture, if it is needed or if it cannot be disabled.
@@ -2514,8 +1856,6 @@ ATIPreInit
if (pATI->MMIOInLinear || (pATI->Chip < ATI_CHIP_264VTB))
AcceleratorVideoRAM -= 2;
- ServerVideoRAM = pATI->VideoRAM;
-
if (pATI->Cursor > ATI_CURSOR_SOFTWARE)
{
/*
@@ -2535,12 +1875,6 @@ ATIPreInit
pATI->CursorBase);
}
-#ifndef AVOID_CPIO
-
- if (pATI->OptionLinear)
-
-#endif /* AVOID_CPIO */
-
{
CARD32 PageSize = getpagesize() >> 10;
@@ -2606,74 +1940,14 @@ ATIPreInit
}
}
-#ifndef AVOID_CPIO
-
- /* Set up for a banked aperture */
- if (pATI->VGAAdapter != ATI_ADAPTER_NONE)
- {
- pATI->UseSmallApertures = TRUE;
-
- /* Set banking functions */
- if (pATI->depth <= 4)
- {
- pATI->NewHW.SetBank = ATIMach64SetBankPlanar;
- pATI->BankInfo.SetSourceBank = ATIMach64SetReadPlanar;
- pATI->BankInfo.SetDestinationBank = ATIMach64SetWritePlanar;
- pATI->BankInfo.SetSourceAndDestinationBanks =
- ATIMach64SetReadWritePlanar;
- }
- else
- {
- pATI->NewHW.SetBank = ATIMach64SetBankPacked;
- pATI->BankInfo.SetSourceBank = ATIMach64SetReadPacked;
- pATI->BankInfo.SetDestinationBank = ATIMach64SetWritePacked;
- pATI->BankInfo.SetSourceAndDestinationBanks =
- ATIMach64SetReadWritePacked;
- }
-
- /*
- * Unless specified in PCI configuration space, or at the top of
- * of a little-endian linear aperture, set MMIO address to the one
- * just above the VGA aperture. This does not work on the CT
- * (maybe others).
- */
- if (!pATI->Block0Base &&
- ((pATI->Chip < ATI_CHIP_264CT) ||
- (pATI->Chip >= ATI_CHIP_264VT) ||
- pATI->OptionDevel))
- pATI->Block0Base = 0x000BFC00U;
- }
-
- if (!pATI->OptionLinear)
- pATI->LinearBase = 0; /* Not needed */
-
-#endif /* AVOID_CPIO */
-
if (!pATI->LinearBase || !pATI->LinearSize)
{
-
-#ifndef AVOID_CPIO
-
- if (pATI->VGAAdapter == ATI_ADAPTER_NONE)
-
-#endif /* AVOID_CPIO */
-
- {
xf86DrvMsg(pScreenInfo->scrnIndex, X_ERROR,
"Linear aperture not available.\n");
ATILock(pATI);
ATIPrintNoiseIfRequested(pATI, BIOS, BIOSSize);
ATIUnmapApertures(pScreenInfo->scrnIndex, pATI);
return FALSE;
- }
-
-#ifndef AVOID_CPIO
-
- /* Insurance */
- pATI->LinearBase = pATI->LinearSize = 0;
-
-#endif /* AVOID_CPIO */
-
}
if (pATI->Block0Base)
@@ -2694,48 +1968,7 @@ ATIPreInit
#ifndef AVOID_CPIO
- else
- /*
- * After BIOS initialisation, the accelerator (if any) and the VGA won't
- * necessarily agree on the amount of video memory, depending on whether or
- * where the memory boundary is configured. Any discrepancy will be
- * resolved by ATIModePreInit().
- *
- * However, it's possible that there is more video memory than VGA Wonder
- * can architecturally handle.
- */
- if (((pATI->Chip < ATI_CHIP_68800) || (pATI->Chip > ATI_CHIP_68800AX)) &&
- (AcceleratorVideoRAM < pScreenInfo->videoRam))
- {
- if (pATI->OptionDevel)
- {
- if (pATI->depth == 1)
- AcceleratorVideoRAM /= 4;
-
- xf86DrvMsg(pScreenInfo->scrnIndex, X_NOTICE,
- "Virtual resolutions requiring more than %d kB\n of video"
- " memory might not function correctly.\n",
- AcceleratorVideoRAM);
- }
- else
- {
- xf86DrvMsg(pScreenInfo->scrnIndex, X_NOTICE,
- "VideoRAM reduced to %d kB due to hardware limitations.\n",
- AcceleratorVideoRAM);
-
- pScreenInfo->videoRam = AcceleratorVideoRAM;
- }
- }
-
- if (pATI->OptionLinear)
- {
- if (!pATI->LinearBase)
- {
- xf86DrvMsg(pScreenInfo->scrnIndex, X_WARNING,
- "Linear aperture not supported in this configuration.\n");
- pATI->OptionLinear = FALSE;
- }
- else if (pATI->VGAAdapter != ATI_ADAPTER_NONE)
+ if (pATI->VGAAdapter)
{
/*
* Free VGA memory aperture during operating state (but it is still
@@ -2751,18 +1984,9 @@ ATIPreInit
xf86FreeResList(pResources);
}
}
- }
#endif /* AVOID_CPIO */
- if ((pATI->Cursor > ATI_CURSOR_SOFTWARE) && !pATI->CursorBase)
- {
- xf86DrvMsg(pScreenInfo->scrnIndex, X_WARNING,
- "Unable to store hardware cursor image. Reverting to software"
- " cursor.\n");
- pATI->Cursor = ATI_CURSOR_SOFTWARE;
- }
-
/*
* Remap apertures. Must lock and re-unlock around this in case the
* remapping fails.
@@ -2776,32 +2000,11 @@ ATIPreInit
if (pATI->OptionAccel)
{
-
-#ifndef AVOID_CPIO
-
- if (!pATI->Block0Base || (pATI->NewHW.crtc == ATI_CRTC_VGA))
- {
- xf86DrvMsg(pScreenInfo->scrnIndex, X_WARNING,
- "Acceleration not supported in this configuration.\n");
- pATI->OptionAccel = FALSE;
- }
- else
-
-#endif /* AVOID_CPIO */
-
- {
xf86DrvMsg(pScreenInfo->scrnIndex, X_INFO,
"MMIO write caching %sabled.\n",
pATI->OptionMMIOCache ? "en" : "dis");
- }
}
-#ifndef AVOID_CPIO
-
- if (pATI->Adapter >= ATI_ADAPTER_MACH32)
-
-#endif /* AVOID_CPIO */
-
{
if (pATI->Chip >= ATI_CHIP_264CT)
ATIReportMemory(pScreenInfo, pATI,
@@ -2814,20 +2017,6 @@ ATIPreInit
ATIMemoryTypeNames_Mach[pATI->MemoryType]);
}
-#ifndef AVOID_CPIO
-
- else if (pATI->Adapter >= ATI_ADAPTER_V3)
- {
- ATIReportMemory(pScreenInfo, pATI,
- (ATIGetExtReg(0xB7U) & 0x04U) ? "DRAM" : "VRAM");
- }
- else
- {
- ATIReportMemory(pScreenInfo, pATI, "video memory");
- }
-
-#endif /* AVOID_CPIO */
-
/*
* Finish banking setup. This needs to be fixed to not assume the mode on
* entry is a VGA mode. XXX
@@ -2835,72 +2024,38 @@ ATIPreInit
#ifndef AVOID_CPIO
- if (pATI->VGAAdapter == ATI_ADAPTER_NONE)
-
-#endif /* AVOID_CPIO */
-
+ if (!pATI->VGAAdapter)
{
- pATIHW->crtc = pATI->NewHW.crtc;
+ pATI->NewHW.SetBank = ATIx8800SetBank;
+ pATI->NewHW.nPlane = 0;
-#ifndef AVOID_CPIO
+ pATIHW->crtc = pATI->NewHW.crtc;
pATIHW->SetBank = (ATIBankProcPtr)NoopDDA;
- pATI->BankInfo.BankSize = 0; /* No banking */
-
-#endif /* AVOID_CPIO */
-
}
-
-#ifndef AVOID_CPIO
-
else
{
+ Bool ext_disp_en = (pATI->LockData.crtc_gen_cntl & CRTC_EXT_DISP_EN);
+ Bool vga_ap_en = (pATI->LockData.config_cntl & CFG_MEM_VGA_AP_EN);
+ Bool vga_color_256 = (GetReg(SEQX, 0x04U) & 0x08U);
+
+ pATI->NewHW.SetBank = ATIMach64SetBankPacked;
+ pATI->NewHW.nPlane = 1;
+
pATIHW->crtc = ATI_CRTC_VGA;
-#if 0 /* ___NOT_YET___ */
- if (pATI->ChipHasSUBSYS_CNTL)
- {
- }
- else
-#endif
- if ((pATI->Chip >= ATI_CHIP_88800GXC) &&
- (pATI->LockData.crtc_gen_cntl & CRTC_EXT_DISP_EN))
- {
- pATIHW->crtc = ATI_CRTC_MACH64;
- }
- if (pATI->depth <= 4)
- {
- pATI->BankInfo.nBankDepth = 1;
- pATI->NewHW.nPlane = 4;
- }
- else
- {
- pATI->BankInfo.nBankDepth = pATI->depth;
- pATI->NewHW.nPlane = 1;
- }
+ if (ext_disp_en)
+ pATIHW->crtc = ATI_CRTC_MACH64;
- if ((pATIHW->crtc != ATI_CRTC_VGA) || (GetReg(SEQX, 0x04U) & 0x08U))
+ if ((pATIHW->crtc != ATI_CRTC_VGA) || vga_color_256)
pATIHW->nPlane = 1;
else
pATIHW->nPlane = 4;
- pATIHW->nBank = ATIDivide(pATI->VideoRAM,
- pATIHW->nPlane * pATI->BankInfo.BankSize, 10, 1);
- pATI->NewHW.nBank = ATIDivide(pATI->VideoRAM,
- pATI->NewHW.nPlane * pATI->BankInfo.BankSize, 10, 1);
+ /* VideoRAM is a multiple of 512kB and BankSize is 64kB */
+ pATIHW->nBank = pATI->VideoRAM / (pATIHW->nPlane * 0x40U);
- if (pATI->VGAAdapter == ATI_ADAPTER_VGA)
- {
- pATIHW->SetBank = pATI->NewHW.SetBank =
- (ATIBankProcPtr)NoopDDA;
- pATIHW->nBank = pATI->NewHW.nBank = 1;
- }
- else if (!pATI->UseSmallApertures)
- {
- pATIHW->SetBank = pATI->NewHW.SetBank;
- }
- else if ((pATIHW->crtc == ATI_CRTC_VGA) &&
- !(pATI->LockData.config_cntl & CFG_MEM_VGA_AP_EN))
+ if ((pATIHW->crtc == ATI_CRTC_VGA) && !vga_ap_en)
{
pATIHW->SetBank = (ATIBankProcPtr)NoopDDA;
pATIHW->nBank = 1;
@@ -2913,10 +2068,12 @@ ATIPreInit
{
pATIHW->SetBank = ATIMach64SetBankPlanar;
}
+ }
- if (((ApertureSize * pATI->depth) / pATI->BankInfo.nBankDepth) >=
- (unsigned)(pScreenInfo->videoRam * 1024))
- pATI->BankInfo.BankSize = 0; /* No banking */
+#else /* AVOID_CPIO */
+
+ {
+ pATIHW->crtc = pATI->NewHW.crtc;
}
#endif /* AVOID_CPIO */
@@ -2925,24 +2082,6 @@ ATIPreInit
{
/* Until ShadowFB becomes a true screen wrapper, if it ever does... */
-#ifndef AVOID_CPIO
-
- if (pATI->BankInfo.BankSize)
- {
- xf86DrvMsg(pScreenInfo->scrnIndex, X_WARNING,
- "Cannot shadow a banked frame buffer.\n");
- pATI->OptionShadowFB = FALSE;
- }
- else if (pATI->depth < 8)
- {
- xf86DrvMsg(pScreenInfo->scrnIndex, X_WARNING,
- "Cannot shadow a planar frame buffer.\n");
- pATI->OptionShadowFB = FALSE;
- }
- else
-
-#endif /* AVOID_CPIO */
-
if (pATI->OptionAccel)
{
xf86DrvMsg(pScreenInfo->scrnIndex, X_WARNING,
@@ -2982,8 +2121,6 @@ ATIPreInit
*/
if (pATI->ProgrammableClock == ATI_CLOCK_INTERNAL)
Numerator <<= 1;
- else if (pATI->depth > 8)
- Denominator *= (pATI->bitsPerPixel / 8);
ATIClockRange.maxClock = (Numerator / (Denominator * 1000)) * 1000;
@@ -3004,25 +2141,12 @@ ATIPreInit
Denominator = pATI->ClockDescriptor.MinM *
pATI->XCLKReferenceDivider * pATI->ReferenceDenominator;
-#ifndef AVOID_CPIO
-
- if (pATI->depth >= 8)
-
-#endif /* AVOID_CPIO */
-
{
Denominator *= pATI->bitsPerPixel / 4;
}
i = (6 - 2) - pATI->XCLKPostDivider;
-#ifndef AVOID_CPIO
-
- if (pATI->NewHW.crtc == ATI_CRTC_VGA)
- i--;
-
-#endif /* AVOID_CPIO */
-
i = (ATIDivide(Numerator, Denominator, i, -1) / 1000) * 1000;
if (i < ATIClockRange.maxClock)
ATIClockRange.maxClock = i;
@@ -3094,17 +2218,6 @@ ATIPreInit
case ATI_DAC_IBMRGB514:
pATI->maxClock = 220000;
-
-#ifndef AVOID_CPIO
-
- if (pATI->NewHW.crtc == ATI_CRTC_VGA)
- {
- DefaultmaxClock = 100000;
- }
- else
-
-#endif /* AVOID_CPIO */
-
{
DefaultmaxClock = 220000;
}
@@ -3114,19 +2227,7 @@ ATIPreInit
#ifndef AVOID_CPIO
- /*
- * 80 MHz is too high in some cases. Limit 18800-x's to 40
- * MHz. Don't exceed the memory clock on VGA Wonder capables
- * with less than 1 MB, if using a packed mode.
- */
- if ((pATI->Chip == ATI_CHIP_18800) ||
- (pATI->Chip == ATI_CHIP_18800_1))
- {
- DefaultmaxClock = 40000;
- }
- else if (pATI->CPIO_VGAWonder &&
- (pATI->VideoRAM < 1024) &&
- (pATI->depth >= 8))
+ if (pATI->CPIO_VGAWonder && (pATI->VideoRAM < 1024))
{
DefaultmaxClock =
(GetBits(BIOSByte(0x44U), 0x04U) * 5000) + 40000;
@@ -3146,50 +2247,31 @@ ATIPreInit
ATIClockRange.maxClock = DefaultmaxClock;
}
- if (pATI->ClockDescriptor.MaxN <= 0)
- {
- ATIClockRange.maxClock = DefaultmaxClock;
- xf86DrvMsg(pScreenInfo->scrnIndex, X_INFO,
- "Maximum pixel clock: %.3f MHz.\n",
- (double)ATIClockRange.maxClock / 1000.0);
- }
-
/*
* Determine available pixel clock frequencies.
*/
- ATIClockPreInit(pScreenInfo, pATI, pGDev, &ATIClockRange);
- if (pATI->ProgrammableClock > ATI_CLOCK_FIXED)
- Strategy = LOOKUP_BEST_REFRESH;
+ if ((pATI->ProgrammableClock <= ATI_CLOCK_FIXED) ||
+ (pATI->ProgrammableClock >= ATI_CLOCK_MAX))
+ {
+ xf86DrvMsg(pScreenInfo->scrnIndex, X_ERROR,
+ "Unsupported or non-programmable clock generator.\n");
+ ATIPrintNoiseIfRequested(pATI, BIOS, BIOSSize);
+ ATIUnmapApertures(pScreenInfo->scrnIndex, pATI);
+ return FALSE;
+ }
+
+ ATIClockPreInit(pScreenInfo, pATI);
+ Strategy = LOOKUP_BEST_REFRESH;
/*
* Mode validation.
*/
-#ifdef AVOID_CPIO
-
if (pATI->Chip >= ATI_CHIP_264CT)
{
minPitch = 8;
}
-
-#else /* AVOID_CPIO */
-
- if ((pATI->depth >= 8) && (pATI->Chip >= ATI_CHIP_264CT))
- {
- minPitch = 8;
- }
- else if (pATI->CPIO_VGAWonder &&
- (pATI->Chip <= ATI_CHIP_18800_1) &&
- (pATI->VideoRAM == 256) &&
- (pATI->depth >= 8))
- {
- minPitch = 32; /* Very strange, but true */
- maxPitch = 0x3FU;
- }
-
-#endif /* AVOID_CPIO */
-
else
{
minPitch = 16;
@@ -3197,65 +2279,11 @@ ATIPreInit
pATI->pitchInc = minPitch;
-#ifndef AVOID_CPIO
-
- if (pATI->depth >= 8)
-
-#endif /* AVOID_CPIO */
-
{
pATI->pitchInc *= pATI->bitsPerPixel;
}
- switch (pATI->NewHW.crtc)
{
-
-#ifndef AVOID_CPIO
-
- case ATI_CRTC_VGA:
- /*
- * IBM's VGA doesn't allow for interlaced modes.
- */
- if (pATI->Adapter <= ATI_ADAPTER_VGA)
- ATIClockRange.interlaceAllowed = FALSE;
-
- pScreenInfo->maxHValue = (0xFFU + 1) << 3; /* max HTotal */
-
- /*
- * The maximum VTotal value set here applies to all modes,
- * including interlaced, doublescanned or multiscanned modes.
- * Finer-grained checks are done in ATIValidateMode().
- */
- pScreenInfo->maxVValue = 0x03FFU + 1;
- if (pATI->Adapter > ATI_ADAPTER_VGA)
- {
- pScreenInfo->maxVValue <<= 1;
- if (ATIClockRange.interlaceAllowed &&
- (pATI->Chip < ATI_CHIP_264CT))
- pScreenInfo->maxVValue <<= 1;
- }
-
- /*
- * 18800-x and 28800-x do not support interlaced modes when the
- * scanline pitch is 2048 pixels or more. For 18800-x's with 256
- * kB of video memory, the limit for 8bpp is 1024.
- */
- if (ATIClockRange.interlaceAllowed &&
- (pATI->Chip <= ATI_CHIP_28800_6))
- {
- if (minPitch == 32)
- pATI->MaximumInterlacedPitch = 0x1FU * 32;
- else
- pATI->MaximumInterlacedPitch = 0x7FU * minPitch;
- }
-
- Strategy |= LOOKUP_CLKDIV2;
-
- break;
-
-#endif /* AVOID_CPIO */
-
- case ATI_CRTC_MACH64:
pScreenInfo->maxHValue = (MaxBits(CRTC_H_TOTAL) + 1) << 3;
if (pATI->Chip < ATI_CHIP_264VT)
@@ -3275,11 +2303,6 @@ ATIPreInit
pScreenInfo->maxVValue = MaxBits(CRTC_V_TOTAL) + 1;
maxPitch = MaxBits(CRTC_PITCH);
-
- break;
-
- default:
- break;
}
maxPitch *= minPitch;
@@ -3499,7 +2522,7 @@ ATIPreInit
ATII2CPreInit(pScreenInfo, pATI);
if (!pScreenInfo->chipset || !*pScreenInfo->chipset)
- pScreenInfo->chipset = (char *)ATIChipsetNames[0];
+ pScreenInfo->chipset = "mach64";
ATILock(pATI);
ATIPrintNoiseIfRequested(pATI, BIOS, BIOSSize);
diff --git a/src/atiprint.c b/src/atiprint.c
index 11cf6b70..243dcf50 100644
--- a/src/atiprint.c
+++ b/src/atiprint.c
@@ -28,7 +28,6 @@
#include <ctype.h>
#include "ati.h"
-#include "atiadapter.h"
#include "atichip.h"
#include "atidac.h"
#include "atimach64io.h"
@@ -365,11 +364,11 @@ ATIPrintRegisters
#ifndef AVOID_CPIO
- CARD8 genmo, seq1 = 0;
+ CARD8 genmo;
crtc = ATI_CRTC_VGA;
- if (pATI->VGAAdapter != ATI_ADAPTER_NONE)
+ if (pATI->VGAAdapter)
{
xf86ErrorFVerb(4, "\n Miscellaneous output register value: 0x%02X.\n",
genmo = inb(R_GENMO));
@@ -469,36 +468,10 @@ ATIPrintRegisters
ATIPrintIndexedRegisters(SEQX, 0, 8, "Sequencer", 0);
if (pATI->CPIO_VGAWonder)
- ATIPrintIndexedRegisters(pATI->CPIO_VGAWonder,
- xf86ServerIsOnlyProbing() ? 0x80U : pATI->VGAOffset, 0xC0U,
+ ATIPrintIndexedRegisters(pATI->CPIO_VGAWonder, 0x80U, 0xC0U,
"ATI extended VGA", 0);
}
- if (pATI->ChipHasSUBSYS_CNTL)
- {
- xf86ErrorFVerb(4, "\n 8514/A register values:");
- for (Index = 0x02E8U; Index <= 0x0FEE8; Index += 0x0400U)
- {
- if (!((Index - 0x02E8U) & 0x0C00U))
- xf86ErrorFVerb(4, "\n 0x%04X: ", Index);
- xf86ErrorFVerb(4, " %04X", inw(Index));
- }
-
- if (pATI->Adapter >= ATI_ADAPTER_MACH8)
- {
- xf86ErrorFVerb(4, "\n\n Mach8/Mach32 register values:");
- for (Index = 0x02EEU; Index <= 0x0FEEE; Index += 0x0400U)
- {
- if (!((Index - 0x02EEU) & 0x0C00U))
- xf86ErrorFVerb(4, "\n 0x%04X: ", Index);
- xf86ErrorFVerb(4, " %04X", inw(Index));
- }
- }
-
- xf86ErrorFVerb(4, "\n");
- }
- else
-
#endif /* AVOID_CPIO */
if (pATI->Chip == ATI_CHIP_264LT)
@@ -565,13 +538,6 @@ ATIPrintRegisters
xf86ErrorFVerb(4, "\n");
}
else
-
-#ifndef AVOID_CPIO
-
- if (pATI->Chip >= ATI_CHIP_88800GXC)
-
-#endif /* AVOID_CPIO */
-
{
#ifdef AVOID_CPIO
@@ -634,14 +600,6 @@ ATIPrintRegisters
ATISetDACIOPorts(pATI, crtc);
- /* Temporarily turn off CLKDIV2 while reading DAC's LUT */
- if (pATI->Adapter == ATI_ADAPTER_NONISA)
- {
- seq1 = GetReg(SEQX, 0x01U);
- if (seq1 & 0x08U)
- PutReg(SEQX, 0x01U, seq1 & ~0x08U);
- }
-
dac_read = inb(pATI->CPIO_DAC_READ);
DACDelay;
dac_write = inb(pATI->CPIO_DAC_WRITE);
@@ -678,9 +636,6 @@ ATIPrintRegisters
outb(pATI->CPIO_DAC_READ, dac_read);
DACDelay;
- if ((pATI->Adapter == ATI_ADAPTER_NONISA) && (seq1 & 0x08U))
- PutReg(SEQX, 0x01U, seq1);
-
#endif /* AVOID_CPIO */
if ((pVideo = pATI->PCIInfo))
diff --git a/src/atiprobe.c b/src/atiprobe.c
index 9c30a314..e869bf0d 100644
--- a/src/atiprobe.c
+++ b/src/atiprobe.c
@@ -28,7 +28,6 @@
#include <stdio.h>
#include "ati.h"
-#include "atiadapter.h"
#include "atiadjust.h"
#include "atibus.h"
#include "atichip.h"
@@ -50,228 +49,9 @@
#include "r128_probe.h"
#include "r128_version.h"
-/*
- * NOTES:
- *
- * - The driver private structures (ATIRec's) are allocated here, rather than
- * in ATIPreInit(). This allows ATIProbe() to pass information to later
- * stages.
- * - A minor point, perhaps, is that XF86Config Chipset names denote functional
- * levels, rather than specific graphics controller chips.
- * - ATIProbe() does not call xf86MatchPciInstances(), because ATIProbe()
- * should be able to match a mix of PCI and non-PCI devices to XF86Config
- * Device sections. Also, PCI configuration space for Mach32's is to be
- * largely ignored.
- */
-
-/* Used as a temporary buffer */
-#define Identifier ((char *)(pATI->MMIOCache))
-
-/*
- * An internal structure definition to facilitate the matching of detected
- * adapters to XF86Config Device sections.
- */
-typedef struct _ATIGDev
-{
- GDevPtr pGDev;
- int iATIPtr;
- CARD8 Chipset;
-} ATIGDev, *ATIGDevPtr;
-
#ifndef AVOID_CPIO
/*
- * Definitions for I/O conflict avoidance.
- */
-#define LongPort(_Port) GetBits(_Port, PCIGETIO(SPARSE_IO_BASE))
-#define DetectedVGA (1 << 0)
-#define Detected8514A (1 << 1)
-#define DetectedMach64 (1 << 2)
-#define Allowed (1 << 3)
-#define DoProbe (1 << 4)
-typedef struct
-{
- IOADDRESS Base;
- CARD8 Size;
- CARD8 Flag;
-} PortRec, *PortPtr;
-
-/*
- * ATIScanPCIBases --
- *
- * This function loops though a device's PCI registered bases and accumulates
- * a list of block I/O bases in use in the system.
- */
-static void
-ATIScanPCIBases
-(
- PortPtr *PCIPorts,
- int *nPCIPort,
- const CARD32 *pBase,
- const int *pSize,
- const CARD8 ProbeFlag
-)
-{
- IOADDRESS Base;
- int i, j;
-
- for (i = 6; --i >= 0; pBase++, pSize++)
- {
- if (*pBase & PCI_MAP_IO)
- {
- Base = *pBase & ~IO_BYTE_SELECT;
- for (j = 0; ; j++)
- {
- if (j >= *nPCIPort)
- {
- (*nPCIPort)++;
- *PCIPorts = (PortPtr)xnfrealloc(*PCIPorts,
- *nPCIPort * SizeOf(PortRec));
- (*PCIPorts)[j].Base = Base;
- (*PCIPorts)[j].Size = (CARD8)*pSize;
- (*PCIPorts)[j].Flag = ProbeFlag;
- break;
- }
-
- if (Base == (*PCIPorts)[j].Base)
- break;
- }
-
- continue;
- }
-
- /* Allow for 64-bit addresses */
- if (!PCI_MAP_IS64BITMEM(*pBase))
- continue;
-
- i--;
- pBase++;
- pSize++;
- }
-}
-
-/*
- * ATICheckSparseIOBases --
- *
- * This function checks whether a sparse I/O base can safely be probed.
- */
-static CARD8
-ATICheckSparseIOBases
-(
- pciVideoPtr pVideo,
- CARD8 *ProbeFlags,
- const IOADDRESS IOBase,
- const int Count,
- const Bool Override
-)
-{
- CARD32 FirstPort, LastPort;
-
- if (!pVideo || !xf86IsPrimaryPci(pVideo))
- {
- FirstPort = LongPort(IOBase);
- LastPort = LongPort(IOBase + Count - 1);
-
- for (; FirstPort <= LastPort; FirstPort++)
- {
- CARD8 ProbeFlag = ProbeFlags[FirstPort];
-
- if (ProbeFlag & DoProbe)
- continue;
-
- if (!(ProbeFlag & Allowed))
- return ProbeFlag;
-
- if (Override)
- continue;
-
- /* User might wish to override this decision */
- xf86Msg(X_WARNING,
- ATI_NAME ": Sparse I/O base 0x%04lX not probed.\n", IOBase);
- return Allowed;
- }
- }
-
- return DoProbe;
-}
-
-#ifndef AVOID_NON_PCI
-
-/*
- * ATIClaimSparseIOBases --
- *
- * This function updates the sparse I/O base table with information from the
- * hardware probes.
- */
-static void
-ATIClaimSparseIOBases
-(
- CARD8 *ProbeFlags,
- const IOADDRESS IOBase,
- const int Count,
- const CARD8 ProbeFlag
-)
-{
- CARD32 FirstPort = LongPort(IOBase),
- LastPort = LongPort(IOBase + Count - 1);
-
- for (; FirstPort <= LastPort; FirstPort++)
- ProbeFlags[FirstPort] = ProbeFlag;
-}
-
-#endif /* AVOID_NON_PCI */
-
-/*
- * ATIVGAProbe --
- *
- * This function looks for an IBM standard VGA, or clone, and sets
- * pATI->VGAAdapter if one is found.
- */
-static ATIPtr
-ATIVGAProbe
-(
- ATIPtr pVGA
-)
-{
- CARD8 IOValue1, IOValue2, IOValue3;
-
- if (!pVGA)
- pVGA = (ATIPtr)xnfcalloc(1, SizeOf(ATIRec));
-
- /*
- * VGA has one more attribute register than EGA. See if it can be read and
- * written. Note that the CRTC registers are not used here, so there's no
- * need to unlock them.
- */
- ATISetVGAIOBase(pVGA, inb(R_GENMO));
- (void)inb(GENS1(pVGA->CPIO_VGABase));
- IOValue1 = inb(ATTRX);
- (void)inb(GENS1(pVGA->CPIO_VGABase));
- IOValue2 = GetReg(ATTRX, 0x14U | 0x20U);
- outb(ATTRX, IOValue2 ^ 0x0FU);
- IOValue3 = GetReg(ATTRX, 0x14U | 0x20U);
- outb(ATTRX, IOValue2);
- outb(ATTRX, IOValue1);
- (void)inb(GENS1(pVGA->CPIO_VGABase));
- if (IOValue3 == (IOValue2 ^ 0x0FU))
- {
- /* VGA device detected */
- if (pVGA->Chip == ATI_CHIP_NONE)
- pVGA->Chip = ATI_CHIP_VGA;
- if (pVGA->VGAAdapter == ATI_ADAPTER_NONE)
- pVGA->VGAAdapter = ATI_ADAPTER_VGA;
- if (pVGA->Adapter == ATI_ADAPTER_NONE)
- pVGA->Adapter = ATI_ADAPTER_VGA;
- }
- else
- {
- pVGA->VGAAdapter = ATI_ADAPTER_NONE;
- }
-
- return pVGA;
-}
-
-/*
* ATIVGAWonderProbe --
*
* This function determines if ATI extended VGA registers can be accessed
@@ -282,50 +62,29 @@ static void
ATIVGAWonderProbe
(
pciVideoPtr pVideo,
- ATIPtr pATI,
- ATIPtr p8514,
- CARD8 *ProbeFlags
+ ATIPtr pATI
)
{
CARD8 IOValue1, IOValue2, IOValue3, IOValue4, IOValue5, IOValue6;
- switch (ATICheckSparseIOBases(pVideo, ProbeFlags,
- pATI->CPIO_VGAWonder, 2, TRUE))
- {
- case 0:
- xf86Msg(X_WARNING,
- ATI_NAME ": Expected VGA Wonder capability could not be"
- " detected at I/O port 0x%04lX because it would conflict with"
- " a non-video PCI/AGP device.\n", pATI->CPIO_VGAWonder);
- pATI->CPIO_VGAWonder = 0;
- break;
-
- case Detected8514A:
- xf86Msg(X_WARNING,
- ATI_NAME ": Expected VGA Wonder capability could not be"
- " detected at I/O port 0x%04lX because it would conflict with"
- " a %s %s.\n", pATI->CPIO_VGAWonder,
- ATIBusNames[p8514->BusType], ATIAdapterNames[p8514->Adapter]);
- pATI->CPIO_VGAWonder = 0;
- break;
-
- case DetectedMach64:
- xf86Msg(X_WARNING,
- ATI_NAME ": Expected VGA Wonder capability could not be"
- " detected at I/O port 0x%04lX because it would conflict with"
- " a Mach64.\n", pATI->CPIO_VGAWonder);
- pATI->CPIO_VGAWonder = 0;
- break;
-
- case DetectedVGA:
- default: /* Must be DoProbe */
+ if (!pATI->OptionProbeSparse)
+ {
+ xf86Msg(X_WARNING,
+ ATI_NAME ": Expected VGA Wonder capability at I/O port"
+ " 0x%04lX will not be probed\n"
+ "set option \"probe_sparse\" to force probing.\n",
+ pATI->CPIO_VGAWonder);
+
+ pATI->CPIO_VGAWonder = 0;
+ return;
+ }
+
if (pVideo && !xf86IsPrimaryPci(pVideo) &&
(pATI->Chip <= ATI_CHIP_88800GXD))
{
/* Set up extended VGA register addressing */
PutReg(GRAX, 0x50U, GetByte(pATI->CPIO_VGAWonder, 0));
- PutReg(GRAX, 0x51U,
- GetByte(pATI->CPIO_VGAWonder, 1) | pATI->VGAOffset);
+ PutReg(GRAX, 0x51U, GetByte(pATI->CPIO_VGAWonder, 1) | 0x80U);
}
/*
* Register 0xBB is used by the BIOS to keep track of various
@@ -341,10 +100,7 @@ ATIVGAWonderProbe
ATIPutExtReg(0xBBU, IOValue3 ^ 0x55U);
IOValue5 = ATIGetExtReg(0xBBU);
ATIPutExtReg(0xBBU, IOValue3);
- if (pATI->Chip <= ATI_CHIP_18800_1)
- IOValue6 = 0;
- else
- IOValue6 = ATIGetExtReg(0xBCU);
+ IOValue6 = ATIGetExtReg(0xBCU);
ATIPutExtReg(IOValue1, IOValue2);
if ((IOValue4 == (IOValue3 ^ 0xAAU)) &&
@@ -362,151 +118,6 @@ ATIVGAWonderProbe
" 0x%04lX was not detected.\n", pATI->CPIO_VGAWonder);
pATI->CPIO_VGAWonder = 0;
}
- break;
- }
-}
-
-/*
- * ATI8514Probe --
- *
- * This function looks for an 8514/A compatible and returns an ATIRec if one is
- * found. The function also determines whether or not the detected 8514/A
- * compatible device is actually a Mach8 or Mach32, and sets pATI->Adapter
- * accordingly.
- */
-static ATIPtr
-ATI8514Probe
-(
- pciVideoPtr pVideo
-)
-{
- ATIPtr pATI = NULL;
- CARD16 IOValue1, IOValue2;
-
- /*
- * Save register value to be modified, just in case there is no 8514/A
- * compatible accelerator. Note that, in more ways than one,
- * SUBSYS_STAT == SUBSYS_CNTL.
- */
- IOValue1 = inw(SUBSYS_STAT);
- IOValue2 = IOValue1 & _8PLANE;
-
- /* Reset any 8514/A compatible adapter that might be present */
- outw(SUBSYS_CNTL, IOValue2 | (GPCTRL_RESET | CHPTEST_NORMAL));
- outw(SUBSYS_CNTL, IOValue2 | (GPCTRL_ENAB | CHPTEST_NORMAL |
- RVBLNKFLG | RPICKFLAG | RINVALIDIO | RGPIDLE));
-
- /* Probe for an 8514/A compatible */
- IOValue2 = inw(ERR_TERM);
- outw(ERR_TERM, 0x5A5AU);
- ProbeWaitIdleEmpty();
- if (inw(ERR_TERM) == 0x5A5AU)
- {
- outw(ERR_TERM, 0x2525U);
- if (inw(ERR_TERM) == 0x2525U)
- {
- pATI = (ATIPtr)xnfcalloc(1, SizeOf(ATIRec));
- pATI->Adapter = ATI_ADAPTER_8514A;
- pATI->ChipHasSUBSYS_CNTL = TRUE;
- pATI->PCIInfo = pVideo;
- }
- }
- outw(ERR_TERM, IOValue2);
-
- /* Restore register value clobbered by 8514/A reset attempt */
- if (!pATI)
- {
- outw(SUBSYS_CNTL, IOValue1);
- return NULL;
- }
-
- /* Ensure any Mach8 or Mach32 is not in 8514/A emulation mode */
- IOValue1 = inw(CLOCK_SEL);
- outw(CLOCK_SEL, IOValue1);
- ProbeWaitIdleEmpty();
-
- IOValue1 = IOValue2 = inw(ROM_ADDR_1);
- outw(ROM_ADDR_1, 0x5555U);
- ProbeWaitIdleEmpty();
- if (inw(ROM_ADDR_1) == 0x5555U)
- {
- outw(ROM_ADDR_1, 0x2A2AU);
- ProbeWaitIdleEmpty();
- if (inw(ROM_ADDR_1) == 0x2A2AU)
- pATI->Adapter = ATI_ADAPTER_MACH8;
- }
- outw(ROM_ADDR_1, IOValue1);
-
- if (pATI->Adapter == ATI_ADAPTER_MACH8)
- {
- /* A Mach8 or Mach32 has been detected */
- IOValue1 = inw(READ_SRC_X);
- outw(DESTX_DIASTP, 0xAAAAU);
- ProbeWaitIdleEmpty();
- if (inw(READ_SRC_X) == 0x02AAU)
- pATI->Adapter = ATI_ADAPTER_MACH32;
-
- outw(DESTX_DIASTP, 0x5555U);
- ProbeWaitIdleEmpty();
- if (inw(READ_SRC_X) == 0x0555U)
- {
- if (pATI->Adapter != ATI_ADAPTER_MACH32)
- pATI->Adapter = ATI_ADAPTER_8514A;
- }
- else
- {
- if (pATI->Adapter != ATI_ADAPTER_MACH8)
- pATI->Adapter = ATI_ADAPTER_8514A;
- }
- outw(DESTX_DIASTP, IOValue1);
- }
-
- switch (pATI->Adapter)
- {
- case ATI_ADAPTER_8514A:
- pATI->Coprocessor = ATI_CHIP_8514A;
- IOValue1 = inb(EXT_CONFIG_3);
- outb(EXT_CONFIG_3, IOValue1 & 0x0FU);
- if (!(inb(EXT_CONFIG_3) & 0xF0U))
- {
- outb(EXT_CONFIG_3, IOValue1 | 0xF0U);
- if ((inb(EXT_CONFIG_3) & 0xF0U) == 0xF0U)
- pATI->Coprocessor = ATI_CHIP_CT480;
- }
- outb(EXT_CONFIG_3, IOValue1);
- break;
-
- case ATI_ADAPTER_MACH8:
- pATI->Coprocessor = ATI_CHIP_38800_1;
- if (inw(CONFIG_STATUS_1) & MC_BUS)
- pATI->BusType = ATI_BUS_MCA16;
- break;
-
- case ATI_ADAPTER_MACH32:
- IOValue1 = inw(CONFIG_STATUS_1);
- pATI->BusType = GetBits(IOValue1, BUS_TYPE);
- pATI->BIOSBase = 0x000C0000U +
- (GetBits(IOValue2, BIOS_BASE_SEGMENT) << 11);
- if (!(IOValue1 & (_8514_ONLY | CHIP_DIS)))
- {
- pATI->VGAAdapter = ATI_ADAPTER_MACH32;
- if ((xf86ReadBIOS(pATI->BIOSBase, 0x10U,
- (pointer)(&pATI->CPIO_VGAWonder),
- SizeOf(pATI->CPIO_VGAWonder)) <
- SizeOf(pATI->CPIO_VGAWonder)) ||
- !(pATI->CPIO_VGAWonder &= SPARSE_IO_PORT))
- pATI->CPIO_VGAWonder = 0x01CEU;
- pATI->VGAOffset = 0x80U;
- }
-
- ATIMach32ChipID(pATI);
- break;
-
- default:
- break;
- }
-
- return pATI;
}
#endif /* AVOID_CPIO */
@@ -526,6 +137,7 @@ ATIMach64Detect
)
{
CARD32 IOValue, bus_cntl, gen_test_cntl;
+ Bool DetectSuccess = FALSE;
(void)ATIMapApertures(-1, pATI); /* Ignore errors */
@@ -575,7 +187,7 @@ ATIMach64Detect
ATIMach64ChipID(pATI, ChipType);
if ((pATI->Chip != ATI_CHIP_Mach64) ||
(pATI->CPIODecoding == BLOCK_IO))
- pATI->Adapter = ATI_ADAPTER_MACH64;
+ DetectSuccess = TRUE;
}
}
@@ -583,7 +195,7 @@ ATIMach64Detect
outr(SCRATCH_REG0, IOValue);
/* If no Mach64 was detected, return now */
- if (pATI->Adapter != ATI_ADAPTER_MACH64)
+ if (!DetectSuccess)
{
outr(GEN_TEST_CNTL, gen_test_cntl);
outr(BUS_CNTL, bus_cntl);
@@ -596,7 +208,6 @@ ATIMach64Detect
(GetBits(inr(SCRATCH_REG1), BIOS_BASE_SEGMENT) << 11);
ATIUnmapApertures(-1, pATI);
- pATI->PCIInfo = NULL;
return TRUE;
}
@@ -611,22 +222,12 @@ ATIMach64Detect
static ATIPtr
ATIMach64Probe
(
+ ATIPtr pATI,
pciVideoPtr pVideo,
- const IOADDRESS IOBase,
- const CARD8 IODecoding,
const ATIChipType Chip
)
{
- ATIPtr pATI = (ATIPtr)xnfcalloc(1, SizeOf(ATIRec));
- CARD16 ChipType = 0;
-
- pATI->CPIOBase = IOBase;
- pATI->CPIODecoding = IODecoding;
-
- if (pVideo)
- {
- pATI->PCIInfo = pVideo;
- ChipType = pVideo->chipType;
+ CARD16 ChipType = pVideo->chipType;
/*
* Probe through auxiliary MMIO aperture if one exists. Because such
@@ -656,7 +257,6 @@ ATIMach64Probe
if (ATIMach64Detect(pATI, ChipType, Chip))
return pATI;
}
- }
/*
* A last, perhaps desparate, probe attempt. Note that if this succeeds,
@@ -669,7 +269,6 @@ LastProbe:
if (ATIMach64Detect(pATI, ChipType, Chip))
return pATI;
- xfree(pATI);
return NULL;
}
@@ -681,40 +280,24 @@ LastProbe:
* This function looks for a Mach64 at a particular PIO address and returns an
* ATIRec if one is found.
*/
-static ATIPtr
+ATIPtr
ATIMach64Probe
(
+ ATIPtr pATI,
pciVideoPtr pVideo,
- const IOADDRESS IOBase,
- const CARD8 IODecoding,
const ATIChipType Chip
)
{
- ATIPtr pATI;
CARD32 IOValue;
- CARD16 ChipType = 0;
-
- if (!IOBase)
- return NULL;
+ CARD16 ChipType = pVideo->chipType;
- if (pVideo)
- {
- if ((IODecoding == BLOCK_IO) &&
+ if ((pATI->CPIODecoding == BLOCK_IO) &&
((pVideo->size[1] < 8) ||
- (IOBase >= (CARD32)(-1 << pVideo->size[1]))))
+ (pATI->CPIOBase >= (CARD32)(-1 << pVideo->size[1]))))
return NULL;
- ChipType = pVideo->chipType;
- }
-
- pATI = (ATIPtr)xnfcalloc(1, SizeOf(ATIRec));
- pATI->CPIOBase = IOBase;
- pATI->CPIODecoding = IODecoding;
- pATI->PCIInfo = pVideo;
-
if (!ATIMach64Detect(pATI, ChipType, Chip))
{
- xfree(pATI);
return NULL;
}
@@ -724,7 +307,7 @@ ATIMach64Probe
*/
if (pATI->Chip >= ATI_CHIP_264CT)
{
- pATI->VGAAdapter = ATI_ADAPTER_MACH64;
+ pATI->VGAAdapter = TRUE;
}
else
{
@@ -735,153 +318,24 @@ ATIMach64Probe
IOValue |= CFG_VGA_EN;
if (IOValue == (CFG_VGA_EN | CFG_CHIP_EN))
{
- pATI->VGAAdapter = ATI_ADAPTER_MACH64;
+ pATI->VGAAdapter = TRUE;
pATI->CPIO_VGAWonder = 0x01CEU;
- pATI->VGAOffset = 0x80U;
}
}
return pATI;
}
-/*
- * ATIAssignVGA --
- *
- * This function is called to associate a VGA interface with an accelerator.
- * This is done by temporarily configuring the accelerator to route VGA RAMDAC
- * I/O through the accelerator's RAMDAC. A value is then written through the
- * VGA DAC ports and a check is made to see if the same value shows up on the
- * accelerator side.
- */
static void
ATIAssignVGA
(
pciVideoPtr pVideo,
- ATIPtr *ppVGA,
- ATIPtr pATI,
- ATIPtr p8514,
- CARD8 *ProbeFlags
+ ATIPtr pATI
)
{
- ATIPtr pVGA = *ppVGA;
- CARD8 OldDACMask;
-
- /* Assume unassignable VGA */
- pATI->VGAAdapter = ATI_ADAPTER_NONE;
-
- /* If no assignable VGA, return now */
- if ((pATI != pVGA) && (!pVGA || (pVGA->Adapter > ATI_ADAPTER_VGA)))
- return;
-
- switch (pATI->Adapter)
- {
- case ATI_ADAPTER_8514A:
- {
- /*
- * Assumption: Bit DISABPASSTHRU in ADVFUNC_CNTL is already
- * off.
- */
- OldDACMask = inb(VGA_DAC_MASK);
-
- if (inb(IBM_DAC_MASK) == OldDACMask)
- {
- outb(VGA_DAC_MASK, 0xA5U);
- if (inb(IBM_DAC_MASK) == 0xA5U)
- pATI->VGAAdapter = ATI_ADAPTER_VGA;
- outb(VGA_DAC_MASK, OldDACMask);
- }
- }
- break;
-
- case ATI_ADAPTER_MACH8:
- {
- CARD16 ClockSel = inw(CLOCK_SEL);
-
- if (ClockSel & DISABPASSTHRU)
- outw(CLOCK_SEL, ClockSel & ~DISABPASSTHRU);
-
- ProbeWaitIdleEmpty();
-
- OldDACMask = inb(VGA_DAC_MASK);
-
- if (inb(IBM_DAC_MASK) == OldDACMask)
- {
- outb(VGA_DAC_MASK, 0xA5U);
- if (inb(IBM_DAC_MASK) == 0xA5U)
- pATI->VGAAdapter = ATI_ADAPTER_VGA;
- outb(VGA_DAC_MASK, OldDACMask);
- }
-
- if (ClockSel & DISABPASSTHRU)
- outw(CLOCK_SEL, ClockSel);
- }
- break;
-
- case ATI_ADAPTER_MACH32:
- {
- CARD16 ClockSel = inw(CLOCK_SEL),
- MiscOptions = inw(MISC_OPTIONS);
-
- if (ClockSel & DISABPASSTHRU)
- outw(CLOCK_SEL, ClockSel & ~DISABPASSTHRU);
- if (MiscOptions & (DISABLE_VGA | DISABLE_DAC))
- outw(MISC_OPTIONS,
- MiscOptions & ~(DISABLE_VGA | DISABLE_DAC));
-
- ProbeWaitIdleEmpty();
-
- OldDACMask = inb(VGA_DAC_MASK);
-
- if (inb(IBM_DAC_MASK) == OldDACMask)
- {
- outb(VGA_DAC_MASK, 0xA5U);
- if (inb(IBM_DAC_MASK) == 0xA5U)
- pATI->VGAAdapter = ATI_ADAPTER_MACH32;
- outb(VGA_DAC_MASK, OldDACMask);
- }
-
- if (ClockSel & DISABPASSTHRU)
- outw(CLOCK_SEL, ClockSel);
- if (MiscOptions & (DISABLE_VGA | DISABLE_DAC))
- outw(MISC_OPTIONS, MiscOptions);
- }
- break;
-
- case ATI_ADAPTER_MACH64:
- {
- CARD32 DACCntl = inr(DAC_CNTL);
-
- if (!(DACCntl & DAC_VGA_ADR_EN))
- outr(DAC_CNTL, DACCntl | DAC_VGA_ADR_EN);
-
- OldDACMask = inb(VGA_DAC_MASK);
-
- if (in8(M64_DAC_MASK) == OldDACMask)
- {
- outb(VGA_DAC_MASK, 0xA5U);
- if (in8(M64_DAC_MASK) == 0xA5U)
- pATI->VGAAdapter = ATI_ADAPTER_MACH64;
- outb(VGA_DAC_MASK, OldDACMask);
- }
-
- if (!(DACCntl & DAC_VGA_ADR_EN))
- outr(DAC_CNTL, DACCntl);
- }
- break;
-
- default:
- break;
- }
-
- if (pATI->VGAAdapter == ATI_ADAPTER_NONE)
- {
- pATI->CPIO_VGAWonder = 0;
- return;
- }
-
if (pATI->CPIO_VGAWonder)
{
- ATIVGAWonderProbe(pVideo, pATI, p8514, ProbeFlags);
+ ATIVGAWonderProbe(pVideo, pATI);
if (!pATI->CPIO_VGAWonder)
{
/*
@@ -891,55 +345,11 @@ ATIAssignVGA
* of I/O through the bus tree.
*/
pATI->CPIO_VGAWonder = GRAX;
- ATIVGAWonderProbe(pVideo, pATI, p8514, ProbeFlags);
+ ATIVGAWonderProbe(pVideo, pATI);
}
}
-
- if (pATI == pVGA)
- {
- pATI->SharedVGA = TRUE;
- return;
- }
-
- /* Assign the VGA to this adapter */
- xfree(pVGA);
- *ppVGA = pATI;
-
- xf86MsgVerb(X_INFO, 3, ATI_NAME ": VGA assigned to this adapter.\n");
-}
-
-#ifndef AVOID_NON_PCI
-
-/*
- * ATIClaimVGA --
- *
- * Attempt to assign a non-shareable VGA to an accelerator. If successful,
- * update ProbeFlags array.
- */
-static void
-ATIClaimVGA
-(
- pciVideoPtr pVideo,
- ATIPtr *ppVGA,
- ATIPtr pATI,
- ATIPtr p8514,
- CARD8 *ProbeFlags,
- int Detected
-)
-{
- ATIAssignVGA(pVideo, ppVGA, pATI, p8514, ProbeFlags);
- if (pATI->VGAAdapter == ATI_ADAPTER_NONE)
- return;
-
- ATIClaimSparseIOBases(ProbeFlags, MonochromeIOBase, 48, Detected);
- if (!pATI->CPIO_VGAWonder)
- return;
-
- ATIClaimSparseIOBases(ProbeFlags, pATI->CPIO_VGAWonder, 2, Detected);
}
-#endif /* AVOID_NON_PCI */
-
/*
* ATIFindVGA --
*
@@ -950,16 +360,9 @@ static void
ATIFindVGA
(
pciVideoPtr pVideo,
- ATIPtr *ppVGA,
- ATIPtr *ppATI,
- ATIPtr p8514,
- CARD8 *ProbeFlags
+ ATIPtr pATI
)
{
- ATIPtr pATI = *ppATI;
-
- if (!*ppVGA)
- {
/*
* An ATI PCI adapter has been detected at this point, and its VGA, if
* any, is shareable. Ensure the VGA isn't in sleep mode.
@@ -968,1330 +371,290 @@ ATIFindVGA
outb(GENVS, 0x01U);
outb(GENENA, 0x0EU);
- pATI = ATIVGAProbe(pATI);
- if (pATI->VGAAdapter == ATI_ADAPTER_NONE)
- return;
-
- ppVGA = ppATI;
- }
-
- ATIAssignVGA(pVideo, ppVGA, pATI, p8514, ProbeFlags);
+ ATIAssignVGA(pVideo, pATI);
}
#endif /* AVOID_CPIO */
/*
- * ATIProbe --
+ * ATIMach64ProbeIO --
*
- * This function is called once, at the start of the first server generation to
- * do a minimal probe for supported hardware.
+ * This function determines the IO method and IO base of the ATI PCI adapter.
*/
Bool
-ATIProbe
+ATIMach64ProbeIO
(
- DriverPtr pDriver,
- int flags
+ pciVideoPtr pVideo,
+ ATIPtr pATI
)
{
- ATIPtr pATI, *ATIPtrs = NULL;
- GDevPtr *GDevs, pGDev;
- pciVideoPtr pVideo, *xf86PciVideoInfo = xf86GetPciVideoInfo();
- ATIGDev *ATIGDevs = NULL, *pATIGDev;
- ScrnInfoPtr pScreenInfo;
- Bool ProbeSuccess = FALSE;
- Bool DoRage128 = FALSE, DoRadeon = FALSE;
- int i, j, k;
- int nGDev, nATIGDev = -1, nATIPtr = 0;
- int Chipset;
- ATIChipType Chip;
-
-#if !defined(AVOID_NON_PCI) || !defined(AVOID_CPIO)
- pciConfigPtr pPCI;
- CARD32 PciReg;
-#endif /* AVOID_NON_PCI || AVOID_CPIO */
-
-#ifndef AVOID_NON_PCI
- ATIPtr pMach64[3] = {NULL, NULL, NULL};
-#endif
-
-#ifndef AVOID_CPIO
-
- ATIPtr pVGA = NULL, p8514 = NULL;
- pciConfigPtr *xf86PciInfo = xf86GetPciConfigInfo();
- PortPtr PCIPorts = NULL;
- int nPCIPort = 0;
- CARD8 fChipsets[ATI_CHIPSET_MAX];
- static const IOADDRESS Mach64SparseIOBases[] = {0x02ECU, 0x01CCU, 0x01C8U};
- CARD8 ProbeFlags[LongPort(SPARSE_IO_BASE) + 1];
-
- unsigned long BIOSBase;
- static const CARD8 ATISignature[] = " 761295520";
-# define SignatureSize 10
-# define PrefixSize 0x50U
-# define BIOSSignature 0x30U
- CARD8 BIOS[PrefixSize];
-# define BIOSWord(_n) (BIOS[_n] | (BIOS[(_n) + 1] << 8))
-
-#endif /* AVOID_CPIO */
-
-# define AddAdapter(_p) \
- do \
- { \
- nATIPtr++; \
- ATIPtrs = (ATIPtr *)xnfrealloc(ATIPtrs, SizeOf(ATIPtr) * nATIPtr); \
- ATIPtrs[nATIPtr - 1] = (_p); \
- (_p)->iEntity = -2; \
- } while (0)
+ Bool ProbeSuccess = FALSE;
#ifndef AVOID_CPIO
- (void)memset(fChipsets, FALSE, SizeOf(fChipsets));
-
-#endif /* AVOID_CPIO */
-
- if (!(flags & PROBE_DETECT))
+ /* Next, look for sparse I/O Mach64's */
+ if (!pVideo->size[1])
{
- /*
- * Get a list of XF86Config device sections whose "Driver" is either
- * not specified, or specified as this driver. From this list,
- * eliminate those device sections that specify a "Chipset" or a
- * "ChipID" not recognised by the driver. Those device sections that
- * specify a "ChipRev" without a "ChipID" are also weeded out.
- */
- nATIGDev = 0;
- if ((nGDev = xf86MatchDevice(ATI_NAME, &GDevs)) > 0)
- {
- ATIGDevs = (ATIGDevPtr)xnfcalloc(nGDev, SizeOf(ATIGDev));
-
- for (i = 0, pATIGDev = ATIGDevs; i < nGDev; i++)
- {
- pGDev = GDevs[i];
- Chipset = ATIIdentProbe(pGDev->chipset);
- if (Chipset == -1)
- continue;
-
- if ((pGDev->chipID > (int)((CARD16)(-1))) ||
- (pGDev->chipRev > (int)((CARD8)(-1))))
- continue;
-
- if (pGDev->chipID >= 0)
- {
- if (ATIChipID(pGDev->chipID, 0) == ATI_CHIP_Mach64)
- continue;
- }
- else
- {
- if (pGDev->chipRev >= 0)
- continue;
- }
-
- pATIGDev->pGDev = pGDev;
- pATIGDev->Chipset = Chipset;
- nATIGDev++;
- pATIGDev++;
-
- xf86MsgVerb(X_INFO, 3,
- ATI_NAME ": Candidate \"Device\" section \"%s\".\n",
- pGDev->identifier);
-
-#ifndef AVOID_CPIO
-
- fChipsets[Chipset] = TRUE;
-
-#endif /* AVOID_CPIO */
-
- }
-
- xfree(GDevs);
-
- if (!nATIGDev)
- {
- xfree(ATIGDevs);
- ATIGDevs = NULL;
- }
- }
-
- if (xf86MatchDevice(R128_NAME, NULL) > 0)
- DoRage128 = TRUE;
- if (xf86MatchDevice(RADEON_NAME, NULL) > 0)
- DoRadeon = TRUE;
- }
-
-#ifndef AVOID_CPIO
-
- /*
- * Collect hardware information. This must be done with care to avoid
- * lockups due to overlapping I/O port assignments.
- *
- * First, scan PCI configuration space for registered I/O ports (which will
- * be block I/O bases). Each such port is used to generate a list of
- * sparse I/O bases it precludes. This list is then used to decide whether
- * or not certain sparse I/O probes are done. Unfortunately, this assumes
- * that any registered I/O base actually reserves upto the full 256 ports
- * allowed by the PCI specification. This assumption holds true for PCI
- * Mach64, but probably doesn't for other device types. For some things,
- * such as video devices, the number of ports a base represents is
- * determined by the server's PCI probe, but, for other devices, this
- * cannot be done by a user-level process without jeopardizing system
- * integrity. This information should ideally be retrieved from the OS's
- * own PCI probe (if any), but there's currently no portable way of doing
- * so. The following allows sparse I/O probes to be forced in certain
- * circumstances when an appropriate chipset specification is used in any
- * XF86Config Device section.
- *
- * Note that this is not bullet-proof. Lockups can still occur, but they
- * will usually be due to devices that are misconfigured to respond to the
- * same I/O ports as 8514/A's or ATI sparse I/O devices without registering
- * them in PCI configuration space.
- */
- if (nATIGDev)
- {
- if (xf86PciVideoInfo)
- {
- for (i = 0; (pVideo = xf86PciVideoInfo[i++]); )
- {
- if ((pVideo->vendor == PCI_VENDOR_ATI) ||
- !(pPCI = pVideo->thisCard))
- continue;
-
- ATIScanPCIBases(&PCIPorts, &nPCIPort,
- &pPCI->pci_base0, pVideo->size,
- (pciReadLong(pPCI->tag, PCI_CMD_STAT_REG) &
- PCI_CMD_IO_ENABLE) ? 0 : Allowed);
- }
- }
-
- /* Check non-video PCI devices for I/O bases */
- if (xf86PciInfo)
- {
- for (i = 0; (pPCI = xf86PciInfo[i++]); )
- {
- if ((pPCI->pci_vendor == PCI_VENDOR_ATI) ||
- (pPCI->pci_base_class == PCI_CLASS_BRIDGE) ||
- (pPCI->pci_header_type &
- ~GetByte(PCI_HEADER_MULTIFUNCTION, 2)))
- continue;
-
- ATIScanPCIBases(&PCIPorts, &nPCIPort,
- &pPCI->pci_base0, pPCI->basesize,
- (pciReadLong(pPCI->tag, PCI_CMD_STAT_REG) &
- PCI_CMD_IO_ENABLE) ? 0 : Allowed);
- }
- }
-
- /* Generate ProbeFlags array from list of registered PCI I/O bases */
- (void)memset(ProbeFlags, Allowed | DoProbe, SizeOf(ProbeFlags));
- for (i = 0; i < nPCIPort; i++)
+ static const IOADDRESS Mach64SparseIOBases[] = {
+ 0x02ECU,
+ 0x01CCU,
+ 0x01C8U
+ };
+ pciConfigPtr pPCI = pVideo->thisCard;
+ CARD32 PciReg;
+ CARD32 j;
+
+ if (pPCI == NULL)
+ goto SkipSparse;
+
+ PciReg = pciReadLong(pPCI->tag, PCI_REG_USERCONFIG);
+ j = PciReg & 0x03U;
+
+ if (j == 0x03U)
{
- CARD32 Base = PCIPorts[i].Base;
- CARD16 Count = (1 << PCIPorts[i].Size) - 1;
- CARD8 ProbeFlag = PCIPorts[i].Flag;
+ xf86Msg(X_WARNING, ATI_NAME ": "
+ "PCI Mach64 in slot %d:%d:%d cannot be enabled\n"
+ "because it has neither a block, nor a sparse, I/O base.\n",
+ pVideo->bus, pVideo->device, pVideo->func);
- /*
- * The following reduction of Count is based on the assumption that
- * PCI-registered I/O port ranges do not overlap.
- */
- for (j = 0; j < nPCIPort; j++)
- {
- CARD32 Base2 = PCIPorts[j].Base;
-
- if (Base < Base2)
- while ((Base + Count) >= Base2)
- Count >>= 1;
- }
-
- Base = LongPort(Base);
- Count = LongPort((Count | IO_BYTE_SELECT) + 1);
- while (Count--)
- ProbeFlags[Base++] &= ProbeFlag;
+ goto SkipSparse;
}
- xfree(PCIPorts);
-
-#ifndef AVOID_NON_PCI
-
- /*
- * A note on probe strategy. I/O and memory response by certain PCI
- * devices has been disabled by the common layer at this point,
- * including any devices this driver might be interested in. The
- * following does sparse I/O probes, followed by block I/O probes.
- * Block I/O probes are dictated by what is found to be of interest in
- * PCI configuration space. All this will detect ATI adapters that do
- * not implement this disablement, pre-PCI or not.
+ /* FIXME:
+ * Should not probe at sparse I/O bases which have been registered to
+ * other PCI devices. The old ATIProbe() would scan the PCI space and
+ * build a list of registered I/O ports. If there was a conflict
+ * between a mach64 sparse I/O base and a registered I/0 port, probing
+ * that port was not allowed...
*
- * PCI configuration space is then scanned again for ATI devices that
- * failed to be detected the first time around. Each such device is
- * probed for again, this time with I/O temporarily enabled through
- * PCI.
+ * We just add an option and let the user decide, this will not work
+ * with "X -configure" though...
*/
- if (ATICheckSparseIOBases(NULL, ProbeFlags, ATTRX, 16, TRUE) ==
- DoProbe)
+ if (!pATI->OptionProbeSparse)
{
- pATI = ATIVGAProbe(NULL);
- if (pATI->Adapter == ATI_ADAPTER_NONE)
- {
- xfree(pATI);
+ xf86Msg(X_WARNING, ATI_NAME ": "
+ "PCI Mach64 in slot %d:%d:%d will not be probed\n"
+ "set option \"probe_sparse\" to force sparse I/O probing.\n",
+ pVideo->bus, pVideo->device, pVideo->func);
- xf86MsgVerb(X_INFO, 4,
- ATI_NAME ": Unshared VGA not detected.\n");
- }
- else
- {
- /*
- * Claim all MDA/HGA/CGA/EGA/VGA I/O ports. This might need to
- * be more selective.
- */
- ATIClaimSparseIOBases(ProbeFlags, MonochromeIOBase, 48,
- DetectedVGA);
-
- pVGA = pATI;
- strcpy(Identifier, "Unshared VGA");
- xf86MsgVerb(X_INFO, 3,
- ATI_NAME ": %s detected.\n", Identifier);
- }
- }
- else
- {
- xf86MsgVerb(X_INFO, 2, ATI_NAME ": Unshared VGA not probed.\n");
+ goto SkipSparse;
}
- /*
- * Mach8/32 probing doesn't work well on some legacy free ia64
- * However if we use AVOID_CPIO we don't get here at all.
- */
- if (ATICheckSparseIOBases(NULL, ProbeFlags, 0x02E8U, 8,
- fChipsets[ATI_CHIPSET_IBM8514] ||
- fChipsets[ATI_CHIPSET_MACH8] ||
- fChipsets[ATI_CHIPSET_MACH32]) == DoProbe)
- {
- if ((pATI = ATI8514Probe(NULL)))
- {
- strcpy(Identifier, "Unshared 8514/A");
- xf86MsgVerb(X_INFO, 3,
- ATI_NAME ": %s detected.\n", Identifier);
-
- AddAdapter(p8514 = pATI);
+ /* Possibly fix block I/O indicator */
+ if (PciReg & 0x00000004U)
+ pciWriteLong(pPCI->tag, PCI_REG_USERCONFIG, PciReg & ~0x00000004U);
- if ((pATI->VGAAdapter != ATI_ADAPTER_NONE) ||
- (pATI->Coprocessor != ATI_CHIP_NONE))
- ATIClaimVGA(NULL, &pVGA, pATI, p8514, ProbeFlags,
- Detected8514A);
+ pATI->CPIOBase = Mach64SparseIOBases[j];
+ pATI->CPIODecoding = SPARSE_IO;
+ pATI->PCIInfo = pVideo;
- ATIClaimSparseIOBases(ProbeFlags, 0x02E8U, 8, Detected8514A);
- }
- else
- {
- xf86MsgVerb(X_INFO, 4,
- ATI_NAME ": Unshared 8514/A not detected.\n");
- }
- }
- else
+ if (!ATIMach64Probe(pATI, pVideo, pATI->Chip))
{
- xf86MsgVerb(X_INFO, 2,
- ATI_NAME ": Unshared 8514/A not probed.\n");
+ xf86Msg(X_WARNING, ATI_NAME ": "
+ "PCI Mach64 in slot %d:%d:%d could not be detected!\n",
+ pVideo->bus, pVideo->device, pVideo->func);
}
-
- /*
- * Also NONPCI Mach64 probing is evil on legacy free platforms.
- * However if we use AVOID_CPIO we don't get here at all.
- */
- for (i = 0; i < NumberOf(Mach64SparseIOBases); i++)
+ else
{
- if (ATICheckSparseIOBases(NULL, ProbeFlags, Mach64SparseIOBases[i],
- 4, fChipsets[ATI_CHIPSET_MACH64]) != DoProbe)
- {
- xf86MsgVerb(X_INFO, 2,
- ATI_NAME ": Unshared Mach64 at PIO base 0x%04lX not"
- " probed.\n",
- Mach64SparseIOBases[i]);
- continue;
- }
-
- pATI = ATIMach64Probe(NULL, Mach64SparseIOBases[i], SPARSE_IO, 0);
- if (!pATI)
- {
- xf86MsgVerb(X_INFO, 4,
- ATI_NAME ": Unshared Mach64 at PIO base 0x%04lX not"
- " detected.\n", Mach64SparseIOBases[i]);
- continue;
- }
-
- sprintf(Identifier, "Unshared Mach64 at sparse PIO base 0x%04lX",
- Mach64SparseIOBases[i]);
- xf86MsgVerb(X_INFO, 3, ATI_NAME ": %s detected.\n", Identifier);
-
- AddAdapter(pMach64[i] = pATI);
-
- if (pATI->VGAAdapter != ATI_ADAPTER_NONE)
- ATIClaimVGA(NULL, &pVGA, pATI, p8514, ProbeFlags,
- DetectedMach64);
-
- ATIClaimSparseIOBases(ProbeFlags, Mach64SparseIOBases[i], 4,
- DetectedMach64);
+ ProbeSuccess = TRUE;
+ xf86Msg(X_INFO, ATI_NAME ": "
+ "Shared PCI Mach64 in slot %d:%d:%d with sparse PIO base"
+ " 0x%04lX detected.\n",
+ pVideo->bus, pVideo->device, pVideo->func,
+ Mach64SparseIOBases[j]);
+
+ if (pATI->VGAAdapter)
+ ATIFindVGA(pVideo, pATI);
}
-#endif /* AVOID_NON_PCI */
-
}
-#endif /* AVOID_CPIO */
-
- if (xf86PciVideoInfo)
- {
- if (nATIGDev)
- {
-
-#ifndef AVOID_NON_PCI
-
-#ifdef AVOID_CPIO
-
- /* PCI sparse I/O adapters can still be used through MMIO */
- for (i = 0; (pVideo = xf86PciVideoInfo[i++]); )
- {
- if ((pVideo->vendor != PCI_VENDOR_ATI) ||
- (pVideo->chipType == PCI_CHIP_MACH32) ||
- pVideo->size[1] ||
- !(pPCI = pVideo->thisCard))
- continue;
-
- PciReg = pciReadLong(pPCI->tag, PCI_REG_USERCONFIG);
-
- /* Possibly fix block I/O indicator */
- if (PciReg & 0x00000004U)
- pciWriteLong(pPCI->tag, PCI_REG_USERCONFIG,
- PciReg & ~0x00000004U);
-
- Chip = ATIChipID(pVideo->chipType, pVideo->chipRev);
-
- /*
- * The CPIO base used by the adapter is of little concern here.
- */
- pATI = ATIMach64Probe(pVideo, 0, SPARSE_IO, Chip);
- if (!pATI)
- continue;
-
- sprintf(Identifier,
- "Unshared PCI sparse I/O Mach64 in slot %d:%d:%d",
- pVideo->bus, pVideo->device, pVideo->func);
- xf86MsgVerb(X_INFO, 3,
- ATI_NAME ": %s detected through Block 0 at 0x%08lX.\n",
- Identifier, pATI->Block0Base);
- AddAdapter(pATI);
- pATI->PCIInfo = pVideo;
- }
-
-#endif /* AVOID_CPIO */
-
- for (i = 0; (pVideo = xf86PciVideoInfo[i++]); )
- {
- if ((pVideo->vendor != PCI_VENDOR_ATI) ||
- (pVideo->chipType == PCI_CHIP_MACH32) ||
- !pVideo->size[1])
- continue;
-
- /* For now, ignore Rage128's and Radeon's */
- Chip = ATIChipID(pVideo->chipType, pVideo->chipRev);
- if ((Chip > ATI_CHIP_Mach64) ||
- !(pPCI = pVideo->thisCard))
- continue;
-
- /*
- * Possibly fix block I/O indicator in PCI configuration space.
- */
- PciReg = pciReadLong(pPCI->tag, PCI_REG_USERCONFIG);
- if (!(PciReg & 0x00000004U))
- pciWriteLong(pPCI->tag, PCI_REG_USERCONFIG,
- PciReg | 0x00000004U);
-
- pATI =
- ATIMach64Probe(pVideo, pVideo->ioBase[1], BLOCK_IO, Chip);
- if (!pATI)
- continue;
-
- sprintf(Identifier, "Unshared PCI/AGP Mach64 in slot %d:%d:%d",
- pVideo->bus, pVideo->device, pVideo->func);
- xf86MsgVerb(X_INFO, 3,
- ATI_NAME ": %s detected.\n", Identifier);
- AddAdapter(pATI);
-
-#ifndef AVOID_CPIO
-
- /* This is probably not necessary */
- if (pATI->VGAAdapter != ATI_ADAPTER_NONE)
- ATIClaimVGA(pVideo, &pVGA, pATI, p8514,
- ProbeFlags, DetectedMach64);
-
-#endif /* AVOID_CPIO */
-
- }
-
-#endif /* AVOID_NON_PCI */
-
-#ifndef AVOID_CPIO
-
- /*
- * This is the second pass through PCI configuration space. Much
- * of this is verbiage to deal with potential situations that are
- * very unlikely to occur in practice.
- *
- * First, look for non-ATI shareable VGA's. For now, these must
- * the primary device.
- */
- if (ATICheckSparseIOBases(NULL, ProbeFlags, ATTRX, 16, TRUE) ==
- DoProbe)
- {
- for (i = 0; (pVideo = xf86PciVideoInfo[i++]); )
- {
- if ((pVideo->vendor == PCI_VENDOR_ATI) ||
- !xf86IsPrimaryPci(pVideo))
- continue;
-
- if (!xf86CheckPciSlot(pVideo->bus,
- pVideo->device,
- pVideo->func))
- continue;
-
- xf86SetPciVideo(pVideo, MEM_IO);
-
- pATI = ATIVGAProbe(NULL);
- if (pATI->Adapter == ATI_ADAPTER_NONE)
- {
- xfree(pATI);
- xf86Msg(X_WARNING,
- ATI_NAME ": PCI/AGP VGA compatible in slot"
- " %d:%d:%d could not be detected!\n",
- pVideo->bus, pVideo->device, pVideo->func);
- }
- else
- {
- sprintf(Identifier,
- "Shared non-ATI VGA in PCI/AGP slot %d:%d:%d",
- pVideo->bus, pVideo->device, pVideo->func);
- xf86MsgVerb(X_INFO, 3, ATI_NAME ": %s detected.\n",
- Identifier);
- AddAdapter(pATI);
- pATI->SharedVGA = TRUE;
- pATI->BusType = ATI_BUS_PCI;
- pATI->PCIInfo = pVideo;
- }
-
- xf86SetPciVideo(NULL, NONE);
- }
- }
-
- /* Next, look for PCI Mach32's */
- for (i = 0; (pVideo = xf86PciVideoInfo[i++]); )
- {
- if ((pVideo->vendor != PCI_VENDOR_ATI) ||
- (pVideo->chipType != PCI_CHIP_MACH32))
- continue;
-
- switch (ATICheckSparseIOBases(pVideo, ProbeFlags,
- 0x02E8U, 8, TRUE))
- {
- case 0:
- xf86Msg(X_WARNING,
- ATI_NAME ": PCI Mach32 in slot %d:%d:%d will not"
- " be enabled\n because it conflicts with a"
- " non-video PCI/AGP device.\n",
- pVideo->bus, pVideo->device, pVideo->func);
- break;
-
-#ifndef AVOID_NON_PCI
-
- case Detected8514A:
- if ((p8514->BusType >= ATI_BUS_PCI) && !p8514->PCIInfo)
- p8514->PCIInfo = pVideo;
- else
- xf86Msg(X_WARNING,
- ATI_NAME ": PCI Mach32 in slot %d:%d:%d will"
- " not be enabled\n because it conflicts with"
- " another %s %s.\n",
- pVideo->bus, pVideo->device, pVideo->func,
- ATIBusNames[p8514->BusType],
- ATIAdapterNames[p8514->Adapter]);
- break;
-
- case DetectedMach64:
- xf86Msg(X_WARNING,
- ATI_NAME ": PCI Mach32 in slot %d:%d:%d will not"
- " be enabled\n because it conflicts with a Mach64"
- " at I/O base 0x02EC.\n",
- pVideo->bus, pVideo->device, pVideo->func);
- break;
-
-#endif /* AVOID_NON_PCI */
-
- default: /* Must be DoProbe */
- if (!xf86CheckPciSlot(pVideo->bus,
- pVideo->device,
- pVideo->func))
- continue;
-
- xf86SetPciVideo(pVideo, MEM_IO);
-
- if (!(pATI = ATI8514Probe(pVideo)))
- {
- xf86Msg(X_WARNING,
- ATI_NAME ": PCI Mach32 in slot %d:%d:%d could"
- " not be detected!\n",
- pVideo->bus, pVideo->device, pVideo->func);
- }
- else
- {
- sprintf(Identifier,
- "Shared 8514/A in PCI slot %d:%d:%d",
- pVideo->bus, pVideo->device, pVideo->func);
- xf86MsgVerb(X_INFO, 3,
- ATI_NAME ": %s detected.\n", Identifier);
- if (pATI->Adapter != ATI_ADAPTER_MACH32)
- xf86Msg(X_WARNING,
- ATI_NAME ": PCI Mach32 in slot %d:%d:%d"
- " could only be detected as an %s!\n",
- pVideo->bus, pVideo->device, pVideo->func,
- ATIAdapterNames[pATI->Adapter]);
-
- AddAdapter(pATI);
- pATI->SharedAccelerator = TRUE;
-
- if ((pATI->VGAAdapter != ATI_ADAPTER_NONE) ||
- (pATI->Coprocessor != ATI_CHIP_NONE))
- ATIFindVGA(pVideo, &pVGA, &pATI, p8514,
- ProbeFlags);
- }
- xf86SetPciVideo(NULL, NONE);
- break;
- }
- }
-
- /* Next, look for sparse I/O Mach64's */
- for (i = 0; (pVideo = xf86PciVideoInfo[i++]); )
- {
- /* For some Radeons, pvideo->size[1] is not there but the card
- * still works properly. Thus adding check that if the chip was
- * correctly identified as being Rage128 or a Radeon, continue
- * also in that case. See fd.o bug 6796. */
- Chip = ATIChipID(pVideo->chipType, pVideo->chipRev);
- if ((pVideo->vendor != PCI_VENDOR_ATI) ||
- (pVideo->chipType == PCI_CHIP_MACH32) ||
- (Chip > ATI_CHIP_Mach64) ||
- pVideo->size[1])
- continue;
-
- pPCI = pVideo->thisCard;
- if (pPCI == NULL)
- continue;
-
- PciReg = pciReadLong(pPCI->tag, PCI_REG_USERCONFIG);
- j = PciReg & 0x03U;
- if (j == 0x03U)
- {
- xf86Msg(X_WARNING,
- ATI_NAME ": PCI Mach64 in slot %d:%d:%d cannot be"
- " enabled\n because it has neither a block, nor a"
- " sparse, I/O base.\n",
- pVideo->bus, pVideo->device, pVideo->func);
- }
- else switch(ATICheckSparseIOBases(pVideo, ProbeFlags,
- Mach64SparseIOBases[j], 4, TRUE))
- {
- case 0:
- xf86Msg(X_WARNING,
- ATI_NAME ": PCI Mach64 in slot %d:%d:%d will not"
- " be enabled\n because it conflicts with another"
- " non-video PCI device.\n",
- pVideo->bus, pVideo->device, pVideo->func);
- break;
-
-#ifndef AVOID_NON_PCI
-
- case Detected8514A:
- xf86Msg(X_WARNING,
- ATI_NAME ": PCI Mach64 in slot %d:%d:%d will not"
- " be enabled\n because it conflicts with an %s.\n",
- pVideo->bus, pVideo->device, pVideo->func,
- ATIAdapterNames[p8514->Adapter]);
- break;
-
- case DetectedMach64:
- pATI = pMach64[j];
- if ((pATI->BusType >= ATI_BUS_PCI) && !pATI->PCIInfo)
- pATI->PCIInfo = pVideo;
- else
- xf86Msg(X_WARNING,
- ATI_NAME ": PCI Mach64 in slot %d:%d:%d will"
- " not be enabled\n because it conflicts with"
- " another %s Mach64 at sparse I/O base"
- " 0x%04lX.\n",
- pVideo->bus, pVideo->device, pVideo->func,
- ATIBusNames[pATI->BusType],
- Mach64SparseIOBases[j]);
- break;
-
-#endif /* AVOID_NON_PCI */
-
- default: /* Must be DoProbe */
- if (!xf86CheckPciSlot(pVideo->bus,
- pVideo->device,
- pVideo->func))
- continue;
-
- /* Possibly fix block I/O indicator */
- if (PciReg & 0x00000004U)
- pciWriteLong(pPCI->tag, PCI_REG_USERCONFIG,
- PciReg & ~0x00000004U);
-
- xf86SetPciVideo(pVideo, MEM_IO);
-
- Chip = ATIChipID(pVideo->chipType, pVideo->chipRev);
- pATI = ATIMach64Probe(pVideo, Mach64SparseIOBases[j],
- SPARSE_IO, Chip);
- if (!pATI)
- {
- xf86Msg(X_WARNING,
- ATI_NAME ": PCI Mach64 in slot %d:%d:%d could"
- " not be detected!\n",
- pVideo->bus, pVideo->device, pVideo->func);
- }
- else
- {
- sprintf(Identifier,
- "Shared PCI Mach64 in slot %d:%d:%d",
- pVideo->bus, pVideo->device, pVideo->func);
- xf86MsgVerb(X_INFO, 3,
- ATI_NAME ": %s with sparse PIO base 0x%04lX"
- " detected.\n", Identifier,
- Mach64SparseIOBases[j]);
- AddAdapter(pATI);
- pATI->SharedAccelerator = TRUE;
- pATI->PCIInfo = pVideo;
-
- if (pATI->VGAAdapter != ATI_ADAPTER_NONE)
- ATIFindVGA(pVideo, &pVGA, &pATI, p8514,
- ProbeFlags);
- }
-
- xf86SetPciVideo(NULL, NONE);
- break;
- }
- }
+SkipSparse:
#else /* AVOID_CPIO */
- for (i = 0; (pVideo = xf86PciVideoInfo[i++]); )
- {
- if ((pVideo->vendor != PCI_VENDOR_ATI) ||
- (pVideo->chipType == PCI_CHIP_MACH32) ||
- pVideo->size[1])
- continue;
-
- /* Check if this one has already been detected */
- for (j = 0; j < nATIPtr; j++)
- {
- pATI = ATIPtrs[j];
- if (pATI->PCIInfo == pVideo)
- goto SkipThisSlot;
- }
-
- if (!xf86CheckPciSlot(pVideo->bus,
- pVideo->device,
- pVideo->func))
- continue;
-
- xf86SetPciVideo(pVideo, MEM_IO);
-
- Chip = ATIChipID(pVideo->chipType, pVideo->chipRev);
-
- /* The adapter's CPIO base is of little concern here */
- pATI = ATIMach64Probe(pVideo, 0, SPARSE_IO, Chip);
- if (pATI)
- {
- sprintf(Identifier, "Shared PCI Mach64 in slot %d:%d:%d",
- pVideo->bus, pVideo->device, pVideo->func);
- xf86MsgVerb(X_INFO, 3,
- ATI_NAME ": %s with Block 0 base 0x%08lX detected.\n",
- Identifier, pATI->Block0Base);
- AddAdapter(pATI);
- pATI->SharedAccelerator = TRUE;
- pATI->PCIInfo = pVideo;
- }
- else
- {
- xf86Msg(X_WARNING,
- ATI_NAME ": PCI Mach64 in slot %d:%d:%d could not be"
- " detected!\n",
- pVideo->bus, pVideo->device, pVideo->func);
- }
-
- xf86SetPciVideo(NULL, NONE);
-
- SkipThisSlot:;
- }
-
-#endif /* AVOID_CPIO */
-
- }
-
- /* Lastly, look for block I/O devices */
- for (i = 0; (pVideo = xf86PciVideoInfo[i++]); )
- {
- /* For some Radeons, !pvideo->size[1] applies but the card still
- * works properly. Thus don't make !pVideo->size[1] check to continue
- * automatically (instead check that the chip actually is below
- * ATI_CHIP_Mach64 (includes ATI_CHIP_NONE)). See fd.o bug 6796. */
- if ((pVideo->vendor != PCI_VENDOR_ATI) ||
- (pVideo->chipType == PCI_CHIP_MACH32) ||
- (!pVideo->size[1] && Chip < ATI_CHIP_Mach64))
- continue;
-
- /* Check for Rage128's, Radeon's and later adapters */
- Chip = ATIChipID(pVideo->chipType, pVideo->chipRev);
- if (Chip > ATI_CHIP_Mach64)
- {
- if (Chip <= ATI_CHIP_Rage128)
- DoRage128 = TRUE;
- else if (Chip <= ATI_CHIP_Radeon)
- DoRadeon = TRUE;
-
- continue;
- }
-
- if (!nATIGDev)
- continue;
-
- /* Check if this one has already been detected */
- for (j = 0; j < nATIPtr; j++)
- {
- pATI = ATIPtrs[j];
- if (pATI->CPIOBase == pVideo->ioBase[1])
- goto SetPCIInfo;
- }
-
- if (!xf86CheckPciSlot(pVideo->bus, pVideo->device, pVideo->func))
- continue;
-
- /* Probe for it */
- xf86SetPciVideo(pVideo, MEM_IO);
-
- pATI = ATIMach64Probe(pVideo, pVideo->ioBase[1], BLOCK_IO, Chip);
- if (pATI)
- {
- sprintf(Identifier, "Shared PCI/AGP Mach64 in slot %d:%d:%d",
- pVideo->bus, pVideo->device, pVideo->func);
- xf86MsgVerb(X_INFO, 3, ATI_NAME ": %s detected.\n",
- Identifier);
- AddAdapter(pATI);
- pATI->SharedAccelerator = TRUE;
-
-#ifndef AVOID_CPIO
-
- if (pATI->VGAAdapter != ATI_ADAPTER_NONE)
- ATIFindVGA(pVideo, &pVGA, &pATI, p8514, ProbeFlags);
-
-#endif /* AVOID_CPIO */
-
- }
-
- xf86SetPciVideo(NULL, NONE);
-
- if (!pATI)
- {
- xf86Msg(X_WARNING,
- ATI_NAME ": PCI/AGP Mach64 in slot %d:%d:%d could not be"
- " detected!\n", pVideo->bus, pVideo->device, pVideo->func);
- continue;
- }
-
- SetPCIInfo:
- pATI->PCIInfo = pVideo;
- }
- }
-
-#ifndef AVOID_CPIO
-
- /*
- * At this point, if there's a non-shareable VGA with its own framebuffer,
- * find out if it's an ATI VGA Wonder.
- */
- do
+ if (!pVideo->size[1])
{
- if (!nATIGDev || !pVGA || (pVGA->VGAAdapter > ATI_ADAPTER_VGA))
- break;
-
- /* If it has not been assigned to a coprocessor, keep track of it */
- if (pVGA->Coprocessor == ATI_CHIP_NONE)
- AddAdapter(pVGA);
-
- /*
- * A VGA should have installed its int 10 vector. Use that to find the
- * VGA BIOS. If this fails, scan all legacy BIOS segments, in 512-byte
- * increments.
- */
- if (xf86ReadBIOS(0U, 0x42U, BIOS, 2) != 2)
- goto NoVGAWonder;
-
- pATI = NULL;
- BIOSBase = 0;
- if (!(BIOS[0] & 0x1FU)) /* Otherwise there's no 512-byte alignment */
- BIOSBase = ((BIOS[1] << 8) | BIOS[0]) << 4;
+ /* The adapter's CPIO base is of little concern here */
+ pATI->CPIOBase = 0;
+ pATI->CPIODecoding = SPARSE_IO;
+ pATI->PCIInfo = pVideo;
- /* Look for its BIOS */
- for(; ; BIOSBase += 0x00000200U)
+ if (ATIMach64Probe(pATI, pVideo, pATI->Chip))
{
- if (!BIOSBase)
- goto SkipBiosSegment;
-
- if (BIOSBase >= 0x000F8000U)
- goto NoVGAWonder;
-
- /* Skip over those that are already known */
- for (i = 0; i < nATIPtr; i++)
- if (ATIPtrs[i]->BIOSBase == BIOSBase)
- goto SkipBiosSegment;
-
- /* Get first 80 bytes of video BIOS */
- if (xf86ReadBIOS(BIOSBase, 0, BIOS, SizeOf(BIOS)) !=
- SizeOf(BIOS))
- goto NoVGAWonder;
-
- if ((BIOS[0x00U] != 0x55U) || (BIOS[0x01U] != 0xAAU))
- goto SkipBiosSegment;
-
- if ((BIOS[0x1EU] == 'I') &&
- (BIOS[0x1FU] == 'B') &&
- (BIOS[0x20U] == 'M'))
- break;
-
- /* XXX Should PCI BIOS signature be checked for here ? */
- if ((BIOS[0x20U] == 'P') &&
- (BIOS[0x21U] == 'C') &&
- (BIOS[0x22U] == 'I'))
- break;
-
- SkipBiosSegment:
- if (pATI)
- continue;
-
- pATI = pVGA;
- BIOSBase = 0x000C0000U - 0x00000200U;
+ ProbeSuccess = TRUE;
+ xf86Msg(X_INFO, ATI_NAME ": "
+ "Shared PCI Mach64 in slot %d:%d:%d with Block 0 base"
+ " 0x%08lX detected.\n",
+ pVideo->bus, pVideo->device, pVideo->func,
+ pATI->Block0Base);
}
-
- pVGA->BIOSBase = BIOSBase;
-
- /* Look for the ATI signature string */
- if (memcmp(BIOS + BIOSSignature, ATISignature, SignatureSize))
- break;
-
- if (BIOS[0x40U] != '3')
- break;
-
- switch (BIOS[0x41U])
+ else
{
- case '1':
- /* This is a Mach8 or VGA Wonder adapter of some kind */
- if ((BIOS[0x43U] >= '1') && (BIOS[0x43U] <= '6'))
- pVGA->Chip = BIOS[0x43U] - ('1' - ATI_CHIP_18800);
-
- switch (BIOS[0x43U])
- {
- case '1': /* ATI_CHIP_18800 */
- pVGA->VGAOffset = 0xB0U;
- pVGA->VGAAdapter = ATI_ADAPTER_V3;
- break;
-
- case '2': /* ATI_CHIP_18800_1 */
- pVGA->VGAOffset = 0xB0U;
- if (BIOS[0x42U] & 0x10U)
- pVGA->VGAAdapter = ATI_ADAPTER_V5;
- else
- pVGA->VGAAdapter = ATI_ADAPTER_V4;
- break;
-
- case '3': /* ATI_CHIP_28800_2 */
- case '4': /* ATI_CHIP_28800_4 */
- case '5': /* ATI_CHIP_28800_5 */
- case '6': /* ATI_CHIP_28800_6 */
- pVGA->VGAOffset = 0xA0U;
- if (BIOS[0x44U] & 0x80U)
- pVGA->VGAAdapter = ATI_ADAPTER_XL;
- else
- pVGA->VGAAdapter = ATI_ADAPTER_PLUS;
- break;
-
- case 'a': /* A crippled Mach32 */
- case 'b':
- case 'c':
- pVGA->VGAOffset = 0x80U;
- pVGA->VGAAdapter = ATI_ADAPTER_NONISA;
- ATIMach32ChipID(pVGA);
- ProbeWaitIdleEmpty();
- if (inw(SUBSYS_STAT) != (CARD16)(-1))
- pVGA->ChipHasSUBSYS_CNTL = TRUE;
- break;
-#if 0
- case ' ': /* A crippled Mach64 */
- pVGA->VGAOffset = 0x80U;
- pVGA->VGAAdapter = ATI_ADAPTER_NONISA;
- ATIMach64ChipID(pVGA, 0);
- break;
-#endif
- default:
- break;
- }
-
- if (pVGA->VGAAdapter == ATI_ADAPTER_NONE)
- break;
-
- /* Set VGA Wonder I/O port */
- pVGA->CPIO_VGAWonder = BIOSWord(0x10U) & SPARSE_IO_PORT;
- if (!pVGA->CPIO_VGAWonder)
- pVGA->CPIO_VGAWonder = 0x01CEU;
-
- ATIVGAWonderProbe(NULL, pVGA, p8514, ProbeFlags);
- break;
-#if 0
- case '2':
- pVGA->VGAOffset = 0xB0U; /* Presumably */
- pVGA->VGAAdapter = ATI_ADAPTER_EGA_PLUS;
- break;
-
- case '3':
- pVGA->VGAOffset = 0xB0U; /* Presumably */
- pVGA->VGAAdapter = ATI_ADAPTER_BASIC;
- break;
-
- case '?': /* A crippled Mach64 */
- pVGA->VGAAdapter = ATI_ADAPTER_NONISA;
- ATIMach64ChipID(pVGA, 0);
- break;
-#endif
- default:
- break;
+ xf86Msg(X_WARNING, ATI_NAME ": "
+ "PCI Mach64 in slot %d:%d:%d could not be detected!\n",
+ pVideo->bus, pVideo->device, pVideo->func);
}
-
- if (pVGA->Adapter <= ATI_ADAPTER_VGA)
- pVGA->Adapter = pVGA->VGAAdapter;
-
-NoVGAWonder:;
- } while (0);
+ }
#endif /* AVOID_CPIO */
- /*
- * Re-order list of detected devices so that the primary device is before
- * any other PCI device.
- */
- for (i = 0; i < nATIPtr; i++)
+ /* Lastly, look for block I/O devices */
+ if (pVideo->size[1])
{
- if (!ATIPtrs[i]->PCIInfo)
- continue;
-
- for (j = i; j < nATIPtr; j++)
- {
- pATI = ATIPtrs[j];
- if (!xf86IsPrimaryPci(pATI->PCIInfo))
- continue;
-
- for (; j > i; j--)
- ATIPtrs[j] = ATIPtrs[j - 1];
- ATIPtrs[j] = pATI;
- break;
- }
-
- break;
- }
+ pATI->CPIOBase = pVideo->ioBase[1];
+ pATI->CPIODecoding = BLOCK_IO;
+ pATI->PCIInfo = pVideo;
- if (flags & PROBE_DETECT)
- {
- /*
- * No XF86Config information available, so use the default Chipset of
- * "ati", and as many device sections as there are adapters.
- */
- for (i = 0; i < nATIPtr; i++)
+ if (ATIMach64Probe(pATI, pVideo, pATI->Chip))
{
- pATI = ATIPtrs[i];
+ ProbeSuccess = TRUE;
+ xf86Msg(X_INFO, ATI_NAME ": "
+ "Shared PCI/AGP Mach64 in slot %d:%d:%d detected.\n",
+ pVideo->bus, pVideo->device, pVideo->func);
#ifndef AVOID_CPIO
- if ((pATI->Adapter != ATI_ADAPTER_VGA) &&
- ((pATI->Adapter != ATI_ADAPTER_8514A) ||
- ((pATI->VGAAdapter != ATI_ADAPTER_VGA) &&
- (pATI->VGAAdapter != ATI_ADAPTER_NONE))))
+ if (pATI->VGAAdapter)
+ ATIFindVGA(pVideo, pATI);
#endif /* AVOID_CPIO */
- {
- ProbeSuccess = TRUE;
- pGDev = xf86AddDeviceToConfigure(ATI_DRIVER_NAME,
- pATI->PCIInfo, ATI_CHIPSET_ATI);
- if (pGDev)
- {
- /* Fill in additional information */
- pGDev->vendor = ATI_NAME;
- pGDev->chipset = (char *)ATIChipsetNames[ATI_CHIPSET_ATI];
- if (!pATI->PCIInfo)
- pGDev->busID = NULL;
- }
- }
-
- xfree(pATI);
}
- }
- else
- {
- /*
- * Assign detected devices to XF86Config Device sections. This is done
- * by comparing certain Device section specifications against the
- * corresponding adapter information. Begin with those specifications
- * that are independent of the adapter's bus location.
- */
- for (i = 0, pATIGDev = ATIGDevs; i < nATIGDev; i++, pATIGDev++)
+ else
{
- pGDev = pATIGDev->pGDev;
-
- for (j = 0; j < nATIPtr; j++)
- {
- pATI = ATIPtrs[j];
-
- /*
- * First check the Chipset specification. The placement of
- * "break" and "continue" statements here is carefully chosen
- * to produce the intended behaviour for each Chipset value.
- */
- switch (pATIGDev->Chipset)
- {
- case ATI_CHIPSET_ATI:
-
-#ifndef AVOID_CPIO
-
- if (pATI->Adapter == ATI_ADAPTER_VGA)
- continue;
- if (pATI->Adapter != ATI_ADAPTER_8514A)
- break;
- /* Fall through */
-
- case ATI_CHIPSET_ATIVGA:
- if (pATI->VGAAdapter == ATI_ADAPTER_VGA)
- continue;
- /* Fall through */
-
- case ATI_CHIPSET_IBMVGA:
- if (pATI->VGAAdapter == ATI_ADAPTER_NONE)
- continue;
- break;
-
- case ATI_CHIPSET_VGAWONDER:
- if (!pATI->CPIO_VGAWonder)
- continue;
- break;
-
- case ATI_CHIPSET_IBM8514:
- if (pATI->Adapter == ATI_ADAPTER_8514A)
- break;
- /* Fall through */
-
- case ATI_CHIPSET_MACH8:
- if (pATI->Adapter == ATI_ADAPTER_MACH8)
- break;
- /* Fall through */
-
- case ATI_CHIPSET_MACH32:
- if (pATI->Adapter == ATI_ADAPTER_MACH32)
- break;
- continue;
-
-#endif /* AVOID_CPIO */
-
- case ATI_CHIPSET_MACH64:
- if (pATI->Adapter == ATI_ADAPTER_MACH64)
- break;
- continue;
-
- default:
- continue;
- }
-
- /*
- * The ChipID and ChipRev specifications are compared next.
- * First, require these to be unspecified for anything other
- * than Mach32 or Mach64 adapters. ChipRev is also required to
- * be unspecified for Mach32's. ChipID is optional for
- * Mach32's, and both specifications are optional for Mach64's.
- * Lastly, allow both specifications to override their detected
- * value in the case of Mach64 adapters whose ChipID is
- * unrecognised.
- */
- pVideo = pATI->PCIInfo;
- if (pGDev->chipID >= 0)
- {
- if ((pATI->ChipType != pGDev->chipID) &&
- (!pVideo || (pGDev->chipID != pVideo->chipType)))
- {
- if ((pATI->Adapter != ATI_ADAPTER_MACH64) ||
- (pATI->Chip != ATI_CHIP_Mach64))
- continue;
-
- Chip = ATIChipID(pGDev->chipID, 0);
- if ((Chip <= ATI_CHIP_264GTB) ||
- (Chip == ATI_CHIP_Mach64))
- continue;
- }
- if ((pGDev->chipRev >= 0) &&
- (pATI->ChipRev != pGDev->chipRev) &&
- (!pVideo || (pGDev->chipRev != pVideo->chipRev) ||
- (pGDev->chipID != pVideo->chipType)))
- {
- if (pATI->Chip < ATI_CHIP_264CT)
- continue;
-
- if (pATI->Chip != ATI_CHIP_Mach64)
- {
- /*
- * There are two foundry codes for UMC. Some
- * adapters will advertise one in CONFIG_CHIP_ID
- * and the other in PCI configuration space. For
- * matching purposes, make both codes compare
- * equal.
- */
-# define UMC_IGNORE \
- (ATI_FOUNDRY_UMC ^ ATI_FOUNDRY_UMCA)
-# define UMC_NOCARE \
- GetBits(SetBits(UMC_IGNORE, CFG_CHIP_FOUNDRY), \
- CFG_CHIP_REV)
-
- if ((pATI->ChipRev ^ pGDev->chipRev) & ~UMC_NOCARE)
- continue;
-
- if ((pATI->ChipFoundry != ATI_FOUNDRY_UMC) &&
- (pATI->ChipFoundry != ATI_FOUNDRY_UMCA))
- continue;
-
- k = GetBits(pGDev->chipRev,
- GetBits(CFG_CHIP_FOUNDRY, CFG_CHIP_REV));
- if ((k != ATI_FOUNDRY_UMC) &&
- (k != ATI_FOUNDRY_UMCA))
- continue;
- }
- }
- }
-
- /*
- * IOBase is next. This is the first specification that is
- * potentially dependent on bus location. It is only allowed
- * for Mach64 adapters, and is optional.
- */
- if (pGDev->IOBase && (pATI->CPIOBase != pGDev->IOBase))
- continue;
-
- /*
- * Compare BusID's. This specification is only allowed for PCI
- * Mach32's or Mach64's and is optional.
- */
- if (pGDev->busID && pGDev->busID[0])
- {
- pVideo = pATI->PCIInfo;
+ xf86Msg(X_WARNING, ATI_NAME ": "
+ "PCI/AGP Mach64 in slot %d:%d:%d could not be detected!\n",
+ pVideo->bus, pVideo->device, pVideo->func);
+ }
+ }
-#ifndef AVOID_CPIO
+ return ProbeSuccess;
+}
- if (!pVideo)
- continue;
+static SymTabRec
+Mach64Chipsets[] = {
+ {ATI_CHIP_88800GXC, "ATI 88800GX-C"},
+ {ATI_CHIP_88800GXD, "ATI 88800GX-D"},
+ {ATI_CHIP_88800GXE, "ATI 88800GX-E"},
+ {ATI_CHIP_88800GXF, "ATI 88800GX-F"},
+ {ATI_CHIP_88800GX, "ATI 88800GX"},
+ {ATI_CHIP_88800CX, "ATI 88800CX"},
+ {ATI_CHIP_264CT, "ATI 264CT"},
+ {ATI_CHIP_264ET, "ATI 264ET"},
+ {ATI_CHIP_264VT, "ATI 264VT"},
+ {ATI_CHIP_264VTB, "ATI 264VT-B"},
+ {ATI_CHIP_264GT, "ATI 3D Rage"},
+ {ATI_CHIP_264GTB, "ATI 3D Rage II"},
+ {ATI_CHIP_264VT3, "ATI 264VT3"},
+ {ATI_CHIP_264GTDVD, "ATI 3D Rage II+DVD"},
+ {ATI_CHIP_264LT, "ATI 3D Rage LT"},
+ {ATI_CHIP_264VT4, "ATI 264VT4"},
+ {ATI_CHIP_264GT2C, "ATI 3D Rage IIc"},
+ {ATI_CHIP_264GTPRO, "ATI 3D Rage Pro"},
+ {ATI_CHIP_264LTPRO, "ATI 3D Rage LT Pro"},
+ {ATI_CHIP_264XL, "ATI 3D Rage XL or XC"},
+ {ATI_CHIP_MOBILITY, "ATI 3D Rage Mobility"},
+ {-1, NULL }
+};
-#endif /* AVOID_CPIO */
+/*
+ * This table maps a PCI device ID to a chipset family identifier.
+ */
+static PciChipsets
+Mach64PciChipsets[] = {
+ {ATI_CHIP_88800GX, PCI_CHIP_MACH64GX, RES_SHARED_VGA},
+ {ATI_CHIP_88800CX, PCI_CHIP_MACH64CX, RES_SHARED_VGA},
+ {ATI_CHIP_264CT, PCI_CHIP_MACH64CT, RES_SHARED_VGA},
+ {ATI_CHIP_264ET, PCI_CHIP_MACH64ET, RES_SHARED_VGA},
+ {ATI_CHIP_264VT, PCI_CHIP_MACH64VT, RES_SHARED_VGA},
+ {ATI_CHIP_264GT, PCI_CHIP_MACH64GT, RES_SHARED_VGA},
+ {ATI_CHIP_264VT3, PCI_CHIP_MACH64VU, RES_SHARED_VGA},
+ {ATI_CHIP_264GTDVD, PCI_CHIP_MACH64GU, RES_SHARED_VGA},
+ {ATI_CHIP_264LT, PCI_CHIP_MACH64LG, RES_SHARED_VGA},
+ {ATI_CHIP_264VT4, PCI_CHIP_MACH64VV, RES_SHARED_VGA},
+ {ATI_CHIP_264GT2C, PCI_CHIP_MACH64GV, RES_SHARED_VGA},
+ {ATI_CHIP_264GT2C, PCI_CHIP_MACH64GW, RES_SHARED_VGA},
+ {ATI_CHIP_264GT2C, PCI_CHIP_MACH64GY, RES_SHARED_VGA},
+ {ATI_CHIP_264GT2C, PCI_CHIP_MACH64GZ, RES_SHARED_VGA},
+ {ATI_CHIP_264GTPRO, PCI_CHIP_MACH64GB, RES_SHARED_VGA},
+ {ATI_CHIP_264GTPRO, PCI_CHIP_MACH64GD, RES_SHARED_VGA},
+ {ATI_CHIP_264GTPRO, PCI_CHIP_MACH64GI, RES_SHARED_VGA},
+ {ATI_CHIP_264GTPRO, PCI_CHIP_MACH64GP, RES_SHARED_VGA},
+ {ATI_CHIP_264GTPRO, PCI_CHIP_MACH64GQ, RES_SHARED_VGA},
+ {ATI_CHIP_264LTPRO, PCI_CHIP_MACH64LB, RES_SHARED_VGA},
+ {ATI_CHIP_264LTPRO, PCI_CHIP_MACH64LD, RES_SHARED_VGA},
+ {ATI_CHIP_264LTPRO, PCI_CHIP_MACH64LI, RES_SHARED_VGA},
+ {ATI_CHIP_264LTPRO, PCI_CHIP_MACH64LP, RES_SHARED_VGA},
+ {ATI_CHIP_264LTPRO, PCI_CHIP_MACH64LQ, RES_SHARED_VGA},
+ {ATI_CHIP_264XL, PCI_CHIP_MACH64GL, RES_SHARED_VGA},
+ {ATI_CHIP_264XL, PCI_CHIP_MACH64GM, RES_SHARED_VGA},
+ {ATI_CHIP_264XL, PCI_CHIP_MACH64GN, RES_SHARED_VGA},
+ {ATI_CHIP_264XL, PCI_CHIP_MACH64GO, RES_SHARED_VGA},
+ {ATI_CHIP_264XL, PCI_CHIP_MACH64GR, RES_SHARED_VGA},
+ {ATI_CHIP_264XL, PCI_CHIP_MACH64GS, RES_SHARED_VGA},
+ {ATI_CHIP_MOBILITY, PCI_CHIP_MACH64LM, RES_SHARED_VGA},
+ {ATI_CHIP_MOBILITY, PCI_CHIP_MACH64LN, RES_SHARED_VGA},
+ {ATI_CHIP_MOBILITY, PCI_CHIP_MACH64LR, RES_SHARED_VGA},
+ {ATI_CHIP_MOBILITY, PCI_CHIP_MACH64LS, RES_SHARED_VGA},
+ {-1, -1, RES_UNDEFINED}
+};
- if (!xf86ComparePciBusString(pGDev->busID,
- pVideo->bus, pVideo->device, pVideo->func))
- continue;
- }
-
- /*
- * Ensure no two adapters are assigned to the same XF86Config
- * Device section.
- */
- if (pATIGDev->iATIPtr)
- {
- if (pATIGDev->iATIPtr < 0)
- break;
-
- xf86Msg(X_ERROR,
- ATI_NAME ": XF86Config Device section \"%s\" may not"
- " be assigned to more than one adapter.\n",
- pGDev->identifier);
- pATIGDev->iATIPtr = -1;
- break;
- }
-
- /* Assign adapter */
- pATIGDev->iATIPtr = j + 1;
-
- /*
- * For compatibility with previous releases, assign the first
- * applicable adapter if there is only one Device section.
- */
- if (nATIGDev == 1)
- break;
- }
- }
+/*
+ * Mach64Probe --
+ *
+ * This function is called once, at the start of the first server generation to
+ * do a minimal probe for supported hardware.
+ */
+static Bool
+Mach64Probe(DriverPtr pDriver, int flags)
+{
+ GDevPtr *devSections;
+ int *usedChips;
+ int numDevSections;
+ int numUsed;
+ Bool ProbeSuccess = FALSE;
- /*
- * Ensure no two XF86Config Device sections are assigned to the same
- * adapter. Then, generate screens for any that are left.
- */
- for (i = 0, pATIGDev = ATIGDevs; i < nATIGDev; i++, pATIGDev++)
- {
- pGDev = pATIGDev->pGDev;
+ if ((numDevSections = xf86MatchDevice(ATI_DRIVER_NAME, &devSections)) <= 0)
+ return FALSE;
- j = pATIGDev->iATIPtr;
- if (j <= 0)
- continue;
+ if (xf86GetPciVideoInfo() == NULL)
+ return FALSE;
- for (k = i; ++k < nATIGDev; )
- {
- if (j == ATIGDevs[k].iATIPtr)
- {
- xf86Msg(X_ERROR,
- ATI_NAME ": XF86Config Device sections \"%s\" and"
- " \"%s\" may not be assigned to the same adapter.\n",
- pGDev->identifier, ATIGDevs[k].pGDev->identifier);
- pATIGDev->iATIPtr = ATIGDevs[k].iATIPtr = -1;
- }
- }
+ numUsed = xf86MatchPciInstances(ATI_DRIVER_NAME, PCI_VENDOR_ATI,
+ Mach64Chipsets, Mach64PciChipsets,
+ devSections, numDevSections,
+ pDriver, &usedChips);
+ xfree(devSections);
- j = ATIGDevs[i].iATIPtr;
- if (j <= 0)
- continue;
+ if (numUsed <= 0)
+ return FALSE;
- pATI = ATIPtrs[j - 1];
+ if (flags & PROBE_DETECT) {
+ ProbeSuccess = TRUE;
+ } else {
+ int i;
- xf86MsgVerb(X_INFO, 3,
- ATI_NAME ": %s assigned to %sactive \"Device\" section"
- " \"%s\".\n",
- Identifier, pGDev->active ? "" : "in", pGDev->identifier);
+ for (i = 0; i < numUsed; i++) {
+ ScrnInfoPtr pScrn;
+ EntityInfoPtr pEnt;
+ pciVideoPtr pVideo;
- /*
- * Attach adapter to XF86Config Device section and register its
- * resources.
- */
- if (ATIClaimBusSlot(pDriver, pATIGDev->Chipset,
- pGDev, pGDev->active, pATI) < 0)
- {
- xf86Msg(X_ERROR,
- ATI_NAME ": Could not claim bus slot for %s.\n",
- Identifier);
- continue;
- }
+ pScrn = xf86ConfigPciEntity(NULL, 0, usedChips[i], Mach64PciChipsets,
+ 0, 0, 0, 0, NULL);
- if (!pGDev->active)
+ if (!pScrn)
continue;
- /* Allocate screen */
- pScreenInfo = xf86AllocateScreen(pDriver, 0);
+ pEnt = xf86GetEntityInfo(usedChips[i]);
+ pVideo = xf86GetPciInfoForEntity(usedChips[i]);
#ifdef XFree86LOADER
- if (!xf86LoadSubModule(pScreenInfo, "atimisc"))
+ if (!xf86LoadSubModule(pScrn, "atimisc"))
{
xf86Msg(X_ERROR,
ATI_NAME ": Failed to load \"atimisc\" module.\n");
- xf86DeleteScreen(pScreenInfo->scrnIndex, 0);
+ xf86DeleteScreen(pScrn->scrnIndex, 0);
continue;
}
@@ -2299,45 +662,74 @@ NoVGAWonder:;
#endif
- /* Attach device to screen */
- xf86AddEntityToScreen(pScreenInfo, pATI->iEntity);
-
- ATIPtrs[j - 1] = NULL;
-
- /* Fill in probe data */
- ATIFillInScreenInfo(pScreenInfo);
+ ATIFillInScreenInfo(pScrn);
- pScreenInfo->driverPrivate = pATI;
-
- pATI->Chipset = pATIGDev->Chipset;
+ pScrn->Probe = Mach64Probe;
ProbeSuccess = TRUE;
}
+ }
- /* Deal with unassigned adapters */
- for (i = 0; i < nATIPtr; i++)
- {
- if (!(pATI = ATIPtrs[i]))
- continue;
+ return ProbeSuccess;
+}
-#ifndef AVOID_CPIO
+/*
+ * ATIProbe --
+ *
+ * This function is called once, at the start of the first server generation to
+ * do a minimal probe for supported hardware.
+ */
+Bool
+ATIProbe
+(
+ DriverPtr pDriver,
+ int flags
+)
+{
+ pciVideoPtr pVideo, *xf86PciVideoInfo = xf86GetPciVideoInfo();
+ Bool ProbeSuccess = FALSE;
+ Bool DoMach64 = FALSE;
+ Bool DoRage128 = FALSE, DoRadeon = FALSE;
+ int i;
+ ATIChipType Chip;
- if (pATI->Adapter > ATI_ADAPTER_VGA)
+ if (!(flags & PROBE_DETECT))
+ {
+ if (xf86MatchDevice(ATI_NAME, NULL) > 0)
+ DoMach64 = TRUE;
+ if (xf86MatchDevice(R128_NAME, NULL) > 0)
+ DoRage128 = TRUE;
+ if (xf86MatchDevice(RADEON_NAME, NULL) > 0)
+ DoRadeon = TRUE;
+ }
-#endif /* AVOID_CPIO */
+ if (xf86PciVideoInfo)
+ {
+ for (i = 0; (pVideo = xf86PciVideoInfo[i++]); )
+ {
+ if ((pVideo->vendor != PCI_VENDOR_ATI) ||
+ (pVideo->chipType == PCI_CHIP_MACH32))
+ continue;
+ /* Check for Rage128's, Radeon's and later adapters */
+ Chip = ATIChipID(pVideo->chipType, pVideo->chipRev);
+ if (Chip > ATI_CHIP_Mach64)
{
- if (pATI->iEntity < 0)
- (void)ATIClaimBusSlot(pDriver, 0, NULL, FALSE, pATI);
+ if (Chip <= ATI_CHIP_Rage128)
+ DoRage128 = TRUE;
+ else if (Chip <= ATI_CHIP_Radeon)
+ DoRadeon = TRUE;
+
+ continue;
}
- xfree(pATI);
+ DoMach64 = TRUE;
}
-
- xfree(ATIGDevs);
}
- xfree(ATIPtrs);
+ /* Call Mach64 driver probe */
+ if (DoMach64 && Mach64Probe(pDriver, flags))
+ ProbeSuccess = TRUE;
/* Call Rage 128 driver probe */
if (DoRage128 && R128Probe(pDriver, flags))
diff --git a/src/atiscreen.c b/src/atiscreen.c
index ca41ff1a..e8499415 100644
--- a/src/atiscreen.c
+++ b/src/atiscreen.c
@@ -61,12 +61,8 @@
#include "shadowfb.h"
#include "xf86cmap.h"
-#include "xf1bpp.h"
-#include "xf4bpp.h"
-
#include "fb.h"
-#include "mibank.h"
#include "micmap.h"
#include "mipointer.h"
@@ -139,11 +135,6 @@ ATIMach64SetupMemXAA_NoDRI
int maxScanlines = ATIMach64MaxY;
int maxPixelArea, PixelArea;
-#ifndef AVOID_CPIO
-
- if (!pATI->BankInfo.BankSize)
-
-#endif /* AVOID_CPIO */
{
/*
* Note: If PixelArea exceeds the engine's maximum, the excess is
@@ -457,23 +448,6 @@ ATIScreenInit
/* Initialise framebuffer layer */
switch (pATI->bitsPerPixel)
{
-
-#ifndef AVOID_CPIO
-
- case 1:
- pATI->Closeable = xf1bppScreenInit(pScreen, pFB,
- pScreenInfo->virtualX, pScreenInfo->virtualY,
- pScreenInfo->xDpi, pScreenInfo->yDpi, pATI->displayWidth);
- break;
-
- case 4:
- pATI->Closeable = xf4bppScreenInit(pScreen, pFB,
- pScreenInfo->virtualX, pScreenInfo->virtualY,
- pScreenInfo->xDpi, pScreenInfo->yDpi, pATI->displayWidth);
- break;
-
-#endif /* AVOID_CPIO */
-
case 8:
case 16:
case 24:
@@ -512,7 +486,6 @@ ATIScreenInit
}
/* If applicable, initialise RENDER extension */
- if (pATI->bitsPerPixel > 4)
{
if (pATI->OptionShadowFB)
{
@@ -521,19 +494,6 @@ ATIScreenInit
"RENDER extension not supported with a shadowed"
" framebuffer.\n");
}
-
-#ifndef AVOID_CPIO
-
- else if (pATI->BankInfo.BankSize)
- {
- if (serverGeneration == 1)
- xf86DrvMsg(pScreenInfo->scrnIndex, X_WARNING,
- "RENDER extension not supported with a banked"
- " framebuffer.\n");
- }
-
-#endif /* AVOID_CPIO */
-
else if (!fbPictureInit(pScreen, NULL, 0) &&
(serverGeneration == 1))
{
@@ -544,16 +504,6 @@ ATIScreenInit
xf86SetBlackWhitePixels(pScreen);
-#ifndef AVOID_CPIO
-
- /* Initialise banking if needed */
- if (!miInitializeBanking(pScreen,
- pScreenInfo->virtualX, pScreenInfo->virtualY,
- pATI->displayWidth, &pATI->BankInfo))
- return FALSE;
-
-#endif /* AVOID_CPIO */
-
#ifdef USE_XAA
if (!pATI->useEXA) {
@@ -612,24 +562,11 @@ ATIScreenInit
if (!miCreateDefColormap(pScreen))
return FALSE;
-#ifdef AVOID_CPIO
-
if (!xf86HandleColormaps(pScreen, 256, pATI->rgbBits, ATILoadPalette, NULL,
CMAP_PALETTED_TRUECOLOR |
CMAP_LOAD_EVEN_IF_OFFSCREEN))
return FALSE;
-#else /* AVOID_CPIO */
-
- if (pATI->depth > 1)
- if (!xf86HandleColormaps(pScreen, (pATI->depth == 4) ? 16 : 256,
- pATI->rgbBits, ATILoadPalette, NULL,
- CMAP_PALETTED_TRUECOLOR |
- CMAP_LOAD_EVEN_IF_OFFSCREEN))
- return FALSE;
-
-#endif /* AVOID_CPIO */
-
/* Initialise shadow framebuffer */
if (pATI->OptionShadowFB &&
!ShadowFBInit(pScreen, ATIRefreshArea))
diff --git a/src/atistruct.h b/src/atistruct.h
index 16bb4fa3..e50cbb58 100644
--- a/src/atistruct.h
+++ b/src/atistruct.h
@@ -160,9 +160,6 @@ typedef struct _ATIHWRec
scaler_buf0_offset_u, scaler_buf0_offset_v, scaler_buf1_offset_u,
scaler_buf1_offset_v;
- /* Clock map pointers */
- const CARD8 *ClockMap, *ClockUnmap;
-
/* Clock programming data */
int FeedbackDivider, ReferenceDivider, PostDivider;
@@ -214,15 +211,6 @@ typedef struct _Mach64ContextRegs3D
*/
typedef struct _ATIRec
{
- /*
- * Definitions related to XF86Config "Chipset" specifications.
- */
- CARD8 Chipset;
-
- /*
- * Adapter-related definitions.
- */
- CARD8 Adapter;
#ifndef AVOID_CPIO
@@ -238,12 +226,6 @@ typedef struct _ATIRec
CARD8 Chip;
CARD8 ChipClass, ChipRevision, ChipRev, ChipVersion, ChipFoundry;
-#ifndef AVOID_CPIO
-
- CARD8 Coprocessor, ChipHasSUBSYS_CNTL;
-
-#endif /* AVOID_CPIO */
-
/*
* Processor I/O decoding definitions.
*/
@@ -261,8 +243,6 @@ typedef struct _ATIRec
* Processor I/O port definitions for VGA Wonder.
*/
IOADDRESS CPIO_VGAWonder;
- CARD8 B2Reg; /* The B2 mirror */
- CARD8 VGAOffset; /* Low index for CPIO_VGAWonder */
#endif /* AVOID_CPIO */
@@ -285,11 +265,9 @@ typedef struct _ATIRec
*/
pciVideoPtr PCIInfo;
CARD8 BusType;
- CARD8 SharedAccelerator;
#ifndef AVOID_CPIO
- CARD8 SharedVGA;
resRange VGAWonderResources[2];
#endif /* AVOID_CPIO */
@@ -319,9 +297,7 @@ typedef struct _ATIRec
/*
* Banking interface.
*/
- miBankInfoRec BankInfo;
pointer pBank;
- CARD8 UseSmallApertures;
#endif /* AVOID_CPIO */
@@ -378,8 +354,6 @@ typedef struct _ATIRec
int ClockNumberToProgramme, ReferenceNumerator, ReferenceDenominator;
int ProgrammableClock, maxClock;
ClockRec ClockDescriptor;
- CARD16 BIOSClocks[16];
- CARD8 Clock;
/*
* DSP register data.
@@ -452,9 +426,6 @@ typedef struct _ATIRec
CARD32 config_cntl;
- /* Mach8/Mach32 registers */
- CARD16 clock_sel, misc_options, mem_bndry, mem_cfg;
-
/* VGA Wonder registers */
CARD8 a6, ab, b1, b4, b5, b6, b8, b9, be;
@@ -470,8 +441,6 @@ typedef struct _ATIRec
/* Mode data */
ATIHWRec OldHW, NewHW;
- int MaximumInterlacedPitch;
- Bool InterlacedSeen;
/*
* Resource Access Control entity index.
@@ -481,6 +450,7 @@ typedef struct _ATIRec
/*
* Driver options.
*/
+ unsigned int OptionProbeSparse:1; /* Force probe for fixed (sparse) I/O */
unsigned int OptionAccel:1; /* Use hardware draw engine */
unsigned int OptionBIOSDisplay:1; /* Allow BIOS interference */
unsigned int OptionBlend:1; /* Force horizontal blending */
@@ -488,12 +458,6 @@ typedef struct _ATIRec
unsigned int OptionCSync:1; /* Use composite sync */
unsigned int OptionDevel:1; /* Intentionally undocumented */
-#ifndef AVOID_CPIO
-
- unsigned int OptionLinear:1; /* Use linear aperture if available */
-
-#endif /* AVOID_CPIO */
-
#ifdef TV_OUT
CARD8 OptionTvOut; /* Enable TV out if TV is connected */
@@ -504,7 +468,6 @@ typedef struct _ATIRec
unsigned int OptionMMIOCache:1; /* Cache MMIO writes */
unsigned int OptionTestMMIOCache:1;/* Test MMIO cache integrity */
unsigned int OptionPanelDisplay:1; /* Prefer digital panel over CRT */
- unsigned int OptionProbeClocks:1; /* Force probe for fixed clocks */
unsigned int OptionShadowFB:1; /* Use shadow frame buffer */
unsigned int OptionLCDSync:1; /* Temporary */
diff --git a/src/ativalid.c b/src/ativalid.c
index c2539a2d..8a92e82e 100644
--- a/src/ativalid.c
+++ b/src/ativalid.c
@@ -24,9 +24,7 @@
#include "config.h"
#endif
-#include "atiadapter.h"
#include "atichip.h"
-#include "aticrtc.h"
#include "atistruct.h"
#include "ativalid.h"
@@ -48,42 +46,10 @@ ATIValidMode
{
ScrnInfoPtr pScreenInfo = xf86Screens[iScreen];
ATIPtr pATI = ATIPTR(pScreenInfo);
- Bool InterlacedSeen;
int HBlankWidth, HAdjust, VScan, VInterlace;
-#ifndef AVOID_CPIO
-
- int VDisplay, VTotal;
-
-#endif /* AVOID_CPIO */
-
if (flags & MODECHECK_FINAL)
{
- /*
- * This is the final check before the common layer accepts a mode.
- * pScreenInfo->displayWidth is set to the proposed virtual pitch
- * should the mode be accepted. The only check needed here is for
- * 18800's and 28800's, which don't support interlaced modes if the
- * pitch is over half the chipset's maximum pitch.
- */
- if (pATI->MaximumInterlacedPitch)
- {
- /*
- * Ensure no interlaced modes have a scanline pitch larger than the
- * limit.
- */
- if (pMode->Flags & V_INTERLACE)
- InterlacedSeen = TRUE;
- else
- InterlacedSeen = pATI->InterlacedSeen;
-
- if (InterlacedSeen &&
- (pScreenInfo->displayWidth > pATI->MaximumInterlacedPitch))
- return MODE_INTERLACE_WIDTH;
-
- pATI->InterlacedSeen = InterlacedSeen;
- }
-
return MODE_OK;
}
@@ -186,52 +152,9 @@ ATIValidMode
if (!HBlankWidth)
return MODE_HBLANK_NARROW;
- switch (pATI->NewHW.crtc)
{
-
-#ifndef AVOID_CPIO
-
- case ATI_CRTC_VGA:
- /* Prevent overscans */
- if (HBlankWidth > 63)
- return MODE_HBLANK_WIDE;
-
- if (pMode->HDisplay > 2048)
- return MODE_BAD_HVALUE;
-
- if (VScan > 64)
- return MODE_BAD_VSCAN;
-
- VDisplay = pMode->VDisplay * VScan;
- VTotal = pMode->VTotal * VScan;
-
- if ((pMode->Flags & V_INTERLACE) && (pATI->Chip < ATI_CHIP_264CT))
- {
- VDisplay >>= 1;
- VTotal >>= 1;
- }
-
- if ((VDisplay > 2048) || (VTotal > 2050))
- return MODE_BAD_VVALUE;
-
- if (pATI->Adapter != ATI_ADAPTER_VGA)
- break;
-
- if ((VDisplay > 1024) || (VTotal > 1025))
- return MODE_BAD_VVALUE;
-
- break;
-
-#endif /* AVOID_CPIO */
-
- case ATI_CRTC_MACH64:
if (VScan > 2)
return MODE_NO_VSCAN;
-
- break;
-
- default:
- break;
}
return MODE_OK;
diff --git a/src/ativga.c b/src/ativga.c
index 5678c6e3..8f4b0da1 100644
--- a/src/ativga.c
+++ b/src/ativga.c
@@ -25,18 +25,11 @@
#endif
#include "ati.h"
-#include "atiadapter.h"
#include "atichip.h"
-#include "atimono.h"
#include "atistruct.h"
#include "ativga.h"
#include "ativgaio.h"
-#ifndef DPMS_SERVER
-# define DPMS_SERVER
-#endif
-#include <X11/extensions/dpms.h>
-
#ifndef AVOID_CPIO
/*
@@ -56,68 +49,32 @@ ATIVGAPreInit
/* Initialise sequencer register values */
pATIHW->seq[0] = 0x03U;
- if (pATI->depth == 1)
- pATIHW->seq[2] = 0x01U << BIT_PLANE;
- else
pATIHW->seq[2] = 0x0FU;
- if (pATI->depth <= 4)
- pATIHW->seq[4] = 0x06U;
- else if (pATI->Adapter == ATI_ADAPTER_VGA)
- pATIHW->seq[4] = 0x0EU;
- else
pATIHW->seq[4] = 0x0AU;
/* Initialise CRTC register values */
- if ((pATI->depth >= 8) &&
- ((pATI->Chip >= ATI_CHIP_264CT) ||
- (pATI->CPIO_VGAWonder &&
- (pATI->Chip <= ATI_CHIP_18800_1) &&
- (pATI->VideoRAM == 256))))
+ if (((pATI->Chip >= ATI_CHIP_264CT)))
pATIHW->crt[19] = pATI->displayWidth >> 3;
else
pATIHW->crt[19] = pATI->displayWidth >> 4;
- if ((pATI->depth >= 8) && (pATI->Adapter == ATI_ADAPTER_VGA))
- pATIHW->crt[23] = 0xC3U;
- else
+
pATIHW->crt[23] = 0xE3U;
pATIHW->crt[24] = 0xFFU;
/* Initialise attribute controller register values */
- if (pATI->depth == 1)
- {
- Bool FlipPixels = xf86GetFlipPixels();
-
- for (Index = 0; Index < 16; Index++)
- if (((Index & (0x01U << BIT_PLANE)) != 0) != FlipPixels)
- pATIHW->attr[Index] = MONO_WHITE;
- else
- pATIHW->attr[Index] = MONO_BLACK;
- pATIHW->attr[16] = 0x01U;
- pATIHW->attr[17] = MONO_OVERSCAN;
- }
- else
{
for (Index = 0; Index < 16; Index++)
pATIHW->attr[Index] = Index;
- if (pATI->depth <= 4)
- pATIHW->attr[16] = 0x81U;
- else if (pATI->Adapter == ATI_ADAPTER_VGA)
- pATIHW->attr[16] = 0x41U;
- else
+
pATIHW->attr[16] = 0x01U;
pATIHW->attr[17] = 0xFFU;
}
pATIHW->attr[18] = 0x0FU;
/* Initialise graphics controller register values */
- if (pATI->depth == 1)
- pATIHW->gra[4] = BIT_PLANE;
- else if (pATI->depth <= 4)
- pATIHW->gra[5] = 0x02U;
- else if (pATI->Chip >= ATI_CHIP_264CT)
+ if (pATI->Chip >= ATI_CHIP_264CT)
pATIHW->gra[5] = 0x40U;
- if (pATI->UseSmallApertures && (pATI->Chip >= ATI_CHIP_264CT) &&
- ((pATI->Chip >= ATI_CHIP_264VT) || !pATI->LinearBase))
+ if (pATI->Chip >= ATI_CHIP_264VT)
pATIHW->gra[6] = 0x01U; /* 128kB aperture */
else
pATIHW->gra[6] = 0x05U; /* 64kB aperture */
@@ -164,265 +121,6 @@ ATIVGASave
}
/*
- * ATIVGACalculate --
- *
- * This function fills in the VGA portion of an ATIHWRec.
- */
-void
-ATIVGACalculate
-(
- ATIPtr pATI,
- ATIHWPtr pATIHW,
- DisplayModePtr pMode
-)
-{
- int Index, VDisplay;
-
- /* If not already done, adjust horizontal timings */
- if (!pMode->CrtcHAdjusted)
- {
- pMode->CrtcHAdjusted = TRUE;
- pMode->CrtcHDisplay = (pMode->HDisplay >> 3) - 1;
- pMode->CrtcHBlankStart = (pMode->HDisplay >> 3);
- if ((pATI->Chip == ATI_CHIP_18800_1) ||
- (pATI->Chip >= ATI_CHIP_264CT))
- pMode->CrtcHBlankStart--;
- pMode->CrtcHSyncStart = pMode->HSyncStart >> 3;
- if (pATI->LCDPanelID >= 0)
- pMode->CrtcHSyncStart--;
- pMode->CrtcHSyncEnd = pMode->HSyncEnd >> 3;
- if (pATI->LCDPanelID >= 0)
- pMode->CrtcHSyncEnd--;
- pMode->CrtcHBlankEnd = (pMode->HTotal >> 3) - 1;
- pMode->CrtcHTotal = (pMode->HTotal >> 3) - 5;
- pMode->CrtcHSkew = pMode->HSkew;
-
- /* Check sync pulse width */
- Index = pMode->CrtcHSyncEnd - pMode->CrtcHSyncStart - 0x1F;
- if (Index > 0)
- {
- pMode->CrtcHSyncStart += Index / 2;
- pMode->CrtcHSyncEnd = pMode->CrtcHSyncStart + 0x1F;
- }
-
- /* Check blank pulse width */
- Index = pMode->CrtcHBlankEnd - pMode->CrtcHBlankStart - 0x3F;
- if (Index > 0)
- {
- if ((pMode->CrtcHBlankEnd - Index) > pMode->CrtcHSyncEnd)
- {
- pMode->CrtcHBlankStart += Index / 2;
- if (pMode->CrtcHBlankStart >= pMode->CrtcHSyncStart)
- pMode->CrtcHBlankStart = pMode->CrtcHSyncStart - 1;
- pMode->CrtcHBlankEnd = pMode->CrtcHBlankStart + 0x3F;
- }
- else
- {
- Index -= 0x40;
- if (Index > 0)
- {
- pMode->CrtcHBlankStart += Index / 2;
- if (pMode->CrtcHBlankStart >= pMode->CrtcHSyncStart)
- pMode->CrtcHBlankStart = pMode->CrtcHSyncStart - 1;
- pMode->CrtcHBlankEnd = pMode->CrtcHBlankStart + 0x7F;
- }
- }
- }
- }
-
- /*
- * Because of the use of CRTC[23] bit 0x04's for vertical doubling, it is
- * necessary to always re-adjust vertical timings here.
- */
- pMode->CrtcVDisplay = pMode->VDisplay;
- pMode->CrtcVBlankStart = pMode->VDisplay;
- pMode->CrtcVSyncStart = pMode->VSyncStart;
- pMode->CrtcVSyncEnd = pMode->VSyncEnd;
- pMode->CrtcVBlankEnd = pMode->VTotal;
- pMode->CrtcVTotal = pMode->VTotal;
-
- /* Adjust for doublescanned modes */
- if (pMode->Flags & V_DBLSCAN)
- {
- pMode->CrtcVDisplay <<= 1;
- pMode->CrtcVBlankStart <<= 1;
- pMode->CrtcVSyncStart <<= 1;
- pMode->CrtcVSyncEnd <<= 1;
- pMode->CrtcVBlankEnd <<= 1;
- pMode->CrtcVTotal <<= 1;
- }
-
- /* Adjust for multiscanned modes */
- if (pMode->VScan > 1)
- {
- pMode->CrtcVDisplay *= pMode->VScan;
- pMode->CrtcVBlankStart *= pMode->VScan;
- pMode->CrtcVSyncStart *= pMode->VScan;
- pMode->CrtcVSyncEnd *= pMode->VScan;
- pMode->CrtcVBlankEnd *= pMode->VScan;
- pMode->CrtcVTotal *= pMode->VScan;
- }
-
- /* Set up miscellaneous output register value */
- pATIHW->genmo = 0x23U;
- if ((pMode->Flags & (V_PHSYNC | V_NHSYNC)) &&
- (pMode->Flags & (V_PVSYNC | V_NVSYNC)))
- {
- if (pMode->Flags & V_NHSYNC)
- pATIHW->genmo |= 0x40U;
- if (pMode->Flags & V_NVSYNC)
- pATIHW->genmo |= 0x80U;
- }
- else
- {
- pMode->Flags &= ~(V_PHSYNC | V_NHSYNC | V_PVSYNC | V_NVSYNC);
-
- if (pATI->OptionPanelDisplay && (pATI->LCDPanelID >= 0))
- VDisplay = pATI->LCDVertical;
- else
- VDisplay = pMode->CrtcVDisplay;
-
- if (VDisplay < 400)
- {
- pMode->Flags |= V_PHSYNC | V_NVSYNC;
- pATIHW->genmo |= 0x80U;
- }
- else if (VDisplay < 480)
- {
- pMode->Flags |= V_NHSYNC | V_PVSYNC;
- pATIHW->genmo |= 0x40U;
- }
- else if (VDisplay < 768)
- {
- pMode->Flags |= V_NHSYNC | V_NVSYNC;
- pATIHW->genmo |= 0xC0U;
- }
- else
- {
- pMode->Flags |= V_PHSYNC | V_PVSYNC;
- }
- }
-
- /* Adjust for interlaced modes */
- if ((pMode->Flags & V_INTERLACE) && (pATI->Chip < ATI_CHIP_264CT))
- {
- pMode->CrtcVDisplay >>= 1;
- pMode->CrtcVBlankStart >>= 1;
- pMode->CrtcVSyncStart >>= 1;
- pMode->CrtcVSyncEnd >>= 1;
- pMode->CrtcVBlankEnd >>= 1;
- pMode->CrtcVTotal >>= 1;
- }
-
- if (pMode->CrtcVTotal > 1024)
- {
- pATIHW->crt[23] |= 0x04U;
- pMode->CrtcVDisplay >>= 1;
- pMode->CrtcVBlankStart >>= 1;
- pMode->CrtcVSyncStart >>= 1;
- pMode->CrtcVSyncEnd >>= 1;
- pMode->CrtcVBlankEnd >>= 1;
- pMode->CrtcVTotal >>= 1;
- }
- else
- {
- pATIHW->crt[23] &= ~0x04U;
- }
-
- pMode->CrtcVDisplay--;
- if (pATI->Chip == ATI_CHIP_18800)
- pMode->CrtcVBlankStart++;
- else
- pMode->CrtcVBlankStart--;
- if (pATI->LCDPanelID >= 0)
- {
- pMode->CrtcVSyncStart--;
- pMode->CrtcVSyncEnd--;
- }
- pMode->CrtcVBlankEnd--;
- if (pATI->Chip < ATI_CHIP_264CT)
- pMode->CrtcVBlankEnd--;
- pMode->CrtcVTotal -= 2;
- pMode->CrtcVAdjusted = TRUE; /* Redundant */
-
- /* Check sync pulse width */
- Index = pMode->CrtcVSyncEnd - pMode->CrtcVSyncStart - 0x0F;
- if (Index > 0)
- {
- pMode->CrtcVSyncStart += Index / 2;
- pMode->CrtcVSyncEnd = pMode->CrtcVSyncStart + 0x0F;
- }
-
- /* Check blank pulse width */
- Index = pMode->CrtcVBlankEnd - pMode->CrtcVBlankStart - 0x00FF;
- if (Index > 0)
- {
- if ((pMode->CrtcVBlankEnd - Index) > pMode->CrtcVSyncEnd)
- {
- pMode->CrtcVBlankStart += Index / 2;
- if (pMode->CrtcVBlankStart >= pMode->CrtcVSyncStart)
- pMode->CrtcVBlankStart = pMode->CrtcVSyncStart - 1;
- pMode->CrtcVBlankEnd = pMode->CrtcVBlankStart + 0x00FF;
- }
- else
- {
- Index -= 0x0100;
- if (Index > 0)
- {
- pMode->CrtcVBlankStart += Index / 2;
- if (pMode->CrtcVBlankStart >= pMode->CrtcVSyncStart)
- pMode->CrtcVBlankStart = pMode->CrtcVSyncStart - 1;
- pMode->CrtcVBlankEnd = pMode->CrtcVBlankStart + 0x01FF;
- }
- }
- }
-
- /* Set up sequencer register values */
- if (pMode->Flags & V_CLKDIV2)
- pATIHW->seq[1] = 0x09U;
- else
- pATIHW->seq[1] = 0x01U;
-
- /* Set up CRTC register values */
- pATIHW->crt[0] = pMode->CrtcHTotal;
- pATIHW->crt[1] = pMode->CrtcHDisplay;
- pATIHW->crt[2] = pMode->CrtcHBlankStart;
- pATIHW->crt[3] = (pMode->CrtcHBlankEnd & 0x1FU) | 0x80U;
- Index = ((pMode->CrtcHSkew << 2) + 0x10U) & ~0x1FU;
- if (Index < 0x0080)
- pATIHW->crt[3] |= Index;
- pATIHW->crt[4] = pMode->CrtcHSyncStart;
- pATIHW->crt[5] = ((pMode->CrtcHBlankEnd & 0x20U) << 2) |
- ((pMode->CrtcHSyncEnd & 0x1FU) );
- pATIHW->crt[6] = pMode->CrtcVTotal & 0xFFU;
- pATIHW->crt[7] = ((pMode->CrtcVTotal & 0x0100U) >> 8) |
- ((pMode->CrtcVDisplay & 0x0100U) >> 7) |
- ((pMode->CrtcVSyncStart & 0x0100U) >> 6) |
- ((pMode->CrtcVBlankStart & 0x0100U) >> 5) |
- 0x10U |
- ((pMode->CrtcVTotal & 0x0200U) >> 4) |
- ((pMode->CrtcVDisplay & 0x0200U) >> 3) |
- ((pMode->CrtcVSyncStart & 0x0200U) >> 2);
- pATIHW->crt[9] = ((pMode->CrtcVBlankStart & 0x0200U) >> 4) | 0x40U;
- /*
- * Doublescanned modes are missing the top scanline. Convert
- * doublescanning to multiscanning, using the doublescan bit only as a last
- * resort.
- */
- if ((Index = pMode->VScan) <= 0)
- Index = 1;
- if (pMode->Flags & V_DBLSCAN)
- Index <<= 1;
- Index--;
- pATIHW->crt[9] |= (Index & 0x1FU) | ((Index & 0x20U) << 2);
- pATIHW->crt[16] = pMode->CrtcVSyncStart & 0xFFU;
- pATIHW->crt[17] = (pMode->CrtcVSyncEnd & 0x0FU) | 0x20U;
- pATIHW->crt[18] = pMode->CrtcVDisplay & 0xFFU;
- pATIHW->crt[21] = pMode->CrtcVBlankStart & 0xFFU;
- pATIHW->crt[22] = pMode->CrtcVBlankEnd & 0xFFU;
-}
-
-/*
* ATIVGASet --
*
* This function is called to load the VGA portion of a video state.
@@ -494,53 +192,4 @@ ATIVGASaveScreen
}
}
-/*
- * ATIVGASetDPMSMode --
- *
- * This function sets a VGA's VESA Display Power Management Signaling mode.
- */
-void
-ATIVGASetDPMSMode
-(
- ATIPtr pATI,
- int DPMSMode
-)
-{
- CARD8 seq1, crt17;
-
- switch (DPMSMode)
- {
- case DPMSModeOn: /* HSync on, VSync on */
- seq1 = 0x00U;
- crt17 = 0x80U;
- break;
-
- case DPMSModeStandby: /* HSync off, VSync on -- unsupported */
- seq1 = 0x20U;
- crt17 = 0x80U;
- break;
-
- case DPMSModeSuspend: /* HSync on, VSync off -- unsupported */
- seq1 = 0x20U;
- crt17 = 0x80U;
- break;
-
- case DPMSModeOff: /* HSync off, VSync off */
- seq1 = 0x20U;
- crt17 = 0x00U;
- break;
-
- default: /* Muffle compiler */
- return;
- }
-
- PutReg(SEQX, 0x00U, 0x01U); /* Start synchonous reset */
- seq1 |= GetReg(SEQX, 0x01U) & ~0x20U;
- PutReg(SEQX, 0x01U, seq1);
- crt17 |= GetReg(CRTX(pATI->CPIO_VGABase), 0x17U) & ~0x80U;
- usleep(10000);
- PutReg(CRTX(pATI->CPIO_VGABase), 0x17U, crt17);
- PutReg(SEQX, 0x01U, 0x03U); /* End synchonous reset */
-}
-
#endif /* AVOID_CPIO */
diff --git a/src/ativga.h b/src/ativga.h
index 90c3ef41..3dd6f0e2 100644
--- a/src/ativga.h
+++ b/src/ativga.h
@@ -31,11 +31,9 @@
extern void ATIVGAPreInit(ATIPtr, ATIHWPtr);
extern void ATIVGASave(ATIPtr, ATIHWPtr);
-extern void ATIVGACalculate(ATIPtr, ATIHWPtr, DisplayModePtr);
extern void ATIVGASet(ATIPtr, ATIHWPtr);
extern void ATIVGASaveScreen(ATIPtr, int);
-extern void ATIVGASetDPMSMode(ATIPtr, int);
#endif /* AVOID_CPIO */
diff --git a/src/ativgaio.h b/src/ativgaio.h
index 0409a727..c73e8ae1 100644
--- a/src/ativgaio.h
+++ b/src/ativgaio.h
@@ -29,9 +29,11 @@
#define ___ATIVGAIO_H___ 1
-#include "atiio.h"
+#include "atiregs.h"
#include "atipriv.h"
+#include "compiler.h"
+
#ifndef AVOID_CPIO
extern void ATISetVGAIOBase(ATIPtr, const CARD8);
diff --git a/src/atividmem.c b/src/atividmem.c
index d06ca7c1..99560f58 100644
--- a/src/atividmem.c
+++ b/src/atividmem.c
@@ -25,7 +25,6 @@
#endif
#include "ati.h"
-#include "atiadapter.h"
#include "atistruct.h"
#include "atividmem.h"
@@ -87,7 +86,7 @@ ATIUnmapVGA
xf86UnMapVidMem(iScreen, pATI->pBank, 0x00010000U);
- pATI->pBank = pATI->BankInfo.pBankA = pATI->BankInfo.pBankB = NULL;
+ pATI->pBank = NULL;
}
#endif /* AVOID_CPIO */
@@ -104,18 +103,7 @@ ATIUnmapLinear
ATIPtr pATI
)
{
-
-#ifdef AVOID_CPIO
-
- if (!pATI->pMemory)
- return;
-
-#else /* AVOID_CPIO */
-
- if (pATI->pMemory != pATI->pBank)
-
-#endif /* AVOID_CPIO */
-
+ if (pATI->pMemory)
{
xf86UnMapVidMem(iScreen, pATI->pMemory, pATI->LinearSize);
@@ -179,35 +167,17 @@ ATIMapApertures
ATIPtr pATI
)
{
- pciVideoPtr pVideo;
- PCITAG Tag;
- unsigned long PageSize;
+ pciVideoPtr pVideo = pATI->PCIInfo;
+ PCITAG Tag = ((pciConfigPtr)(pVideo->thisCard))->tag;
+ unsigned long PageSize = getpagesize();
if (pATI->Mapped)
return TRUE;
#ifndef AVOID_CPIO
- if (pATI->VGAAdapter == ATI_ADAPTER_NONE)
-
-#endif /* AVOID_CPIO */
-
- {
- if (!pATI->LinearBase && !pATI->Block0Base)
- return FALSE;
- }
-
- PageSize = getpagesize();
-
- if ((pVideo = pATI->PCIInfo))
- Tag = ((pciConfigPtr)(pVideo->thisCard))->tag;
- else
- Tag = 0;
-
-#ifndef AVOID_CPIO
-
/* Map VGA aperture */
- if (pATI->VGAAdapter != ATI_ADAPTER_NONE)
+ if (pATI->VGAAdapter)
{
/*
* No relocation, resizing, caching or write-combining of this
@@ -223,10 +193,6 @@ ATIMapApertures
if (!pATI->pBank)
return FALSE;
- pATI->pMemory =
- pATI->BankInfo.pBankA =
- pATI->BankInfo.pBankB = pATI->pBank;
-
pATI->Mapped = TRUE;
}
diff --git a/src/atiwonder.c b/src/atiwonder.c
index e6a4ec26..371e251a 100644
--- a/src/atiwonder.c
+++ b/src/atiwonder.c
@@ -74,21 +74,12 @@ ATIVGAWonderPreInit
)
{
pATIHW->b3 = ATIGetExtReg(0xB3U) & 0x20U;
- if (pATI->depth <= 4)
- pATIHW->b6 = 0x40U;
- else
pATIHW->b6 = 0x04U;
- if (pATI->Chip <= ATI_CHIP_18800)
- pATIHW->ba = 0x08U;
- else if (pATI->Chip >= ATI_CHIP_28800_2)
- {
- if (pATI->VideoRAM > 256)
- pATIHW->b6 |= 0x01U;
+ pATIHW->b6 |= 0x01U;
pATIHW->bf = ATIGetExtReg(0xBFU) & 0x5FU;
pATIHW->a3 = ATIGetExtReg(0xA3U) & 0x67U;
pATIHW->ab = ATIGetExtReg(0xABU) & 0xE7U;
pATIHW->ae = ATIGetExtReg(0xAEU) & 0xE0U;
- }
}
/*
@@ -114,10 +105,8 @@ ATIVGAWonderSave
pATIHW->b9 = ATIGetExtReg(0xB9U);
pATIHW->ba = ATIGetExtReg(0xBAU);
pATIHW->bd = ATIGetExtReg(0xBDU);
- if (pATI->Chip > ATI_CHIP_18800)
{
pATIHW->be = ATIGetExtReg(0xBEU);
- if (pATI->Chip >= ATI_CHIP_28800_2)
{
pATIHW->bf = ATIGetExtReg(0xBFU);
pATIHW->a3 = ATIGetExtReg(0xA3U);
@@ -132,138 +121,6 @@ ATIVGAWonderSave
}
/*
- * ATIVGAWonderCalculate --
- *
- * This function fills in the VGA Wonder portion of an ATIHWRec structure
- * occurrence.
- */
-void
-ATIVGAWonderCalculate
-(
- ATIPtr pATI,
- ATIHWPtr pATIHW,
- DisplayModePtr pMode
-)
-{
- /* Set up the default horizontal display enable skew */
- if ((pATI->Chip >= ATI_CHIP_28800_2) && (pATI->Chip <= ATI_CHIP_28800_6) &&
- !(pMode->Flags & V_HSKEW))
- {
- /*
- * Modes using the higher clock frequencies need a non-zero Display
- * Enable Skew. The following number has been empirically determined
- * to be somewhere between 4.2 and 4.7 MHz.
- */
-# define DisplayEnableSkewThreshold 4500
-
- /* Set a reasonable default Display Enable Skew */
- pMode->HSkew = pMode->CrtcHSkew =
- ATIDivide(pMode->SynthClock, DisplayEnableSkewThreshold, 0, 0);
- }
- pMode->Flags |= V_HSKEW;
-
- /*
- * Fill in mode-specific VGA Wonder data.
- */
- pATIHW->b0 = 0x00U;
- if (pATI->depth >= 8)
- pATIHW->b0 = 0x20U;
- if (pATI->Chip >= ATI_CHIP_28800_2)
- {
- if (pATI->VideoRAM > 512)
- pATIHW->b0 |= 0x08U;
- else if (pATI->VideoRAM > 256)
- pATIHW->b0 |= 0x10U;
- }
- else if (pATI->depth <= 4)
- {
- if (pATI->VideoRAM > 256)
- pATIHW->b0 |= 0x08U;
- }
- else
- {
- if (pATI->VideoRAM > 256)
- pATIHW->b0 |= 0x18U;
- else
- pATIHW->b0 |= 0x06U;
- }
- pATIHW->b1 = ATIGetExtReg(0xB1U) & 0x04U;
- /*
- * Setting the following bit causes hangs on return to text mode from
- * packed modes on 18800-1's. The hang occurs because the adapter's I/O
- * response is completely disabled when the register is rewritten. The
- * adapter can then only be re-enabled with a powerdown. The bit, when on,
- * blanks out the overscan.
- */
- if ((pATI->Chip == ATI_CHIP_18800_1) && (pATI->depth >= 8))
- pATIHW->b5 = 0x00U;
- else
- pATIHW->b5 = 0x01U;
- pATIHW->b8 = ATIGetExtReg(0xB8U) & 0xC0U;
- pATIHW->b9 = ATIGetExtReg(0xB9U) & 0x7FU;
- pATIHW->bd = ATIGetExtReg(0xBDU) & 0x02U;
- if (pATI->Chip <= ATI_CHIP_18800)
- pATIHW->b2 = ATIGetExtReg(0xB2U) & 0xC0U;
- else
- {
- pATIHW->b2 = 0x00U;
- pATIHW->be = (ATIGetExtReg(0xBEU) & 0x30U) | 0x09U;
- if (pATI->Chip >= ATI_CHIP_28800_2)
- {
- pATIHW->a6 = (ATIGetExtReg(0xA6U) & 0x38U) | 0x04U;
- pATIHW->a7 = (ATIGetExtReg(0xA7U) & 0xBEU) ;
- pATIHW->ac = (ATIGetExtReg(0xACU) & 0x8EU) ;
- }
- }
- if (pMode->Flags & V_INTERLACE)
- { /* Enable interlace */
- if (pATI->Chip <= ATI_CHIP_18800)
- pATIHW->b2 |= 0x01U;
- else
- pATIHW->be |= 0x02U;
- }
-#if 0 /* This is no longer needed but is left in for reference */
- if (pMode->Flags & V_DBLSCAN) /* Enable doublescan */
- pATIHW->b1 |= 0x08U;
-#endif
- if (pATI->OptionCSync || (pMode->Flags & (V_CSYNC | V_PCSYNC)))
- pATIHW->bd |= 0x08U; /* Enable composite sync */
- if (pMode->Flags & V_NCSYNC)
- pATIHW->bd |= 0x09U; /* Invert composite sync */
- if (pMode->HSkew > 0)
- {
- if (pMode->HSkew <= 3)
- pATIHW->b5 |= 0x04U;
- else if (pATI->Chip >= ATI_CHIP_28800_2)
- switch ((pMode->HSkew + 4) >> 3)
- {
- case 1: /* Use ATI override */
- pATIHW->crt[3] &= ~0x60U;
- pATIHW->b0 |= 0x01U;
- break;
- case 2: /* Use ATI override */
- pATIHW->crt[3] &= ~0x60U;
- pATIHW->a6 |= 0x01U;
- break;
- case 3:
- pATIHW->crt[3] |= 0x60U;
- break;
- case 4:
- pATIHW->a7 |= 0x40U;
- break;
- case 5:
- pATIHW->ac |= 0x10U;
- break;
- case 6:
- pATIHW->ac |= 0x20U;
- break;
- default:
- break;
- }
- }
-}
-
-/*
* ATIVGAWonderSet --
*
* This function loads the VGA Wonder portion of a video state.
@@ -275,12 +132,8 @@ ATIVGAWonderSet
ATIHWPtr pATIHW
)
{
- if (pATI->Chip <= ATI_CHIP_18800)
- ATIModifyExtReg(pATI, 0xB2U, -1, 0x00U, pATIHW->b2);
- else
{
ATIModifyExtReg(pATI, 0xBEU, -1, 0x00U, pATIHW->be);
- if (pATI->Chip >= ATI_CHIP_28800_2)
{
ATIModifyExtReg(pATI, 0xBFU, -1, 0x00U, pATIHW->bf);
ATIModifyExtReg(pATI, 0xA3U, -1, 0x00U, pATIHW->a3);
diff --git a/src/atiwonder.h b/src/atiwonder.h
index 1412be22..2fe5e5ea 100644
--- a/src/atiwonder.h
+++ b/src/atiwonder.h
@@ -31,7 +31,6 @@
extern void ATIVGAWonderPreInit(ATIPtr, ATIHWPtr);
extern void ATIVGAWonderSave(ATIPtr, ATIHWPtr);
-extern void ATIVGAWonderCalculate(ATIPtr, ATIHWPtr, DisplayModePtr);
extern void ATIVGAWonderSet(ATIPtr, ATIHWPtr);
#endif /* AVOID_CPIO */
diff --git a/src/atiwonderio.c b/src/atiwonderio.c
index 79293d82..e6c0db78 100644
--- a/src/atiwonderio.c
+++ b/src/atiwonderio.c
@@ -60,29 +60,6 @@ ATIModifyExtReg
if (CurrentValue == NewValue)
return;
- /*
- * The following is taken from ATI's VGA Wonder programmer's reference
- * manual which says that this is needed to "ensure the proper state of the
- * 8/16 bit ROM toggle". I suspect a timing glitch appeared in the 18800
- * after its die was cast. 18800-1 and later chips do not exhibit this
- * problem.
- */
- if ((pATI->Chip <= ATI_CHIP_18800) && (Index == 0xB2U) &&
- ((NewValue ^ 0x40U) & CurrentValue & 0x40U))
- {
- CARD8 misc = inb(R_GENMO);
- CARD8 bb = ATIGetExtReg(0xBBU);
-
- outb(GENMO, (misc & 0xF3U) | 0x04U | ((bb & 0x10U) >> 1));
- CurrentValue &= (CARD8)(~0x40U);
- ATIPutExtReg(0xB2U, CurrentValue);
- ATIDelay(5);
- outb(GENMO, misc);
- ATIDelay(5);
- if (CurrentValue != NewValue)
- ATIPutExtReg(0xB2U, NewValue);
- }
- else
ATIPutExtReg(Index, NewValue);
}
diff --git a/src/atixv.c b/src/atixv.c
index 35223ec9..ef86ec3d 100644
--- a/src/atixv.c
+++ b/src/atixv.c
@@ -24,7 +24,6 @@
#include "config.h"
#endif
-#include "atiadapter.h"
#include "atimach64xv.h"
#include "atistruct.h"
#include "atixv.h"
@@ -68,16 +67,9 @@ ATIXVInitializeAdaptor
XF86VideoAdaptorPtr *ppAdaptor = NULL;
int nAdaptor;
- switch (pATI->Adapter)
{
- case ATI_ADAPTER_MACH64:
nAdaptor = ATIMach64XVInitialiseAdaptor(pScreen, pScreenInfo, pATI,
&ppAdaptor);
- break;
-
- default:
- nAdaptor = 0;
- break;
}
if (pppAdaptor)
@@ -100,15 +92,6 @@ ATIXVPreInit
ATIPtr pATI
)
{
-
-#ifndef AVOID_CPIO
-
- /* Currently a linear aperture is needed ... */
- if (!pATI->LinearBase)
- return;
-
-#endif /* AVOID_CPIO */
-
(void)xf86XVRegisterGenericAdaptorDriver(ATIXVInitializeAdaptor);
}
@@ -129,9 +112,7 @@ ATIInitializeXVideo
int nAdaptor;
Bool result;
- if (!(pScreenInfo->memPhysBase = pATI->LinearBase))
- return FALSE;
-
+ pScreenInfo->memPhysBase = pATI->LinearBase;
pScreenInfo->fbOffset = 0;
nAdaptor = xf86XVListGenericAdaptors(pScreenInfo, &ppAdaptor);
@@ -156,13 +137,5 @@ ATICloseXVideo
ATIPtr pATI
)
{
- switch (pATI->Adapter)
- {
- case ATI_ADAPTER_MACH64:
ATIMach64CloseXVideo(pScreen, pScreenInfo, pATI);
- break;
-
- default:
- break;
- }
}