Bug#234808: xserver-xfree86: XFree86 fixes for ARM
Package: xserver-xfree86
Version: 4.1.0-16woody3
Severity: important
Tags: patch
This is a expanded version of bug #223567, which was not applied to 4.1
These patches allow XFree86 4.1 to work on ARM. In particular, to allow
non-framebuffer devices to work. There is one change worthy of note. The
open() call for ARM to access DEV_MEM includes O_SYNC i lnx_video.c. This
is absolutely required to ensure that memory access to card registers and other device
memory is not cached. I didn't put a comment in, because it conflicts with
the ia64 comment, and I suggest something suitable is done here.
Similar, if not identical, patches are required for 4.2 and 4.3.
-- System Information
Debian Release: 3.0
Architecture: arm
Kernel: Linux puffin 2.4.22-iyonix #9 Thu Feb 19 16:31:32 GMT 2004 armv5l
Locale: LANG=C, LC_CTYPE=C
Versions of packages xserver-xfree86 depends on:
ii debconf 1.2.35 Debian configuration management sy
ii libc6 2.2.5-11.5 GNU C Library: Shared libraries an
ii xserver-common 4.1.0-16woody3 files and utilities common to all
ii zlib1g 1:1.1.4-1.0woody0 compression library - runtime
--- hw/xfree86/common/xf86Bus.c.old Wed Feb 25 16:05:30 2004
+++ hw/xfree86/common/xf86Bus.c Wed Feb 25 16:06:38 2004
@@ -3123,7 +3123,7 @@
static void
CheckGenericGA()
{
-#if !defined(__sparc__) && !defined(__powerpc__) && !defined(__mips__) /* FIXME ?? */
+#if !defined(__sparc__) && !defined(__powerpc__) && !defined(__mips__) && !defined(__arm__) /* FIXME ?? */
CARD16 GenericIOBase = VGAHW_GET_IOBASE();
CARD8 CurrentValue, TestValue;
--- hw/xfree86/os-support/linux/lnx_video.c.old Wed Feb 25 15:43:32 2004
+++ hw/xfree86/os-support/linux/lnx_video.c Wed Feb 25 15:55:28 2004
@@ -436,7 +436,7 @@
mapflags |= MAP_NONCACHED;
#endif
-#if defined(__ia64__)
+#if defined(__ia64__) || defined(__arm__)
/* this will disappear when people upgrade their kernels */
if ((fd = open(DEV_MEM, O_RDWR|O_SYNC)) < 0)
#else
@@ -519,7 +519,7 @@
#endif
}
close(fd);
-#elif !defined(__mc68000__) && !defined(__sparc__) && !defined(__mips__) && !defined(__hppa__)
+#elif !defined(__mc68000__) && !defined(__sparc__) && !defined(__mips__) && !defined(__hppa__) && !defined(__arm__)
if (ioperm(0, 1024, 1) || iopl(3)) {
if (errno == ENODEV)
ErrorF("xf86EnableIOPorts: no I/O ports found\n");
@@ -544,7 +544,7 @@
#if defined(__powerpc__)
munmap(ioBase, 0x20000);
ioBase = NULL;
-#elif !defined(__mc68000__) && !defined(__sparc__) && !defined(__mips__) && !defined(__hppa__)
+#elif !defined(__mc68000__) && !defined(__sparc__) && !defined(__mips__) && !defined(__hppa__) && !defined(__arm__)
iopl(0);
ioperm(0, 1024, 0);
#endif
@@ -562,11 +562,11 @@
xf86DisableInterrupts()
{
if (!ExtendedEnabled)
-#if !defined(__mc68000__) && !defined(__powerpc__) && !defined(__sparc__) && !defined(__mips__) && !defined(__hppa__)
+#if !defined(__mc68000__) && !defined(__powerpc__) && !defined(__sparc__) && !defined(__mips__) && !defined(__hppa__) && !defined(__arm__)
if (iopl(3) || ioperm(0, 1024, 1))
return (FALSE);
#endif
-#if defined(__alpha__) || defined(__mc68000__) || defined(__powerpc__) || defined(__sparc__) || defined(__mips__) || defined(__arm__) || defined(__hppa__)
+#if defined(__alpha__) || defined(__mc68000__) || defined(__powerpc__) || defined(__sparc__) || defined(__mips__) || defined(__arm__) || defined(__hppa__) || defined(__arm__)
#else
#ifdef __GNUC__
#if defined(__ia64__)
@@ -580,7 +580,7 @@
asm("cli");
#endif
#endif
-#if !defined(__mc68000__) && !defined(__powerpc__) && !defined(__sparc__) && !defined(__mips__) && !defined(__hppa__)
+#if !defined(__mc68000__) && !defined(__powerpc__) && !defined(__sparc__) && !defined(__mips__) && !defined(__hppa__) && !defined(__arm__)
if (!ExtendedEnabled) {
iopl(0);
ioperm(0, 1024, 0);
@@ -594,11 +594,11 @@
xf86EnableInterrupts()
{
if (!ExtendedEnabled)
-#if !defined(__mc68000__) && !defined(__powerpc__) && !defined(__sparc__) && !defined(__mips__) && !defined(__hppa__)
+#if !defined(__mc68000__) && !defined(__powerpc__) && !defined(__sparc__) && !defined(__mips__) && !defined(__hppa__) && !defined(__arm__)
if (iopl(3) || ioperm(0, 1024, 1))
return;
#endif
-#if defined(__alpha__) || defined(__mc68000__) || defined(__powerpc__) || defined(__sparc__) || defined(__mips__) || defined(__arm__) || defined(__hppa__)
+#if defined(__alpha__) || defined(__mc68000__) || defined(__powerpc__) || defined(__sparc__) || defined(__mips__) || defined(__arm__) || defined(__hppa__) || defined(__arm__)
#else
#ifdef __GNUC__
#if defined(__ia64__)
@@ -612,7 +612,7 @@
asm("sti");
#endif
#endif
-#if !defined(__mc68000__) && !defined(__powerpc__) && !defined(__sparc__) && !defined(__mips__) && !defined(__hppa__)
+#if !defined(__mc68000__) && !defined(__powerpc__) && !defined(__sparc__) && !defined(__mips__) && !defined(__hppa__) && !defined(__arm__)
if (!ExtendedEnabled) {
iopl(0);
ioperm(0, 1024, 0);
--- hw/xfree86/vgahw/vgaHW.h.old Thu May 10 23:18:58 2001
+++ hw/xfree86/vgahw/vgaHW.h Wed Feb 25 19:31:20 2004
@@ -188,11 +188,15 @@
#define BITS_PER_GUN 6
#define COLORMAP_SIZE 256
+#ifdef __arm__
+#define DACDelay(hw)
+#else
#define DACDelay(hw) \
do { \
unsigned char temp = inb((hw)->IOBase + VGA_IN_STAT_1_OFFSET); \
temp = inb((hw)->IOBase + VGA_IN_STAT_1_OFFSET); \
} while (0)
+#endif
/* Function Prototypes */
Reply to: