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
1 changed files with 37 additions and 21 deletions

View File

@ -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<<SPARSE;
count--;
outb(0x80, 0x00);
}
addr = (unsigned long) src;
while (count) {
result = *(volatile int *) addr;
result >>= ((addr>>SPARSE) & 3) * 8;
*dst++ = (unsigned char) (0xffUL & result);
addr += 1<<SPARSE;
count--;
outb(0x80, 0x00);
}
}
else
xf86SlowBcopy(src, dst, count);
}
void
xf86SlowBCopyToBus(unsigned char *src, unsigned char *dst, int count)
{
unsigned long addr;
if (useSparse())
{
unsigned long addr;
addr = (unsigned long) dst;
while(count) {
*(volatile unsigned int *) addr = (unsigned short)(*src) * 0x01010101;
src++;
addr += 1<<SPARSE;
count--;
outb(0x80, 0x00);
}
addr = (unsigned long) dst;
while (count) {
*(volatile unsigned int *) addr = (unsigned short)(*src) * 0x01010101;
src++;
addr += 1<<SPARSE;
count--;
outb(0x80, 0x00);
}
}
else
xf86SlowBcopy(src, dst, count);
}
#endif