From 74b16fcdba85a6f851ffe2ecb63a0f16235285a0 Mon Sep 17 00:00:00 2001 From: Lars-Peter Clausen Date: Sun, 5 Jul 2009 13:03:14 +0200 Subject: 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. --- src/glamo-engine.c | 27 +++++++++++++++++++++++++++ 1 file changed, 27 insertions(+) (limited to 'src/glamo-engine.c') 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 +# include +# include +#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 -- cgit v1.2.3