|
@@ -1391,3 +1391,43 @@ void iwlagn_rx_reply_compressed_ba(struct iwl_priv *priv,
|
|
|
|
|
|
spin_unlock_irqrestore(&priv->sta_lock, flags);
|
|
|
}
|
|
|
+
|
|
|
+#ifdef CONFIG_IWLWIFI_DEBUG
|
|
|
+const char *iwl_get_tx_fail_reason(u32 status)
|
|
|
+{
|
|
|
+#define TX_STATUS_FAIL(x) case TX_STATUS_FAIL_ ## x: return #x
|
|
|
+#define TX_STATUS_POSTPONE(x) case TX_STATUS_POSTPONE_ ## x: return #x
|
|
|
+
|
|
|
+ switch (status & TX_STATUS_MSK) {
|
|
|
+ case TX_STATUS_SUCCESS:
|
|
|
+ return "SUCCESS";
|
|
|
+ TX_STATUS_POSTPONE(DELAY);
|
|
|
+ TX_STATUS_POSTPONE(FEW_BYTES);
|
|
|
+ TX_STATUS_POSTPONE(BT_PRIO);
|
|
|
+ TX_STATUS_POSTPONE(QUIET_PERIOD);
|
|
|
+ TX_STATUS_POSTPONE(CALC_TTAK);
|
|
|
+ TX_STATUS_FAIL(INTERNAL_CROSSED_RETRY);
|
|
|
+ TX_STATUS_FAIL(SHORT_LIMIT);
|
|
|
+ TX_STATUS_FAIL(LONG_LIMIT);
|
|
|
+ TX_STATUS_FAIL(FIFO_UNDERRUN);
|
|
|
+ TX_STATUS_FAIL(DRAIN_FLOW);
|
|
|
+ TX_STATUS_FAIL(RFKILL_FLUSH);
|
|
|
+ TX_STATUS_FAIL(LIFE_EXPIRE);
|
|
|
+ TX_STATUS_FAIL(DEST_PS);
|
|
|
+ TX_STATUS_FAIL(HOST_ABORTED);
|
|
|
+ TX_STATUS_FAIL(BT_RETRY);
|
|
|
+ TX_STATUS_FAIL(STA_INVALID);
|
|
|
+ TX_STATUS_FAIL(FRAG_DROPPED);
|
|
|
+ TX_STATUS_FAIL(TID_DISABLE);
|
|
|
+ TX_STATUS_FAIL(FIFO_FLUSHED);
|
|
|
+ TX_STATUS_FAIL(INSUFFICIENT_CF_POLL);
|
|
|
+ TX_STATUS_FAIL(PASSIVE_NO_RX);
|
|
|
+ TX_STATUS_FAIL(NO_BEACON_ON_RADAR);
|
|
|
+ }
|
|
|
+
|
|
|
+ return "UNKNOWN";
|
|
|
+
|
|
|
+#undef TX_STATUS_FAIL
|
|
|
+#undef TX_STATUS_POSTPONE
|
|
|
+}
|
|
|
+#endif /* CONFIG_IWLWIFI_DEBUG */
|