diff options
author | Kaleb S. Keithley <kaleb@x.org> | 2003-11-14 15:54:49 +0000 |
---|---|---|
committer | Kaleb S. Keithley <kaleb@x.org> | 2003-11-14 15:54:49 +0000 |
commit | 115ceb9ccc660207a6178aa1381ca650e69c3e21 (patch) | |
tree | 228ca3c4bc4a763a6d7a842b157cc9c1810e4643 /src/atixv.c |
R6.6 is the Xorg base-lineXORG-MAIN
Diffstat (limited to 'src/atixv.c')
-rw-r--r-- | src/atixv.c | 165 |
1 files changed, 165 insertions, 0 deletions
diff --git a/src/atixv.c b/src/atixv.c new file mode 100644 index 0000000..10dce23 --- /dev/null +++ b/src/atixv.c @@ -0,0 +1,165 @@ +/* $XFree86: xc/programs/Xserver/hw/xfree86/drivers/ati/atixv.c,v 1.5 2003/04/25 04:09:54 tsi Exp $ */ +/* + * Copyright 2001 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. + */ + +#include "atiadapter.h" +#include "atimach64xv.h" +#include "atistruct.h" +#include "atixv.h" + +/* + * ATIXVFreeAdaptorInfo -- + * + * Free XVideo adaptor information. + */ +static void +ATIXVFreeAdaptorInfo +( + XF86VideoAdaptorPtr *ppAdaptor, + int nAdaptor +) +{ + if (!ppAdaptor) + return; + + while (nAdaptor > 0) + xfree(ppAdaptor[--nAdaptor]); + + xfree(ppAdaptor); +} + +/* + * ATIXVInitializeAdaptor -- + * + * This is called by the server's XVideo support layer to initialise an XVideo + * adapter. + */ +static int +ATIXVInitializeAdaptor +( + ScrnInfoPtr pScreenInfo, + XF86VideoAdaptorPtr **pppAdaptor +) +{ + ScreenPtr pScreen = screenInfo.screens[pScreenInfo->scrnIndex]; + ATIPtr pATI = ATIPTR(pScreenInfo); + XF86VideoAdaptorPtr *ppAdaptor = NULL; + int nAdaptor; + + switch (pATI->Adapter) + { + case ATI_ADAPTER_MACH64: + nAdaptor = ATIMach64XVInitialiseAdaptor(pScreen, pScreenInfo, pATI, + &ppAdaptor); + break; + + default: + nAdaptor = 0; + break; + } + + if (pppAdaptor) + *pppAdaptor = ppAdaptor; + else + ATIXVFreeAdaptorInfo(ppAdaptor, nAdaptor); + + return nAdaptor; +} + +/* + * ATIXVPreInit -- + * + * This function is called by ATIPreInit() to set up the environment required + * to support the XVideo extension. + */ +void +ATIXVPreInit +( + ATIPtr pATI +) +{ + +#ifndef AVOID_CPIO + + /* Currently a linear aperture is needed ... */ + if (!pATI->LinearBase) + return; + +#endif /* AVOID_CPIO */ + + (void)xf86XVRegisterGenericAdaptorDriver(ATIXVInitializeAdaptor); +} + +/* + * ATIInitializeXVideo -- + * + * This function is called to initialise XVideo extension support on a screen. + */ +Bool +ATIInitializeXVideo +( + ScreenPtr pScreen, + ScrnInfoPtr pScreenInfo, + ATIPtr pATI +) +{ + XF86VideoAdaptorPtr *ppAdaptor; + int nAdaptor; + Bool result; + + if (!(pScreenInfo->memPhysBase = pATI->LinearBase)) + return FALSE; + + pScreenInfo->fbOffset = 0; + + nAdaptor = xf86XVListGenericAdaptors(pScreenInfo, &ppAdaptor); + result = xf86XVScreenInit(pScreen, ppAdaptor, nAdaptor); + + ATIXVFreeAdaptorInfo(ppAdaptor, nAdaptor); + + return result; +} + +/* + * ATICloseXVideo -- + * + * This function is called during screen termination to clean up after XVideo + * initialisation. + */ +void +ATICloseXVideo +( + ScreenPtr pScreen, + ScrnInfoPtr pScreenInfo, + ATIPtr pATI +) +{ + switch (pATI->Adapter) + { + case ATI_ADAPTER_MACH64: + ATIMach64CloseXVideo(pScreen, pScreenInfo, pATI); + break; + + default: + break; + } +} |