diff options
Diffstat (limited to 'src/atimisc.c')
-rw-r--r-- | src/atimisc.c | 149 |
1 files changed, 149 insertions, 0 deletions
diff --git a/src/atimisc.c b/src/atimisc.c new file mode 100644 index 0000000..de118c0 --- /dev/null +++ b/src/atimisc.c @@ -0,0 +1,149 @@ +/* $XFree86: xc/programs/Xserver/hw/xfree86/drivers/ati/atimisc.c,v 1.8tsi Exp $ */ +/* + * 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. + * + * 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" + +/* Module loader interface for subsidiary driver module */ + +static XF86ModuleVersionInfo ATIVersionRec = +{ + "atimisc", + MODULEVENDORSTRING, + MODINFOSTRING1, + MODINFOSTRING2, + XORG_VERSION_CURRENT, + ATI_VERSION_MAJOR, ATI_VERSION_MINOR, ATI_VERSION_PATCH, + ABI_CLASS_VIDEODRV, + ABI_VIDEODRV_VERSION, + MOD_CLASS_VIDEODRV, + {0, 0, 0, 0} +}; + +/* + * ATISetup -- + * + * This function is called every time the module is loaded. + */ +static pointer +ATISetup +( + pointer Module, + pointer Options, + int *ErrorMajor, + int *ErrorMinor +) +{ + static Bool Inited = FALSE; + + 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, + +#ifndef AVOID_CPIO + + ATIxf1bppSymbols, + ATIxf4bppSymbols, + +#endif /* AVOID_CPIO */ + +#ifdef XF86DRI_DEVEL + + ATIdrmSymbols, + ATIdriSymbols, + +#endif /* XF86DRI_DEVEL */ + + ATIfbSymbols, + ATIshadowfbSymbols, + ATIxaaSymbols, + ATIramdacSymbols, + ATIi2cSymbols, + NULL); + + Inited = TRUE; + } + + return (pointer)TRUE; +} + +/* The following record must be called atimiscModuleData */ +_X_EXPORT XF86ModuleData atimiscModuleData = +{ + &ATIVersionRec, + ATISetup, + NULL +}; + +#endif /* XFree86LOADER */ |