Fix breakage on alpha caused by c7680befe5
Pinpointed by by Michael Cree. Commitc7680befe5
removed Jensen support, but at the same time broke support for dense memory systems. Signed-off-by: Matt Turner <mattst88@gmail.com> (cherry picked from commit9625f6d328
)
This commit is contained in:
parent
e116bebb13
commit
a08186fe59
|
@ -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
Block a user