brcm80211: fmac: move tx flow ctrl flag to bus layer
authorFranky Lin <frankyl@broadcom.com>
Sat, 17 Dec 2011 02:37:08 +0000 (18:37 -0800)
committerJohn W. Linville <linville@tuxdriver.com>
Mon, 19 Dec 2011 19:40:45 +0000 (14:40 -0500)
txoff is the flow control flag for transmit used in sdio layer.
Move it to bus layer data structure brcmf_sdio. Also flag
management code is moved out of brcmf_txflowcontrol(). This is
part of the fullmac bus interface refactoring.

Reviewed-by: Pieter-Paul Giesberts <pieterpg@broadcom.com>
Reviewed-by: Arend van Spriel <arend@broadcom.com>
Reviewed-by: Alwin Beukers <alwin@broadcom.com>
Signed-off-by: Franky Lin <frankyl@broadcom.com>
Signed-off-by: John W. Linville <linville@tuxdriver.com>
drivers/net/wireless/brcm80211/brcmfmac/dhd.h
drivers/net/wireless/brcm80211/brcmfmac/dhd_linux.c
drivers/net/wireless/brcm80211/brcmfmac/dhd_sdio.c

index 746156797bcc64b6a8fcbbe236fca0be0dc31e83..980bf70d89fd425d63bd51026eedacc2b638a0a4 100644 (file)
@@ -597,7 +597,6 @@ struct brcmf_pub {
        struct device *dev;             /* fullmac dongle device pointer */
 
        /* Internal brcmf items */
-       bool txoff;             /* Transmit flow-controlled */
        uint hdrlen;            /* Total BRCMF header length (proto + bus) */
        uint rxsz;              /* Rx buffer size bus module should use */
        u8 wme_dp;              /* wme discard priority */
index 1ce6322882618b6e86ae4ec58c814889b9023441..130cab1e2a24e843cd72d2e1af5f93017e639cf4 100644 (file)
@@ -356,7 +356,6 @@ void brcmf_txflowcontrol(struct device *dev, int ifidx, bool state)
 
        brcmf_dbg(TRACE, "Enter\n");
 
-       drvr->txoff = state;
        ndev = drvr->iflist[ifidx]->ndev;
        if (state == ON)
                netif_stop_queue(ndev);
index e0456e96cbd17336c640764cbf5ea11379c179fc..a7fe00fc6843b6dbd5179a8bfb0467c8beeba938 100644 (file)
@@ -575,6 +575,8 @@ struct brcmf_sdio {
 
        const struct firmware *firmware;
        u32 fw_ptr;
+
+       bool txoff;             /* Transmit flow-controlled */
 };
 
 /* clkstate */
@@ -2297,8 +2299,10 @@ static uint brcmf_sdbrcm_sendfromq(struct brcmf_sdio *bus, uint maxframes)
        /* Deflow-control stack if needed */
        if (drvr->bus_if->drvr_up &&
            (drvr->bus_if->state == BRCMF_BUS_DATA) &&
-           drvr->txoff && (pktq_len(&bus->txq) < TXLOW))
+           bus->txoff && (pktq_len(&bus->txq) < TXLOW)) {
+               bus->txoff = OFF;
                brcmf_txflowcontrol(bus->sdiodev->dev, 0, OFF);
+       }
 
        return cnt;
 }
@@ -2611,8 +2615,10 @@ int brcmf_sdbrcm_bus_txdata(struct device *dev, struct sk_buff *pkt)
        }
        spin_unlock_bh(&bus->txqlock);
 
-       if (pktq_len(&bus->txq) >= TXHI)
+       if (pktq_len(&bus->txq) >= TXHI) {
+               bus->txoff = ON;
                brcmf_txflowcontrol(bus->sdiodev->dev, 0, ON);
+       }
 
 #ifdef BCMDBG
        if (pktq_plen(&bus->txq, prec) > qcount[prec])