diff options
author | Kalle Valo <kalle.valo@nokia.com> | 2009-03-22 15:57:35 -0400 |
---|---|---|
committer | John W. Linville <linville@tuxdriver.com> | 2009-03-27 20:13:13 -0400 |
commit | 04de83815993714a7ba2618f637fa1092a5f664b (patch) | |
tree | 7e491e890a66a3be3e4eae9636914858a6f3bba8 /include/net | |
parent | a08c1c1ac0c26229ca1ca45d554b209a56edc8be (diff) |
mac80211: add beacon filtering support
Add IEEE80211_HW_BEACON_FILTERING flag so that driver inform that it supports
beacon filtering. Drivers need to call the new function
ieee80211_beacon_loss() to notify about beacon loss.
Signed-off-by: Kalle Valo <kalle.valo@nokia.com>
Signed-off-by: John W. Linville <linville@tuxdriver.com>
Diffstat (limited to 'include/net')
-rw-r--r-- | include/net/mac80211.h | 33 |
1 files changed, 33 insertions, 0 deletions
diff --git a/include/net/mac80211.h b/include/net/mac80211.h index 174dc1d7526b..d881ed8ad2c1 100644 --- a/include/net/mac80211.h +++ b/include/net/mac80211.h | |||
@@ -882,6 +882,10 @@ enum ieee80211_tkip_key_type { | |||
882 | * | 882 | * |
883 | * @IEEE80211_HW_MFP_CAPABLE: | 883 | * @IEEE80211_HW_MFP_CAPABLE: |
884 | * Hardware supports management frame protection (MFP, IEEE 802.11w). | 884 | * Hardware supports management frame protection (MFP, IEEE 802.11w). |
885 | * | ||
886 | * @IEEE80211_HW_BEACON_FILTER: | ||
887 | * Hardware supports dropping of irrelevant beacon frames to | ||
888 | * avoid waking up cpu. | ||
885 | */ | 889 | */ |
886 | enum ieee80211_hw_flags { | 890 | enum ieee80211_hw_flags { |
887 | IEEE80211_HW_RX_INCLUDES_FCS = 1<<1, | 891 | IEEE80211_HW_RX_INCLUDES_FCS = 1<<1, |
@@ -897,6 +901,7 @@ enum ieee80211_hw_flags { | |||
897 | IEEE80211_HW_PS_NULLFUNC_STACK = 1<<11, | 901 | IEEE80211_HW_PS_NULLFUNC_STACK = 1<<11, |
898 | IEEE80211_HW_SUPPORTS_DYNAMIC_PS = 1<<12, | 902 | IEEE80211_HW_SUPPORTS_DYNAMIC_PS = 1<<12, |
899 | IEEE80211_HW_MFP_CAPABLE = 1<<13, | 903 | IEEE80211_HW_MFP_CAPABLE = 1<<13, |
904 | IEEE80211_HW_BEACON_FILTER = 1<<14, | ||
900 | }; | 905 | }; |
901 | 906 | ||
902 | /** | 907 | /** |
@@ -1121,6 +1126,24 @@ ieee80211_get_alt_retry_rate(const struct ieee80211_hw *hw, | |||
1121 | */ | 1126 | */ |
1122 | 1127 | ||
1123 | /** | 1128 | /** |
1129 | * DOC: Beacon filter support | ||
1130 | * | ||
1131 | * Some hardware have beacon filter support to reduce host cpu wakeups | ||
1132 | * which will reduce system power consumption. It usuallly works so that | ||
1133 | * the firmware creates a checksum of the beacon but omits all constantly | ||
1134 | * changing elements (TSF, TIM etc). Whenever the checksum changes the | ||
1135 | * beacon is forwarded to the host, otherwise it will be just dropped. That | ||
1136 | * way the host will only receive beacons where some relevant information | ||
1137 | * (for example ERP protection or WMM settings) have changed. | ||
1138 | * | ||
1139 | * Beacon filter support is informed with %IEEE80211_HW_BEACON_FILTER flag. | ||
1140 | * The driver needs to enable beacon filter support whenever power save is | ||
1141 | * enabled, that is %IEEE80211_CONF_PS is set. When power save is enabled, | ||
1142 | * the stack will not check for beacon miss at all and the driver needs to | ||
1143 | * notify about complete loss of beacons with ieee80211_beacon_loss(). | ||
1144 | */ | ||
1145 | |||
1146 | /** | ||
1124 | * DOC: Frame filtering | 1147 | * DOC: Frame filtering |
1125 | * | 1148 | * |
1126 | * mac80211 requires to see many management frames for proper | 1149 | * mac80211 requires to see many management frames for proper |
@@ -1970,6 +1993,16 @@ void ieee80211_stop_tx_ba_cb_irqsafe(struct ieee80211_hw *hw, const u8 *ra, | |||
1970 | struct ieee80211_sta *ieee80211_find_sta(struct ieee80211_hw *hw, | 1993 | struct ieee80211_sta *ieee80211_find_sta(struct ieee80211_hw *hw, |
1971 | const u8 *addr); | 1994 | const u8 *addr); |
1972 | 1995 | ||
1996 | /** | ||
1997 | * ieee80211_beacon_loss - inform hardware does not receive beacons | ||
1998 | * | ||
1999 | * @vif: &struct ieee80211_vif pointer from &struct ieee80211_if_init_conf. | ||
2000 | * | ||
2001 | * When beacon filtering is enabled with IEEE80211_HW_BEACON_FILTERING and | ||
2002 | * IEEE80211_CONF_PS is set, the driver needs to inform whenever the | ||
2003 | * hardware is not receiving beacons with this function. | ||
2004 | */ | ||
2005 | void ieee80211_beacon_loss(struct ieee80211_vif *vif); | ||
1973 | 2006 | ||
1974 | /* Rate control API */ | 2007 | /* Rate control API */ |
1975 | 2008 | ||