diff -Nur madwifi-trunk-r3314.orig/ath/if_ath.c madwifi-trunk-r3314/ath/if_ath.c
--- madwifi-trunk-r3314.orig/ath/if_ath.c	2008-07-12 18:09:34.000000000 +0200
+++ madwifi-trunk-r3314/ath/if_ath.c	2008-07-12 18:09:02.000000000 +0200
@@ -7277,7 +7277,7 @@
 	if (qtype == HAL_TX_QUEUE_UAPSD)
 		qi.tqi_qflags = HAL_TXQ_TXDESCINT_ENABLE;
 	else
-		qi.tqi_qflags = HAL_TXQ_TXEOLINT_ENABLE | 
+		qi.tqi_qflags = HAL_TXQ_TXEOLINT_ENABLE | HAL_TXQ_TXOKINT_ENABLE |
 			HAL_TXQ_TXDESCINT_ENABLE;
 	qnum = ath_hal_setuptxqueue(ah, qtype, &qi);
 	if (qnum == -1) {
diff -Nur madwifi-trunk-r3314.orig/ath/if_ath_hal.h madwifi-trunk-r3314/ath/if_ath_hal.h
--- madwifi-trunk-r3314.orig/ath/if_ath_hal.h	2008-07-12 18:09:34.000000000 +0200
+++ madwifi-trunk-r3314/ath/if_ath_hal.h	2008-07-12 18:09:02.000000000 +0200
@@ -778,17 +778,6 @@
 	return ret;
 }
 
-static inline HAL_BOOL ath_hal_radar_wait(struct ath_hal *ah, HAL_CHANNEL *a1)
-{
-	HAL_BOOL ret;
-	ATH_HAL_LOCK_IRQ(ah->ah_sc);
-	ath_hal_set_function(__func__);
-	ret = ah->ah_radarWait(ah, a1);
-	ath_hal_set_function(NULL);
-	ATH_HAL_UNLOCK_IRQ(ah->ah_sc);
-	return ret;
-}
-
 static inline HAL_BOOL ath_hal_setmcastfilterindex(struct ath_hal *ah,
 						   u_int32_t index)
 {
@@ -1268,8 +1257,6 @@
 	/* HAL_STATUS ah_getCapability(struct ath_hal *ah, HAL_CAPABILITY_TYPE a1, u_int32_t capability, u_int32_t *result) */
 	__print_symbol("%s=ah_getCapability\n",
 		       (unsigned long)ah->ah_getCapability);
-	/* HAL_BOOL ah_radarWait(struct ath_hal *ah, HAL_CHANNEL *a1) */
-	__print_symbol("%s=ah_radarWait\n", (unsigned long)ah->ah_radarWait);
 	/* HAL_BOOL ah_setMulticastFilterIndex(struct ath_hal *ah, u_int32_t index) */
 	__print_symbol("%s=ah_setMulticastFilterIndex\n",
 		       (unsigned long)ah->ah_setMulticastFilterIndex);
diff -Nur madwifi-trunk-r3314.orig/ath_hal/ah_os.c madwifi-trunk-r3314/ath_hal/ah_os.c
--- madwifi-trunk-r3314.orig/ath_hal/ah_os.c	2008-07-12 18:09:34.000000000 +0200
+++ madwifi-trunk-r3314/ath_hal/ah_os.c	2008-07-12 18:09:02.000000000 +0200
@@ -125,6 +125,13 @@
 }
 EXPORT_SYMBOL(ath_hal_printf);
 
+void __ahdecl
+ath_hal_printstr(struct ath_hal *ah, const char *str)
+{
+	printk("%s", str);
+}
+EXPORT_SYMBOL(ath_hal_printstr);
+
 /*
  * Format an Ethernet MAC for printing.
  */
diff -Nur madwifi-trunk-r3314.orig/ath_hal/ah_os.h madwifi-trunk-r3314/ath_hal/ah_os.h
--- madwifi-trunk-r3314.orig/ath_hal/ah_os.h	2008-07-12 18:09:34.000000000 +0200
+++ madwifi-trunk-r3314/ath_hal/ah_os.h	2008-07-12 18:09:02.000000000 +0200
@@ -157,79 +157,14 @@
 #endif				/* AH_BYTE_ORDER */
 
 /*
- * Some big-endian architectures don't set CONFIG_GENERIC_IOMAP, but fail to
- * implement iowrite32be and ioread32be.  Provide compatibility macros when
- * it's needed.
- *
- * As of Linux 2.6.24, only MIPS, PARISC and PowerPC implement iowrite32be and
- * ioread32be as functions.
- *
- * The downside or the replacement macros it that we may be byte-swapping data
- * for the second time, so the native implementations should be preferred.
- */
-#if (LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,12)) && \
-	!defined(CONFIG_GENERIC_IOMAP) && (AH_BYTE_ORDER == AH_BIG_ENDIAN) && \
-	!defined(__mips__) && !defined(__hppa__) && !defined(__powerpc__)
-# ifndef iowrite32be
-#  define iowrite32be(_val, _addr) iowrite32(swab32((_val)), (_addr))
-# endif
-# ifndef ioread32be
-#  define ioread32be(_addr) swab32(ioread32((_addr)))
-# endif
-#endif
-
-/*
  * The register accesses are done using target-specific functions when
  * debugging is enabled (AH_DEBUG) or it's explicitly requested for the target.
- *
- * The hardware registers use little-endian byte order natively.  Big-endian
- * systems are configured by HAL to enable hardware byte-swap of register reads
- * and writes at reset.  This avoid the need to byte-swap the data in software.
- * However, the registers in a certain area from 0x4000 to 0x4fff (PCI clock
- * domain registers) are not byte swapped!
- *
- * Since Linux I/O primitives default to little-endian operations, we only
- * need to suppress byte-swapping on big-endian systems outside the area used
- * by the PCI clock domain registers.
  */
-#if (AH_BYTE_ORDER == AH_BIG_ENDIAN)
-#define is_reg_le(__reg) ((0x4000 <= (__reg) && (__reg) < 0x5000))
-#if LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,12)
-#define _OS_REG_WRITE(_ah, _reg, _val) do {			\
-	 is_reg_le(_reg) ?					\
-	 iowrite32((_val), (_ah)->ah_sh + (_reg)) :		\
-	 iowrite32be((_val), (_ah)->ah_sh + (_reg));		\
-	} while (0)
-#define _OS_REG_READ(_ah, _reg)					\
-	(is_reg_le(_reg) ?					\
-	 ioread32((_ah)->ah_sh + (_reg)) :			\
-	 ioread32be((_ah)->ah_sh + (_reg)))
-#else
-#define _OS_REG_WRITE(_ah, _reg, _val) do {			\
-	 writel(is_reg_le(_reg) ? 				\
-	 	(_val) : cpu_to_le32(_val), 			\
-		(_ah)->ah_sh + (_reg));				\
-	} while (0)
-#define _OS_REG_READ(_ah, _reg)					\
-	(is_reg_le(_reg) ?					\
-	 readl((_ah)->ah_sh + (_reg)) :				\
-	 cpu_to_le32(readl((_ah)->ah_sh + (_reg))))
-#endif				/* KERNEL_VERSION(2,6,12) */
-#else				/* AH_BYTE_ORDER != AH_BIG_ENDIAN */
-#if LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,12)
-#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))
-#else
 #define _OS_REG_WRITE(_ah, _reg, _val) do {			\
-	 writel((_val), (_ah)->ah_sh + (_reg));			\
-	} while (0)
+	 __raw_writel((_val), (_ah)->ah_sh + (_reg));		\
+} while (0)
 #define _OS_REG_READ(_ah, _reg)					\
-	readl((_ah)->ah_sh + (_reg))
-#endif				/* KERNEL_VERSION(2,6,12) */
-#endif				/* AH_BYTE_ORDER != AH_BIG_ENDIAN */
+	 __raw_readl((_ah)->ah_sh + (_reg))
 
 /*
  * The functions in this section are not intended to be invoked by MadWifi
