Move memory barrier macros into common section
alphabetize by architecture also. Signed-off-by: Matt Turner <mattst88@gmail.com>
This commit is contained in:
		
							parent
							
								
									295e598d9a
								
							
						
					
					
						commit
						1b43ee13b3
					
				|  | @ -127,6 +127,94 @@ extern unsigned short ldw_brx(volatile unsigned char *, int); | ||||||
| 
 | 
 | ||||||
| # endif /* NO_INLINE || DO_PROTOTYPES */ | # endif /* NO_INLINE || DO_PROTOTYPES */ | ||||||
| 
 | 
 | ||||||
|  | # ifndef NO_INLINE | ||||||
|  | #  ifdef __GNUC__ | ||||||
|  | #   ifdef __alpha__ | ||||||
|  | 
 | ||||||
|  | #    define mem_barrier() __asm__ __volatile__ ("mb" : : : "memory") | ||||||
|  | #    define write_mem_barrier() __asm__ __volatile__ ("wmb" : : : "memory") | ||||||
|  | 
 | ||||||
|  | #   elif defined __amd64__ | ||||||
|  | 
 | ||||||
|  | #    define mem_barrier() \ | ||||||
|  |        __asm__ __volatile__ ("lock; addl $0,0(%%rsp)" : : : "memory") | ||||||
|  | #    define write_mem_barrier() \ | ||||||
|  |        __asm__ __volatile__ ("" : : : "memory") | ||||||
|  | 
 | ||||||
|  | #   elif defined __arm__ | ||||||
|  | 
 | ||||||
|  | #    define mem_barrier()   /* NOP */ | ||||||
|  | #    define write_mem_barrier()   /* NOP */ | ||||||
|  | 
 | ||||||
|  | #   elif defined __arm32__ | ||||||
|  | 
 | ||||||
|  | #    define mem_barrier()	/* NOP */ | ||||||
|  | #    define write_mem_barrier()	/* NOP */ | ||||||
|  | 
 | ||||||
|  | #   elif defined __ia64__ | ||||||
|  | 
 | ||||||
|  | #    ifndef __INTEL_COMPILER | ||||||
|  | #     define mem_barrier()        __asm__ __volatile__ ("mf" : : : "memory") | ||||||
|  | #     define write_mem_barrier()  __asm__ __volatile__ ("mf" : : : "memory") | ||||||
|  | #    else | ||||||
|  | #     include "ia64intrin.h" | ||||||
|  | #     define mem_barrier() __mf() | ||||||
|  | #     define write_mem_barrier() __mf() | ||||||
|  | #    endif | ||||||
|  | 
 | ||||||
|  | #   elif defined __mips__ | ||||||
|  | #    ifdef linux | ||||||
|  | #     define mem_barrier() \ | ||||||
|  |         __asm__ __volatile__(                                   \ | ||||||
|  |                 "# prevent instructions being moved around\n\t" \ | ||||||
|  |                 ".set\tnoreorder\n\t"                           \ | ||||||
|  |                 "# 8 nops to fool the R4400 pipeline\n\t"       \ | ||||||
|  |                 "nop;nop;nop;nop;nop;nop;nop;nop\n\t"           \ | ||||||
|  |                 ".set\treorder"                                 \ | ||||||
|  |                 : /* no output */                               \ | ||||||
|  |                 : /* no input */                                \ | ||||||
|  |                 : "memory") | ||||||
|  | #     define write_mem_barrier() mem_barrier() | ||||||
|  | 
 | ||||||
|  | #    else /* !linux */ | ||||||
|  | #     define mem_barrier()   /* NOP */ | ||||||
|  | #    endif | ||||||
|  | 
 | ||||||
|  | #   elif defined __powerpc__ | ||||||
|  | 
 | ||||||
|  | #    if defined(linux) && defined(__powerpc64__) | ||||||
|  | #     include <linux/version.h> | ||||||
|  | #     if LINUX_VERSION_CODE < KERNEL_VERSION(2, 6, 0) | ||||||
|  | #      include <asm/memory.h> | ||||||
|  | #     endif | ||||||
|  | #    endif /* defined(linux) && defined(__powerpc64__) */ | ||||||
|  | 
 | ||||||
|  | #    ifndef eieio /* We deal with arch-specific eieio() routines above... */ | ||||||
|  | #     define eieio() __asm__ __volatile__ ("eieio" ::: "memory") | ||||||
|  | #    endif /* eieio */ | ||||||
|  | #    define mem_barrier()	eieio() | ||||||
|  | #    define write_mem_barrier()	eieio() | ||||||
|  | 
 | ||||||
|  | #   elif defined __sparc__ | ||||||
|  | 
 | ||||||
|  | #    define barrier() __asm__ __volatile__ (".word 0x8143e00a" : : : "memory") | ||||||
|  | #    define mem_barrier()         /* XXX: nop for now */ | ||||||
|  | #    define write_mem_barrier()   /* XXX: nop for now */ | ||||||
|  | 
 | ||||||
|  | #   else /* ix86 */ | ||||||
|  | 
 | ||||||
|  | #    define mem_barrier()   /* NOP */ | ||||||
|  | #    define write_mem_barrier()   /* NOP */ | ||||||
|  | 
 | ||||||
|  | #   endif | ||||||
|  | #  else | ||||||
|  | 
 | ||||||
|  | #   define mem_barrier()   /* NOP */ | ||||||
|  | #   define write_mem_barrier()   /* NOP */ | ||||||
|  | 
 | ||||||
|  | #  endif /* __GNUC__ */ | ||||||
|  | # endif /* NO_INLINE */ | ||||||
|  | 
 | ||||||
| # ifndef NO_INLINE | # ifndef NO_INLINE | ||||||
| #  ifdef __GNUC__ | #  ifdef __GNUC__ | ||||||
| #   if (defined(linux) || defined(__FreeBSD__) || defined(__NetBSD__) || defined(__OpenBSD__)) && (defined(__alpha__)) | #   if (defined(linux) || defined(__FreeBSD__) || defined(__NetBSD__) || defined(__OpenBSD__)) && (defined(__alpha__)) | ||||||
|  | @ -357,9 +445,6 @@ static __inline__ void stw_u(unsigned long r5, unsigned short * r11) | ||||||
| #    endif | #    endif | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| #    define mem_barrier() __asm__ __volatile__("mb" : : : "memory") |  | ||||||
| #    define write_mem_barrier() __asm__ __volatile__("wmb" : : : "memory") |  | ||||||
| 
 |  | ||||||
| #   elif defined(linux) && defined(__ia64__)  | #   elif defined(linux) && defined(__ia64__)  | ||||||
|   |   | ||||||
| #    include <inttypes.h> | #    include <inttypes.h> | ||||||
|  | @ -419,15 +504,6 @@ __ustw (unsigned long r5, unsigned short * r11) | ||||||
| #    define stl_u(v,p)	__ustl(v,p) | #    define stl_u(v,p)	__ustl(v,p) | ||||||
| #    define stw_u(v,p)	__ustw(v,p) | #    define stw_u(v,p)	__ustw(v,p) | ||||||
| 
 | 
 | ||||||
| #    ifndef __INTEL_COMPILER   |  | ||||||
| #      define mem_barrier()        __asm__ __volatile__ ("mf" ::: "memory") |  | ||||||
| #      define write_mem_barrier()  __asm__ __volatile__ ("mf" ::: "memory") |  | ||||||
| #    else |  | ||||||
| #      include "ia64intrin.h" |  | ||||||
| #      define mem_barrier() __mf() |  | ||||||
| #      define write_mem_barrier() __mf() |  | ||||||
| #    endif |  | ||||||
| 
 |  | ||||||
| /*
 | /*
 | ||||||
|  * This is overkill, but for different reasons depending on where it is used. |  * This is overkill, but for different reasons depending on where it is used. | ||||||
|  * This is thus general enough to be used everywhere cache flushes are needed. |  * This is thus general enough to be used everywhere cache flushes are needed. | ||||||
|  | @ -473,12 +549,6 @@ extern _X_EXPORT unsigned int inl(unsigned long port); | ||||||
| #    define stl_u(v,p)	(*(unsigned int   *)(p)) = (v) | #    define stl_u(v,p)	(*(unsigned int   *)(p)) = (v) | ||||||
| #    define stw_u(v,p)	(*(unsigned short *)(p)) = (v) | #    define stw_u(v,p)	(*(unsigned short *)(p)) = (v) | ||||||
|    |    | ||||||
| #    define mem_barrier() \ |  | ||||||
|        __asm__ __volatile__ ("lock; addl $0,0(%%rsp)": : :"memory") |  | ||||||
| #    define write_mem_barrier() \ |  | ||||||
|        __asm__ __volatile__ ("": : :"memory") |  | ||||||
| 
 |  | ||||||
| 
 |  | ||||||
| static __inline__ void | static __inline__ void | ||||||
| outb(unsigned short port, unsigned char val) | outb(unsigned short port, unsigned char val) | ||||||
| { | { | ||||||
|  | @ -534,8 +604,6 @@ inl(unsigned short port) | ||||||
| #      define ASI_PL 0x88 | #      define ASI_PL 0x88 | ||||||
| #     endif | #     endif | ||||||
| 
 | 
 | ||||||
| #     define barrier() __asm__ __volatile__(".word 0x8143e00a": : :"memory") |  | ||||||
| 
 |  | ||||||
| static __inline__ void | static __inline__ void | ||||||
| outb(unsigned long port, unsigned char val) | outb(unsigned long port, unsigned char val) | ||||||
| { | { | ||||||
|  | @ -857,9 +925,6 @@ static __inline__ void stw_u(unsigned long val, unsigned short *p) | ||||||
| #    endif | #    endif | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| #    define mem_barrier()         /* XXX: nop for now */ |  | ||||||
| #    define write_mem_barrier()   /* XXX: nop for now */ |  | ||||||
| 
 |  | ||||||
| #   elif defined(__mips__) || (defined(__arm32__) && !defined(__linux__)) | #   elif defined(__mips__) || (defined(__arm32__) && !defined(__linux__)) | ||||||
| #    ifdef __arm32__ | #    ifdef __arm32__ | ||||||
| #     define PORT_SIZE long | #     define PORT_SIZE long | ||||||
|  | @ -991,18 +1056,6 @@ xf86WriteMmio32Be(__volatile__ void *base, const unsigned long offset, | ||||||
| } | } | ||||||
| #      endif | #      endif | ||||||
| 
 | 
 | ||||||
| #      define mem_barrier() \ |  | ||||||
|         __asm__ __volatile__(					\ |  | ||||||
| 		"# prevent instructions being moved around\n\t"	\ |  | ||||||
|        		".set\tnoreorder\n\t"				\ |  | ||||||
| 		"# 8 nops to fool the R4400 pipeline\n\t"	\ |  | ||||||
| 		"nop;nop;nop;nop;nop;nop;nop;nop\n\t"		\ |  | ||||||
| 		".set\treorder"					\ |  | ||||||
| 		: /* no output */				\ |  | ||||||
| 		: /* no input */				\ |  | ||||||
| 		: "memory") |  | ||||||
| #      define write_mem_barrier() mem_barrier() |  | ||||||
| 
 |  | ||||||
| #     else  /* !linux */ | #     else  /* !linux */ | ||||||
| 
 | 
 | ||||||
| #      define stq_u(v,p)	stl_u(v,p) | #      define stq_u(v,p)	stl_u(v,p) | ||||||
|  | @ -1014,7 +1067,6 @@ xf86WriteMmio32Be(__volatile__ void *base, const unsigned long offset, | ||||||
| #      define stw_u(v,p)	(*(unsigned char *)(p)) = (v); \ | #      define stw_u(v,p)	(*(unsigned char *)(p)) = (v); \ | ||||||
| 				(*(unsigned char *)(p)+1) = ((v) >> 8) | 				(*(unsigned char *)(p)+1) = ((v) >> 8) | ||||||
| 
 | 
 | ||||||
| #      define mem_barrier()   /* NOP */ |  | ||||||
| #     endif /* !linux */ | #     endif /* !linux */ | ||||||
| #    endif /* __mips__ */ | #    endif /* __mips__ */ | ||||||
| 
 | 
 | ||||||
|  | @ -1025,8 +1077,6 @@ xf86WriteMmio32Be(__volatile__ void *base, const unsigned long offset, | ||||||
| #     define stq_u(v,p)	(*(unsigned long  *)(p)) = (v) | #     define stq_u(v,p)	(*(unsigned long  *)(p)) = (v) | ||||||
| #     define stl_u(v,p)	(*(unsigned int   *)(p)) = (v) | #     define stl_u(v,p)	(*(unsigned int   *)(p)) = (v) | ||||||
| #     define stw_u(v,p)	(*(unsigned short *)(p)) = (v) | #     define stw_u(v,p)	(*(unsigned short *)(p)) = (v) | ||||||
| #     define mem_barrier()	/* NOP */ |  | ||||||
| #     define write_mem_barrier()	/* NOP */ |  | ||||||
| #    endif /* __arm32__ */ | #    endif /* __arm32__ */ | ||||||
| 
 | 
 | ||||||
| #   elif (defined(linux) || defined(__OpenBSD__) || defined(__NetBSD__) || defined(__FreeBSD__)) && defined(__powerpc__) | #   elif (defined(linux) || defined(__OpenBSD__) || defined(__NetBSD__) || defined(__FreeBSD__)) && defined(__powerpc__) | ||||||
|  | @ -1037,16 +1087,6 @@ xf86WriteMmio32Be(__volatile__ void *base, const unsigned long offset, | ||||||
| 
 | 
 | ||||||
| extern _X_EXPORT volatile unsigned char *ioBase; | extern _X_EXPORT volatile unsigned char *ioBase; | ||||||
| 
 | 
 | ||||||
| #if defined(linux) && defined(__powerpc64__) |  | ||||||
| # include <linux/version.h> |  | ||||||
| # if LINUX_VERSION_CODE < KERNEL_VERSION(2, 6, 0) |  | ||||||
| #  include <asm/memory.h> |  | ||||||
| # endif |  | ||||||
| #endif /* defined(linux) && defined(__powerpc64__) */ |  | ||||||
| #ifndef eieio /* We deal with arch-specific eieio() routines above... */ |  | ||||||
| # define eieio() __asm__ __volatile__ ("eieio" ::: "memory") |  | ||||||
| #endif /* eieio */ |  | ||||||
| 
 |  | ||||||
| static __inline__ unsigned char | static __inline__ unsigned char | ||||||
| xf86ReadMmio8(__volatile__ void *base, const unsigned long offset) | xf86ReadMmio8(__volatile__ void *base, const unsigned long offset) | ||||||
| { | { | ||||||
|  | @ -1261,9 +1301,6 @@ inl(unsigned short port) | ||||||
| #    define stw_u(v,p)	(*(unsigned char *)(p)) = (v); \ | #    define stw_u(v,p)	(*(unsigned char *)(p)) = (v); \ | ||||||
| 				(*((unsigned char *)(p)+1)) = ((v) >> 8) | 				(*((unsigned char *)(p)+1)) = ((v) >> 8) | ||||||
| 
 | 
 | ||||||
| #    define mem_barrier()	eieio() |  | ||||||
| #    define write_mem_barrier()	eieio() |  | ||||||
| 
 |  | ||||||
| #elif defined(__arm__) && defined(__linux__) | #elif defined(__arm__) && defined(__linux__) | ||||||
| 
 | 
 | ||||||
| #define ldq_u(p)	(*((unsigned long  *)(p))) | #define ldq_u(p)	(*((unsigned long  *)(p))) | ||||||
|  | @ -1272,8 +1309,6 @@ inl(unsigned short port) | ||||||
| #define stq_u(v,p)	(*(unsigned long  *)(p)) = (v) | #define stq_u(v,p)	(*(unsigned long  *)(p)) = (v) | ||||||
| #define stl_u(v,p)	(*(unsigned int   *)(p)) = (v) | #define stl_u(v,p)	(*(unsigned int   *)(p)) = (v) | ||||||
| #define stw_u(v,p)	(*(unsigned short *)(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 */ | /* for Linux on ARM, we use the LIBC inx/outx routines */ | ||||||
| /* note that the appropriate setup via "ioperm" needs to be done */ | /* note that the appropriate setup via "ioperm" needs to be done */ | ||||||
|  | @ -1321,8 +1356,6 @@ do {									\ | ||||||
| #    define stq_u(v,p)	(*(unsigned long  *)(p)) = (v) | #    define stq_u(v,p)	(*(unsigned long  *)(p)) = (v) | ||||||
| #    define stl_u(v,p)	(*(unsigned int   *)(p)) = (v) | #    define stl_u(v,p)	(*(unsigned int   *)(p)) = (v) | ||||||
| #    define stw_u(v,p)	(*(unsigned short *)(p)) = (v) | #    define stw_u(v,p)	(*(unsigned short *)(p)) = (v) | ||||||
| #    define mem_barrier()   /* NOP */ |  | ||||||
| #    define write_mem_barrier()   /* NOP */ |  | ||||||
| 
 | 
 | ||||||
| #    if !defined(__SUNPRO_C) | #    if !defined(__SUNPRO_C) | ||||||
| #    if !defined(FAKEIT) && !defined(__mc68000__) && !defined(__arm__) && !defined(__sh__) && !defined(__hppa__) && !defined(__s390__) && !defined(__m32r__) | #    if !defined(FAKEIT) && !defined(__mc68000__) && !defined(__arm__) && !defined(__sh__) && !defined(__hppa__) && !defined(__s390__) && !defined(__m32r__) | ||||||
|  | @ -1511,8 +1544,6 @@ inl(unsigned short port) | ||||||
| #   define stq_u(v,p)	(*(unsigned long  *)(p)) = (v) | #   define stq_u(v,p)	(*(unsigned long  *)(p)) = (v) | ||||||
| #   define stl_u(v,p)	(*(unsigned int   *)(p)) = (v) | #   define stl_u(v,p)	(*(unsigned int   *)(p)) = (v) | ||||||
| #   define stw_u(v,p)	(*(unsigned short *)(p)) = (v) | #   define stw_u(v,p)	(*(unsigned short *)(p)) = (v) | ||||||
| #   define mem_barrier()   /* NOP */ |  | ||||||
| #   define write_mem_barrier()   /* NOP */ |  | ||||||
| #  endif /* __GNUC__ */ | #  endif /* __GNUC__ */ | ||||||
| 
 | 
 | ||||||
| # endif /* NO_INLINE */ | # endif /* NO_INLINE */ | ||||||
|  | @ -1528,7 +1559,7 @@ extern _X_EXPORT int (*xf86ReadMmio32)(void *, unsigned long); | ||||||
| static __inline__ int | static __inline__ int | ||||||
| xf86ReadMmio32(void *Base, unsigned long Offset) | xf86ReadMmio32(void *Base, unsigned long Offset) | ||||||
| { | { | ||||||
| 	__asm__ __volatile__("mb"  : : : "memory"); | 	mem_barrier(); | ||||||
| 	return *(volatile unsigned int*)((unsigned long)Base+(Offset)); | 	return *(volatile unsigned int*)((unsigned long)Base+(Offset)); | ||||||
| } | } | ||||||
| #  endif | #  endif | ||||||
|  |  | ||||||
		Loading…
	
		Reference in New Issue