Fix breakage on alpha caused by c7680befe5

Pinpointed by by Michael Cree.

Commit c7680befe5 removed Jensen support, but at the same time broke
support for dense memory systems.

Signed-off-by: Matt Turner <mattst88@gmail.com>
This commit is contained in:
Matt Turner 2009-10-06 20:58:30 -04:00
parent aa07957373
commit 9625f6d328

View File

@ -59,10 +59,16 @@ xf86SlowBcopy(unsigned char *src, unsigned char *dst, int len)
#ifdef linux #ifdef linux
unsigned long _bus_base(void);
#define useSparse() (!_bus_base())
#define SPARSE (7) #define SPARSE (7)
#else #else
#define useSparse() 0
#define SPARSE 0 #define SPARSE 0
#endif #endif
@ -70,32 +76,42 @@ xf86SlowBcopy(unsigned char *src, unsigned char *dst, int len)
void void
xf86SlowBCopyFromBus(unsigned char *src, unsigned char *dst, int count) xf86SlowBCopyFromBus(unsigned char *src, unsigned char *dst, int count)
{ {
unsigned long addr; if (useSparse())
long result; {
unsigned long addr;
long result;
addr = (unsigned long) src; addr = (unsigned long) src;
while( count ){ while (count) {
result = *(volatile int *) addr; result = *(volatile int *) addr;
result >>= ((addr>>SPARSE) & 3) * 8; result >>= ((addr>>SPARSE) & 3) * 8;
*dst++ = (unsigned char) (0xffUL & result); *dst++ = (unsigned char) (0xffUL & result);
addr += 1<<SPARSE; addr += 1<<SPARSE;
count--; count--;
outb(0x80, 0x00); outb(0x80, 0x00);
} }
}
else
xf86SlowBcopy(src, dst, count);
} }
void void
xf86SlowBCopyToBus(unsigned char *src, unsigned char *dst, int count) xf86SlowBCopyToBus(unsigned char *src, unsigned char *dst, int count)
{ {
unsigned long addr; if (useSparse())
{
unsigned long addr;
addr = (unsigned long) dst; addr = (unsigned long) dst;
while(count) { while (count) {
*(volatile unsigned int *) addr = (unsigned short)(*src) * 0x01010101; *(volatile unsigned int *) addr = (unsigned short)(*src) * 0x01010101;
src++; src++;
addr += 1<<SPARSE; addr += 1<<SPARSE;
count--; count--;
outb(0x80, 0x00); outb(0x80, 0x00);
} }
}
else
xf86SlowBcopy(src, dst, count);
} }
#endif #endif