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
|
||||
|
||||
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
|
||||
|
|
Loading…
Reference in New Issue