diff options
author | Johannes Berg <johannes@sipsolutions.net> | 2009-12-23 07:15:42 -0500 |
---|---|---|
committer | John W. Linville <linville@tuxdriver.com> | 2009-12-28 16:55:03 -0500 |
commit | b8bc4b0aa9bfba755c64b11b8f60e6cfab25dc9d (patch) | |
tree | 7f95b0c7d4f847e3c624b67899c7a62f6b73ce26 /net/mac80211/ieee80211_i.h | |
parent | 9588bbd5529461a3dacd435bf239c84c3508f569 (diff) |
mac80211: support remain-on-channel command
This implements the new remain-on-channel cfg80211
command in mac80211, extending the work interface.
Also change the work purge code to be able to clean
up events properly (pretending they timed out.)
Signed-off-by: Jouni Malinen <jouni.malinen@atheros.com>
Signed-off-by: Johannes Berg <johannes@sipsolutions.net>
Signed-off-by: John W. Linville <linville@tuxdriver.com>
Diffstat (limited to 'net/mac80211/ieee80211_i.h')
-rw-r--r-- | net/mac80211/ieee80211_i.h | 15 |
1 files changed, 15 insertions, 0 deletions
diff --git a/net/mac80211/ieee80211_i.h b/net/mac80211/ieee80211_i.h index fd912eb5309e..23547ebacf3d 100644 --- a/net/mac80211/ieee80211_i.h +++ b/net/mac80211/ieee80211_i.h | |||
@@ -225,9 +225,11 @@ struct mesh_preq_queue { | |||
225 | }; | 225 | }; |
226 | 226 | ||
227 | enum ieee80211_work_type { | 227 | enum ieee80211_work_type { |
228 | IEEE80211_WORK_ABORT, | ||
228 | IEEE80211_WORK_DIRECT_PROBE, | 229 | IEEE80211_WORK_DIRECT_PROBE, |
229 | IEEE80211_WORK_AUTH, | 230 | IEEE80211_WORK_AUTH, |
230 | IEEE80211_WORK_ASSOC, | 231 | IEEE80211_WORK_ASSOC, |
232 | IEEE80211_WORK_REMAIN_ON_CHANNEL, | ||
231 | }; | 233 | }; |
232 | 234 | ||
233 | /** | 235 | /** |
@@ -283,6 +285,9 @@ struct ieee80211_work { | |||
283 | u8 supp_rates_len; | 285 | u8 supp_rates_len; |
284 | bool wmm_used, use_11n; | 286 | bool wmm_used, use_11n; |
285 | } assoc; | 287 | } assoc; |
288 | struct { | ||
289 | unsigned long timeout; | ||
290 | } remain; | ||
286 | }; | 291 | }; |
287 | 292 | ||
288 | int ie_len; | 293 | int ie_len; |
@@ -729,6 +734,10 @@ struct ieee80211_local { | |||
729 | enum nl80211_channel_type oper_channel_type; | 734 | enum nl80211_channel_type oper_channel_type; |
730 | struct ieee80211_channel *oper_channel, *csa_channel; | 735 | struct ieee80211_channel *oper_channel, *csa_channel; |
731 | 736 | ||
737 | /* Temporary remain-on-channel for off-channel operations */ | ||
738 | struct ieee80211_channel *tmp_channel; | ||
739 | enum nl80211_channel_type tmp_channel_type; | ||
740 | |||
732 | /* SNMP counters */ | 741 | /* SNMP counters */ |
733 | /* dot11CountersTable */ | 742 | /* dot11CountersTable */ |
734 | u32 dot11TransmittedFragmentCount; | 743 | u32 dot11TransmittedFragmentCount; |
@@ -1162,6 +1171,12 @@ void free_work(struct ieee80211_work *wk); | |||
1162 | void ieee80211_work_purge(struct ieee80211_sub_if_data *sdata); | 1171 | void ieee80211_work_purge(struct ieee80211_sub_if_data *sdata); |
1163 | ieee80211_rx_result ieee80211_work_rx_mgmt(struct ieee80211_sub_if_data *sdata, | 1172 | ieee80211_rx_result ieee80211_work_rx_mgmt(struct ieee80211_sub_if_data *sdata, |
1164 | struct sk_buff *skb); | 1173 | struct sk_buff *skb); |
1174 | int ieee80211_wk_remain_on_channel(struct ieee80211_sub_if_data *sdata, | ||
1175 | struct ieee80211_channel *chan, | ||
1176 | enum nl80211_channel_type channel_type, | ||
1177 | unsigned int duration, u64 *cookie); | ||
1178 | int ieee80211_wk_cancel_remain_on_channel( | ||
1179 | struct ieee80211_sub_if_data *sdata, u64 cookie); | ||
1165 | 1180 | ||
1166 | #ifdef CONFIG_MAC80211_NOINLINE | 1181 | #ifdef CONFIG_MAC80211_NOINLINE |
1167 | #define debug_noinline noinline | 1182 | #define debug_noinline noinline |