$NetBSD$ --- work/xorg-server-1.3.0.0/hw/xfree86/os-support/bsd/ppc_video.c~ 2006-09-18 15:04:18.000000000 +0900 +++ hw/xfree86/os-support/bsd/ppc_video.c 2008-02-25 21:55:34.000000000 +0900 @@ -46,6 +46,7 @@ /***************************************************************************/ /* Video Memory Mapping section */ /***************************************************************************/ +static int devMemFd = -1; #ifndef __OpenBSD__ #define DEV_MEM "/dev/mem" @@ -73,15 +74,28 @@ { int fd = xf86Info.screenFd; pointer base; -#ifdef DEBUG +#if 1 //def DEBUG xf86MsgVerb(X_INFO, 3, "mapVidMem %lx, %lx, fd = %d", Base, Size, fd); #endif +#if 0 base = mmap(0, Size, (flags & VIDMEM_READONLY) ? PROT_READ : (PROT_READ | PROT_WRITE), MAP_SHARED, fd, Base); +#else + if (devMemFd < 0) + if ((devMemFd = open(DEV_MEM, O_RDWR)) < 0) + { + FatalError("ppcMapVidMem: failed to open %s (%s)\n", + "/dev/mem", strerror(errno)); + } + base = mmap(0, Size, PROT_READ | PROT_WRITE, + /*(flags & VIDMEM_READONLY) ? + PROT_READ : (PROT_READ | PROT_WRITE),*/ + MAP_SHARED, devMemFd, Base); +#endif if (base == MAP_FAILED) FatalError("%s: could not mmap screen [s=%x,a=%x] (%s)", "xf86MapVidMem", Size, Base, strerror(errno));