diff options
author | Lars-Peter Clausen <lars@metafoo.de> | 2009-07-05 13:03:14 +0200 |
---|---|---|
committer | Lars-Peter Clausen <lars@metafoo.de> | 2009-07-05 13:03:14 +0200 |
commit | 74b16fcdba85a6f851ffe2ecb63a0f16235285a0 (patch) | |
tree | 700cbedd856f286ae8668ff3b6b57a295af64af9 /src/glamo-engine.c | |
parent | 69ccc9307c6b6a1aeb1f51ea732af20d52a66685 (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.c | 27 |
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 |