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
This commit is contained in:
mentor 2007-12-23 20:11:05 +00:00
parent 987156394d
commit 6d28f9cb8e
5 changed files with 29 additions and 24 deletions

View 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 */ 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 #ifdef ATH_SUPERG_FF

View File

@ -232,8 +232,7 @@ ieee80211_hardstart(struct sk_buff *skb, struct net_device *dev)
if (vap->iv_opmode == IEEE80211_M_MONITOR) { if (vap->iv_opmode == IEEE80211_M_MONITOR) {
ieee80211_monitor_encap(vap, skb); ieee80211_monitor_encap(vap, skb);
ieee80211_parent_queue_xmit(skb); return ieee80211_parent_queue_xmit(skb);
return 0;
} }
/* Cancel any running BG scan */ /* 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); ni = ieee80211_find_txnode(vap, vap->wds_mac);
else else
ni = ieee80211_find_txnode(vap, eh->ether_dhost); ni = ieee80211_find_txnode(vap, eh->ether_dhost);
if (ni == NULL) { if (ni == NULL) {
/* NB: ieee80211_find_txnode does stat+msg */ /* NB: ieee80211_find_txnode does stat+msg */
goto bad; goto bad;
} }
/* calculate priority so drivers can find the TX queue */ /* calculate priority so drivers can find the TX queue */
if (ieee80211_classify(ni, skb)) { if (ieee80211_classify(ni, skb)) {
IEEE80211_NOTE(vap, IEEE80211_MSG_OUTPUT, ni, 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 */ /* XXXAPSD: assuming triggerable means deliverable */
M_FLAG_SET(skb, M_UAPSD); M_FLAG_SET(skb, M_UAPSD);
} else if ((ni->ni_flags & IEEE80211_NODE_PWR_MGT)) { } 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. * on the STA's power save queue and continue.
* We'll get the frame back when the time is right. * We'll get the frame back when the time is right. */
*/
ieee80211_pwrsave(ni, skb);
ieee80211_unref_node(&ni); ieee80211_unref_node(&ni);
return 0; return ieee80211_pwrsave(skb);
} }
dev->trans_start = jiffies; dev->trans_start = jiffies;
@ -293,13 +289,13 @@ ieee80211_hardstart(struct sk_buff *skb, struct net_device *dev)
#endif /* #ifdef IEEE80211_DEBUG_REFCNT */ #endif /* #ifdef IEEE80211_DEBUG_REFCNT */
SKB_CB(skb1)->ni = ieee80211_find_txnode(vap->iv_xrvap, SKB_CB(skb1)->ni = ieee80211_find_txnode(vap->iv_xrvap,
eh->ether_dhost); eh->ether_dhost);
ieee80211_parent_queue_xmit(skb1); /* Ignore this return code. */
(void)ieee80211_parent_queue_xmit(skb1);
} }
} }
#endif #endif
ieee80211_parent_queue_xmit(skb);
ieee80211_unref_node(&ni); ieee80211_unref_node(&ni);
return 0; return ieee80211_parent_queue_xmit(skb);
bad: bad:
if (skb != NULL) if (skb != NULL)
@ -309,8 +305,9 @@ bad:
return 0; 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; struct ieee80211vap *vap = skb->dev->priv;
int ret;
vap->iv_devstats.tx_packets++; vap->iv_devstats.tx_packets++;
vap->iv_devstats.tx_bytes += skb->len; 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 */ /* Dispatch the packet to the parent device */
skb->dev = vap->iv_ic->ic_dev; 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++; vap->iv_devstats.tx_dropped++;
return ret;
} }
/* /*

View File

@ -52,6 +52,11 @@
#include <net80211/ieee80211_var.h> #include <net80211/ieee80211_var.h>
#include <net80211/ieee80211_proto.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); static void ieee80211_set_tim(struct ieee80211_node *ni, int set);
void 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 * The new packet is placed on the node's saved queue, and the TIM
* is changed, if necessary. * is changed, if necessary.
*/ */
void int
ieee80211_pwrsave(struct ieee80211_node *ni, struct sk_buff *skb) ieee80211_pwrsave(struct sk_buff *skb)
{ {
struct ieee80211_node *ni = SKB_CB(skb)->ni;
struct ieee80211vap *vap = ni->ni_vap; struct ieee80211vap *vap = ni->ni_vap;
struct ieee80211com *ic = ni->ni_ic; struct ieee80211com *ic = ni->ni_ic;
struct sk_buff *tail; struct sk_buff *tail;
@ -226,7 +232,7 @@ ieee80211_pwrsave(struct ieee80211_node *ni, struct sk_buff *skb)
#endif #endif
ieee80211_unref_node(&SKB_CB(skb)->ni); ieee80211_unref_node(&SKB_CB(skb)->ni);
ieee80211_dev_kfree_skb(&skb); 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) if (qlen == 1 && vap->iv_set_tim != NULL)
vap->iv_set_tim(ni, 1); 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 */ skb->dev = vap->iv_dev; /* XXX? unnecessary */
#endif #endif
ieee80211_parent_queue_xmit(skb); (void)ieee80211_parent_queue_xmit(skb);
} }
vap->iv_set_tim(ni, 0); vap->iv_set_tim(ni, 0);
} }
@ -372,7 +380,7 @@ ieee80211_sta_pwrsave(struct ieee80211vap *vap, int enable)
IEEE80211_NODE_SAVEQ_UNLOCK_IRQ(ni); IEEE80211_NODE_SAVEQ_UNLOCK_IRQ(ni);
if (skb == NULL) if (skb == NULL)
break; break;
ieee80211_parent_queue_xmit(skb); (void)ieee80211_parent_queue_xmit(skb);
} }
} }
} else { } else {

View File

@ -47,7 +47,7 @@ struct ieee80211_node;
int ieee80211_node_saveq_drain(struct ieee80211_node *); int ieee80211_node_saveq_drain(struct ieee80211_node *);
int ieee80211_node_saveq_age(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_node_pwrsave(struct ieee80211_node *, int);
void ieee80211_sta_pwrsave(struct ieee80211vap *, int); void ieee80211_sta_pwrsave(struct ieee80211vap *, int);
#endif /* _NET80211_IEEE80211_POWER_H_ */ #endif /* _NET80211_IEEE80211_POWER_H_ */

View 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_saveath(struct ieee80211_node *, u_int8_t *);
void ieee80211_recv_mgmt(struct ieee80211_node *, struct sk_buff *, void ieee80211_recv_mgmt(struct ieee80211_node *, struct sk_buff *,
int, int, u_int64_t); int, int, u_int64_t);
void ieee80211_sta_pwrsave(struct ieee80211vap *, int);
int ieee80211_hardstart(struct sk_buff *, struct net_device *); 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_nulldata(struct ieee80211_node *);
int ieee80211_send_qosnulldata(struct ieee80211_node *, int); int ieee80211_send_qosnulldata(struct ieee80211_node *, int);
int ieee80211_send_mgmt(struct ieee80211_node *, int, 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 bssid[IEEE80211_ADDR_LEN],
const u_int8_t *, size_t, const void *, size_t); const u_int8_t *, size_t, const void *, size_t);
struct sk_buff *ieee80211_encap(struct ieee80211_node *, struct sk_buff *, int *); 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_reset_erp(struct ieee80211com *, enum ieee80211_phymode);
void ieee80211_set_shortslottime(struct ieee80211com *, int); void ieee80211_set_shortslottime(struct ieee80211com *, int);