Ticket #417: madwifi-parent_queue.2.diff
| File madwifi-parent_queue.2.diff, 3.5 kB (added by mentor, 6 years ago) |
|---|
-
net80211/ieee80211_input.c
old new 53 53 #include "if_athproto.h" 54 54 55 55 #include <net80211/ieee80211_var.h> 56 #include <net80211/ieee80211_proto.h> 56 57 57 58 #ifdef IEEE80211_DEBUG 58 59 /* … … 3317 3318 vap->iv_set_tim(ni, 0); 3318 3319 } 3319 3320 M_PWR_SAV_SET(skb); /* bypass PS handling */ 3320 skb->dev = vap->iv_dev; /* XXX needed? */3321 (void) dev_queue_xmit(skb); /* resubmit*/3321 3322 ieee80211_parent_queue_xmit(skb); /* Submit to parent device, including updating stats */ 3322 3323 } 3323 3324 3324 3325 #ifdef ATH_SUPERG_FF -
net80211/ieee80211_output.c
old new 252 252 "%s: discard, classification failure", __func__); 253 253 goto bad; 254 254 } 255 256 cb->ni = ni; 257 skb->dev = parent; 258 255 259 /* power-save checks */ 256 260 if (WME_UAPSD_AC_CAN_TRIGGER(skb->priority, ni)) { 257 261 /* U-APSD power save queue */ 258 262 /* XXXAPSD: assuming triggerable means deliverable */ 259 263 M_FLAG_SET(skb, M_UAPSD); 260 } else if ((ni->ni_flags & IEEE80211_NODE_PWR_MGT) && !M_PWR_SAV_GET(skb)) {264 } else if ((ni->ni_flags & IEEE80211_NODE_PWR_MGT)) { 261 265 /* 262 266 * Station in power save mode; stick the frame 263 267 * on the sta's power save queue and continue. … … 266 270 ieee80211_pwrsave(ni, skb); 267 271 goto reclaim; 268 272 } 269 M_FLAG_KEEP_ONLY(skb, M_UAPSD | M_PWR_SAV);270 cb->ni = ni;271 273 272 vap->iv_devstats.tx_packets++;273 vap->iv_devstats.tx_bytes += skb->len;274 ic->ic_lastdata = jiffies;275 276 skb->dev = parent;277 274 #ifdef ATH_SUPERG_XR 278 275 /* 279 276 * broadcast/multicast packets need to be sent on XR vap in addition to … … 293 290 } 294 291 } 295 292 #endif 296 (void) dev_queue_xmit(skb);293 ieee80211_parent_queue_xmit(skb); 297 294 return 0; 298 295 bad: 299 296 if (skb != NULL) … … 304 301 return 0; 305 302 } 306 303 304 void ieee80211_parent_queue_xmit(struct sk_buff *skb) { 305 struct ieee80211vap *vap = skb->dev->priv; 306 struct ieee80211com *ic = vap->iv_ic; 307 308 vap->iv_devstats.tx_packets++; 309 vap->iv_devstats.tx_bytes += skb->len; 310 ic->ic_lastdata = jiffies; 311 312 (void) dev_queue_xmit(skb); 313 } 314 307 315 /* 308 316 * Set the direction field and address fields of an outgoing 309 317 * non-QoS frame. Note this should be called early on in -
net80211/ieee80211_power.c
old new 48 48 #include "if_media.h" 49 49 50 50 #include <net80211/ieee80211_var.h> 51 #include <net80211/ieee80211_proto.h> 51 52 52 53 static void ieee80211_set_tim(struct ieee80211_node *ni, int set); 53 54 … … 316 317 #else 317 318 skb->dev = vap->iv_dev; /* XXX? unnecessary */ 318 319 #endif 319 dev_queue_xmit(skb); 320 321 ieee80211_parent_queue_xmit(skb); 320 322 } 321 323 vap->iv_set_tim(ni, 0); 322 324 } -
net80211/ieee80211_proto.h
old new 72 72 int, int, u_int32_t); 73 73 void ieee80211_sta_pwrsave(struct ieee80211vap *, int); 74 74 int ieee80211_hardstart(struct sk_buff *, struct net_device *); 75 void ieee80211_parent_queue_xmit(struct sk_buff *); 75 76 int ieee80211_send_nulldata(struct ieee80211_node *); 76 77 int ieee80211_send_qosnulldata(struct ieee80211_node *, int); 77 78 int ieee80211_send_mgmt(struct ieee80211_node *, int, int);
