Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

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

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
Loading
Loading
Loading
Loading
+11 −16
Original line number Diff line number Diff line
@@ -260,7 +260,6 @@ int mwifiex_11h_handle_radar_detected(struct mwifiex_private *priv,

	rdr_event = (void *)(skb->data + sizeof(u32));

	if (le32_to_cpu(rdr_event->passed)) {
	mwifiex_dbg(priv->adapter, MSG,
		    "radar detected; indicating kernel\n");
	if (mwifiex_stop_radar_detection(priv, &priv->dfs_chandef))
@@ -272,10 +271,6 @@ int mwifiex_11h_handle_radar_detected(struct mwifiex_private *priv,
		    rdr_event->reg_domain);
	mwifiex_dbg(priv->adapter, MSG, "radar detection type: %d\n",
		    rdr_event->det_type);
	} else {
		mwifiex_dbg(priv->adapter, MSG,
			    "false radar detection event!\n");
	}

	return 0;
}
+16 −2
Original line number Diff line number Diff line
@@ -480,13 +480,27 @@ int mwifiex_free_cmd_buffer(struct mwifiex_adapter *adapter)
 */
int mwifiex_process_event(struct mwifiex_adapter *adapter)
{
	int ret;
	int ret, i;
	struct mwifiex_private *priv =
		mwifiex_get_priv(adapter, MWIFIEX_BSS_ROLE_ANY);
	struct sk_buff *skb = adapter->event_skb;
	u32 eventcause = adapter->event_cause;
	u32 eventcause;
	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 */
	adapter->dbg.last_event_index =
			(adapter->dbg.last_event_index + 1) % DBG_CMD_NUM;