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 <[email protected]>
---
 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

_______________________________________________
[email protected]: X.Org development
Archives: http://lists.x.org/archives/xorg-devel
Info: http://lists.x.org/mailman/listinfo/xorg-devel

Reply via email to