[PATCH] xfree86: Add Loongson MIPS support

Matt Kraai kraai at ftbfs.org
Fri Oct 14 05:10:42 PDT 2011


Change IOPortBase to ioBase and set it properly on MIPS systems.

Fixes: https://bugs.freedesktop.org/show_bug.cgi?id=41038
Signed-off-by: Matt Kraai <kraai at ftbfs.org>
---
 hw/xfree86/common/compiler.h            |   14 +++++++-------
 hw/xfree86/os-support/bsd/arm_video.c   |   20 ++++++++++----------
 hw/xfree86/os-support/linux/lnx_video.c |    9 +++++++--
 3 files changed, 24 insertions(+), 19 deletions(-)

diff --git a/hw/xfree86/common/compiler.h b/hw/xfree86/common/compiler.h
index 9e00d75..61af0c4 100644
--- a/hw/xfree86/common/compiler.h
+++ b/hw/xfree86/common/compiler.h
@@ -714,42 +714,42 @@ xf86WriteMmio32LeNB(__volatile__ void *base, const unsigned long offset,
 #     define PORT_SIZE short
 #    endif
 
-_X_EXPORT unsigned int IOPortBase;  /* Memory mapped I/O port area */
+_X_EXPORT unsigned char *ioBase;
 
 static __inline__ void
 outb(unsigned PORT_SIZE port, unsigned char val)
 {
-	*(volatile unsigned char*)(((unsigned PORT_SIZE)(port))+IOPortBase) = val;
+	*(volatile unsigned char*)(((unsigned PORT_SIZE)(port))+ioBase) = val;
 }
 
 static __inline__ void
 outw(unsigned PORT_SIZE port, unsigned short val)
 {
-	*(volatile unsigned short*)(((unsigned PORT_SIZE)(port))+IOPortBase) = val;
+	*(volatile unsigned short*)(((unsigned PORT_SIZE)(port))+ioBase) = val;
 }
 
 static __inline__ void
 outl(unsigned PORT_SIZE port, unsigned int val)
 {
-	*(volatile unsigned int*)(((unsigned PORT_SIZE)(port))+IOPortBase) = val;
+	*(volatile unsigned int*)(((unsigned PORT_SIZE)(port))+ioBase) = val;
 }
 
 static __inline__ unsigned int
 inb(unsigned PORT_SIZE port)
 {
-	return *(volatile unsigned char*)(((unsigned PORT_SIZE)(port))+IOPortBase);
+	return *(volatile unsigned char*)(((unsigned PORT_SIZE)(port))+ioBase);
 }
 
 static __inline__ unsigned int
 inw(unsigned PORT_SIZE port)
 {
-	return *(volatile unsigned short*)(((unsigned PORT_SIZE)(port))+IOPortBase);
+	return *(volatile unsigned short*)(((unsigned PORT_SIZE)(port))+ioBase);
 }
 
 static __inline__ unsigned int
 inl(unsigned PORT_SIZE port)
 {
-	return *(volatile unsigned int*)(((unsigned PORT_SIZE)(port))+IOPortBase);
+	return *(volatile unsigned int*)(((unsigned PORT_SIZE)(port))+ioBase);
 }
 
 
diff --git a/hw/xfree86/os-support/bsd/arm_video.c b/hw/xfree86/os-support/bsd/arm_video.c
index eb631a7..2bc6d3b 100644
--- a/hw/xfree86/os-support/bsd/arm_video.c
+++ b/hw/xfree86/os-support/bsd/arm_video.c
@@ -495,7 +495,7 @@ xf86EnableIO()
 				MAP_FLAGS, fd, (off_t)0x0000);
 
 		if (base != (pointer)-1) {
-			IOPortBase = base;
+			ioBase = base;
 		}
 		else {
 			xf86Msg(X_WARNING,"EnableIO: failed to mmap %s (%s)\n",
@@ -562,7 +562,7 @@ int ScreenNum;
 				MAP_FLAGS, fd, (off_t)0x0000);
 
 		if (base != (pointer)-1) {
-			IOPortBase = base;
+			ioBase = base;
 		}
 		else {
 			xf86Msg(X_ERROR,
@@ -577,20 +577,20 @@ int ScreenNum;
 #endif
 
 #ifdef __arm32__
-	IOPortBase = (unsigned int)-1;
+	ioBase = (unsigned char *)-1;
 
 	if((memInfoP = checkMapInfo(TRUE, MMIO_REGION)) != NULL)
 	{
 	    /* 
 	     * xf86MapInfoMap maps an offset from the start of video IO
-	     * space (e.g. 0x3B0), but IOPortBase is expected to map to
+	     * space (e.g. 0x3B0), but ioBase is expected to map to
 	     * physical address 0x000, so subtract the start of video I/O
 	     * space from the result.  This is safe for now becase we
 	     * actually mmap the start of the page, then the start of video
 	     * I/O space is added as an internal offset.
 	     */
-	    IOPortBase = (unsigned int)xf86MapInfoMap(memInfoP,
-						      (caddr_t)0x0, 0L) 
+	    ioBase = (unsigned char *)xf86MapInfoMap(memInfoP,
+						     (caddr_t)0x0, 0L)
 		- memInfoP->memInfo.u.map_info_mmap.internal_offset;
 	    ExtendedEnabled = TRUE;
 	    return TRUE;
@@ -604,10 +604,10 @@ int ScreenNum;
 				 MAP_FLAGS, devMemFd, (off_t)DEV_MEM_IOBASE);
 
 	    if (base != (pointer)-1)
-		IOPortBase = (unsigned int)base;
+		ioBase = base;
 	}
 
-        if (IOPortBase == (unsigned int)-1)
+        if (ioBase == (unsigned char *)-1)
 	{	
 	    xf86Msg(X_WARNING,"xf86EnableIOPorts: failed to open mem device or map IO base. \n\
 Make sure you have the Aperture Driver installed, or a kernel built with the INSECURE option\n");
@@ -652,8 +652,8 @@ int ScreenNum;
 		if (ScreenEnabled[i])
 			return;
 
-	munmap((caddr_t)IOPortBase, 0x400);
-	IOPortBase = (unsigned int)-1;
+	munmap((caddr_t)ioBase, 0x400);
+	ioBase = (unsigned char *)-1;
 	ExtendedEnabled = FALSE;
 #endif
 
diff --git a/hw/xfree86/os-support/linux/lnx_video.c b/hw/xfree86/os-support/linux/lnx_video.c
index 3d45511..48a3f76 100644
--- a/hw/xfree86/os-support/linux/lnx_video.c
+++ b/hw/xfree86/os-support/linux/lnx_video.c
@@ -493,7 +493,7 @@ volatile unsigned char *ioBase = NULL;
 Bool
 xf86EnableIO(void)
 {
-#if defined(__powerpc__)
+#if defined(__mips__) || defined(__powerpc__)
 	int fd;
 	unsigned int ioBase_phys;
 #endif
@@ -501,8 +501,13 @@ xf86EnableIO(void)
 	if (ExtendedEnabled)
 		return TRUE;
 
-#if defined(__powerpc__)
+#if defined(__mips__) || defined(__powerpc__)
+
+# if defined(__mips__)
+	ioBase_phys = 0x1fd00000;
+# elif defined(__powerpc__)
 	ioBase_phys = syscall(__NR_pciconfig_iobase, 2, 0, 0);
+# endif
 
 	fd = open("/dev/mem", O_RDWR);
 	if (ioBase == NULL) {
-- 
1.7.7



More information about the xorg-devel mailing list