xserver: Branch 'master' - 3 commits

Paulo Cesar Pereira de Andrade pcpa at kemper.freedesktop.org
Wed Nov 26 23:49:32 PST 2008


 dix/dixfonts.c                                      |   20 ++++----
 dix/dixutils.c                                      |    2 
 hw/xfree86/ddc/ddcProperty.c                        |    2 
 hw/xfree86/ddc/interpret_edid.c                     |    2 
 hw/xfree86/ddc/print_edid.c                         |    2 
 hw/xfree86/fbdevhw/fbdevhw.c                        |   50 ++++++++++----------
 hw/xfree86/fbdevhw/fbdevhwstub.c                    |   50 ++++++++++----------
 hw/xfree86/i2c/bt829.c                              |   22 ++++----
 hw/xfree86/i2c/bt829.h                              |   48 ++++++++++---------
 hw/xfree86/i2c/fi1236.c                             |   12 ++--
 hw/xfree86/i2c/fi1236.h                             |   25 +++++-----
 hw/xfree86/i2c/i2c_def.h                            |   10 ----
 hw/xfree86/i2c/msp3430.c                            |    8 +--
 hw/xfree86/i2c/msp3430.h                            |   21 ++++----
 hw/xfree86/i2c/tda8425.c                            |    8 +--
 hw/xfree86/i2c/tda8425.h                            |   17 +++---
 hw/xfree86/i2c/tda9850.c                            |   12 ++--
 hw/xfree86/i2c/tda9850.h                            |   25 ++++------
 hw/xfree86/i2c/tda9885.c                            |   10 ++--
 hw/xfree86/i2c/tda9885.h                            |   21 ++++----
 hw/xfree86/i2c/uda1380.c                            |   16 +++---
 hw/xfree86/i2c/uda1380.h                            |   33 ++++++-------
 hw/xfree86/i2c/xf86i2c.c                            |   14 ++---
 hw/xfree86/i2c/xf86i2c.h                            |   24 ++++++---
 hw/xfree86/int10/generic.c                          |   10 ++--
 hw/xfree86/int10/stub.c                             |   12 ++--
 hw/xfree86/int10/xf86x86emu.c                       |    2 
 hw/xfree86/os-support/linux/int10/linux.c           |   10 ++--
 hw/xfree86/os-support/linux/int10/vm86/linux_vm86.c |    2 
 hw/xfree86/vbe/vbe.c                                |   28 +++++------
 hw/xfree86/vbe/vbeModes.c                           |   12 ++--
 os/utils.c                                          |    2 
 32 files changed, 266 insertions(+), 266 deletions(-)

New commits:
commit 74bc792e1814849b8eee9e448e36c3568b821e6c
Author: Paulo Cesar Pereira de Andrade <pcpa at mandriva.com.br>
Date:   Thu Nov 27 05:34:14 2008 -0200

    Export symbols required by the vesa and fbdev drivers.
    
      This is a minimal set of patches, to have an usable X Server when
    compiling it with symbols hidden by default.

diff --git a/hw/xfree86/ddc/ddcProperty.c b/hw/xfree86/ddc/ddcProperty.c
index a4384f1..124abd7 100644
--- a/hw/xfree86/ddc/ddcProperty.c
+++ b/hw/xfree86/ddc/ddcProperty.c
@@ -108,7 +108,7 @@ addRootWindowProperties(ScrnInfoPtr pScrn, xf86MonPtr DDC)
     }
 }
 
-Bool
+_X_EXPORT Bool
 xf86SetDDCproperties(ScrnInfoPtr pScrn, xf86MonPtr DDC)
 {
     if (!pScrn || !pScrn->monitor || !DDC)
diff --git a/hw/xfree86/ddc/interpret_edid.c b/hw/xfree86/ddc/interpret_edid.c
index c4d8963..1e57731 100644
--- a/hw/xfree86/ddc/interpret_edid.c
+++ b/hw/xfree86/ddc/interpret_edid.c
@@ -132,7 +132,7 @@ handle_edid_quirks(xf86MonPtr m)
     }
 }
 
-xf86MonPtr
+_X_EXPORT xf86MonPtr
 xf86InterpretEDID(int scrnIndex, Uchar *block)
 {
     xf86MonPtr m;
diff --git a/hw/xfree86/ddc/print_edid.c b/hw/xfree86/ddc/print_edid.c
index 7b6e298..7708889 100644
--- a/hw/xfree86/ddc/print_edid.c
+++ b/hw/xfree86/ddc/print_edid.c
@@ -460,7 +460,7 @@ print_number_sections(int scrnIndex, int num)
 		   num);
 }
 
-xf86MonPtr
+_X_EXPORT xf86MonPtr
 xf86PrintEDID(xf86MonPtr m)
 {
     CARD16 i, j, n;
diff --git a/hw/xfree86/fbdevhw/fbdevhw.c b/hw/xfree86/fbdevhw/fbdevhw.c
index 5269277..27951a8 100644
--- a/hw/xfree86/fbdevhw/fbdevhw.c
+++ b/hw/xfree86/fbdevhw/fbdevhw.c
@@ -431,7 +431,7 @@ fbdev_open(int scrnIndex, char *dev, char** namep)
 
 /* -------------------------------------------------------------------- */
 
-Bool
+_X_EXPORT Bool
 fbdevHWProbe(struct pci_device * pPci, char *device,char **namep)
 {
 	int fd;
@@ -447,7 +447,7 @@ fbdevHWProbe(struct pci_device * pPci, char *device,char **namep)
 	return TRUE;
 }
 
-Bool
+_X_EXPORT Bool
 fbdevHWInit(ScrnInfoPtr pScrn, struct pci_device * pPci, char *device)
 {
 	fbdevHWPtr fPtr;
@@ -495,14 +495,14 @@ fbdevHWInit(ScrnInfoPtr pScrn, struct pci_device * pPci, char *device)
 	return TRUE;
 }
 
-char*
+_X_EXPORT char*
 fbdevHWGetName(ScrnInfoPtr pScrn)
 {
 	fbdevHWPtr fPtr = FBDEVHWPTR(pScrn);
 	return fPtr->fix.id;
 }
 
-int
+_X_EXPORT int
 fbdevHWGetDepth(ScrnInfoPtr pScrn, int *fbbpp)
 {
 	fbdevHWPtr fPtr = FBDEVHWPTR(pScrn);
@@ -518,7 +518,7 @@ fbdevHWGetDepth(ScrnInfoPtr pScrn, int *fbbpp)
 		return fPtr->var.bits_per_pixel;
 }
 
-int
+_X_EXPORT int
 fbdevHWGetLineLength(ScrnInfoPtr pScrn)
 {
 	fbdevHWPtr fPtr = FBDEVHWPTR(pScrn);
@@ -529,14 +529,14 @@ fbdevHWGetLineLength(ScrnInfoPtr pScrn)
 		return fPtr->var.xres_virtual*fPtr->var.bits_per_pixel/8;
 }
 
-int
+_X_EXPORT int
 fbdevHWGetType(ScrnInfoPtr pScrn)
 {
 	fbdevHWPtr fPtr = FBDEVHWPTR(pScrn);
 	return fPtr->fix.type;
 }
 
-int
+_X_EXPORT int
 fbdevHWGetVidmem(ScrnInfoPtr pScrn)
 {
 	fbdevHWPtr fPtr = FBDEVHWPTR(pScrn);
@@ -587,7 +587,7 @@ fbdevHWSetMode(ScrnInfoPtr pScrn, DisplayModePtr mode, Bool check)
 	return TRUE;
 }
 
-void
+_X_EXPORT void
 fbdevHWSetVideoModes(ScrnInfoPtr pScrn)
 {
 	char **modename;
@@ -645,7 +645,7 @@ fbdevHWGetBuildinMode(ScrnInfoPtr pScrn)
 	return &fPtr->buildin;
 }
 
-void
+_X_EXPORT void
 fbdevHWUseBuildinMode(ScrnInfoPtr pScrn)
 {
 	fbdevHWPtr fPtr = FBDEVHWPTR(pScrn);
@@ -671,7 +671,7 @@ calculateFbmem_len(fbdevHWPtr fPtr)
 }
 
 
-void*
+_X_EXPORT void*
 fbdevHWMapVidmem(ScrnInfoPtr pScrn)
 {
 	fbdevHWPtr fPtr = FBDEVHWPTR(pScrn);
@@ -697,7 +697,7 @@ fbdevHWMapVidmem(ScrnInfoPtr pScrn)
 	return fPtr->fbmem;
 }
 
-int
+_X_EXPORT int
 fbdevHWLinearOffset(ScrnInfoPtr pScrn)
 {
 	fbdevHWPtr fPtr = FBDEVHWPTR(pScrn);
@@ -706,7 +706,7 @@ fbdevHWLinearOffset(ScrnInfoPtr pScrn)
 	return fPtr->fboff;
 }
 
-Bool
+_X_EXPORT Bool
 fbdevHWUnmapVidmem(ScrnInfoPtr pScrn)
 {
 	fbdevHWPtr fPtr = FBDEVHWPTR(pScrn);
@@ -772,7 +772,7 @@ fbdevHWUnmapMMIO(ScrnInfoPtr pScrn)
 
 /* -------------------------------------------------------------------- */
 
-Bool
+_X_EXPORT Bool
 fbdevHWModeInit(ScrnInfoPtr pScrn, DisplayModePtr mode)
 {	
 	fbdevHWPtr fPtr = FBDEVHWPTR(pScrn);
@@ -815,7 +815,7 @@ fbdevHWModeInit(ScrnInfoPtr pScrn, DisplayModePtr mode)
 /* video mode save/restore                                              */
 
 /* TODO: colormap */
-void
+_X_EXPORT void
 fbdevHWSave(ScrnInfoPtr pScrn)
 {
 	fbdevHWPtr fPtr = FBDEVHWPTR(pScrn);
@@ -826,7 +826,7 @@ fbdevHWSave(ScrnInfoPtr pScrn)
 			   "FBIOGET_VSCREENINFO: %s\n", strerror(errno));
 }
 
-void
+_X_EXPORT void
 fbdevHWRestore(ScrnInfoPtr pScrn)
 {
 	fbdevHWPtr fPtr = FBDEVHWPTR(pScrn);
@@ -898,7 +898,7 @@ fbdevHWSwitchMode(int scrnIndex, DisplayModePtr mode, int flags)
 	return TRUE;
 }
 
-void
+_X_EXPORT void
 fbdevHWAdjustFrame(int scrnIndex, int x, int y, int flags)
 {
 	ScrnInfoPtr pScrn = xf86Screens[scrnIndex];
@@ -969,7 +969,7 @@ fbdevHWDPMSSet(ScrnInfoPtr pScrn, int mode, int flags)
 			   "FBIOBLANK: %s\n", strerror(errno));
 }
 
-Bool
+_X_EXPORT Bool
 fbdevHWSaveScreen(ScreenPtr pScreen, int mode)
 {
 	ScrnInfoPtr pScrn = xf86Screens[pScreen->myNum];
@@ -991,26 +991,26 @@ fbdevHWSaveScreen(ScreenPtr pScreen, int mode)
 	return TRUE;
 }
 
-xf86SwitchModeProc *
+_X_EXPORT xf86SwitchModeProc *
 fbdevHWSwitchModeWeak(void) { return fbdevHWSwitchMode; }
 
-xf86AdjustFrameProc *
+_X_EXPORT xf86AdjustFrameProc *
 fbdevHWAdjustFrameWeak(void) { return fbdevHWAdjustFrame; }
 
-xf86EnterVTProc *
+_X_EXPORT xf86EnterVTProc *
 fbdevHWEnterVTWeak(void) { return fbdevHWEnterVT; }
 
-xf86LeaveVTProc *
+_X_EXPORT xf86LeaveVTProc *
 fbdevHWLeaveVTWeak(void) { return fbdevHWLeaveVT; }
 
-xf86ValidModeProc *
+_X_EXPORT xf86ValidModeProc *
 fbdevHWValidModeWeak(void) { return fbdevHWValidMode; }
 
-xf86DPMSSetProc *
+_X_EXPORT xf86DPMSSetProc *
 fbdevHWDPMSSetWeak(void) { return fbdevHWDPMSSet; }
 
-xf86LoadPaletteProc *
+_X_EXPORT xf86LoadPaletteProc *
 fbdevHWLoadPaletteWeak(void) { return fbdevHWLoadPalette; }
 
-SaveScreenProcPtr
+_X_EXPORT SaveScreenProcPtr
 fbdevHWSaveScreenWeak(void) { return fbdevHWSaveScreen; }
diff --git a/hw/xfree86/fbdevhw/fbdevhwstub.c b/hw/xfree86/fbdevhw/fbdevhwstub.c
index 191a6d3..5d18f9e 100644
--- a/hw/xfree86/fbdevhw/fbdevhwstub.c
+++ b/hw/xfree86/fbdevhw/fbdevhwstub.c
@@ -21,50 +21,50 @@ fbdevHWFreeRec(ScrnInfoPtr pScrn)
 }
 
 
-Bool
+_X_EXPORT Bool
 fbdevHWProbe(struct pci_device *pPci, char *device, char **namep)
 {
 	return FALSE;
 }
 
-Bool
+_X_EXPORT Bool
 fbdevHWInit(ScrnInfoPtr pScrn, struct pci_device *pPci, char *device)
 {
 	xf86Msg(X_ERROR, "fbdevhw is not available on this platform\n");
 	return FALSE;
 }
 
-char*
+_X_EXPORT char*
 fbdevHWGetName(ScrnInfoPtr pScrn)
 {
 	return NULL;
 }
 
-int
+_X_EXPORT int
 fbdevHWGetDepth(ScrnInfoPtr pScrn, int *fbbpp)
 {
 	return -1;
 }
 
-int
+_X_EXPORT int
 fbdevHWGetLineLength(ScrnInfoPtr pScrn)
 {
 	return -1;	/* Should cause something spectacular... */
 }
 
-int
+_X_EXPORT int
 fbdevHWGetType(ScrnInfoPtr pScrn)
 {
 	return -1;
 }
 
-int
+_X_EXPORT int
 fbdevHWGetVidmem(ScrnInfoPtr pScrn)
 {
 	return -1;
 }
 
-void
+_X_EXPORT void
 fbdevHWSetVideoModes(ScrnInfoPtr pScrn)
 {
 }
@@ -75,24 +75,24 @@ fbdevHWGetBuildinMode(ScrnInfoPtr pScrn)
 	return NULL;
 }
 
-void
+_X_EXPORT void
 fbdevHWUseBuildinMode(ScrnInfoPtr pScrn)
 {
 }
 
-void*
+_X_EXPORT void*
 fbdevHWMapVidmem(ScrnInfoPtr pScrn)
 {
 	return NULL;
 }
 
-int
+_X_EXPORT int
 fbdevHWLinearOffset(ScrnInfoPtr pScrn)
 {
 	return 0;
 }
 
-Bool
+_X_EXPORT Bool
 fbdevHWUnmapVidmem(ScrnInfoPtr pScrn)
 {
 	return FALSE;
@@ -110,18 +110,18 @@ fbdevHWUnmapMMIO(ScrnInfoPtr pScrn)
 	return FALSE;
 }
 
-Bool
+_X_EXPORT Bool
 fbdevHWModeInit(ScrnInfoPtr pScrn, DisplayModePtr mode)
 {	
 	return FALSE;
 }
 
-void
+_X_EXPORT void
 fbdevHWSave(ScrnInfoPtr pScrn)
 {
 }
 
-void
+_X_EXPORT void
 fbdevHWRestore(ScrnInfoPtr pScrn)
 {
 }
@@ -144,7 +144,7 @@ fbdevHWSwitchMode(int scrnIndex, DisplayModePtr mode, int flags)
 	return FALSE;
 }
 
-void
+_X_EXPORT void
 fbdevHWAdjustFrame(int scrnIndex, int x, int y, int flags)
 {
 }
@@ -165,32 +165,32 @@ fbdevHWDPMSSet(ScrnInfoPtr pScrn, int mode, int flags)
 {
 }
 
-Bool
+_X_EXPORT Bool
 fbdevHWSaveScreen(ScreenPtr pScreen, int mode)
 {
 	return FALSE;
 }
 
-xf86SwitchModeProc *
+_X_EXPORT xf86SwitchModeProc *
 fbdevHWSwitchModeWeak(void) { return fbdevHWSwitchMode; }
 
-xf86AdjustFrameProc *
+_X_EXPORT xf86AdjustFrameProc *
 fbdevHWAdjustFrameWeak(void) { return fbdevHWAdjustFrame; }
 
-xf86EnterVTProc *
+_X_EXPORT xf86EnterVTProc *
 fbdevHWEnterVTWeak(void) { return fbdevHWEnterVT; }
 
-xf86LeaveVTProc *
+_X_EXPORT xf86LeaveVTProc *
 fbdevHWLeaveVTWeak(void) { return fbdevHWLeaveVT; }
 
-xf86ValidModeProc *
+_X_EXPORT xf86ValidModeProc *
 fbdevHWValidModeWeak(void) { return fbdevHWValidMode; }
 
-xf86DPMSSetProc *
+_X_EXPORT xf86DPMSSetProc *
 fbdevHWDPMSSetWeak(void) { return fbdevHWDPMSSet; }
 
-xf86LoadPaletteProc *
+_X_EXPORT xf86LoadPaletteProc *
 fbdevHWLoadPaletteWeak(void) { return fbdevHWLoadPalette; }
 
-SaveScreenProcPtr
+_X_EXPORT SaveScreenProcPtr
 fbdevHWSaveScreenWeak(void) { return fbdevHWSaveScreen; }
diff --git a/hw/xfree86/int10/generic.c b/hw/xfree86/int10/generic.c
index 0af7c1b..a9006e2 100644
--- a/hw/xfree86/int10/generic.c
+++ b/hw/xfree86/int10/generic.c
@@ -116,7 +116,7 @@ read_legacy_video_BIOS(struct pci_device *dev, unsigned char *Buf)
 }
 
 
-xf86Int10InfoPtr
+_X_EXPORT xf86Int10InfoPtr
 xf86ExtendedInitInt10(int entityIndex, int Flags)
 {
     xf86Int10InfoPtr pInt;
@@ -328,7 +328,7 @@ MapCurrentInt10(xf86Int10InfoPtr pInt)
     return TRUE;
 }
 
-void
+_X_EXPORT void
 xf86FreeInt10(xf86Int10InfoPtr pInt)
 {
     if (!pInt)
@@ -345,7 +345,7 @@ xf86FreeInt10(xf86Int10InfoPtr pInt)
     xfree(pInt);
 }
 
-void *
+_X_EXPORT void *
 xf86Int10AllocPages(xf86Int10InfoPtr pInt, int num, int *off)
 {
     int pagesize = getpagesize();
@@ -373,7 +373,7 @@ xf86Int10AllocPages(xf86Int10InfoPtr pInt, int num, int *off)
     return (char *)INTPriv(pInt)->base + *off;
 }
 
-void
+_X_EXPORT void
 xf86Int10FreePages(xf86Int10InfoPtr pInt, void *pbase, int num)
 {
     int pagesize = getpagesize();
@@ -486,7 +486,7 @@ write_l(xf86Int10InfoPtr pInt, int addr, CARD32 val)
     V_ADDR_WB(addr + 3, val >> 24);
 }
 
-pointer
+_X_EXPORT pointer
 xf86int10Addr(xf86Int10InfoPtr pInt, CARD32 addr)
 {
     return V_ADDR(addr);
diff --git a/hw/xfree86/int10/stub.c b/hw/xfree86/int10/stub.c
index 58b6578..ac858d5 100644
--- a/hw/xfree86/int10/stub.c
+++ b/hw/xfree86/int10/stub.c
@@ -19,7 +19,7 @@ xf86InitInt10(int entityIndex)
     return xf86ExtendedInitInt10(entityIndex, 0);
 }
 
-xf86Int10InfoPtr
+_X_EXPORT xf86Int10InfoPtr
 xf86ExtendedInitInt10(int entityIndex, int Flags)
 {
     return NULL;
@@ -31,20 +31,20 @@ MapCurrentInt10(xf86Int10InfoPtr pInt)
     return FALSE;
 }
 
-void
+_X_EXPORT void
 xf86FreeInt10(xf86Int10InfoPtr pInt)
 {
     return;
 }
 
-void *
+_X_EXPORT void *
 xf86Int10AllocPages(xf86Int10InfoPtr pInt,int num, int *off)
 {
     *off = 0;
     return NULL;
 }
 
-void
+_X_EXPORT void
 xf86Int10FreePages(xf86Int10InfoPtr pInt, void *pbase, int num)
 {
     return;
@@ -56,13 +56,13 @@ xf86Int10ExecSetup(xf86Int10InfoPtr pInt)
     return FALSE;
 }
 
-void
+_X_EXPORT void
 xf86ExecX86int10(xf86Int10InfoPtr pInt)
 {
     return;
 }
 
-pointer
+_X_EXPORT pointer
 xf86int10Addr(xf86Int10InfoPtr pInt, CARD32 addr)
 {
     return 0;
diff --git a/hw/xfree86/int10/xf86x86emu.c b/hw/xfree86/int10/xf86x86emu.c
index 83663b0..7f5b9d4 100644
--- a/hw/xfree86/int10/xf86x86emu.c
+++ b/hw/xfree86/int10/xf86x86emu.c
@@ -28,7 +28,7 @@ x86emu_do_int(int num)
     }
 }
 
-void
+_X_EXPORT void
 xf86ExecX86int10(xf86Int10InfoPtr pInt)
 {
     int sig = setup_int(pInt);
diff --git a/hw/xfree86/os-support/linux/int10/linux.c b/hw/xfree86/os-support/linux/int10/linux.c
index 06f42f8..0c77944 100644
--- a/hw/xfree86/os-support/linux/int10/linux.c
+++ b/hw/xfree86/os-support/linux/int10/linux.c
@@ -71,7 +71,7 @@ static Int10LinuxSubModuleState int10LinuxLoadSubModule(ScrnInfoPtr pScrn);
 
 #endif /* DoSubModules */
 
-xf86Int10InfoPtr
+_X_EXPORT xf86Int10InfoPtr
 xf86ExtendedInitInt10(int entityIndex, int Flags)
 {
     xf86Int10InfoPtr pInt = NULL;
@@ -392,7 +392,7 @@ MapCurrentInt10(xf86Int10InfoPtr pInt)
     return TRUE;
 }
 
-void
+_X_EXPORT void
 xf86FreeInt10(xf86Int10InfoPtr pInt)
 {
     if (!pInt)
@@ -421,7 +421,7 @@ xf86FreeInt10(xf86Int10InfoPtr pInt)
     xfree(pInt);
 }
 
-void *
+_X_EXPORT void *
 xf86Int10AllocPages(xf86Int10InfoPtr pInt, int num, int *off)
 {
     int pagesize = getpagesize();
@@ -450,7 +450,7 @@ xf86Int10AllocPages(xf86Int10InfoPtr pInt, int num, int *off)
     return ((linuxInt10Priv*)pInt->private)->base + ((i + 1) * pagesize);
 }
 
-void
+_X_EXPORT void
 xf86Int10FreePages(xf86Int10InfoPtr pInt, void *pbase, int num)
 {
     int pagesize = getpagesize();
@@ -499,7 +499,7 @@ void write_l(xf86Int10InfoPtr pInt, int addr, CARD32 val)
     *((CARD32 *)(memType) addr) = val;
 }
 
-pointer
+_X_EXPORT pointer
 xf86int10Addr(xf86Int10InfoPtr pInt, CARD32 addr)
 {
     if (addr < V_RAM)
diff --git a/hw/xfree86/os-support/linux/int10/vm86/linux_vm86.c b/hw/xfree86/os-support/linux/int10/vm86/linux_vm86.c
index 9412b07..cceda06 100644
--- a/hw/xfree86/os-support/linux/int10/vm86/linux_vm86.c
+++ b/hw/xfree86/os-support/linux/int10/vm86/linux_vm86.c
@@ -255,7 +255,7 @@ do_vm86(xf86Int10InfoPtr pInt)
     return 1;
 }
 
-void
+_X_EXPORT void
 xf86ExecX86int10(xf86Int10InfoPtr pInt)
 {
     int sig = setup_int(pInt);
diff --git a/hw/xfree86/vbe/vbe.c b/hw/xfree86/vbe/vbe.c
index 4986b5b..533710b 100644
--- a/hw/xfree86/vbe/vbe.c
+++ b/hw/xfree86/vbe/vbe.c
@@ -47,7 +47,7 @@ VBEInit(xf86Int10InfoPtr pInt, int entityIndex)
     return VBEExtendedInit(pInt, entityIndex, 0);
 }
 
-vbeInfoPtr
+_X_EXPORT vbeInfoPtr
 VBEExtendedInit(xf86Int10InfoPtr pInt, int entityIndex, int Flags)
 {
     int RealOff;
@@ -155,7 +155,7 @@ VBEExtendedInit(xf86Int10InfoPtr pInt, int entityIndex, int Flags)
     return NULL;
 }
 
-void
+_X_EXPORT void
 vbeFree(vbeInfoPtr pVbe)
 {
     if (!pVbe)
@@ -306,7 +306,7 @@ vbeReadEDID(vbeInfoPtr pVbe)
     return tmp;
 }
 
-xf86MonPtr
+_X_EXPORT xf86MonPtr
 vbeDoEDID(vbeInfoPtr pVbe, pointer pDDCModule)
 {
     xf86MonPtr    pMonitor;
@@ -339,7 +339,7 @@ vbeDoEDID(vbeInfoPtr pVbe, pointer pDDCModule)
 #define GET_UNALIGNED2(x) \
             ((*(CARD16*)(x)) | (*(((CARD16*)(x) + 1))) << 16)
 
-VbeInfoBlock *
+_X_EXPORT VbeInfoBlock *
 VBEGetVBEInfo(vbeInfoPtr pVbe)
 {
     VbeInfoBlock *block = NULL;
@@ -436,7 +436,7 @@ VBEFreeVBEInfo(VbeInfoBlock *block)
     xfree(block);
 }
 
-Bool
+_X_EXPORT Bool
 VBESetVBEMode(vbeInfoPtr pVbe, int mode, VbeCRTCInfoBlock *block)
 {
     /*
@@ -474,7 +474,7 @@ VBESetVBEMode(vbeInfoPtr pVbe, int mode, VbeCRTCInfoBlock *block)
     return (R16(pVbe->pInt10->ax) == 0x4f);
 }
 
-Bool
+_X_EXPORT Bool
 VBEGetVBEMode(vbeInfoPtr pVbe, int *mode)
 {
     /*
@@ -602,7 +602,7 @@ VBEFreeModeInfo(VbeModeInfoBlock *block)
     xfree(block);
 }
 
-Bool
+_X_EXPORT Bool
 VBESaveRestore(vbeInfoPtr pVbe, vbeSaveRestoreFunction function, 
 	       pointer *memory, int *size, int *real_mode_pages)
 {
@@ -701,7 +701,7 @@ VBESaveRestore(vbeInfoPtr pVbe, vbeSaveRestoreFunction function,
     return TRUE;
 }
 
-Bool
+_X_EXPORT Bool
 VBEBankSwitch(vbeInfoPtr pVbe, unsigned int iBank, int window)
 {
     /*
@@ -723,7 +723,7 @@ VBEBankSwitch(vbeInfoPtr pVbe, unsigned int iBank, int window)
     return (TRUE);
 }
 
-Bool
+_X_EXPORT Bool
 VBESetGetLogicalScanlineLength(vbeInfoPtr pVbe, vbeScanwidthCommand command,
 				int width, int *pixels, int *bytes, int *max)
 {
@@ -771,7 +771,7 @@ VBESetGetLogicalScanlineLength(vbeInfoPtr pVbe, vbeScanwidthCommand command,
     return (TRUE);
 }
 
-Bool
+_X_EXPORT Bool
 VBESetDisplayStart(vbeInfoPtr pVbe, int x, int y, Bool wait_retrace)
 {
     pVbe->pInt10->num = 0x10;
@@ -804,7 +804,7 @@ VBEGetDisplayStart(vbeInfoPtr pVbe, int *x, int *y)
     return (TRUE);
 }
 
-int
+_X_EXPORT int
 VBESetGetDACPaletteFormat(vbeInfoPtr pVbe, int bits)
 {
     /*
@@ -834,7 +834,7 @@ VBESetGetDACPaletteFormat(vbeInfoPtr pVbe, int bits)
     return (bits != 0 ? bits : (pVbe->pInt10->bx >> 8) & 0x00ff);
 }
 
-CARD32 *
+_X_EXPORT CARD32 *
 VBESetGetPaletteData(vbeInfoPtr pVbe, Bool set, int first, int num,
 		      CARD32 *data, Bool secondary, Bool wait_retrace)
 {
@@ -1013,7 +1013,7 @@ VBEVesaSaveRestore(vbeInfoPtr pVbe, vbeSaveRestorePtr vbe_sr,
 
 }
 
-int
+_X_EXPORT int
 VBEGetPixelClock(vbeInfoPtr pVbe, int mode, int clock)
 {
     /*
@@ -1041,7 +1041,7 @@ VBEGetPixelClock(vbeInfoPtr pVbe, int mode, int clock)
     return (pVbe->pInt10->cx);
 }
 
-Bool
+_X_EXPORT Bool
 VBEDPMSSet(vbeInfoPtr pVbe, int mode)
 {
     /*
diff --git a/hw/xfree86/vbe/vbeModes.c b/hw/xfree86/vbe/vbeModes.c
index fb730a7..78cca5a 100644
--- a/hw/xfree86/vbe/vbeModes.c
+++ b/hw/xfree86/vbe/vbeModes.c
@@ -89,7 +89,7 @@ GetDepthFlag(vbeInfoPtr pVbe, int id)
 /*
  * Find supported mode depths.
  */
-int
+_X_EXPORT int
 VBEFindSupportedDepths(vbeInfoPtr pVbe, VbeInfoBlock *vbe, int *flags24,
 			int modeTypes)
 {
@@ -269,7 +269,7 @@ CheckMode(ScrnInfoPtr pScrn, vbeInfoPtr pVbe, VbeInfoBlock *vbe, int id,
  * list.
  */
 
-DisplayModePtr
+_X_EXPORT DisplayModePtr
 VBEGetModePool(ScrnInfoPtr pScrn, vbeInfoPtr pVbe, VbeInfoBlock *vbe,
 	       int modeTypes)
 {
@@ -343,7 +343,7 @@ VBEGetModePool(ScrnInfoPtr pScrn, vbeInfoPtr pVbe, VbeInfoBlock *vbe,
     return modePool;
 }
 
-void
+_X_EXPORT void
 VBESetModeNames(DisplayModePtr pMode)
 {
     if (!pMode)
@@ -369,7 +369,7 @@ VBESetModeNames(DisplayModePtr pMode)
  * parameters for each BIOS mode.  Note: This is only supported in
  * VBE version 3.0 or later.
  */
-void
+_X_EXPORT void
 VBESetModeParameters(ScrnInfoPtr pScrn, vbeInfoPtr pVbe)
 {
     DisplayModePtr pMode;
@@ -432,7 +432,7 @@ VBESetModeParameters(ScrnInfoPtr pScrn, vbeInfoPtr pVbe)
 /*
  * These wrappers are to allow (temporary) funtionality divergences.
  */
-int
+_X_EXPORT int
 VBEValidateModes(ScrnInfoPtr scrp, DisplayModePtr availModes,
 		  char **modeNames, ClockRangePtr clockRanges,
 		  int *linePitches, int minPitch, int maxPitch, int pitchInc,
@@ -445,7 +445,7 @@ VBEValidateModes(ScrnInfoPtr scrp, DisplayModePtr availModes,
 			     apertureSize, strategy);
 }
 
-void
+_X_EXPORT void
 VBEPrintModes(ScrnInfoPtr scrp)
 {
     xf86PrintModes(scrp);
commit 74e2669103b59d51b24ddc48f378b1d04a3effd4
Author: Paulo Cesar Pereira de Andrade <pcpa at mandriva.com.br>
Date:   Thu Nov 27 04:33:44 2008 -0200

    Export symbols also defined in libXfont.
    
      libXfont has stubs for these symbols, so, when compiling with hidden
    symbols by default, these symbols must be visible in the X Server, or
    the stubs in libXfont will be used.

diff --git a/dix/dixfonts.c b/dix/dixfonts.c
index 416adb3..97352ba 100644
--- a/dix/dixfonts.c
+++ b/dix/dixfonts.c
@@ -1915,14 +1915,14 @@ InitFonts (void)
 #endif
 }
 
-int
+_X_EXPORT int
 GetDefaultPointSize ()
 {
     return 120;
 }
 
 
-FontResolutionPtr
+_X_EXPORT FontResolutionPtr
 GetClientResolutions (int *num)
 {
     static struct _FontResolution res;
@@ -1954,7 +1954,7 @@ GetClientResolutions (int *num)
  * should be called (only once!) by each type of fpe when initialized
  */
 
-int
+_X_EXPORT int
 RegisterFPEFunctions(NameCheckFunc name_func, 
 		     InitFpeFunc init_func, 
 		     FreeFpeFunc free_func, 
@@ -2020,32 +2020,32 @@ FreeFonts(void)
 
 /* convenience functions for FS interface */
 
-FontPtr
+_X_EXPORT FontPtr
 find_old_font(XID id)
 {
     return (FontPtr) SecurityLookupIDByType(NullClient, id, RT_NONE,
 					    DixUnknownAccess);
 }
 
-Font
+_X_EXPORT Font
 GetNewFontClientID()
 {
     return FakeClientID(0);
 }
 
-int
+_X_EXPORT int
 StoreFontClientFont(FontPtr pfont, Font id)
 {
     return AddResource(id, RT_NONE, (pointer) pfont);
 }
 
-void
+_X_EXPORT void
 DeleteFontClientID(Font id)
 {
     FreeResource(id, RT_NONE);
 }
 
-int
+_X_EXPORT int
 client_auth_generation(ClientPtr client)
 {
     return 0;
@@ -2054,7 +2054,7 @@ client_auth_generation(ClientPtr client)
 static int  fs_handlers_installed = 0;
 static unsigned int last_server_gen;
 
-int
+_X_EXPORT int
 init_fs_handlers(FontPathElementPtr fpe, BlockHandlerProcPtr block_handler)
 {
     /* if server has reset, make sure the b&w handlers are reinstalled */
@@ -2072,7 +2072,7 @@ init_fs_handlers(FontPathElementPtr fpe, BlockHandlerProcPtr block_handler)
     return Successful;
 }
 
-void
+_X_EXPORT void
 remove_fs_handlers(FontPathElementPtr fpe, BlockHandlerProcPtr block_handler, Bool all)
 {
     if (all) {
diff --git a/dix/dixutils.c b/dix/dixutils.c
index 340564e..1dfb346 100644
--- a/dix/dixutils.c
+++ b/dix/dixutils.c
@@ -614,7 +614,7 @@ ClientSleep (ClientPtr client, ClientSleepProcPtr function, pointer closure)
     return TRUE;
 }
 
-Bool
+_X_EXPORT Bool
 ClientSignal (ClientPtr client)
 {
     SleepQueuePtr   q;
diff --git a/os/utils.c b/os/utils.c
index b100949..39a40e4 100644
--- a/os/utils.c
+++ b/os/utils.c
@@ -982,7 +982,7 @@ ProcessCommandLine(int argc, char *argv[])
 
 /* Implement a simple-minded font authorization scheme.  The authorization
    name is "hp-hostname-1", the contents are simply the host name. */
-int
+_X_EXPORT int
 set_font_authorizations(char **authorizations, int *authlen, pointer client)
 {
 #define AUTHORIZATION_NAME "hp-hostname-1"
commit 87a7fb7438b70d07ebf240c530b8548a01021d48
Author: Paulo Cesar Pereira de Andrade <pcpa at mandriva.com.br>
Date:   Thu Nov 27 00:12:59 2008 -0200

    Rework code using return value of LoaderSymbol as a function pointer.
    
    The patch removes all macros in the format
      define xf86_sym  ((type (*)(argument-list))LoaderSymbol("sym"))
    creates a new macro in the format
      define xf86_sym  sym
    and ensures "sym" is a "visible" symbol.
      The patch doesn't add or remove features, and is source and binary
    compatible with previous shared objects (with the difference that it
    requires the dlloader).
      These symbols are a special case, as, due to the fact that LoaderSymbol
    was being used to reference them, they are not easily found by "automated"
    tools that check for missing symbols. And now it also have the benefit
    that the compiler/loader "knows what is going on".

diff --git a/hw/xfree86/i2c/bt829.c b/hw/xfree86/i2c/bt829.c
index 3963ecf..5b70587 100644
--- a/hw/xfree86/i2c/bt829.c
+++ b/hw/xfree86/i2c/bt829.c
@@ -456,7 +456,7 @@ static void write_all(BT829Ptr bt)
 /*
  * Public functions
  */
-BT829Ptr bt829_Detect(I2CBusPtr b, I2CSlaveAddr addr)
+_X_EXPORT BT829Ptr bt829_Detect(I2CBusPtr b, I2CSlaveAddr addr)
 {
   BT829Ptr bt;
   I2CByte a;
@@ -542,7 +542,7 @@ BT829Ptr bt829_Detect(I2CBusPtr b, I2CSlaveAddr addr)
   return bt;
 }
 
-int bt829_ATIInit(BT829Ptr bt)
+_X_EXPORT int bt829_ATIInit(BT829Ptr bt)
 {
   bt->code = 1;
   bt->len = 0;
@@ -555,7 +555,7 @@ int bt829_ATIInit(BT829Ptr bt)
   return 0;
 }
 
-int bt829_SetFormat(BT829Ptr bt, CARD8 format)
+_X_EXPORT int bt829_SetFormat(BT829Ptr bt, CARD8 format)
 {
   if ((format < 1) || (format > 7)) return -1;
   if ((BTVERSION <= BT819) &&
@@ -571,7 +571,7 @@ int bt829_SetFormat(BT829Ptr bt, CARD8 format)
   return 0;
 }
 
-int bt829_SetMux(BT829Ptr bt, CARD8 mux)
+_X_EXPORT int bt829_SetMux(BT829Ptr bt, CARD8 mux)
 {
   if ((mux < 1) || (mux > 3)) return -1;
   if (mux == bt->mux) return 0;
@@ -583,7 +583,7 @@ int bt829_SetMux(BT829Ptr bt, CARD8 mux)
   return 0;
 }
 
-void bt829_SetBrightness(BT829Ptr bt, int brightness)
+_X_EXPORT void bt829_SetBrightness(BT829Ptr bt, int brightness)
 {
   brightness = LIMIT(brightness,-1000,999); /* ensure -128 <= brightness <= 127 below */
   brightness = (128*brightness)/1000;
@@ -593,7 +593,7 @@ void bt829_SetBrightness(BT829Ptr bt, int brightness)
   btwrite_bright(bt);
 }
 
-void bt829_SetContrast(BT829Ptr bt, int contrast)
+_X_EXPORT void bt829_SetContrast(BT829Ptr bt, int contrast)
 {
   contrast = LIMIT(contrast,-1000,1000);
   contrast = (216*(contrast+1000))/1000;
@@ -604,7 +604,7 @@ void bt829_SetContrast(BT829Ptr bt, int contrast)
   btwrite_contrast_lo(bt);
 }
 
-void bt829_SetSaturation(BT829Ptr bt, int saturation)
+_X_EXPORT void bt829_SetSaturation(BT829Ptr bt, int saturation)
 {
   CARD16 sat_u, sat_v;
 
@@ -620,7 +620,7 @@ void bt829_SetSaturation(BT829Ptr bt, int saturation)
   btwrite_sat_v_lo(bt);
 }
 
-void bt829_SetTint(BT829Ptr bt, int hue)
+_X_EXPORT void bt829_SetTint(BT829Ptr bt, int hue)
 {
   hue = LIMIT(hue,-1000,999); /* ensure -128 <= hue <= 127 below */
   hue = (128*hue)/1000;
@@ -630,7 +630,7 @@ void bt829_SetTint(BT829Ptr bt, int hue)
   btwrite_hue(bt);
 }
 
-int bt829_SetCaptSize(BT829Ptr bt, int width, int height)
+_X_EXPORT int bt829_SetCaptSize(BT829Ptr bt, int width, int height)
 {
   if ((width > bt->htotal - 2 * HCROP) ||
       (16 * width < bt->htotal - 32 * HCROP)) return -1;
@@ -656,7 +656,7 @@ int bt829_SetCC(BT829Ptr bt) /* FIXME: should take ccmode as a parameter */
   return 0;
 }
 
-void bt829_SetOUT_EN(BT829Ptr bt, BOOL out_en)
+_X_EXPORT void bt829_SetOUT_EN(BT829Ptr bt, BOOL out_en)
 {
   out_en = (out_en != 0);
   if (out_en == bt->out_en) return;
@@ -665,7 +665,7 @@ void bt829_SetOUT_EN(BT829Ptr bt, BOOL out_en)
   btwrite_vpole(bt);
 }
 
-void bt829_SetP_IO(BT829Ptr bt, CARD8 p_io)
+_X_EXPORT void bt829_SetP_IO(BT829Ptr bt, CARD8 p_io)
 {
   if (p_io == bt->p_io) return;
   bt->p_io = p_io;
diff --git a/hw/xfree86/i2c/bt829.h b/hw/xfree86/i2c/bt829.h
index bca9d37..17e6bc7 100644
--- a/hw/xfree86/i2c/bt829.h
+++ b/hw/xfree86/i2c/bt829.h
@@ -36,12 +36,15 @@ typedef struct {
     	CARD8		svideo_mux;
 } BT829Rec, *BT829Ptr;
 
-BT829Ptr bt829_Detect(I2CBusPtr b, I2CSlaveAddr addr);
+#define xf86_bt829_Detect	bt829_Detect
+extern BT829Ptr bt829_Detect(I2CBusPtr b, I2CSlaveAddr addr);
 
 /* ATI card specific initialization */
 #define BT829_ATI_ADDR_1	0x8A
 #define BT829_ATI_ADDR_2	0x88
-int bt829_ATIInit(BT829Ptr bt);
+
+#define xf86_bt829_ATIInit	bt829_ATIInit
+extern int bt829_ATIInit(BT829Ptr bt);
 
 #define BT829_NTSC		1	/* NTSC-M */
 #define BT829_NTSC_JAPAN	2	/* NTSC-Japan */
@@ -50,22 +53,33 @@ int bt829_ATIInit(BT829Ptr bt);
 #define BT829_PAL_N		5	/* PAL-N */
 #define BT829_SECAM		6	/* SECAM */
 #define BT829_PAL_N_COMB	7	/* PAL-N combination */
-int bt829_SetFormat(BT829Ptr bt, CARD8 format);
+
+#define xf86_bt829_SetFormat	bt829_SetFormat
+extern int bt829_SetFormat(BT829Ptr bt, CARD8 format);
 
 #define BT829_MUX2	1	/* ATI -> composite video */
 #define BT829_MUX0	2	/* ATI -> tv tuner */
 #define BT829_MUX1	3	/* ATI -> s-video */
-int bt829_SetMux(BT829Ptr bt, CARD8 mux);
 
-int bt829_SetCaptSize(BT829Ptr bt, int width, int height);
+#define xf86_bt829_SetMux	bt829_SetMux
+extern int bt829_SetMux(BT829Ptr bt, CARD8 mux);
 
-void bt829_SetBrightness(BT829Ptr bt, int brightness);
-void bt829_SetContrast(BT829Ptr bt, int contrast);
-void bt829_SetSaturation(BT829Ptr bt, int saturation);
-void bt829_SetTint(BT829Ptr bt, int hue);	/* Hue */
+#define xf86_bt829_SetCaptSize		bt829_SetCaptSize
+extern int bt829_SetCaptSize(BT829Ptr bt, int width, int height);
 
-void bt829_SetOUT_EN(BT829Ptr bt, BOOL out_en);	/* VPOLE register */
-void bt829_SetP_IO(BT829Ptr bt, CARD8 p_io);	/* P_IO register */
+#define xf86_bt829_SetBrightness	bt829_SetBrightness
+extern void bt829_SetBrightness(BT829Ptr bt, int brightness);
+#define xf86_bt829_SetContrast		bt829_SetContrast
+extern void bt829_SetContrast(BT829Ptr bt, int contrast);
+#define xf86_bt829_SetSaturation	bt829_SetSaturation
+extern void bt829_SetSaturation(BT829Ptr bt, int saturation);
+#define xf86_bt829_SetTint		bt829_SetTint
+extern void bt829_SetTint(BT829Ptr bt, int hue);	 /* Hue */
+
+#define xf86_bt829_SetOUT_EN		bt829_SetOUT_EN
+extern void bt829_SetOUT_EN(BT829Ptr bt, BOOL out_en);/* VPOLE register */
+#define xf86_bt829_SetP_IO		bt829_SetP_IO
+extern void bt829_SetP_IO(BT829Ptr bt, CARD8 p_io);	 /* P_IO register */
 
 int bt829_SetCC(BT829Ptr bt);
 
@@ -82,16 +96,4 @@ int bt829_SetCC(BT829Ptr bt);
 		"bt829_SetOUT_EN", \
 		"bt829_SetP_IO"
 
-#define xf86_bt829_Detect		((BT829Ptr (*)(I2CBusPtr, I2CSlaveAddr))LoaderSymbol("bt829_Detect"))
-#define xf86_bt829_ATIInit		((int (*)(BT829Ptr))LoaderSymbol("bt829_ATIInit"))
-#define xf86_bt829_SetFormat		((int (*)(BT829Ptr, CARD8))LoaderSymbol("bt829_SetFormat"))
-#define xf86_bt829_SetMux		((int (*)(BT829Ptr, CARD8))LoaderSymbol("bt829_SetMux"))
-#define xf86_bt829_SetCaptSize		((int (*)(BT829Ptr, int, int))LoaderSymbol("bt829_SetCaptSize"))
-#define xf86_bt829_SetBrightness	((void (*)(BT829Ptr, int))LoaderSymbol("bt829_SetBrightness"))
-#define xf86_bt829_SetContrast		((void (*)(BT829Ptr, int))LoaderSymbol("bt829_SetContrast"))
-#define xf86_bt829_SetSaturation	((void (*)(BT829Ptr, int))LoaderSymbol("bt829_SetSaturation"))
-#define xf86_bt829_SetTint		((void (*)(BT829Ptr, int))LoaderSymbol("bt829_SetTint"))
-#define xf86_bt829_SetOUT_EN		((void (*)(BT829Ptr, Bool))LoaderSymbol("bt829_SetOUT_EN"))
-#define xf86_bt829_SetP_IO		((void (*)(BT829Ptr, CARD8))LoaderSymbol("bt829_SetP_IO"))
-
 #endif
diff --git a/hw/xfree86/i2c/fi1236.c b/hw/xfree86/i2c/fi1236.c
index 110563e..950bb5b 100644
--- a/hw/xfree86/i2c/fi1236.c
+++ b/hw/xfree86/i2c/fi1236.c
@@ -41,7 +41,7 @@ const FI1236_parameters tuner_parms[NUM_TUNERS] =
 };
 
 
-FI1236Ptr Detect_FI1236(I2CBusPtr b, I2CSlaveAddr addr)
+_X_EXPORT FI1236Ptr Detect_FI1236(I2CBusPtr b, I2CSlaveAddr addr)
 {
    FI1236Ptr f;
    I2CByte a;
@@ -394,7 +394,7 @@ return TUNER_OFF;
 }
 
 /* this function is for external use only */
-int TUNER_get_afc_hint(FI1236Ptr f)
+_X_EXPORT int TUNER_get_afc_hint(FI1236Ptr f)
 {
 if(f->afc_timer_installed)return TUNER_STILL_TUNING;
 return f->last_afc_hint;
@@ -465,7 +465,7 @@ for(i=0;i<3;i++){
 xf86DrvMsg(f->d.pI2CBus->scrnIndex, X_INFO, "MT2032: failed to set frequency\n");
 }
 
-void FI1236_set_tuner_type(FI1236Ptr f, int type)
+_X_EXPORT void FI1236_set_tuner_type(FI1236Ptr f, int type)
 {
 f->type=type;
 if(type>=NUM_TUNERS)type = NUM_TUNERS-1;
@@ -532,7 +532,7 @@ void FI1236_tune(FI1236Ptr f, CARD32 frequency)
 				I2C_WriteRead(&(f->d), (I2CByte *)&(f->tuner_data), 4, NULL, 0);
 }
 
-void TUNER_set_frequency(FI1236Ptr f, CARD32 frequency)
+_X_EXPORT void TUNER_set_frequency(FI1236Ptr f, CARD32 frequency)
 {
     if(frequency < f->parm.min_freq) frequency = f->parm.min_freq;
     if(frequency > f->parm.max_freq) frequency = f->parm.max_freq;
@@ -558,7 +558,7 @@ void TUNER_set_frequency(FI1236Ptr f, CARD32 frequency)
 }
 
 
-int FI1236_AFC(FI1236Ptr f)
+_X_EXPORT int FI1236_AFC(FI1236Ptr f)
 {
     #if 0
     xf86DrvMsg(f->d.pI2CBus->scrnIndex, X_INFO, "AFC: f=%p f->count=%d f->original_frequency=%d f->afc_delta=%d\n", f, f->afc_count, f->original_frequency, f->afc_delta);
@@ -601,7 +601,7 @@ int FI1236_AFC(FI1236Ptr f)
     return 0; /* done */
 }
 
-void fi1236_dump_status(FI1236Ptr f)
+_X_EXPORT void fi1236_dump_status(FI1236Ptr f)
 {
 if(f->type==TUNER_TYPE_MT2032){
 	MT2032_dump_status(f);
diff --git a/hw/xfree86/i2c/fi1236.h b/hw/xfree86/i2c/fi1236.h
index eda1c78..9c56e5a 100644
--- a/hw/xfree86/i2c/fi1236.h
+++ b/hw/xfree86/i2c/fi1236.h
@@ -87,24 +87,25 @@ typedef struct {
 #define TUNER_STILL_TUNING      5
 
 
-FI1236Ptr Detect_FI1236(I2CBusPtr b, I2CSlaveAddr addr);
-void FI1236_set_tuner_type(FI1236Ptr f, int type);
-void TUNER_set_frequency(FI1236Ptr f, CARD32 frequency);
 void FI1236_tune(FI1236Ptr f, CARD32 frequency);
-int FI1236_AFC(FI1236Ptr f);
-int TUNER_get_afc_hint(FI1236Ptr f);
-void fi1236_dump_status(FI1236Ptr f);
 
 #define FI1236SymbolsList  \
 		"Detect_FI1236", \
 		"FI1236_set_tuner_type", \
 		"TUNER_set_frequency"
 
-#define xf86_Detect_FI1236         ((FI1236Ptr (*)(I2CBusPtr, I2CSlaveAddr))LoaderSymbol("Detect_FI1236"))
-#define xf86_FI1236_set_tuner_type ((void (*)(FI1236Ptr, int))LoaderSymbol("FI1236_set_tuner_type"))
-#define xf86_TUNER_set_frequency           ((void (*)(FI1236Ptr, CARD32))LoaderSymbol("TUNER_set_frequency"))
-#define xf86_FI1236_AFC           ((int (*)(FI1236Ptr))LoaderSymbol("FI1236_AFC"))
-#define xf86_TUNER_get_afc_hint   ((int (*)(FI1236Ptr))LoaderSymbol("TUNER_get_afc_hint"))
-#define xf86_fi1236_dump_status   ((void (*)(FI1236Ptr))LoaderSymbol("fi1236_dump_status"))
+#define xf86_Detect_FI1236		Detect_FI1236
+extern FI1236Ptr Detect_FI1236(I2CBusPtr b, I2CSlaveAddr addr);
+#define xf86_FI1236_set_tuner_type	FI1236_set_tuner_type
+extern void FI1236_set_tuner_type(FI1236Ptr f, int type);
+#define xf86_TUNER_set_frequency	TUNER_set_frequency
+extern void TUNER_set_frequency(FI1236Ptr f, CARD32 frequency);
+
+#define xf86_FI1236_AFC			FI1236_AFC
+extern int FI1236_AFC(FI1236Ptr f);
+#define xf86_TUNER_get_afc_hint		TUNER_get_afc_hint
+extern int TUNER_get_afc_hint(FI1236Ptr f);
+#define xf86_fi1236_dump_status		fi1236_dump_status
+extern void fi1236_dump_status(FI1236Ptr f);
 
 #endif
diff --git a/hw/xfree86/i2c/i2c_def.h b/hw/xfree86/i2c/i2c_def.h
index 6e119e4..140a071 100644
--- a/hw/xfree86/i2c/i2c_def.h
+++ b/hw/xfree86/i2c/i2c_def.h
@@ -1,14 +1,6 @@
 #ifndef __I2C_DEF_H__
 #define __I2C_DEF_H__
 
-/* the following are a workaround for possible loader bug.. 
-   WATCH function types ! */
-#define CreateI2CBusRec    ((pointer (*)(void))LoaderSymbol("xf86CreateI2CBusRec"))
-#define DestroyI2CBusRec   ((pointer (*)(I2CBusPtr, Bool, Bool))LoaderSymbol("xf86DestroyI2CBusRec"))
-#define I2CBusInit         ((Bool (*)(pointer))LoaderSymbol("xf86I2CBusInit"))
-#define I2C_WriteRead      ((Bool (*)(I2CDevPtr, I2CByte *, int, I2CByte *, int))LoaderSymbol("xf86I2CWriteRead"))
-#define CreateI2CDevRec    ((pointer (*)(void))LoaderSymbol("xf86CreateI2CDevRec"))
-#define I2CDevInit         ((Bool (*)(I2CDevPtr))LoaderSymbol("xf86I2CDevInit"))
-#define I2CProbeAddress    ((Bool (*)(I2CBusPtr,I2CSlaveAddr))LoaderSymbol("xf86I2CProbeAddress"))
+#include "xf86i2c.h"
 
 #endif
diff --git a/hw/xfree86/i2c/msp3430.c b/hw/xfree86/i2c/msp3430.c
index 4bd3a71..e19dda3 100644
--- a/hw/xfree86/i2c/msp3430.c
+++ b/hw/xfree86/i2c/msp3430.c
@@ -129,7 +129,7 @@ void InitMSP3430(MSP3430Ptr m)
 | common functions for all MSP34xx chips 
 |----------------------------------------------------------------*/
 
-MSP3430Ptr DetectMSP3430(I2CBusPtr b, I2CSlaveAddr addr)
+_X_EXPORT MSP3430Ptr DetectMSP3430(I2CBusPtr b, I2CSlaveAddr addr)
 {
    MSP3430Ptr m;
    I2CByte a;
@@ -249,7 +249,7 @@ MSP3430Ptr DetectMSP3430(I2CBusPtr b, I2CSlaveAddr addr)
    return m;  
 }
 
-void ResetMSP3430(MSP3430Ptr m)
+_X_EXPORT void ResetMSP3430(MSP3430Ptr m)
 {
     /* Reset the MSP3430 */
     SetMSP3430Control(m, 0x00, 0x80, 0x00);
@@ -262,7 +262,7 @@ void ResetMSP3430(MSP3430Ptr m)
 	m->volume=0;
 }   
 
-void MSP3430SetVolume (MSP3430Ptr m, CARD8 value)
+_X_EXPORT void MSP3430SetVolume (MSP3430Ptr m, CARD8 value)
 {
     CARD8 result;
 #if 0
@@ -287,7 +287,7 @@ void MSP3430SetVolume (MSP3430Ptr m, CARD8 value)
 }
 
 
-void MSP3430SetSAP (MSP3430Ptr m, int mode)
+_X_EXPORT void MSP3430SetSAP (MSP3430Ptr m, int mode)
 {
 	xf86DrvMsg(m->d.pI2CBus->scrnIndex, X_INFO, "Put actual code to change SAP here\n");
 
diff --git a/hw/xfree86/i2c/msp3430.h b/hw/xfree86/i2c/msp3430.h
index 1cb9b86..500023b 100644
--- a/hw/xfree86/i2c/msp3430.h
+++ b/hw/xfree86/i2c/msp3430.h
@@ -92,11 +92,16 @@ typedef struct {
 #define MSPMODE_B			8
 /*----------------------------------------------------------*/
 
-void InitMSP3430(MSP3430Ptr m);
-MSP3430Ptr DetectMSP3430(I2CBusPtr b, I2CSlaveAddr addr);
-void ResetMSP3430(MSP3430Ptr m);
-void MSP3430SetVolume (MSP3430Ptr m, CARD8 value);
-void MSP3430SetSAP (MSP3430Ptr m, int mode);
+#define xf86_InitMSP3430	InitMSP3430
+extern void InitMSP3430(MSP3430Ptr m);
+#define xf86_DetectMSP3430	DetectMSP3430
+extern MSP3430Ptr DetectMSP3430(I2CBusPtr b, I2CSlaveAddr addr);
+#define xf86_ResetMSP3430	ResetMSP3430
+extern void ResetMSP3430(MSP3430Ptr m);
+#define xf86_MSP3430SetVolume	MSP3430SetVolume
+extern void MSP3430SetVolume (MSP3430Ptr m, CARD8 value);
+#define xf86_MSP3430SetSAP	MSP3430SetSAP
+extern void MSP3430SetSAP (MSP3430Ptr m, int mode);
 
 #define MSP3430SymbolsList \
 		"InitMSP3430", \
@@ -105,10 +110,4 @@ void MSP3430SetSAP (MSP3430Ptr m, int mode);
 		"MSP3430SetVolume", \
 		"MSP3430SetSAP"
 
-#define xf86_DetectMSP3430     ((MSP3430Ptr (*)(I2CBusPtr, I2CSlaveAddr))LoaderSymbol("DetectMSP3430"))
-#define xf86_ResetMSP3430      ((void (*)(MSP3430Ptr))LoaderSymbol("ResetMSP3430"))
-#define xf86_MSP3430SetVolume  ((void (*)(MSP3430Ptr, CARD8))LoaderSymbol("MSP3430SetVolume"))
-#define xf86_MSP3430SetSAP     ((void (*)(MSP3430Ptr, int))LoaderSymbol("MSP3430SetSAP"))
-#define xf86_InitMSP3430       ((void (*)(MSP3430Ptr))LoaderSymbol("InitMSP3430"))
-
 #endif
diff --git a/hw/xfree86/i2c/tda8425.c b/hw/xfree86/i2c/tda8425.c
index 7631a08..6ca10e3 100644
--- a/hw/xfree86/i2c/tda8425.c
+++ b/hw/xfree86/i2c/tda8425.c
@@ -13,7 +13,7 @@
 		I2C_WriteRead(&(t->d), data, 2, NULL, 0); \
 		}
 
-TDA8425Ptr Detect_tda8425(I2CBusPtr b, I2CSlaveAddr addr, Bool force)
+_X_EXPORT TDA8425Ptr Detect_tda8425(I2CBusPtr b, I2CSlaveAddr addr, Bool force)
 {
   TDA8425Ptr t;
   
@@ -44,7 +44,7 @@ TDA8425Ptr Detect_tda8425(I2CBusPtr b, I2CSlaveAddr addr, Bool force)
   return t;  
 }
 
-Bool tda8425_init(TDA8425Ptr t)
+_X_EXPORT Bool tda8425_init(TDA8425Ptr t)
 {
   t->stereo = 3; 	/* 3 = Spacial 2 = Linear 1 = Pseudo 0 = Forced mono */
   t->v_left = 0xFF; 	/* FF - C0 */
@@ -59,7 +59,7 @@ Bool tda8425_init(TDA8425Ptr t)
   return TRUE;
 }
 
-void tda8425_setaudio(TDA8425Ptr t)
+_X_EXPORT void tda8425_setaudio(TDA8425Ptr t)
 {
     I2CByte data[2];
 
@@ -71,7 +71,7 @@ void tda8425_setaudio(TDA8425Ptr t)
 	    t->mux); 
 }
 
-void tda8425_mute(TDA8425Ptr t, Bool mute)
+_X_EXPORT void tda8425_mute(TDA8425Ptr t, Bool mute)
 {
    t->mute = mute;
    tda8425_setaudio(t);
diff --git a/hw/xfree86/i2c/tda8425.h b/hw/xfree86/i2c/tda8425.h
index 4abb417..636327c 100644
--- a/hw/xfree86/i2c/tda8425.h
+++ b/hw/xfree86/i2c/tda8425.h
@@ -23,10 +23,14 @@ typedef struct {
    of I2C protocol is not always available. Besides address there is no good
    way to autodetect it so we have to _know_ it is there anyway */
    
-TDA8425Ptr Detect_tda8425(I2CBusPtr b, I2CSlaveAddr addr,Bool force);
-Bool tda8425_init(TDA8425Ptr t);
-void tda8425_setaudio(TDA8425Ptr t);
-void tda8425_mute(TDA8425Ptr t, Bool mute);
+#define xf86_Detect_tda8425	Detect_tda8425
+extern TDA8425Ptr Detect_tda8425(I2CBusPtr b, I2CSlaveAddr addr,Bool force);
+#define xf86_tda8425_init	tda8425_init
+extern Bool tda8425_init(TDA8425Ptr t);
+#define xf86_tda8425_setaudio	tda8425_setaudio
+extern void tda8425_setaudio(TDA8425Ptr t);
+#define xf86_tda8425_mute	tda8425_mute
+extern void tda8425_mute(TDA8425Ptr t, Bool mute);
 
 #define TDA8425SymbolsList  \
 		"Detect_tda8425", \
@@ -34,9 +38,4 @@ void tda8425_mute(TDA8425Ptr t, Bool mute);
 		"tda8425_setaudio", \
 		"tda8425_mute"
 
-#define xf86_Detect_tda8425   ((TDA8425Ptr (*)(I2CBusPtr, I2CSlaveAddr,Bool))LoaderSymbol("Detect_tda8425"))
-#define xf86_tda8425_init     ((Bool (*)(TDA8425Ptr))LoaderSymbol("tda8425_init"))
-#define xf86_tda8425_setaudio ((void (*)(TDA8425Ptr))LoaderSymbol("tda8425_setaudio"))
-#define xf86_tda8425_mute     ((void (*)(TDA8425Ptr, Bool))LoaderSymbol("tda8425_mute"))
-
 #endif
diff --git a/hw/xfree86/i2c/tda9850.c b/hw/xfree86/i2c/tda9850.c
index 5b0c581..7566012 100644
--- a/hw/xfree86/i2c/tda9850.c
+++ b/hw/xfree86/i2c/tda9850.c
@@ -13,7 +13,7 @@
 		I2C_WriteRead(&(t->d), data, 2, NULL, 0); \
 		}
 
-TDA9850Ptr Detect_tda9850(I2CBusPtr b, I2CSlaveAddr addr)
+_X_EXPORT TDA9850Ptr Detect_tda9850(I2CBusPtr b, I2CSlaveAddr addr)
 {
   TDA9850Ptr t;
   I2CByte a;
@@ -53,7 +53,7 @@ TDA9850Ptr Detect_tda9850(I2CBusPtr b, I2CSlaveAddr addr)
   return t;  
 }
 
-Bool tda9850_init(TDA9850Ptr t)
+_X_EXPORT Bool tda9850_init(TDA9850Ptr t)
 {
   t->stereo = 1;
   t->sap = 0;
@@ -63,7 +63,7 @@ Bool tda9850_init(TDA9850Ptr t)
   return TRUE;
 }
 
-void tda9850_setaudio(TDA9850Ptr t)
+_X_EXPORT void tda9850_setaudio(TDA9850Ptr t)
 {
 CARD8 data[2];
 
@@ -83,7 +83,7 @@ if(t->mux==2)
 TDA9850(0x06,(t->stereo<<6)|(t->sap<<7)|(t->mute?0x8:0)|(t->sap_mute?0x10:0x0)); 
 }
 
-void tda9850_mute(TDA9850Ptr t, Bool mute)
+_X_EXPORT void tda9850_mute(TDA9850Ptr t, Bool mute)
 {
 CARD8 data[2];
 
@@ -93,7 +93,7 @@ t->mute = mute;
 TDA9850(0x06,(t->stereo<<6)|(t->sap<<7)|(t->mute?0x8:0x0)|(t->sap_mute?0x10:0x0)); 
 }
 
-void tda9850_sap_mute(TDA9850Ptr t, Bool sap_mute)
+_X_EXPORT void tda9850_sap_mute(TDA9850Ptr t, Bool sap_mute)
 {
 CARD8 data[2];
 
@@ -103,7 +103,7 @@ t->sap_mute = sap_mute;
 TDA9850(0x06,(t->stereo<<6)|(t->sap<<7)|(t->mute?0x8:0x0)|(t->sap_mute?0x10:0x0)); 
 }
 
-CARD16 tda9850_getstatus(TDA9850Ptr t)
+_X_EXPORT CARD16 tda9850_getstatus(TDA9850Ptr t)
 {
 CARD16 status;
 
diff --git a/hw/xfree86/i2c/tda9850.h b/hw/xfree86/i2c/tda9850.h
index d5dec36..b78719a 100644
--- a/hw/xfree86/i2c/tda9850.h
+++ b/hw/xfree86/i2c/tda9850.h
@@ -15,12 +15,18 @@ typedef struct {
 
 #define TDA9850_ADDR_1   0xB4
 
-TDA9850Ptr Detect_tda9850(I2CBusPtr b, I2CSlaveAddr addr);
-Bool tda9850_init(TDA9850Ptr t);
-void tda9850_setaudio(TDA9850Ptr t);
-void tda9850_mute(TDA9850Ptr t, Bool mute);
-void tda9850_sap_mute(TDA9850Ptr t, Bool sap_mute);
-CARD16 tda9850_getstatus(TDA9850Ptr t);
+#define xf86_Detect_tda9850	Detect_tda9850
+extern TDA9850Ptr Detect_tda9850(I2CBusPtr b, I2CSlaveAddr addr);
+#define xf86_tda9850_init	tda9850_init
+extern Bool tda9850_init(TDA9850Ptr t);
+#define xf86_tda9850_setaudio	tda9850_setaudio
+extern void tda9850_setaudio(TDA9850Ptr t);
+#define xf86_tda9850_mute	tda9850_mute
+extern void tda9850_mute(TDA9850Ptr t, Bool mute);
+#define xf86_tda9850_sap_mute	tda9850_sap_mute
+extern void tda9850_sap_mute(TDA9850Ptr t, Bool sap_mute);
+#define xf86_tda9850_getstatus	tda9850_getstatus
+extern CARD16 tda9850_getstatus(TDA9850Ptr t);
 
 #define TDA9850SymbolsList  \
 		"Detect_tda9850", \
@@ -29,11 +35,4 @@ CARD16 tda9850_getstatus(TDA9850Ptr t);
 		"tda9850_mute", \
 		"tda9850_sap_mute"
 
-#define xf86_Detect_tda9850       ((TDA9850Ptr (*)(I2CBusPtr, I2CSlaveAddr))LoaderSymbol("Detect_tda9850"))
-#define xf86_tda9850_init         ((Bool (*)(TDA9850Ptr))LoaderSymbol("tda9850_init"))
-#define xf86_tda9850_setaudio     ((void (*)(TDA9850Ptr))LoaderSymbol("tda9850_setaudio"))
-#define xf86_tda9850_mute         ((void (*)(TDA9850Ptr, Bool))LoaderSymbol("tda9850_mute"))
-#define xf86_tda9850_sap_mute     ((void (*)(TDA9850Ptr, Bool))LoaderSymbol("tda9850_sap_mute"))
-#define xf86_tda9850_getstatus    ((CARD16 (*)(TDA9850Ptr))LoaderSymbol("tda9850_getstatus"))
-
 #endif
diff --git a/hw/xfree86/i2c/tda9885.c b/hw/xfree86/i2c/tda9885.c
index 4147dfd..ad5aad1 100644
--- a/hw/xfree86/i2c/tda9885.c
+++ b/hw/xfree86/i2c/tda9885.c
@@ -8,7 +8,7 @@
 #include "i2c_def.h"
 
 
-TDA9885Ptr Detect_tda9885(I2CBusPtr b, I2CSlaveAddr addr)
+_X_EXPORT TDA9885Ptr Detect_tda9885(I2CBusPtr b, I2CSlaveAddr addr)
 {
   TDA9885Ptr t;
   I2CByte a;
@@ -51,13 +51,13 @@ TDA9885Ptr Detect_tda9885(I2CBusPtr b, I2CSlaveAddr addr)
   return t;  
 }
 
-Bool tda9885_init(TDA9885Ptr t)
+_X_EXPORT Bool tda9885_init(TDA9885Ptr t)
 {
   t->forced_mute_audio=1;
   return TRUE;
 }
 
-void tda9885_getstatus(TDA9885Ptr t)
+_X_EXPORT void tda9885_getstatus(TDA9885Ptr t)
 {
 CARD8 value;
 
@@ -69,7 +69,7 @@ t->vif_level=(value >>6) & 1;
 t->afc_win=(value >> 7)&1;
 }
 
-void tda9885_setparameters(TDA9885Ptr t)
+_X_EXPORT void tda9885_setparameters(TDA9885Ptr t)
 {
 CARD8 data[4];
 
@@ -95,7 +95,7 @@ I2C_WriteRead(&(t->d), data, 4, NULL, 0);
 xf86DrvMsg(t->d.pI2CBus->scrnIndex,X_INFO,"TDA9885 setparam: B data: %x, C data: %x, E data: %x\n", data[1], data[2], data[3]);
 }
 
-void tda9885_dumpstatus(TDA9885Ptr t)
+_X_EXPORT void tda9885_dumpstatus(TDA9885Ptr t)
 {
 xf86DrvMsg(t->d.pI2CBus->scrnIndex,X_INFO,"TDA9885 status: after_reset=%d afc_status=%d (%3.1f kHz off) fm_carrier=%d vif_level=%d afc_win=%d %s\n",
 		t->after_reset, t->afc_status, 
diff --git a/hw/xfree86/i2c/tda9885.h b/hw/xfree86/i2c/tda9885.h
index 46ae9fc..08176ba 100644
--- a/hw/xfree86/i2c/tda9885.h
+++ b/hw/xfree86/i2c/tda9885.h
@@ -39,11 +39,16 @@ typedef struct {
 #define TDA9885_ADDR_3   0x96
 #define TDA9885_ADDR_4   0x94
 
-TDA9885Ptr Detect_tda9885(I2CBusPtr b, I2CSlaveAddr addr);
-Bool tda9885_init(TDA9885Ptr t);
-void tda9885_setparameters(TDA9885Ptr t);
-void tda9885_getstatus(TDA9885Ptr t);
-void tda9885_dumpstatus(TDA9885Ptr t);
+#define xf86_Detect_tda9885		Detect_tda9885
+extern TDA9885Ptr Detect_tda9885(I2CBusPtr b, I2CSlaveAddr addr);
+#define xf86_tda9885_init		tda9885_init
+extern Bool tda9885_init(TDA9885Ptr t);
+#define xf86_tda9885_setparameters	tda9885_setparameters
+extern void tda9885_setparameters(TDA9885Ptr t);
+#define xf86_tda9885_getstatus		tda9885_getstatus
+extern void tda9885_getstatus(TDA9885Ptr t);
+#define xf86_tda9885_dumpstatus		tda9885_dumpstatus
+extern void tda9885_dumpstatus(TDA9885Ptr t);
 
 #define TDA9885SymbolsList  \
 		"Detect_tda9885", \
@@ -51,10 +56,4 @@ void tda9885_dumpstatus(TDA9885Ptr t);
 		"tda9885_setaudio", \
 		"tda9885_mute"
 
-#define xf86_Detect_tda9885       ((TDA9885Ptr (*)(I2CBusPtr, I2CSlaveAddr))LoaderSymbol("Detect_tda9885"))
-#define xf86_tda9885_init         ((Bool (*)(TDA9885Ptr))LoaderSymbol("tda9885_init"))
-#define xf86_tda9885_setparameters     ((void (*)(TDA9885Ptr))LoaderSymbol("tda9885_setparameters"))
-#define xf86_tda9885_getstatus    ((void (*)(TDA9885Ptr))LoaderSymbol("tda9885_getstatus"))
-#define xf86_tda9885_dumpstatus    ((void (*)(TDA9885Ptr))LoaderSymbol("tda9885_dumpstatus"))
-
 #endif
diff --git a/hw/xfree86/i2c/uda1380.c b/hw/xfree86/i2c/uda1380.c
index defda3c..deb4bc9 100644
--- a/hw/xfree86/i2c/uda1380.c
+++ b/hw/xfree86/i2c/uda1380.c
@@ -31,7 +31,7 @@
 #include "uda1380.h"
 #include "i2c_def.h"
 
-UDA1380Ptr Detect_uda1380(I2CBusPtr b, I2CSlaveAddr addr)
+_X_EXPORT UDA1380Ptr Detect_uda1380(I2CBusPtr b, I2CSlaveAddr addr)
 {
 	UDA1380Ptr t;
 	I2CByte a;
@@ -74,7 +74,7 @@ UDA1380Ptr Detect_uda1380(I2CBusPtr b, I2CSlaveAddr addr)
 	return t;  
 }
 
-Bool uda1380_init(UDA1380Ptr t)
+_X_EXPORT Bool uda1380_init(UDA1380Ptr t)
 {
 	CARD8 data[3];
 	CARD16 tmp;
@@ -109,7 +109,7 @@ Bool uda1380_init(UDA1380Ptr t)
 	return TRUE;
 }
 
-void uda1380_shutdown(UDA1380Ptr t)
+_X_EXPORT void uda1380_shutdown(UDA1380Ptr t)
 {
 	CARD8 data[3];
 	Bool ret;
@@ -123,7 +123,7 @@ void uda1380_shutdown(UDA1380Ptr t)
 		xf86DrvMsg(t->d.pI2CBus->scrnIndex,X_INFO,"UDA1380 failed to shutdown\n");
 }
 
-void uda1380_setvolume(UDA1380Ptr t, INT32 value)
+_X_EXPORT void uda1380_setvolume(UDA1380Ptr t, INT32 value)
 {
 	CARD8 data[3];
 	/*
@@ -143,7 +143,7 @@ void uda1380_setvolume(UDA1380Ptr t, INT32 value)
 		xf86DrvMsg(t->d.pI2CBus->scrnIndex,X_INFO,"UDA1380 failed to set volume\n");
 }
 
-void uda1380_mute(UDA1380Ptr t, Bool mute)
+_X_EXPORT void uda1380_mute(UDA1380Ptr t, Bool mute)
 {
 	CARD8 data[3];
 	Bool ret;
@@ -170,14 +170,14 @@ void uda1380_mute(UDA1380Ptr t, Bool mute)
 	}
 }
 
-void uda1380_getstatus(UDA1380Ptr t)
+_X_EXPORT void uda1380_getstatus(UDA1380Ptr t)
 {
 }
 
-void uda1380_setparameters(UDA1380Ptr t)
+_X_EXPORT void uda1380_setparameters(UDA1380Ptr t)
 {
 }
 
-void uda1380_dumpstatus(UDA1380Ptr t)
+_X_EXPORT void uda1380_dumpstatus(UDA1380Ptr t)
 {
 }
diff --git a/hw/xfree86/i2c/uda1380.h b/hw/xfree86/i2c/uda1380.h
index e671d66..825fccd 100644
--- a/hw/xfree86/i2c/uda1380.h
+++ b/hw/xfree86/i2c/uda1380.h
@@ -44,14 +44,22 @@ typedef struct {
 #define UDA1380_ADDR_1   0x30
 #define UDA1380_ADDR_2   0x34
 
-UDA1380Ptr Detect_uda1380(I2CBusPtr b, I2CSlaveAddr addr);
-Bool uda1380_init(UDA1380Ptr t);
-void uda1380_shutdown(UDA1380Ptr t);
-void uda1380_setvolume(UDA1380Ptr t, INT32);
-void uda1380_mute(UDA1380Ptr t, Bool);
-void uda1380_setparameters(UDA1380Ptr t);
-void uda1380_getstatus(UDA1380Ptr t);
-void uda1380_dumpstatus(UDA1380Ptr t);
+#define xf86_Detect_uda1380		Detect_uda1380
+extern UDA1380Ptr Detect_uda1380(I2CBusPtr b, I2CSlaveAddr addr);
+#define xf86_uda1380_init		uda1380_init
+extern Bool uda1380_init(UDA1380Ptr t);
+#define xf86_uda1380_shutdown		uda1380_shutdown
+extern void uda1380_shutdown(UDA1380Ptr t);
+#define xf86_uda1380_setvolume		uda1380_setvolume
+extern void uda1380_setvolume(UDA1380Ptr t, INT32);
+#define xf86_uda1380_mute		uda1380_mute
+extern void uda1380_mute(UDA1380Ptr t, Bool);
+#define xf86_uda1380_setparameters	uda1380_setparameters
+extern void uda1380_setparameters(UDA1380Ptr t);
+#define xf86_uda1380_getstatus		uda1380_getstatus
+extern void uda1380_getstatus(UDA1380Ptr t);
+#define xf86_uda1380_dumpstatus		uda1380_dumpstatus
+extern void uda1380_dumpstatus(UDA1380Ptr t);
 
 #define UDA1380SymbolsList  \
 		"Detect_uda1380", \
@@ -63,13 +71,4 @@ void uda1380_dumpstatus(UDA1380Ptr t);
 		"uda1380_getstatus", \
 		"uda1380_dumpstatus"
 
-#define xf86_Detect_uda1380       ((UDA1380Ptr (*)(I2CBusPtr, I2CSlaveAddr))LoaderSymbol("Detect_uda1380"))
-#define xf86_uda1380_init         ((Bool (*)(UDA1380Ptr))LoaderSymbol("uda1380_init"))
-#define xf86_uda1380_shutdown     ((void (*)(UDA1380Ptr))LoaderSymbol("uda1380_shutdown"))
-#define xf86_uda1380_setvolume         ((void (*)(UDA1380Ptr, CARD16))LoaderSymbol("uda1380_setvolume"))
-#define xf86_uda1380_mute         ((void (*)(UDA1380Ptr, Bool))LoaderSymbol("uda1380_mute"))
-#define xf86_uda1380_setparameters     ((void (*)(UDA1380Ptr))LoaderSymbol("uda1380_setparameters"))
-#define xf86_uda1380_getstatus    ((void (*)(UDA1380Ptr))LoaderSymbol("uda1380_getstatus"))
-#define xf86_uda1380_dumpstatus    ((void (*)(UDA1380Ptr))LoaderSymbol("uda1380_dumpstatus"))
-
 #endif
diff --git a/hw/xfree86/i2c/xf86i2c.c b/hw/xfree86/i2c/xf86i2c.c
index 59832d6..30b8f6f 100644
--- a/hw/xfree86/i2c/xf86i2c.c
+++ b/hw/xfree86/i2c/xf86i2c.c
@@ -358,7 +358,7 @@ I2CAddress(I2CDevPtr d, I2CSlaveAddr addr)
  * Don't expect a read- or write-only device will respond otherwise.
  */
 
-Bool
+_X_EXPORT Bool
 xf86I2CProbeAddress(I2CBusPtr b, I2CSlaveAddr addr)
 {
     int r;
@@ -439,7 +439,7 @@ I2CWriteRead(I2CDevPtr d,
 
 /* wrapper - for compatibility and convinience */
 
-Bool
+_X_EXPORT Bool
 xf86I2CWriteRead(I2CDevPtr d,
 		 I2CByte *WriteBuffer, int nWrite,
 		 I2CByte *ReadBuffer,  int nRead) 
@@ -595,7 +595,7 @@ xf86I2CWriteVec(I2CDevPtr d, I2CByte *vec, int nValues)
  * the least significant bit, indicating a read or write access, to zero.
  */
 
-I2CDevPtr
+_X_EXPORT I2CDevPtr
 xf86CreateI2CDevRec(void) 
 {
     return xcalloc(1, sizeof(I2CDevRec));
@@ -640,7 +640,7 @@ xf86DestroyI2CDevRec(I2CDevPtr d, Bool unalloc)
  * the bus-wide defaults. The function returns TRUE on success.
  */
 
-Bool
+_X_EXPORT Bool
 xf86I2CDevInit(I2CDevPtr d) 
 {
     I2CBusPtr b;
@@ -690,7 +690,7 @@ static I2CBusPtr I2CBusList;
  * with safe defaults.
  */
 
-I2CBusPtr
+_X_EXPORT I2CBusPtr
 xf86CreateI2CBusRec(void) 
 {
     I2CBusPtr b;
@@ -716,7 +716,7 @@ xf86CreateI2CBusRec(void)
  * first, passing down the <unalloc> option.
  */
 
-void
+_X_EXPORT void
 xf86DestroyI2CBusRec(I2CBusPtr b, Bool unalloc, Bool devs_too) 
 {
     if (b) {
@@ -763,7 +763,7 @@ xf86DestroyI2CBusRec(I2CBusPtr b, Bool unalloc, Bool devs_too)
  * At this point there won't be any traffic on the I2C bus.
  */
 
-Bool
+_X_EXPORT Bool
 xf86I2CBusInit(I2CBusPtr b) 
 {
     /* I2C buses must be identified by a unique scrnIndex 
diff --git a/hw/xfree86/i2c/xf86i2c.h b/hw/xfree86/i2c/xf86i2c.h
index 76d2ebf..a3413c9 100644
--- a/hw/xfree86/i2c/xf86i2c.h
+++ b/hw/xfree86/i2c/xf86i2c.h
@@ -49,9 +49,13 @@ typedef struct _I2CBusRec {
 		                   I2CByte *ReadBuffer,  int nRead);
 } I2CBusRec;
 
-I2CBusPtr 	xf86CreateI2CBusRec(void);
-void      	xf86DestroyI2CBusRec(I2CBusPtr pI2CBus, Bool unalloc, Bool devs_too);
-Bool      	xf86I2CBusInit(I2CBusPtr pI2CBus);
+#define CreateI2CBusRec		xf86CreateI2CBusRec
+extern I2CBusPtr xf86CreateI2CBusRec(void);
+#define DestroyI2CBusRec	xf86DestroyI2CBusRec
+extern void xf86DestroyI2CBusRec(I2CBusPtr pI2CBus, Bool unalloc, Bool devs_too);
+#define I2CBusInit		xf86I2CBusInit
+extern Bool xf86I2CBusInit(I2CBusPtr pI2CBus);
+
 I2CBusPtr 	xf86I2CFindBus(int scrnIndex, char *name);
 int		xf86I2CGetScreenBuses(int scrnIndex, I2CBusPtr **pppI2CBus);
 
@@ -72,17 +76,23 @@ typedef struct _I2CDevRec {
     DevUnion		DriverPrivate;
 } I2CDevRec;
 
-I2CDevPtr 	xf86CreateI2CDevRec(void);
+#define CreateI2CDevRec		xf86CreateI2CDevRec
+extern I2CDevPtr xf86CreateI2CDevRec(void);
 void      	xf86DestroyI2CDevRec(I2CDevPtr pI2CDev, Bool unalloc);
-Bool      	xf86I2CDevInit(I2CDevPtr pI2CDev);
+#define I2CDevInit		xf86I2CDevInit
+extern Bool	xf86I2CDevInit(I2CDevPtr pI2CDev);
 I2CDevPtr 	xf86I2CFindDev(I2CBusPtr, I2CSlaveAddr);
 
 /* See descriptions of these functions in xf86i2c.c */
 
-Bool	  	xf86I2CProbeAddress(I2CBusPtr pI2CBus, I2CSlaveAddr);
-Bool 		xf86I2CWriteRead(I2CDevPtr d, I2CByte *WriteBuffer, int nWrite,
+#define I2CProbeAddress		xf86I2CProbeAddress
+extern Bool	xf86I2CProbeAddress(I2CBusPtr pI2CBus, I2CSlaveAddr);
+
+#define		I2C_WriteRead xf86I2CWriteRead
+extern Bool	xf86I2CWriteRead(I2CDevPtr d, I2CByte *WriteBuffer, int nWrite,
 		                   I2CByte *ReadBuffer,  int nRead);
 #define 	xf86I2CRead(d, rb, nr) xf86I2CWriteRead(d, NULL, 0, rb, nr)
+
 Bool 		xf86I2CReadStatus(I2CDevPtr d, I2CByte *pbyte);
 Bool 		xf86I2CReadByte(I2CDevPtr d, I2CByte subaddr, I2CByte *pbyte);
 Bool 		xf86I2CReadBytes(I2CDevPtr d, I2CByte subaddr, I2CByte *pbyte, int n);


More information about the xorg-commit mailing list