mac80211: integrate sta_notify_ps cmds into sta_notify
This patch replaces the newly introduced sta_notify_ps function, which can be used to notify the driver about every power state transition for all associated stations, by integrating its functionality back into the original sta_notify callback. Signed-off-by: Christian Lamparter <chunkeey@web.de> Acked-by: Johannes Berg <johannes@sipsolutions.net> Signed-off-by: John W. Linville <linville@tuxdriver.com>
This commit is contained in:
parent
dd397dc9dd
commit
89fad578a6
4 changed files with 21 additions and 40 deletions
|
@ -522,6 +522,10 @@ static void mac80211_hwsim_sta_notify(struct ieee80211_hw *hw,
|
|||
case STA_NOTIFY_REMOVE:
|
||||
hwsim_clear_sta_magic(sta);
|
||||
break;
|
||||
case STA_NOTIFY_SLEEP:
|
||||
case STA_NOTIFY_AWAKE:
|
||||
/* TODO: make good use of these flags */
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
@ -1051,19 +1051,6 @@ static int p54_sta_unlock(struct ieee80211_hw *dev, u8 *addr)
|
|||
return 0;
|
||||
}
|
||||
|
||||
static void p54_sta_notify_ps(struct ieee80211_hw *dev,
|
||||
enum sta_notify_ps_cmd notify_cmd,
|
||||
struct ieee80211_sta *sta)
|
||||
{
|
||||
switch (notify_cmd) {
|
||||
case STA_NOTIFY_AWAKE:
|
||||
p54_sta_unlock(dev, sta->addr);
|
||||
break;
|
||||
default:
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
static void p54_sta_notify(struct ieee80211_hw *dev, struct ieee80211_vif *vif,
|
||||
enum sta_notify_cmd notify_cmd,
|
||||
struct ieee80211_sta *sta)
|
||||
|
@ -1076,6 +1063,10 @@ static void p54_sta_notify(struct ieee80211_hw *dev, struct ieee80211_vif *vif,
|
|||
* need to buffer frames for this station anymore.
|
||||
*/
|
||||
|
||||
p54_sta_unlock(dev, sta->addr);
|
||||
break;
|
||||
case STA_NOTIFY_AWAKE:
|
||||
/* update the firmware's filter table */
|
||||
p54_sta_unlock(dev, sta->addr);
|
||||
break;
|
||||
default:
|
||||
|
@ -2027,7 +2018,6 @@ static const struct ieee80211_ops p54_ops = {
|
|||
.add_interface = p54_add_interface,
|
||||
.remove_interface = p54_remove_interface,
|
||||
.set_tim = p54_set_tim,
|
||||
.sta_notify_ps = p54_sta_notify_ps,
|
||||
.sta_notify = p54_sta_notify,
|
||||
.set_key = p54_set_key,
|
||||
.config = p54_config,
|
||||
|
|
|
@ -773,25 +773,16 @@ struct ieee80211_sta {
|
|||
* enum sta_notify_cmd - sta notify command
|
||||
*
|
||||
* Used with the sta_notify() callback in &struct ieee80211_ops, this
|
||||
* indicates addition and removal of a station to station table.
|
||||
* indicates addition and removal of a station to station table,
|
||||
* or if a associated station made a power state transition.
|
||||
*
|
||||
* @STA_NOTIFY_ADD: a station was added to the station table
|
||||
* @STA_NOTIFY_REMOVE: a station being removed from the station table
|
||||
*/
|
||||
enum sta_notify_cmd {
|
||||
STA_NOTIFY_ADD, STA_NOTIFY_REMOVE
|
||||
};
|
||||
|
||||
/**
|
||||
* enum sta_notify_ps_cmd - sta power save notify command
|
||||
*
|
||||
* Used with the sta_notify_ps() callback in &struct ieee80211_ops to
|
||||
* notify the driver if a station made a power state transition.
|
||||
*
|
||||
* @STA_NOTIFY_SLEEP: a station is now sleeping
|
||||
* @STA_NOTIFY_AWAKE: a sleeping station woke up
|
||||
*/
|
||||
enum sta_notify_ps_cmd {
|
||||
enum sta_notify_cmd {
|
||||
STA_NOTIFY_ADD, STA_NOTIFY_REMOVE,
|
||||
STA_NOTIFY_SLEEP, STA_NOTIFY_AWAKE,
|
||||
};
|
||||
|
||||
|
@ -1258,11 +1249,9 @@ enum ieee80211_ampdu_mlme_action {
|
|||
*
|
||||
* @set_rts_threshold: Configuration of RTS threshold (if device needs it)
|
||||
*
|
||||
* @sta_notify: Notifies low level driver about addition or removal of an
|
||||
* associated station, AP, IBSS/WDS/mesh peer etc. Must be atomic.
|
||||
*
|
||||
* @sta_ps_notify: Notifies low level driver about the power state transition
|
||||
* of a associated station. Must be atomic.
|
||||
* @sta_notify: Notifies low level driver about addition, removal or power
|
||||
* state transition of an associated station, AP, IBSS/WDS/mesh peer etc.
|
||||
* Must be atomic.
|
||||
*
|
||||
* @conf_tx: Configure TX queue parameters (EDCF (aifs, cw_min, cw_max),
|
||||
* bursting) for a hardware TX queue.
|
||||
|
@ -1329,8 +1318,6 @@ struct ieee80211_ops {
|
|||
int (*set_rts_threshold)(struct ieee80211_hw *hw, u32 value);
|
||||
void (*sta_notify)(struct ieee80211_hw *hw, struct ieee80211_vif *vif,
|
||||
enum sta_notify_cmd, struct ieee80211_sta *sta);
|
||||
void (*sta_notify_ps)(struct ieee80211_hw *hw,
|
||||
enum sta_notify_ps_cmd, struct ieee80211_sta *sta);
|
||||
int (*conf_tx)(struct ieee80211_hw *hw, u16 queue,
|
||||
const struct ieee80211_tx_queue_params *params);
|
||||
int (*get_tx_stats)(struct ieee80211_hw *hw,
|
||||
|
|
|
@ -658,9 +658,9 @@ static void ap_sta_ps_start(struct sta_info *sta)
|
|||
|
||||
atomic_inc(&sdata->bss->num_sta_ps);
|
||||
set_and_clear_sta_flags(sta, WLAN_STA_PS, WLAN_STA_PSPOLL);
|
||||
if (local->ops->sta_notify_ps)
|
||||
local->ops->sta_notify_ps(local_to_hw(local), STA_NOTIFY_SLEEP,
|
||||
&sta->sta);
|
||||
if (local->ops->sta_notify)
|
||||
local->ops->sta_notify(local_to_hw(local), &sdata->vif,
|
||||
STA_NOTIFY_SLEEP, &sta->sta);
|
||||
#ifdef CONFIG_MAC80211_VERBOSE_PS_DEBUG
|
||||
printk(KERN_DEBUG "%s: STA %pM aid %d enters power save mode\n",
|
||||
sdata->dev->name, sta->sta.addr, sta->sta.aid);
|
||||
|
@ -677,9 +677,9 @@ static int ap_sta_ps_end(struct sta_info *sta)
|
|||
atomic_dec(&sdata->bss->num_sta_ps);
|
||||
|
||||
clear_sta_flags(sta, WLAN_STA_PS | WLAN_STA_PSPOLL);
|
||||
if (local->ops->sta_notify_ps)
|
||||
local->ops->sta_notify_ps(local_to_hw(local), STA_NOTIFY_AWAKE,
|
||||
&sta->sta);
|
||||
if (local->ops->sta_notify)
|
||||
local->ops->sta_notify(local_to_hw(local), &sdata->vif,
|
||||
STA_NOTIFY_AWAKE, &sta->sta);
|
||||
|
||||
if (!skb_queue_empty(&sta->ps_tx_buf))
|
||||
sta_info_clear_tim_bit(sta);
|
||||
|
|
Loading…
Reference in a new issue