diff options
Diffstat (limited to 'drivers/net/wireless/brcm80211/brcmfmac/fwsignal.c')
-rw-r--r-- | drivers/net/wireless/brcm80211/brcmfmac/fwsignal.c | 100 |
1 files changed, 99 insertions, 1 deletions
diff --git a/drivers/net/wireless/brcm80211/brcmfmac/fwsignal.c b/drivers/net/wireless/brcm80211/brcmfmac/fwsignal.c index 699908de314a..d42f7d04b65f 100644 --- a/drivers/net/wireless/brcm80211/brcmfmac/fwsignal.c +++ b/drivers/net/wireless/brcm80211/brcmfmac/fwsignal.c | |||
@@ -454,6 +454,34 @@ struct brcmf_fws_macdesc_table { | |||
454 | struct brcmf_fws_mac_descriptor other; | 454 | struct brcmf_fws_mac_descriptor other; |
455 | }; | 455 | }; |
456 | 456 | ||
457 | struct brcmf_fws_stats { | ||
458 | u32 tlv_parse_failed; | ||
459 | u32 tlv_invalid_type; | ||
460 | u32 header_only_pkt; | ||
461 | u32 header_pulls; | ||
462 | u32 pkt2bus; | ||
463 | u32 send_pkts[5]; | ||
464 | u32 requested_sent[5]; | ||
465 | u32 generic_error; | ||
466 | u32 mac_update_failed; | ||
467 | u32 mac_ps_update_failed; | ||
468 | u32 if_update_failed; | ||
469 | u32 packet_request_failed; | ||
470 | u32 credit_request_failed; | ||
471 | u32 rollback_success; | ||
472 | u32 rollback_failed; | ||
473 | u32 delayq_full_error; | ||
474 | u32 supprq_full_error; | ||
475 | u32 txs_indicate; | ||
476 | u32 txs_discard; | ||
477 | u32 txs_supp_core; | ||
478 | u32 txs_supp_ps; | ||
479 | u32 txs_tossed; | ||
480 | u32 txs_host_tossed; | ||
481 | u32 bus_flow_block; | ||
482 | u32 fws_flow_block; | ||
483 | }; | ||
484 | |||
457 | struct brcmf_fws_info { | 485 | struct brcmf_fws_info { |
458 | struct brcmf_pub *drvr; | 486 | struct brcmf_pub *drvr; |
459 | spinlock_t spinlock; | 487 | spinlock_t spinlock; |
@@ -2017,6 +2045,75 @@ static void brcmf_fws_dequeue_worker(struct work_struct *worker) | |||
2017 | brcmf_fws_unlock(fws); | 2045 | brcmf_fws_unlock(fws); |
2018 | } | 2046 | } |
2019 | 2047 | ||
2048 | #ifdef DEBUG | ||
2049 | static int brcmf_debugfs_fws_stats_read(struct seq_file *seq, void *data) | ||
2050 | { | ||
2051 | struct brcmf_bus *bus_if = dev_get_drvdata(seq->private); | ||
2052 | struct brcmf_fws_stats *fwstats = &bus_if->drvr->fws->stats; | ||
2053 | |||
2054 | seq_printf(seq, | ||
2055 | "header_pulls: %u\n" | ||
2056 | "header_only_pkt: %u\n" | ||
2057 | "tlv_parse_failed: %u\n" | ||
2058 | "tlv_invalid_type: %u\n" | ||
2059 | "mac_update_fails: %u\n" | ||
2060 | "ps_update_fails: %u\n" | ||
2061 | "if_update_fails: %u\n" | ||
2062 | "pkt2bus: %u\n" | ||
2063 | "generic_error: %u\n" | ||
2064 | "rollback_success: %u\n" | ||
2065 | "rollback_failed: %u\n" | ||
2066 | "delayq_full: %u\n" | ||
2067 | "supprq_full: %u\n" | ||
2068 | "txs_indicate: %u\n" | ||
2069 | "txs_discard: %u\n" | ||
2070 | "txs_suppr_core: %u\n" | ||
2071 | "txs_suppr_ps: %u\n" | ||
2072 | "txs_tossed: %u\n" | ||
2073 | "txs_host_tossed: %u\n" | ||
2074 | "bus_flow_block: %u\n" | ||
2075 | "fws_flow_block: %u\n" | ||
2076 | "send_pkts: BK:%u BE:%u VO:%u VI:%u BCMC:%u\n" | ||
2077 | "requested_sent: BK:%u BE:%u VO:%u VI:%u BCMC:%u\n", | ||
2078 | fwstats->header_pulls, | ||
2079 | fwstats->header_only_pkt, | ||
2080 | fwstats->tlv_parse_failed, | ||
2081 | fwstats->tlv_invalid_type, | ||
2082 | fwstats->mac_update_failed, | ||
2083 | fwstats->mac_ps_update_failed, | ||
2084 | fwstats->if_update_failed, | ||
2085 | fwstats->pkt2bus, | ||
2086 | fwstats->generic_error, | ||
2087 | fwstats->rollback_success, | ||
2088 | fwstats->rollback_failed, | ||
2089 | fwstats->delayq_full_error, | ||
2090 | fwstats->supprq_full_error, | ||
2091 | fwstats->txs_indicate, | ||
2092 | fwstats->txs_discard, | ||
2093 | fwstats->txs_supp_core, | ||
2094 | fwstats->txs_supp_ps, | ||
2095 | fwstats->txs_tossed, | ||
2096 | fwstats->txs_host_tossed, | ||
2097 | fwstats->bus_flow_block, | ||
2098 | fwstats->fws_flow_block, | ||
2099 | fwstats->send_pkts[0], fwstats->send_pkts[1], | ||
2100 | fwstats->send_pkts[2], fwstats->send_pkts[3], | ||
2101 | fwstats->send_pkts[4], | ||
2102 | fwstats->requested_sent[0], | ||
2103 | fwstats->requested_sent[1], | ||
2104 | fwstats->requested_sent[2], | ||
2105 | fwstats->requested_sent[3], | ||
2106 | fwstats->requested_sent[4]); | ||
2107 | |||
2108 | return 0; | ||
2109 | } | ||
2110 | #else | ||
2111 | static int brcmf_debugfs_fws_stats_read(struct seq_file *seq, void *data) | ||
2112 | { | ||
2113 | return 0; | ||
2114 | } | ||
2115 | #endif | ||
2116 | |||
2020 | int brcmf_fws_init(struct brcmf_pub *drvr) | 2117 | int brcmf_fws_init(struct brcmf_pub *drvr) |
2021 | { | 2118 | { |
2022 | struct brcmf_fws_info *fws; | 2119 | struct brcmf_fws_info *fws; |
@@ -2107,7 +2204,8 @@ int brcmf_fws_init(struct brcmf_pub *drvr) | |||
2107 | BRCMF_FWS_PSQ_LEN); | 2204 | BRCMF_FWS_PSQ_LEN); |
2108 | 2205 | ||
2109 | /* create debugfs file for statistics */ | 2206 | /* create debugfs file for statistics */ |
2110 | brcmf_debugfs_create_fws_stats(drvr, &fws->stats); | 2207 | brcmf_debugfs_add_entry(drvr, "fws_stats", |
2208 | brcmf_debugfs_fws_stats_read); | ||
2111 | 2209 | ||
2112 | brcmf_dbg(INFO, "%s bdcv2 tlv signaling [%x]\n", | 2210 | brcmf_dbg(INFO, "%s bdcv2 tlv signaling [%x]\n", |
2113 | fws->fw_signals ? "enabled" : "disabled", tlv); | 2211 | fws->fw_signals ? "enabled" : "disabled", tlv); |