void ath9k_hw_abort_tx_dma(struct ath_hw *ah)
 {
+       int maxdelay = 1000;
        int i, q;
 
+       if (ah->curchan) {
+               if (IS_CHAN_HALF_RATE(ah->curchan))
+                       maxdelay *= 2;
+               else if (IS_CHAN_QUARTER_RATE(ah->curchan))
+                       maxdelay *= 4;
+       }
+
        REG_WRITE(ah, AR_Q_TXD, AR_Q_TXD_M);
 
        REG_SET_BIT(ah, AR_PCU_MISC, AR_PCU_FORCE_QUIET_COLL | AR_PCU_CLEAR_VMF);
        REG_SET_BIT(ah, AR_D_GBL_IFS_MISC, AR_D_GBL_IFS_MISC_IGNORE_BACKOFF);
 
        for (q = 0; q < AR_NUM_QCU; q++) {
-               for (i = 0; i < 1000; i++) {
+               for (i = 0; i < maxdelay; i++) {
                        if (i)
                                udelay(5);