Commit 441756b6 authored by Ganapathi Bhat's avatar Ganapathi Bhat Committed by Kalle Valo

mwifiex: fix radar detection issue

It's been observed that firmware sends RADAR detected event without
specifying bss_num/bss_type. Also, the event body is empty.
Currently the event is being ignored by driver.

This patch checks on which interface 11H is active, accordingly fills
bss_num/bss_type and handles the event. Condition
"if (le32_to_cpu(rdr_event->passed))" which always fails is also removed.
Signed-off-by: default avatarGanapathi Bhat <gbhat@marvell.com>
Signed-off-by: default avatarAmitkumar Karwar <akarwar@marvell.com>
Signed-off-by: default avatarKalle Valo <kvalo@codeaurora.org>
parent 432da7d2
...@@ -260,7 +260,6 @@ int mwifiex_11h_handle_radar_detected(struct mwifiex_private *priv, ...@@ -260,7 +260,6 @@ int mwifiex_11h_handle_radar_detected(struct mwifiex_private *priv,
rdr_event = (void *)(skb->data + sizeof(u32)); rdr_event = (void *)(skb->data + sizeof(u32));
if (le32_to_cpu(rdr_event->passed)) {
mwifiex_dbg(priv->adapter, MSG, mwifiex_dbg(priv->adapter, MSG,
"radar detected; indicating kernel\n"); "radar detected; indicating kernel\n");
if (mwifiex_stop_radar_detection(priv, &priv->dfs_chandef)) if (mwifiex_stop_radar_detection(priv, &priv->dfs_chandef))
...@@ -272,10 +271,6 @@ int mwifiex_11h_handle_radar_detected(struct mwifiex_private *priv, ...@@ -272,10 +271,6 @@ int mwifiex_11h_handle_radar_detected(struct mwifiex_private *priv,
rdr_event->reg_domain); rdr_event->reg_domain);
mwifiex_dbg(priv->adapter, MSG, "radar detection type: %d\n", mwifiex_dbg(priv->adapter, MSG, "radar detection type: %d\n",
rdr_event->det_type); rdr_event->det_type);
} else {
mwifiex_dbg(priv->adapter, MSG,
"false radar detection event!\n");
}
return 0; return 0;
} }
......
...@@ -480,13 +480,27 @@ int mwifiex_free_cmd_buffer(struct mwifiex_adapter *adapter) ...@@ -480,13 +480,27 @@ int mwifiex_free_cmd_buffer(struct mwifiex_adapter *adapter)
*/ */
int mwifiex_process_event(struct mwifiex_adapter *adapter) int mwifiex_process_event(struct mwifiex_adapter *adapter)
{ {
int ret; int ret, i;
struct mwifiex_private *priv = struct mwifiex_private *priv =
mwifiex_get_priv(adapter, MWIFIEX_BSS_ROLE_ANY); mwifiex_get_priv(adapter, MWIFIEX_BSS_ROLE_ANY);
struct sk_buff *skb = adapter->event_skb; struct sk_buff *skb = adapter->event_skb;
u32 eventcause = adapter->event_cause; u32 eventcause;
struct mwifiex_rxinfo *rx_info; struct mwifiex_rxinfo *rx_info;
if ((adapter->event_cause & EVENT_ID_MASK) == EVENT_RADAR_DETECTED) {
for (i = 0; i < adapter->priv_num; i++) {
priv = adapter->priv[i];
if (priv && mwifiex_is_11h_active(priv)) {
adapter->event_cause |=
((priv->bss_num & 0xff) << 16) |
((priv->bss_type & 0xff) << 24);
break;
}
}
}
eventcause = adapter->event_cause;
/* Save the last event to debug log */ /* Save the last event to debug log */
adapter->dbg.last_event_index = adapter->dbg.last_event_index =
(adapter->dbg.last_event_index + 1) % DBG_CMD_NUM; (adapter->dbg.last_event_index + 1) % DBG_CMD_NUM;
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment