summaryrefslogtreecommitdiffstats
path: root/sys/net80211/ieee80211_var.h
diff options
context:
space:
mode:
authoradrian <adrian@FreeBSD.org>2012-10-02 17:45:19 +0000
committeradrian <adrian@FreeBSD.org>2012-10-02 17:45:19 +0000
commitb7889929b9889306bae9b98146edb7ac84bdedab (patch)
tree9d46706685e332fdbf0bc395bff936c78059a973 /sys/net80211/ieee80211_var.h
parent001794b735018a8bbdbac013a520940cd521bb71 (diff)
downloadFreeBSD-src-b7889929b9889306bae9b98146edb7ac84bdedab.zip
FreeBSD-src-b7889929b9889306bae9b98146edb7ac84bdedab.tar.gz
Migrate the power-save functions to be overridable VAP methods.
This turns ieee80211_node_pwrsave(), ieee80211_sta_pwrsave() and ieee80211_recv_pspoll() into methods. The intent is to let drivers override these and tie into the power save management pathway. For ath(4), this is the beginning of forcing a node software queue to stop and start as needed, as well as supporting "leaking" single frames from the software queue to the hardware. Right now, ieee80211_recv_pspoll() will attempt to transmit a single frame to the hardware (whether it be a data frame on the power-save queue or a NULL data frame) but the driver may have hardware/software queued frames queued up. This initial work is an attempt at providing the hooks required to implement correct behaviour. Allowing ieee80211_node_pwrsave() to be overridden allows the ath(4) driver to pause and unpause the entire software queue for a given node. It doesn't make sense to transmit anything whilst the node is asleep. Please note that there are other corner cases to correctly handle - specifically, setting the MORE data bit correctly on frames to a station, as well as keeping the TIM updated. Those particular issues can be addressed later.
Diffstat (limited to 'sys/net80211/ieee80211_var.h')
-rw-r--r--sys/net80211/ieee80211_var.h5
1 files changed, 5 insertions, 0 deletions
diff --git a/sys/net80211/ieee80211_var.h b/sys/net80211/ieee80211_var.h
index 935b848..7ec00ee 100644
--- a/sys/net80211/ieee80211_var.h
+++ b/sys/net80211/ieee80211_var.h
@@ -486,6 +486,11 @@ struct ieee80211vap {
/* power save handling */
void (*iv_update_ps)(struct ieee80211vap *, int);
int (*iv_set_tim)(struct ieee80211_node *, int);
+ void (*iv_node_ps)(struct ieee80211_node *, int);
+ void (*iv_sta_ps)(struct ieee80211vap *, int);
+ void (*iv_recv_pspoll)(struct ieee80211_node *,
+ struct mbuf *);
+
/* state machine processing */
int (*iv_newstate)(struct ieee80211vap *,
enum ieee80211_state, int);
OpenPOWER on IntegriCloud