Skip to content

Commit

Permalink
---
Browse files Browse the repository at this point in the history
yaml
---
r: 158808
b: refs/heads/master
c: c5483b7
h: refs/heads/master
v: v3
  • Loading branch information
Kalle Valo authored and John W. Linville committed Jul 10, 2009
1 parent 6256560 commit 07da475
Show file tree
Hide file tree
Showing 5 changed files with 60 additions and 25 deletions.
2 changes: 1 addition & 1 deletion [refs]
Original file line number Diff line number Diff line change
@@ -1,2 +1,2 @@
---
refs/heads/master: 01d9cfbdaadc64a46b57437c989bbad241074135
refs/heads/master: c5483b71936333ba9474f57d0f3a7a7abf9b87a0
7 changes: 6 additions & 1 deletion trunk/drivers/net/wireless/wl12xx/debugfs.c
Original file line number Diff line number Diff line change
Expand Up @@ -95,9 +95,13 @@ static const struct file_operations sub## _ ##name## _ops = { \

static void wl12xx_debugfs_update_stats(struct wl12xx *wl)
{
int ret;

mutex_lock(&wl->mutex);

wl12xx_ps_elp_wakeup(wl);
ret = wl12xx_ps_elp_wakeup(wl);
if (ret < 0)
goto out;

if (wl->state == WL12XX_STATE_ON &&
time_after(jiffies, wl->stats.fw_stats_update +
Expand All @@ -108,6 +112,7 @@ static void wl12xx_debugfs_update_stats(struct wl12xx *wl)

wl12xx_ps_elp_sleep(wl);

out:
mutex_unlock(&wl->mutex);
}

Expand Down
66 changes: 45 additions & 21 deletions trunk/drivers/net/wireless/wl12xx/main.c
Original file line number Diff line number Diff line change
Expand Up @@ -239,14 +239,18 @@ static void wl12xx_filter_work(struct work_struct *work)
if (wl->state == WL12XX_STATE_OFF)
goto out;

wl12xx_ps_elp_wakeup(wl);
ret = wl12xx_ps_elp_wakeup(wl);
if (ret < 0)
goto out;

ret = wl12xx_cmd_join(wl, wl->bss_type, 1, 100, 0);
if (ret < 0)
goto out;
goto out_sleep;

out:
out_sleep:
wl12xx_ps_elp_sleep(wl);

out:
mutex_unlock(&wl->mutex);
}

Expand Down Expand Up @@ -524,20 +528,22 @@ static int wl12xx_op_config(struct ieee80211_hw *hw, u32 changed)

mutex_lock(&wl->mutex);

wl12xx_ps_elp_wakeup(wl);
ret = wl12xx_ps_elp_wakeup(wl);
if (ret < 0)
goto out;

if (channel != wl->channel) {
/* FIXME: use beacon interval provided by mac80211 */
ret = wl12xx_cmd_join(wl, wl->bss_type, 1, 100, 0);
if (ret < 0)
goto out;
goto out_sleep;

wl->channel = channel;
}

ret = wl12xx_build_null_data(wl);
if (ret < 0)
goto out;
goto out_sleep;

if (conf->flags & IEEE80211_CONF_PS && !wl->psm_requested) {
wl12xx_info("psm enabled");
Expand Down Expand Up @@ -568,9 +574,12 @@ static int wl12xx_op_config(struct ieee80211_hw *hw, u32 changed)
wl->power_level = conf->power_level;
}

out:
out_sleep:
wl12xx_ps_elp_sleep(wl);

out:
mutex_unlock(&wl->mutex);

return ret;
}

Expand Down Expand Up @@ -708,7 +717,9 @@ static int wl12xx_op_set_key(struct ieee80211_hw *hw, enum set_key_cmd cmd,

mutex_lock(&wl->mutex);

wl12xx_ps_elp_wakeup(wl);
ret = wl12xx_ps_elp_wakeup(wl);
if (ret < 0)
goto out_unlock;

switch (cmd) {
case SET_KEY:
Expand All @@ -725,7 +736,7 @@ static int wl12xx_op_set_key(struct ieee80211_hw *hw, enum set_key_cmd cmd,
ret = wl12xx_set_key_type(wl, wl_cmd, cmd, key, addr);
if (ret < 0) {
wl12xx_error("Set KEY type failed");
goto out_unlock;
goto out_sleep;
}

if (wl_cmd->key_type != KEY_WEP_DEFAULT)
Expand Down Expand Up @@ -756,11 +767,13 @@ static int wl12xx_op_set_key(struct ieee80211_hw *hw, enum set_key_cmd cmd,
ret = wl12xx_cmd_send(wl, CMD_SET_KEYS, wl_cmd, sizeof(*wl_cmd));
if (ret < 0) {
wl12xx_warning("could not set keys");
goto out_unlock;
goto out_sleep;
}

out_unlock:
out_sleep:
wl12xx_ps_elp_sleep(wl);

out_unlock:
mutex_unlock(&wl->mutex);

out:
Expand Down Expand Up @@ -955,11 +968,16 @@ static int wl12xx_op_hw_scan(struct ieee80211_hw *hw,
}

mutex_lock(&wl->mutex);
wl12xx_ps_elp_wakeup(wl);

ret = wl12xx_ps_elp_wakeup(wl);
if (ret < 0)
goto out;

ret = wl12xx_hw_scan(hw->priv, ssid, ssid_len, 1, 0, 13, 3);

wl12xx_ps_elp_sleep(wl);

out:
mutex_unlock(&wl->mutex);

return ret;
Expand All @@ -972,15 +990,17 @@ static int wl12xx_op_set_rts_threshold(struct ieee80211_hw *hw, u32 value)

mutex_lock(&wl->mutex);

wl12xx_ps_elp_wakeup(wl);
ret = wl12xx_ps_elp_wakeup(wl);
if (ret < 0)
goto out;

ret = wl12xx_acx_rts_threshold(wl, (u16) value);

if (ret < 0)
wl12xx_warning("wl12xx_op_set_rts_threshold failed: %d", ret);

wl12xx_ps_elp_sleep(wl);

out:
mutex_unlock(&wl->mutex);

return ret;
Expand All @@ -1000,26 +1020,28 @@ static void wl12xx_op_bss_info_changed(struct ieee80211_hw *hw,

mutex_lock(&wl->mutex);

wl12xx_ps_elp_wakeup(wl);
ret = wl12xx_ps_elp_wakeup(wl);
if (ret < 0)
goto out;

if (changed & BSS_CHANGED_ASSOC) {
if (bss_conf->assoc) {
wl->aid = bss_conf->aid;

ret = wl12xx_build_ps_poll(wl, wl->aid);
if (ret < 0)
goto out;
goto out_sleep;

ret = wl12xx_acx_aid(wl, wl->aid);
if (ret < 0)
goto out;
goto out_sleep;

/* If we want to go in PSM but we're not there yet */
if (wl->psm_requested && !wl->psm) {
mode = STATION_POWER_SAVE_MODE;
ret = wl12xx_ps_set_mode(wl, mode);
if (ret < 0)
goto out;
goto out_sleep;
}
}
}
Expand All @@ -1030,7 +1052,7 @@ static void wl12xx_op_bss_info_changed(struct ieee80211_hw *hw,
ret = wl12xx_acx_slot(wl, SLOT_TIME_LONG);
if (ret < 0) {
wl12xx_warning("Set slot time failed %d", ret);
goto out;
goto out_sleep;
}
}

Expand All @@ -1048,7 +1070,7 @@ static void wl12xx_op_bss_info_changed(struct ieee80211_hw *hw,
ret = wl12xx_acx_cts_protect(wl, CTSPROTECT_DISABLE);
if (ret < 0) {
wl12xx_warning("Set ctsprotect failed %d", ret);
goto out;
goto out_sleep;
}
}

Expand Down Expand Up @@ -1090,8 +1112,10 @@ static void wl12xx_op_bss_info_changed(struct ieee80211_hw *hw,
goto out;
}

out:
out_sleep:
wl12xx_ps_elp_sleep(wl);

out:
mutex_unlock(&wl->mutex);
}

Expand Down
6 changes: 5 additions & 1 deletion trunk/drivers/net/wireless/wl12xx/wl1251.c
Original file line number Diff line number Diff line change
Expand Up @@ -401,6 +401,7 @@ static void wl1251_irq_work(struct work_struct *work)
u32 intr;
struct wl12xx *wl =
container_of(work, struct wl12xx, irq_work);
int ret;

mutex_lock(&wl->mutex);

Expand All @@ -409,7 +410,9 @@ static void wl1251_irq_work(struct work_struct *work)
if (wl->state == WL12XX_STATE_OFF)
goto out;

wl12xx_ps_elp_wakeup(wl);
ret = wl12xx_ps_elp_wakeup(wl);
if (ret < 0)
goto out;

wl12xx_reg_write32(wl, ACX_REG_INTERRUPT_MASK, WL1251_ACX_INTR_ALL);

Expand Down Expand Up @@ -489,6 +492,7 @@ static void wl1251_irq_work(struct work_struct *work)

out_sleep:
wl12xx_ps_elp_sleep(wl);

out:
mutex_unlock(&wl->mutex);
}
Expand Down
4 changes: 3 additions & 1 deletion trunk/drivers/net/wireless/wl12xx/wl1251_tx.c
Original file line number Diff line number Diff line change
Expand Up @@ -311,7 +311,9 @@ void wl1251_tx_work(struct work_struct *work)

while ((skb = skb_dequeue(&wl->tx_queue))) {
if (!woken_up) {
wl12xx_ps_elp_wakeup(wl);
ret = wl12xx_ps_elp_wakeup(wl);
if (ret < 0)
goto out;
woken_up = true;
}

Expand Down

0 comments on commit 07da475

Please sign in to comment.