summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorBartosz Markowski <bartosz.markowski@tieto.com>2012-02-29 15:15:30 +0100
committerPhilippe Langlais <philippe.langlais@stericsson.com>2012-05-22 11:06:48 +0200
commitd041782c503a1967d40fd6273f22f3cb3d53b4b3 (patch)
tree72319990ed4a5f6e2096a95edd3dbc9b4fe383eb
parent1d980979fd378e33bbb52c21961c63687679b3db (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.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;