Skip to content

Commit

Permalink
wl12xx: make WL1271_FLAG_CS_PROGRESS flag per-vif
Browse files Browse the repository at this point in the history
This flag should be set per-vif, rather than globally.

Signed-off-by: Eliad Peller <eliad@wizery.com>
Signed-off-by: Luciano Coelho <coelho@ti.com>
  • Loading branch information
Eliad Peller authored and Luciano Coelho committed Oct 11, 2011
1 parent 836d660 commit 52630c5
Show file tree
Hide file tree
Showing 3 changed files with 21 additions and 15 deletions.
22 changes: 12 additions & 10 deletions drivers/net/wireless/wl12xx/event.c
Original file line number Diff line number Diff line change
Expand Up @@ -345,16 +345,18 @@ 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;

ieee80211_chswitch_done(vif, success);
}

/* TODO: configure only the relevant vif */
wl12xx_for_each_wlvif_sta(wl, wlvif) {
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);
}
}

Expand Down
12 changes: 8 additions & 4 deletions drivers/net/wireless/wl12xx/main.c
Original file line number Diff line number Diff line change
Expand Up @@ -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);
}
Expand Down Expand Up @@ -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");
Expand All @@ -4291,10 +4292,13 @@ static void wl12xx_op_channel_switch(struct ieee80211_hw *hw,
if (ret < 0)
goto out;

ret = wl12xx_cmd_channel_switch(wl, ch_switch);
/* 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);
if (!ret)
set_bit(WLVIF_FLAG_CS_PROGRESS, &wlvif->flags);
}

wl1271_ps_elp_sleep(wl);

Expand Down
2 changes: 1 addition & 1 deletion drivers/net/wireless/wl12xx/wl12xx.h
Original file line number Diff line number Diff line change
Expand Up @@ -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 {
Expand All @@ -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 {
Expand Down

0 comments on commit 52630c5

Please sign in to comment.