aboutsummaryrefslogtreecommitdiffstats
path: root/include
diff options
context:
space:
mode:
authorJuuso Oikarinen <juuso.oikarinen@nokia.com>2010-03-19 01:14:53 -0400
committerJohn W. Linville <linville@tuxdriver.com>2010-03-23 16:51:42 -0400
commit1e4dcd012423b6a28f968a55886d2b27896a1586 (patch)
treec2eadaf6a33175840b2f5d8fb7dd6af1d5be76ed /include
parent43ead78ac48b75aaf47de96fcf10cbf5962f32a6 (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.h24
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 */
958enum ieee80211_hw_flags { 963enum 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 */
2371void ieee80211_beacon_loss(struct ieee80211_vif *vif); 2377void 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 */
2391void ieee80211_connection_loss(struct ieee80211_vif *vif);
2392
2373/* Rate control API */ 2393/* Rate control API */
2374 2394
2375/** 2395/**