diff options
Diffstat (limited to 'drivers/net/wireless/brcm80211/brcmfmac/dhd_dbg.c')
| -rw-r--r-- | drivers/net/wireless/brcm80211/brcmfmac/dhd_dbg.c | 80 | 
1 files changed, 80 insertions, 0 deletions
diff --git a/drivers/net/wireless/brcm80211/brcmfmac/dhd_dbg.c b/drivers/net/wireless/brcm80211/brcmfmac/dhd_dbg.c index 57671eddf79..202869cd093 100644 --- a/drivers/net/wireless/brcm80211/brcmfmac/dhd_dbg.c +++ b/drivers/net/wireless/brcm80211/brcmfmac/dhd_dbg.c @@ -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); +}  |