summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--drivers/staging/cw1200/wsm.c11
1 files changed, 11 insertions, 0 deletions
diff --git a/drivers/staging/cw1200/wsm.c b/drivers/staging/cw1200/wsm.c
index bb94d19da08..085868b532e 100644
--- a/drivers/staging/cw1200/wsm.c
+++ b/drivers/staging/cw1200/wsm.c
@@ -858,6 +858,7 @@ static int wsm_receive_indication(struct cw1200_common *priv,
priv->rx_timestamp = jiffies;
if (priv->wsm_cbc.rx) {
struct wsm_rx rx;
+ struct ieee80211_hdr *hdr;
size_t hdr_len;
__le16 fctl;
@@ -866,6 +867,16 @@ static int wsm_receive_indication(struct cw1200_common *priv,
rx.rxedRate = WSM_GET8(buf);
rx.rcpiRssi = WSM_GET8(buf);
rx.flags = WSM_GET32(buf);
+
+ /* FW Workaround: Drop probe resp or
+ beacon when RSSI is 0 */
+ hdr = (struct ieee80211_hdr *) (*skb_p)->data;
+
+ if (!rx.rcpiRssi &&
+ (ieee80211_is_probe_resp(hdr->frame_control) ||
+ ieee80211_is_beacon(hdr->frame_control)))
+ return 0;
+
rx.link_id = link_id;
fctl = *(__le16 *)buf->data;
hdr_len = buf->data - buf->begin;