OSDN Git Service

brcmfmac: rename brcmf_fws_mac_desc_ready()
authorArend van Spriel <arend@broadcom.com>
Thu, 11 Apr 2013 15:12:04 +0000 (17:12 +0200)
committerJohn W. Linville <linville@tuxdriver.com>
Fri, 12 Apr 2013 18:27:56 +0000 (14:27 -0400)
Replace the function by brcmf_fws_mac_desc_closed(). The new function
is used in the transmit path and in the dequeue worker.

Reviewed-by: Hante Meuleman <meuleman@broadcom.com>
Reviewed-by: Pieter-Paul Giesberts <pieterpg@broadcom.com>
Signed-off-by: Arend van Spriel <arend@broadcom.com>
Signed-off-by: John W. Linville <linville@tuxdriver.com>
drivers/net/wireless/brcm80211/brcmfmac/fwsignal.c

index d9572fb..1234de3 100644 (file)
@@ -714,26 +714,19 @@ done:
        return entry;
 }
 
-static bool brcmf_fws_mac_desc_ready(struct brcmf_fws_mac_descriptor *entry,
-                                    int fifo)
+static bool brcmf_fws_mac_desc_closed(struct brcmf_fws_mac_descriptor *entry,
+                                     int fifo)
 {
-       bool ready;
+       bool closed;
 
-       /*
-        * destination entry is ready when firmware says it is OPEN
-        * and there are no packets enqueued for it.
+       /* an entry is closed when the state is closed and
+        * the firmware did not request anything.
         */
-       ready = entry->state == BRCMF_FWS_STATE_OPEN &&
-               !entry->suppressed &&
-               brcmu_pktq_mlen(&entry->psq, 3 << (fifo * 2)) == 0;
+       closed = entry->state == BRCMF_FWS_STATE_CLOSE &&
+                !entry->requested_credit && !entry->requested_packet;
 
-       /*
-        * Or when the destination entry is CLOSED, but firmware has
-        * specifically requested packets for this entry.
-        */
-       ready = ready || (entry->state == BRCMF_FWS_STATE_CLOSE &&
-               (entry->requested_credit + entry->requested_packet));
-       return ready;
+       /* Or firmware does not allow traffic for given fifo */
+       return closed || !(entry->ac_bitmap & BIT(fifo));
 }
 
 static void brcmf_fws_mac_desc_cleanup(struct brcmf_fws_info *fws,
@@ -1086,7 +1079,7 @@ static struct sk_buff *brcmf_fws_deq(struct brcmf_fws_info *fws, int fifo)
 
        for (i = 0; i < num_nodes; i++) {
                entry = &table[(node_pos + i) % num_nodes];
-               if (!entry->occupied)
+               if (!entry->occupied || brcmf_fws_mac_desc_closed(entry, fifo))
                        continue;
 
                if (entry->suppressed)
@@ -1758,7 +1751,9 @@ int brcmf_fws_process_skb(struct brcmf_if *ifp, struct sk_buff *skb)
                  multicast, fifo);
 
        brcmf_fws_lock(drvr, flags);
-       if (!brcmf_fws_mac_desc_ready(skcb->mac, fifo) ||
+       if (skcb->mac->suppressed ||
+           brcmf_fws_mac_desc_closed(skcb->mac, fifo) ||
+           brcmu_pktq_mlen(&skcb->mac->psq, 3 << (fifo * 2)) ||
            (!multicast &&
             brcmf_fws_consume_credit(drvr->fws, fifo, skb) < 0)) {
                /* enqueue the packet in delayQ */