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:
parent
aa07957373
commit
9625f6d328
|
@ -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
|
||||||
|
|
Loading…
Reference in New Issue