diff options
author | Bartosz Markowski <bartosz.markowski@tieto.com> | 2012-02-29 15:15:30 +0100 |
---|---|---|
committer | Philippe Langlais <philippe.langlais@stericsson.com> | 2012-05-22 11:06:48 +0200 |
commit | d041782c503a1967d40fd6273f22f3cb3d53b4b3 (patch) | |
tree | 72319990ed4a5f6e2096a95edd3dbc9b4fe383eb | |
parent | 1d980979fd378e33bbb52c21961c63687679b3db (diff) |
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 <marek.puzyniak@tieto.com>
Signed-off-by: Bartosz Markowski <bartosz.markowksi@tieto.com>
Reviewed-on: http://gerrit.lud.stericsson.com/gerrit/47567
Reviewed-by: QATOOLS
Reviewed-by: Bartosz MARKOWSKI <bartosz.markowski@tieto.com>
Tested-by: Bartosz MARKOWSKI <bartosz.markowski@tieto.com>
-rw-r--r-- | drivers/staging/cw1200/wsm.c | 11 |
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; |