summaryrefslogtreecommitdiff
path: root/src/glamo-engine.c
diff options
context:
space:
mode:
authorLars-Peter Clausen <lars@metafoo.de>2009-07-05 13:03:14 +0200
committerLars-Peter Clausen <lars@metafoo.de>2009-07-05 13:03:14 +0200
commit74b16fcdba85a6f851ffe2ecb63a0f16235285a0 (patch)
tree700cbedd856f286ae8668ff3b6b57a295af64af9 /src/glamo-engine.c
parent69ccc9307c6b6a1aeb1f51ea732af20d52a66685 (diff)
Implement support for engine ioctls. The glamo Xorg driver should only touch
cmdq or 2d registers, so we enable/disable engines through framebuffer ioctls. This needs support from the kernel side.
Diffstat (limited to 'src/glamo-engine.c')
-rw-r--r--src/glamo-engine.c27
1 files changed, 27 insertions, 0 deletions
diff --git a/src/glamo-engine.c b/src/glamo-engine.c
index 81e68a1..6bb4da5 100644
--- a/src/glamo-engine.c
+++ b/src/glamo-engine.c
@@ -26,9 +26,21 @@
#include "glamo-engine.h"
#include "glamo-regs.h"
+#ifdef HAS_ENGINE_IOCTLS
+# include <linux/types.h>
+# include <sys/ioctl.h>
+# include <errno.h>
+#endif
+
void
GLAMOEngineReset(GlamoPtr pGlamo, enum GLAMOEngine engine)
{
+#ifdef HAS_ENGINE_IOCTLS
+ if (ioctl(pGlamo->fb_fd, GLAMOFB_ENGINE_RESET, (void*)((__u32)engine)) == -1)
+ xf86DrvMsg(xf86Screens[pGlamo->pScreen->myNum]->scrnIndex, X_ERROR,
+ "Framebuffer ioctl GLAMOFB_ENGINE_RESET failed: %s\n",
+ strerror(errno));
+#else
CARD32 reg;
CARD16 mask;
volatile char *mmio = pGlamo->reg_base;
@@ -57,11 +69,18 @@ GLAMOEngineReset(GlamoPtr pGlamo, enum GLAMOEngine engine)
sleep(1);
MMIOSetBitMask(mmio, reg, mask, 0);
sleep(1);
+#endif
}
void
GLAMOEngineDisable(GlamoPtr pGlamo, enum GLAMOEngine engine)
{
+#ifdef HAS_ENGINE_IOCTLS
+ if (ioctl(pGlamo->fb_fd, GLAMOFB_ENGINE_DISABLE, (void*)((__u32)engine)) == -1)
+ xf86DrvMsg(xf86Screens[pGlamo->pScreen->myNum]->scrnIndex, X_ERROR,
+ "Framebuffer ioctl GLAMOFB_ENGINE_DISABLE failed: %s\n",
+ strerror(errno));
+#else
volatile char *mmio = pGlamo->reg_base;
if (!mmio)
@@ -108,11 +127,18 @@ GLAMOEngineDisable(GlamoPtr pGlamo, enum GLAMOEngine engine)
default:
break;
}
+#endif
}
void
GLAMOEngineEnable(GlamoPtr pGlamo, enum GLAMOEngine engine)
{
+#ifdef HAS_ENGINE_IOCTLS
+ if (ioctl(pGlamo->fb_fd, GLAMOFB_ENGINE_ENABLE, (void*)((__u32)engine)) == -1)
+ xf86DrvMsg(xf86Screens[pGlamo->pScreen->myNum]->scrnIndex, X_ERROR,
+ "Framebuffer ioctl GLAMOFB_ENGINE_ENABLE failed: %s\n",
+ strerror(errno));
+#else
volatile char *mmio = pGlamo->reg_base;
if (!mmio)
@@ -162,6 +188,7 @@ GLAMOEngineEnable(GlamoPtr pGlamo, enum GLAMOEngine engine)
default:
break;
}
+#endif
}
bool