Commit 4033927c authored by Franky Lin's avatar Franky Lin Committed by John W. Linville

brcm80211: fmac: remove duplicate statistics from driver data structure

Some dongle statistics are stored in two places and synced when net
device status inquired. There is no need to do it this way any more.
Direct all usage to dongle stats structure in order to increase
readability.
Reviewed-by: default avatarPieter-Paul Giesberts <pieterpg@broadcom.com>
Reviewed-by: default avatarArend van Spriel <arend@broadcom.com>
Reviewed-by: default avatarAlwin Beukers <alwin@broadcom.com>
Signed-off-by: default avatarFranky Lin <frankyl@broadcom.com>
Signed-off-by: default avatarJohn W. Linville <linville@tuxdriver.com>
parent 3fb1d8d2
...@@ -608,21 +608,8 @@ struct brcmf_pub { ...@@ -608,21 +608,8 @@ struct brcmf_pub {
/* Additional stats for the bus level */ /* Additional stats for the bus level */
/* Data packets sent to dongle */
unsigned long tx_packets;
/* Multicast data packets sent to dongle */ /* Multicast data packets sent to dongle */
unsigned long tx_multicast; unsigned long tx_multicast;
/* Errors in sending data to dongle */
unsigned long tx_errors;
/* Packets sent up the network interface */
unsigned long rx_packets;
/* Multicast packets sent up the network interface */
unsigned long rx_multicast;
/* Errors processing rx data packets */
unsigned long rx_errors;
/* Packets dropped locally (no memory) */
unsigned long rx_dropped;
/* Packets flushed due to unscheduled sendup thread */ /* Packets flushed due to unscheduled sendup thread */
unsigned long rx_flushed; unsigned long rx_flushed;
/* Number of times dpc scheduled by watchdog timer */ /* Number of times dpc scheduled by watchdog timer */
......
...@@ -453,18 +453,6 @@ void brcmf_proto_detach(struct brcmf_pub *drvr) ...@@ -453,18 +453,6 @@ void brcmf_proto_detach(struct brcmf_pub *drvr)
drvr->prot = NULL; drvr->prot = NULL;
} }
void brcmf_proto_dstats(struct brcmf_pub *drvr)
{
/* No stats from dongle added yet, copy bus stats */
drvr->dstats.tx_packets = drvr->tx_packets;
drvr->dstats.tx_errors = drvr->tx_errors;
drvr->dstats.rx_packets = drvr->rx_packets;
drvr->dstats.rx_errors = drvr->rx_errors;
drvr->dstats.rx_dropped = drvr->rx_dropped;
drvr->dstats.multicast = drvr->rx_multicast;
return;
}
int brcmf_proto_init(struct brcmf_pub *drvr) int brcmf_proto_init(struct brcmf_pub *drvr)
{ {
int ret = 0; int ret = 0;
......
...@@ -342,7 +342,7 @@ static int brcmf_netdev_start_xmit(struct sk_buff *skb, struct net_device *ndev) ...@@ -342,7 +342,7 @@ static int brcmf_netdev_start_xmit(struct sk_buff *skb, struct net_device *ndev)
if (ret) if (ret)
drvr->dstats.tx_dropped++; drvr->dstats.tx_dropped++;
else else
drvr->tx_packets++; drvr->dstats.tx_packets++;
/* Return ok: we always eat the packet */ /* Return ok: we always eat the packet */
return 0; return 0;
...@@ -427,7 +427,7 @@ void brcmf_rx_frame(struct device *dev, int ifidx, ...@@ -427,7 +427,7 @@ void brcmf_rx_frame(struct device *dev, int ifidx,
skb->protocol = eth_type_trans(skb, skb->dev); skb->protocol = eth_type_trans(skb, skb->dev);
if (skb->pkt_type == PACKET_MULTICAST) if (skb->pkt_type == PACKET_MULTICAST)
drvr->rx_multicast++; drvr->dstats.multicast++;
skb->data = eth; skb->data = eth;
skb->len = len; skb->len = len;
...@@ -447,7 +447,7 @@ void brcmf_rx_frame(struct device *dev, int ifidx, ...@@ -447,7 +447,7 @@ void brcmf_rx_frame(struct device *dev, int ifidx,
} }
drvr->dstats.rx_bytes += skb->len; drvr->dstats.rx_bytes += skb->len;
drvr->rx_packets++; /* Local count */ drvr->dstats.rx_packets++; /* Local count */
if (in_interrupt()) if (in_interrupt())
netif_rx(skb); netif_rx(skb);
...@@ -487,10 +487,6 @@ static struct net_device_stats *brcmf_netdev_get_stats(struct net_device *ndev) ...@@ -487,10 +487,6 @@ static struct net_device_stats *brcmf_netdev_get_stats(struct net_device *ndev)
brcmf_dbg(TRACE, "Enter\n"); brcmf_dbg(TRACE, "Enter\n");
if (drvr->bus_if->drvr_up)
/* Use the protocol to get dongle stats */
brcmf_proto_dstats(drvr);
/* Copy dongle stats to net device stats */ /* Copy dongle stats to net device stats */
ifp->stats.rx_packets = drvr->dstats.rx_packets; ifp->stats.rx_packets = drvr->dstats.rx_packets;
ifp->stats.tx_packets = drvr->dstats.tx_packets; ifp->stats.tx_packets = drvr->dstats.tx_packets;
......
...@@ -49,9 +49,6 @@ extern int brcmf_proto_hdrpull(struct device *dev, int *ifidx, ...@@ -49,9 +49,6 @@ extern int brcmf_proto_hdrpull(struct device *dev, int *ifidx,
extern int brcmf_proto_dcmd(struct brcmf_pub *drvr, int ifidx, extern int brcmf_proto_dcmd(struct brcmf_pub *drvr, int ifidx,
struct brcmf_dcmd *dcmd, int len); struct brcmf_dcmd *dcmd, int len);
/* Update local copy of dongle statistics */
extern void brcmf_proto_dstats(struct brcmf_pub *drvr);
extern int brcmf_c_preinit_dcmds(struct brcmf_pub *drvr); extern int brcmf_c_preinit_dcmds(struct brcmf_pub *drvr);
extern int brcmf_proto_cdc_set_dcmd(struct brcmf_pub *drvr, int ifidx, extern int brcmf_proto_cdc_set_dcmd(struct brcmf_pub *drvr, int ifidx,
......
...@@ -1263,7 +1263,7 @@ static u8 brcmf_sdbrcm_rxglom(struct brcmf_sdio *bus, u8 rxseq) ...@@ -1263,7 +1263,7 @@ static u8 brcmf_sdbrcm_rxglom(struct brcmf_sdio *bus, u8 rxseq)
if (errcode < 0) { if (errcode < 0) {
brcmf_dbg(ERROR, "glom read of %d bytes failed: %d\n", brcmf_dbg(ERROR, "glom read of %d bytes failed: %d\n",
dlen, errcode); dlen, errcode);
bus->drvr->rx_errors++; bus->drvr->dstats.rx_errors++;
if (bus->glomerr++ < 3) { if (bus->glomerr++ < 3) {
brcmf_sdbrcm_rxfail(bus, true, true); brcmf_sdbrcm_rxfail(bus, true, true);
...@@ -1447,7 +1447,7 @@ static u8 brcmf_sdbrcm_rxglom(struct brcmf_sdio *bus, u8 rxseq) ...@@ -1447,7 +1447,7 @@ static u8 brcmf_sdbrcm_rxglom(struct brcmf_sdio *bus, u8 rxseq)
} else if (brcmf_proto_hdrpull(bus->sdiodev->dev, } else if (brcmf_proto_hdrpull(bus->sdiodev->dev,
&ifidx, pfirst) != 0) { &ifidx, pfirst) != 0) {
brcmf_dbg(ERROR, "rx protocol error\n"); brcmf_dbg(ERROR, "rx protocol error\n");
bus->drvr->rx_errors++; bus->drvr->dstats.rx_errors++;
skb_unlink(pfirst, &bus->glom); skb_unlink(pfirst, &bus->glom);
brcmu_pkt_buf_free_skb(pfirst); brcmu_pkt_buf_free_skb(pfirst);
continue; continue;
...@@ -1548,7 +1548,7 @@ brcmf_sdbrcm_read_control(struct brcmf_sdio *bus, u8 *hdr, uint len, uint doff) ...@@ -1548,7 +1548,7 @@ brcmf_sdbrcm_read_control(struct brcmf_sdio *bus, u8 *hdr, uint len, uint doff)
if ((rdlen + BRCMF_FIRSTREAD) > bus->sdiodev->bus_if->maxctl) { if ((rdlen + BRCMF_FIRSTREAD) > bus->sdiodev->bus_if->maxctl) {
brcmf_dbg(ERROR, "%d-byte control read exceeds %d-byte buffer\n", brcmf_dbg(ERROR, "%d-byte control read exceeds %d-byte buffer\n",
rdlen, bus->sdiodev->bus_if->maxctl); rdlen, bus->sdiodev->bus_if->maxctl);
bus->drvr->rx_errors++; bus->drvr->dstats.rx_errors++;
brcmf_sdbrcm_rxfail(bus, false, false); brcmf_sdbrcm_rxfail(bus, false, false);
goto done; goto done;
} }
...@@ -1556,7 +1556,7 @@ brcmf_sdbrcm_read_control(struct brcmf_sdio *bus, u8 *hdr, uint len, uint doff) ...@@ -1556,7 +1556,7 @@ brcmf_sdbrcm_read_control(struct brcmf_sdio *bus, u8 *hdr, uint len, uint doff)
if ((len - doff) > bus->sdiodev->bus_if->maxctl) { if ((len - doff) > bus->sdiodev->bus_if->maxctl) {
brcmf_dbg(ERROR, "%d-byte ctl frame (%d-byte ctl data) exceeds %d-byte limit\n", brcmf_dbg(ERROR, "%d-byte ctl frame (%d-byte ctl data) exceeds %d-byte limit\n",
len, len - doff, bus->sdiodev->bus_if->maxctl); len, len - doff, bus->sdiodev->bus_if->maxctl);
bus->drvr->rx_errors++; bus->drvr->dstats.rx_errors++;
bus->rx_toolong++; bus->rx_toolong++;
brcmf_sdbrcm_rxfail(bus, false, false); brcmf_sdbrcm_rxfail(bus, false, false);
goto done; goto done;
...@@ -1630,7 +1630,7 @@ brcmf_alloc_pkt_and_read(struct brcmf_sdio *bus, u16 rdlen, ...@@ -1630,7 +1630,7 @@ brcmf_alloc_pkt_and_read(struct brcmf_sdio *bus, u16 rdlen,
brcmf_dbg(ERROR, "(nextlen): read %d bytes failed: %d\n", brcmf_dbg(ERROR, "(nextlen): read %d bytes failed: %d\n",
rdlen, sdret); rdlen, sdret);
brcmu_pkt_buf_free_skb(*pkt); brcmu_pkt_buf_free_skb(*pkt);
bus->drvr->rx_errors++; bus->drvr->dstats.rx_errors++;
/* Force retry w/normal header read. /* Force retry w/normal header read.
* Don't attempt NAK for * Don't attempt NAK for
* gSPI * gSPI
...@@ -1979,7 +1979,7 @@ brcmf_sdbrcm_readframes(struct brcmf_sdio *bus, uint maxframes, bool *finished) ...@@ -1979,7 +1979,7 @@ brcmf_sdbrcm_readframes(struct brcmf_sdio *bus, uint maxframes, bool *finished)
/* Too long -- skip this frame */ /* Too long -- skip this frame */
brcmf_dbg(ERROR, "too long: len %d rdlen %d\n", brcmf_dbg(ERROR, "too long: len %d rdlen %d\n",
len, rdlen); len, rdlen);
bus->drvr->rx_errors++; bus->drvr->dstats.rx_errors++;
bus->rx_toolong++; bus->rx_toolong++;
brcmf_sdbrcm_rxfail(bus, false, false); brcmf_sdbrcm_rxfail(bus, false, false);
continue; continue;
...@@ -1991,7 +1991,7 @@ brcmf_sdbrcm_readframes(struct brcmf_sdio *bus, uint maxframes, bool *finished) ...@@ -1991,7 +1991,7 @@ brcmf_sdbrcm_readframes(struct brcmf_sdio *bus, uint maxframes, bool *finished)
/* Give up on data, request rtx of events */ /* Give up on data, request rtx of events */
brcmf_dbg(ERROR, "brcmu_pkt_buf_get_skb failed: rdlen %d chan %d\n", brcmf_dbg(ERROR, "brcmu_pkt_buf_get_skb failed: rdlen %d chan %d\n",
rdlen, chan); rdlen, chan);
bus->drvr->rx_dropped++; bus->drvr->dstats.rx_dropped++;
brcmf_sdbrcm_rxfail(bus, false, RETRYCHAN(chan)); brcmf_sdbrcm_rxfail(bus, false, RETRYCHAN(chan));
continue; continue;
} }
...@@ -2011,7 +2011,7 @@ brcmf_sdbrcm_readframes(struct brcmf_sdio *bus, uint maxframes, bool *finished) ...@@ -2011,7 +2011,7 @@ brcmf_sdbrcm_readframes(struct brcmf_sdio *bus, uint maxframes, bool *finished)
: ((chan == SDPCM_DATA_CHANNEL) ? "data" : ((chan == SDPCM_DATA_CHANNEL) ? "data"
: "test")), sdret); : "test")), sdret);
brcmu_pkt_buf_free_skb(pkt); brcmu_pkt_buf_free_skb(pkt);
bus->drvr->rx_errors++; bus->drvr->dstats.rx_errors++;
brcmf_sdbrcm_rxfail(bus, true, RETRYCHAN(chan)); brcmf_sdbrcm_rxfail(bus, true, RETRYCHAN(chan));
continue; continue;
} }
...@@ -2064,7 +2064,7 @@ brcmf_sdbrcm_readframes(struct brcmf_sdio *bus, uint maxframes, bool *finished) ...@@ -2064,7 +2064,7 @@ brcmf_sdbrcm_readframes(struct brcmf_sdio *bus, uint maxframes, bool *finished)
pkt) != 0) { pkt) != 0) {
brcmf_dbg(ERROR, "rx protocol error\n"); brcmf_dbg(ERROR, "rx protocol error\n");
brcmu_pkt_buf_free_skb(pkt); brcmu_pkt_buf_free_skb(pkt);
bus->drvr->rx_errors++; bus->drvr->dstats.rx_errors++;
continue; continue;
} }
...@@ -2276,7 +2276,7 @@ static uint brcmf_sdbrcm_sendfromq(struct brcmf_sdio *bus, uint maxframes) ...@@ -2276,7 +2276,7 @@ static uint brcmf_sdbrcm_sendfromq(struct brcmf_sdio *bus, uint maxframes)
ret = brcmf_sdbrcm_txpkt(bus, pkt, SDPCM_DATA_CHANNEL, true); ret = brcmf_sdbrcm_txpkt(bus, pkt, SDPCM_DATA_CHANNEL, true);
if (ret) if (ret)
bus->drvr->tx_errors++; bus->drvr->dstats.tx_errors++;
else else
bus->drvr->dstats.tx_bytes += datalen; bus->drvr->dstats.tx_bytes += datalen;
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment