Fix for lemote.
--- libdrm-2.4.20.orig/xf86drm.h	2010-03-06 00:21:13.000000000 +0100
+++ libdrm-2.4.20/xf86drm.h	2010-06-12 20:43:01.324916826 +0200
@@ -374,6 +374,29 @@ typedef struct _drmSetVersion {
 		: "memory");			\
 	} while (0)
 
+#elif defined(__mips__)
+
+#define DRM_CAS(lock, old, new, ret)            \
+	do {                                    \
+		__asm__ __volatile__(           \
+		"	.set mips3;.set noreorder;\n" \
+		"	sync; \n"               \
+		"	ll   %1, %0;\n"         \
+		"	bne  %1, %2, 1f;\n"     \
+		"	 li   %1, 1; \n"        \
+		"	move %1, %3; \n"        \
+		"	sc    %1, %0;\n"        \
+		"	xori   %1, %1, 1\n"     \
+		"1:	\n"                     \
+		"	.set mips0; .set reorder;\n" \
+		: "=m" (__drm_dummy_lock(lock)),\
+		  "=&r" (ret)                   \
+		: "r" (old),                    \
+		  "r" (new)                     \
+		: "memory","$8"                 \
+		);                              \
+	} while(0)
+
 #elif defined(__sparc__)
 
 #define DRM_CAS(lock,old,new,__ret)				\
@@ -457,7 +480,7 @@ do {	register unsigned int __old __asm("
 
 #if defined(__alpha__)
 #define DRM_CAS_RESULT(_result)		long _result
-#elif defined(__powerpc__)
+#elif defined(__powerpc__) || defined(__mips__)
 #define DRM_CAS_RESULT(_result)		int _result
 #else
 #define DRM_CAS_RESULT(_result)		char _result