Fixes: https://bugs.freedesktop.org/show_bug.cgi?id=41038
Signed-off-by: Matt Kraai <[email protected]> Reviewed-by: Jeremy Huddleston <[email protected]> --- Ok, so I really don't understand why ppc had its own ioBase in os-support/linux/lnx_video.c rather than using IOPortBase. In any event, I want to nuke this code rather than waste any more of my time fixing it (especially without being able to test it). If this doesn't work, Matt, can you please finish massaging them. hw/xfree86/os-support/linux/lnx_video.c | 43 ++++++++++++++++--------------- 1 files changed, 22 insertions(+), 21 deletions(-) diff --git a/hw/xfree86/os-support/linux/lnx_video.c b/hw/xfree86/os-support/linux/lnx_video.c index 18116bd..f31063d 100644 --- a/hw/xfree86/os-support/linux/lnx_video.c +++ b/hw/xfree86/os-support/linux/lnx_video.c @@ -120,42 +120,43 @@ xf86OSInitVidMem(VidMemInfoPtr pVidMem) /***************************************************************************/ #if defined(__powerpc__) -volatile unsigned char *ioBase = NULL; - #ifndef __NR_pciconfig_iobase #define __NR_pciconfig_iobase 200 #endif - #endif Bool xf86EnableIO(void) { -#if defined(__powerpc__) +#if defined(__mips__) || defined(__powerpc__) int fd; - unsigned int ioBase_phys; + pointer ioBase_phys; #endif 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) { - ioBase = (volatile unsigned char *)mmap(0, 0x20000, - PROT_READ | PROT_WRITE, MAP_SHARED, fd, - ioBase_phys); -/* Should this be fatal or just a warning? */ -#if 0 - if (ioBase == MAP_FAILED) { - xf86Msg(X_WARNING, - "xf86EnableIOPorts: Failed to map iobase (%s)\n", - strerror(errno)); - return FALSE; + if (IOPortBase == 0) { + pointer base = (poiner)mmap(0, 0x20000, PROT_READ | PROT_WRITE, + MAP_SHARED, fd, ioBase_phys); + + if (base == MAP_FAILED) { + ErrorF("xf86EnableIOPorts: Failed to map iobase (%s)\n", + strerror(errno)); + close(fd); + return FALSE; } -#endif + + IOPortBase = base; } close(fd); #elif !defined(__mc68000__) && !defined(__sparc__) && !defined(__mips__) && !defined(__sh__) && !defined(__hppa__) && !defined(__s390__) && !defined(__arm__) && !defined(__m32r__) && !defined(__nds32__) @@ -184,9 +185,9 @@ xf86DisableIO(void) { if (!ExtendedEnabled) return; -#if defined(__powerpc__) - munmap(ioBase, 0x20000); - ioBase = NULL; +#if defined(__powerpc__) || defined(__mips__) + munmap(IOPortBase, 0x20000); + IOPortBase = 0; #elif !defined(__mc68000__) && !defined(__sparc__) && !defined(__mips__) && !defined(__sh__) && !defined(__hppa__) && !defined(__arm__) && !defined(__s390__) && !defined(__m32r__) && !defined(__nds32__) iopl(0); ioperm(0, 1024, 0); -- 1.7.6.1 _______________________________________________ [email protected]: X.Org development Archives: http://lists.x.org/archives/xorg-devel Info: http://lists.x.org/mailman/listinfo/xorg-devel
