From d041782c503a1967d40fd6273f22f3cb3d53b4b3 Mon Sep 17 00:00:00 2001 From: Bartosz Markowski Date: Wed, 29 Feb 2012 15:15:30 +0100 Subject: cw1200: Skip packets with Rssi equal to zero. Do not handle beacons and probe responses with wrong Rssi value. This is a workaround for FW. Sometimes Rssi value in frames from FW is zero. It causes confusion in userspace, so it is better to detect malformed packets and skip them. ST-Ericsson ID: 412823 ST-Ericsson FOSS-OUT ID: NA Change-Id: Iac97485dc87f50143e75625b22e36b42381da25f Signed-off-by: Marek Puzyniak Signed-off-by: Bartosz Markowski Reviewed-on: http://gerrit.lud.stericsson.com/gerrit/47567 Reviewed-by: QATOOLS Reviewed-by: Bartosz MARKOWSKI Tested-by: Bartosz MARKOWSKI --- drivers/staging/cw1200/wsm.c | 11 +++++++++++ 1 file changed, 11 insertions(+) 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; -- cgit v1.2.3