summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorBrice Goglin <bgoglin@debian.org>2008-01-17 11:30:08 +0100
committerBrice Goglin <bgoglin@debian.org>2008-01-17 11:30:08 +0100
commitf90487af086e6270489dde45620b3907a77122ce (patch)
tree39ca2b5480780ad0c1cad4c151bd1049cd64c1af /src
parent204e868de3f224cb3fb20d24e5915609de0b7df9 (diff)
parent6bd510a211f25d52e74791e4a429cd2218ced541 (diff)
downloadxf86-video-ati-frc-f90487af086e6270489dde45620b3907a77122ce.tar.gz
xf86-video-ati-frc-f90487af086e6270489dde45620b3907a77122ce.tar.bz2
Merge branch 'master' of git://git.freedesktop.org/git/xorg/driver/xf86-video-ati into debian-experimental
Diffstat (limited to 'src')
-rw-r--r--src/Makefile.am13
-rw-r--r--src/ati.c689
-rw-r--r--src/ati.h74
-rw-r--r--src/atibus.c1
-rw-r--r--src/atichip.c4
-rw-r--r--src/atichip.h30
-rw-r--r--src/aticonsole.c9
-rw-r--r--src/atidri.c8
-rw-r--r--src/atii2c.c3
-rw-r--r--src/atiload.c173
-rw-r--r--src/atiload.h37
-rw-r--r--src/atimach64probe.c58
-rw-r--r--src/atimach64probe.h6
-rw-r--r--src/atimach64version.h59
-rw-r--r--src/atimisc.c87
-rw-r--r--src/atimode.c9
-rw-r--r--src/atimodule.c35
-rw-r--r--src/atimodule.h30
-rw-r--r--src/atipreinit.c6
-rw-r--r--src/atiprobe.c24
-rw-r--r--src/atombios_output.c78
-rw-r--r--src/r128.h6
-rw-r--r--src/r128_cursor.c2
-rw-r--r--src/r128_dri.c16
-rw-r--r--src/r128_driver.c275
-rw-r--r--src/r128_misc.c6
-rw-r--r--src/r128_probe.c17
-rw-r--r--src/r128_probe.h5
-rw-r--r--src/r128_video.c8
-rw-r--r--src/radeon.h2
-rw-r--r--src/radeon_accelfuncs.c10
-rw-r--r--src/radeon_atombios.c8
-rw-r--r--src/radeon_bios.c115
-rw-r--r--src/radeon_commonfuncs.c136
-rw-r--r--src/radeon_crtc.c2
-rw-r--r--src/radeon_driver.c216
-rw-r--r--src/radeon_exa.c17
-rw-r--r--src/radeon_exa_funcs.c15
-rw-r--r--src/radeon_exa_render.c404
-rw-r--r--src/radeon_misc.c6
-rw-r--r--src/radeon_mm_i2c.c14
-rw-r--r--src/radeon_output.c42
-rw-r--r--src/radeon_probe.c17
-rw-r--r--src/radeon_probe.h21
-rw-r--r--src/radeon_reg.h203
-rw-r--r--src/radeon_video.c3
-rw-r--r--src/theatre.h38
-rw-r--r--src/theatre_detect.h11
48 files changed, 1329 insertions, 1719 deletions
diff --git a/src/Makefile.am b/src/Makefile.am
index 5e95dd7..661dcd8 100644
--- a/src/Makefile.am
+++ b/src/Makefile.am
@@ -86,10 +86,10 @@ ati_drv_ladir = @moduledir@/drivers
ati_drv_la_SOURCES = \
ati.c atimodule.c
-atimisc_drv_la_LTLIBRARIES = atimisc_drv.la
-atimisc_drv_la_LDFLAGS = -module -avoid-version
-atimisc_drv_ladir = @moduledir@/drivers
-atimisc_drv_la_SOURCES = \
+mach64_drv_la_LTLIBRARIES = mach64_drv.la
+mach64_drv_la_LDFLAGS = -module -avoid-version
+mach64_drv_ladir = @moduledir@/drivers
+mach64_drv_la_SOURCES = \
atibus.c atichip.c atiprobe.c atividmem.c \
atiadjust.c atiaudio.c aticlock.c aticonfig.c aticonsole.c \
atidac.c atidecoder.c atidsp.c atii2c.c \
@@ -99,16 +99,12 @@ atimisc_drv_la_SOURCES = \
atiload.c atimisc.c atimach64probe.c $(ATIMISC_CPIO_SOURCES) \
$(ATIMISC_DGA_SOURCES) $(ATIMISC_DRI_SRCS) $(ATIMISC_EXA_SOURCES)
-if XSERVER_LIBPCIACCESS
-# r128 has not been ported yet
-else
r128_drv_la_LTLIBRARIES = r128_drv.la
r128_drv_la_LDFLAGS = -module -avoid-version
r128_drv_ladir = @moduledir@/drivers
r128_drv_la_SOURCES = \
r128_accel.c r128_cursor.c r128_dga.c r128_driver.c \
r128_video.c r128_misc.c r128_probe.c $(R128_DRI_SRCS)
-endif
radeon_drv_la_LTLIBRARIES = radeon_drv.la
radeon_drv_la_LDFLAGS = -module -avoid-version
@@ -179,7 +175,6 @@ EXTRA_DIST = \
atimach64io.h \
atimach64probe.h \
atimode.h \
- atimodule.h \
atioption.h \
atipreinit.h \
atiprint.h \
diff --git a/src/ati.c b/src/ati.c
index ada165f..caee443 100644
--- a/src/ati.c
+++ b/src/ati.c
@@ -63,12 +63,25 @@
#include "atipcirename.h"
#include "ati.h"
-#include "atimodule.h"
#include "ativersion.h"
-#include "atimach64probe.h"
-#include "radeon_probe.h"
-#include "r128_probe.h"
+/* names duplicated from version headers */
+#define MACH64_NAME "MACH64"
+#define MACH64_DRIVER_NAME "mach64"
+#define R128_NAME "R128"
+#define R128_DRIVER_NAME "r128"
+#define RADEON_NAME "RADEON"
+#define RADEON_DRIVER_NAME "radeon"
+
+enum
+{
+ ATI_CHIP_FAMILY_NONE = 0,
+ ATI_CHIP_FAMILY_Mach64,
+ ATI_CHIP_FAMILY_Rage128,
+ ATI_CHIP_FAMILY_Radeon
+};
+
+static int ATIChipID(const CARD16);
#ifdef XSERVER_LIBPCIACCESS
static const struct pci_id_match ati_device_match = {
@@ -127,7 +140,7 @@ ATIProbe
#endif
Bool DoMach64 = FALSE;
Bool DoRage128 = FALSE, DoRadeon = FALSE;
- ATIChipType Chip;
+ int Chip;
#ifndef XSERVER_LIBPCIACCESS
@@ -143,12 +156,12 @@ ATIProbe
continue;
/* Check for Rage128's, Radeon's and later adapters */
- Chip = ATIChipID(PCI_DEV_DEVICE_ID(pVideo), PCI_DEV_REVISION(pVideo));
- if (Chip <= ATI_CHIP_Mach64)
+ Chip = ATIChipID(PCI_DEV_DEVICE_ID(pVideo));
+ if (Chip == ATI_CHIP_FAMILY_Mach64)
DoMach64 = TRUE;
- else if (Chip <= ATI_CHIP_Rage128)
+ else if (Chip == ATI_CHIP_FAMILY_Rage128)
DoRage128 = TRUE;
- else if (Chip <= ATI_CHIP_Radeon)
+ else if (Chip == ATI_CHIP_FAMILY_Radeon)
DoRadeon = TRUE;
}
@@ -168,12 +181,12 @@ ATIProbe
continue;
/* Check for Rage128's, Radeon's and later adapters */
- Chip = ATIChipID(PCI_DEV_DEVICE_ID(pVideo), PCI_DEV_REVISION(pVideo));
- if (Chip <= ATI_CHIP_Mach64)
+ Chip = ATIChipID(PCI_DEV_DEVICE_ID(pVideo));
+ if (Chip == ATI_CHIP_FAMILY_Mach64)
DoMach64 = TRUE;
- else if (Chip <= ATI_CHIP_Rage128)
+ else if (Chip == ATI_CHIP_FAMILY_Rage128)
DoRage128 = TRUE;
- else if (Chip <= ATI_CHIP_Radeon)
+ else if (Chip == ATI_CHIP_FAMILY_Radeon)
DoRadeon = TRUE;
}
@@ -184,67 +197,70 @@ ATIProbe
/* Call Radeon driver probe */
if (DoRadeon)
{
- pointer radeon = xf86LoadDrvSubModule(pDriver, "radeon");
+ DriverRec *radeon;
+
+ if (!LoaderSymbol(RADEON_NAME))
+ xf86LoadDrvSubModule(pDriver, RADEON_DRIVER_NAME);
+
+ radeon = (DriverRec*)LoaderSymbol(RADEON_NAME);
if (!radeon)
{
xf86Msg(X_ERROR,
- ATI_NAME ": Failed to load \"radeon\" module.\n");
+ ATI_NAME ": Failed to find \"radeon\" driver symbol.\n");
return FALSE;
}
- xf86LoaderReqSymLists(RADEONSymbols, NULL);
-
- RADEONIdentify(flags);
+ radeon->Identify(flags);
- if (RADEONProbe(pDriver, flags))
+ if (radeon->Probe(pDriver, flags))
return TRUE;
-
- xf86UnloadSubModule(radeon);
}
/* Call Rage 128 driver probe */
if (DoRage128)
{
- pointer r128 = xf86LoadDrvSubModule(pDriver, "r128");
+ DriverRec *r128;
+
+ if (!LoaderSymbol(R128_NAME))
+ xf86LoadDrvSubModule(pDriver, R128_DRIVER_NAME);
+
+ r128 = (DriverRec*)LoaderSymbol(R128_NAME);
if (!r128)
{
xf86Msg(X_ERROR,
- ATI_NAME ": Failed to load \"r128\" module.\n");
+ ATI_NAME ": Failed to find \"r128\" driver symbol.\n");
return FALSE;
}
- xf86LoaderReqSymLists(R128Symbols, NULL);
+ r128->Identify(flags);
- R128Identify(flags);
-
- if (R128Probe(pDriver, flags))
+ if (r128->Probe(pDriver, flags))
return TRUE;
-
- xf86UnloadSubModule(r128);
}
/* Call Mach64 driver probe */
if (DoMach64)
{
- pointer atimisc = xf86LoadDrvSubModule(pDriver, "atimisc");
+ DriverRec *mach64;
+
+ if (!LoaderSymbol(MACH64_NAME))
+ xf86LoadDrvSubModule(pDriver, MACH64_DRIVER_NAME);
- if (!atimisc)
+ mach64 = (DriverRec*)LoaderSymbol(MACH64_NAME);
+
+ if (!mach64)
{
xf86Msg(X_ERROR,
- ATI_NAME ": Failed to load \"atimisc\" module.\n");
+ ATI_NAME ": Failed to find \"mach64\" driver symbol.\n");
return FALSE;
}
- xf86LoaderReqSymLists(ATISymbols, NULL);
-
- Mach64Identify(flags);
+ mach64->Identify(flags);
- if (Mach64Probe(pDriver, flags))
+ if (mach64->Probe(pDriver, flags))
return TRUE;
-
- xf86UnloadSubModule(atimisc);
}
return FALSE;
@@ -263,17 +279,52 @@ ATIAvailableOptions
)
{
CARD16 ChipType = ChipId & 0xffff;
- ATIChipType Chip;
+ int Chip;
/* Probe should have loaded the appropriate subdriver by this point */
- Chip = ATIChipID(ChipType, 0x0); /* chip revision is don't care */
- if (Chip <= ATI_CHIP_Mach64)
- return Mach64AvailableOptions(ChipId, BusId);
- else if (Chip <= ATI_CHIP_Rage128)
- return R128AvailableOptions(ChipId, BusId);
- else if (Chip <= ATI_CHIP_Radeon)
- return RADEONAvailableOptions(ChipId, BusId);
+ Chip = ATIChipID(ChipType);
+ if (Chip == ATI_CHIP_FAMILY_Mach64)
+ {
+ DriverRec *mach64 = (DriverRec*)LoaderSymbol(MACH64_NAME);
+
+ if (!mach64)
+ {
+ xf86Msg(X_ERROR,
+ ATI_NAME ": Failed to find \"mach64\" driver symbol.\n");
+ return NULL;
+ }
+
+ return mach64->AvailableOptions(ChipId, BusId);
+ }
+
+ if (Chip == ATI_CHIP_FAMILY_Rage128)
+ {
+ DriverRec *r128 = (DriverRec*)LoaderSymbol(R128_NAME);
+
+ if (!r128)
+ {
+ xf86Msg(X_ERROR,
+ ATI_NAME ": Failed to find \"r128\" driver symbol.\n");
+ return NULL;
+ }
+
+ return r128->AvailableOptions(ChipId, BusId);
+ }
+
+ if (Chip == ATI_CHIP_FAMILY_Radeon)
+ {
+ DriverRec *radeon = (DriverRec*)LoaderSymbol(RADEON_NAME);
+
+ if (!radeon)
+ {
+ xf86Msg(X_ERROR,
+ ATI_NAME ": Failed to find \"radeon\" driver symbol.\n");
+ return NULL;
+ }
+
+ return radeon->AvailableOptions(ChipId, BusId);
+ }
return NULL;
}
@@ -291,467 +342,105 @@ _X_EXPORT DriverRec ATI =
};
/*
- * Chip-related definitions.
- */
-const char *ATIChipNames[] =
-{
- "Unknown",
- "ATI 88800GX-C",
- "ATI 88800GX-D",
- "ATI 88800GX-E",
- "ATI 88800GX-F",
- "ATI 88800GX",
- "ATI 88800CX",
- "ATI 264CT",
- "ATI 264ET",
- "ATI 264VT",
- "ATI 3D Rage",
- "ATI 264VT-B",
- "ATI 3D Rage II",
- "ATI 264VT3",
- "ATI 3D Rage II+DVD",
- "ATI 3D Rage LT",
- "ATI 264VT4",
- "ATI 3D Rage IIc",
- "ATI 3D Rage Pro",
- "ATI 3D Rage LT Pro",
- "ATI 3D Rage XL or XC",
- "ATI 3D Rage Mobility",
- "ATI unknown Mach64",
- "ATI Rage 128 GL",
- "ATI Rage 128 VR",
- "ATI Rage 128 Pro GL",
- "ATI Rage 128 Pro VR",
- "ATI Rage 128 Pro ULTRA",
- "ATI Rage 128 Mobility M3",
- "ATI Rage 128 Mobility M4",
- "ATI unknown Rage 128"
- "ATI Radeon 7200",
- "ATI Radeon 7000 (VE)",
- "ATI Radeon Mobility M6",
- "ATI Radeon IGP320",
- "ATI Radeon IGP330/340/350",
- "ATI Radeon 7000 IGP",
- "ATI Radeon 7500",
- "ATI Radeon Mobility M7",
- "ATI Radeon 8500/9100",
- "ATI Radeon 9000",
- "ATI Radeon Mobility M9",
- "ATI Radeon 9100 IGP",
- "ATI Radeon 9200 IGP",
- "ATI Radeon 9200",
- "ATI Radeon Mobility M9+",
- "ATI Radeon 9700/9500",
- "ATI Radeon 9600/9550",
- "ATI Radeon 9800",
- "ATI Radeon 9800XT",
- "ATI Radeon X300/X550/M22",
- "ATI Radeon X600/X550/M24",
- "ATI Radeon X800/M18 AGP",
- "ATI Radeon X800/M28 PCIE",
- "ATI Radeon X800XL PCIE",
- "ATI Radeon X850 PCIE",
- "ATI Radeon X850 AGP",
- "ATI Radeon X700",
- "ATI Xpress 200"
- "ATI unknown Radeon",
- "ATI Rage HDTV"
-};
-
-#include "atichip.h"
-
-/*
* ATIChipID --
*
- * This returns the ATI_CHIP_* value (generally) associated with a particular
- * ChipID/ChipRev combination.
+ * This returns the ATI_CHIP_FAMILY_* value associated with a particular ChipID.
*/
-ATIChipType
-ATIChipID
-(
- const CARD16 ChipID,
- const CARD8 ChipRev
-)
+static int
+ATIChipID(const CARD16 ChipID)
{
switch (ChipID)
{
- case OldChipID('G', 'X'): case NewChipID('G', 'X'):
- switch (ChipRev)
- {
- case 0x00U:
- return ATI_CHIP_88800GXC;
-
- case 0x01U:
- return ATI_CHIP_88800GXD;
-
- case 0x02U:
- return ATI_CHIP_88800GXE;
-
- case 0x03U:
- return ATI_CHIP_88800GXF;
-
- default:
- return ATI_CHIP_88800GX;
- }
-
- case OldChipID('C', 'X'): case NewChipID('C', 'X'):
- return ATI_CHIP_88800CX;
-
- case OldChipID('C', 'T'): case NewChipID('C', 'T'):
- return ATI_CHIP_264CT;
-
- case OldChipID('E', 'T'): case NewChipID('E', 'T'):
- return ATI_CHIP_264ET;
-
- case OldChipID('V', 'T'): case NewChipID('V', 'T'):
- /* For simplicity, ignore ChipID discrepancy that can occur here */
- if (!(ChipRev & GetBits(CFG_CHIP_VERSION, CFG_CHIP_REV)))
- return ATI_CHIP_264VT;
- return ATI_CHIP_264VTB;
-
- case OldChipID('G', 'T'): case NewChipID('G', 'T'):
- if (!(ChipRev & GetBits(CFG_CHIP_VERSION, CFG_CHIP_REV)))
- return ATI_CHIP_264GT;
- return ATI_CHIP_264GTB;
-
- case OldChipID('V', 'U'): case NewChipID('V', 'U'):
- return ATI_CHIP_264VT3;
-
- case OldChipID('G', 'U'): case NewChipID('G', 'U'):
- return ATI_CHIP_264GTDVD;
-
- case OldChipID('L', 'G'): case NewChipID('L', 'G'):
- return ATI_CHIP_264LT;
-
- case OldChipID('V', 'V'): case NewChipID('V', 'V'):
- return ATI_CHIP_264VT4;
-
- case OldChipID('G', 'V'): case NewChipID('G', 'V'):
- case OldChipID('G', 'W'): case NewChipID('G', 'W'):
- case OldChipID('G', 'Y'): case NewChipID('G', 'Y'):
- case OldChipID('G', 'Z'): case NewChipID('G', 'Z'):
- return ATI_CHIP_264GT2C;
-
- case OldChipID('G', 'B'): case NewChipID('G', 'B'):
- case OldChipID('G', 'D'): case NewChipID('G', 'D'):
- case OldChipID('G', 'I'): case NewChipID('G', 'I'):
- case OldChipID('G', 'P'): case NewChipID('G', 'P'):
- case OldChipID('G', 'Q'): case NewChipID('G', 'Q'):
- return ATI_CHIP_264GTPRO;
-
- case OldChipID('L', 'B'): case NewChipID('L', 'B'):
- case OldChipID('L', 'D'): case NewChipID('L', 'D'):
- case OldChipID('L', 'I'): case NewChipID('L', 'I'):
- case OldChipID('L', 'P'): case NewChipID('L', 'P'):
- case OldChipID('L', 'Q'): case NewChipID('L', 'Q'):
- return ATI_CHIP_264LTPRO;
-
- case OldChipID('G', 'L'): case NewChipID('G', 'L'):
- case OldChipID('G', 'M'): case NewChipID('G', 'M'):
- case OldChipID('G', 'N'): case NewChipID('G', 'N'):
- case OldChipID('G', 'O'): case NewChipID('G', 'O'):
- case OldChipID('G', 'R'): case NewChipID('G', 'R'):
- case OldChipID('G', 'S'): case NewChipID('G', 'S'):
- return ATI_CHIP_264XL;
-
- case OldChipID('L', 'M'): case NewChipID('L', 'M'):
- case OldChipID('L', 'N'): case NewChipID('L', 'N'):
- case OldChipID('L', 'R'): case NewChipID('L', 'R'):
- case OldChipID('L', 'S'): case NewChipID('L', 'S'):
- return ATI_CHIP_MOBILITY;
-
- case NewChipID('R', 'E'):
- case NewChipID('R', 'F'):
- case NewChipID('R', 'G'):
- case NewChipID('S', 'K'):
- case NewChipID('S', 'L'):
- case NewChipID('S', 'M'):
- /* "SN" is listed as ATI_CHIP_RAGE128_4X in ATI docs */
- case NewChipID('S', 'N'):
- return ATI_CHIP_RAGE128GL;
-
- case NewChipID('R', 'K'):
- case NewChipID('R', 'L'):
- /*
- * ATI documentation lists SE/SF/SG under both ATI_CHIP_RAGE128VR
- * and ATI_CHIP_RAGE128_4X, and lists SH/SK/SL under Rage 128 4X only.
- * I'm stuffing them here for now until this can be clarified as ATI
- * documentation doesn't mention their details. <mharris@redhat.com>
- */
- case NewChipID('S', 'E'):
- case NewChipID('S', 'F'):
- case NewChipID('S', 'G'):
- case NewChipID('S', 'H'):
- return ATI_CHIP_RAGE128VR;
-
- /* case NewChipID('S', 'H'): */
- /* case NewChipID('S', 'K'): */
- /* case NewChipID('S', 'L'): */
- /* case NewChipID('S', 'N'): */
- /* return ATI_CHIP_RAGE128_4X; */
-
- case NewChipID('P', 'A'):
- case NewChipID('P', 'B'):
- case NewChipID('P', 'C'):
- case NewChipID('P', 'D'):
- case NewChipID('P', 'E'):
- case NewChipID('P', 'F'):
- return ATI_CHIP_RAGE128PROGL;
-
- case NewChipID('P', 'G'):
- case NewChipID('P', 'H'):
- case NewChipID('P', 'I'):
- case NewChipID('P', 'J'):
- case NewChipID('P', 'K'):
- case NewChipID('P', 'L'):
- case NewChipID('P', 'M'):
- case NewChipID('P', 'N'):
- case NewChipID('P', 'O'):
- case NewChipID('P', 'P'):
- case NewChipID('P', 'Q'):
- case NewChipID('P', 'R'):
- case NewChipID('P', 'S'):
- case NewChipID('P', 'T'):
- case NewChipID('P', 'U'):
- case NewChipID('P', 'V'):
- case NewChipID('P', 'W'):
- case NewChipID('P', 'X'):
- return ATI_CHIP_RAGE128PROVR;
-
- case NewChipID('T', 'F'):
- case NewChipID('T', 'L'):
- case NewChipID('T', 'R'):
- case NewChipID('T', 'S'):
- case NewChipID('T', 'T'):
- case NewChipID('T', 'U'):
- return ATI_CHIP_RAGE128PROULTRA;
-
- case NewChipID('L', 'E'):
- case NewChipID('L', 'F'):
- /*
- * "LK" and "LL" are not in any ATI documentation I can find
- * - mharris
- */
- case NewChipID('L', 'K'):
- case NewChipID('L', 'L'):
- return ATI_CHIP_RAGE128MOBILITY3;
-
- case NewChipID('M', 'F'):
- case NewChipID('M', 'L'):
- return ATI_CHIP_RAGE128MOBILITY4;
-
- case NewChipID('Q', 'D'):
- case NewChipID('Q', 'E'):
- case NewChipID('Q', 'F'):
- case NewChipID('Q', 'G'):
- return ATI_CHIP_RADEON;
-
- case NewChipID('Q', 'Y'):
- case NewChipID('Q', 'Z'):
- case NewChipID('Q', '^'):
- return ATI_CHIP_RADEONVE;
-
- case NewChipID('L', 'Y'):
- case NewChipID('L', 'Z'):
- return ATI_CHIP_RADEONMOBILITY6;
-
- case NewChipID('A', '6'):
- case NewChipID('C', '6'):
- return ATI_CHIP_RS100;
-
- case NewChipID('A', '7'):
- case NewChipID('C', '7'):
- return ATI_CHIP_RS200;
-
- case NewChipID('D', '7'):
- case NewChipID('B', '7'):
- return ATI_CHIP_RS250;
-
- case NewChipID('L', 'W'):
- case NewChipID('L', 'X'):
- return ATI_CHIP_RADEONMOBILITY7;
-
- case NewChipID('Q', 'H'):
- case NewChipID('Q', 'I'):
- case NewChipID('Q', 'J'):
- case NewChipID('Q', 'K'):
- case NewChipID('Q', 'L'):
- case NewChipID('Q', 'M'):
- case NewChipID('Q', 'N'):
- case NewChipID('Q', 'O'):
- case NewChipID('Q', 'h'):
- case NewChipID('Q', 'i'):
- case NewChipID('Q', 'j'):
- case NewChipID('Q', 'k'):
- case NewChipID('Q', 'l'):
- case NewChipID('B', 'B'):
- return ATI_CHIP_R200;
-
- case NewChipID('Q', 'W'):
- case NewChipID('Q', 'X'):
- return ATI_CHIP_RV200;
-
- case NewChipID('I', 'f'):
- case NewChipID('I', 'g'):
- return ATI_CHIP_RV250;
-
- case NewChipID('L', 'd'):
- case NewChipID('L', 'f'):
- case NewChipID('L', 'g'):
- return ATI_CHIP_RADEONMOBILITY9;
-
- case NewChipID('X', '4'):
- case NewChipID('X', '5'):
- return ATI_CHIP_RS300;
-
- case NewChipID('x', '4'):
- case NewChipID('x', '5'):
- return ATI_CHIP_RS350;
-
- case NewChipID('Y', '\''):
- case NewChipID('Y', 'a'):
- case NewChipID('Y', 'b'):
- case NewChipID('Y', 'd'):
- case NewChipID('Y', 'e'):
- return ATI_CHIP_RV280;
-
- case NewChipID('\\', 'a'):
- case NewChipID('\\', 'c'):
- return ATI_CHIP_RADEONMOBILITY9PLUS;
-
- case NewChipID('A', 'D'):
- case NewChipID('A', 'E'):
- case NewChipID('A', 'F'):
- case NewChipID('A', 'G'):
- case NewChipID('N', 'D'):
- case NewChipID('N', 'E'):
- case NewChipID('N', 'F'):
- case NewChipID('N', 'G'):
- return ATI_CHIP_R300;
-
- case NewChipID('A', 'H'):
- case NewChipID('A', 'I'):
- case NewChipID('A', 'J'):
- case NewChipID('A', 'K'):
- case NewChipID('N', 'H'):
- case NewChipID('N', 'I'):
- case NewChipID('N', 'K'):
- return ATI_CHIP_R350;
-
- case NewChipID('A', 'P'):
- case NewChipID('A', 'Q'):
- case NewChipID('A', 'R'):
- case NewChipID('A', 'S'):
- case NewChipID('A', 'T'):
- case NewChipID('A', 'U'):
- case NewChipID('A', 'V'):
- case NewChipID('N', 'P'):
- case NewChipID('N', 'Q'):
- case NewChipID('N', 'R'):
- case NewChipID('N', 'S'):
- case NewChipID('N', 'T'):
- case NewChipID('N', 'V'):
- return ATI_CHIP_RV350;
-
- case NewChipID('N', 'J'):
- return ATI_CHIP_R360;
-
- case NewChipID('[', '\''):
- case NewChipID('[', 'b'):
- case NewChipID('[', 'c'):
- case NewChipID('[', 'd'):
- case NewChipID('[', 'e'):
- case NewChipID('T', '\''):
- case NewChipID('T', 'b'):
- case NewChipID('T', 'd'):
- return ATI_CHIP_RV370;
-
- case NewChipID('>', 'P'):
- case NewChipID('>', 'T'):
- case NewChipID('1', 'P'):
- case NewChipID('1', 'R'):
- case NewChipID('1', 'T'):
- return ATI_CHIP_RV380;
-
- case NewChipID('J', 'H'):
- case NewChipID('J', 'I'):
- case NewChipID('J', 'J'):
- case NewChipID('J', 'K'):
- case NewChipID('J', 'L'):
- case NewChipID('J', 'M'):
- case NewChipID('J', 'N'):
- case NewChipID('J', 'O'):
- case NewChipID('J', 'P'):
- case NewChipID('J', 'T'):
- return ATI_CHIP_R420;
-
- case NewChipID('U', 'H'):
- case NewChipID('U', 'I'):
- case NewChipID('U', 'J'):
- case NewChipID('U', 'K'):
- case NewChipID('U', 'P'):
- case NewChipID('U', 'Q'):
- case NewChipID('U', 'R'):
- case NewChipID('U', 'T'):
- case NewChipID(']', 'W'):
- /* those are m28, not 100% certain they are r423 could
- be r480 but not r430 as their pci id names indicate... */
- case NewChipID(']', 'H'):
- case NewChipID(']', 'I'):
- case NewChipID(']', 'J'):
- return ATI_CHIP_R423;
-
- case NewChipID('U', 'L'):
- case NewChipID('U', 'M'):
- case NewChipID('U', 'N'):
- case NewChipID('U', 'O'):
- return ATI_CHIP_R430;
-
- case NewChipID(']', 'L'):
- case NewChipID(']', 'M'):
- case NewChipID(']', 'N'):
- case NewChipID(']', 'O'):
- case NewChipID(']', 'P'):
- case NewChipID(']', 'R'):
- return ATI_CHIP_R480;
-
- case NewChipID('K', 'I'):
- case NewChipID('K', 'J'):
- case NewChipID('K', 'K'):
- case NewChipID('K', 'L'):
- return ATI_CHIP_R481;
-
- case NewChipID('^', 'H'):
- case NewChipID('^', 'J'):
- case NewChipID('^', 'K'):
- case NewChipID('^', 'L'):
- case NewChipID('^', 'M'):
- case NewChipID('^', 'O'):
- case NewChipID('V', 'J'):
- case NewChipID('V', 'K'):
- case NewChipID('V', 'O'):
- case NewChipID('V', 'R'):
- case NewChipID('V', 'S'):
- return ATI_CHIP_RV410;
-
- case NewChipID('Z', 'A'):
- case NewChipID('Z', 'B'):
- case NewChipID('Z', 'a'):
- case NewChipID('Z', 'b'):
- case NewChipID('Y', 'T'):
- case NewChipID('Y', 'U'):
- case NewChipID('Y', 't'):
- case NewChipID('Y', 'u'):
- return ATI_CHIP_RS400;
-
- case NewChipID('H', 'D'):
- return ATI_CHIP_HDTV;
+ case PCI_CHIP_MACH64GX:
+ case PCI_CHIP_MACH64CX:
+ case PCI_CHIP_MACH64CT:
+ case PCI_CHIP_MACH64ET:
+ case PCI_CHIP_MACH64VT:
+ case PCI_CHIP_MACH64GT:
+ case PCI_CHIP_MACH64VU:
+ case PCI_CHIP_MACH64GU:
+ case PCI_CHIP_MACH64LG:
+ case PCI_CHIP_MACH64VV:
+ case PCI_CHIP_MACH64GV:
+ case PCI_CHIP_MACH64GW:
+ case PCI_CHIP_MACH64GY:
+ case PCI_CHIP_MACH64GZ:
+ case PCI_CHIP_MACH64GB:
+ case PCI_CHIP_MACH64GD:
+ case PCI_CHIP_MACH64GI:
+ case PCI_CHIP_MACH64GP:
+ case PCI_CHIP_MACH64GQ:
+ case PCI_CHIP_MACH64LB:
+ case PCI_CHIP_MACH64LD:
+ case PCI_CHIP_MACH64LI:
+ case PCI_CHIP_MACH64LP:
+ case PCI_CHIP_MACH64LQ:
+ case PCI_CHIP_MACH64GL:
+ case PCI_CHIP_MACH64GM:
+ case PCI_CHIP_MACH64GN:
+ case PCI_CHIP_MACH64GO:
+ case PCI_CHIP_MACH64GR:
+ case PCI_CHIP_MACH64GS:
+ case PCI_CHIP_MACH64LM:
+ case PCI_CHIP_MACH64LN:
+ case PCI_CHIP_MACH64LR:
+ case PCI_CHIP_MACH64LS:
+ return ATI_CHIP_FAMILY_Mach64;
+
+ case PCI_CHIP_RAGE128RE:
+ case PCI_CHIP_RAGE128RF:
+ case PCI_CHIP_RAGE128RG:
+ case PCI_CHIP_RAGE128SK:
+ case PCI_CHIP_RAGE128SL:
+ case PCI_CHIP_RAGE128SM:
+ case PCI_CHIP_RAGE128SN:
+ case PCI_CHIP_RAGE128RK:
+ case PCI_CHIP_RAGE128RL:
+ case PCI_CHIP_RAGE128SE:
+ case PCI_CHIP_RAGE128SF:
+ case PCI_CHIP_RAGE128SG:
+ case PCI_CHIP_RAGE128SH:
+ case PCI_CHIP_RAGE128PA:
+ case PCI_CHIP_RAGE128PB:
+ case PCI_CHIP_RAGE128PC:
+ case PCI_CHIP_RAGE128PD:
+ case PCI_CHIP_RAGE128PE:
+ case PCI_CHIP_RAGE128PF:
+ case PCI_CHIP_RAGE128PG:
+ case PCI_CHIP_RAGE128PH:
+ case PCI_CHIP_RAGE128PI:
+ case PCI_CHIP_RAGE128PJ:
+ case PCI_CHIP_RAGE128PK:
+ case PCI_CHIP_RAGE128PL:
+ case PCI_CHIP_RAGE128PM:
+ case PCI_CHIP_RAGE128PN:
+ case PCI_CHIP_RAGE128PO:
+ case PCI_CHIP_RAGE128PP:
+ case PCI_CHIP_RAGE128PQ:
+ case PCI_CHIP_RAGE128PR:
+ case PCI_CHIP_RAGE128PS:
+ case PCI_CHIP_RAGE128PT:
+ case PCI_CHIP_RAGE128PU:
+ case PCI_CHIP_RAGE128PV:
+ case PCI_CHIP_RAGE128PW:
+ case PCI_CHIP_RAGE128PX:
+ case PCI_CHIP_RAGE128TF:
+ case PCI_CHIP_RAGE128TL:
+ case PCI_CHIP_RAGE128TR:
+ case PCI_CHIP_RAGE128TS:
+ case PCI_CHIP_RAGE128TT:
+ case PCI_CHIP_RAGE128TU:
+ case PCI_CHIP_RAGE128LE:
+ case PCI_CHIP_RAGE128LF:
+#if 0
+ case PCI_CHIP_RAGE128LK:
+ case PCI_CHIP_RAGE128LL:
+#endif
+ case PCI_CHIP_RAGE128MF:
+ case PCI_CHIP_RAGE128ML:
+ return ATI_CHIP_FAMILY_Rage128;
default:
- /*
- * Treat anything else as an unknown Radeon. Please keep the above
- * up-to-date however, as it serves as a central chip list.
- */
- return ATI_CHIP_Radeon;
+ return ATI_CHIP_FAMILY_Radeon;
}
}
diff --git a/src/ati.h b/src/ati.h
index 48ab1cd..0a32acf 100644
--- a/src/ati.h
+++ b/src/ati.h
@@ -25,7 +25,7 @@
#include <unistd.h>
#include "xf86Pci.h"
-#include "atipciids.h"
+#include "xf86PciInfo.h"
#include "xf86.h"
@@ -33,76 +33,4 @@
extern DriverRec ATI;
-/*
- * Chip-related definitions.
- */
-typedef enum
-{
- ATI_CHIP_NONE = 0,
- ATI_CHIP_88800GXC, /* Mach64 */
- ATI_CHIP_88800GXD, /* Mach64 */
- ATI_CHIP_88800GXE, /* Mach64 */
- ATI_CHIP_88800GXF, /* Mach64 */
- ATI_CHIP_88800GX, /* Mach64 */
- ATI_CHIP_88800CX, /* Mach64 */
- ATI_CHIP_264CT, /* Mach64 */
- ATI_CHIP_264ET, /* Mach64 */
- ATI_CHIP_264VT, /* Mach64 */
- ATI_CHIP_264GT, /* Mach64 */
- ATI_CHIP_264VTB, /* Mach64 */
- ATI_CHIP_264GTB, /* Mach64 */
- ATI_CHIP_264VT3, /* Mach64 */
- ATI_CHIP_264GTDVD, /* Mach64 */
- ATI_CHIP_264LT, /* Mach64 */
- ATI_CHIP_264VT4, /* Mach64 */
- ATI_CHIP_264GT2C, /* Mach64 */
- ATI_CHIP_264GTPRO, /* Mach64 */
- ATI_CHIP_264LTPRO, /* Mach64 */
- ATI_CHIP_264XL, /* Mach64 */
- ATI_CHIP_MOBILITY, /* Mach64 */
- ATI_CHIP_Mach64, /* Last among Mach64's */
- ATI_CHIP_RAGE128GL, /* Rage128 */
- ATI_CHIP_RAGE128VR, /* Rage128 */
- ATI_CHIP_RAGE128PROGL, /* Rage128 */
- ATI_CHIP_RAGE128PROVR, /* Rage128 */
- ATI_CHIP_RAGE128PROULTRA, /* Rage128 */
- ATI_CHIP_RAGE128MOBILITY3, /* Rage128 */
- ATI_CHIP_RAGE128MOBILITY4, /* Rage128 */
- ATI_CHIP_Rage128, /* Last among Rage128's */
- ATI_CHIP_RADEON, /* Radeon */
- ATI_CHIP_RADEONVE, /* Radeon VE */
- ATI_CHIP_RADEONMOBILITY6, /* Radeon M6 */
- ATI_CHIP_RS100, /* IGP320 */
- ATI_CHIP_RS200, /* IGP340 */
- ATI_CHIP_RS250, /* Radoen 7000 IGP */
- ATI_CHIP_RV200, /* RV200 */
- ATI_CHIP_RADEONMOBILITY7, /* Radeon M7 */
- ATI_CHIP_R200, /* R200 */
- ATI_CHIP_RV250, /* RV250 */
- ATI_CHIP_RADEONMOBILITY9, /* Radeon M9 */
- ATI_CHIP_RS300, /* Radoen 9100 IGP */
- ATI_CHIP_RS350, /* Radoen 9200 IGP */
- ATI_CHIP_RV280, /* RV250 */
- ATI_CHIP_RADEONMOBILITY9PLUS, /* Radeon M9+ */
- ATI_CHIP_R300, /* R300 */
- ATI_CHIP_RV350, /* RV350/M10/M11 */
- ATI_CHIP_R350, /* R350 */
- ATI_CHIP_R360, /* R360 */
- ATI_CHIP_RV370, /* RV370/M22 */
- ATI_CHIP_RV380, /* RV380/M24 */
- ATI_CHIP_R420, /* R420/M18 */
- ATI_CHIP_R423, /* R423/M28? */
- ATI_CHIP_R430, /* R430 */
- ATI_CHIP_R480, /* R480/M28? */
- ATI_CHIP_R481, /* R481 */
- ATI_CHIP_RV410, /* RV410, M26 */
- ATI_CHIP_RS400, /* RS400, RS410, RS480, RS482, ... */
- ATI_CHIP_Radeon, /* Last among Radeon's */
- ATI_CHIP_HDTV /* HDTV */
-} ATIChipType;
-
-extern const char *ATIChipNames[];
-
-extern ATIChipType ATIChipID(const CARD16, const CARD8);
-
#endif /* ___ATI_H___ */
diff --git a/src/atibus.c b/src/atibus.c
index 32f02b6..69a3089 100644
--- a/src/atibus.c
+++ b/src/atibus.c
@@ -31,7 +31,6 @@
#include "atichip.h"
#include "atimach64io.h"
#include "atistruct.h"
-#include "ativersion.h"
/*
* Definitions related to an adapter's system bus interface.
diff --git a/src/atichip.c b/src/atichip.c
index 5f8a221..aac00e6 100644
--- a/src/atichip.c
+++ b/src/atichip.c
@@ -28,7 +28,7 @@
#include "atibus.h"
#include "atichip.h"
#include "atimach64io.h"
-#include "ativersion.h"
+#include "atimach64version.h"
const char *ATIFoundryNames[] =
{ "SGS", "NEC", "KCS", "UMC", "TSMC", "5", "6", "UMC" };
@@ -114,7 +114,7 @@ ATIMach64ChipID
pATI->Chip = ATI_CHIP_264GT;
else
xf86Msg(X_WARNING,
- ATI_NAME ": Mach64 chip type probe discrepancy"
+ MACH64_NAME ": Mach64 chip type probe discrepancy"
" detected: PCI=0x%04X; CHIP_ID=0x%04X.\n",
ExpectedChipType, pATI->ChipType);
}
diff --git a/src/atichip.h b/src/atichip.h
index 44cd188..e59d6eb 100644
--- a/src/atichip.h
+++ b/src/atichip.h
@@ -29,6 +29,36 @@
#include <X11/Xmd.h>
/*
+ * Chip-related definitions.
+ */
+typedef enum
+{
+ ATI_CHIP_NONE = 0,
+ ATI_CHIP_88800GXC, /* Mach64 */
+ ATI_CHIP_88800GXD, /* Mach64 */
+ ATI_CHIP_88800GXE, /* Mach64 */
+ ATI_CHIP_88800GXF, /* Mach64 */
+ ATI_CHIP_88800GX, /* Mach64 */
+ ATI_CHIP_88800CX, /* Mach64 */
+ ATI_CHIP_264CT, /* Mach64 */
+ ATI_CHIP_264ET, /* Mach64 */
+ ATI_CHIP_264VT, /* Mach64 */
+ ATI_CHIP_264GT, /* Mach64 */
+ ATI_CHIP_264VTB, /* Mach64 */
+ ATI_CHIP_264GTB, /* Mach64 */
+ ATI_CHIP_264VT3, /* Mach64 */
+ ATI_CHIP_264GTDVD, /* Mach64 */
+ ATI_CHIP_264LT, /* Mach64 */
+ ATI_CHIP_264VT4, /* Mach64 */
+ ATI_CHIP_264GT2C, /* Mach64 */
+ ATI_CHIP_264GTPRO, /* Mach64 */
+ ATI_CHIP_264LTPRO, /* Mach64 */
+ ATI_CHIP_264XL, /* Mach64 */
+ ATI_CHIP_MOBILITY, /* Mach64 */
+ ATI_CHIP_Mach64, /* Last among Mach64's */
+} ATIChipType;
+
+/*
* Foundry codes for 264xT's.
*/
typedef enum
diff --git a/src/aticonsole.c b/src/aticonsole.c
index bd5ec9c..f8f2032 100644
--- a/src/aticonsole.c
+++ b/src/aticonsole.c
@@ -51,11 +51,6 @@
#include "atioption.h"
#include "vbe.h"
-static const char *vbeSymbols[] = {
- "VBEGetVBEMode",
- NULL
-};
-
#endif /* TV_OUT */
/*
@@ -131,8 +126,6 @@ ATIProbeAndSetActiveDisplays
int disp_request;
ATITVStandard tv_std, tv_std_request;
- xf86LoaderRefSymLists(vbeSymbols, NULL);
-
if (xf86GetVerbosity() > 3) {
xf86ErrorFVerb(4, "\n Before TV-Out queries\n\n");
ATIPrintRegisters(pATI);
@@ -539,8 +532,6 @@ ATIEnterGraphics
#ifdef TV_OUT
if (pATI->OptionTvOut) {
- xf86LoaderRefSymLists(vbeSymbols, NULL);
-
if (pATI->pVBE) {
if (VBEGetVBEMode(pATI->pVBE, &pATI->vbemode)) {
xf86DrvMsg(pScreenInfo->scrnIndex, X_INFO, "Saving VESA mode: 0x%x\n",
diff --git a/src/atidri.c b/src/atidri.c
index 0da1bc5..15d0014 100644
--- a/src/atidri.c
+++ b/src/atidri.c
@@ -41,9 +41,9 @@
#include "atidri.h"
#include "atiregs.h"
#include "atistruct.h"
-#include "ativersion.h"
#include "atimach64io.h"
+#include "atimach64version.h"
#include "mach64_dri.h"
#include "mach64_common.h"
#include "mach64_sarea.h"
@@ -1244,9 +1244,9 @@ Bool ATIDRIScreenInit( ScreenPtr pScreen )
PCI_DEV_DEV(pATI->PCIInfo),
PCI_DEV_FUNC(pATI->PCIInfo) );
}
- pDRIInfo->ddxDriverMajorVersion = ATI_VERSION_MAJOR;
- pDRIInfo->ddxDriverMinorVersion = ATI_VERSION_MINOR;
- pDRIInfo->ddxDriverPatchVersion = ATI_VERSION_PATCH;
+ pDRIInfo->ddxDriverMajorVersion = MACH64_VERSION_MAJOR;
+ pDRIInfo->ddxDriverMinorVersion = MACH64_VERSION_MINOR;
+ pDRIInfo->ddxDriverPatchVersion = MACH64_VERSION_PATCH;
pDRIInfo->frameBufferPhysicalAddress = (void *)pATI->LinearBase;
pDRIInfo->frameBufferSize = pATI->LinearSize;
pDRIInfo->frameBufferStride = (pScreenInfo->displayWidth *
diff --git a/src/atii2c.c b/src/atii2c.c
index 73febf7..a13d647 100644
--- a/src/atii2c.c
+++ b/src/atii2c.c
@@ -25,7 +25,6 @@
#endif
#include "atii2c.h"
-#include "atiload.h"
#include "atimach64i2c.h"
#include "atistruct.h"
@@ -365,7 +364,7 @@ ATII2CPreInit
ATIPtr pATI
)
{
- if (!ATILoadModule(pScreenInfo, "i2c", ATIi2cSymbols))
+ if (!xf86LoadSubModule(pScreenInfo, "i2c"))
return;
ATIMach64I2CPreInit(pScreenInfo, pATI);
diff --git a/src/atiload.c b/src/atiload.c
index 0001ced..621b0b0 100644
--- a/src/atiload.c
+++ b/src/atiload.c
@@ -18,179 +18,18 @@
* 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.
- *
- * DRI support by:
- * Leif Delgass <ldelgass@retinalburn.net>
*/
#ifdef HAVE_CONFIG_H
#include "config.h"
#endif
-#ifdef XFree86LOADER
-
#include "ati.h"
#include "aticursor.h"
#include "atiload.h"
#include "atistruct.h"
/*
- * All symbol lists belong here. They are externalised so that they can be
- * referenced elsewhere. Note the naming convention for these things...
- */
-
-const char *ATIint10Symbols[] =
-{
- "xf86FreeInt10",
- "xf86InitInt10",
- "xf86int10Addr",
- NULL
-};
-
-const char *ATIddcSymbols[] =
-{
- "xf86PrintEDID",
- "xf86SetDDCproperties",
- NULL
-};
-
-const char *ATIvbeSymbols[] =
-{
- "VBEInit",
- "vbeDoEDID",
- "vbeFree",
- NULL
-};
-
-#ifdef XF86DRI_DEVEL
-
-const char *ATIdrmSymbols[] = {
- "drmAddBufs",
- "drmAddMap",
- "drmAgpAcquire",
- "drmAgpAlloc",
- "drmAgpBase",
- "drmAgpBind",
- "drmAgpDeviceId",
- "drmAgpEnable",
- "drmAgpFree",
- "drmAgpGetMode",
- "drmAgpRelease",
- "drmAgpUnbind",
- "drmAgpVendorId",
- "drmAvailable",
- "drmCommandNone",
- "drmCommandRead",
- "drmCommandWrite",
- "drmCommandWriteRead",
- "drmCtlInstHandler",
- "drmCtlUninstHandler",
- "drmFreeVersion",
- "drmGetInterruptFromBusID",
- "drmGetLibVersion",
- "drmGetVersion",
- "drmMap",
- "drmMapBufs",
- "drmDMA",
- "drmUnmap",
- "drmUnmapBufs",
- NULL
-};
-
-const char *ATIdriSymbols[] = {
- "DRICloseScreen",
- "DRICreateInfoRec",
- "DRIDestroyInfoRec",
- "DRIFinishScreenInit",
- "DRIGetSAREAPrivate",
- "DRILock",
- "DRIQueryVersion",
- "DRIScreenInit",
- "DRIUnlock",
- "GlxSetVisualConfigs",
- "DRICreatePCIBusID",
- NULL
-};
-
-#endif /* XF86DRI_DEVEL */
-
-const char *ATIfbSymbols[] =
-{
- "fbPictureInit",
- "fbScreenInit",
- NULL
-};
-
-const char *ATIshadowfbSymbols[] =
-{
- "ShadowFBInit",
- NULL
-};
-
-#ifdef USE_EXA
-const char *ATIexaSymbols[] =
-{
- "exaDriverAlloc",
- "exaDriverInit",
- "exaDriverFini",
- "exaOffscreenAlloc",
- "exaOffscreenFree",
- NULL
-};
-#endif
-
-#ifdef USE_XAA
-const char *ATIxaaSymbols[] =
-{
- "XAACreateInfoRec",
- "XAADestroyInfoRec",
- "XAAInit",
- NULL
-};
-#endif
-
-const char *ATIramdacSymbols[] =
-{
- "xf86CreateCursorInfoRec",
- "xf86DestroyCursorInfoRec",
- "xf86InitCursor",
- NULL
-};
-
-const char *ATIi2cSymbols[] =
-{
- "xf86CreateI2CBusRec",
- "xf86DestroyI2CBusRec",
- "xf86I2CBusInit",
- "xf86I2CDevInit",
- "xf86I2CFindDev",
- "xf86I2CGetScreenBuses",
- NULL
-};
-
-/*
- * ATILoadModule --
- *
- * Load a specific module and register with the loader those of its entry
- * points that are referenced by this driver.
- */
-pointer
-ATILoadModule
-(
- ScrnInfoPtr pScreenInfo,
- const char *Module,
- const char **SymbolList
-)
-{
- pointer pModule = xf86LoadSubModule(pScreenInfo, Module);
-
- if (pModule)
- xf86LoaderReqSymLists(SymbolList, NULL);
-
- return pModule;
-}
-
-/*
* ATILoadModules --
*
* This function loads other modules required for a screen.
@@ -206,7 +45,7 @@ ATILoadModules
/* Load shadow frame buffer code if needed */
if (pATI->OptionShadowFB &&
- !ATILoadModule(pScreenInfo, "shadowfb", ATIshadowfbSymbols))
+ !xf86LoadSubModule(pScreenInfo, "shadowfb"))
return NULL;
/* Load depth-specific entry points */
@@ -216,7 +55,7 @@ ATILoadModules
case 16:
case 24:
case 32:
- fbPtr = ATILoadModule(pScreenInfo, "fb", ATIfbSymbols);
+ fbPtr = xf86LoadSubModule(pScreenInfo, "fb");
break;
default:
@@ -227,14 +66,13 @@ ATILoadModules
/* Load ramdac module if needed */
if ((pATI->Cursor > ATI_CURSOR_SOFTWARE) &&
- !ATILoadModule(pScreenInfo, "ramdac", ATIramdacSymbols))
+ !xf86LoadSubModule(pScreenInfo, "ramdac"))
return NULL;
#ifdef USE_EXA
/* Load EXA if needed */
if (pATI->useEXA && pATI->OptionAccel)
{
- /* Cannot use ATILoadModule(), because of version checking */
XF86ModReqInfo req;
int errmaj, errmin;
@@ -247,17 +85,14 @@ ATILoadModules
LoaderErrorMsg(NULL, "exa", errmaj, errmin);
return NULL;
}
- xf86LoaderReqSymLists(ATIexaSymbols, NULL);
}
#endif
#ifdef USE_XAA
/* Load XAA if needed */
if (!pATI->useEXA && pATI->OptionAccel &&
- !ATILoadModule(pScreenInfo, "xaa", ATIxaaSymbols))
+ !xf86LoadSubModule(pScreenInfo, "xaa"))
return NULL;
#endif
return fbPtr;
}
-
-#endif /* XFree86LOADER */
diff --git a/src/atiload.h b/src/atiload.h
index ebccd75..168224c 100644
--- a/src/atiload.h
+++ b/src/atiload.h
@@ -18,52 +18,15 @@
* 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.
- *
- * DRI support by:
- * Leif Delgass <ldelgass@retinalburn.net>
*/
#ifndef ___ATILOAD_H___
#define ___ATILOAD_H___ 1
-#ifdef XFree86LOADER
-
#include "atipriv.h"
#include "xf86str.h"
-extern const char *ATIint10Symbols[], *ATIddcSymbols[], *ATIvbeSymbols[],
-
-#ifdef XF86DRI_DEVEL
-
- *ATIdrmSymbols[], *ATIdriSymbols[],
-
-#endif /* XF86DRI_DEVEL */
-
- *ATIfbSymbols[], *ATIshadowfbSymbols[],
-
-#ifdef USE_EXA
-
- *ATIexaSymbols[],
-
-#endif /* USE_EXA */
-
-#ifdef USE_XAA
-
- *ATIxaaSymbols[],
-
-#endif /* USE_XAA */
-
- *ATIramdacSymbols[], *ATIi2cSymbols[];
-
-extern pointer ATILoadModule(ScrnInfoPtr, const char *, const char **);
extern pointer ATILoadModules(ScrnInfoPtr, ATIPtr);
-#else /* XFree86LOADER */
-
-#define ATILoadModule(pScreenInfo, Module, SymboList) ((pointer)1)
-#define ATILoadModules(pScreenInfo, pATI) ((pointer)1)
-
-#endif /* XFree86LOADER */
-
#endif /* ___ATILOAD_H___ */
diff --git a/src/atimach64probe.c b/src/atimach64probe.c
index 2f716a1..ffab153 100644
--- a/src/atimach64probe.c
+++ b/src/atimach64probe.c
@@ -28,6 +28,7 @@
#include "atichip.h"
#include "atimach64io.h"
#include "atimach64probe.h"
+#include "atimach64version.h"
#include "atioption.h"
#include "ativersion.h"
@@ -106,11 +107,11 @@ Mach64PciChipsets[] = {
{-1, -1, RES_UNDEFINED}
};
-_X_EXPORT const OptionInfoRec *
+static const OptionInfoRec *
Mach64AvailableOptions(int chipid, int busid)
{
/*
- * Return options defined in the atimisc submodule which will have been
+ * Return options defined in the mach64 submodule which will have been
* loaded by this point.
*/
return ATIOptionsWeak();
@@ -121,13 +122,13 @@ Mach64AvailableOptions(int chipid, int busid)
*
* Print the driver's list of chipset names.
*/
-_X_EXPORT void
+static void
Mach64Identify
(
int flags
)
{
- xf86Msg(X_INFO, "%s: %s\n", ATI_NAME,
+ xf86Msg(X_INFO, "%s: %s\n", MACH64_NAME,
"Driver for ATI Mach64 chipsets");
}
@@ -137,12 +138,12 @@ Mach64Identify
* This function is called once, at the start of the first server generation to
* do a minimal probe for supported hardware.
*/
-_X_EXPORT Bool
+static Bool
Mach64Probe(DriverPtr pDriver, int flags)
{
- GDevPtr *devSections;
+ GDevPtr *devSections, *ATIGDevs, *Mach64GDevs;
int *usedChips;
- int numDevSections;
+ int numDevSections, nATIGDev, nMach64GDev;
int numUsed;
Bool ProbeSuccess = FALSE;
@@ -151,10 +152,32 @@ Mach64Probe(DriverPtr pDriver, int flags)
return FALSE;
#endif
- if ((numDevSections = xf86MatchDevice(ATI_DRIVER_NAME, &devSections)) <= 0)
+ /* Collect unclaimed device sections for both driver names */
+ nATIGDev = xf86MatchDevice(ATI_DRIVER_NAME, &ATIGDevs);
+ nMach64GDev = xf86MatchDevice(MACH64_DRIVER_NAME, &Mach64GDevs);
+
+ if ((numDevSections = nATIGDev + nMach64GDev) <= 0)
return FALSE;
- numUsed = xf86MatchPciInstances(ATI_DRIVER_NAME, PCI_VENDOR_ATI,
+ if (ATIGDevs == NULL) {
+ devSections = Mach64GDevs;
+ numDevSections = nMach64GDev;
+ } else if (Mach64GDevs == NULL) {
+ devSections = ATIGDevs;
+ numDevSections = nATIGDev;
+ } else {
+ /* Combine into one list */
+ devSections = xnfalloc((numDevSections + 1) * sizeof(GDevPtr));
+ (void)memcpy(devSections,
+ ATIGDevs, nATIGDev * sizeof(GDevPtr));
+ (void)memcpy(devSections + nATIGDev,
+ Mach64GDevs, nMach64GDev * sizeof(GDevPtr));
+ devSections[numDevSections] = NULL;
+ xfree(ATIGDevs);
+ xfree(Mach64GDevs);
+ }
+
+ numUsed = xf86MatchPciInstances(MACH64_NAME, PCI_VENDOR_ATI,
Mach64Chipsets, Mach64PciChipsets,
devSections, numDevSections,
pDriver, &usedChips);
@@ -177,9 +200,9 @@ Mach64Probe(DriverPtr pDriver, int flags)
if (!pScrn)
continue;
- pScrn->driverVersion = ATI_VERSION_CURRENT;
- pScrn->driverName = ATI_DRIVER_NAME;
- pScrn->name = ATI_NAME;
+ pScrn->driverVersion = MACH64_VERSION_CURRENT;
+ pScrn->driverName = MACH64_DRIVER_NAME;
+ pScrn->name = MACH64_NAME;
pScrn->Probe = Mach64Probe;
pScrn->PreInit = ATIPreInit;
pScrn->ScreenInit = ATIScreenInit;
@@ -198,3 +221,14 @@ Mach64Probe(DriverPtr pDriver, int flags)
return ProbeSuccess;
}
+
+_X_EXPORT DriverRec MACH64 =
+{
+ MACH64_VERSION_CURRENT,
+ MACH64_DRIVER_NAME,
+ Mach64Identify,
+ Mach64Probe,
+ Mach64AvailableOptions,
+ NULL,
+ 0
+};
diff --git a/src/atimach64probe.h b/src/atimach64probe.h
index 65ced98..9d50b63 100644
--- a/src/atimach64probe.h
+++ b/src/atimach64probe.h
@@ -25,10 +25,6 @@
#include "xf86str.h"
-extern SymTabRec Mach64Chipsets[];
-
-extern const OptionInfoRec * Mach64AvailableOptions(int, int);
-extern void Mach64Identify(int);
-extern Bool Mach64Probe(DriverPtr, int);
+extern SymTabRec Mach64Chipsets[];
#endif /* ___ATIMACH64PROBE_H___ */
diff --git a/src/atimach64version.h b/src/atimach64version.h
new file mode 100644
index 0000000..c1848bd
--- /dev/null
+++ b/src/atimach64version.h
@@ -0,0 +1,59 @@
+/*
+ * Copyright 2000 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.
+ */
+
+#ifndef _MACH64_VERSION_H_
+#define _MACH64_VERSION_H_ 1
+
+#undef MACH64_NAME
+#undef MACH64_DRIVER_NAME
+#undef MACH64_VERSION_MAJOR
+#undef MACH64_VERSION_MINOR
+#undef MACH64_VERSION_PATCH
+#undef MACH64_VERSION_CURRENT
+#undef MACH64_VERSION_EVALUATE
+#undef MACH64_VERSION_STRINGIFY
+#undef MACH64_VERSION_NAME
+
+#define MACH64_NAME "MACH64"
+#define MACH64_DRIVER_NAME "mach64"
+
+#define MACH64_VERSION_MAJOR 6
+#define MACH64_VERSION_MINOR 7
+#define MACH64_VERSION_PATCH 0
+
+#ifndef MACH64_VERSION_EXTRA
+#define MACH64_VERSION_EXTRA ""
+#endif
+
+#define MACH64_VERSION_CURRENT \
+ ((MACH64_VERSION_MAJOR << 20) | \
+ (MACH64_VERSION_MINOR << 10) | \
+ (MACH64_VERSION_PATCH))
+
+#define MACH64_VERSION_EVALUATE(__x) #__x
+#define MACH64_VERSION_STRINGIFY(_x) MACH64_VERSION_EVALUATE(_x)
+#define MACH64_VERSION_NAME \
+ MACH64_VERSION_STRINGIFY(MACH64_VERSION_MAJOR) "." \
+ MACH64_VERSION_STRINGIFY(MACH64_VERSION_MINOR) "." \
+ MACH64_VERSION_STRINGIFY(MACH64_VERSION_MINOR) MACH64_VERSION_EXTRA
+
+#endif /* _MACH64_VERSION_H_ */
diff --git a/src/atimisc.c b/src/atimisc.c
index e6012ec..d71b0ad 100644
--- a/src/atimisc.c
+++ b/src/atimisc.c
@@ -18,31 +18,27 @@
* 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.
- *
- * DRI support by:
- * Leif Delgass <ldelgass@retinalburn.net>
*/
#ifdef HAVE_CONFIG_H
#include "config.h"
#endif
-#ifdef XFree86LOADER
-
#include "ati.h"
-#include "atiload.h"
#include "ativersion.h"
+#include "atimach64version.h"
+
/* Module loader interface for subsidiary driver module */
static XF86ModuleVersionInfo ATIVersionRec =
{
- "atimisc",
+ "mach64",
MODULEVENDORSTRING,
MODINFOSTRING1,
MODINFOSTRING2,
XORG_VERSION_CURRENT,
- ATI_VERSION_MAJOR, ATI_VERSION_MINOR, ATI_VERSION_PATCH,
+ MACH64_VERSION_MAJOR, MACH64_VERSION_MINOR, MACH64_VERSION_PATCH,
ABI_CLASS_VIDEODRV,
ABI_VIDEODRV_VERSION,
MOD_CLASS_VIDEODRV,
@@ -68,73 +64,8 @@ ATISetup
if (!Inited)
{
/* Ensure main driver module is loaded, but not as a submodule */
- if (!xf86ServerIsOnlyDetecting())
- {
- if (!LoaderSymbol(ATI_NAME))
- xf86LoadOneModule(ATI_DRIVER_NAME, Options);
-
- /* ati & atimisc module versions must match */
- do
- {
- XF86ModuleData *pModuleData = LoaderSymbol("atiModuleData");
-
- if (pModuleData)
- {
- XF86ModuleVersionInfo *pModuleInfo = pModuleData->vers;
-
- if ((pModuleInfo->majorversion == ATI_VERSION_MAJOR) &&
- (pModuleInfo->minorversion == ATI_VERSION_MINOR) &&
- (pModuleInfo->patchlevel == ATI_VERSION_PATCH))
- break;
- }
-
- xf86Msg(X_ERROR,
- "\"ati\" and \"atimisc\" module versions must"
- " match.\n");
-
- if (ErrorMajor)
- *ErrorMajor = (int)LDR_MISMATCH;
- if (ErrorMinor)
- *ErrorMinor = (int)LDR_MISMATCH;
-
- return NULL;
- } while (0);
- }
-
- /*
- * Tell loader about symbols from other modules that this module might
- * refer to.
- */
- xf86LoaderRefSymLists(
- ATIint10Symbols,
- ATIddcSymbols,
- ATIvbeSymbols,
-
-#ifdef XF86DRI_DEVEL
-
- ATIdrmSymbols,
- ATIdriSymbols,
-
-#endif /* XF86DRI_DEVEL */
-
- ATIfbSymbols,
- ATIshadowfbSymbols,
-
-#ifdef USE_EXA
-
- ATIexaSymbols,
-
-#endif /* USE_EXA */
-
-#ifdef USE_XAA
-
- ATIxaaSymbols,
-
-#endif /* USE_XAA */
-
- ATIramdacSymbols,
- ATIi2cSymbols,
- NULL);
+ if (!xf86ServerIsOnlyDetecting() && !LoaderSymbol(ATI_NAME))
+ xf86LoadOneModule(ATI_DRIVER_NAME, Options);
Inited = TRUE;
}
@@ -142,12 +73,10 @@ ATISetup
return (pointer)TRUE;
}
-/* The following record must be called atimiscModuleData */
-_X_EXPORT XF86ModuleData atimiscModuleData =
+/* The following record must be called mach64ModuleData */
+_X_EXPORT XF86ModuleData mach64ModuleData =
{
&ATIVersionRec,
ATISetup,
NULL
};
-
-#endif /* XFree86LOADER */
diff --git a/src/atimode.c b/src/atimode.c
index 68c1342..d1b3198 100644
--- a/src/atimode.c
+++ b/src/atimode.c
@@ -43,12 +43,6 @@
#include "vbe.h"
-static const char *vbeSymbols[] = {
- "VBESetVBEMode",
- "vbeFree",
- NULL
-};
-
#endif /* TV_OUT */
#ifndef AVOID_CPIO
@@ -733,9 +727,6 @@ ATISetVBEMode
ATIHWPtr pATIHW
)
{
-
- xf86LoaderRefSymLists(vbeSymbols, NULL);
-
if (pATIHW->crtc == ATI_CRTC_MACH64) {
int vbemode, modekey;
diff --git a/src/atimodule.c b/src/atimodule.c
index 6aa9a2e..12b4ffd 100644
--- a/src/atimodule.c
+++ b/src/atimodule.c
@@ -24,38 +24,11 @@
#include "config.h"
#endif
-#ifdef XFree86LOADER
-
#include "ati.h"
-#include "atimodule.h"
#include "ativersion.h"
/* Module loader interface */
-const char *ATISymbols[] =
-{
- "Mach64Identify",
- "Mach64Probe",
- "Mach64AvailableOptions",
- NULL
-};
-
-const char *R128Symbols[] =
-{
- "R128Identify",
- "R128Probe",
- "R128AvailableOptions",
- NULL
-};
-
-const char *RADEONSymbols[] =
-{
- "RADEONIdentify",
- "RADEONProbe",
- "RADEONAvailableOptions",
- NULL
-};
-
static XF86ModuleVersionInfo ATIVersionRec =
{
ATI_DRIVER_NAME,
@@ -90,12 +63,6 @@ ATISetup
{
Inited = TRUE;
xf86AddDriver(&ATI, Module, 0);
-
- xf86LoaderRefSymLists(
- ATISymbols,
- R128Symbols,
- RADEONSymbols,
- NULL);
}
return (pointer)1;
@@ -108,5 +75,3 @@ _X_EXPORT XF86ModuleData atiModuleData =
ATISetup,
NULL
};
-
-#endif /* XFree86LOADER */
diff --git a/src/atimodule.h b/src/atimodule.h
deleted file mode 100644
index d33b01d..0000000
--- a/src/atimodule.h
+++ /dev/null
@@ -1,30 +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.
- */
-
-#if defined(XFree86LOADER) && !defined(___ATIMODULE_H___)
-#define ___ATIMODULE_H___ 1
-
-extern const char *ATISymbols[];
-extern const char *R128Symbols[];
-extern const char *RADEONSymbols[];
-
-#endif /* ___ATIMODULE_H___ */
diff --git a/src/atipreinit.c b/src/atipreinit.c
index 8114f51..2420b9f 100644
--- a/src/atipreinit.c
+++ b/src/atipreinit.c
@@ -301,7 +301,7 @@ ATIPreInit
* If there is an ix86-style BIOS, ensure its initialisation entry point
* has been executed, and retrieve DDC and VBE information from it.
*/
- if (!(pInt10Module = ATILoadModule(pScreenInfo, "int10", ATIint10Symbols)))
+ if (!(pInt10Module = xf86LoadSubModule(pScreenInfo, "int10")))
{
xf86DrvMsg(pScreenInfo->scrnIndex, X_WARNING,
"Unable to load int10 module.\n");
@@ -313,13 +313,13 @@ ATIPreInit
}
else
{
- if (!(pDDCModule = ATILoadModule(pScreenInfo, "ddc", ATIddcSymbols)))
+ if (!(pDDCModule = xf86LoadSubModule(pScreenInfo, "ddc")))
{
xf86DrvMsg(pScreenInfo->scrnIndex, X_WARNING,
"Unable to load ddc module.\n");
}
else
- if (!(pVBEModule = ATILoadModule(pScreenInfo, "vbe", ATIvbeSymbols)))
+ if (!(pVBEModule = xf86LoadSubModule(pScreenInfo, "vbe")))
{
xf86DrvMsg(pScreenInfo->scrnIndex, X_WARNING,
"Unable to load vbe module.\n");
diff --git a/src/atiprobe.c b/src/atiprobe.c
index 38ce90d..70e1a4a 100644
--- a/src/atiprobe.c
+++ b/src/atiprobe.c
@@ -32,8 +32,8 @@
#include "atibus.h"
#include "atichip.h"
#include "atimach64io.h"
+#include "atimach64version.h"
#include "atiprobe.h"
-#include "ativersion.h"
#include "atividmem.h"
#include "atiwonderio.h"
@@ -58,7 +58,7 @@ ATIVGAWonderProbe
if (!pATI->OptionProbeSparse)
{
xf86Msg(X_WARNING,
- ATI_NAME ": Expected VGA Wonder capability at I/O port"
+ MACH64_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);
@@ -96,13 +96,13 @@ ATIVGAWonderProbe
(IOValue6 == 0))
{
xf86MsgVerb(X_INFO, 3,
- ATI_NAME ": VGA Wonder at I/O port 0x%04lX detected.\n",
+ MACH64_NAME ": VGA Wonder at I/O port 0x%04lX detected.\n",
pATI->CPIO_VGAWonder);
}
else
{
xf86Msg(X_WARNING,
- ATI_NAME ": Expected VGA Wonder capability at I/O port"
+ MACH64_NAME ": Expected VGA Wonder capability at I/O port"
" 0x%04lX was not detected.\n", pATI->CPIO_VGAWonder);
pATI->CPIO_VGAWonder = 0;
}
@@ -398,7 +398,7 @@ ATIMach64ProbeIO
if (j == 0x03U)
{
- xf86Msg(X_WARNING, ATI_NAME ": "
+ xf86Msg(X_WARNING, MACH64_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",
PCI_DEV_BUS(pVideo), PCI_DEV_DEV(pVideo), PCI_DEV_FUNC(pVideo));
@@ -418,7 +418,7 @@ ATIMach64ProbeIO
*/
if (!pATI->OptionProbeSparse)
{
- xf86Msg(X_WARNING, ATI_NAME ": "
+ xf86Msg(X_WARNING, MACH64_NAME ": "
"PCI Mach64 in slot %d:%d:%d will not be probed\n"
"set option \"probe_sparse\" to force sparse I/O probing.\n",
PCI_DEV_BUS(pVideo), PCI_DEV_DEV(pVideo), PCI_DEV_FUNC(pVideo));
@@ -439,14 +439,14 @@ ATIMach64ProbeIO
if (!ATIMach64Probe(pATI, pVideo, pATI->Chip))
{
- xf86Msg(X_WARNING, ATI_NAME ": "
+ xf86Msg(X_WARNING, MACH64_NAME ": "
"PCI Mach64 in slot %d:%d:%d could not be detected!\n",
PCI_DEV_BUS(pVideo), PCI_DEV_DEV(pVideo), PCI_DEV_FUNC(pVideo));
}
else
{
ProbeSuccess = TRUE;
- xf86Msg(X_INFO, ATI_NAME ": "
+ xf86Msg(X_INFO, MACH64_NAME ": "
"Shared PCI Mach64 in slot %d:%d:%d with sparse PIO base"
" 0x%04lX detected.\n",
PCI_DEV_BUS(pVideo), PCI_DEV_DEV(pVideo), PCI_DEV_FUNC(pVideo),
@@ -471,7 +471,7 @@ SkipSparse:
if (ATIMach64Probe(pATI, pVideo, pATI->Chip))
{
ProbeSuccess = TRUE;
- xf86Msg(X_INFO, ATI_NAME ": "
+ xf86Msg(X_INFO, MACH64_NAME ": "
"Shared PCI Mach64 in slot %d:%d:%d with Block 0 base"
" 0x%08lX detected.\n",
PCI_DEV_BUS(pVideo), PCI_DEV_DEV(pVideo), PCI_DEV_FUNC(pVideo),
@@ -479,7 +479,7 @@ SkipSparse:
}
else
{
- xf86Msg(X_WARNING, ATI_NAME ": "
+ xf86Msg(X_WARNING, MACH64_NAME ": "
"PCI Mach64 in slot %d:%d:%d could not be detected!\n",
PCI_DEV_BUS(pVideo), PCI_DEV_DEV(pVideo), PCI_DEV_FUNC(pVideo));
}
@@ -497,7 +497,7 @@ SkipSparse:
if (ATIMach64Probe(pATI, pVideo, pATI->Chip))
{
ProbeSuccess = TRUE;
- xf86Msg(X_INFO, ATI_NAME ": "
+ xf86Msg(X_INFO, MACH64_NAME ": "
"Shared PCI/AGP Mach64 in slot %d:%d:%d detected.\n",
PCI_DEV_BUS(pVideo), PCI_DEV_DEV(pVideo), PCI_DEV_FUNC(pVideo));
@@ -511,7 +511,7 @@ SkipSparse:
}
else
{
- xf86Msg(X_WARNING, ATI_NAME ": "
+ xf86Msg(X_WARNING, MACH64_NAME ": "
"PCI/AGP Mach64 in slot %d:%d:%d could not be detected!\n",
PCI_DEV_BUS(pVideo), PCI_DEV_DEV(pVideo), PCI_DEV_FUNC(pVideo));
}
diff --git a/src/atombios_output.c b/src/atombios_output.c
index 5ec3098..68478a2 100644
--- a/src/atombios_output.c
+++ b/src/atombios_output.c
@@ -316,8 +316,6 @@ atombios_output_lvds_setup(xf86OutputPtr output, DisplayModePtr mode)
return ATOM_NOT_IMPLEMENTED;
}
-#if 0
-
static int
atombios_output_scaler_setup(xf86OutputPtr output, DisplayModePtr mode)
{
@@ -356,8 +354,6 @@ atombios_output_scaler_setup(xf86OutputPtr output, DisplayModePtr mode)
}
-#endif
-
static AtomBiosResult
atombios_display_device_control(atomBiosHandlePtr atomBIOS, int device, Bool state)
{
@@ -369,12 +365,12 @@ atombios_display_device_control(atomBiosHandlePtr atomBIOS, int device, Bool sta
data.exec.index = device;
data.exec.dataSpace = (void *)&space;
data.exec.pspace = &disp_data;
-
+
if (RHDAtomBiosFunc(atomBIOS->scrnIndex, atomBIOS, ATOMBIOS_EXEC, &data) == ATOM_SUCCESS) {
ErrorF("Output %d %s success\n", device, state? "enable":"disable");
return ATOM_SUCCESS;
}
-
+
ErrorF("Output %d %s failed\n", device, state? "enable":"disable");
return ATOM_NOT_IMPLEMENTED;
}
@@ -382,15 +378,17 @@ atombios_display_device_control(atomBiosHandlePtr atomBIOS, int device, Bool sta
static void
atombios_device_dpms(xf86OutputPtr output, int device, int mode)
{
+ RADEONOutputPrivatePtr radeon_output = output->driver_private;
RADEONInfoPtr info = RADEONPTR(output->scrn);
- int index;
+ int index = 0;
switch (device) {
case ATOM_DEVICE_CRT1_SUPPORT:
- index = GetIndexIntoMasterTable(COMMAND, DAC1OutputControl);
- break;
case ATOM_DEVICE_CRT2_SUPPORT:
- index = GetIndexIntoMasterTable(COMMAND, DAC2OutputControl);
+ if (radeon_output->DACType == DAC_PRIMARY)
+ index = GetIndexIntoMasterTable(COMMAND, DAC1OutputControl);
+ else if (radeon_output->DACType == DAC_TVDAC)
+ index = GetIndexIntoMasterTable(COMMAND, DAC2OutputControl);
break;
case ATOM_DEVICE_DFP1_SUPPORT:
index = GetIndexIntoMasterTable(COMMAND, TMDSAOutputControl);
@@ -417,12 +415,12 @@ atombios_device_dpms(xf86OutputPtr output, int device, int mode)
switch (mode) {
case DPMSModeOn:
atombios_display_device_control(info->atomBIOS, index, ATOM_ENABLE);
- break;
+ break;
case DPMSModeStandby:
case DPMSModeSuspend:
case DPMSModeOff:
atombios_display_device_control(info->atomBIOS, index, ATOM_DISABLE);
- break;
+ break;
}
}
@@ -440,9 +438,9 @@ atombios_output_dpms(xf86OutputPtr output, int mode)
* assume we can process.
*/
count = 0;
- tmp = INREG(0x0028);
+ tmp = INREG(RADEON_BIOS_6_SCRATCH);
while((tmp & 0x100) && (count < 5)) {
- tmp = INREG(0x0028);
+ tmp = INREG(RADEON_BIOS_6_SCRATCH);
count++;
usleep(1000);
}
@@ -451,7 +449,7 @@ atombios_output_dpms(xf86OutputPtr output, int mode)
"%s (WARNING) failed to grab card lock process anyway.\n",
__func__);
}
- OUTREG(0x0028, tmp | 0x100);
+ OUTREG(RADEON_BIOS_6_SCRATCH, tmp | 0x100);
#endif
ErrorF("AGD: output dpms %d\n", mode);
@@ -484,8 +482,8 @@ atombios_output_dpms(xf86OutputPtr output, int mode)
}
#if 1
/* release card lock */
- tmp = INREG(0x0028);
- OUTREG(0x0028, tmp & (~0x100));
+ tmp = INREG(RADEON_BIOS_6_SCRATCH);
+ OUTREG(RADEON_BIOS_6_SCRATCH, tmp & (~0x100));
#endif
}
@@ -500,9 +498,9 @@ atombios_set_output_crtc_source(xf86OutputPtr output)
SELECT_CRTC_SOURCE_PS_ALLOCATION crtc_src_param;
int index = GetIndexIntoMasterTable(COMMAND, SelectCRTC_Source);
int major, minor;
-
+
atombios_get_command_table_version(info->atomBIOS, index, &major, &minor);
-
+
ErrorF("select crtc source table is %d %d\n", major, minor);
crtc_src_param.ucCRTC = radeon_crtc->crtc_id;
@@ -566,14 +564,17 @@ atombios_output_mode_set(xf86OutputPtr output,
{
RADEONOutputPrivatePtr radeon_output = output->driver_private;
- //atombios_output_scaler_setup(output, mode);
+ atombios_output_scaler_setup(output, mode);
atombios_set_output_crtc_source(output);
if (radeon_output->MonType == MT_CRT) {
- if (radeon_output->devices & ATOM_DEVICE_CRT1_SUPPORT)
- atombios_output_dac1_setup(output, adjusted_mode);
- else if (radeon_output->devices & ATOM_DEVICE_CRT2_SUPPORT)
- atombios_output_dac2_setup(output, adjusted_mode);
+ if (radeon_output->devices & ATOM_DEVICE_CRT1_SUPPORT ||
+ radeon_output->devices & ATOM_DEVICE_CRT2_SUPPORT) {
+ if (radeon_output->DACType == DAC_PRIMARY)
+ atombios_output_dac1_setup(output, adjusted_mode);
+ else if (radeon_output->DACType == DAC_TVDAC)
+ atombios_output_dac2_setup(output, adjusted_mode);
+ }
} else if (radeon_output->MonType == MT_DFP) {
if (radeon_output->devices & ATOM_DEVICE_DFP1_SUPPORT)
atombios_output_tmds1_setup(output, adjusted_mode);
@@ -582,10 +583,13 @@ atombios_output_mode_set(xf86OutputPtr output,
else if (radeon_output->devices & ATOM_DEVICE_DFP3_SUPPORT)
atombios_output_tmds2_setup(output, adjusted_mode);
} else if (radeon_output->MonType == MT_LCD) {
- if (radeon_output->devices & ATOM_DEVICE_LCD1_SUPPORT)
- atombios_output_lvds_setup(output, adjusted_mode);
+ if (radeon_output->devices & ATOM_DEVICE_LCD1_SUPPORT)
+ atombios_output_lvds_setup(output, adjusted_mode);
} else if (OUTPUT_IS_TV || (radeon_output->MonType == MT_CV)) {
- atombios_output_dac2_setup(output, adjusted_mode);
+ if (radeon_output->DACType == DAC_PRIMARY)
+ atombios_output_dac1_setup(output, adjusted_mode);
+ else if (radeon_output->DACType == DAC_TVDAC)
+ atombios_output_dac2_setup(output, adjusted_mode);
atombios_output_tv1_setup(output, adjusted_mode);
}
@@ -601,16 +605,28 @@ atom_bios_dac_load_detect(atomBiosHandlePtr atomBIOS, xf86OutputPtr output)
if (radeon_output->devices & ATOM_DEVICE_CRT1_SUPPORT) {
dac_data.sDacload.usDeviceID = ATOM_DEVICE_CRT1_SUPPORT;
- dac_data.sDacload.ucDacType = ATOM_DAC_A;
+ if (radeon_output->DACType == DAC_PRIMARY)
+ dac_data.sDacload.ucDacType = ATOM_DAC_A;
+ else if (radeon_output->DACType == DAC_TVDAC)
+ dac_data.sDacload.ucDacType = ATOM_DAC_B;
} else if (radeon_output->devices & ATOM_DEVICE_CRT2_SUPPORT) {
dac_data.sDacload.usDeviceID = ATOM_DEVICE_CRT2_SUPPORT;
- dac_data.sDacload.ucDacType = ATOM_DAC_B;
+ if (radeon_output->DACType == DAC_PRIMARY)
+ dac_data.sDacload.ucDacType = ATOM_DAC_A;
+ else if (radeon_output->DACType == DAC_TVDAC)
+ dac_data.sDacload.ucDacType = ATOM_DAC_B;
} else if (radeon_output->devices & ATOM_DEVICE_CV_SUPPORT) {
dac_data.sDacload.usDeviceID = ATOM_DEVICE_CV_SUPPORT;
- dac_data.sDacload.ucDacType = ATOM_DAC_B;
+ if (radeon_output->DACType == DAC_PRIMARY)
+ dac_data.sDacload.ucDacType = ATOM_DAC_A;
+ else if (radeon_output->DACType == DAC_TVDAC)
+ dac_data.sDacload.ucDacType = ATOM_DAC_B;
} else if (radeon_output->devices & ATOM_DEVICE_TV1_SUPPORT) {
dac_data.sDacload.usDeviceID = ATOM_DEVICE_TV1_SUPPORT;
- dac_data.sDacload.ucDacType = ATOM_DAC_B;
+ if (radeon_output->DACType == DAC_PRIMARY)
+ dac_data.sDacload.ucDacType = ATOM_DAC_A;
+ else if (radeon_output->DACType == DAC_TVDAC)
+ dac_data.sDacload.ucDacType = ATOM_DAC_B;
} else {
ErrorF("invalid output device for dac detection\n");
return ATOM_NOT_IMPLEMENTED;
diff --git a/src/r128.h b/src/r128.h
index dd1a670..1205245 100644
--- a/src/r128.h
+++ b/src/r128.h
@@ -63,6 +63,8 @@
#include "GL/glxint.h"
#endif
+#include "atipcirename.h"
+
#define R128_DEBUG 0 /* Turn off debugging output */
#define R128_IDLE_RETRY 32 /* Fall out of idle loops after this count */
#define R128_TIMEOUT 2000000 /* Fall out of wait loops after this count */
@@ -234,8 +236,8 @@ typedef struct {
unsigned long MMIOAddr; /* MMIO region physical address */
unsigned long BIOSAddr; /* BIOS physical address */
- unsigned char *MMIO; /* Map of MMIO region */
- unsigned char *FB; /* Map of frame buffer */
+ void *MMIO; /* Map of MMIO region */
+ void *FB; /* Map of frame buffer */
CARD32 MemCntl;
CARD32 BusCntl;
diff --git a/src/r128_cursor.c b/src/r128_cursor.c
index 908ddb9..8321284 100644
--- a/src/r128_cursor.c
+++ b/src/r128_cursor.c
@@ -133,7 +133,7 @@ static void R128LoadCursorImage(ScrnInfoPtr pScrn, unsigned char *image)
R128InfoPtr info = R128PTR(pScrn);
unsigned char *R128MMIO = info->MMIO;
CARD32 *s = (pointer)image;
- CARD32 *d = (pointer)(info->FB + info->cursor_start);
+ CARD32 *d = (pointer)((CARD8*)info->FB + info->cursor_start);
int y;
CARD32 save;
diff --git a/src/r128_dri.c b/src/r128_dri.c
index edb77ba..da201e3 100644
--- a/src/r128_dri.c
+++ b/src/r128_dri.c
@@ -470,8 +470,8 @@ static Bool R128DRIAgpInit(R128InfoPtr info, ScreenPtr pScreen)
xf86DrvMsg(pScreen->myNum, X_INFO,
"[agp] Mode 0x%08lx [AGP 0x%04x/0x%04x; Card 0x%04x/0x%04x]\n",
mode, vendor, device,
- info->PciInfo->vendor,
- info->PciInfo->chipType);
+ PCI_DEV_VENDOR_ID(info->PciInfo),
+ PCI_DEV_DEVICE_ID(info->PciInfo));
if (drmAgpEnable(info->drmFD, mode) < 0) {
xf86DrvMsg(pScreen->myNum, X_ERROR, "[agp] AGP not enabled\n");
@@ -910,9 +910,9 @@ static void R128DRIIrqInit(R128InfoPtr info, ScreenPtr pScreen)
if (!info->irq) {
info->irq = drmGetInterruptFromBusID(
info->drmFD,
- ((pciConfigPtr)info->PciInfo->thisCard)->busnum,
- ((pciConfigPtr)info->PciInfo->thisCard)->devnum,
- ((pciConfigPtr)info->PciInfo->thisCard)->funcnum);
+ PCI_CFG_BUS(info->PciInfo),
+ PCI_CFG_DEV(info->PciInfo),
+ PCI_CFG_FUNC(info->PciInfo));
if((drmCtlInstHandler(info->drmFD, info->irq)) != 0) {
xf86DrvMsg(pScrn->scrnIndex, X_INFO,
@@ -1029,9 +1029,9 @@ Bool R128DRIScreenInit(ScreenPtr pScreen)
pDRIInfo->busIdString = xalloc(64);
sprintf(pDRIInfo->busIdString,
"PCI:%d:%d:%d",
- info->PciInfo->bus,
- info->PciInfo->device,
- info->PciInfo->func);
+ PCI_DEV_BUS(info->PciInfo),
+ PCI_DEV_DEV(info->PciInfo),
+ PCI_DEV_FUNC(info->PciInfo));
}
pDRIInfo->ddxDriverMajorVersion = R128_VERSION_MAJOR;
pDRIInfo->ddxDriverMinorVersion = R128_VERSION_MINOR;
diff --git a/src/r128_driver.c b/src/r128_driver.c
index 9c41b7b..45917cd 100644
--- a/src/r128_driver.c
+++ b/src/r128_driver.c
@@ -194,186 +194,6 @@ R128RAMRec R128RAM[] = { /* Memory Specifications
{ 4, 4, 3, 3, 2, 3, 1, 16, 12, "64-bit DDR SGRAM" },
};
-#ifdef WITH_VGAHW
-static const char *vgahwSymbols[] = {
- "vgaHWFreeHWRec",
- "vgaHWGetHWRec",
- "vgaHWGetIndex",
- "vgaHWLock",
- "vgaHWRestore",
- "vgaHWSave",
- "vgaHWUnlock",
- NULL
-};
-#endif
-
-static const char *fbdevHWSymbols[] = {
- "fbdevHWInit",
- "fbdevHWUseBuildinMode",
- "fbdevHWGetLineLength",
- "fbdevHWGetVidmem",
-
- "fbdevHWDPMSSet",
- "fbdevHWDPMSSetWeak",
-
- /* colormap */
- "fbdevHWLoadPalette",
- "fbdevHWLoadPaletteWeak",
-
- /* ScrnInfo hooks */
- "fbdevHWAdjustFrame",
- "fbdevHWAdjustFrameWeak",
- "fbdevHWEnterVT",
- "fbdevHWLeaveVT",
- "fbdevHWModeInit",
- "fbdevHWRestore",
- "fbdevHWSave",
- "fbdevHWSwitchMode",
- "fbdevHWSwitchModeWeak",
- "fbdevHWValidModeWeak",
-
- "fbdevHWMapMMIO",
- "fbdevHWMapVidmem",
- "fbdevHWUnmapMMIO",
- "fbdevHWUnmapVidmem",
-
- NULL
-};
-
-static const char *ddcSymbols[] = {
- "xf86PrintEDID",
- "xf86DoEDID_DDC1",
- "xf86DoEDID_DDC2",
- NULL
-};
-
-static const char *i2cSymbols[] = {
- "xf86CreateI2CBusRec",
- "xf86I2CBusInit",
- NULL
-};
-
-static const char *fbSymbols[] = {
- "fbPictureInit",
- "fbScreenInit",
- NULL
-};
-
-static const char *xaaSymbols[] = {
- "XAACreateInfoRec",
- "XAADestroyInfoRec",
- "XAAInit",
- NULL
-};
-
-static const char *ramdacSymbols[] = {
- "xf86CreateCursorInfoRec",
- "xf86DestroyCursorInfoRec",
- "xf86InitCursor",
- NULL
-};
-
-#ifdef XF86DRI
-static const char *drmSymbols[] = {
- "drmAddBufs",
- "drmAddMap",
- "drmAgpAcquire",
- "drmAgpAlloc",
- "drmAgpBase",
- "drmAgpBind",
- "drmAgpDeviceId",
- "drmAgpEnable",
- "drmAgpFree",
- "drmAgpGetMode",
- "drmAgpRelease",
- "drmAgpUnbind",
- "drmAgpVendorId",
- "drmAvailable",
- "drmCommandNone",
- "drmCommandRead",
- "drmCommandWrite",
- "drmCommandWriteRead",
- "drmCtlInstHandler",
- "drmCtlUninstHandler",
- "drmFreeBufs",
- "drmFreeVersion",
- "drmGetInterruptFromBusID",
- "drmGetLibVersion",
- "drmGetVersion",
- "drmMap",
- "drmMapBufs",
- "drmDMA",
- "drmScatterGatherAlloc",
- "drmScatterGatherFree",
- "drmUnmap",
- "drmUnmapBufs",
- NULL
-};
-
-static const char *driSymbols[] = {
- "DRICloseScreen",
- "DRICreateInfoRec",
- "DRIDestroyInfoRec",
- "DRIFinishScreenInit",
- "DRIGetDeviceInfo",
- "DRIGetSAREAPrivate",
- "DRILock",
- "DRIQueryVersion",
- "DRIScreenInit",
- "DRIUnlock",
- "GlxSetVisualConfigs",
- "DRICreatePCIBusID",
- NULL
-};
-
-static const char *driShadowFBSymbols[] = {
- "ShadowFBInit",
- NULL
-};
-#endif
-
-static const char *vbeSymbols[] = {
- "VBEInit",
- "vbeDoEDID",
- "vbeFree",
- NULL
-};
-
-static const char *int10Symbols[] = {
- "xf86InitInt10",
- "xf86FreeInt10",
- "xf86int10Addr",
- NULL
-};
-
-void R128LoaderRefSymLists(void)
-{
- /*
- * Tell the loader about symbols from other modules that this module might
- * refer to.
- */
- xf86LoaderRefSymLists(
-#ifdef WITH_VGAHW
- vgahwSymbols,
-#endif
- fbSymbols,
- xaaSymbols,
- ramdacSymbols,
-#ifdef XF86DRI
- drmSymbols,
- driSymbols,
- driShadowFBSymbols,
-#endif
- fbdevHWSymbols,
- int10Symbols,
- vbeSymbols,
- /* ddcsymbols, */
- i2cSymbols,
- /* shadowSymbols, */
- NULL);
-}
-
-#ifdef XFree86LOADER
int getR128EntityIndex(void)
{
int *r128_entity_index = LoaderSymbol("gR128EntityIndex");
@@ -382,13 +202,6 @@ int getR128EntityIndex(void)
else
return *r128_entity_index;
}
-#else
-extern int gR128EntityIndex;
-int getR128EntityIndex(void)
-{
- return gR128EntityIndex;
-}
-#endif
R128EntPtr R128EntPriv(ScrnInfoPtr pScrn)
{
@@ -425,11 +238,26 @@ static Bool R128MapMMIO(ScrnInfoPtr pScrn)
if (info->FBDev) {
info->MMIO = fbdevHWMapMMIO(pScrn);
} else {
+#ifndef XSERVER_LIBPCIACCESS
info->MMIO = xf86MapPciMem(pScrn->scrnIndex,
VIDMEM_MMIO | VIDMEM_READSIDEEFFECT,
info->PciTag,
info->MMIOAddr,
R128_MMIOSIZE);
+#else
+ int err = pci_device_map_range(info->PciInfo,
+ info->MMIOAddr,
+ R128_MMIOSIZE,
+ PCI_DEV_MAP_FLAG_WRITABLE,
+ &info->MMIO);
+
+ if (err) {
+ xf86DrvMsg (pScrn->scrnIndex, X_ERROR,
+ "Unable to map MMIO aperture. %s (%d)\n",
+ strerror (err), err);
+ return FALSE;
+ }
+#endif
}
if (!info->MMIO) return FALSE;
@@ -445,7 +273,11 @@ static Bool R128UnmapMMIO(ScrnInfoPtr pScrn)
if (info->FBDev)
fbdevHWUnmapMMIO(pScrn);
else {
+#ifndef XSERVER_LIBPCIACCESS
xf86UnMapVidMem(pScrn->scrnIndex, info->MMIO, R128_MMIOSIZE);
+#else
+ pci_device_unmap_range(info->PciInfo, info->MMIO, R128_MMIOSIZE);
+#endif
}
info->MMIO = NULL;
return TRUE;
@@ -459,11 +291,27 @@ static Bool R128MapFB(ScrnInfoPtr pScrn)
if (info->FBDev) {
info->FB = fbdevHWMapVidmem(pScrn);
} else {
+#ifndef XSERVER_LIBPCIACCESS
info->FB = xf86MapPciMem(pScrn->scrnIndex,
VIDMEM_FRAMEBUFFER,
info->PciTag,
info->LinearAddr,
info->FbMapSize);
+#else
+ int err = pci_device_map_range(info->PciInfo,
+ info->LinearAddr,
+ info->FbMapSize,
+ PCI_DEV_MAP_FLAG_WRITABLE |
+ PCI_DEV_MAP_FLAG_WRITE_COMBINE,
+ &info->FB);
+
+ if (err) {
+ xf86DrvMsg (pScrn->scrnIndex, X_ERROR,
+ "Unable to map FB aperture. %s (%d)\n",
+ strerror (err), err);
+ return FALSE;
+ }
+#endif
}
if (!info->FB) return FALSE;
@@ -478,7 +326,11 @@ static Bool R128UnmapFB(ScrnInfoPtr pScrn)
if (info->FBDev)
fbdevHWUnmapVidmem(pScrn);
else
+#ifndef XSERVER_LIBPCIACCESS
xf86UnMapVidMem(pScrn->scrnIndex, info->FB, info->FbMapSize);
+#else
+ pci_device_unmap_range(info->PciInfo, info->FB, info->FbMapSize);
+#endif
info->FB = NULL;
return TRUE;
}
@@ -639,7 +491,13 @@ static Bool R128GetBIOSParameters(ScrnInfoPtr pScrn, xf86Int10InfoPtr pInt10)
(info->VBIOS[(v) + 2] << 16) | \
(info->VBIOS[(v) + 3] << 24))
- if (!(info->VBIOS = xalloc(R128_VBIOS_SIZE))) {
+#ifdef XSERVER_LIBPCIACCESS
+ info->VBIOS = xalloc(info->PciInfo->rom_size);
+#else
+ info->VBIOS = xalloc(R128_VBIOS_SIZE);
+#endif
+
+ if (!info->VBIOS) {
xf86DrvMsg(pScrn->scrnIndex, X_ERROR,
"Cannot allocate space for hold Video BIOS!\n");
return FALSE;
@@ -650,6 +508,12 @@ static Bool R128GetBIOSParameters(ScrnInfoPtr pScrn, xf86Int10InfoPtr pInt10)
(void)memcpy(info->VBIOS, xf86int10Addr(pInt10, info->BIOSAddr),
R128_VBIOS_SIZE);
} else {
+#ifdef XSERVER_LIBPCIACCESS
+ if (pci_device_read_rom(info->PciInfo, info->VBIOS)) {
+ xf86DrvMsg(pScrn->scrnIndex, X_WARNING,
+ "Failed to read PCI ROM!\n");
+ }
+#else
xf86ReadPciBIOS(0, info->PciTag, 0, info->VBIOS, R128_VBIOS_SIZE);
if (info->VBIOS[0] != 0x55 || info->VBIOS[1] != 0xaa) {
xf86DrvMsg(pScrn->scrnIndex, X_WARNING,
@@ -659,6 +523,7 @@ static Bool R128GetBIOSParameters(ScrnInfoPtr pScrn, xf86Int10InfoPtr pInt10)
info->BIOSAddr = 0x000c0000;
xf86ReadDomainMemory(info->PciTag, info->BIOSAddr, R128_VBIOS_SIZE, info->VBIOS);
}
+#endif
}
if (info->VBIOS[0] != 0x55 || info->VBIOS[1] != 0xaa) {
info->BIOSAddr = 0x00000000;
@@ -997,7 +862,7 @@ static Bool R128PreInitConfig(ScrnInfoPtr pScrn)
info->Chipset = dev->chipID;
from = X_CONFIG;
} else {
- info->Chipset = info->PciInfo->chipType;
+ info->Chipset = PCI_DEV_DEVICE_ID(info->PciInfo);
}
pScrn->chipset = (char *)xf86TokenToString(R128Chipsets, info->Chipset);
@@ -1021,7 +886,7 @@ static Bool R128PreInitConfig(ScrnInfoPtr pScrn)
/* Framebuffer */
from = X_PROBED;
- info->LinearAddr = info->PciInfo->memBase[0] & 0xfc000000;
+ info->LinearAddr = PCI_REGION_BASE(info->PciInfo, 0, REGION_MEM) & 0xfc000000;
pScrn->memPhysBase = info->LinearAddr;
if (dev->MemBase) {
xf86DrvMsg(pScrn->scrnIndex, X_INFO,
@@ -1040,7 +905,7 @@ static Bool R128PreInitConfig(ScrnInfoPtr pScrn)
/* MMIO registers */
from = X_PROBED;
- info->MMIOAddr = info->PciInfo->memBase[2] & 0xffffff00;
+ info->MMIOAddr = PCI_REGION_BASE(info->PciInfo, 2, REGION_MEM) & 0xffffff00;
if (dev->IOBase) {
xf86DrvMsg(pScrn->scrnIndex, X_INFO,
"MMIO address override, using 0x%08lx instead of 0x%08lx\n",
@@ -1055,6 +920,7 @@ static Bool R128PreInitConfig(ScrnInfoPtr pScrn)
xf86DrvMsg(pScrn->scrnIndex, from,
"MMIO registers at 0x%08lx\n", info->MMIOAddr);
+#ifndef XSERVER_LIBPCIACCESS
/* BIOS */
from = X_PROBED;
info->BIOSAddr = info->PciInfo->biosBase & 0xfffe0000;
@@ -1070,6 +936,7 @@ static Bool R128PreInitConfig(ScrnInfoPtr pScrn)
xf86DrvMsg(pScrn->scrnIndex, from,
"BIOS at 0x%08lx\n", info->BIOSAddr);
}
+#endif
/* Flat panel (part 1) */
if (xf86GetOptValBool(info->Options, OPTION_PROG_FP_REGS,
@@ -1382,14 +1249,12 @@ static Bool R128PreInitDDC(ScrnInfoPtr pScrn, xf86Int10InfoPtr pInt10)
#endif
if (!xf86LoadSubModule(pScrn, "ddc")) return FALSE;
- xf86LoaderReqSymLists(ddcSymbols, NULL);
#if defined(__powerpc__) || defined(__alpha__) || defined(__sparc__)
/* Int10 is broken on PPC and some Alphas */
return TRUE;
#else
if (xf86LoadSubModule(pScrn, "vbe")) {
- xf86LoaderReqSymLists(vbeSymbols,NULL);
pVbe = VBEInit(pInt10,info->pEnt->index);
if (!pVbe) return FALSE;
xf86SetDDCproperties(pScrn,xf86PrintEDID(vbeDoEDID(pVbe,NULL)));
@@ -1444,9 +1309,7 @@ static Bool
R128I2cInit(ScrnInfoPtr pScrn)
{
R128InfoPtr info = R128PTR(pScrn);
- if ( xf86LoadSubModule(pScrn, "i2c") )
- xf86LoaderReqSymLists(i2cSymbols,NULL);
- else{
+ if ( !xf86LoadSubModule(pScrn, "i2c") ) {
xf86DrvMsg(pScrn->scrnIndex, X_ERROR,
"Failed to load i2c module\n");
return FALSE;
@@ -1866,7 +1729,6 @@ static Bool R128PreInitModes(ScrnInfoPtr pScrn)
/* Get ScreenInit function */
if (!xf86LoadSubModule(pScrn, "fb")) return FALSE;
- xf86LoaderReqSymLists(fbSymbols, NULL);
info->CurrentLayout.displayWidth = pScrn->displayWidth;
info->CurrentLayout.mode = pScrn->currentMode;
@@ -1881,7 +1743,6 @@ static Bool R128PreInitCursor(ScrnInfoPtr pScrn)
if (!xf86ReturnOptValBool(info->Options, OPTION_SW_CURSOR, FALSE)) {
if (!xf86LoadSubModule(pScrn, "ramdac")) return FALSE;
- xf86LoaderReqSymLists(ramdacSymbols, NULL);
}
return TRUE;
}
@@ -1893,7 +1754,6 @@ static Bool R128PreInitAccel(ScrnInfoPtr pScrn)
if (!xf86ReturnOptValBool(info->Options, OPTION_NOACCEL, FALSE)) {
if (!xf86LoadSubModule(pScrn, "xaa")) return FALSE;
- xf86LoaderReqSymLists(xaaSymbols, NULL);
}
return TRUE;
}
@@ -1904,7 +1764,6 @@ static Bool R128PreInitInt10(ScrnInfoPtr pScrn, xf86Int10InfoPtr *ppInt10)
#if 1 && !defined(__alpha__)
/* int10 is broken on some Alphas */
if (xf86LoadSubModule(pScrn, "int10")) {
- xf86LoaderReqSymLists(int10Symbols, NULL);
xf86DrvMsg(pScrn->scrnIndex,X_INFO,"initializing int10\n");
*ppInt10 = xf86InitInt10(info->pEnt->index);
}
@@ -2018,8 +1877,6 @@ static Bool R128PreInitDRI(ScrnInfoPtr pScrn)
xf86DrvMsg(pScrn->scrnIndex, X_ERROR,
"Couldn't load shadowfb module:\n");
} else {
- xf86LoaderReqSymLists(driShadowFBSymbols, NULL);
-
info->allowPageFlip = xf86ReturnOptValBool(info->Options,
OPTION_PAGE_FLIP,
FALSE);
@@ -2101,15 +1958,15 @@ Bool R128PreInit(ScrnInfoPtr pScrn, int flags)
}
info->PciInfo = xf86GetPciInfoForEntity(info->pEnt->index);
- info->PciTag = pciTag(info->PciInfo->bus,
- info->PciInfo->device,
- info->PciInfo->func);
+ info->PciTag = pciTag(PCI_DEV_BUS(info->PciInfo),
+ PCI_DEV_DEV(info->PciInfo),
+ PCI_DEV_FUNC(info->PciInfo));
xf86DrvMsg(pScrn->scrnIndex, X_INFO,
"PCI bus %d card %d func %d\n",
- info->PciInfo->bus,
- info->PciInfo->device,
- info->PciInfo->func);
+ PCI_DEV_BUS(info->PciInfo),
+ PCI_DEV_DEV(info->PciInfo),
+ PCI_DEV_FUNC(info->PciInfo));
if (xf86RegisterResources(info->pEnt->index, 0, ResNone)) goto fail;
if (xf86SetOperatingState(resVga, info->pEnt->index, ResUnusedOpr)) goto fail;
@@ -2139,7 +1996,6 @@ Bool R128PreInit(ScrnInfoPtr pScrn, int flags)
if (!xf86LoadSubModule(pScrn, "vgahw"))
info->VGAAccess = FALSE;
else {
- xf86LoaderReqSymLists(vgahwSymbols, NULL);
if (!vgaHWGetHWRec(pScrn))
info->VGAAccess = FALSE;
}
@@ -2186,7 +2042,6 @@ Bool R128PreInit(ScrnInfoPtr pScrn, int flags)
if (info->FBDev) {
/* check for linux framebuffer device */
if (!xf86LoadSubModule(pScrn, "fbdevhw")) return FALSE;
- xf86LoaderReqSymLists(fbdevHWSymbols, NULL);
if (!fbdevHWInit(pScrn, info->PciInfo, NULL)) return FALSE;
pScrn->SwitchMode = fbdevHWSwitchModeWeak();
pScrn->AdjustFrame = fbdevHWAdjustFrameWeak();
diff --git a/src/r128_misc.c b/src/r128_misc.c
index 5ace7d7..49d2803 100644
--- a/src/r128_misc.c
+++ b/src/r128_misc.c
@@ -24,8 +24,6 @@
#include "config.h"
#endif
-#ifdef XFree86LOADER
-
#include "ativersion.h"
#include "r128_probe.h"
@@ -71,8 +69,6 @@ R128Setup
if (!xf86ServerIsOnlyDetecting() && !LoaderSymbol(ATI_NAME))
xf86LoadOneModule(ATI_DRIVER_NAME, Options);
- R128LoaderRefSymLists();
-
Inited = TRUE;
}
@@ -86,5 +82,3 @@ _X_EXPORT XF86ModuleData r128ModuleData =
R128Setup,
NULL
};
-
-#endif /* XFree86LOADER */
diff --git a/src/r128_probe.c b/src/r128_probe.c
index 0be21e8..5dd5cc9 100644
--- a/src/r128_probe.c
+++ b/src/r128_probe.c
@@ -106,7 +106,7 @@ PciChipsets R128PciChipsets[] = {
int gR128EntityIndex = -1;
/* Return the options for supported chipset 'n'; NULL otherwise */
-_X_EXPORT const OptionInfoRec *
+static const OptionInfoRec *
R128AvailableOptions(int chipid, int busid)
{
int i;
@@ -125,7 +125,7 @@ R128AvailableOptions(int chipid, int busid)
}
/* Return the string name for supported chipset 'n'; NULL otherwise. */
-_X_EXPORT void
+static void
R128Identify(int flags)
{
xf86PrintChipsets(R128_NAME,
@@ -134,7 +134,7 @@ R128Identify(int flags)
}
/* Return TRUE if chipset is present; FALSE otherwise. */
-_X_EXPORT Bool
+static Bool
R128Probe(DriverPtr drv, int flags)
{
int numUsed;
@@ -253,3 +253,14 @@ R128Probe(DriverPtr drv, int flags)
return foundScreen;
}
+
+_X_EXPORT DriverRec R128 =
+{
+ R128_VERSION_CURRENT,
+ R128_DRIVER_NAME,
+ R128Identify,
+ R128Probe,
+ R128AvailableOptions,
+ NULL,
+ 0
+};
diff --git a/src/r128_probe.h b/src/r128_probe.h
index 180e52a..2885604 100644
--- a/src/r128_probe.h
+++ b/src/r128_probe.h
@@ -54,14 +54,9 @@ typedef struct
} R128EntRec, *R128EntPtr;
/* r128_probe.c */
-extern const OptionInfoRec * R128AvailableOptions(int, int);
-extern void R128Identify(int);
-extern Bool R128Probe(DriverPtr, int);
-
extern PciChipsets R128PciChipsets[];
/* r128_driver.c */
-extern void R128LoaderRefSymLists(void);
extern Bool R128PreInit(ScrnInfoPtr, int);
extern Bool R128ScreenInit(int, ScreenPtr, int, char **);
extern Bool R128SwitchMode(int, DisplayModePtr, int);
diff --git a/src/r128_video.c b/src/r128_video.c
index 0f715aa..8e83323 100644
--- a/src/r128_video.c
+++ b/src/r128_video.c
@@ -397,6 +397,7 @@ R128DMA(
#define BUFSIZE (R128_BUFFER_SIZE - R128_HOSTDATA_BLIT_OFFSET)
#define MAXPASSES (MAXHEIGHT/(BUFSIZE/(MAXWIDTH*2))+1)
+ unsigned char *fb = (CARD8*)info->FB;
unsigned char *buf;
int err=-1, i, idx, offset, hpass, passes, srcpassbytes, dstpassbytes;
int sizes[MAXPASSES], list[MAXPASSES];
@@ -439,7 +440,7 @@ R128DMA(
dstpassbytes = hpass*dstPitch;
dstPitch /= 8;
- for (i=0, offset=dst-info->FB; i<passes; i++, offset+=dstpassbytes) {
+ for (i=0, offset=dst-fb; i<passes; i++, offset+=dstpassbytes) {
if (i == (passes-1) && (h % hpass) != 0) {
hpass = h % hpass;
srcpassbytes = w*hpass;
@@ -775,6 +776,7 @@ R128PutImage(
){
R128InfoPtr info = R128PTR(pScrn);
R128PortPrivPtr pPriv = (R128PortPrivPtr)data;
+ unsigned char *fb = (CARD8*)info->FB;
INT32 xa, xb, ya, yb;
int new_size, offset, s1offset, s2offset, s3offset;
int srcPitch, srcPitch2, dstPitch;
@@ -899,7 +901,7 @@ R128PutImage(
nlines = ((((yb + 0xffff) >> 16) + 1) & ~1) - top;
R128CopyData420(info, buf + s1offset, buf + s2offset, buf + s3offset,
- info->FB+d1offset, info->FB+d2offset, info->FB+d3offset,
+ fb + d1offset, fb + d2offset, fb + d3offset,
srcPitch, srcPitch2, dstPitch, nlines, npixels);
break;
case FOURCC_UYVY:
@@ -914,7 +916,7 @@ R128PutImage(
d3offset = 0;
s1offset += (top * srcPitch) + left;
nlines = ((yb + 0xffff) >> 16) - top;
- R128CopyData422(info, buf + s1offset, info->FB + d1offset,
+ R128CopyData422(info, buf + s1offset, fb + d1offset,
srcPitch, dstPitch, nlines, npixels);
break;
}
diff --git a/src/radeon.h b/src/radeon.h
index bddbc7b..2a3838c 100644
--- a/src/radeon.h
+++ b/src/radeon.h
@@ -670,14 +670,12 @@ typedef struct {
OptionInfoPtr Options;
Bool useEXA;
-#ifdef XFree86LOADER
#ifdef USE_EXA
XF86ModReqInfo exaReq;
#endif
#ifdef USE_XAA
XF86ModReqInfo xaaReq;
#endif
-#endif
/* X itself has the 3D context */
Bool XInited3D;
diff --git a/src/radeon_accelfuncs.c b/src/radeon_accelfuncs.c
index 6fbbc13..e3b37c1 100644
--- a/src/radeon_accelfuncs.c
+++ b/src/radeon_accelfuncs.c
@@ -1182,9 +1182,7 @@ FUNC_NAME(RADEONAccelInit)(ScreenPtr pScreen, XAAInfoRecPtr a)
a->SubsequentSolidHorVertLine
= FUNC_NAME(RADEONSubsequentSolidHorVertLine);
-#ifdef XFree86LOADER
if (info->xaaReq.minorversion >= 1) {
-#endif
/* RADEON only supports 14 bits for lines and clipping and only
* draws lines that are completely on-screen correctly. This will
@@ -1231,12 +1229,10 @@ FUNC_NAME(RADEONAccelInit)(ScreenPtr pScreen, XAAInfoRecPtr a)
a->DashedLineLimits.y2 = pScrn->virtualY-1;
}
-#ifdef XFree86LOADER
} else {
xf86DrvMsg(pScrn->scrnIndex, X_WARNING,
"libxaa too old, can't accelerate TwoPoint lines\n");
}
-#endif
/* Clipping, note that without this, all line accelerations will
* not be called
@@ -1296,11 +1292,7 @@ FUNC_NAME(RADEONAccelInit)(ScreenPtr pScreen, XAAInfoRecPtr a)
#endif
#ifdef RENDER
- if (info->RenderAccel
-#ifdef XFree86LOADER
- && info->xaaReq.minorversion >= 2
-#endif
- ) {
+ if (info->RenderAccel && info->xaaReq.minorversion >= 2) {
a->CPUToScreenAlphaTextureFlags = XAA_RENDER_POWER_OF_2_TILE_ONLY;
a->CPUToScreenAlphaTextureFormats = RADEONTextureFormats;
diff --git a/src/radeon_atombios.c b/src/radeon_atombios.c
index bff164d..b956b9a 100644
--- a/src/radeon_atombios.c
+++ b/src/radeon_atombios.c
@@ -1525,7 +1525,7 @@ RADEONGetATOMConnectorInfoFromBIOSObject (ScrnInfoPtr pScrn)
break;
case ENCODER_OBJECT_ID_INTERNAL_LVTM1:
info->BiosConnector[i].devices |= (1 << ATOM_DEVICE_DFP3_INDEX);
- info->BiosConnector[i].TMDSType = TMDS_EXT;
+ info->BiosConnector[i].TMDSType = TMDS_LVTMA;
break;
case ENCODER_OBJECT_ID_INTERNAL_DAC1:
case ENCODER_OBJECT_ID_INTERNAL_KLDSCP_DAC1:
@@ -1715,7 +1715,7 @@ RADEONGetATOMConnectorInfoFromBIOSConnectorTable (ScrnInfoPtr pScrn)
info->BiosConnector[i].output_id = ci.sucI2cId.sbfAccess.bfI2C_LineMux;
info->BiosConnector[i].devices = (1 << i);
info->BiosConnector[i].ConnectorType = ci.sucConnectorInfo.sbfAccess.bfConnectorType;
- info->BiosConnector[i].DACType = ci.sucConnectorInfo.sbfAccess.bfAssociatedDAC - 1;
+ info->BiosConnector[i].DACType = ci.sucConnectorInfo.sbfAccess.bfAssociatedDAC;
/* don't assign a gpio for tv */
if ((i == ATOM_DEVICE_TV1_INDEX) ||
@@ -1731,9 +1731,9 @@ RADEONGetATOMConnectorInfoFromBIOSConnectorTable (ScrnInfoPtr pScrn)
else if (i == ATOM_DEVICE_DFP2_INDEX)
info->BiosConnector[i].TMDSType = TMDS_EXT;
else if (i == ATOM_DEVICE_DFP3_INDEX)
- info->BiosConnector[i].TMDSType = TMDS_EXT;
+ info->BiosConnector[i].TMDSType = TMDS_LVTMA;
else
- info->BiosConnector[i].TMDSType = TMDS_UNKNOWN;
+ info->BiosConnector[i].TMDSType = TMDS_NONE;
/* Always set the connector type to VGA for CRT1/CRT2. if they are
* shared with a DVI port, we'll pick up the DVI connector below when we
diff --git a/src/radeon_bios.c b/src/radeon_bios.c
index 335bdfe..92a4927 100644
--- a/src/radeon_bios.c
+++ b/src/radeon_bios.c
@@ -203,7 +203,6 @@ Bool RADEONGetBIOSInfo(ScrnInfoPtr pScrn, xf86Int10InfoPtr pInt10)
static Bool RADEONGetATOMConnectorInfoFromBIOS (ScrnInfoPtr pScrn)
{
RADEONInfoPtr info = RADEONPTR (pScrn);
- int offset, i, j, tmp, tmp0, id, portinfo, gpio;
if (!info->VBIOS) return FALSE;
@@ -213,104 +212,7 @@ static Bool RADEONGetATOMConnectorInfoFromBIOS (ScrnInfoPtr pScrn)
if (RADEONGetATOMConnectorInfoFromBIOSConnectorTable(pScrn))
return TRUE;
- offset = RADEON_BIOS16(info->MasterDataStart + 22);
-
- if (offset) {
- tmp = RADEON_BIOS16(offset + 4);
- for (i = 0; i < RADEON_MAX_BIOS_CONNECTOR; i++) {
- if (tmp & (1 << i)) {
-
- if (i == ATOM_DEVICE_CV_INDEX) {
- xf86DrvMsg(pScrn->scrnIndex, X_INFO, "Skipping Component Video\n");
- info->BiosConnector[i].valid = FALSE;
- continue;
- }
-
- info->BiosConnector[i].valid = TRUE;
- portinfo = RADEON_BIOS16(offset + 6 + i * 2);
- info->BiosConnector[i].DACType = (portinfo & 0xf) - 1;
- info->BiosConnector[i].ConnectorType = (portinfo >> 4) & 0xf;
- id = (portinfo >> 8) & 0xf;
- tmp0 = RADEON_BIOS16(info->MasterDataStart + 24);
- gpio = RADEON_BIOS16(tmp0 + 4 + 27 * id) * 4;
- /* don't assign a gpio for tv */
- if ((i == ATOM_DEVICE_TV1_INDEX) ||
- (i == ATOM_DEVICE_TV2_INDEX) ||
- (i == ATOM_DEVICE_CV_INDEX))
- info->BiosConnector[i].ddc_line = 0;
- else
- info->BiosConnector[i].ddc_line = gpio;
-
- info->BiosConnector[i].output_id = id;
- info->BiosConnector[i].devices = (1 << i);
-
- if (i == ATOM_DEVICE_DFP1_INDEX)
- info->BiosConnector[i].TMDSType = TMDS_INT;
- else if (i == ATOM_DEVICE_DFP2_INDEX)
- info->BiosConnector[i].TMDSType = TMDS_EXT;
- else if (i == ATOM_DEVICE_DFP3_INDEX)
- info->BiosConnector[i].TMDSType = TMDS_EXT;
- else
- info->BiosConnector[i].TMDSType = TMDS_UNKNOWN;
-
- /* Always set the connector type to VGA for CRT1/CRT2. if they are
- * shared with a DVI port, we'll pick up the DVI connector below when we
- * merge the outputs
- */
- if ((i == ATOM_DEVICE_CRT1_INDEX || i == ATOM_DEVICE_CRT2_INDEX) &&
- (info->BiosConnector[i].ConnectorType == CONNECTOR_DVI_I ||
- info->BiosConnector[i].ConnectorType == CONNECTOR_DVI_D ||
- info->BiosConnector[i].ConnectorType == CONNECTOR_DVI_A)) {
- info->BiosConnector[i].ConnectorType = CONNECTOR_VGA;
- }
-
- } else {
- info->BiosConnector[i].valid = FALSE;
- }
- }
- } else {
- xf86DrvMsg(pScrn->scrnIndex, X_WARNING, "No Device Info Table found!\n");
- return FALSE;
- }
-
- /* CRTs/DFPs may share a port */
- for (i = 0; i < RADEON_MAX_BIOS_CONNECTOR; i++) {
- if (info->BiosConnector[i].valid) {
- for (j = 0; j < RADEON_MAX_BIOS_CONNECTOR; j++) {
- if (info->BiosConnector[j].valid && (i != j) ) {
- if (info->BiosConnector[i].output_id == info->BiosConnector[j].output_id) {
- if (((i == ATOM_DEVICE_DFP1_INDEX) ||
- (i == ATOM_DEVICE_DFP2_INDEX) ||
- (i == ATOM_DEVICE_DFP3_INDEX)) &&
- ((j == ATOM_DEVICE_CRT1_INDEX) || (j == ATOM_DEVICE_CRT2_INDEX))) {
- info->BiosConnector[i].DACType = info->BiosConnector[j].DACType;
- info->BiosConnector[i].devices |= info->BiosConnector[j].devices;
- info->BiosConnector[j].valid = FALSE;
- } else if (((j == ATOM_DEVICE_DFP1_INDEX) ||
- (j == ATOM_DEVICE_DFP2_INDEX) ||
- (j == ATOM_DEVICE_DFP3_INDEX)) &&
- ((i == ATOM_DEVICE_CRT1_INDEX) || (i == ATOM_DEVICE_CRT2_INDEX))) {
- info->BiosConnector[j].DACType = info->BiosConnector[i].DACType;
- info->BiosConnector[j].devices |= info->BiosConnector[i].devices;
- info->BiosConnector[i].valid = FALSE;
- }
- /* other possible combos? */
- }
- }
- }
- }
- }
-
- xf86DrvMsg(pScrn->scrnIndex, X_INFO, "Bios Connector table: \n");
- for (i = 0; i < RADEON_MAX_BIOS_CONNECTOR; i++) {
- if (info->BiosConnector[i].valid) {
- xf86DrvMsg(pScrn->scrnIndex, X_INFO, "Port%d: DDCType-0x%x, DACType-%d, TMDSType-%d, ConnectorType-%d\n",
- i, (unsigned int)info->BiosConnector[i].ddc_line, info->BiosConnector[i].DACType,
- info->BiosConnector[i].TMDSType, info->BiosConnector[i].ConnectorType);
- }
- }
-
- return TRUE;
+ return FALSE;
}
static Bool RADEONGetLegacyConnectorInfoFromBIOS (ScrnInfoPtr pScrn)
@@ -382,8 +284,19 @@ static Bool RADEONGetLegacyConnectorInfoFromBIOS (ScrnInfoPtr pScrn)
xf86DrvMsg(pScrn->scrnIndex, X_WARNING, "Unknown DDC Type: %d\n", DDCType);
break;
}
- info->BiosConnector[i].DACType = tmp & 0x1;
- info->BiosConnector[i].TMDSType = (tmp >> 4) & 0x1;
+ if (tmp & 0x1)
+ info->BiosConnector[i].DACType = DAC_TVDAC;
+ else
+ info->BiosConnector[i].DACType = DAC_PRIMARY;
+
+ /* For RS300/RS350/RS400 chips, there is no primary DAC. Force VGA port to use TVDAC*/
+ if (info->IsIGP)
+ info->BiosConnector[i].DACType = DAC_TVDAC;
+
+ if ((tmp >> 4) & 0x1)
+ info->BiosConnector[i].TMDSType = TMDS_EXT;
+ else
+ info->BiosConnector[i].TMDSType = TMDS_INT;
/* most XPRESS chips seem to specify DDC_CRT2 for their
* VGA DDC port, however DDC never seems to work on that
diff --git a/src/radeon_commonfuncs.c b/src/radeon_commonfuncs.c
index a1802f8..53bbce9 100644
--- a/src/radeon_commonfuncs.c
+++ b/src/radeon_commonfuncs.c
@@ -57,8 +57,140 @@ static void FUNC_NAME(RADEONInit3DEngine)(ScrnInfoPtr pScrn)
info->texW[0] = info->texH[0] = info->texW[1] = info->texH[1] = 1;
- if (info->ChipFamily >= CHIP_FAMILY_R300) {
- /* Unimplemented */
+ if (IS_R300_VARIANT) {
+ BEGIN_ACCEL(3);
+ OUT_ACCEL_REG(R300_RB3D_DSTCACHE_CTLSTAT, 0xA);
+ OUT_ACCEL_REG(R300_RB3D_ZCACHE_CTLSTAT, 0x3);
+ OUT_ACCEL_REG(R300_WAIT_UNTIL, 0x30000);
+ FINISH_ACCEL();
+
+ BEGIN_ACCEL(3);
+ OUT_ACCEL_REG(R300_GB_TILE_CONFIG, 0x10011);
+ OUT_ACCEL_REG(R300_GB_SELECT,0x0);
+ OUT_ACCEL_REG(R300_GB_ENABLE, 0x0);
+ FINISH_ACCEL();
+
+ BEGIN_ACCEL(3);
+ OUT_ACCEL_REG(R300_RB3D_DSTCACHE_CTLSTAT, 0xA);
+ OUT_ACCEL_REG(R300_RB3D_ZCACHE_CTLSTAT, 0x3);
+ OUT_ACCEL_REG(R300_WAIT_UNTIL, 0x30000);
+ FINISH_ACCEL();
+
+ BEGIN_ACCEL(5);
+ OUT_ACCEL_REG(R300_GB_AA_CONFIG, 0x0);
+ OUT_ACCEL_REG(R300_RB3D_DSTCACHE_CTLSTAT, 0xA);
+ OUT_ACCEL_REG(R300_RB3D_ZCACHE_CTLSTAT, 0x3);
+ OUT_ACCEL_REG(R300_GB_MSPOS0, 0x78888888);
+ OUT_ACCEL_REG(R300_GB_MSPOS1, 0x08888888);
+ FINISH_ACCEL();
+
+ BEGIN_ACCEL(4);
+ OUT_ACCEL_REG(R300_GA_POLY_MODE, 0x120);
+ OUT_ACCEL_REG(R300_GA_ROUND_MODE, 0x5);
+ OUT_ACCEL_REG(R300_GA_COLOR_CONTROL, 0xAAAA);
+ OUT_ACCEL_REG(R300_GA_OFFSET, 0x0);
+ FINISH_ACCEL();
+
+ BEGIN_ACCEL(26);
+ OUT_ACCEL_REG(R300_VAP_CNTL_STATUS, 0x0);
+ OUT_ACCEL_REG(R300_VAP_PVS_STATE_FLUSH_REG, 0x0);
+ OUT_ACCEL_REG(R300_VAP_CNTL, 0x300456);
+ OUT_ACCEL_REG(R300_VAP_VTE_CNTL, 0x300);
+ OUT_ACCEL_REG(R300_VAP_PSC_SGN_NORM_CNTL, 0x0);
+ OUT_ACCEL_REG(R300_VAP_PROG_STREAM_CNTL_0, 0x6a014001);
+ OUT_ACCEL_REG(R300_VAP_PROG_STREAM_CNTL_EXT_0, 0xf688f688);
+ OUT_ACCEL_REG(R300_VAP_PVS_CODE_CNTL_0, 0x100400);
+ OUT_ACCEL_REG(R300_VAP_PVS_CODE_CNTL_1, 0x1);
+ OUT_ACCEL_REG(R300_VAP_PVS_VECTOR_INDX_REG, 0);
+ OUT_ACCEL_REG(R300_VAP_PVS_VECTOR_DATA_REG,0x00f00203);
+ OUT_ACCEL_REG(R300_VAP_PVS_VECTOR_DATA_REG,0x00d10001);
+ OUT_ACCEL_REG(R300_VAP_PVS_VECTOR_DATA_REG,0x01248001);
+ OUT_ACCEL_REG(R300_VAP_PVS_VECTOR_DATA_REG,0x01248001);
+ OUT_ACCEL_REG(R300_VAP_PVS_VECTOR_DATA_REG,0x00f02203);
+ OUT_ACCEL_REG(R300_VAP_PVS_VECTOR_DATA_REG,0x00d10141);
+ OUT_ACCEL_REG(R300_VAP_PVS_VECTOR_DATA_REG,0x01248141);
+ OUT_ACCEL_REG(R300_VAP_PVS_VECTOR_DATA_REG,0x01248141);
+
+ OUT_ACCEL_REG(R300_VAP_PVS_FLOW_CNTL_OPC, 0x0);
+ OUT_ACCEL_REG(R300_VAP_OUT_VTX_FMT_0, 0x1);
+ OUT_ACCEL_REG(R300_VAP_OUT_VTX_FMT_1, 0x2);
+
+ OUT_ACCEL_REG(R300_VAP_GB_VERT_CLIP_ADJ, 0x3f800000);
+ OUT_ACCEL_REG(R300_VAP_GB_VERT_DISC_ADJ, 0x3f800000);
+ OUT_ACCEL_REG(R300_VAP_GB_HORZ_CLIP_ADJ, 0x3f800000);
+ OUT_ACCEL_REG(R300_VAP_GB_HORZ_DISC_ADJ, 0x3f800000);
+ OUT_ACCEL_REG(R300_VAP_CLIP_CNTL, 0x10000);
+ FINISH_ACCEL();
+
+ BEGIN_ACCEL(7);
+ OUT_ACCEL_REG(R300_SU_TEX_WRAP, 0x0);
+ OUT_ACCEL_REG(R300_SU_POLY_OFFSET_ENABLE, 0x0);
+ OUT_ACCEL_REG(R300_SU_CULL_MODE, 0x4);
+ OUT_ACCEL_REG(R300_SU_DEPTH_SCALE, 0x4b7fffff);
+ OUT_ACCEL_REG(R300_SU_DEPTH_OFFSET, 0x0);
+ OUT_ACCEL_REG(R300_RS_COUNT, 0x40002);
+ OUT_ACCEL_REG(R300_RS_IP_0, 0x1610000);
+ FINISH_ACCEL();
+
+ BEGIN_ACCEL(5);
+ OUT_ACCEL_REG(R300_US_W_FMT, 0x0);
+ OUT_ACCEL_REG(R300_US_OUT_FMT_1, 0x1B0F);
+ OUT_ACCEL_REG(R300_US_OUT_FMT_2, 0x1B0F);
+ OUT_ACCEL_REG(R300_US_OUT_FMT_3, 0x1B0F);
+ OUT_ACCEL_REG(R300_US_OUT_FMT_0, 0x1B01);
+ FINISH_ACCEL();
+
+ BEGIN_ACCEL(2);
+ OUT_ACCEL_REG(R300_RS_INST_COUNT, 0xC0);
+ OUT_ACCEL_REG(R300_RS_INST_0, 0x8);
+ FINISH_ACCEL();
+
+ BEGIN_ACCEL(12);
+ OUT_ACCEL_REG(R300_US_CONFIG, 0x8);
+ OUT_ACCEL_REG(R300_US_PIXSIZE, 0x0);
+ OUT_ACCEL_REG(R300_US_CODE_OFFSET, 0x40040);
+ OUT_ACCEL_REG(R300_US_CODE_ADDR_0, 0x0);
+ OUT_ACCEL_REG(R300_US_CODE_ADDR_1, 0x0);
+ OUT_ACCEL_REG(R300_US_CODE_ADDR_2, 0x0);
+ OUT_ACCEL_REG(R300_US_CODE_ADDR_3, 0x400000);
+ OUT_ACCEL_REG(R300_US_TEX_INST_0, 0x8000);
+ OUT_ACCEL_REG(R300_US_ALU_RGB_ADDR_0, 0x1f800000);
+ OUT_ACCEL_REG(R300_US_ALU_RGB_INST_0, 0x50a80);
+ OUT_ACCEL_REG(R300_US_ALU_ALPHA_ADDR_0, 0x1800000);
+ OUT_ACCEL_REG(R300_US_ALU_ALPHA_INST_0, 0x00040889);
+ FINISH_ACCEL();
+
+ BEGIN_ACCEL(3);
+ OUT_ACCEL_REG(R300_FG_DEPTH_SRC, 0x0);
+ OUT_ACCEL_REG(R300_FG_FOG_BLEND, 0x0);
+ OUT_ACCEL_REG(R300_FG_ALPHA_FUNC, 0x0);
+ FINISH_ACCEL();
+
+ BEGIN_ACCEL(12);
+ OUT_ACCEL_REG(R300_RB3D_ZSTENCILCNTL, 0x0);
+ OUT_ACCEL_REG(R300_RB3D_ZCACHE_CTLSTAT, 0x3);
+ OUT_ACCEL_REG(R300_RB3D_BW_CNTL, 0x0);
+ OUT_ACCEL_REG(R300_RB3D_ZCNTL, 0x0);
+ OUT_ACCEL_REG(R300_RB3D_ZTOP, 0x0);
+ OUT_ACCEL_REG(R300_RB3D_ROPCNTL, 0x0);
+
+ OUT_ACCEL_REG(R300_RB3D_AARESOLVE_CTL, 0x0);
+ OUT_ACCEL_REG(R300_RB3D_COLOR_CHANNEL_MASK, 0xf);
+ OUT_ACCEL_REG(R300_RB3D_DSTCACHE_CTLSTAT, 0xA);
+ OUT_ACCEL_REG(R300_RB3D_CCTL, 0x0);
+ OUT_ACCEL_REG(R300_RB3D_DITHER_CTL, 0x0);
+ OUT_ACCEL_REG(R300_RB3D_DSTCACHE_CTLSTAT, 0xA);
+ FINISH_ACCEL();
+
+ BEGIN_ACCEL(7);
+ OUT_ACCEL_REG(R300_SC_EDGERULE, 0xA5294A5);
+ OUT_ACCEL_REG(R300_SC_SCISSOR0, 0x0);
+ OUT_ACCEL_REG(R300_SC_SCISSOR1, 0x3ffffff);
+ OUT_ACCEL_REG(R300_SC_CLIP_0_A, 0x880440);
+ OUT_ACCEL_REG(R300_SC_CLIP_0_B, 0xff0ff0);
+ OUT_ACCEL_REG(R300_SC_CLIP_RULE, 0xAAAA);
+ OUT_ACCEL_REG(R300_SC_SCREENDOOR, 0xffffff);
+ FINISH_ACCEL();
} else if ((info->ChipFamily == CHIP_FAMILY_RV250) ||
(info->ChipFamily == CHIP_FAMILY_RV280) ||
(info->ChipFamily == CHIP_FAMILY_RS300) ||
diff --git a/src/radeon_crtc.c b/src/radeon_crtc.c
index 585b452..e1e4550 100644
--- a/src/radeon_crtc.c
+++ b/src/radeon_crtc.c
@@ -356,7 +356,7 @@ radeon_xf86AllocateOffscreenLinear(ScreenPtr pScreen, int length,
* Allocates memory for a locked-in-framebuffer shadow of the given
* width and height for this CRTC's rotated shadow framebuffer.
*/
-
+
static void *
radeon_crtc_shadow_allocate (xf86CrtcPtr crtc, int width, int height)
{
diff --git a/src/radeon_driver.c b/src/radeon_driver.c
index 07f96a7..98b8c68 100644
--- a/src/radeon_driver.c
+++ b/src/radeon_driver.c
@@ -225,197 +225,6 @@ static const OptionInfoRec RADEONOptions[] = {
const OptionInfoRec *RADEONOptionsWeak(void) { return RADEONOptions; }
-#ifdef WITH_VGAHW
-static const char *vgahwSymbols[] = {
- "vgaHWFreeHWRec",
- "vgaHWGetHWRec",
- "vgaHWGetIndex",
- "vgaHWLock",
- "vgaHWRestore",
- "vgaHWSave",
- "vgaHWUnlock",
- "vgaHWGetIOBase",
- NULL
-};
-#endif
-
-static const char *ddcSymbols[] = {
- "xf86PrintEDID",
- "xf86DoEDID_DDC1",
- "xf86DoEDID_DDC2",
- NULL
-};
-
-static const char *fbSymbols[] = {
- "fbScreenInit",
- "fbPictureInit",
- NULL
-};
-
-
-#ifdef USE_EXA
-static const char *exaSymbols[] = {
- "exaDriverAlloc",
- "exaDriverInit",
- "exaDriverFini",
- "exaOffscreenAlloc",
- "exaOffscreenFree",
- "exaGetPixmapOffset",
- "exaGetPixmapPitch",
- "exaGetPixmapSize",
- "exaMarkSync",
- "exaWaitSync",
- NULL
-};
-#endif /* USE_EXA */
-
-#ifdef USE_XAA
-static const char *xaaSymbols[] = {
- "XAACreateInfoRec",
- "XAADestroyInfoRec",
- "XAAInit",
- NULL
-};
-#endif /* USE_XAA */
-
-#if 0
-static const char *xf8_32bppSymbols[] = {
- "xf86Overlay8Plus32Init",
- NULL
-};
-#endif
-
-static const char *ramdacSymbols[] = {
- "xf86CreateCursorInfoRec",
- "xf86DestroyCursorInfoRec",
- "xf86ForceHWCursor",
- "xf86InitCursor",
- NULL
-};
-
-#ifdef XF86DRI
-static const char *drmSymbols[] = {
- "drmGetInterruptFromBusID",
- "drmCtlInstHandler",
- "drmCtlUninstHandler",
- "drmAddBufs",
- "drmAddMap",
- "drmAgpAcquire",
- "drmAgpAlloc",
- "drmAgpBase",
- "drmAgpBind",
- "drmAgpDeviceId",
- "drmAgpEnable",
- "drmAgpFree",
- "drmAgpGetMode",
- "drmAgpRelease",
- "drmAgpUnbind",
- "drmAgpVendorId",
- "drmCommandNone",
- "drmCommandRead",
- "drmCommandWrite",
- "drmCommandWriteRead",
- "drmDMA",
- "drmFreeVersion",
- "drmGetLibVersion",
- "drmGetVersion",
- "drmMap",
- "drmMapBufs",
- "drmRadeonCleanupCP",
- "drmRadeonClear",
- "drmRadeonFlushIndirectBuffer",
- "drmRadeonInitCP",
- "drmRadeonResetCP",
- "drmRadeonStartCP",
- "drmRadeonStopCP",
- "drmRadeonWaitForIdleCP",
- "drmScatterGatherAlloc",
- "drmScatterGatherFree",
- "drmUnmap",
- "drmUnmapBufs",
- NULL
-};
-
-static const char *driSymbols[] = {
- "DRICloseScreen",
- "DRICreateInfoRec",
- "DRIDestroyInfoRec",
- "DRIFinishScreenInit",
- "DRIGetContext",
- "DRIGetDeviceInfo",
- "DRIGetSAREAPrivate",
- "DRILock",
- "DRIQueryVersion",
- "DRIScreenInit",
- "DRIUnlock",
- "GlxSetVisualConfigs",
- "DRICreatePCIBusID",
- NULL
-};
-#endif
-
-static const char *vbeSymbols[] = {
- "VBEInit",
- "vbeDoEDID",
- NULL
-};
-
-static const char *int10Symbols[] = {
- "xf86InitInt10",
- "xf86FreeInt10",
- "xf86int10Addr",
- "xf86ExecX86int10",
- NULL
-};
-
-static const char *i2cSymbols[] = {
- "xf86CreateI2CBusRec",
- "xf86I2CBusInit",
- NULL
-};
-
-static const char *shadowSymbols[] = {
- "shadowAdd",
- "shadowInit",
- "shadowSetup",
- "shadowUpdatePacked",
- "shadowUpdatePackedWeak",
- NULL
-};
-
-void RADEONLoaderRefSymLists(void)
-{
- /*
- * Tell the loader about symbols from other modules that this module might
- * refer to.
- */
- xf86LoaderRefSymLists(
-#ifdef WITH_VGAHW
- vgahwSymbols,
-#endif
- fbSymbols,
-#ifdef USE_EXA
- exaSymbols,
-#endif
-#ifdef USE_XAA
- xaaSymbols,
-#endif
-#if 0
- xf8_32bppSymbols,
-#endif
- ramdacSymbols,
-#ifdef XF86DRI
- drmSymbols,
- driSymbols,
-#endif
- vbeSymbols,
- int10Symbols,
- i2cSymbols,
- ddcSymbols,
- NULL);
-}
-
-#ifdef XFree86LOADER
static int getRADEONEntityIndex(void)
{
int *radeon_entity_index = LoaderSymbol("gRADEONEntityIndex");
@@ -424,13 +233,6 @@ static int getRADEONEntityIndex(void)
else
return *radeon_entity_index;
}
-#else
-extern int gRADEONEntityIndex;
-static int getRADEONEntityIndex(void)
-{
- return gRADEONEntityIndex;
-}
-#endif
struct RADEONInt10Save {
CARD32 MEM_CNTL;
@@ -2000,7 +1802,6 @@ static Bool RADEONPreInitChipType(ScrnInfoPtr pScrn)
"using shadow framebuffer\n");
if (!xf86LoadSubModule(pScrn, "shadow"))
return FALSE;
- xf86LoaderReqSymLists(shadowSymbols, NULL);
}
return TRUE;
}
@@ -2016,16 +1817,13 @@ static void RADEONPreInitDDC(ScrnInfoPtr pScrn)
if (!xf86LoadSubModule(pScrn, "ddc")) {
info->ddc2 = FALSE;
} else {
- xf86LoaderReqSymLists(ddcSymbols, NULL);
info->ddc2 = TRUE;
}
/* DDC can use I2C bus */
/* Load I2C if we have the code to use it */
if (info->ddc2) {
- if (xf86LoadSubModule(pScrn, "i2c")) {
- xf86LoaderReqSymLists(i2cSymbols,NULL);
- }
+ xf86LoadSubModule(pScrn, "i2c");
}
}
@@ -2045,7 +1843,6 @@ static Bool RADEONPreInitCursor(ScrnInfoPtr pScrn)
if (!xf86ReturnOptValBool(info->Options, OPTION_SW_CURSOR, FALSE)) {
if (!xf86LoadSubModule(pScrn, "ramdac")) return FALSE;
- xf86LoaderReqSymLists(ramdacSymbols, NULL);
}
return TRUE;
}
@@ -2053,7 +1850,6 @@ static Bool RADEONPreInitCursor(ScrnInfoPtr pScrn)
/* This is called by RADEONPreInit to initialize hardware acceleration */
static Bool RADEONPreInitAccel(ScrnInfoPtr pScrn)
{
-#ifdef XFree86LOADER
RADEONInfoPtr info = RADEONPTR(pScrn);
MessageType from;
#if defined(USE_EXA) && defined(USE_XAA)
@@ -2101,7 +1897,6 @@ static Bool RADEONPreInitAccel(ScrnInfoPtr pScrn)
LoaderErrorMsg(NULL, "exa", errmaj, errmin);
return FALSE;
}
- xf86LoaderReqSymLists(exaSymbols, NULL);
}
#endif /* USE_EXA */
#ifdef USE_XAA
@@ -2124,11 +1919,9 @@ static Bool RADEONPreInitAccel(ScrnInfoPtr pScrn)
}
}
}
- xf86LoaderReqSymLists(xaaSymbols, NULL);
}
#endif /* USE_XAA */
}
-#endif /* XFree86Loader */
return TRUE;
}
@@ -2141,8 +1934,6 @@ static Bool RADEONPreInitInt10(ScrnInfoPtr pScrn, xf86Int10InfoPtr *ppInt10)
CARD32 fp2_gen_ctl_save = 0;
if (xf86LoadSubModule(pScrn, "int10")) {
- xf86LoaderReqSymLists(int10Symbols, NULL);
-
/* The VGA BIOS on the RV100/QY cannot be read when the digital output
* is enabled. Clear and restore FP2_ON around int10 to avoid this.
*/
@@ -2726,7 +2517,7 @@ static const xf86CrtcConfigFuncsRec RADEONCRTCResizeFuncs = {
RADEONCRTCResize
};
-_X_EXPORT Bool RADEONPreInit(ScrnInfoPtr pScrn, int flags)
+Bool RADEONPreInit(ScrnInfoPtr pScrn, int flags)
{
xf86CrtcConfigPtr xf86_config;
RADEONInfoPtr info;
@@ -2873,7 +2664,6 @@ _X_EXPORT Bool RADEONPreInit(ScrnInfoPtr pScrn, int flags)
if (!xf86LoadSubModule(pScrn, "vgahw"))
info->VGAAccess = FALSE;
else {
- xf86LoaderReqSymLists(vgahwSymbols, NULL);
if (!vgaHWGetHWRec(pScrn))
info->VGAAccess = FALSE;
}
@@ -2989,8 +2779,6 @@ _X_EXPORT Bool RADEONPreInit(ScrnInfoPtr pScrn, int flags)
/* Get ScreenInit function */
if (!xf86LoadSubModule(pScrn, "fb")) return FALSE;
- xf86LoaderReqSymLists(fbSymbols, NULL);
-
if (!RADEONPreInitGamma(pScrn)) goto fail;
if (!RADEONPreInitCursor(pScrn)) goto fail;
diff --git a/src/radeon_exa.c b/src/radeon_exa.c
index 4da4841..3b0c734 100644
--- a/src/radeon_exa.c
+++ b/src/radeon_exa.c
@@ -105,6 +105,23 @@ RADEONLog2(int val)
return bits - 1;
}
+static __inline__ int
+RADEONPow2(int num)
+{
+ int pot = 2;
+
+ if (num <= 2)
+ return num;
+
+ while (pot < num) {
+ pot *= 2;
+ }
+
+ return pot;
+}
+
+
+
static __inline__ CARD32 F_TO_DW(float val)
{
union {
diff --git a/src/radeon_exa_funcs.c b/src/radeon_exa_funcs.c
index 278d5a7..d0c0065 100644
--- a/src/radeon_exa_funcs.c
+++ b/src/radeon_exa_funcs.c
@@ -55,7 +55,6 @@
#include <string.h>
#include "radeon.h"
-#include "atidri.h"
#include "exa.h"
@@ -534,9 +533,17 @@ Bool FUNC_NAME(RADEONDrawInit)(ScreenPtr pScreen)
#ifdef RENDER
if (info->RenderAccel) {
- if (info->ChipFamily >= CHIP_FAMILY_R300) {
- xf86DrvMsg(pScrn->scrnIndex, X_INFO, "Render acceleration "
- "unsupported on R300 type cards and newer.\n");
+ if (info->ChipFamily >= CHIP_FAMILY_RV515)
+ xf86DrvMsg(pScrn->scrnIndex, X_INFO, "Render acceleration "
+ "unsupported on R500 and newer cards.\n");
+ else if (IS_R300_VARIANT && !info->IsIGP) {
+ xf86DrvMsg(pScrn->scrnIndex, X_INFO, "Render acceleration "
+ "enabled for R300 type cards.\n");
+ info->exa->CheckComposite = R300CheckComposite;
+ info->exa->PrepareComposite =
+ FUNC_NAME(R300PrepareComposite);
+ info->exa->Composite = FUNC_NAME(RadeonComposite);
+ info->exa->DoneComposite = RadeonDoneComposite;
} else if ((info->ChipFamily == CHIP_FAMILY_RV250) ||
(info->ChipFamily == CHIP_FAMILY_RV280) ||
(info->ChipFamily == CHIP_FAMILY_RS300) ||
diff --git a/src/radeon_exa_render.c b/src/radeon_exa_render.c
index eae69c4..c642aff 100644
--- a/src/radeon_exa_render.c
+++ b/src/radeon_exa_render.c
@@ -121,6 +121,17 @@ static struct formatinfo R200TexFormats[] = {
{PICT_a8, R200_TXFORMAT_I8 | R200_TXFORMAT_ALPHA_IN_MAP},
};
+static struct formatinfo R300TexFormats[] = {
+ {PICT_a8r8g8b8, R300_EASY_TX_FORMAT(X, Y, Z, W, W8Z8Y8X8)},
+ {PICT_x8r8g8b8, R300_EASY_TX_FORMAT(X, Y, Z, ONE, W8Z8Y8X8)},
+ {PICT_a8b8g8r8, R300_EASY_TX_FORMAT(Z, Y, X, W, W8Z8Y8X8)},
+ {PICT_x8b8g8r8, R300_EASY_TX_FORMAT(Z, Y, X, ONE, W8Z8Y8X8)},
+ {PICT_r5g6b5, R300_EASY_TX_FORMAT(X, Y, Z, ONE, Z5Y6X5)},
+ {PICT_a1r5g5b5, R300_EASY_TX_FORMAT(X, Y, Z, W, W1Z5Y5X5)},
+ {PICT_x1r5g5b5, R300_EASY_TX_FORMAT(X, Y, Z, ONE, W1Z5Y5X5)},
+ {PICT_a8, R300_EASY_TX_FORMAT(ZERO, ZERO, ZERO, X, X8)},
+};
+
/* Common Radeon setup code */
static Bool RADEONGetDestFormat(PicturePtr pDstPicture, CARD32 *dst_format)
@@ -148,6 +159,31 @@ static Bool RADEONGetDestFormat(PicturePtr pDstPicture, CARD32 *dst_format)
return TRUE;
}
+static Bool R300GetDestFormat(PicturePtr pDstPicture, CARD32 *dst_format)
+{
+ switch (pDstPicture->format) {
+ case PICT_a8r8g8b8:
+ case PICT_x8r8g8b8:
+ *dst_format = R300_COLORFORMAT_ARGB8888;
+ break;
+ case PICT_r5g6b5:
+ *dst_format = R300_COLORFORMAT_RGB565;
+ break;
+ case PICT_a1r5g5b5:
+ case PICT_x1r5g5b5:
+ *dst_format = R300_COLORFORMAT_ARGB1555;
+ break;
+ case PICT_a8:
+ *dst_format = R300_COLORFORMAT_I8;
+ break;
+ default:
+ ErrorF("Unsupported dest format 0x%x\n",
+ (int)pDstPicture->format);
+ return FALSE;
+ }
+ return TRUE;
+}
+
static CARD32 RADEONGetBlendCntl(int op, PicturePtr pMask, CARD32 dst_format)
{
CARD32 sblend, dblend;
@@ -706,9 +742,304 @@ static Bool FUNC_NAME(R200PrepareComposite)(int op, PicturePtr pSrcPicture,
return TRUE;
}
-#ifdef ACCEL_CP
+#ifdef ONLY_ONCE
+
+static Bool R300CheckCompositeTexture(PicturePtr pPict, int unit)
+{
+ int w = pPict->pDrawable->width;
+ int h = pPict->pDrawable->height;
+ int i;
+
+ if ((w > 0x7ff) || (h > 0x7ff))
+ RADEON_FALLBACK(("Picture w/h too large (%dx%d)\n", w, h));
+
+ for (i = 0; i < sizeof(R300TexFormats) / sizeof(R300TexFormats[0]); i++)
+ {
+ if (R300TexFormats[i].fmt == pPict->format)
+ break;
+ }
+ if (i == sizeof(R300TexFormats) / sizeof(R300TexFormats[0]))
+ RADEON_FALLBACK(("Unsupported picture format 0x%x\n",
+ (int)pPict->format));
+
+ if (pPict->repeat && ((w & (w - 1)) != 0 || (h & (h - 1)) != 0))
+ RADEON_FALLBACK(("NPOT repeat unsupported (%dx%d)\n", w, h));
+
+ if (pPict->filter != PictFilterNearest &&
+ pPict->filter != PictFilterBilinear)
+ RADEON_FALLBACK(("Unsupported filter 0x%x\n", pPict->filter));
+
+ return TRUE;
+}
+
+#endif /* ONLY_ONCE */
+
+static Bool FUNC_NAME(R300TextureSetup)(PicturePtr pPict, PixmapPtr pPix,
+ int unit)
+{
+ RINFO_FROM_SCREEN(pPix->drawable.pScreen);
+ CARD32 txfilter, txformat0, txformat1, txoffset, txpitch;
+ int w = pPict->pDrawable->width;
+ int h = pPict->pDrawable->height;
+ int i, pixel_shift;
+ ACCEL_PREAMBLE();
+
+ TRACE;
+
+ txpitch = exaGetPixmapPitch(pPix);
+ txoffset = exaGetPixmapOffset(pPix) + info->fbLocation;
+
+ if ((txoffset & 0x1f) != 0)
+ RADEON_FALLBACK(("Bad texture offset 0x%x\n", (int)txoffset));
+ if ((txpitch & 0x1f) != 0)
+ RADEON_FALLBACK(("Bad texture pitch 0x%x\n", (int)txpitch));
+
+ pixel_shift = pPix->drawable.bitsPerPixel >> 4;
+ txpitch >>= pixel_shift;
+ txpitch -= 1;
+
+ if (RADEONPixmapIsColortiled(pPix))
+ txoffset |= R300_MACRO_TILE;
+
+ for (i = 0; i < sizeof(R300TexFormats) / sizeof(R300TexFormats[0]); i++)
+ {
+ if (R300TexFormats[i].fmt == pPict->format)
+ break;
+ }
+
+ txformat1 = R300TexFormats[i].card_fmt;
+
+ txformat0 = (((RADEONPow2(w) - 1) << R300_TXWIDTH_SHIFT) |
+ ((RADEONPow2(h) - 1) << R300_TXHEIGHT_SHIFT));
+
+ if (pPict->repeat) {
+ ErrorF("repeat\n");
+ if ((h != 1) &&
+ (((w * pPix->drawable.bitsPerPixel / 8 + 31) & ~31) != txpitch))
+ RADEON_FALLBACK(("Width %d and pitch %u not compatible for repeat\n",
+ w, (unsigned)txpitch));
+ } else
+ txformat0 |= R300_TXPITCH_EN;
+
+
+ info->texW[unit] = RADEONPow2(w);
+ info->texH[unit] = RADEONPow2(h);
+
+ switch (pPict->filter) {
+ case PictFilterNearest:
+ txfilter = (R300_TX_MAG_FILTER_NEAREST | R300_TX_MIN_FILTER_NEAREST);
+ break;
+ case PictFilterBilinear:
+ txfilter = (R300_TX_MAG_FILTER_LINEAR | R300_TX_MIN_FILTER_LINEAR);
+ break;
+ default:
+ RADEON_FALLBACK(("Bad filter 0x%x\n", pPict->filter));
+ }
+
+ BEGIN_ACCEL(6);
+ OUT_ACCEL_REG(R300_TX_FILTER0_0 + (unit * 4), txfilter);
+ OUT_ACCEL_REG(R300_TX_FILTER1_0 + (unit * 4), 0x0);
+ OUT_ACCEL_REG(R300_TX_FORMAT0_0 + (unit * 4), txformat0);
+ OUT_ACCEL_REG(R300_TX_FORMAT1_0 + (unit * 4), txformat1);
+ OUT_ACCEL_REG(R300_TX_FORMAT2_0 + (unit * 4), txpitch);
+ OUT_ACCEL_REG(R300_TX_OFFSET_0 + (unit * 4), txoffset);
+ FINISH_ACCEL();
+
+ if (pPict->transform != 0) {
+ is_transform[unit] = TRUE;
+ transform[unit] = pPict->transform;
+ } else {
+ is_transform[unit] = FALSE;
+ }
+
+ return TRUE;
+}
+
+#ifdef ONLY_ONCE
+
+static Bool R300CheckComposite(int op, PicturePtr pSrcPicture, PicturePtr pMaskPicture,
+ PicturePtr pDstPicture)
+{
+ CARD32 tmp1;
+ ScreenPtr pScreen = pDstPicture->pDrawable->pScreen;
+ PixmapPtr pSrcPixmap, pDstPixmap;
+ ScrnInfoPtr pScrn = xf86Screens[pScreen->myNum];
+ xf86CrtcConfigPtr xf86_config = XF86_CRTC_CONFIG_PTR(pScrn);
+ int i;
+
+ TRACE;
+
+ /* Check for unsupported compositing operations. */
+ if (op >= sizeof(RadeonBlendOp) / sizeof(RadeonBlendOp[0]))
+ RADEON_FALLBACK(("Unsupported Composite op 0x%x\n", op));
+
+#if 1
+ /* Throw out cases that aren't going to be our rotation first */
+ if (pMaskPicture != NULL || op != PictOpSrc || pSrcPicture->pDrawable == NULL)
+ RADEON_FALLBACK(("Junk driver\n"));
+
+ if (pSrcPicture->pDrawable->type != DRAWABLE_WINDOW ||
+ pDstPicture->pDrawable->type != DRAWABLE_PIXMAP) {
+ RADEON_FALLBACK(("bad drawable\n"));
+ }
+
+ pSrcPixmap = (*pScreen->GetWindowPixmap) ((WindowPtr) pSrcPicture->pDrawable);
+ pDstPixmap = (PixmapPtr)pDstPicture->pDrawable;
+
+ /* Check if the dest is one of our shadow pixmaps */
+ for (i = 0; i < xf86_config->num_crtc; i++) {
+ xf86CrtcPtr crtc = xf86_config->crtc[i];
+
+ if (crtc->rotatedPixmap == pDstPixmap)
+ break;
+ }
+ if (i == xf86_config->num_crtc)
+ RADEON_FALLBACK(("no rotated pixmap\n"));
+
+ if (pSrcPixmap != pScreen->GetScreenPixmap(pScreen))
+ RADEON_FALLBACK(("src not screen\n"));
+#endif
+
+
+ if (pMaskPicture != NULL && pMaskPicture->componentAlpha) {
+ /* Check if it's component alpha that relies on a source alpha and on
+ * the source value. We can only get one of those into the single
+ * source value that we get to blend with.
+ */
+ if (RadeonBlendOp[op].src_alpha &&
+ (RadeonBlendOp[op].blend_cntl & RADEON_SRC_BLEND_MASK) !=
+ RADEON_SRC_BLEND_GL_ZERO)
+ {
+ RADEON_FALLBACK(("Component alpha not supported with source "
+ "alpha and source value blending.\n"));
+ }
+ }
+
+ if (!R300CheckCompositeTexture(pSrcPicture, 0))
+ return FALSE;
+ if (pMaskPicture != NULL && !R300CheckCompositeTexture(pMaskPicture, 1))
+ return FALSE;
+
+ if (!R300GetDestFormat(pDstPicture, &tmp1))
+ return FALSE;
+
+ return TRUE;
+
+}
+#endif /* ONLY_ONCE */
+
+static Bool FUNC_NAME(R300PrepareComposite)(int op, PicturePtr pSrcPicture,
+ PicturePtr pMaskPicture, PicturePtr pDstPicture,
+ PixmapPtr pSrc, PixmapPtr pMask, PixmapPtr pDst)
+{
+ RINFO_FROM_SCREEN(pDst->drawable.pScreen);
+ CARD32 dst_format, dst_offset, dst_pitch;
+ CARD32 txenable, colorpitch;
+ /*CARD32 blendcntl, cblend, ablend;*/
+ int pixel_shift;
+ ACCEL_PREAMBLE();
+
+ TRACE;
+
+ if (!info->XInited3D)
+ RADEONInit3DEngine(pScrn);
+
+ R300GetDestFormat(pDstPicture, &dst_format);
+ pixel_shift = pDst->drawable.bitsPerPixel >> 4;
+
+ dst_offset = exaGetPixmapOffset(pDst) + info->fbLocation;
+ dst_pitch = exaGetPixmapPitch(pDst);
+ colorpitch = dst_pitch >> pixel_shift;
+
+ if (RADEONPixmapIsColortiled(pDst))
+ colorpitch |= R300_COLORTILE;
+
+ colorpitch |= dst_format;
+
+ if ((dst_offset & 0x0f) != 0)
+ RADEON_FALLBACK(("Bad destination offset 0x%x\n", (int)dst_offset));
+ if (((dst_pitch >> pixel_shift) & 0x7) != 0)
+ RADEON_FALLBACK(("Bad destination pitch 0x%x\n", (int)dst_pitch));
+
+ if (!FUNC_NAME(R300TextureSetup)(pSrcPicture, pSrc, 0))
+ return FALSE;
+ txenable = R300_TEX_0_ENABLE;
+
+ if (pMask != NULL) {
+ if (!FUNC_NAME(R300TextureSetup)(pMaskPicture, pMask, 1))
+ return FALSE;
+ txenable |= R300_TEX_1_ENABLE;
+ } else {
+ is_transform[1] = FALSE;
+ }
-#define VTX_DWORD_COUNT 6
+ RADEON_SWITCH_TO_3D();
+
+ BEGIN_ACCEL(6);
+ OUT_ACCEL_REG(R300_TX_INVALTAGS, 0x0);
+ OUT_ACCEL_REG(R300_TX_ENABLE, txenable);
+
+ OUT_ACCEL_REG(R300_RB3D_COLOROFFSET0, dst_offset);
+ OUT_ACCEL_REG(R300_RB3D_COLORPITCH0, colorpitch);
+
+ OUT_ACCEL_REG(R300_RB3D_BLENDCNTL, 0x0);
+ OUT_ACCEL_REG(R300_RB3D_ABLENDCNTL, 0x0);
+
+#if 0
+ /* IN operator: Multiply src by mask components or mask alpha.
+ * BLEND_CTL_ADD is A * B + C.
+ * If a picture is a8, we have to explicitly zero its color values.
+ * If the destination is a8, we have to route the alpha to red, I think.
+ * If we're doing component alpha where the source for blending is going to
+ * be the source alpha (and there's no source value used), we have to zero
+ * the source's color values.
+ */
+ cblend = R200_TXC_OP_MADD | R200_TXC_ARG_C_ZERO;
+ ablend = R200_TXA_OP_MADD | R200_TXA_ARG_C_ZERO;
+
+ if (pDstPicture->format == PICT_a8 ||
+ (pMask && pMaskPicture->componentAlpha && RadeonBlendOp[op].src_alpha))
+ {
+ cblend |= R200_TXC_ARG_A_R0_ALPHA;
+ } else if (pSrcPicture->format == PICT_a8)
+ cblend |= R200_TXC_ARG_A_ZERO;
+ else
+ cblend |= R200_TXC_ARG_A_R0_COLOR;
+ ablend |= R200_TXA_ARG_A_R0_ALPHA;
+
+ if (pMask) {
+ if (pMaskPicture->componentAlpha &&
+ pDstPicture->format != PICT_a8)
+ cblend |= R200_TXC_ARG_B_R1_COLOR;
+ else
+ cblend |= R200_TXC_ARG_B_R1_ALPHA;
+ ablend |= R200_TXA_ARG_B_R1_ALPHA;
+ } else {
+ cblend |= R200_TXC_ARG_B_ZERO | R200_TXC_COMP_ARG_B;
+ ablend |= R200_TXA_ARG_B_ZERO | R200_TXA_COMP_ARG_B;
+ }
+
+ OUT_ACCEL_REG(R200_PP_TXCBLEND_0, cblend);
+ OUT_ACCEL_REG(R200_PP_TXCBLEND2_0,
+ R200_TXC_CLAMP_0_1 | R200_TXC_OUTPUT_REG_R0);
+ OUT_ACCEL_REG(R200_PP_TXABLEND_0, ablend);
+ OUT_ACCEL_REG(R200_PP_TXABLEND2_0,
+ R200_TXA_CLAMP_0_1 | R200_TXA_OUTPUT_REG_R0);
+
+ /* Op operator. */
+ blendcntl = RADEONGetBlendCntl(op, pMaskPicture, pDstPicture->format);
+ OUT_ACCEL_REG(RADEON_RB3D_BLENDCNTL, blendcntl);
+#endif
+
+ FINISH_ACCEL();
+
+ return TRUE;
+}
+
+#define VTX_COUNT 6
+#define R300_VTX_COUNT 4
+
+#ifdef ACCEL_CP
#define VTX_OUT(_dstX, _dstY, _srcX, _srcY, _maskX, _maskY) \
do { \
@@ -720,9 +1051,15 @@ do { \
OUT_RING_F(_maskY); \
} while (0)
-#else /* ACCEL_CP */
+#define VTX_OUT4(_dstX, _dstY, _srcX, _srcY) \
+do { \
+ OUT_RING_F(_dstX); \
+ OUT_RING_F(_dstY); \
+ OUT_RING_F(_srcX); \
+ OUT_RING_F(_srcY); \
+} while (0)
-#define VTX_REG_COUNT 6
+#else /* ACCEL_CP */
#define VTX_OUT(_dstX, _dstY, _srcX, _srcY, _maskX, _maskY) \
do { \
@@ -734,6 +1071,14 @@ do { \
OUT_ACCEL_REG_F(RADEON_SE_PORT_DATA0, _maskY); \
} while (0)
+#define VTX_OUT4(_dstX, _dstY, _srcX, _srcY) \
+do { \
+ OUT_ACCEL_REG_F(RADEON_SE_PORT_DATA0, _dstX); \
+ OUT_ACCEL_REG_F(RADEON_SE_PORT_DATA0, _dstY); \
+ OUT_ACCEL_REG_F(RADEON_SE_PORT_DATA0, _srcX); \
+ OUT_ACCEL_REG_F(RADEON_SE_PORT_DATA0, _srcY); \
+} while (0)
+
#endif /* !ACCEL_CP */
#ifdef ONLY_ONCE
@@ -759,6 +1104,7 @@ static void FUNC_NAME(RadeonComposite)(PixmapPtr pDst,
{
RINFO_FROM_SCREEN(pDst->drawable.pScreen);
int srcXend, srcYend, maskXend, maskYend;
+ int vtx_count;
xPointFixed srcTopLeft, srcTopRight, srcBottomLeft, srcBottomRight;
xPointFixed maskTopLeft, maskTopRight, maskBottomLeft, maskBottomRight;
ACCEL_PREAMBLE();
@@ -766,7 +1112,7 @@ static void FUNC_NAME(RadeonComposite)(PixmapPtr pDst,
ENTER_DRAW(0);
/*ErrorF("RadeonComposite (%d,%d) (%d,%d) (%d,%d) (%d,%d)\n",
- srcX, srcY, maskX, maskY,dstX, dstY, w, h);*/
+ srcX, srcY, maskX, maskY,dstX, dstY, w, h);*/
srcXend = srcX + w;
srcYend = srcY + h;
@@ -804,11 +1150,19 @@ static void FUNC_NAME(RadeonComposite)(PixmapPtr pDst,
transformPoint(transform[1], &maskBottomRight);
}
+ vtx_count = (info->ChipFamily >= CHIP_FAMILY_R300) ? R300_VTX_COUNT : VTX_COUNT;
+
+ if (IS_R300_VARIANT) {
+ BEGIN_ACCEL(1);
+ OUT_ACCEL_REG(R300_VAP_VTX_SIZE, vtx_count);
+ FINISH_ACCEL();
+ }
+
#ifdef ACCEL_CP
if (info->ChipFamily < CHIP_FAMILY_R200) {
- BEGIN_RING(4 * VTX_DWORD_COUNT + 3);
+ BEGIN_RING(4 * vtx_count + 3);
OUT_RING(CP_PACKET3(RADEON_CP_PACKET3_3D_DRAW_IMMD,
- 4 * VTX_DWORD_COUNT + 1));
+ 4 * vtx_count + 1));
OUT_RING(RADEON_CP_VC_FRMT_XY |
RADEON_CP_VC_FRMT_ST0 |
RADEON_CP_VC_FRMT_ST1);
@@ -818,16 +1172,24 @@ static void FUNC_NAME(RadeonComposite)(PixmapPtr pDst,
RADEON_CP_VC_CNTL_VTX_FMT_RADEON_MODE |
(4 << RADEON_CP_VC_CNTL_NUM_SHIFT));
} else {
- BEGIN_RING(4 * VTX_DWORD_COUNT + 2);
+ if (IS_R300_VARIANT)
+ BEGIN_RING(4 * vtx_count + 6);
+ else
+ BEGIN_RING(4 * vtx_count + 2);
+
OUT_RING(CP_PACKET3(R200_CP_PACKET3_3D_DRAW_IMMD_2,
- 4 * VTX_DWORD_COUNT));
+ 4 * vtx_count));
OUT_RING(RADEON_CP_VC_CNTL_PRIM_TYPE_TRI_FAN |
RADEON_CP_VC_CNTL_PRIM_WALK_RING |
(4 << RADEON_CP_VC_CNTL_NUM_SHIFT));
}
#else /* ACCEL_CP */
- BEGIN_ACCEL(1 + VTX_REG_COUNT * 4);
+ if (IS_R300_VARIANT)
+ BEGIN_ACCEL(3 + vtx_count * 4);
+ else
+ BEGIN_ACCEL(1 + vtx_count * 4);
+
if (info->ChipFamily < CHIP_FAMILY_R200) {
OUT_ACCEL_REG(RADEON_SE_VF_CNTL, (RADEON_VF_PRIM_TYPE_TRIANGLE_FAN |
RADEON_VF_PRIM_WALK_DATA |
@@ -846,6 +1208,22 @@ static void FUNC_NAME(RadeonComposite)(PixmapPtr pDst,
VTX_OUT(dstX, dstY + h, srcX, srcYend, maskX, maskYend);
VTX_OUT(dstX + w, dstY + h, srcXend, srcYend, maskXend, maskYend);
VTX_OUT(dstX + w, dstY, srcXend, srcY, maskXend, maskY);
+ } else if (IS_R300_VARIANT) {
+ VTX_OUT4((float)dstX, (float)dstY,
+ xFixedToFloat(srcTopLeft.x) / info->texW[0],
+ xFixedToFloat(srcTopLeft.y) / info->texH[0]);
+
+ VTX_OUT4((float)dstX, (float)(dstY + h),
+ xFixedToFloat(srcBottomLeft.x) / info->texW[0],
+ xFixedToFloat(srcBottomLeft.y) / info->texH[0]);
+
+ VTX_OUT4((float)(dstX + w), (float)(dstY + h),
+ xFixedToFloat(srcBottomRight.x) / info->texW[0],
+ xFixedToFloat(srcBottomRight.y) / info->texH[0]);
+
+ VTX_OUT4((float)(dstX + w), (float)dstY,
+ xFixedToFloat(srcTopRight.x) / info->texW[0],
+ xFixedToFloat(srcTopRight.y) / info->texH[0]);
} else {
VTX_OUT((float)dstX, (float)dstY,
xFixedToFloat(srcTopLeft.x) / info->texW[0], xFixedToFloat(srcTopLeft.y) / info->texH[0],
@@ -861,6 +1239,11 @@ static void FUNC_NAME(RadeonComposite)(PixmapPtr pDst,
xFixedToFloat(maskTopRight.x) / info->texW[1], xFixedToFloat(maskTopRight.y) / info->texH[1]);
}
+ if (IS_R300_VARIANT) {
+ OUT_ACCEL_REG(R300_RB3D_DSTCACHE_CTLSTAT, 0xA);
+ OUT_ACCEL_REG(RADEON_WAIT_UNTIL, RADEON_WAIT_3D_IDLECLEAN);
+ }
+
#ifdef ACCEL_CP
ADVANCE_RING();
#else
@@ -870,6 +1253,7 @@ static void FUNC_NAME(RadeonComposite)(PixmapPtr pDst,
LEAVE_DRAW(0);
}
#undef VTX_OUT
+#undef VTX_OUT4
#ifdef ONLY_ONCE
static void RadeonDoneComposite(PixmapPtr pDst)
diff --git a/src/radeon_misc.c b/src/radeon_misc.c
index 17b987c..7840376 100644
--- a/src/radeon_misc.c
+++ b/src/radeon_misc.c
@@ -24,8 +24,6 @@
#include "config.h"
#endif
-#ifdef XFree86LOADER
-
#include "ativersion.h"
#include "radeon_probe.h"
@@ -70,8 +68,6 @@ RADEONSetup
if (!xf86ServerIsOnlyDetecting() && !LoaderSymbol(ATI_NAME))
xf86LoadOneModule(ATI_DRIVER_NAME, Options);
- RADEONLoaderRefSymLists();
-
Inited = TRUE;
}
@@ -85,5 +81,3 @@ _X_EXPORT XF86ModuleData radeonModuleData =
RADEONSetup,
NULL
};
-
-#endif /* XFree86LOADER */
diff --git a/src/radeon_mm_i2c.c b/src/radeon_mm_i2c.c
index cdb9437..0524fa9 100644
--- a/src/radeon_mm_i2c.c
+++ b/src/radeon_mm_i2c.c
@@ -410,14 +410,6 @@ void RADEONInitI2C(ScrnInfoPtr pScrn, RADEONPortPrivPtr pPriv)
pPriv->i2c = NULL;
return;
}
- xf86LoaderReqSymbols("xf86CreateI2CBusRec",
- "xf86I2CBusInit",
- "xf86DestroyI2CBus",
- "xf86CreateI2CDevRec",
- "xf86DestroyI2CDevRec",
- "xf86I2CDevInit",
- "xf86I2CWriteRead",
- NULL);
pPriv->i2c=CreateI2CBusRec();
pPriv->i2c->scrnIndex=pScrn->scrnIndex;
pPriv->i2c->BusName="Radeon multimedia bus";
@@ -483,7 +475,6 @@ void RADEONInitI2C(ScrnInfoPtr pScrn, RADEONPortPrivPtr pPriv)
}
else
{
- xf86LoaderReqSymbols(FI1236SymbolsList, NULL);
if(pPriv->fi1236 == NULL)
{
pPriv->fi1236 = xf86_Detect_FI1236(pPriv->i2c, FI1236_ADDR_1);
@@ -512,7 +503,6 @@ void RADEONInitI2C(ScrnInfoPtr pScrn, RADEONPortPrivPtr pPriv)
}
else
{
- xf86LoaderReqSymbols(TDA9885SymbolsList, NULL);
if(pPriv->tda9885 == NULL)
{
pPriv->tda9885 = xf86_Detect_tda9885(pPriv->i2c, TDA9885_ADDR_1);
@@ -537,7 +527,6 @@ void RADEONInitI2C(ScrnInfoPtr pScrn, RADEONPortPrivPtr pPriv)
}
else
{
- xf86LoaderReqSymbols(TDA9885SymbolsList, NULL);
if(pPriv->tda9885 == NULL)
{
pPriv->tda9885 = xf86_Detect_tda9885(pPriv->i2c, TDA9885_ADDR_1);
@@ -560,7 +549,6 @@ void RADEONInitI2C(ScrnInfoPtr pScrn, RADEONPortPrivPtr pPriv)
}
else
{
- xf86LoaderReqSymbols(UDA1380SymbolsList, NULL);
if(pPriv->uda1380 == NULL)
{
pPriv->uda1380 = xf86_Detect_uda1380(pPriv->i2c, UDA1380_ADDR_1);
@@ -582,7 +570,6 @@ void RADEONInitI2C(ScrnInfoPtr pScrn, RADEONPortPrivPtr pPriv)
}
else
{
- xf86LoaderReqSymbols(MSP3430SymbolsList, NULL);
if(pPriv->msp3430 == NULL)
{
pPriv->msp3430 = xf86_DetectMSP3430(pPriv->i2c, MSP3430_ADDR_1);
@@ -616,7 +603,6 @@ void RADEONInitI2C(ScrnInfoPtr pScrn, RADEONPortPrivPtr pPriv)
}
else
{
- xf86LoaderReqSymbols(SAA7114SymbolsList, NULL);
if(pPriv->saa7114 == NULL)
{
pPriv->saa7114 = xf86_DetectSAA7114(pPriv->i2c, SAA7114_ADDR_1);
diff --git a/src/radeon_output.c b/src/radeon_output.c
index 59e01bb..be28110 100644
--- a/src/radeon_output.c
+++ b/src/radeon_output.c
@@ -75,17 +75,17 @@ const RADEONMonitorType MonTypeID[10] = {
};
const char *TMDSTypeName[4] = {
- "Unknown",
+ "None",
"Internal",
"External",
- "None"
+ "LVTMA",
};
const char *DACTypeName[4] = {
- "Unknown",
+ "None",
"Primary",
"TVDAC/ExtDAC",
- "None"
+ "ExtDac"
};
const char *ConnectorTypeName[17] = {
@@ -204,8 +204,8 @@ void RADEONPrintPortMap(ScrnInfoPtr pScrn)
o,
MonTypeName[radeon_output->MonType+1],
ConnectorTypeName[radeon_output->ConnectorType],
- DACTypeName[radeon_output->DACType+1],
- TMDSTypeName[radeon_output->TMDSType+1],
+ DACTypeName[radeon_output->DACType],
+ TMDSTypeName[radeon_output->TMDSType],
(unsigned int)radeon_output->ddc_line);
}
@@ -1985,8 +1985,8 @@ static void RADEONSetupGenericConnectors(ScrnInfoPtr pScrn)
/* Below is the most common setting, but may not be true */
if (info->IsIGP) {
info->BiosConnector[0].ddc_line = RADEON_LCD_GPIO_MASK;
- info->BiosConnector[0].DACType = DAC_UNKNOWN;
- info->BiosConnector[0].TMDSType = TMDS_UNKNOWN;
+ info->BiosConnector[0].DACType = DAC_NONE;
+ info->BiosConnector[0].TMDSType = TMDS_NONE;
info->BiosConnector[0].ConnectorType = CONNECTOR_LVDS;
info->BiosConnector[0].valid = TRUE;
@@ -1996,7 +1996,7 @@ static void RADEONSetupGenericConnectors(ScrnInfoPtr pScrn)
else
info->BiosConnector[1].ddc_line = RADEON_GPIO_VGA_DDC;
info->BiosConnector[1].DACType = DAC_TVDAC;
- info->BiosConnector[1].TMDSType = TMDS_UNKNOWN;
+ info->BiosConnector[1].TMDSType = TMDS_NONE;
info->BiosConnector[1].ConnectorType = CONNECTOR_VGA;
info->BiosConnector[1].valid = TRUE;
} else {
@@ -2005,14 +2005,14 @@ static void RADEONSetupGenericConnectors(ScrnInfoPtr pScrn)
#else
info->BiosConnector[0].ddc_line = RADEON_LCD_GPIO_MASK;
#endif
- info->BiosConnector[0].DACType = DAC_UNKNOWN;
- info->BiosConnector[0].TMDSType = TMDS_UNKNOWN;
+ info->BiosConnector[0].DACType = DAC_NONE;
+ info->BiosConnector[0].TMDSType = TMDS_NONE;
info->BiosConnector[0].ConnectorType = CONNECTOR_LVDS;
info->BiosConnector[0].valid = TRUE;
info->BiosConnector[1].ddc_line = RADEON_GPIO_VGA_DDC;
info->BiosConnector[1].DACType = DAC_PRIMARY;
- info->BiosConnector[1].TMDSType = TMDS_UNKNOWN;
+ info->BiosConnector[1].TMDSType = TMDS_NONE;
info->BiosConnector[1].ConnectorType = CONNECTOR_VGA;
info->BiosConnector[1].valid = TRUE;
}
@@ -2024,7 +2024,7 @@ static void RADEONSetupGenericConnectors(ScrnInfoPtr pScrn)
else
info->BiosConnector[0].ddc_line = RADEON_GPIO_VGA_DDC;
info->BiosConnector[0].DACType = DAC_TVDAC;
- info->BiosConnector[0].TMDSType = TMDS_UNKNOWN;
+ info->BiosConnector[0].TMDSType = TMDS_NONE;
info->BiosConnector[0].ConnectorType = CONNECTOR_VGA;
info->BiosConnector[0].valid = TRUE;
@@ -2032,7 +2032,7 @@ static void RADEONSetupGenericConnectors(ScrnInfoPtr pScrn)
* IGP desktop chips is
*/
info->BiosConnector[1].ddc_line = RADEON_GPIO_MONID; /* DDC_DVI? */
- info->BiosConnector[1].DACType = DAC_UNKNOWN;
+ info->BiosConnector[1].DACType = DAC_NONE;
info->BiosConnector[1].TMDSType = TMDS_EXT;
info->BiosConnector[1].ConnectorType = CONNECTOR_DVI_D;
info->BiosConnector[1].valid = TRUE;
@@ -2213,8 +2213,8 @@ Bool RADEONSetupConnectors(ScrnInfoPtr pScrn)
for (i = 0; i < RADEON_MAX_BIOS_CONNECTOR; i++) {
info->BiosConnector[i].valid = FALSE;
info->BiosConnector[i].ddc_line = 0;
- info->BiosConnector[i].DACType = DAC_UNKNOWN;
- info->BiosConnector[i].TMDSType = TMDS_UNKNOWN;
+ info->BiosConnector[i].DACType = DAC_NONE;
+ info->BiosConnector[i].TMDSType = TMDS_NONE;
info->BiosConnector[i].ConnectorType = CONNECTOR_NONE;
}
@@ -2263,13 +2263,7 @@ Bool RADEONSetupConnectors(ScrnInfoPtr pScrn)
RADEONSetupGenericConnectors(pScrn);
}
- if (info->HasSingleDAC) {
- /* For RS300/RS350/RS400 chips, there is no primary DAC. Force VGA port to use TVDAC*/
- for (i = 0; i < RADEON_MAX_BIOS_CONNECTOR; i++) {
- if (info->BiosConnector[i].ConnectorType == CONNECTOR_VGA)
- info->BiosConnector[i].DACType = DAC_TVDAC;
- }
- } else if (!pRADEONEnt->HasCRTC2) {
+ if (!pRADEONEnt->HasCRTC2) {
for (i = 0; i < RADEON_MAX_BIOS_CONNECTOR; i++) {
if (info->BiosConnector[i].ConnectorType == CONNECTOR_VGA)
info->BiosConnector[i].DACType = DAC_PRIMARY;
@@ -2287,7 +2281,7 @@ Bool RADEONSetupConnectors(ScrnInfoPtr pScrn)
}
info->BiosConnector[0].valid = TRUE;
info->BiosConnector[1].valid = TRUE;
- if (sscanf(optstr, "%u,%d,%d,%u,%u,%d,%d,%u",
+ if (sscanf(optstr, "%u,%u,%u,%u,%u,%u,%u,%u",
&ddc_line[0],
&info->BiosConnector[0].DACType,
&info->BiosConnector[0].TMDSType,
diff --git a/src/radeon_probe.c b/src/radeon_probe.c
index e0a77e6..0cf54b6 100644
--- a/src/radeon_probe.c
+++ b/src/radeon_probe.c
@@ -58,7 +58,7 @@
int gRADEONEntityIndex = -1;
/* Return the options for supported chipset 'n'; NULL otherwise */
-_X_EXPORT const OptionInfoRec *
+static const OptionInfoRec *
RADEONAvailableOptions(int chipid, int busid)
{
int i;
@@ -77,7 +77,7 @@ RADEONAvailableOptions(int chipid, int busid)
}
/* Return the string name for supported chipset 'n'; NULL otherwise. */
-_X_EXPORT void
+static void
RADEONIdentify(int flags)
{
xf86PrintChipsets(RADEON_NAME,
@@ -86,7 +86,7 @@ RADEONIdentify(int flags)
}
/* Return TRUE if chipset is present; FALSE otherwise. */
-_X_EXPORT Bool
+static Bool
RADEONProbe(DriverPtr drv, int flags)
{
int numUsed;
@@ -207,3 +207,14 @@ RADEONProbe(DriverPtr drv, int flags)
return foundScreen;
}
+
+_X_EXPORT DriverRec RADEON =
+{
+ RADEON_VERSION_CURRENT,
+ RADEON_DRIVER_NAME,
+ RADEONIdentify,
+ RADEONProbe,
+ RADEONAvailableOptions,
+ NULL,
+ 0
+};
diff --git a/src/radeon_probe.h b/src/radeon_probe.h
index 2ee5428..37cd6e6 100644
--- a/src/radeon_probe.h
+++ b/src/radeon_probe.h
@@ -90,18 +90,18 @@ typedef enum
typedef enum
{
- DAC_UNKNOWN = -1,
- DAC_PRIMARY = 0,
- DAC_TVDAC = 1,
- DAC_NONE = 2
+ DAC_NONE = 0,
+ DAC_PRIMARY = 1,
+ DAC_TVDAC = 2,
+ DAC_EXT = 3
} RADEONDacType;
typedef enum
{
- TMDS_UNKNOWN = -1,
- TMDS_INT = 0,
- TMDS_EXT = 1,
- TMDS_NONE = 2
+ TMDS_NONE = 0,
+ TMDS_INT = 1,
+ TMDS_EXT = 2,
+ TMDS_LVTMA = 3
} RADEONTmdsType;
typedef enum
@@ -543,14 +543,9 @@ typedef struct
} RADEONEntRec, *RADEONEntPtr;
/* radeon_probe.c */
-extern const OptionInfoRec *RADEONAvailableOptions(int, int);
-extern void RADEONIdentify(int);
-extern Bool RADEONProbe(DriverPtr, int);
-
extern PciChipsets RADEONPciChipsets[];
/* radeon_driver.c */
-extern void RADEONLoaderRefSymLists(void);
extern Bool RADEONPreInit(ScrnInfoPtr, int);
extern Bool RADEONScreenInit(int, ScreenPtr, int, char **);
extern Bool RADEONSwitchMode(int, DisplayModePtr, int);
diff --git a/src/radeon_reg.h b/src/radeon_reg.h
index 09be229..174fda4 100644
--- a/src/radeon_reg.h
+++ b/src/radeon_reg.h
@@ -3741,4 +3741,207 @@
#define R600_CONFIG_MEMSIZE 0x5428
#define R600_CONFIG_F0_BASE 0x542C
#define R600_CONFIG_APER_SIZE 0x5430
+
+#define R300_GB_TILE_CONFIG 0x4018
+#define R300_GB_SELECT 0x401c
+#define R300_GB_ENABLE 0x4008
+#define R300_GB_AA_CONFIG 0x4020
+#define R300_GB_MSPOS0 0x4010
+#define R300_GB_MSPOS1 0x4014
+
+#define R300_GA_POLY_MODE 0x4288
+#define R300_GA_ROUND_MODE 0x428c
+#define R300_GA_COLOR_CONTROL 0x4278
+#define R300_GA_OFFSET 0x4290
+
+#define R300_VAP_CNTL_STATUS 0x2140
+#define R300_VAP_PVS_STATE_FLUSH_REG 0x2284
+#define R300_VAP_CNTL 0x2080
+#define R300_VAP_VTE_CNTL 0x20B0
+#define R300_VAP_PSC_SGN_NORM_CNTL 0x21DC
+#define R300_VAP_PROG_STREAM_CNTL_0 0x2150
+#define R300_VAP_PROG_STREAM_CNTL_EXT_0 0x21e0
+#define R300_VAP_PVS_CODE_CNTL_0 0x22D0
+#define R300_VAP_PVS_CODE_CNTL_1 0x22D8
+#define R300_VAP_PVS_VECTOR_INDX_REG 0x2200
+#define R300_VAP_PVS_VECTOR_DATA_REG 0x2204
+#define R300_VAP_PVS_FLOW_CNTL_OPC 0x22DC
+#define R300_VAP_OUT_VTX_FMT_0 0x2090
+#define R300_VAP_OUT_VTX_FMT_1 0x2094
+#define R300_VAP_VTX_SIZE 0x20b4
+#define R300_VAP_GB_VERT_CLIP_ADJ 0x2220
+#define R300_VAP_GB_VERT_DISC_ADJ 0x2224
+#define R300_VAP_GB_HORZ_CLIP_ADJ 0x2228
+#define R300_VAP_GB_HORZ_DISC_ADJ 0x222c
+#define R300_VAP_CLIP_CNTL 0x221c
+
+#define R300_SU_TEX_WRAP 0x42a0
+#define R300_SU_POLY_OFFSET_ENABLE 0x42b4
+#define R300_SU_CULL_MODE 0x42b8
+#define R300_SU_DEPTH_SCALE 0x42c0
+#define R300_SU_DEPTH_OFFSET 0x42c4
+
+#define R300_RS_COUNT 0x4300
+#define R300_RS_IP_0 0x4310
+#define R300_RS_INST_COUNT 0x4304
+#define R300_RS_INST_0 0x4330
+
+#define R300_TX_INVALTAGS 0x4100
+#define R300_TX_FILTER0_0 0x4400
+# define R300_TX_MAG_FILTER_NEAREST (1 << 9)
+# define R300_TX_MIN_FILTER_NEAREST (1 << 11)
+# define R300_TX_MAG_FILTER_LINEAR (2 << 9)
+# define R300_TX_MIN_FILTER_LINEAR (2 << 11)
+#define R300_TX_FILTER1_0 0x4440
+#define R300_TX_FORMAT0_0 0x4480
+# define R300_TXWIDTH_SHIFT 0
+# define R300_TXHEIGHT_SHIFT 11
+# define R300_NUM_LEVELS_SHIFT 26
+# define R300_NUM_LEVELS_MASK 0x
+# define R300_TXPROJECTED (1 << 30)
+# define R300_TXPITCH_EN (1 << 31)
+#define R300_TX_FORMAT1_0 0x44c0
+# define R300_TX_FORMAT_X8 0x0
+# define R300_TX_FORMAT_X16 0x1
+# define R300_TX_FORMAT_Y4X4 0x2
+# define R300_TX_FORMAT_Y8X8 0x3
+# define R300_TX_FORMAT_Y16X16 0x4
+# define R300_TX_FORMAT_Z3Y3X2 0x5
+# define R300_TX_FORMAT_Z5Y6X5 0x6
+# define R300_TX_FORMAT_Z6Y5X5 0x7
+# define R300_TX_FORMAT_Z11Y11X10 0x8
+# define R300_TX_FORMAT_Z10Y11X11 0x9
+# define R300_TX_FORMAT_W4Z4Y4X4 0xA
+# define R300_TX_FORMAT_W1Z5Y5X5 0xB
+# define R300_TX_FORMAT_W8Z8Y8X8 0xC
+# define R300_TX_FORMAT_W2Z10Y10X10 0xD
+# define R300_TX_FORMAT_W16Z16Y16X16 0xE
+# define R300_TX_FORMAT_DXT1 0xF
+# define R300_TX_FORMAT_DXT3 0x10
+# define R300_TX_FORMAT_DXT5 0x11
+# define R300_TX_FORMAT_D3DMFT_CxV8U8 0x12 /* no swizzle */
+# define R300_TX_FORMAT_A8R8G8B8 0x13 /* no swizzle */
+# define R300_TX_FORMAT_B8G8_B8G8 0x14 /* no swizzle */
+# define R300_TX_FORMAT_G8R8_G8B8 0x15 /* no swizzle */
+# define R300_TX_FORMAT_X24_Y8 0x1e
+# define R300_TX_FORMAT_X32 0x1e
+ /* Floating point formats */
+ /* Note - hardware supports both 16 and 32 bit floating point */
+# define R300_TX_FORMAT_FL_I16 0x18
+# define R300_TX_FORMAT_FL_I16A16 0x19
+# define R300_TX_FORMAT_FL_R16G16B16A16 0x1A
+# define R300_TX_FORMAT_FL_I32 0x1B
+# define R300_TX_FORMAT_FL_I32A32 0x1C
+# define R300_TX_FORMAT_FL_R32G32B32A32 0x1D
+ /* alpha modes, convenience mostly */
+ /* if you have alpha, pick constant appropriate to the
+ number of channels (1 for I8, 2 for I8A8, 4 for R8G8B8A8, etc */
+# define R300_TX_FORMAT_ALPHA_1CH 0x000
+# define R300_TX_FORMAT_ALPHA_2CH 0x200
+# define R300_TX_FORMAT_ALPHA_4CH 0x600
+# define R300_TX_FORMAT_ALPHA_NONE 0xA00
+ /* Swizzling */
+ /* constants */
+# define R300_TX_FORMAT_X 0
+# define R300_TX_FORMAT_Y 1
+# define R300_TX_FORMAT_Z 2
+# define R300_TX_FORMAT_W 3
+# define R300_TX_FORMAT_ZERO 4
+# define R300_TX_FORMAT_ONE 5
+ /* 2.0*Z, everything above 1.0 is set to 0.0 */
+# define R300_TX_FORMAT_CUT_Z 6
+ /* 2.0*W, everything above 1.0 is set to 0.0 */
+# define R300_TX_FORMAT_CUT_W 7
+
+# define R300_TX_FORMAT_B_SHIFT 18
+# define R300_TX_FORMAT_G_SHIFT 15
+# define R300_TX_FORMAT_R_SHIFT 12
+# define R300_TX_FORMAT_A_SHIFT 9
+
+ /* Convenience macro to take care of layout and swizzling */
+# define R300_EASY_TX_FORMAT(B, G, R, A, FMT) ( \
+ ((R300_TX_FORMAT_##B)<<R300_TX_FORMAT_B_SHIFT) \
+ | ((R300_TX_FORMAT_##G)<<R300_TX_FORMAT_G_SHIFT) \
+ | ((R300_TX_FORMAT_##R)<<R300_TX_FORMAT_R_SHIFT) \
+ | ((R300_TX_FORMAT_##A)<<R300_TX_FORMAT_A_SHIFT) \
+ | (R300_TX_FORMAT_##FMT) \
+ )
+
+#define R300_TX_FORMAT2_0 0x4500
+#define R300_TX_OFFSET_0 0x4540
+# define R300_ENDIAN_SWAP_16_BIT (1 << 0)
+# define R300_ENDIAN_SWAP_32_BIT (2 << 0)
+# define R300_ENDIAN_SWAP_HALF_DWORD (3 << 0)
+# define R300_MACRO_TILE (1 << 2);
+
+#define R300_TX_ENABLE 0x4104
+# define R300_TEX_0_ENABLE (1 << 0)
+# define R300_TEX_1_ENABLE (1 << 1)
+
+#define R300_US_W_FMT 0x46b4
+#define R300_US_OUT_FMT_1 0x46a8
+#define R300_US_OUT_FMT_2 0x46ac
+#define R300_US_OUT_FMT_3 0x46b0
+#define R300_US_OUT_FMT_0 0x46a4
+#define R300_US_CONFIG 0x4600
+#define R300_US_PIXSIZE 0x4604
+#define R300_US_CODE_OFFSET 0x4608
+#define R300_US_CODE_ADDR_0 0x4610
+#define R300_US_CODE_ADDR_1 0x4614
+#define R300_US_CODE_ADDR_2 0x4618
+#define R300_US_CODE_ADDR_3 0x461c
+#define R300_US_TEX_INST_0 0x4620
+#define R300_US_ALU_RGB_ADDR_0 0x46c0
+#define R300_US_ALU_RGB_INST_0 0x48c0
+#define R300_US_ALU_ALPHA_ADDR_0 0x47c0
+#define R300_US_ALU_ALPHA_INST_0 0x49c0
+
+#define R300_FG_DEPTH_SRC 0x4bd8
+#define R300_FG_FOG_BLEND 0x4bc0
+#define R300_FG_ALPHA_FUNC 0x4bd4
+
+#define R300_RB3D_DSTCACHE_CTLSTAT 0x4e4c
+#define R300_RB3D_ZCACHE_CTLSTAT 0x4f18
+#define R300_WAIT_UNTIL 0x1720
+#define R300_RB3D_ZSTENCILCNTL 0x4f04
+#define R300_RB3D_ZCACHE_CTLSTAT 0x4f18
+#define R300_RB3D_BW_CNTL 0x4f1c
+#define R300_RB3D_ZCNTL 0x4f00
+#define R300_RB3D_ZTOP 0x4f14
+#define R300_RB3D_ROPCNTL 0x4e18
+#define R300_RB3D_BLENDCNTL 0x4e04
+#define R300_RB3D_ABLENDCNTL 0x4e08
+#define R300_RB3D_DSTCACHE_CTLSTAT 0x4e4c
+#define R300_RB3D_COLOROFFSET0 0x4e28
+#define R300_RB3D_COLORPITCH0 0x4e38
+# define R300_COLORTILE (1 << 16)
+# define R300_COLORENDIAN_WORD (1 << 19)
+# define R300_COLORENDIAN_DWORD (2 << 19)
+# define R300_COLORENDIAN_HALF_DWORD (3 << 19)
+# define R300_COLORFORMAT_ARGB1555 (3 << 21)
+# define R300_COLORFORMAT_RGB565 (4 << 21)
+# define R300_COLORFORMAT_ARGB8888 (6 << 21)
+# define R300_COLORFORMAT_ARGB32323232 (7 << 21)
+# define R300_COLORFORMAT_I8 (9 << 21)
+# define R300_COLORFORMAT_ARGB16161616 (10 << 21)
+# define R300_COLORFORMAT_VYUY (11 << 21)
+# define R300_COLORFORMAT_YVYU (12 << 21)
+# define R300_COLORFORMAT_UV88 (13 << 21)
+# define R300_COLORFORMAT_ARGB4444 (15 << 21)
+
+#define R300_RB3D_AARESOLVE_CTL 0x4e88
+#define R300_RB3D_COLOR_CHANNEL_MASK 0x4e0c
+#define R300_RB3D_COLOR_CLEAR_VALUE 0x4e14
+#define R300_RB3D_DSTCACHE_CTLSTAT 0x4e4c
+#define R300_RB3D_CCTL 0x4e00
+#define R300_RB3D_DITHER_CTL 0x4e50
+
+#define R300_SC_EDGERULE 0x43a8
+#define R300_SC_SCISSOR0 0x43e0
+#define R300_SC_SCISSOR1 0x43e4
+#define R300_SC_CLIP_0_A 0x43b0
+#define R300_SC_CLIP_0_B 0x43b4
+#define R300_SC_CLIP_RULE 0x43d0
+#define R300_SC_SCREENDOOR 0x43e8
+
#endif
diff --git a/src/radeon_video.c b/src/radeon_video.c
index de70605..29d6508 100644
--- a/src/radeon_video.c
+++ b/src/radeon_video.c
@@ -1505,8 +1505,6 @@ RADEONAllocAdaptor(ScrnInfoPtr pScrn)
xf86DrvMsg(pScrn->scrnIndex,X_ERROR,"Unable to load Rage Theatre detect module\n");
goto skip_theatre;
}
- xf86LoaderReqSymbols(TheatreDetectSymbolsList, NULL);
-
RADEONSetupTheatre(pScrn, pPriv);
/*
@@ -1546,7 +1544,6 @@ RADEONAllocAdaptor(ScrnInfoPtr pScrn)
goto skip_theatre;
}
}
- xf86LoaderReqSymbols(TheatreSymbolsList, NULL);
}
if(pPriv->theatre!=NULL)
diff --git a/src/theatre.h b/src/theatre.h
index 3c1fd4b..958b443 100644
--- a/src/theatre.h
+++ b/src/theatre.h
@@ -57,25 +57,6 @@ void ResetTheatreRegsForTVout(TheatrePtr t);
void ResetTheatreRegsForNoTVout(TheatrePtr t);
-#define TheatreSymbolsList \
- "InitTheatre" \
- "RT_SetTint", \
- "RT_SetSaturation", \
- "RT_SetBrightness", \
- "RT_SetSharpness", \
- "RT_SetContrast", \
- "RT_SetInterlace", \
- "RT_SetStandard", \
- "RT_SetCombFilter", \
- "RT_SetOutputVideoSize", \
- "RT_SetConnector", \
- "ResetTheatreRegsForNoTVout", \
- "ResetTheatreRegsForTVout", \
- "DumpRageTheatreRegs", \
- "ShutdownTheatre"
-
-#ifdef XFree86LOADER
-
#define xf86_InitTheatre ((void (*)(TheatrePtr t))LoaderSymbol("InitTheatre"))
#define xf86_RT_SetTint ((void (*)(TheatrePtr, int))LoaderSymbol("RT_SetTint"))
@@ -94,24 +75,5 @@ void ResetTheatreRegsForNoTVout(TheatrePtr t);
#define xf86_ResetTheatreRegsForTVout ((void (*)(TheatrePtr))LoaderSymbol("ResetTheatreRegsForTVout"))
#define xf86_ResetTheatreRegsForNoTVout ((void (*)(TheatrePtr))LoaderSymbol("ResetTheatreRegsForNoTVout"))
#define xf86_RT_GetSignalStatus ((void (*)(TheatrePtr))LoaderSymbol("xf86_RT_GetSignalStatus"))
-#else
-
-#define xf86_InitTheatre InitTheatre
-
-#define xf86_RT_SetTint RT_SetTint
-#define xf86_RT_SetSaturation RT_SetSaturation
-#define xf86_RT_SetBrightness RT_SetBrightness
-#define xf86_RT_SetSharpness RT_SetSharpness
-#define xf86_RT_SetContrast RT_SetContrast
-#define xf86_RT_SetInterlace RT_SetInterlace
-#define xf86_RT_SetStandard RT_SetStandard
-#define xf86_RT_SetOutputVideoSize RT_SetOutputVideoSize
-#define xf86_RT_SetConnector RT_SetConnector
-
-#define xf86_RageTheatreDebugGain RageTheatreDebugGain
-#define xf86_ShutdownTheatre ShutdownTheatre
-#define xf86_DumpRageTheatreRegs DumpRageTheatreRegs
-#define xf86_ResetTheatreRegsForNoTVout ResetTheatreRegsForNoTVout
-#endif
#endif
diff --git a/src/theatre_detect.h b/src/theatre_detect.h
index b414308..5fed160 100644
--- a/src/theatre_detect.h
+++ b/src/theatre_detect.h
@@ -41,17 +41,6 @@
TheatrePtr DetectTheatre(GENERIC_BUS_Ptr b);
-#define TheatreDetectSymbolsList \
- "DetectTheatre"
-
-#ifdef XFree86LOADER
-
#define xf86_DetectTheatre ((TheatrePtr (*)(GENERIC_BUS_Ptr))LoaderSymbol("DetectTheatre"))
-#else
-
-#define xf86_DetectTheatre DetectTheatre
-
-#endif
-
#endif