ath10k: extend debug code for RX path
authorJanusz Dziedzic <janusz.dziedzic@tieto.com>
Mon, 28 Jul 2014 20:59:43 +0000 (23:59 +0300)
committerKalle Valo <kvalo@qca.qualcomm.com>
Tue, 29 Jul 2014 09:48:33 +0000 (12:48 +0300)
Print sequence number, AMSDU_MORE flag and AC when additional
debug enabled in RX path. This is usefull for debugging purpose.

Signed-off-by: Janusz Dziedzic <janusz.dziedzic@tieto.com>
Signed-off-by: Kalle Valo <kvalo@qca.qualcomm.com>
drivers/net/wireless/ath/ath10k/htt_rx.c

index e31d93e3e98b194e5177a157fc82a23e5720a86f..763d6a228a138ab461eae6c3a90a2bb01b658941 100644 (file)
@@ -819,19 +819,55 @@ static bool ath10k_htt_rx_h_channel(struct ath10k *ar,
        return true;
 }
 
+static const char * const tid_to_ac[] = {
+       "BE",
+       "BK",
+       "BK",
+       "BE",
+       "VI",
+       "VI",
+       "VO",
+       "VO",
+};
+
+static char *ath10k_get_tid(struct ieee80211_hdr *hdr, char *out, size_t size)
+{
+       u8 *qc;
+       int tid;
+
+       if (!ieee80211_is_data_qos(hdr->frame_control))
+               return "";
+
+       qc = ieee80211_get_qos_ctl(hdr);
+       tid = *qc & IEEE80211_QOS_CTL_TID_MASK;
+       if (tid < 8)
+               snprintf(out, size, "tid %d (%s)", tid, tid_to_ac[tid]);
+       else
+               snprintf(out, size, "tid %d", tid);
+
+       return out;
+}
+
 static void ath10k_process_rx(struct ath10k *ar,
                              struct ieee80211_rx_status *rx_status,
                              struct sk_buff *skb)
 {
        struct ieee80211_rx_status *status;
+       struct ieee80211_hdr *hdr = (struct ieee80211_hdr *)skb->data;
+       char tid[32];
 
        status = IEEE80211_SKB_RXCB(skb);
        *status = *rx_status;
 
        ath10k_dbg(ATH10K_DBG_DATA,
-                  "rx skb %p len %u %s%s%s%s%s %srate_idx %u vht_nss %u freq %u band %u flag 0x%x fcs-err %imic-err %i\n",
+                  "rx skb %p len %u peer %pM %s %s sn %u %s%s%s%s%s %srate_idx %u vht_nss %u freq %u band %u flag 0x%x fcs-err %i mic-err %i amsdu-more %i\n",
                   skb,
                   skb->len,
+                  ieee80211_get_SA(hdr),
+                  ath10k_get_tid(hdr, tid, sizeof(tid)),
+                  is_multicast_ether_addr(ieee80211_get_DA(hdr)) ?
+                                                       "mcast" : "ucast",
+                  (__le16_to_cpu(hdr->seq_ctrl) & IEEE80211_SCTL_SEQ) >> 4,
                   status->flag == 0 ? "legacy" : "",
                   status->flag & RX_FLAG_HT ? "ht" : "",
                   status->flag & RX_FLAG_VHT ? "vht" : "",
@@ -843,7 +879,8 @@ static void ath10k_process_rx(struct ath10k *ar,
                   status->freq,
                   status->band, status->flag,
                   !!(status->flag & RX_FLAG_FAILED_FCS_CRC),
-                  !!(status->flag & RX_FLAG_MMIC_ERROR));
+                  !!(status->flag & RX_FLAG_MMIC_ERROR),
+                  !!(status->flag & RX_FLAG_AMSDU_MORE));
        ath10k_dbg_dump(ATH10K_DBG_HTT_DUMP, NULL, "rx skb: ",
                        skb->data, skb->len);