|
|
3462799 |
diff --git a/hw/xfree86/loader/xf86sym.c b/hw/xfree86/loader/xf86sym.c
|
|
|
3462799 |
index d925bed..8a2768d 100644
|
|
|
3462799 |
--- a/hw/xfree86/loader/xf86sym.c
|
|
|
3462799 |
+++ b/hw/xfree86/loader/xf86sym.c
|
|
|
3462799 |
@@ -259,6 +259,7 @@ _X_HIDDEN void *xfree86LookupTab[] = {
|
|
|
3462799 |
SYMFUNC(xf86UDelay)
|
|
|
3462799 |
SYMFUNC(xf86IODelay)
|
|
|
3462799 |
SYMFUNC(xf86SlowBcopy)
|
|
|
3462799 |
+ SYMFUNC(xf86SetReallySlowBcopy)
|
|
|
3462799 |
#ifdef __alpha__
|
|
|
3462799 |
SYMFUNC(xf86SlowBCopyToBus)
|
|
|
3462799 |
SYMFUNC(xf86SlowBCopyFromBus)
|
|
|
3462799 |
diff --git a/hw/xfree86/os-support/misc/SlowBcopy.c b/hw/xfree86/os-support/misc/SlowBcopy.c
|
|
|
3462799 |
index 7694eaa..5cd7168 100644
|
|
|
3462799 |
--- a/hw/xfree86/os-support/misc/SlowBcopy.c
|
|
|
3462799 |
+++ b/hw/xfree86/os-support/misc/SlowBcopy.c
|
|
|
3462799 |
@@ -22,21 +22,37 @@
|
|
|
3462799 |
#include "xf86_OSlib.h"
|
|
|
3462799 |
#include "compiler.h"
|
|
|
3462799 |
|
|
|
3462799 |
-/* The outb() isn't needed on my machine, but who knows ... -- ost */
|
|
|
3462799 |
+static int really_slow_bcopy;
|
|
|
3462799 |
+
|
|
|
3462799 |
_X_EXPORT void
|
|
|
3462799 |
-xf86SlowBcopy(unsigned char *src, unsigned char *dst, int len)
|
|
|
3462799 |
+xf86SetReallySlowBcopy(void)
|
|
|
3462799 |
+{
|
|
|
3462799 |
+ really_slow_bcopy = 1;
|
|
|
3462799 |
+}
|
|
|
3462799 |
+
|
|
|
3462799 |
+#if defined(__i386__) || defined(__x86_64__)
|
|
|
3462799 |
+static void xf86_really_slow_bcopy(unsigned char *src, unsigned char *dst, int len)
|
|
|
3462799 |
{
|
|
|
3462799 |
while(len--)
|
|
|
3462799 |
{
|
|
|
3462799 |
*dst++ = *src++;
|
|
|
3462799 |
-#if !defined(__sparc__) && \
|
|
|
3462799 |
- !defined(__powerpc__) && \
|
|
|
3462799 |
- !defined(__mips__) && \
|
|
|
3462799 |
- !defined(__ia64__) && \
|
|
|
3462799 |
- !defined(__arm__)
|
|
|
3462799 |
outb(0x80, 0x00);
|
|
|
3462799 |
+ }
|
|
|
3462799 |
+}
|
|
|
3462799 |
#endif
|
|
|
3462799 |
+
|
|
|
3462799 |
+/* The outb() isn't needed on my machine, but who knows ... -- ost */
|
|
|
3462799 |
+_X_EXPORT void
|
|
|
3462799 |
+xf86SlowBcopy(unsigned char *src, unsigned char *dst, int len)
|
|
|
3462799 |
+{
|
|
|
3462799 |
+#if defined(__i386__) || defined(__x86_64__)
|
|
|
3462799 |
+ if (really_slow_bcopy) {
|
|
|
3462799 |
+ xf86_really_slow_bcopy(src, dst, len);
|
|
|
3462799 |
+ return;
|
|
|
3462799 |
}
|
|
|
3462799 |
+#endif
|
|
|
3462799 |
+ while(len--)
|
|
|
3462799 |
+ *dst++ = *src++;
|
|
|
3462799 |
}
|
|
|
3462799 |
|
|
|
3462799 |
#ifdef __alpha__
|
|
|
3462799 |
diff --git a/hw/xfree86/os-support/xf86_OSproc.h b/hw/xfree86/os-support/xf86_OSproc.h
|
|
|
3462799 |
index 1bbbf56..6f0391d 100644
|
|
|
3462799 |
--- a/hw/xfree86/os-support/xf86_OSproc.h
|
|
|
3462799 |
+++ b/hw/xfree86/os-support/xf86_OSproc.h
|
|
|
3462799 |
@@ -159,6 +159,7 @@ extern void xf86BusToMem(unsigned char *, unsigned char *, int);
|
|
|
3462799 |
extern void xf86MemToBus(unsigned char *, unsigned char *, int);
|
|
|
3462799 |
extern void xf86IODelay(void);
|
|
|
3462799 |
extern void xf86UDelay(long usec);
|
|
|
3462799 |
+extern void xf86SetReallySlowBcopy(void);
|
|
|
3462799 |
extern void xf86SlowBcopy(unsigned char *, unsigned char *, int);
|
|
|
3462799 |
extern int xf86OpenSerial(pointer options);
|
|
|
3462799 |
extern int xf86SetSerial(int fd, pointer options);
|