Have net80211 hard_start functions return NETDEV_TX_* codes; tidy some headers in...
authormentor <mentor@0192ed92-7a03-0410-a25b-9323aeb14dbd>
Sun, 23 Dec 2007 20:11:05 +0000 (20:11 +0000)
committermentor <mentor@0192ed92-7a03-0410-a25b-9323aeb14dbd>
Sun, 23 Dec 2007 20:11:05 +0000 (20:11 +0000)
git-svn-id: http://madwifi-project.org/svn/madwifi/trunk@3075 0192ed92-7a03-0410-a25b-9323aeb14dbd

net80211/ieee80211_input.c
net80211/ieee80211_output.c
net80211/ieee80211_power.c
net80211/ieee80211_power.h
net80211/ieee80211_proto.h

index 6a6d0d7eb89641785359d475a9ebb0aad1279e32..f9ae675c6f9d0fb2235f5427bb3a2806ce68c905 100644 (file)
@@ -3731,7 +3731,7 @@ ieee80211_recv_pspoll(struct ieee80211_node *ni, struct sk_buff *skb0)
        }
        M_PWR_SAV_SET(skb);             /* ensure MORE_DATA bit is set correctly */
 
-       ieee80211_parent_queue_xmit(skb);       /* Submit to parent device, including updating stats */
+       (void)ieee80211_parent_queue_xmit(skb); /* Submit to parent device, including updating stats */
 }
 
 #ifdef ATH_SUPERG_FF
index 0f76816916219b977c8959b9228595f8a445649b..955b77e682036e7e23a798bc21d2e5cc1a7526a2 100644 (file)
@@ -232,8 +232,7 @@ ieee80211_hardstart(struct sk_buff *skb, struct net_device *dev)
        
        if (vap->iv_opmode == IEEE80211_M_MONITOR) {
                ieee80211_monitor_encap(vap, skb);
-               ieee80211_parent_queue_xmit(skb);
-               return 0;
+               return ieee80211_parent_queue_xmit(skb);
        }
        
        /* Cancel any running BG scan */
@@ -248,11 +247,11 @@ ieee80211_hardstart(struct sk_buff *skb, struct net_device *dev)
                ni = ieee80211_find_txnode(vap, vap->wds_mac);
        else
                ni = ieee80211_find_txnode(vap, eh->ether_dhost);
-
        if (ni == NULL) {
                /* NB: ieee80211_find_txnode does stat+msg */
                goto bad;
        }
+
        /* calculate priority so drivers can find the TX queue */
        if (ieee80211_classify(ni, skb)) {
                IEEE80211_NOTE(vap, IEEE80211_MSG_OUTPUT, ni,
@@ -268,14 +267,11 @@ ieee80211_hardstart(struct sk_buff *skb, struct net_device *dev)
                /* XXXAPSD: assuming triggerable means deliverable */
                M_FLAG_SET(skb, M_UAPSD);
        } else if ((ni->ni_flags & IEEE80211_NODE_PWR_MGT)) {
-               /*
-                * Station in power save mode; stick the frame
+               /* Station in power save mode; stick the frame
                 * on the STA's power save queue and continue.
-                * We'll get the frame back when the time is right.
-                */
-               ieee80211_pwrsave(ni, skb);
+                * We'll get the frame back when the time is right. */
                ieee80211_unref_node(&ni);
-               return 0;
+               return ieee80211_pwrsave(skb);
        }
 
        dev->trans_start = jiffies;
@@ -293,13 +289,13 @@ ieee80211_hardstart(struct sk_buff *skb, struct net_device *dev)
 #endif /* #ifdef IEEE80211_DEBUG_REFCNT */
                        SKB_CB(skb1)->ni = ieee80211_find_txnode(vap->iv_xrvap, 
                                                       eh->ether_dhost);
-                       ieee80211_parent_queue_xmit(skb1);
+                       /* Ignore this return code. */
+                       (void)ieee80211_parent_queue_xmit(skb1);
                }
        }
 #endif
-       ieee80211_parent_queue_xmit(skb);
        ieee80211_unref_node(&ni);
-       return 0;
+       return ieee80211_parent_queue_xmit(skb);
 
 bad:
        if (skb != NULL)
@@ -309,8 +305,9 @@ bad:
        return 0;
 }
 
-void ieee80211_parent_queue_xmit(struct sk_buff *skb) {
+int ieee80211_parent_queue_xmit(struct sk_buff *skb) {
        struct ieee80211vap *vap = skb->dev->priv;
+       int ret;
 
        vap->iv_devstats.tx_packets++;
        vap->iv_devstats.tx_bytes += skb->len;
@@ -319,8 +316,10 @@ void ieee80211_parent_queue_xmit(struct sk_buff *skb) {
        /* Dispatch the packet to the parent device */
        skb->dev = vap->iv_ic->ic_dev;
 
-       if (dev_queue_xmit(skb) == NET_XMIT_DROP)
+       if ((ret = dev_queue_xmit(skb)) == NET_XMIT_DROP)
                vap->iv_devstats.tx_dropped++;
+
+       return ret;
 }
 
 /*
index 6a01cc72b446cddeca48bb815d1d7297f8da3607..817ea6a7c9373d79f463209f18573eb1773270fc 100644 (file)
 #include <net80211/ieee80211_var.h>
 #include <net80211/ieee80211_proto.h>
 
+#ifndef        NETDEV_TX_OK
+#define        NETDEV_TX_OK    0
+#define        NETDEV_TX_BUSY  1
+#endif
+
 static void ieee80211_set_tim(struct ieee80211_node *ni, int set);
 
 void
@@ -205,9 +210,10 @@ ieee80211_set_tim(struct ieee80211_node *ni, int set)
  * The new packet is placed on the node's saved queue, and the TIM
  * is changed, if necessary.
  */
-void
-ieee80211_pwrsave(struct ieee80211_node *ni, struct sk_buff *skb)
+int
+ieee80211_pwrsave(struct sk_buff *skb)
 {
+       struct ieee80211_node *ni = SKB_CB(skb)->ni;
        struct ieee80211vap *vap = ni->ni_vap;
        struct ieee80211com *ic = ni->ni_ic;
        struct sk_buff *tail;
@@ -226,7 +232,7 @@ ieee80211_pwrsave(struct ieee80211_node *ni, struct sk_buff *skb)
 #endif
                ieee80211_unref_node(&SKB_CB(skb)->ni);
                ieee80211_dev_kfree_skb(&skb);
-               return;
+               return NETDEV_TX_BUSY;
        }
 
        /*
@@ -253,6 +259,8 @@ ieee80211_pwrsave(struct ieee80211_node *ni, struct sk_buff *skb)
 
        if (qlen == 1 && vap->iv_set_tim != NULL)
                vap->iv_set_tim(ni, 1);
+
+       return NETDEV_TX_OK;
 }
 
 /*
@@ -331,7 +339,7 @@ ieee80211_node_pwrsave(struct ieee80211_node *ni, int enable)
                                skb->dev = vap->iv_dev;         /* XXX? unnecessary */
 #endif
 
-                       ieee80211_parent_queue_xmit(skb);
+                       (void)ieee80211_parent_queue_xmit(skb);
                }
                vap->iv_set_tim(ni, 0);
        }
@@ -372,7 +380,7 @@ ieee80211_sta_pwrsave(struct ieee80211vap *vap, int enable)
                                IEEE80211_NODE_SAVEQ_UNLOCK_IRQ(ni);
                                if (skb == NULL)
                                        break;
-                               ieee80211_parent_queue_xmit(skb);
+                               (void)ieee80211_parent_queue_xmit(skb);
                        }
                }
        } else {
index 70fa9998baf5c6770b7184147a43c44f298837ce..8613cbf858a7bb4d81b52b1442e053d42bacc7b4 100644 (file)
@@ -47,7 +47,7 @@ struct ieee80211_node;
 
 int    ieee80211_node_saveq_drain(struct ieee80211_node *);
 int    ieee80211_node_saveq_age(struct ieee80211_node *);
-void   ieee80211_pwrsave(struct ieee80211_node *, struct sk_buff *);
+int    ieee80211_pwrsave(struct sk_buff *);
 void   ieee80211_node_pwrsave(struct ieee80211_node *, int);
 void   ieee80211_sta_pwrsave(struct ieee80211vap *, int);
 #endif /* _NET80211_IEEE80211_POWER_H_ */
index 701da215a80f41400a5882666653d651378f45a5..eae3564dfc87f363be146b196e23683ddcd43a06 100644 (file)
@@ -71,9 +71,8 @@ void ieee80211_saveie(u_int8_t **, const u_int8_t *);
 void ieee80211_saveath(struct ieee80211_node *, u_int8_t *);
 void ieee80211_recv_mgmt(struct ieee80211_node *, struct sk_buff *,
        int, int, u_int64_t);
-void ieee80211_sta_pwrsave(struct ieee80211vap *, int);
 int ieee80211_hardstart(struct sk_buff *, struct net_device *);
-void ieee80211_parent_queue_xmit(struct sk_buff *);
+int ieee80211_parent_queue_xmit(struct sk_buff *);
 int ieee80211_send_nulldata(struct ieee80211_node *);
 int ieee80211_send_qosnulldata(struct ieee80211_node *, int);
 int ieee80211_send_mgmt(struct ieee80211_node *, int, int);
@@ -83,7 +82,6 @@ int ieee80211_send_probereq(struct ieee80211_node *,
        const u_int8_t bssid[IEEE80211_ADDR_LEN],
        const u_int8_t *, size_t, const void *, size_t);
 struct sk_buff *ieee80211_encap(struct ieee80211_node *, struct sk_buff *, int *);
-void ieee80211_pwrsave(struct ieee80211_node *, struct sk_buff *);
 
 void ieee80211_reset_erp(struct ieee80211com *, enum ieee80211_phymode);
 void ieee80211_set_shortslottime(struct ieee80211com *, int);