--- /dev/null
+Index: madwifi-ng-r2756-20071018/ath_hal/ah_os.h
+===================================================================
+--- madwifi-ng-r2756-20071018.orig/ath_hal/ah_os.h 2007-10-24 19:56:29.632449329 +0200
++++ madwifi-ng-r2756-20071018/ath_hal/ah_os.h 2007-10-24 19:56:39.192994154 +0200
+@@ -172,44 +172,25 @@
+ * never byte-swapped by PCI chipsets or bridges, but always
+ * written directly (i.e. the format defined by the manufacturer).
+ */
+-#if LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,12)
+-# if (AH_BYTE_ORDER == AH_BIG_ENDIAN)
++#if (AH_BYTE_ORDER == AH_BIG_ENDIAN)
+ #define _OS_REG_WRITE(_ah, _reg, _val) do { \
+ (0x4000 <= (_reg) && (_reg) < 0x5000) ? \
+- iowrite32((_val), (_ah)->ah_sh + (_reg)) : \
+- iowrite32be((_val), (_ah)->ah_sh + (_reg)); \
+- } while (0)
+-#define _OS_REG_READ(_ah, _reg) \
+- ((0x4000 <= (_reg) && (_reg) < 0x5000) ? \
+- ioread32((_ah)->ah_sh + (_reg)) : \
+- ioread32be((_ah)->ah_sh + (_reg)));
+-# else /* AH_LITTLE_ENDIAN */
+-#define _OS_REG_WRITE(_ah, _reg, _val) do { \
+- iowrite32(_val, (_ah)->ah_sh + (_reg)); \
+- } while (0)
+-#define _OS_REG_READ(_ah, _reg) \
+- ioread32((_ah)->ah_sh + (_reg))
+-
+-# endif /* AH_BYTE_ORDER */
+-#else
+-# if (AH_BYTE_ORDER == AH_BIG_ENDIAN)
+-#define _OS_REG_WRITE(_ah, _reg, _val) do { \
+- writel((0x4000 <= (_reg) && (_reg) < 0x5000) ? \
+- (_val) : cpu_to_le32(_val), \
+- (_ah)->ah_sh + (_reg)); \
+- } while (0)
++ writel((_val), (_ah)->ah_sh + (_reg)) : \
++ ({__raw_writel((_val), (_ah)->ah_sh + (_reg)); \
++ mb(); }); \
++} while (0)
+ #define _OS_REG_READ(_ah, _reg) \
+ ((0x4000 <= (_reg) && (_reg) < 0x5000) ? \
+ readl((_ah)->ah_sh + (_reg)) : \
+- cpu_to_le32(readl((_ah)->ah_sh + (_reg))))
+-# else /* AH_LITTLE_ENDIAN */
++ ({unsigned long __v = __raw_readl((_ah)->ah_sh + \
++ (_reg)); mb(); __v; }))
++#else /* AH_LITTLE_ENDIAN */
+ #define _OS_REG_WRITE(_ah, _reg, _val) do { \
+ writel(_val, (_ah)->ah_sh + (_reg)); \
+- } while (0)
++} while (0)
+ #define _OS_REG_READ(_ah, _reg) \
+ readl((_ah)->ah_sh + (_reg))
+-# endif /* AH_BYTE_ORDER */
+-#endif /* KERNEL_VERSON(2,6,12) */
++#endif /* AH_BYTE_ORDER */
+
+ /*
+ The functions in this section are not intended to be invoked by MadWifi driver