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

Commit 52630c5d authored by Eliad Peller's avatar Eliad Peller Committed by Luciano Coelho
Browse files

wl12xx: make WL1271_FLAG_CS_PROGRESS flag per-vif



This flag should be set per-vif, rather than globally.

Signed-off-by: default avatarEliad Peller <eliad@wizery.com>
Signed-off-by: default avatarLuciano Coelho <coelho@ti.com>
parent 836d6600
Loading
Loading
Loading
Loading
+12 −10
Original line number Diff line number Diff line
@@ -345,18 +345,20 @@ static int wl1271_event_process(struct wl1271 *wl, struct event_mailbox *mbox)
		 * 1) channel switch complete with status=0
		 * 2) channel switch failed status=1
		 */
		if (test_and_clear_bit(WL1271_FLAG_CS_PROGRESS, &wl->flags)) {

		/* TODO: configure only the relevant vif */
		wl12xx_for_each_wlvif_sta(wl, wlvif) {
				struct ieee80211_vif *vif =
					wl12xx_wlvif_to_vif(wlvif);
				bool success = mbox->channel_switch_status ?
					false : true;
			struct ieee80211_vif *vif = wl12xx_wlvif_to_vif(wlvif);
			bool success;

			if (!test_and_clear_bit(WLVIF_FLAG_CS_PROGRESS,
						&wl->flags))
				continue;

			success = mbox->channel_switch_status ? false : true;
			ieee80211_chswitch_done(vif, success);
		}
	}
	}

	if ((vector & DUMMY_PACKET_EVENT_ID)) {
		wl1271_debug(DEBUG_EVENT, "DUMMY_PACKET_ID_EVENT_ID");
+8 −4
Original line number Diff line number Diff line
@@ -2317,7 +2317,7 @@ static int wl1271_unjoin(struct wl1271 *wl, struct wl12xx_vif *wlvif)
{
	int ret;

	if (test_and_clear_bit(WL1271_FLAG_CS_PROGRESS, &wl->flags)) {
	if (test_and_clear_bit(WLVIF_FLAG_CS_PROGRESS, &wlvif->flags)) {
		wl12xx_cmd_stop_channel_switch(wl);
		ieee80211_chswitch_done(wl->vif, false);
	}
@@ -4275,6 +4275,7 @@ static void wl12xx_op_channel_switch(struct ieee80211_hw *hw,
				     struct ieee80211_channel_switch *ch_switch)
{
	struct wl1271 *wl = hw->priv;
	struct wl12xx_vif *wlvif;
	int ret;

	wl1271_debug(DEBUG_MAC80211, "mac80211 channel switch");
@@ -4291,10 +4292,13 @@ static void wl12xx_op_channel_switch(struct ieee80211_hw *hw,
	if (ret < 0)
		goto out;

	/* TODO: change mac80211 to pass vif as param */
	wl12xx_for_each_wlvif_sta(wl, wlvif) {
		ret = wl12xx_cmd_channel_switch(wl, ch_switch);

		if (!ret)
		set_bit(WL1271_FLAG_CS_PROGRESS, &wl->flags);
			set_bit(WLVIF_FLAG_CS_PROGRESS, &wlvif->flags);
	}

	wl1271_ps_elp_sleep(wl);

+1 −1
Original line number Diff line number Diff line
@@ -326,7 +326,6 @@ enum wl12xx_flags {
	WL1271_FLAG_PENDING_WORK,
	WL1271_FLAG_SOFT_GEMINI,
	WL1271_FLAG_RECOVERY_IN_PROGRESS,
	WL1271_FLAG_CS_PROGRESS,
};

enum wl12xx_vif_flags {
@@ -339,6 +338,7 @@ enum wl12xx_vif_flags {
	WLVIF_FLAG_STA_STATE_SENT,
	WLVIF_FLAG_RX_STREAMING_STARTED,
	WLVIF_FLAG_PSPOLL_FAILURE,
	WLVIF_FLAG_CS_PROGRESS,
};

struct wl1271_link {