Fixing memset on ia64 & other archs
authorDave Airlie <airliedfreedesktop.org>
Sat, 5 Mar 2005 06:38:59 +0000 (06:38 +0000)
committerDave Airlie <airliedfreedesktop.org>
Sat, 5 Mar 2005 06:38:59 +0000 (06:38 +0000)
From: Stephane Marchesin

src/mesa/drivers/dri/common/memops.h [new file with mode: 0644]
src/mesa/drivers/dri/mga/server/mga_dri.c
src/mesa/drivers/dri/r128/server/r128_dri.c
src/mesa/drivers/dri/radeon/server/radeon_dri.c

diff --git a/src/mesa/drivers/dri/common/memops.h b/src/mesa/drivers/dri/common/memops.h
new file mode 100644 (file)
index 0000000..4952d78
--- /dev/null
@@ -0,0 +1,17 @@
+#ifndef DRIMEMSETIO_H
+#define DRIMEMSETIO_H
+/*
+* memset an area in I/O space
+* We need to be careful about this on some archs
+*/
+static __inline__ void drimemsetio(void* address, int c, int size)
+{
+#if defined(__powerpc__) || defined(__ia64__)
+     int i;
+     for(i=0;i<size;i++)
+        *((char *)address + i)=c;
+#else
+     memset(address,c,size);
+#endif
+}
+#endif
index 958252b3e474fe7d66a93966371dcb932e73b20e..35e28fec4b187dda0e64f3af45e142f2a892a815 100644 (file)
@@ -36,6 +36,7 @@
 
 #include "driver.h"
 #include "drm.h"
+#include "memops.h"
 
 #include "mga_reg.h"
 #include "mga.h"
@@ -805,11 +806,11 @@ static int MGAScreenInit( struct DRIDriverContextRec *ctx, MGAPtr pMga )
     * the clear ioctl to do this, but would need to setup hw state
     * first.
     */
-   memset((char *)ctx->FBAddress + pMga->frontOffset,
+   drimemsetio((char *)ctx->FBAddress + pMga->frontOffset,
          0,
          pMga->frontPitch * ctx->shared.virtualHeight );
 
-   memset((char *)ctx->FBAddress + pMga->backOffset,
+   drimemsetio((char *)ctx->FBAddress + pMga->backOffset,
          0,
          pMga->backPitch * ctx->shared.virtualHeight );
 
index a2b717b0ea3781e2cd89406c657f011037f56ce3..4cc3c23098fd2310b6123cd5a720ae209cdf5b65 100644 (file)
@@ -47,6 +47,7 @@
 
 #include "driver.h"
 #include "drm.h"
+#include "memops.h"
 
 #include "r128.h"
 #include "r128_dri.h"
@@ -826,11 +827,11 @@ static GLboolean R128DRIScreenInit(DRIDriverContext *ctx)
     * the clear ioctl to do this, but would need to setup hw state
     * first.
     */
-   memset((char *)ctx->FBAddress + info->frontOffset,
+   drimemsetio((char *)ctx->FBAddress + info->frontOffset,
          0,
          info->frontPitch * ctx->cpp * ctx->shared.virtualHeight );
 
-   memset((char *)ctx->FBAddress + info->backOffset,
+   drimemsetio((char *)ctx->FBAddress + info->backOffset,
          0,
          info->backPitch * ctx->cpp * ctx->shared.virtualHeight );
     
index e4972216437536792b8544d29befa131a6ba1edf..78ae30beb22cc37896440b567d5c8f64b1ce38a5 100644 (file)
@@ -16,6 +16,7 @@
 
 #include "driver.h"
 #include "drm.h"
+#include "memops.h"
 
 #include "radeon.h"
 #include "radeon_dri.h"
@@ -981,11 +982,11 @@ static int RADEONScreenInit( DRIDriverContext *ctx, RADEONInfoPtr info )
     * the clear ioctl to do this, but would need to setup hw state
     * first.
     */
-   memset((char *)ctx->FBAddress + info->frontOffset,
+   drimemsetio((char *)ctx->FBAddress + info->frontOffset,
          0,
          info->frontPitch * ctx->cpp * ctx->shared.virtualHeight );
 
-   memset((char *)ctx->FBAddress + info->backOffset,
+   drimemsetio((char *)ctx->FBAddress + info->backOffset,
          0,
          info->backPitch * ctx->cpp * ctx->shared.virtualHeight );