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

Commit 52a2a375 authored by Juuso Oikarinen's avatar Juuso Oikarinen Committed by Luciano Coelho
Browse files

wl1271: Separate interface removal to another function



Do this so the interface removal can be triggered from an upcoming hardware
failure recovery mechanism.

Signed-off-by: default avatarJuuso Oikarinen <juuso.oikarinen@nokia.com>
Reviewed-by: default avatarTeemu Paasikivi <ext-teemu.3.paasikivi@nokia.com>
Signed-off-by: default avatarLuciano Coelho <luciano.coelho@nokia.com>
parent 8c7f4f31
Loading
Loading
Loading
Loading
+11 −6
Original line number Diff line number Diff line
@@ -960,15 +960,10 @@ static int wl1271_op_add_interface(struct ieee80211_hw *hw,
	return ret;
}

static void wl1271_op_remove_interface(struct ieee80211_hw *hw,
				       struct ieee80211_vif *vif)
static void __wl1271_op_remove_interface(struct wl1271 *wl)
{
	struct wl1271 *wl = hw->priv;
	int i;

	cancel_work_sync(&wl->scan_complete_work);

	mutex_lock(&wl->mutex);
	wl1271_debug(DEBUG_MAC80211, "mac80211 remove interface");

	wl1271_info("down");
@@ -994,6 +989,7 @@ static void wl1271_op_remove_interface(struct ieee80211_hw *hw,

	mutex_unlock(&wl->mutex);

	cancel_work_sync(&wl->scan_complete_work);
	cancel_work_sync(&wl->irq_work);
	cancel_work_sync(&wl->tx_work);
	cancel_delayed_work_sync(&wl->pspoll_work);
@@ -1039,7 +1035,16 @@ static void wl1271_op_remove_interface(struct ieee80211_hw *hw,
	wl->tx_res_if = NULL;
	kfree(wl->target_mem_map);
	wl->target_mem_map = NULL;
}

static void wl1271_op_remove_interface(struct ieee80211_hw *hw,
				       struct ieee80211_vif *vif)
{
	struct wl1271 *wl = hw->priv;

	mutex_lock(&wl->mutex);
	WARN_ON(wl->vif != vif);
	__wl1271_op_remove_interface(wl);
	mutex_unlock(&wl->mutex);
}

+6 −0
Original line number Diff line number Diff line
@@ -36,6 +36,12 @@ void wl1271_scan_complete_work(struct work_struct *work)
	wl1271_debug(DEBUG_SCAN, "Scanning complete");

	mutex_lock(&wl->mutex);

	if (wl->scan.state == WL1271_SCAN_STATE_IDLE) {
		mutex_unlock(&wl->mutex);
		return;
	}

	wl->scan.state = WL1271_SCAN_STATE_IDLE;
	kfree(wl->scan.scanned_ch);
	wl->scan.scanned_ch = NULL;