--- clean/xc/programs/Xserver/hw/xfree86/common/compiler.h 2003-01-29 15:23:20.000000000 +0000 +++ xc/programs/Xserver/hw/xfree86/common/compiler.h 2003-06-11 11:37:04.000000000 +0000 @@ -87,7 +87,8 @@ # if defined(NO_INLINE) || defined(DO_PROTOTYPES) -# if !defined(__sparc__) && !defined(__arm32__) \ +# if !defined(__arm__) +# if !defined(__sparc__) && !defined(__arm32__) \ && !(defined(__alpha__) && defined(linux)) extern void outb(unsigned short, unsigned char); @@ -97,7 +98,7 @@ extern unsigned int inw(unsigned short); extern unsigned int inl(unsigned short); -# else /* __sparc__, __arm32__, __alpha__*/ +# else /* __sparc__, __arm32__, __alpha__*/ extern void outb(unsigned long, unsigned char); extern void outw(unsigned long, unsigned short); @@ -106,7 +107,8 @@ extern unsigned int inw(unsigned long); extern unsigned int inl(unsigned long); -# endif /* __sparc__, __arm32__, __alpha__ */ +# endif /* __sparc__, __arm32__, __alpha__ */ +# endif /* __arm__ */ extern unsigned long ldq_u(unsigned long *); extern unsigned long ldl_u(unsigned int *); @@ -848,7 +850,7 @@ # define mem_barrier() /* XXX: nop for now */ # define write_mem_barrier() /* XXX: nop for now */ -# elif defined(__mips__) || defined(__arm32__) +# elif defined(__mips__) || (defined(__arm32__) && !defined(__linux__)) #ifdef __arm32__ #define PORT_SIZE long #else @@ -1244,6 +1246,55 @@ # define mem_barrier() eieio() # define write_mem_barrier() eieio() +#elif defined(__arm__) && defined(__linux__) + +#define ldq_u(p) (*((unsigned long *)(p))) +#define ldl_u(p) (*((unsigned int *)(p))) +#define ldw_u(p) (*((unsigned short *)(p))) +#define stq_u(v,p) (*(unsigned long *)(p)) = (v) +#define stl_u(v,p) (*(unsigned int *)(p)) = (v) +#define stw_u(v,p) (*(unsigned short *)(p)) = (v) +#define mem_barrier() /* NOP */ +#define write_mem_barrier() /* NOP */ + +/* for Linux on ARM, we use the LIBC inx/outx routines */ +/* note that the appropriate setup via "ioperm" needs to be done */ +/* *before* any inx/outx is done. */ + +#include + +static __inline__ void +xf_outb(unsigned short port, unsigned char val) +{ + outb(val, port); +} + +static __inline__ void +xf_outw(unsigned short port, unsigned short val) +{ + outw(val, port); +} + +static __inline__ void +xf_outl(unsigned short port, unsigned int val) +{ + outl(val, port); +} + +#define outb xf_outb +#define outw xf_outw +#define outl xf_outl + +#define arm_flush_cache(addr) \ +do { \ + register unsigned long _beg __asm ("a1") = (unsigned long) (addr); \ + register unsigned long _end __asm ("a2") = (unsigned long) (addr) + 4;\ + register unsigned long _flg __asm ("a3") = 0; \ + __asm __volatile ("swi 0x9f0002 @ sys_cacheflush" \ + : "=r" (_beg) \ + : "0" (_beg), "r" (_end), "r" (_flg)); \ +} while (0) + # else /* ix86 */ # define ldq_u(p) (*((unsigned long *)(p)))