[pkg-fso-commits] [SCM] xf86-video-glamo, SMedia Glamo video driver for X.Org branch, master, updated. upstream/0.0.0+20090707.git98c012f7-57-g9918e08

Thomas White taw at bitwiz.org.uk
Fri Jan 8 13:25:06 UTC 2010


The following commit has been merged in the master branch:
commit 6e7ff8981f0a5e8cf558dc95fdda85dc669cd7af
Author: Thomas White <taw at bitwiz.org.uk>
Date:   Sat Sep 19 13:57:37 2009 +0100

    Split DRM command queue handling out to a separate file

diff --git a/src/Makefile.am b/src/Makefile.am
index 374be96..a1e8d0a 100644
--- a/src/Makefile.am
+++ b/src/Makefile.am
@@ -40,4 +40,5 @@ glamo_drv_la_SOURCES = \
          glamo-kms-crtc.c \
          glamo-kms-output.c \
          glamo-dri2.c \
-         glamo-kms-exa.c
+         glamo-kms-exa.c \
+         glamo-drm.c
diff --git a/src/glamo-drm.c b/src/glamo-drm.c
new file mode 100644
index 0000000..aac93bb
--- /dev/null
+++ b/src/glamo-drm.c
@@ -0,0 +1,107 @@
+/*
+ * DRI for the SMedia Glamo3362 X.org Driver
+ *
+ * Copyright 2009 Thomas White <taw at bitwiz.org.uk>
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License as
+ * published by the Free Software Foundation; either version 2 of
+ * the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston,
+ * MA 02111-1307 USA
+ *
+ */
+
+
+#ifdef HAVE_CONFIG_H
+#include "config.h"
+#endif
+
+#include <xf86.h>
+#include <xf86drm.h>
+#include <glamo_drm.h>
+#include <glamo_bo.h>
+
+#include "glamo.h"
+
+
+/* Submit the prepared command sequence to the kernel */
+void GlamoDRMDispatch(GlamoPtr pGlamo)
+{
+	drm_glamo_cmd_buffer_t cmdbuf;
+	int r;
+
+	cmdbuf.buf = (char *)pGlamo->cmdq_drm;
+	cmdbuf.bufsz = pGlamo->cmdq_drm_used * 2;	/* -> bytes */
+	cmdbuf.nobjs = pGlamo->cmdq_obj_used;
+	cmdbuf.objs = pGlamo->cmdq_objs;
+	cmdbuf.obj_pos = pGlamo->cmdq_obj_pos;
+
+	r = drmCommandWrite(pGlamo->drm_fd, DRM_GLAMO_CMDBUF,
+	                    &cmdbuf, sizeof(cmdbuf));
+	if ( r != 0 ) {
+		xf86DrvMsg(pGlamo->pScreen->myNum, X_ERROR,
+		           "DRM_GLAMO_CMDBUF failed\n");
+	}
+
+	/* Reset counts to zero for the next sequence */
+	pGlamo->cmdq_obj_used = 0;
+	pGlamo->cmdq_drm_used = 0;
+}
+
+
+void GlamoDRMAddCommand(GlamoPtr pGlamo, uint16_t reg, uint16_t val)
+{
+	if ( pGlamo->cmdq_drm_used == pGlamo->cmdq_drm_size ) {
+		xf86DrvMsg(pGlamo->pScreen->myNum, X_INFO,
+		           "Forced command cache flush.\n");
+		GlamoDRMDispatch(pGlamo);
+	}
+
+	/* Record command */
+	pGlamo->cmdq_drm[pGlamo->cmdq_drm_used++] = reg;
+	pGlamo->cmdq_drm[pGlamo->cmdq_drm_used++] = val;
+}
+
+
+void GlamoDRMAddCommandBO(GlamoPtr pGlamo, uint16_t reg, struct glamo_bo *bo)
+{
+	if ( pGlamo->cmdq_drm_used == pGlamo->cmdq_drm_size ) {
+		xf86DrvMsg(pGlamo->pScreen->myNum, X_INFO,
+		           "Forced command cache flush.\n");
+		GlamoDRMDispatch(pGlamo);
+	}
+
+	/* Record object position */
+	pGlamo->cmdq_objs[pGlamo->cmdq_obj_used] = bo->handle;
+	/* -> bytes */
+	pGlamo->cmdq_obj_pos[pGlamo->cmdq_obj_used] = pGlamo->cmdq_drm_used * 2;
+	pGlamo->cmdq_obj_used++;
+
+	/* Record command */
+	pGlamo->cmdq_drm[pGlamo->cmdq_drm_used++] = reg;
+	pGlamo->cmdq_drm[pGlamo->cmdq_drm_used++] = 0x0000;
+	pGlamo->cmdq_drm[pGlamo->cmdq_drm_used++] = reg+2;
+	pGlamo->cmdq_drm[pGlamo->cmdq_drm_used++] = 0x0000;
+
+	pGlamo->last_buffer_object = bo;
+}
+
+
+void GlamoDRMInit(GlamoPtr pGlamo)
+{
+	pGlamo->cmdq_objs = malloc(1024);
+	pGlamo->cmdq_obj_pos = malloc(1024);
+	pGlamo->cmdq_obj_used = 0;
+	pGlamo->cmdq_drm_used = 0;
+	pGlamo->cmdq_drm_size = 4 * 1024;
+	pGlamo->cmdq_drm = malloc(pGlamo->cmdq_drm_size);
+}
diff --git a/src/glamo-dri2.h b/src/glamo-drm.h
similarity index 66%
copy from src/glamo-dri2.h
copy to src/glamo-drm.h
index 5834410..6e0693f 100644
--- a/src/glamo-dri2.h
+++ b/src/glamo-drm.h
@@ -20,7 +20,19 @@
  *
  */
 
-#include "xf86.h"
 
-extern void driScreenInit(ScreenPtr pScreen);
-extern void driCloseScreen(ScreenPtr pScreen);
+#ifndef _GLAMO_DRM_H
+#define _GLAMO_DRM_H
+
+#include <stdint.h>
+#include <glamo_bo.h>
+
+#include "glamo.h"
+
+extern void GlamoDRMInit(GlamoPtr pGlamo);
+extern void GlamoDRMDispatch(GlamoPtr pGlamo);
+extern void GlamoDRMAddCommand(GlamoPtr pGlamo, uint16_t reg, uint16_t val);
+extern void GlamoDRMAddCommandBO(GlamoPtr pGlamo, uint16_t reg,
+                                 struct glamo_bo *bo);
+
+#endif /* _GLAMO_DRM_H */
diff --git a/src/glamo-kms-exa.c b/src/glamo-kms-exa.c
index 557ba60..ec116ab 100644
--- a/src/glamo-kms-exa.c
+++ b/src/glamo-kms-exa.c
@@ -55,6 +55,7 @@
 #include "glamo.h"
 #include "glamo-regs.h"
 #include "glamo-kms-exa.h"
+#include "glamo-drm.h"
 
 #include <drm/glamo_drm.h>
 #include <drm/glamo_bo.h>
@@ -114,71 +115,6 @@ static const CARD8 GLAMOBltRop[16] = {
 };
 
 
-/* Submit the prepared command sequence to the kernel */
-static void GlamoDRMDispatch(GlamoPtr pGlamo)
-{
-	drm_glamo_cmd_buffer_t cmdbuf;
-	int r;
-
-	cmdbuf.buf = (char *)pGlamo->cmdq_drm;
-	cmdbuf.bufsz = pGlamo->cmdq_drm_used * 2;	/* -> bytes */
-	cmdbuf.nobjs = pGlamo->cmdq_obj_used;
-	cmdbuf.objs = pGlamo->cmdq_objs;
-	cmdbuf.obj_pos = pGlamo->cmdq_obj_pos;
-
-	r = drmCommandWrite(pGlamo->drm_fd, DRM_GLAMO_CMDBUF,
-	                    &cmdbuf, sizeof(cmdbuf));
-	if ( r != 0 ) {
-		xf86DrvMsg(pGlamo->pScreen->myNum, X_ERROR,
-		           "DRM_GLAMO_CMDBUF failed\n");
-	}
-
-	/* Reset counts to zero for the next sequence */
-	pGlamo->cmdq_obj_used = 0;
-	pGlamo->cmdq_drm_used = 0;
-}
-
-
-static inline void GlamoDRMAddCommand(GlamoPtr pGlamo, uint16_t reg,
-                                      uint16_t val)
-{
-	if ( pGlamo->cmdq_drm_used == pGlamo->cmdq_drm_size ) {
-		xf86DrvMsg(pGlamo->pScreen->myNum, X_INFO,
-		           "Forced command cache flush.\n");
-		GlamoDRMDispatch(pGlamo);
-	}
-
-	/* Record command */
-	pGlamo->cmdq_drm[pGlamo->cmdq_drm_used++] = reg;
-	pGlamo->cmdq_drm[pGlamo->cmdq_drm_used++] = val;
-}
-
-
-static inline void GlamoDRMAddCommandBO(GlamoPtr pGlamo, uint16_t reg,
-                                        struct glamo_bo *bo)
-{
-	if ( pGlamo->cmdq_drm_used == pGlamo->cmdq_drm_size ) {
-		xf86DrvMsg(pGlamo->pScreen->myNum, X_INFO,
-		           "Forced command cache flush.\n");
-		GlamoDRMDispatch(pGlamo);
-	}
-
-	/* Record object position */
-	pGlamo->cmdq_objs[pGlamo->cmdq_obj_used] = bo->handle;
-	/* -> bytes */
-	pGlamo->cmdq_obj_pos[pGlamo->cmdq_obj_used] = pGlamo->cmdq_drm_used * 2;
-	pGlamo->cmdq_obj_used++;
-
-	/* Record command */
-	pGlamo->cmdq_drm[pGlamo->cmdq_drm_used++] = reg;
-	pGlamo->cmdq_drm[pGlamo->cmdq_drm_used++] = 0x0000;
-	pGlamo->cmdq_drm[pGlamo->cmdq_drm_used++] = reg+2;
-	pGlamo->cmdq_drm[pGlamo->cmdq_drm_used++] = 0x0000;
-
-	pGlamo->last_buffer_object = bo;
-}
-
-
 unsigned int driGetPixmapHandle(PixmapPtr pPixmap, unsigned int *flags)
 {
 	struct glamo_exa_pixmap_priv *priv;
@@ -262,8 +198,9 @@ static Bool GlamoKMSExaPrepareCopy(PixmapPtr pSrc, PixmapPtr pDst, int dx, int d
 	priv_dst = exaGetPixmapDriverPrivate(pDst);
 
 	if (pSrc->drawable.bitsPerPixel != 16 ||
-	    pDst->drawable.bitsPerPixel != 16)
+	    pDst->drawable.bitsPerPixel != 16) {
 		GLAMO_FALLBACK(("Only 16bpp is supported"));
+	}
 
 	mask = FbFullMask(16);
 	if ((pm & mask) != mask) {
@@ -440,6 +377,9 @@ static Bool GlamoKMSExaPrepareAccess(PixmapPtr pPix, int index)
 		return TRUE;
 	}
 
+	xf86DrvMsg(pScrn->scrnIndex, X_INFO, "PrepareAccess (%i)\n",
+	          driver_priv->bo->handle);
+
 	/* Return as quickly as possible if we have a mapping already */
 	if ( driver_priv->bo->virtual ) {
 		pPix->devPrivate.ptr = driver_priv->bo->virtual;
@@ -619,12 +559,7 @@ void GlamoKMSExaInit(ScrnInfoPtr pScrn)
 	exa->WaitMarker = GlamoKMSExaWaitMarker;
 
 	/* Prepare temporary buffers */
-	pGlamo->cmdq_objs = malloc(1024);
-	pGlamo->cmdq_obj_pos = malloc(1024);
-	pGlamo->cmdq_obj_used = 0;
-	pGlamo->cmdq_drm_used = 0;
-	pGlamo->cmdq_drm_size = 4 * 1024;
-	pGlamo->cmdq_drm = malloc(pGlamo->cmdq_drm_size);
+	GlamoDRMInit(pGlamo);
 	pGlamo->last_buffer_object = NULL;
 	for ( i=0; i<NUM_EXA_BUFFER_MARKERS; i++ ) {
 		pGlamo->exa_buffer_markers[i] = NULL;

-- 
xf86-video-glamo, SMedia Glamo video driver for X.Org



More information about the pkg-fso-commits mailing list