sta_info.c (ef04a29737dd08352fdf6431d119ca636d664efe) | sta_info.c (0a1cb80975b67e29d572b28c1621203d1d74f4d3) |
---|---|
1/* 2 * Copyright 2002-2005, Instant802 Networks, Inc. 3 * Copyright 2006-2007 Jiri Benc <jbenc@suse.cz> 4 * 5 * This program is free software; you can redistribute it and/or modify 6 * it under the terms of the GNU General Public License version 2 as 7 * published by the Free Software Foundation. 8 */ --- 1213 unchanged lines hidden (view full) --- 1222 kfree_skb(skb); 1223 return; 1224 } 1225 1226 ieee80211_xmit(sdata, skb, chanctx_conf->def.chan->band); 1227 rcu_read_unlock(); 1228} 1229 | 1/* 2 * Copyright 2002-2005, Instant802 Networks, Inc. 3 * Copyright 2006-2007 Jiri Benc <jbenc@suse.cz> 4 * 5 * This program is free software; you can redistribute it and/or modify 6 * it under the terms of the GNU General Public License version 2 as 7 * published by the Free Software Foundation. 8 */ --- 1213 unchanged lines hidden (view full) --- 1222 kfree_skb(skb); 1223 return; 1224 } 1225 1226 ieee80211_xmit(sdata, skb, chanctx_conf->def.chan->band); 1227 rcu_read_unlock(); 1228} 1229 |
1230static int find_highest_prio_tid(unsigned long tids) 1231{ 1232 /* lower 3 TIDs aren't ordered perfectly */ 1233 if (tids & 0xF8) 1234 return fls(tids) - 1; 1235 /* TID 0 is BE just like TID 3 */ 1236 if (tids & BIT(0)) 1237 return 0; 1238 return fls(tids) - 1; 1239} 1240 |
|
1230static void 1231ieee80211_sta_ps_deliver_response(struct sta_info *sta, 1232 int n_frames, u8 ignored_acs, 1233 enum ieee80211_frame_release_type reason) 1234{ 1235 struct ieee80211_sub_if_data *sdata = sta->sdata; 1236 struct ieee80211_local *local = sdata->local; 1237 bool found = false; --- 45 unchanged lines hidden (view full) --- 1283 * If the driver has data on more than one TID then 1284 * certainly there's more data if we release just a 1285 * single frame now (from a single TID). 1286 */ 1287 if (reason == IEEE80211_FRAME_RELEASE_PSPOLL && 1288 hweight16(driver_release_tids) > 1) { 1289 more_data = true; 1290 driver_release_tids = | 1241static void 1242ieee80211_sta_ps_deliver_response(struct sta_info *sta, 1243 int n_frames, u8 ignored_acs, 1244 enum ieee80211_frame_release_type reason) 1245{ 1246 struct ieee80211_sub_if_data *sdata = sta->sdata; 1247 struct ieee80211_local *local = sdata->local; 1248 bool found = false; --- 45 unchanged lines hidden (view full) --- 1294 * If the driver has data on more than one TID then 1295 * certainly there's more data if we release just a 1296 * single frame now (from a single TID). 1297 */ 1298 if (reason == IEEE80211_FRAME_RELEASE_PSPOLL && 1299 hweight16(driver_release_tids) > 1) { 1300 more_data = true; 1301 driver_release_tids = |
1291 BIT(ffs(driver_release_tids) - 1); | 1302 BIT(find_highest_prio_tid( 1303 driver_release_tids)); |
1292 break; 1293 } 1294 } 1295 1296 if (!skb_queue_empty(&sta->tx_filtered[ac]) || 1297 !skb_queue_empty(&sta->ps_tx_buf[ac])) { 1298 more_data = true; 1299 break; --- 333 unchanged lines hidden --- | 1304 break; 1305 } 1306 } 1307 1308 if (!skb_queue_empty(&sta->tx_filtered[ac]) || 1309 !skb_queue_empty(&sta->ps_tx_buf[ac])) { 1310 more_data = true; 1311 break; --- 333 unchanged lines hidden --- |