diff options
author | Brice Goglin <bgoglin@debian.org> | 2008-01-17 11:30:08 +0100 |
---|---|---|
committer | Brice Goglin <bgoglin@debian.org> | 2008-01-17 11:30:08 +0100 |
commit | f90487af086e6270489dde45620b3907a77122ce (patch) | |
tree | 39ca2b5480780ad0c1cad4c151bd1049cd64c1af /src | |
parent | 204e868de3f224cb3fb20d24e5915609de0b7df9 (diff) | |
parent | 6bd510a211f25d52e74791e4a429cd2218ced541 (diff) | |
download | xf86-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')
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 \ @@ -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; } } @@ -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; @@ -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 |