From 9625f6d328d6f516520930227b218979309938bc Mon Sep 17 00:00:00 2001 From: Matt Turner Date: Tue, 6 Oct 2009 20:58:30 -0400 Subject: [PATCH] Fix breakage on alpha caused by c7680befe5ae Pinpointed by by Michael Cree. Commit c7680befe5ae removed Jensen support, but at the same time broke support for dense memory systems. Signed-off-by: Matt Turner --- hw/xfree86/os-support/misc/SlowBcopy.c | 58 ++++++++++++++++---------- 1 file changed, 37 insertions(+), 21 deletions(-) diff --git a/hw/xfree86/os-support/misc/SlowBcopy.c b/hw/xfree86/os-support/misc/SlowBcopy.c index 182a3e6ec..0021b5544 100644 --- a/hw/xfree86/os-support/misc/SlowBcopy.c +++ b/hw/xfree86/os-support/misc/SlowBcopy.c @@ -59,10 +59,16 @@ xf86SlowBcopy(unsigned char *src, unsigned char *dst, int len) #ifdef linux +unsigned long _bus_base(void); + +#define useSparse() (!_bus_base()) + #define SPARSE (7) #else +#define useSparse() 0 + #define SPARSE 0 #endif @@ -70,32 +76,42 @@ xf86SlowBcopy(unsigned char *src, unsigned char *dst, int len) void xf86SlowBCopyFromBus(unsigned char *src, unsigned char *dst, int count) { - unsigned long addr; - long result; + if (useSparse()) + { + unsigned long addr; + long result; - addr = (unsigned long) src; - while( count ){ - result = *(volatile int *) addr; - result >>= ((addr>>SPARSE) & 3) * 8; - *dst++ = (unsigned char) (0xffUL & result); - addr += 1<>= ((addr>>SPARSE) & 3) * 8; + *dst++ = (unsigned char) (0xffUL & result); + addr += 1<