aboutsummaryrefslogtreecommitdiffstats
path: root/net/mac80211/ieee80211_i.h
diff options
context:
space:
mode:
authorJohannes Berg <johannes@sipsolutions.net>2009-12-23 07:15:42 -0500
committerJohn W. Linville <linville@tuxdriver.com>2009-12-28 16:55:03 -0500
commitb8bc4b0aa9bfba755c64b11b8f60e6cfab25dc9d (patch)
tree7f95b0c7d4f847e3c624b67899c7a62f6b73ce26 /net/mac80211/ieee80211_i.h
parent9588bbd5529461a3dacd435bf239c84c3508f569 (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.h15
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
227enum ieee80211_work_type { 227enum 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);
1162void ieee80211_work_purge(struct ieee80211_sub_if_data *sdata); 1171void ieee80211_work_purge(struct ieee80211_sub_if_data *sdata);
1163ieee80211_rx_result ieee80211_work_rx_mgmt(struct ieee80211_sub_if_data *sdata, 1172ieee80211_rx_result ieee80211_work_rx_mgmt(struct ieee80211_sub_if_data *sdata,
1164 struct sk_buff *skb); 1173 struct sk_buff *skb);
1174int 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);
1178int 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