brcm80211: fmac: move sdio used statistics to struct brcmf_sdio
[pandora-kernel.git] / drivers / net / wireless / brcm80211 / brcmfmac / dhd_sdio.c
index 43ba0dd..5fb0d90 100644 (file)
@@ -546,6 +546,13 @@ struct brcmf_sdio {
        uint f2rxdata;          /* Number of frame data reads */
        uint f2txdata;          /* Number of f2 frame writes */
        uint f1regdata;         /* Number of f1 register accesses */
+       uint tickcnt;           /* Number of watchdog been schedule */
+       unsigned long tx_ctlerrs;       /* Err of sending ctrl frames */
+       unsigned long tx_ctlpkts;       /* Ctrl frames sent to dongle */
+       unsigned long rx_ctlerrs;       /* Err of processing rx ctrl frames */
+       unsigned long rx_ctlpkts;       /* Ctrl frames processed from dongle */
+       unsigned long rx_readahead_cnt; /* Number of packets where header
+                                        * read-ahead was used. */
 
        u8 *ctrl_frame_buf;
        u32 ctrl_frame_len;
@@ -1437,8 +1444,8 @@ static u8 brcmf_sdbrcm_rxglom(struct brcmf_sdio *bus, u8 rxseq)
                                skb_unlink(pfirst, &bus->glom);
                                brcmu_pkt_buf_free_skb(pfirst);
                                continue;
-                       } else if (brcmf_proto_hdrpull(bus->drvr, &ifidx,
-                                                      pfirst) != 0) {
+                       } else if (brcmf_proto_hdrpull(bus->sdiodev->dev,
+                                                      &ifidx, pfirst) != 0) {
                                brcmf_dbg(ERROR, "rx protocol error\n");
                                bus->drvr->rx_errors++;
                                skb_unlink(pfirst, &bus->glom);
@@ -1461,7 +1468,7 @@ static u8 brcmf_sdbrcm_rxglom(struct brcmf_sdio *bus, u8 rxseq)
                /* sent any remaining packets up */
                if (bus->glom.qlen) {
                        up(&bus->sdsem);
-                       brcmf_rx_frame(bus->drvr, ifidx, &bus->glom);
+                       brcmf_rx_frame(bus->sdiodev->dev, ifidx, &bus->glom);
                        down(&bus->sdsem);
                }
 
@@ -1774,7 +1781,7 @@ brcmf_sdbrcm_readframes(struct brcmf_sdio *bus, uint maxframes, bool *finished)
                                bus->nextlen = 0;
                        }
 
-                       bus->drvr->rx_readahead_cnt++;
+                       bus->rx_readahead_cnt++;
 
                        /* Handle Flow Control */
                        fcbits = SDPCM_FCMASK_VALUE(
@@ -2053,7 +2060,8 @@ deliver:
                if (pkt->len == 0) {
                        brcmu_pkt_buf_free_skb(pkt);
                        continue;
-               } else if (brcmf_proto_hdrpull(bus->drvr, &ifidx, pkt) != 0) {
+               } else if (brcmf_proto_hdrpull(bus->sdiodev->dev, &ifidx,
+                          pkt) != 0) {
                        brcmf_dbg(ERROR, "rx protocol error\n");
                        brcmu_pkt_buf_free_skb(pkt);
                        bus->drvr->rx_errors++;
@@ -2062,7 +2070,7 @@ deliver:
 
                /* Unlock during rx call */
                up(&bus->sdsem);
-               brcmf_rx_packet(bus->drvr, ifidx, pkt);
+               brcmf_rx_packet(bus->sdiodev->dev, ifidx, pkt);
                down(&bus->sdsem);
        }
        rxcount = maxframes - rxleft;
@@ -2230,7 +2238,7 @@ done:
        /* restore pkt buffer pointer before calling tx complete routine */
        skb_pull(pkt, SDPCM_HDRLEN + pad);
        up(&bus->sdsem);
-       brcmf_txcomplete(bus->drvr, pkt, ret != 0);
+       brcmf_txcomplete(bus->sdiodev->dev, pkt, ret != 0);
        down(&bus->sdsem);
 
        if (free_pkt)
@@ -2289,7 +2297,7 @@ static uint brcmf_sdbrcm_sendfromq(struct brcmf_sdio *bus, uint maxframes)
        /* Deflow-control stack if needed */
        if (drvr->up && (drvr->bus_if->state == BRCMF_BUS_DATA) &&
            drvr->txoff && (pktq_len(&bus->txq) < TXLOW))
-               brcmf_txflowcontrol(drvr, 0, OFF);
+               brcmf_txflowcontrol(bus->sdiodev->dev, 0, OFF);
 
        return cnt;
 }
@@ -2590,9 +2598,10 @@ int brcmf_sdbrcm_bus_txdata(struct device *dev, struct sk_buff *pkt)
 
        /* Priority based enq */
        spin_lock_bh(&bus->txqlock);
-       if (brcmf_c_prec_enq(bus->drvr, &bus->txq, pkt, prec) == false) {
+       if (brcmf_c_prec_enq(bus->sdiodev->dev, &bus->txq, pkt, prec) ==
+           false) {
                skb_pull(pkt, SDPCM_HDRLEN);
-               brcmf_txcomplete(bus->drvr, pkt, false);
+               brcmf_txcomplete(bus->sdiodev->dev, pkt, false);
                brcmu_pkt_buf_free_skb(pkt);
                brcmf_dbg(ERROR, "out of bus->txq !!!\n");
                ret = -ENOSR;
@@ -2602,7 +2611,7 @@ int brcmf_sdbrcm_bus_txdata(struct device *dev, struct sk_buff *pkt)
        spin_unlock_bh(&bus->txqlock);
 
        if (pktq_len(&bus->txq) >= TXHI)
-               brcmf_txflowcontrol(bus->drvr, 0, ON);
+               brcmf_txflowcontrol(bus->sdiodev->dev, 0, ON);
 
 #ifdef BCMDBG
        if (pktq_plen(&bus->txq, prec) > qcount[prec])
@@ -2910,9 +2919,9 @@ brcmf_sdbrcm_bus_txctl(struct device *dev, unsigned char *msg, uint msglen)
        up(&bus->sdsem);
 
        if (ret)
-               bus->drvr->tx_ctlerrs++;
+               bus->tx_ctlerrs++;
        else
-               bus->drvr->tx_ctlpkts++;
+               bus->tx_ctlpkts++;
 
        return ret ? -EIO : 0;
 }
@@ -2951,9 +2960,9 @@ brcmf_sdbrcm_bus_rxctl(struct device *dev, unsigned char *msg, uint msglen)
        }
 
        if (rxlen)
-               bus->drvr->rx_ctlpkts++;
+               bus->rx_ctlpkts++;
        else
-               bus->drvr->rx_ctlerrs++;
+               bus->rx_ctlerrs++;
 
        return rxlen ? (int)rxlen : -ETIMEDOUT;
 }
@@ -3434,7 +3443,7 @@ int brcmf_sdbrcm_bus_init(struct device *dev)
                return 0;
 
        /* Start the watchdog timer */
-       bus->drvr->tickcnt = 0;
+       bus->tickcnt = 0;
        brcmf_sdbrcm_wd_timer(bus, BRCMF_WD_POLL_MS);
 
        down(&bus->sdsem);
@@ -3819,7 +3828,7 @@ brcmf_sdbrcm_watchdog_thread(void *data)
                if (!wait_for_completion_interruptible(&bus->watchdog_wait)) {
                        brcmf_sdbrcm_bus_watchdog(bus);
                        /* Count the tick for reference */
-                       bus->drvr->tickcnt++;
+                       bus->tickcnt++;
                } else
                        break;
        }
@@ -3865,8 +3874,8 @@ static void brcmf_sdbrcm_release(struct brcmf_sdio *bus)
                /* De-register interrupt handler */
                brcmf_sdcard_intr_dereg(bus->sdiodev);
 
-               if (bus->drvr) {
-                       brcmf_detach(bus->drvr);
+               if (bus->sdiodev->bus_if->drvr) {
+                       brcmf_detach(bus->sdiodev->dev);
                        brcmf_sdbrcm_release_dongle(bus);
                        bus->drvr = NULL;
                }
@@ -3971,7 +3980,7 @@ void *brcmf_sdbrcm_probe(u32 regsva, struct brcmf_sdio_dev *sdiodev)
        brcmf_dbg(INFO, "completed!!\n");
 
        /* if firmware path present try to download and bring up bus */
-       ret = brcmf_bus_start(bus->drvr);
+       ret = brcmf_bus_start(bus->sdiodev->dev);
        if (ret != 0) {
                if (ret == -ENOLINK) {
                        brcmf_dbg(ERROR, "dongle is not responding\n");
@@ -3980,7 +3989,7 @@ void *brcmf_sdbrcm_probe(u32 regsva, struct brcmf_sdio_dev *sdiodev)
        }
 
        /* add interface and open for business */
-       if (brcmf_add_if((struct brcmf_info *)bus->drvr, 0, "wlan%d", NULL)) {
+       if (brcmf_add_if(bus->sdiodev->dev, 0, "wlan%d", NULL)) {
                brcmf_dbg(ERROR, "Add primary net device interface failed!!\n");
                goto fail;
        }