summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--src/atifillin.c24
-rw-r--r--src/atifillin.h22
-rw-r--r--src/atiprobe.c122
-rw-r--r--src/r128_driver.c31
-rw-r--r--src/r128_probe.c42
-rw-r--r--src/r128_probe.h8
-rw-r--r--src/radeon_accel.c2
-rw-r--r--src/radeon_driver.c27
-rw-r--r--src/radeon_probe.c52
-rw-r--r--src/radeon_probe.h14
-rw-r--r--src/radeon_video.c2
11 files changed, 151 insertions, 195 deletions
diff --git a/src/atifillin.c b/src/atifillin.c
new file mode 100644
index 00000000..76df7550
--- /dev/null
+++ b/src/atifillin.c
@@ -0,0 +1,24 @@
+/*
+ * atifillin.c: fill in a ScrnInfoPtr with the relevant information for
+ * atimisc.
+ *
+ * (c) 2004 Adam Jackson. Standard MIT license applies.
+ */
+
+#include "atifillin.h"
+
+void ATIFillInScreenInfo(ScrnInfoPtr pScreenInfo)
+{
+ pScreenInfo->driverVersion = ATI_VERSION_CURRENT;
+ pScreenInfo->driverName = ATI_DRIVER_NAME;
+ pScreenInfo->name = ATI_NAME;
+ pScreenInfo->Probe = ATIProbe;
+ pScreenInfo->PreInit = ATIPreInit;
+ pScreenInfo->ScreenInit = ATIScreenInit;
+ pScreenInfo->SwitchMode = ATISwitchMode;
+ pScreenInfo->AdjustFrame = ATIAdjustFrame;
+ pScreenInfo->EnterVT = ATIEnterVT;
+ pScreenInfo->LeaveVT = ATILeaveVT;
+ pScreenInfo->FreeScreen = ATIFreeScreen;
+ pScreenInfo->ValidMode = ATIValidMode;
+}
diff --git a/src/atifillin.h b/src/atifillin.h
new file mode 100644
index 00000000..824b7916
--- /dev/null
+++ b/src/atifillin.h
@@ -0,0 +1,22 @@
+/*
+ * atifillin.h: header for atifillin.c.
+ *
+ * (c) 2004 Adam Jackson. Standard MIT license applies.
+ */
+
+#ifndef ATI_FILLIN_H
+#define ATI_FILLIN_H
+
+/* include headers corresponding to fields touched by ATIFillInScreenInfo() */
+
+#include "ativersion.h"
+#include "atiprobe.h"
+#include "atipreinit.h"
+#include "atiscreen.h"
+#include "aticonsole.h"
+#include "atiadjust.h"
+#include "ativalid.h"
+
+extern void ATIFillInScreenInfo FunctionPrototype((ScrnInfoPtr));
+
+#endif
diff --git a/src/atiprobe.c b/src/atiprobe.c
index 8dc80ba1..08cc56f3 100644
--- a/src/atiprobe.c
+++ b/src/atiprobe.c
@@ -1,6 +1,6 @@
-/* $XFree86: xc/programs/Xserver/hw/xfree86/drivers/ati/atiprobe.c,v 1.60 2003/10/07 22:47:11 martin Exp $ */
+/* $XFree86: xc/programs/Xserver/hw/xfree86/drivers/ati/atiprobe.c,v 1.62tsi Exp $ */
/*
- * Copyright 1997 through 2003 by Marc Aurele La France (TSI @ UQV), tsi@xfree86.org
+ * Copyright 1997 through 2004 by Marc Aurele La France (TSI @ UQV), tsi@xfree86.org
*
* Permission to use, copy, modify, distribute, and sell this software and its
* documentation for any purpose is hereby granted without fee, provided that
@@ -27,6 +27,7 @@
#include "atibus.h"
#include "atichip.h"
#include "aticonsole.h"
+#include "atifillin.h"
#include "atiident.h"
#include "atimach64io.h"
#include "atimodule.h"
@@ -57,32 +58,6 @@
* largely ignored.
*/
-#ifdef XFree86LOADER
-
-/*
- * The following exists to prevent the compiler from considering entry points
- * defined in a separate module from being constants.
- */
-static xf86PreInitProc * const volatile PreInitProc = ATIPreInit;
-static xf86ScreenInitProc * const volatile ScreenInitProc = ATIScreenInit;
-static xf86SwitchModeProc * const volatile SwitchModeProc = ATISwitchMode;
-static xf86AdjustFrameProc * const volatile AdjustFrameProc = ATIAdjustFrame;
-static xf86EnterVTProc * const volatile EnterVTProc = ATIEnterVT;
-static xf86LeaveVTProc * const volatile LeaveVTProc = ATILeaveVT;
-static xf86FreeScreenProc * const volatile FreeScreenProc = ATIFreeScreen;
-static xf86ValidModeProc * const volatile ValidModeProc = ATIValidMode;
-
-#define ATIPreInit PreInitProc
-#define ATIScreenInit ScreenInitProc
-#define ATISwitchMode SwitchModeProc
-#define ATIAdjustFrame AdjustFrameProc
-#define ATIEnterVT EnterVTProc
-#define ATILeaveVT LeaveVTProc
-#define ATIFreeScreen FreeScreenProc
-#define ATIValidMode ValidModeProc
-
-#endif
-
/* Used as a temporary buffer */
#define Identifier ((char *)(pATI->MMIOCache))
@@ -214,6 +189,8 @@ ATICheckSparseIOBases
return DoProbe;
}
+#ifndef AVOID_NON_PCI
+
/*
* ATIClaimSparseIOBases --
*
@@ -236,6 +213,8 @@ ATIClaimSparseIOBases
ProbeFlags[FirstPort] = ProbeFlag;
}
+#endif /* AVOID_NON_PCI */
+
/*
* ATIVGAProbe --
*
@@ -803,9 +782,8 @@ ATIAssignVGA
outb(VGA_DAC_MASK, 0xA5U);
if (inb(IBM_DAC_MASK) == 0xA5U)
pATI->VGAAdapter = ATI_ADAPTER_VGA;
+ outb(VGA_DAC_MASK, OldDACMask);
}
-
- outb(VGA_DAC_MASK, OldDACMask);
}
break;
@@ -825,10 +803,9 @@ ATIAssignVGA
outb(VGA_DAC_MASK, 0xA5U);
if (inb(IBM_DAC_MASK) == 0xA5U)
pATI->VGAAdapter = ATI_ADAPTER_VGA;
+ outb(VGA_DAC_MASK, OldDACMask);
}
- outb(VGA_DAC_MASK, OldDACMask);
-
if (ClockSel & DISABPASSTHRU)
outw(CLOCK_SEL, ClockSel);
}
@@ -854,10 +831,9 @@ ATIAssignVGA
outb(VGA_DAC_MASK, 0xA5U);
if (inb(IBM_DAC_MASK) == 0xA5U)
pATI->VGAAdapter = ATI_ADAPTER_MACH32;
+ outb(VGA_DAC_MASK, OldDACMask);
}
- outb(VGA_DAC_MASK, OldDACMask);
-
if (ClockSel & DISABPASSTHRU)
outw(CLOCK_SEL, ClockSel);
if (MiscOptions & (DISABLE_VGA | DISABLE_DAC))
@@ -879,10 +855,9 @@ ATIAssignVGA
outb(VGA_DAC_MASK, 0xA5U);
if (in8(M64_DAC_MASK) == 0xA5U)
pATI->VGAAdapter = ATI_ADAPTER_MACH64;
+ outb(VGA_DAC_MASK, OldDACMask);
}
- outb(VGA_DAC_MASK, OldDACMask);
-
if (!(DACCntl & DAC_VGA_ADR_EN))
outr(DAC_CNTL, DACCntl);
}
@@ -927,6 +902,8 @@ ATIAssignVGA
xf86MsgVerb(X_INFO, 3, ATI_NAME ": VGA assigned to this adapter.\n");
}
+#ifndef AVOID_NON_PCI
+
/*
* ATIClaimVGA --
*
@@ -955,6 +932,8 @@ ATIClaimVGA
ATIClaimSparseIOBases(ProbeFlags, pATI->CPIO_VGAWonder, 2, Detected);
}
+#endif /* AVOID_NON_PCI */
+
/*
* ATIFindVGA --
*
@@ -1217,6 +1196,8 @@ ATIProbe
xfree(PCIPorts);
+#ifndef AVOID_NON_PCI
+
/*
* A note on probe strategy. I/O and memory response by certain PCI
* devices has been disabled by the common layer at this point,
@@ -1328,6 +1309,9 @@ ATIProbe
ATIClaimSparseIOBases(ProbeFlags, Mach64SparseIOBases[i], 4,
DetectedMach64);
}
+
+#endif /* AVOID_NON_PCI */
+
}
#endif /* AVOID_CPIO */
@@ -1370,7 +1354,7 @@ ATIProbe
"Unshared PCI sparse I/O Mach64 in slot %d:%d:%d",
pVideo->bus, pVideo->device, pVideo->func);
xf86MsgVerb(X_INFO, 3,
- ATI_NAME ": %s detected through Block 0 at 0x%08X.\n",
+ ATI_NAME ": %s detected through Block 0 at 0x%08lX.\n",
Identifier, pATI->Block0Base);
AddAdapter(pATI);
pATI->PCIInfo = pVideo;
@@ -1493,6 +1477,8 @@ ATIProbe
pVideo->bus, pVideo->device, pVideo->func);
break;
+#ifndef AVOID_NON_PCI
+
case Detected8514A:
if ((p8514->BusType >= ATI_BUS_PCI) && !p8514->PCIInfo)
p8514->PCIInfo = pVideo;
@@ -1514,6 +1500,8 @@ ATIProbe
pVideo->bus, pVideo->device, pVideo->func);
break;
+#endif /* AVOID_NON_PCI */
+
default: /* Must be DoProbe */
if (!xf86CheckPciSlot(pVideo->bus,
pVideo->device,
@@ -1587,6 +1575,8 @@ ATIProbe
pVideo->bus, pVideo->device, pVideo->func);
break;
+#ifndef AVOID_NON_PCI
+
case Detected8514A:
xf86Msg(X_WARNING,
ATI_NAME ": PCI Mach64 in slot %d:%d:%d will not"
@@ -1610,6 +1600,8 @@ ATIProbe
Mach64SparseIOBases[j]);
break;
+#endif /* AVOID_NON_PCI */
+
default: /* Must be DoProbe */
if (!xf86CheckPciSlot(pVideo->bus,
pVideo->device,
@@ -1689,7 +1681,7 @@ ATIProbe
sprintf(Identifier, "Shared PCI Mach64 in slot %d:%d:%d",
pVideo->bus, pVideo->device, pVideo->func);
xf86MsgVerb(X_INFO, 3,
- ATI_NAME ": %s with Block 0 base 0x%08X detected.\n",
+ ATI_NAME ": %s with Block 0 base 0x%08lX detected.\n",
Identifier, pATI->Block0Base);
AddAdapter(pATI);
pATI->SharedAccelerator = TRUE;
@@ -1724,43 +1716,12 @@ ATIProbe
Chip = ATIChipID(pVideo->chipType, pVideo->chipRev);
if (Chip > ATI_CHIP_Mach64)
{
- switch (Chip)
- {
- case ATI_CHIP_RAGE128GL:
- case ATI_CHIP_RAGE128VR:
- case ATI_CHIP_RAGE128PROULTRA:
- case ATI_CHIP_RAGE128PROGL:
- case ATI_CHIP_RAGE128PROVR:
- case ATI_CHIP_RAGE128MOBILITY3:
- case ATI_CHIP_RAGE128MOBILITY4:
- DoRage128 = TRUE;
- continue;
-
- case ATI_CHIP_RADEON:
- case ATI_CHIP_RADEONVE:
- case ATI_CHIP_RADEONMOBILITY6:
- case ATI_CHIP_RS100:
- case ATI_CHIP_RS200:
- case ATI_CHIP_RS250:
- case ATI_CHIP_RADEONMOBILITY7:
- case ATI_CHIP_R200:
- case ATI_CHIP_RV200:
- case ATI_CHIP_RV250:
- case ATI_CHIP_RADEONMOBILITY9:
- case ATI_CHIP_RS300:
- case ATI_CHIP_RV280:
- case ATI_CHIP_RADEONMOBILITY9PLUS:
- case ATI_CHIP_R300:
- case ATI_CHIP_RV350:
- case ATI_CHIP_R350:
- case ATI_CHIP_R360:
- DoRadeon = TRUE;
- continue;
+ if (Chip <= ATI_CHIP_Rage128)
+ DoRage128 = TRUE;
+ else if (Chip <= ATI_CHIP_Radeon)
+ DoRadeon = TRUE;
- case ATI_CHIP_HDTV:
- default:
- continue;
- }
+ continue;
}
if (!nATIGDev)
@@ -2313,18 +2274,7 @@ NoVGAWonder:;
ATIPtrs[j - 1] = NULL;
/* Fill in probe data */
- pScreenInfo->driverVersion = ATI_VERSION_CURRENT;
- pScreenInfo->driverName = ATI_DRIVER_NAME;
- pScreenInfo->name = ATI_NAME;
- pScreenInfo->Probe = ATIProbe;
- pScreenInfo->PreInit = ATIPreInit;
- pScreenInfo->ScreenInit = ATIScreenInit;
- pScreenInfo->SwitchMode = ATISwitchMode;
- pScreenInfo->AdjustFrame = ATIAdjustFrame;
- pScreenInfo->EnterVT = ATIEnterVT;
- pScreenInfo->LeaveVT = ATILeaveVT;
- pScreenInfo->FreeScreen = ATIFreeScreen;
- pScreenInfo->ValidMode = ATIValidMode;
+ ATIFillInScreenInfo(pScreenInfo);
pScreenInfo->driverPrivate = pATI;
diff --git a/src/r128_driver.c b/src/r128_driver.c
index 3a92dc09..ce2a1026 100644
--- a/src/r128_driver.c
+++ b/src/r128_driver.c
@@ -138,7 +138,7 @@ typedef enum {
OPTION_SHOW_CACHE
} R128Opts;
-const OptionInfoRec R128Options[] = {
+static const OptionInfoRec R128Options[] = {
{ OPTION_NOACCEL, "NoAccel", OPTV_BOOLEAN, {0}, FALSE },
{ OPTION_SW_CURSOR, "SWcursor", OPTV_BOOLEAN, {0}, FALSE },
{ OPTION_DAC_6BIT, "Dac6Bit", OPTV_BOOLEAN, {0}, FALSE },
@@ -165,6 +165,8 @@ const OptionInfoRec R128Options[] = {
{ -1, NULL, OPTV_NONE, {0}, FALSE }
};
+OptionInfoRec *R128OptionsWeak(void) { return R128Options; }
+
R128RAMRec R128RAM[] = { /* Memory Specifications
From RAGE 128 Software Development
Manual (Technical Reference Manual P/N
@@ -1919,9 +1921,9 @@ Bool R128PreInit(ScrnInfoPtr pScrn, int flags)
if (!xf86LoadSubModule(pScrn, "fbdevhw")) return FALSE;
xf86LoaderReqSymLists(fbdevHWSymbols, NULL);
if (!fbdevHWInit(pScrn, info->PciInfo, NULL)) return FALSE;
- pScrn->SwitchMode = fbdevHWSwitchMode;
- pScrn->AdjustFrame = fbdevHWAdjustFrame;
- pScrn->ValidMode = fbdevHWValidMode;
+ pScrn->SwitchMode = LoaderSymbol("fbdevHWSwitchMode");
+ pScrn->AdjustFrame = LoaderSymbol("fbdevHWAdjustFrame");
+ pScrn->ValidMode = LoaderSymbol("fbdevHWValidMode");
}
if (!info->FBDev)
@@ -2425,7 +2427,7 @@ Bool R128ScreenInit(int scrnIndex, ScreenPtr pScreen, int argc, char **argv)
/* Colormap setup */
if (!miCreateDefColormap(pScreen)) return FALSE;
if (!xf86HandleColormaps(pScreen, 256, info->dac6bits ? 6 : 8,
- (info->FBDev ? fbdevHWLoadPalette :
+ (info->FBDev ? LoaderSymbol("fbdevHWLoadPalette") :
R128LoadPalette), NULL,
CMAP_PALETTED_TRUECOLOR
| CMAP_RELOAD_ON_MODE_SWITCH
@@ -2436,7 +2438,7 @@ Bool R128ScreenInit(int scrnIndex, ScreenPtr pScreen, int argc, char **argv)
/* DPMS setup - FIXME: also for mirror mode in non-fbdev case? - Michel */
if (info->FBDev)
- xf86DPMSInit(pScreen, fbdevHWDPMSSet, 0);
+ xf86DPMSInit(pScreen, LoaderSymbol("fbdevHWDPMSSet"), 0);
else {
if (!info->HasPanelRegs || info->BIOSDisplay == R128_BIOS_DISPLAY_CRT)
xf86DPMSInit(pScreen, R128DisplayPowerManagementSet, 0);
@@ -3674,4 +3676,19 @@ static int r128_set_backlight_enable(ScrnInfoPtr pScrn, int on)
OUTREG(R128_LVDS_GEN_CNTL, lvds_gen_cntl);
return 0;
- }
+}
+
+void R128FillInScreenInfo(ScrnInfoPtr pScrn)
+{
+ pScrn->driverVersion = R128_VERSION_CURRENT;
+ pScrn->driverName = R128_DRIVER_NAME;
+ pScrn->name = R128_NAME;
+ pScrn->PreInit = R128PreInit;
+ pScrn->ScreenInit = R128ScreenInit;
+ pScrn->SwitchMode = R128SwitchMode;
+ pScrn->AdjustFrame = R128AdjustFrame;
+ pScrn->EnterVT = R128EnterVT;
+ pScrn->LeaveVT = R128LeaveVT;
+ pScrn->FreeScreen = R128FreeScreen;
+ pScrn->ValidMode = R128ValidMode;
+}
diff --git a/src/r128_probe.c b/src/r128_probe.c
index a5cd42fe..a138ec56 100644
--- a/src/r128_probe.c
+++ b/src/r128_probe.c
@@ -1,4 +1,4 @@
-/* $XFree86: xc/programs/Xserver/hw/xfree86/drivers/ati/r128_probe.c,v 1.18 2003/02/09 15:33:17 tsi Exp $ */
+/* $XFree86: xc/programs/Xserver/hw/xfree86/drivers/ati/r128_probe.c,v 1.17 2003/02/07 20:41:15 martin Exp $ */
/*
* Copyright 1999, 2000 ATI Technologies Inc., Markham, Ontario,
* Precision Insight, Inc., Cedar Park, Texas, and
@@ -48,32 +48,6 @@
#include "xf86_ansic.h"
#include "xf86Resources.h"
-#ifdef XFree86LOADER
-
-/*
- * The following exists to prevent the compiler from considering entry points
- * defined in a separate module from being constants.
- */
-static xf86PreInitProc * const volatile PreInitProc = R128PreInit;
-static xf86ScreenInitProc * const volatile ScreenInitProc = R128ScreenInit;
-static xf86SwitchModeProc * const volatile SwitchModeProc = R128SwitchMode;
-static xf86AdjustFrameProc * const volatile AdjustFrameProc = R128AdjustFrame;
-static xf86EnterVTProc * const volatile EnterVTProc = R128EnterVT;
-static xf86LeaveVTProc * const volatile LeaveVTProc = R128LeaveVT;
-static xf86FreeScreenProc * const volatile FreeScreenProc = R128FreeScreen;
-static xf86ValidModeProc * const volatile ValidModeProc = R128ValidMode;
-
-#define R128PreInit PreInitProc
-#define R128ScreenInit ScreenInitProc
-#define R128SwitchMode SwitchModeProc
-#define R128AdjustFrame AdjustFrameProc
-#define R128EnterVT EnterVTProc
-#define R128LeaveVT LeaveVTProc
-#define R128FreeScreen FreeScreenProc
-#define R128ValidMode ValidModeProc
-
-#endif
-
SymTabRec R128Chipsets[] = {
/* FIXME: The chipsets with (PCI/AGP) are not known wether they are AGP or
* PCI, so I've labeled them as such in hopes users will submit
@@ -194,7 +168,7 @@ R128AvailableOptions(int chipid, int busid)
chipid -= PCI_VENDOR_ATI << 16;
for (i = 0; R128PciChipsets[i].PCIid > 0; i++) {
if (chipid == R128PciChipsets[i].PCIid)
- return R128Options;
+ return R128OptionsWeak();
}
return NULL;
}
@@ -280,18 +254,8 @@ R128Probe(DriverPtr drv, int flags)
#endif
- pScrn->driverVersion = R128_VERSION_CURRENT;
- pScrn->driverName = R128_DRIVER_NAME;
- pScrn->name = R128_NAME;
pScrn->Probe = R128Probe;
- pScrn->PreInit = R128PreInit;
- pScrn->ScreenInit = R128ScreenInit;
- pScrn->SwitchMode = R128SwitchMode;
- pScrn->AdjustFrame = R128AdjustFrame;
- pScrn->EnterVT = R128EnterVT;
- pScrn->LeaveVT = R128LeaveVT;
- pScrn->FreeScreen = R128FreeScreen;
- pScrn->ValidMode = R128ValidMode;
+ R128FillInScreenInfo(pScrn);
foundScreen = TRUE;
diff --git a/src/r128_probe.h b/src/r128_probe.h
index 094a9b69..aa4c547f 100644
--- a/src/r128_probe.h
+++ b/src/r128_probe.h
@@ -69,10 +69,14 @@ extern void R128LeaveVT
FunctionPrototype((int, int));
extern void R128FreeScreen
FunctionPrototype((int, int));
-extern int R128ValidMode
+extern ModeStatus R128ValidMode
FunctionPrototype((int, DisplayModePtr, Bool,
int));
-extern const OptionInfoRec R128Options[];
+extern OptionInfoRec * R128OptionsWeak
+ FunctionPrototype((void));
+
+extern void R128FillInScreenInfo
+ FunctionPrototype((ScrnInfoPtr));
#endif /* _R128_PROBE_H_ */
diff --git a/src/radeon_accel.c b/src/radeon_accel.c
index c91c5cc8..b111530b 100644
--- a/src/radeon_accel.c
+++ b/src/radeon_accel.c
@@ -111,8 +111,6 @@ static struct {
{ RADEON_ROP3_ONE, RADEON_ROP3_ONE } /* GXset */
};
-extern int gRADEONEntityIndex;
-
/* The FIFO has 64 slots. This routines waits until at least `entries'
* of these slots are empty.
*/
diff --git a/src/radeon_driver.c b/src/radeon_driver.c
index 5bcbb82d..11c05d0d 100644
--- a/src/radeon_driver.c
+++ b/src/radeon_driver.c
@@ -165,7 +165,7 @@ typedef enum {
OPTION_DYNAMIC_CLOCKS
} RADEONOpts;
-const OptionInfoRec RADEONOptions[] = {
+static const OptionInfoRec RADEONOptions[] = {
{ OPTION_NOACCEL, "NoAccel", OPTV_BOOLEAN, {0}, FALSE },
{ OPTION_SW_CURSOR, "SWcursor", OPTV_BOOLEAN, {0}, FALSE },
{ OPTION_DAC_6BIT, "Dac6Bit", OPTV_BOOLEAN, {0}, FALSE },
@@ -210,6 +210,8 @@ const OptionInfoRec RADEONOptions[] = {
{ -1, NULL, OPTV_NONE, {0}, FALSE }
};
+OptionInfoRec *RADEONOptionsWeak(void) { return RADEONOptions; }
+
static const char *vgahwSymbols[] = {
"vgaHWFreeHWRec",
"vgaHWGetHWRec",
@@ -439,7 +441,7 @@ static const RADEONTMDSPll default_tmds_pll[CHIP_FAMILY_LAST][4] =
{{15000, 0xb0155}, {0xffffffff, 0xb01cb}, {0, 0}, {0, 0}}, /*CHIP_FAMILY_RV350*/
};
-extern int gRADEONEntityIndex;
+extern int getRADEONEntityIndex(void);
struct RADEONInt10Save {
CARD32 MEM_CNTL;
@@ -455,7 +457,7 @@ static RADEONEntPtr RADEONEntPriv(ScrnInfoPtr pScrn)
DevUnion *pPriv;
RADEONInfoPtr info = RADEONPTR(pScrn);
pPriv = xf86GetEntityPrivate(info->pEnt->index,
- gRADEONEntityIndex);
+ getRADEONEntityIndex());
return pPriv->ptr;
}
@@ -4152,7 +4154,7 @@ Bool RADEONPreInit(ScrnInfoPtr pScrn, int flags)
xf86LoaderReqSymLists(fbdevHWSymbols, NULL);
if (fbdevHWInit(pScrn, info->PciInfo, NULL)) {
- pScrn->ValidMode = fbdevHWValidMode;
+ pScrn->ValidMode = LoaderSymbol("fbdevHWValidMode");
info->FBDev = TRUE;
xf86DrvMsg(pScrn->scrnIndex, X_CONFIG,
"Using framebuffer device\n");
@@ -8060,3 +8062,20 @@ static void RADEONSetDynamicClock(ScrnInfoPtr pScrn, int mode)
}
}
+void RADEONFillInScreenInfo(ScrnInfoPtr pScrn)
+{
+ pScrn->driverVersion = RADEON_VERSION_CURRENT;
+ pScrn->driverName = RADEON_DRIVER_NAME;
+ pScrn->name = RADEON_NAME;
+ pScrn->PreInit = RADEONPreInit;
+ pScrn->ScreenInit = RADEONScreenInit;
+ pScrn->SwitchMode = RADEONSwitchMode;
+#ifdef X_XF86MiscPassMessage
+ pScrn->HandleMessage = RADEONHandleMessage;
+#endif
+ pScrn->AdjustFrame = RADEONAdjustFrame;
+ pScrn->EnterVT = RADEONEnterVT;
+ pScrn->LeaveVT = RADEONLeaveVT;
+ pScrn->FreeScreen = RADEONFreeScreen;
+ pScrn->ValidMode = RADEONValidMode;
+}
diff --git a/src/radeon_probe.c b/src/radeon_probe.c
index 5dade637..e1396501 100644
--- a/src/radeon_probe.c
+++ b/src/radeon_probe.c
@@ -49,39 +49,6 @@
#include "xf86misc.h"
#include "xf86Resources.h"
-#ifdef XFree86LOADER
-
-/*
- * The following exists to prevent the compiler from considering entry points
- * defined in a separate module from being constants.
- */
-static xf86PreInitProc *const volatile PreInitProc = RADEONPreInit;
-static xf86ScreenInitProc *const volatile ScreenInitProc = RADEONScreenInit;
-static xf86SwitchModeProc *const volatile SwitchModeProc = RADEONSwitchMode;
-static xf86AdjustFrameProc *const volatile AdjustFrameProc = RADEONAdjustFrame;
-static xf86EnterVTProc *const volatile EnterVTProc = RADEONEnterVT;
-static xf86LeaveVTProc *const volatile LeaveVTProc = RADEONLeaveVT;
-static xf86FreeScreenProc *const volatile FreeScreenProc = RADEONFreeScreen;
-static xf86ValidModeProc *const volatile ValidModeProc = RADEONValidMode;
-#ifdef X_XF86MiscPassMessage
-static xf86HandleMessageProc *const volatile HandleMessageProc
- = RADEONHandleMessage;
-#endif
-
-#define RADEONPreInit PreInitProc
-#define RADEONScreenInit ScreenInitProc
-#define RADEONSwitchMode SwitchModeProc
-#define RADEONAdjustFrame AdjustFrameProc
-#define RADEONEnterVT EnterVTProc
-#define RADEONLeaveVT LeaveVTProc
-#define RADEONFreeScreen FreeScreenProc
-#define RADEONValidMode ValidModeProc
-#ifdef X_XF86MiscPassMessage
-# define RADEONHandleMessage HandleMessageProc
-#endif
-
-#endif
-
SymTabRec RADEONChipsets[] = {
{ PCI_CHIP_RADEON_QD, "ATI Radeon QD (AGP)" },
{ PCI_CHIP_RADEON_QE, "ATI Radeon QE (AGP)" },
@@ -220,6 +187,8 @@ PciChipsets RADEONPciChipsets[] = {
int gRADEONEntityIndex = -1;
+const int getRADEONEntityIndex(void) { return gRADEONEntityIndex; }
+
/* Return the options for supported chipset 'n'; NULL otherwise */
const OptionInfoRec *
RADEONAvailableOptions(int chipid, int busid)
@@ -234,7 +203,7 @@ RADEONAvailableOptions(int chipid, int busid)
chipid -= PCI_VENDOR_ATI << 16;
for (i = 0; RADEONPciChipsets[i].PCIid > 0; i++) {
if (chipid == RADEONPciChipsets[i].PCIid)
- return RADEONOptions;
+ return RADEONOptionsWeak();
}
return NULL;
}
@@ -317,21 +286,8 @@ RADEONProbe(DriverPtr drv, int flags)
xf86LoaderReqSymLists(RADEONSymbols, NULL);
#endif
- pScrn->driverVersion = RADEON_VERSION_CURRENT;
- pScrn->driverName = RADEON_DRIVER_NAME;
- pScrn->name = RADEON_NAME;
pScrn->Probe = RADEONProbe;
- pScrn->PreInit = RADEONPreInit;
- pScrn->ScreenInit = RADEONScreenInit;
- pScrn->SwitchMode = RADEONSwitchMode;
-#ifdef X_XF86MiscPassMessage
- pScrn->HandleMessage = RADEONHandleMessage;
-#endif
- pScrn->AdjustFrame = RADEONAdjustFrame;
- pScrn->EnterVT = RADEONEnterVT;
- pScrn->LeaveVT = RADEONLeaveVT;
- pScrn->FreeScreen = RADEONFreeScreen;
- pScrn->ValidMode = RADEONValidMode;
+ RADEONFillInScreenInfo(pScrn);
foundScreen = TRUE;
}
diff --git a/src/radeon_probe.h b/src/radeon_probe.h
index 77d7e86c..b3666ebf 100644
--- a/src/radeon_probe.h
+++ b/src/radeon_probe.h
@@ -1,4 +1,4 @@
-/* $XFree86: xc/programs/Xserver/hw/xfree86/drivers/ati/radeon_probe.h,v 1.11 2003/07/02 17:31:30 martin Exp $ */
+/* $XFree86: xc/programs/Xserver/hw/xfree86/drivers/ati/radeon_probe.h,v 1.13 2003/10/30 17:37:00 tsi Exp $ */
/*
* Copyright 2000 ATI Technologies Inc., Markham, Ontario, and
* VA Linux Systems Inc., Fremont, California.
@@ -60,9 +60,9 @@ typedef struct
ScrnInfoPtr pPrimaryScrn;
int MonType1;
- int MonType2;
+ int MonType2;
xf86MonPtr MonInfo1;
- xf86MonPtr MonInfo2;
+ xf86MonPtr MonInfo2;
Bool ReversedDAC; /* TVDAC used as primary dac */
Bool ReversedTMDS; /* DDC_DVI is used for external TMDS */
} RADEONEntRec, *RADEONEntPtr;
@@ -100,10 +100,14 @@ extern void RADEONLeaveVT
FunctionPrototype((int, int));
extern void RADEONFreeScreen
FunctionPrototype((int, int));
-extern int RADEONValidMode
+extern ModeStatus RADEONValidMode
FunctionPrototype((int, DisplayModePtr, Bool,
int));
-extern const OptionInfoRec RADEONOptions[];
+extern OptionInfoRec * RADEONOptionsWeak
+ FunctionPrototype((void));
+
+extern void RADEONFillInScreenInfo
+ FunctionPrototype((ScrnInfoPtr));
#endif /* _RADEON_PROBE_H_ */
diff --git a/src/radeon_video.c b/src/radeon_video.c
index 08d3c296..2e754895 100644
--- a/src/radeon_video.c
+++ b/src/radeon_video.c
@@ -21,8 +21,6 @@
#define TIMER_MASK (OFF_TIMER | FREE_TIMER)
-extern int gRADEONEntityIndex;
-
static void RADEONInitOffscreenImages(ScreenPtr);
static XF86VideoAdaptorPtr RADEONSetupImageVideo(ScreenPtr);