Skip to content

Commit

Permalink
---
Browse files Browse the repository at this point in the history
yaml
---
r: 278671
b: refs/heads/master
c: a4e4130
h: refs/heads/master
i:
  278669: 7b74052
  278667: 308bfe6
  278663: fe9f66e
  278655: 3a79236
v: v3
  • Loading branch information
Eliad Peller authored and Luciano Coelho committed Oct 11, 2011
1 parent dd3f02c commit 3bf326f
Show file tree
Hide file tree
Showing 4 changed files with 31 additions and 12 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: a32d0cdfcb7e5d41f210e13cbc78dc86a5a85a08
refs/heads/master: a4e4130dcea01f3e0dfcbfeaf0d815b971e6e515
29 changes: 18 additions & 11 deletions trunk/drivers/net/wireless/wl12xx/init.c
Original file line number Diff line number Diff line change
Expand Up @@ -343,11 +343,6 @@ static int wl1271_sta_hw_init(struct wl1271 *wl, struct wl12xx_vif *wlvif)
if (ret < 0)
return ret;

/* Configure for ELP power saving */
ret = wl1271_acx_sleep_auth(wl, WL1271_PSM_ELP);
if (ret < 0)
return ret;

ret = wl1271_acx_sta_rate_policies(wl, wlvif);
if (ret < 0)
return ret;
Expand Down Expand Up @@ -382,11 +377,6 @@ static int wl1271_ap_hw_init(struct wl1271 *wl, struct wl12xx_vif *wlvif)
{
int ret;

/* Configure for power always on */
ret = wl1271_acx_sleep_auth(wl, WL1271_PSM_CAM);
if (ret < 0)
return ret;

ret = wl1271_init_ap_rates(wl, wlvif);
if (ret < 0)
return ret;
Expand Down Expand Up @@ -577,9 +567,26 @@ int wl1271_init_vif_specific(struct wl1271 *wl, struct ieee80211_vif *vif)
struct conf_tx_ac_category *conf_ac;
struct conf_tx_tid *conf_tid;
bool is_ap = (wlvif->bss_type == BSS_TYPE_AP_BSS);

int ret, i;

/*
* consider all existing roles before configuring psm.
* TODO: reconfigure on interface removal.
*/
if (!wl->ap_count) {
if (is_ap) {
/* Configure for power always on */
ret = wl1271_acx_sleep_auth(wl, WL1271_PSM_CAM);
if (ret < 0)
return ret;
} else if (!wl->sta_count) {
/* Configure for ELP power saving */
ret = wl1271_acx_sleep_auth(wl, WL1271_PSM_ELP);
if (ret < 0)
return ret;
}
}

/* Mode specific init */
if (is_ap) {
ret = wl1271_ap_hw_init(wl, wlvif);
Expand Down
10 changes: 10 additions & 0 deletions trunk/drivers/net/wireless/wl12xx/main.c
Original file line number Diff line number Diff line change
Expand Up @@ -2117,6 +2117,11 @@ static int wl1271_op_add_interface(struct ieee80211_hw *hw,
wl->vif = vif;
list_add(&wlvif->list, &wl->wlvif_list);
set_bit(WL1271_FLAG_IF_INITIALIZED, &wl->flags);

if (wlvif->bss_type == BSS_TYPE_AP_BSS)
wl->ap_count++;
else
wl->sta_count++;
out:
mutex_unlock(&wl->mutex);

Expand Down Expand Up @@ -2188,6 +2193,11 @@ static void __wl1271_op_remove_interface(struct wl1271 *wl,
wlvif->role_id = WL12XX_INVALID_ROLE_ID;
wlvif->dev_role_id = WL12XX_INVALID_ROLE_ID;

if (wlvif->bss_type == BSS_TYPE_AP_BSS)
wl->ap_count--;
else
wl->sta_count--;

mutex_unlock(&wl->mutex);
cancel_delayed_work_sync(&wlvif->pspoll_work);

Expand Down
2 changes: 2 additions & 0 deletions trunk/drivers/net/wireless/wl12xx/wl12xx.h
Original file line number Diff line number Diff line change
Expand Up @@ -395,6 +395,8 @@ struct wl1271 {
unsigned long roc_map[BITS_TO_LONGS(WL12XX_MAX_ROLES)];

struct list_head wlvif_list;
u8 sta_count;
u8 ap_count;

struct wl1271_acx_mem_map *target_mem_map;

Expand Down

0 comments on commit 3bf326f

Please sign in to comment.