summaryrefslogtreecommitdiff
authorMatt Turner <mattst88@gmail.com>2009-10-07 00:58:30 (GMT)
committer Matt Turner <mattst88@gmail.com>2009-10-07 00:58:30 (GMT)
commit9625f6d328d6f516520930227b218979309938bc (patch) (side-by-side diff)
tree6a926421788f262700a43fc0f5a4a5c42ddb8103
parentaa07957373fd7cbe67458a001e4afd6a7f1ea37f (diff)
downloadxserver-9625f6d328d6f516520930227b218979309938bc.zip
xserver-9625f6d328d6f516520930227b218979309938bc.tar.gz
Fix breakage on alpha caused by c7680befe5ae
Pinpointed by by Michael Cree. Commit c7680befe5ae removed Jensen support, but at the same time broke support for dense memory systems. Signed-off-by: Matt Turner <mattst88@gmail.com>
Diffstat (more/less context) (ignore whitespace changes)
-rw-r--r--hw/xfree86/os-support/misc/SlowBcopy.c62
1 files changed, 39 insertions, 23 deletions
diff --git a/hw/xfree86/os-support/misc/SlowBcopy.c b/hw/xfree86/os-support/misc/SlowBcopy.c
index 182a3e6..0021b55 100644
--- a/hw/xfree86/os-support/misc/SlowBcopy.c
+++ b/hw/xfree86/os-support/misc/SlowBcopy.c
@@ -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;
-
- 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);
- }
+ 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);
+ }
+ }
+ else
+ xf86SlowBcopy(src, dst, count);
}
-
+
void
xf86SlowBCopyToBus(unsigned char *src, unsigned char *dst, int count)
{
- 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);
- }
+ 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);
+ }
+ }
+ else
+ xf86SlowBcopy(src, dst, count);
}
#endif