From 6d28f9cb8eeed67a24a19d9bf6e2966ead4e21f6 Mon Sep 17 00:00:00 2001 From: mentor Date: Sun, 23 Dec 2007 20:11:05 +0000 Subject: [PATCH] Have net80211 hard_start functions return NETDEV_TX_* codes; tidy some headers in the process. git-svn-id: http://madwifi-project.org/svn/madwifi/trunk@3075 0192ed92-7a03-0410-a25b-9323aeb14dbd --- net80211/ieee80211_input.c | 2 +- net80211/ieee80211_output.c | 27 +++++++++++++-------------- net80211/ieee80211_power.c | 18 +++++++++++++----- net80211/ieee80211_power.h | 2 +- net80211/ieee80211_proto.h | 4 +--- 5 files changed, 29 insertions(+), 24 deletions(-) diff --git a/net80211/ieee80211_input.c b/net80211/ieee80211_input.c index 6a6d0d7..f9ae675 100644 --- a/net80211/ieee80211_input.c +++ b/net80211/ieee80211_input.c @@ -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 diff --git a/net80211/ieee80211_output.c b/net80211/ieee80211_output.c index 0f76816..955b77e 100644 --- a/net80211/ieee80211_output.c +++ b/net80211/ieee80211_output.c @@ -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; } /* diff --git a/net80211/ieee80211_power.c b/net80211/ieee80211_power.c index 6a01cc7..817ea6a 100644 --- a/net80211/ieee80211_power.c +++ b/net80211/ieee80211_power.c @@ -52,6 +52,11 @@ #include #include +#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 { diff --git a/net80211/ieee80211_power.h b/net80211/ieee80211_power.h index 70fa999..8613cbf 100644 --- a/net80211/ieee80211_power.h +++ b/net80211/ieee80211_power.h @@ -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_ */ diff --git a/net80211/ieee80211_proto.h b/net80211/ieee80211_proto.h index 701da21..eae3564 100644 --- a/net80211/ieee80211_proto.h +++ b/net80211/ieee80211_proto.h @@ -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); -- 2.35.1