Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 89fad578 authored by Christian Lamparter's avatar Christian Lamparter Committed by John W. Linville
Browse files

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: default avatarChristian Lamparter <chunkeey@web.de>
Acked-by: default avatarJohannes Berg <johannes@sipsolutions.net>
Signed-off-by: default avatarJohn W. Linville <linville@tuxdriver.com>
parent dd397dc9
Loading
Loading
Loading
Loading
+4 −0
Original line number Diff line number Diff line
@@ -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;
	}
}

+4 −14
Original line number Diff line number Diff line
@@ -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,
+7 −20
Original line number Diff line number Diff line
@@ -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,
+6 −6
Original line number Diff line number Diff line
@@ -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);