diff options
author | Juuso Oikarinen <juuso.oikarinen@nokia.com> | 2010-03-19 01:14:53 -0400 |
---|---|---|
committer | John W. Linville <linville@tuxdriver.com> | 2010-03-23 16:51:42 -0400 |
commit | 1e4dcd012423b6a28f968a55886d2b27896a1586 (patch) | |
tree | c2eadaf6a33175840b2f5d8fb7dd6af1d5be76ed /include | |
parent | 43ead78ac48b75aaf47de96fcf10cbf5962f32a6 (diff) |
mac80211: Add support for connection monitor in hardware
This patch is based on a RFC patch by Kalle Valo.
The wl1271 has a feature which handles the connection monitor logic
in hardware, basically sending periodically nullfunc frames and reporting
to the host if AP is lost, after attempting to recover by sending
probe-requests to the AP.
Add support to mac80211 by adding a new flag IEEE80211_HW_CONNECTION_MONITOR
which prevents conn_mon_timer from triggering during idle periods, and
prevents sending probe-requests to the AP if beacon-loss is indicated by the
hardware.
Cc: Kalle Valo <kalle.valo@nokia.com>
Signed-off-by: Juuso Oikarinen <juuso.oikarinen@nokia.com>
Reviewed-by: Johannes Berg <johannes@sipsolutions.net>
Signed-off-by: John W. Linville <linville@tuxdriver.com>
Diffstat (limited to 'include')
-rw-r--r-- | include/net/mac80211.h | 24 |
1 files changed, 22 insertions, 2 deletions
diff --git a/include/net/mac80211.h b/include/net/mac80211.h index 936bc410d061..d14226f29ffc 100644 --- a/include/net/mac80211.h +++ b/include/net/mac80211.h | |||
@@ -954,6 +954,11 @@ enum ieee80211_tkip_key_type { | |||
954 | * Hardware can provide ack status reports of Tx frames to | 954 | * Hardware can provide ack status reports of Tx frames to |
955 | * the stack. | 955 | * the stack. |
956 | * | 956 | * |
957 | * @IEEE80211_HW_CONNECTION_MONITOR: | ||
958 | * The hardware performs its own connection monitoring, including | ||
959 | * periodic keep-alives to the AP and probing the AP on beacon loss. | ||
960 | * When this flag is set, signaling beacon-loss will cause an immediate | ||
961 | * change to disassociated state. | ||
957 | */ | 962 | */ |
958 | enum ieee80211_hw_flags { | 963 | enum ieee80211_hw_flags { |
959 | IEEE80211_HW_HAS_RATE_CONTROL = 1<<0, | 964 | IEEE80211_HW_HAS_RATE_CONTROL = 1<<0, |
@@ -975,6 +980,7 @@ enum ieee80211_hw_flags { | |||
975 | IEEE80211_HW_SUPPORTS_DYNAMIC_SMPS = 1<<16, | 980 | IEEE80211_HW_SUPPORTS_DYNAMIC_SMPS = 1<<16, |
976 | IEEE80211_HW_SUPPORTS_UAPSD = 1<<17, | 981 | IEEE80211_HW_SUPPORTS_UAPSD = 1<<17, |
977 | IEEE80211_HW_REPORTS_TX_ACK_STATUS = 1<<18, | 982 | IEEE80211_HW_REPORTS_TX_ACK_STATUS = 1<<18, |
983 | IEEE80211_HW_CONNECTION_MONITOR = 1<<19, | ||
978 | }; | 984 | }; |
979 | 985 | ||
980 | /** | 986 | /** |
@@ -2364,12 +2370,26 @@ void ieee80211_sta_block_awake(struct ieee80211_hw *hw, | |||
2364 | * | 2370 | * |
2365 | * @vif: &struct ieee80211_vif pointer from the add_interface callback. | 2371 | * @vif: &struct ieee80211_vif pointer from the add_interface callback. |
2366 | * | 2372 | * |
2367 | * When beacon filtering is enabled with IEEE80211_HW_BEACON_FILTERING and | 2373 | * When beacon filtering is enabled with %IEEE80211_HW_BEACON_FILTERING and |
2368 | * IEEE80211_CONF_PS is set, the driver needs to inform whenever the | 2374 | * %IEEE80211_CONF_PS is set, the driver needs to inform whenever the |
2369 | * hardware is not receiving beacons with this function. | 2375 | * hardware is not receiving beacons with this function. |
2370 | */ | 2376 | */ |
2371 | void ieee80211_beacon_loss(struct ieee80211_vif *vif); | 2377 | void ieee80211_beacon_loss(struct ieee80211_vif *vif); |
2372 | 2378 | ||
2379 | /** | ||
2380 | * ieee80211_connection_loss - inform hardware has lost connection to the AP | ||
2381 | * | ||
2382 | * @vif: &struct ieee80211_vif pointer from the add_interface callback. | ||
2383 | * | ||
2384 | * When beacon filtering is enabled with %IEEE80211_HW_BEACON_FILTERING, and | ||
2385 | * %IEEE80211_CONF_PS and %IEEE80211_HW_CONNECTION_MONITOR are set, the driver | ||
2386 | * needs to inform if the connection to the AP has been lost. | ||
2387 | * | ||
2388 | * This function will cause immediate change to disassociated state, | ||
2389 | * without connection recovery attempts. | ||
2390 | */ | ||
2391 | void ieee80211_connection_loss(struct ieee80211_vif *vif); | ||
2392 | |||
2373 | /* Rate control API */ | 2393 | /* Rate control API */ |
2374 | 2394 | ||
2375 | /** | 2395 | /** |