summaryrefslogtreecommitdiff
path: root/src/atixv.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/atixv.c')
-rw-r--r--src/atixv.c119
1 files changed, 116 insertions, 3 deletions
diff --git a/src/atixv.c b/src/atixv.c
index b15aa53..417373a 100644
--- a/src/atixv.c
+++ b/src/atixv.c
@@ -1,4 +1,4 @@
-/* $XFree86: xc/programs/Xserver/hw/xfree86/drivers/ati/atixv.c,v 1.3 2003/01/01 19:16:35 tsi Exp $ */
+/* $XFree86: xc/programs/Xserver/hw/xfree86/drivers/ati/atixv.c,v 1.5 2003/04/25 04:09:54 tsi Exp $ */
/*
* Copyright 2001 through 2003 by Marc Aurele La France (TSI @ UQV), tsi@xfree86.org
*
@@ -21,10 +21,93 @@
* PERFORMANCE OF THIS SOFTWARE.
*/
+#include "atiadapter.h"
+#include "atimach64xv.h"
#include "atistruct.h"
#include "atixv.h"
-#include "xf86xv.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 --
@@ -41,6 +124,7 @@ ATIInitializeXVideo
{
XF86VideoAdaptorPtr *ppAdaptor;
int nAdaptor;
+ Bool result;
if (!(pScreenInfo->memPhysBase = pATI->LinearBase))
return FALSE;
@@ -48,5 +132,34 @@ ATIInitializeXVideo
pScreenInfo->fbOffset = 0;
nAdaptor = xf86XVListGenericAdaptors(pScreenInfo, &ppAdaptor);
- return xf86XVScreenInit(pScreen, ppAdaptor, nAdaptor);
+ 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;
+ }
}