diff options
| author | Mark Brown <[email protected]> | 2015-10-12 18:09:27 +0100 | 
|---|---|---|
| committer | Mark Brown <[email protected]> | 2015-10-12 18:09:27 +0100 | 
| commit | 79828b4fa835f73cdaf4bffa48696abdcbea9d02 (patch) | |
| tree | 5e0fa7156acb75ba603022bc807df8f2fedb97a8 /drivers/net/wireless/brcm80211/brcmfmac/msgbuf.c | |
| parent | 721b51fcf91898299d96f4b72cb9434cda29dce6 (diff) | |
| parent | 8c1a9d6323abf0fb1e5dad96cf3f1c783505ea5a (diff) | |
Merge remote-tracking branch 'asoc/fix/rt5645' into asoc-fix-rt5645
Diffstat (limited to 'drivers/net/wireless/brcm80211/brcmfmac/msgbuf.c')
| -rw-r--r-- | drivers/net/wireless/brcm80211/brcmfmac/msgbuf.c | 56 | 
1 files changed, 56 insertions, 0 deletions
diff --git a/drivers/net/wireless/brcm80211/brcmfmac/msgbuf.c b/drivers/net/wireless/brcm80211/brcmfmac/msgbuf.c index 898c3801e658..7b2136c9badb 100644 --- a/drivers/net/wireless/brcm80211/brcmfmac/msgbuf.c +++ b/drivers/net/wireless/brcm80211/brcmfmac/msgbuf.c @@ -1360,6 +1360,60 @@ void brcmf_msgbuf_delete_flowring(struct brcmf_pub *drvr, u8 flowid)  	}  } +#ifdef DEBUG +static int brcmf_msgbuf_stats_read(struct seq_file *seq, void *data) +{ +	struct brcmf_bus *bus_if = dev_get_drvdata(seq->private); +	struct brcmf_pub *drvr = bus_if->drvr; +	struct brcmf_msgbuf *msgbuf = (struct brcmf_msgbuf *)drvr->proto->pd; +	struct brcmf_commonring *commonring; +	u16 i; +	struct brcmf_flowring_ring *ring; +	struct brcmf_flowring_hash *hash; + +	commonring = msgbuf->commonrings[BRCMF_H2D_MSGRING_CONTROL_SUBMIT]; +	seq_printf(seq, "h2d_ctl_submit: rp %4u, wp %4u, depth %4u\n", +		   commonring->r_ptr, commonring->w_ptr, commonring->depth); +	commonring = msgbuf->commonrings[BRCMF_H2D_MSGRING_RXPOST_SUBMIT]; +	seq_printf(seq, "h2d_rx_submit:  rp %4u, wp %4u, depth %4u\n", +		   commonring->r_ptr, commonring->w_ptr, commonring->depth); +	commonring = msgbuf->commonrings[BRCMF_D2H_MSGRING_CONTROL_COMPLETE]; +	seq_printf(seq, "d2h_ctl_cmplt:  rp %4u, wp %4u, depth %4u\n", +		   commonring->r_ptr, commonring->w_ptr, commonring->depth); +	commonring = msgbuf->commonrings[BRCMF_D2H_MSGRING_TX_COMPLETE]; +	seq_printf(seq, "d2h_tx_cmplt:   rp %4u, wp %4u, depth %4u\n", +		   commonring->r_ptr, commonring->w_ptr, commonring->depth); +	commonring = msgbuf->commonrings[BRCMF_D2H_MSGRING_RX_COMPLETE]; +	seq_printf(seq, "d2h_rx_cmplt:   rp %4u, wp %4u, depth %4u\n", +		   commonring->r_ptr, commonring->w_ptr, commonring->depth); + +	seq_printf(seq, "\nh2d_flowrings: depth %u\n", +		   BRCMF_H2D_TXFLOWRING_MAX_ITEM); +	seq_puts(seq, "Active flowrings:\n"); +	hash = msgbuf->flow->hash; +	for (i = 0; i < msgbuf->flow->nrofrings; i++) { +		if (!msgbuf->flow->rings[i]) +			continue; +		ring = msgbuf->flow->rings[i]; +		if (ring->status != RING_OPEN) +			continue; +		commonring = msgbuf->flowrings[i]; +		hash = &msgbuf->flow->hash[ring->hash_id]; +		seq_printf(seq, "id %3u: rp %4u, wp %4u, qlen %4u, blocked %u\n" +				"        ifidx %u, fifo %u, da %pM\n", +				i, commonring->r_ptr, commonring->w_ptr, +				skb_queue_len(&ring->skblist), ring->blocked, +				hash->ifidx, hash->fifo, hash->mac); +	} + +	return 0; +} +#else +static int brcmf_msgbuf_stats_read(struct seq_file *seq, void *data) +{ +	return 0; +} +#endif  int brcmf_proto_msgbuf_attach(struct brcmf_pub *drvr)  { @@ -1460,6 +1514,8 @@ int brcmf_proto_msgbuf_attach(struct brcmf_pub *drvr)  	spin_lock_init(&msgbuf->flowring_work_lock);  	INIT_LIST_HEAD(&msgbuf->work_queue); +	brcmf_debugfs_add_entry(drvr, "msgbuf_stats", brcmf_msgbuf_stats_read); +  	return 0;  fail:  |