Linux wireless drivers development
 help / color / mirror / Atom feed
* [PATCH 1/6] wl12xx: don't indicate up PS-filtered dummy packets
@ 2011-08-25  9:43 Arik Nemtsov
  2011-08-25  9:43 ` [PATCH 2/6] wl12xx: AP mode - don't regulate FW blocks for non-active STAs Arik Nemtsov
                   ` (5 more replies)
  0 siblings, 6 replies; 10+ messages in thread
From: Arik Nemtsov @ 2011-08-25  9:43 UTC (permalink / raw)
  To: linux-wireless; +Cc: Luciano Coelho, Arik Nemtsov

Dummy packets are currently only sent on the system_hlid link. The
system_hlid link should never be filtered for PS (as it is not
a STA link). Even so, for correctness, don't indicate dummy packets up.
The skb does not belong to mac80211 and as such does not contain a
correct skb->cb.

Signed-off-by: Arik Nemtsov <arik@wizery.com>
---
 drivers/net/wireless/wl12xx/ps.c |    8 ++++++--
 drivers/net/wireless/wl12xx/tx.c |    2 +-
 drivers/net/wireless/wl12xx/tx.h |    1 +
 3 files changed, 8 insertions(+), 3 deletions(-)

diff --git a/drivers/net/wireless/wl12xx/ps.c b/drivers/net/wireless/wl12xx/ps.c
index 4b720b1..c15ebf2 100644
--- a/drivers/net/wireless/wl12xx/ps.c
+++ b/drivers/net/wireless/wl12xx/ps.c
@@ -199,15 +199,19 @@ static void wl1271_ps_filter_frames(struct wl1271 *wl, u8 hlid)
 	unsigned long flags;
 	int filtered[NUM_TX_QUEUES];
 
-	/* filter all frames currently the low level queus for this hlid */
+	/* filter all frames currently in the low level queues for this hlid */
 	for (i = 0; i < NUM_TX_QUEUES; i++) {
 		filtered[i] = 0;
 		while ((skb = skb_dequeue(&wl->links[hlid].tx_queue[i]))) {
+			filtered[i]++;
+
+			if (WARN_ON(wl12xx_is_dummy_packet(wl, skb)))
+				continue;
+
 			info = IEEE80211_SKB_CB(skb);
 			info->flags |= IEEE80211_TX_STAT_TX_FILTERED;
 			info->status.rates[0].idx = -1;
 			ieee80211_tx_status_ni(wl->hw, skb);
-			filtered[i]++;
 		}
 	}
 
diff --git a/drivers/net/wireless/wl12xx/tx.c b/drivers/net/wireless/wl12xx/tx.c
index 0f15785..eb98832 100644
--- a/drivers/net/wireless/wl12xx/tx.c
+++ b/drivers/net/wireless/wl12xx/tx.c
@@ -143,7 +143,7 @@ static void wl1271_tx_regulate_link(struct wl1271 *wl, u8 hlid)
 		wl1271_ps_link_start(wl, hlid, true);
 }
 
-static bool wl12xx_is_dummy_packet(struct wl1271 *wl, struct sk_buff *skb)
+bool wl12xx_is_dummy_packet(struct wl1271 *wl, struct sk_buff *skb)
 {
 	return wl->dummy_packet == skb;
 }
diff --git a/drivers/net/wireless/wl12xx/tx.h b/drivers/net/wireless/wl12xx/tx.h
index 7da35c0..1515f4a 100644
--- a/drivers/net/wireless/wl12xx/tx.h
+++ b/drivers/net/wireless/wl12xx/tx.h
@@ -213,5 +213,6 @@ u32 wl1271_tx_min_rate_get(struct wl1271 *wl);
 u8 wl12xx_tx_get_hlid_ap(struct wl1271 *wl, struct sk_buff *skb);
 void wl1271_tx_reset_link_queues(struct wl1271 *wl, u8 hlid);
 void wl1271_handle_tx_low_watermark(struct wl1271 *wl);
+bool wl12xx_is_dummy_packet(struct wl1271 *wl, struct sk_buff *skb);
 
 #endif
-- 
1.7.4.1


^ permalink raw reply related	[flat|nested] 10+ messages in thread

end of thread, other threads:[~2011-09-14  9:56 UTC | newest]

Thread overview: 10+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2011-08-25  9:43 [PATCH 1/6] wl12xx: don't indicate up PS-filtered dummy packets Arik Nemtsov
2011-08-25  9:43 ` [PATCH 2/6] wl12xx: AP mode - don't regulate FW blocks for non-active STAs Arik Nemtsov
2011-08-25 10:05   ` Kalle Valo
2011-09-14  9:44     ` Arik Nemtsov
2011-09-14  9:56       ` Luciano Coelho
2011-08-25  9:43 ` [PATCH 3/6] wl12xx: support up to 8 stations in AP-mode Arik Nemtsov
2011-08-25  9:43 ` [PATCH 4/6] wl12xx: don't regulate links when a single STA is connected Arik Nemtsov
2011-08-25  9:43 ` [PATCH 5/6] wl12xx: AP mode - enable the BA constraint event from the FW Arik Nemtsov
2011-08-25  9:43 ` [PATCH 6/6] wl12xx: AP mode - clean BA and queue state in tx_reset Arik Nemtsov
2011-09-14  9:56 ` [PATCH 1/6] wl12xx: don't indicate up PS-filtered dummy packets Luciano Coelho

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox