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 ---