Merge git://git.kernel.org/pub/scm/linux/kernel/git/davem/net
[firefly-linux-kernel-4.4.55.git] / drivers / net / wireless / brcm80211 / brcmfmac / dhd_dbg.c
index 57671eddf79dda2a204ed0da5ece8524d91733ba..202869cd0932619a54c6f6914ead97b24b8907bf 100644 (file)
@@ -22,6 +22,7 @@
 #include "dhd.h"
 #include "dhd_bus.h"
 #include "dhd_dbg.h"
+#include "tracepoint.h"
 
 static struct dentry *root_folder;
 
@@ -123,3 +124,82 @@ void brcmf_debugfs_create_sdio_count(struct brcmf_pub *drvr,
                debugfs_create_file("counters", S_IRUGO, dentry,
                                    sdcnt, &brcmf_debugfs_sdio_counter_ops);
 }
+
+static
+ssize_t brcmf_debugfs_fws_stats_read(struct file *f, char __user *data,
+                                    size_t count, loff_t *ppos)
+{
+       struct brcmf_fws_stats *fwstats = f->private_data;
+       char buf[650];
+       int res;
+
+       /* only allow read from start */
+       if (*ppos > 0)
+               return 0;
+
+       res = scnprintf(buf, sizeof(buf),
+                       "header_pulls:      %u\n"
+                       "header_only_pkt:   %u\n"
+                       "tlv_parse_failed:  %u\n"
+                       "tlv_invalid_type:  %u\n"
+                       "mac_update_fails:  %u\n"
+                       "ps_update_fails:   %u\n"
+                       "if_update_fails:   %u\n"
+                       "pkt2bus:           %u\n"
+                       "generic_error:     %u\n"
+                       "rollback_success:  %u\n"
+                       "rollback_failed:   %u\n"
+                       "delayq_full:       %u\n"
+                       "supprq_full:       %u\n"
+                       "txs_indicate:      %u\n"
+                       "txs_discard:       %u\n"
+                       "txs_suppr_core:    %u\n"
+                       "txs_suppr_ps:      %u\n"
+                       "txs_tossed:        %u\n"
+                       "send_pkts:         BK:%u BE:%u VO:%u VI:%u BCMC:%u\n"
+                       "fifo_credits_sent: BK:%u BE:%u VO:%u VI:%u BCMC:%u\n",
+                       fwstats->header_pulls,
+                       fwstats->header_only_pkt,
+                       fwstats->tlv_parse_failed,
+                       fwstats->tlv_invalid_type,
+                       fwstats->mac_update_failed,
+                       fwstats->mac_ps_update_failed,
+                       fwstats->if_update_failed,
+                       fwstats->pkt2bus,
+                       fwstats->generic_error,
+                       fwstats->rollback_success,
+                       fwstats->rollback_failed,
+                       fwstats->delayq_full_error,
+                       fwstats->supprq_full_error,
+                       fwstats->txs_indicate,
+                       fwstats->txs_discard,
+                       fwstats->txs_supp_core,
+                       fwstats->txs_supp_ps,
+                       fwstats->txs_tossed,
+                       fwstats->send_pkts[0], fwstats->send_pkts[1],
+                       fwstats->send_pkts[2], fwstats->send_pkts[3],
+                       fwstats->send_pkts[4],
+                       fwstats->fifo_credits_sent[0],
+                       fwstats->fifo_credits_sent[1],
+                       fwstats->fifo_credits_sent[2],
+                       fwstats->fifo_credits_sent[3],
+                       fwstats->fifo_credits_sent[4]);
+
+       return simple_read_from_buffer(data, count, ppos, buf, res);
+}
+
+static const struct file_operations brcmf_debugfs_fws_stats_ops = {
+       .owner = THIS_MODULE,
+       .open = simple_open,
+       .read = brcmf_debugfs_fws_stats_read
+};
+
+void brcmf_debugfs_create_fws_stats(struct brcmf_pub *drvr,
+                                   struct brcmf_fws_stats *stats)
+{
+       struct dentry *dentry =  drvr->dbgfs_dir;
+
+       if (!IS_ERR_OR_NULL(dentry))
+               debugfs_create_file("fws_stats", S_IRUGO, dentry,
+                                   stats, &brcmf_debugfs_fws_stats_ops);
+}