Skip to content

Commit

Permalink
---
Browse files Browse the repository at this point in the history
yaml
---
r: 265790
b: refs/heads/master
c: b78b47e
h: refs/heads/master
v: v3
  • Loading branch information
Eliad Peller authored and Luciano Coelho committed Aug 22, 2011
1 parent 5eb3448 commit 6739fef
Show file tree
Hide file tree
Showing 2 changed files with 42 additions and 1 deletion.
2 changes: 1 addition & 1 deletion [refs]
Original file line number Diff line number Diff line change
@@ -1,2 +1,2 @@
---
refs/heads/master: c690ec816f9fa2ab2b6200c5b79b6933acca49a4
refs/heads/master: b78b47eb73fcf4f04226ab8014aa8dadf11675d9
41 changes: 41 additions & 0 deletions trunk/drivers/net/wireless/wl12xx/main.c
Original file line number Diff line number Diff line change
Expand Up @@ -1779,13 +1779,29 @@ static void wl1271_op_stop(struct ieee80211_hw *hw)
wl1271_debug(DEBUG_MAC80211, "mac80211 stop");
}

static u8 wl12xx_get_role_type(struct wl1271 *wl)
{
switch (wl->bss_type) {
case BSS_TYPE_AP_BSS:
return WL1271_ROLE_AP;

case BSS_TYPE_STA_BSS:
return WL1271_ROLE_STA;

default:
wl1271_error("invalid bss_type: %d", wl->bss_type);
}
return WL12XX_INVALID_ROLE_TYPE;
}

static int wl1271_op_add_interface(struct ieee80211_hw *hw,
struct ieee80211_vif *vif)
{
struct wl1271 *wl = hw->priv;
struct wiphy *wiphy = hw->wiphy;
int retries = WL1271_BOOT_RETRIES;
int ret = 0;
u8 role_type;
bool booted = false;

wl1271_debug(DEBUG_MAC80211, "mac80211 add interface type %d mac %pM",
Expand Down Expand Up @@ -1826,6 +1842,11 @@ static int wl1271_op_add_interface(struct ieee80211_hw *hw,
goto out;
}

role_type = wl12xx_get_role_type(wl);
if (role_type == WL12XX_INVALID_ROLE_TYPE) {
ret = -EINVAL;
goto out;
}
memcpy(wl->mac_addr, vif->addr, ETH_ALEN);

if (wl->state != WL1271_STATE_OFF) {
Expand All @@ -1845,6 +1866,10 @@ static int wl1271_op_add_interface(struct ieee80211_hw *hw,
if (ret < 0)
goto power_off;

ret = wl12xx_cmd_role_enable(wl, role_type, &wl->role_id);
if (ret < 0)
goto irq_disable;

ret = wl1271_hw_init(wl);
if (ret < 0)
goto irq_disable;
Expand Down Expand Up @@ -1909,6 +1934,7 @@ static int wl1271_op_add_interface(struct ieee80211_hw *hw,
static void __wl1271_op_remove_interface(struct wl1271 *wl,
bool reset_tx_queues)
{
int ret;

wl1271_debug(DEBUG_MAC80211, "mac80211 remove interface");

Expand All @@ -1933,6 +1959,21 @@ static void __wl1271_op_remove_interface(struct wl1271 *wl,
ieee80211_scan_completed(wl->hw, true);
}

if (!test_bit(WL1271_FLAG_RECOVERY_IN_PROGRESS, &wl->flags)) {
/* disable active roles */
ret = wl1271_ps_elp_wakeup(wl);
if (ret < 0)
goto deinit;

ret = wl12xx_cmd_role_disable(wl, &wl->role_id);
if (ret < 0)
goto deinit;

wl1271_ps_elp_sleep(wl);
}
deinit:
wl->sta_hlid = WL12XX_INVALID_LINK_ID;

/*
* this must be before the cancel_work calls below, so that the work
* functions don't perform further work.
Expand Down

0 comments on commit 6739fef

Please sign in to comment.