diff options
Diffstat (limited to 'include')
-rw-r--r-- | include/linux/nl80211.h | 36 | ||||
-rw-r--r-- | include/net/cfg80211.h | 47 |
2 files changed, 83 insertions, 0 deletions
diff --git a/include/linux/nl80211.h b/include/linux/nl80211.h index da8ea2e19273..2bfbe88837ef 100644 --- a/include/linux/nl80211.h +++ b/include/linux/nl80211.h | |||
@@ -270,6 +270,31 @@ | |||
270 | * @NL80211_CMD_SET_WIPHY_NETNS: Set a wiphy's netns. Note that all devices | 270 | * @NL80211_CMD_SET_WIPHY_NETNS: Set a wiphy's netns. Note that all devices |
271 | * associated with this wiphy must be down and will follow. | 271 | * associated with this wiphy must be down and will follow. |
272 | * | 272 | * |
273 | * @NL80211_CMD_REMAIN_ON_CHANNEL: Request to remain awake on the specified | ||
274 | * channel for the specified amount of time. This can be used to do | ||
275 | * off-channel operations like transmit a Public Action frame and wait for | ||
276 | * a response while being associated to an AP on another channel. | ||
277 | * %NL80211_ATTR_WIPHY or %NL80211_ATTR_IFINDEX is used to specify which | ||
278 | * radio is used. %NL80211_ATTR_WIPHY_FREQ is used to specify the | ||
279 | * frequency for the operation and %NL80211_ATTR_WIPHY_CHANNEL_TYPE may be | ||
280 | * optionally used to specify additional channel parameters. | ||
281 | * %NL80211_ATTR_DURATION is used to specify the duration in milliseconds | ||
282 | * to remain on the channel. This command is also used as an event to | ||
283 | * notify when the requested duration starts (it may take a while for the | ||
284 | * driver to schedule this time due to other concurrent needs for the | ||
285 | * radio). | ||
286 | * When called, this operation returns a cookie (%NL80211_ATTR_COOKIE) | ||
287 | * that will be included with any events pertaining to this request; | ||
288 | * the cookie is also used to cancel the request. | ||
289 | * @NL80211_CMD_CANCEL_REMAIN_ON_CHANNEL: This command can be used to cancel a | ||
290 | * pending remain-on-channel duration if the desired operation has been | ||
291 | * completed prior to expiration of the originally requested duration. | ||
292 | * %NL80211_ATTR_WIPHY or %NL80211_ATTR_IFINDEX is used to specify the | ||
293 | * radio. The %NL80211_ATTR_COOKIE attribute must be given as well to | ||
294 | * uniquely identify the request. | ||
295 | * This command is also used as an event to notify when a requested | ||
296 | * remain-on-channel duration has expired. | ||
297 | * | ||
273 | * @NL80211_CMD_MAX: highest used command number | 298 | * @NL80211_CMD_MAX: highest used command number |
274 | * @__NL80211_CMD_AFTER_LAST: internal use | 299 | * @__NL80211_CMD_AFTER_LAST: internal use |
275 | */ | 300 | */ |
@@ -353,6 +378,9 @@ enum nl80211_commands { | |||
353 | NL80211_CMD_DEL_PMKSA, | 378 | NL80211_CMD_DEL_PMKSA, |
354 | NL80211_CMD_FLUSH_PMKSA, | 379 | NL80211_CMD_FLUSH_PMKSA, |
355 | 380 | ||
381 | NL80211_CMD_REMAIN_ON_CHANNEL, | ||
382 | NL80211_CMD_CANCEL_REMAIN_ON_CHANNEL, | ||
383 | |||
356 | /* add new commands above here */ | 384 | /* add new commands above here */ |
357 | 385 | ||
358 | /* used to define NL80211_CMD_MAX below */ | 386 | /* used to define NL80211_CMD_MAX below */ |
@@ -606,6 +634,10 @@ enum nl80211_commands { | |||
606 | * @NL80211_ATTR_MAX_NUM_PMKIDS: maximum number of PMKIDs a firmware can | 634 | * @NL80211_ATTR_MAX_NUM_PMKIDS: maximum number of PMKIDs a firmware can |
607 | * cache, a wiphy attribute. | 635 | * cache, a wiphy attribute. |
608 | * | 636 | * |
637 | * @NL80211_ATTR_DURATION: Duration of an operation in milliseconds, u32. | ||
638 | * | ||
639 | * @NL80211_ATTR_COOKIE: Generic 64-bit cookie to identify objects. | ||
640 | * | ||
609 | * @NL80211_ATTR_MAX: highest attribute number currently defined | 641 | * @NL80211_ATTR_MAX: highest attribute number currently defined |
610 | * @__NL80211_ATTR_AFTER_LAST: internal use | 642 | * @__NL80211_ATTR_AFTER_LAST: internal use |
611 | */ | 643 | */ |
@@ -743,6 +775,10 @@ enum nl80211_attrs { | |||
743 | NL80211_ATTR_PMKID, | 775 | NL80211_ATTR_PMKID, |
744 | NL80211_ATTR_MAX_NUM_PMKIDS, | 776 | NL80211_ATTR_MAX_NUM_PMKIDS, |
745 | 777 | ||
778 | NL80211_ATTR_DURATION, | ||
779 | |||
780 | NL80211_ATTR_COOKIE, | ||
781 | |||
746 | /* add attributes here, update the policy in nl80211.c */ | 782 | /* add attributes here, update the policy in nl80211.c */ |
747 | 783 | ||
748 | __NL80211_ATTR_AFTER_LAST, | 784 | __NL80211_ATTR_AFTER_LAST, |
diff --git a/include/net/cfg80211.h b/include/net/cfg80211.h index 542a477a94da..b66beb052054 100644 --- a/include/net/cfg80211.h +++ b/include/net/cfg80211.h | |||
@@ -988,6 +988,15 @@ struct cfg80211_pmksa { | |||
988 | * | 988 | * |
989 | * @dump_survey: get site survey information. | 989 | * @dump_survey: get site survey information. |
990 | * | 990 | * |
991 | * @remain_on_channel: Request the driver to remain awake on the specified | ||
992 | * channel for the specified duration to complete an off-channel | ||
993 | * operation (e.g., public action frame exchange). When the driver is | ||
994 | * ready on the requested channel, it must indicate this with an event | ||
995 | * notification by calling cfg80211_ready_on_channel(). | ||
996 | * @cancel_remain_on_channel: Cancel an on-going remain-on-channel operation. | ||
997 | * This allows the operation to be terminated prior to timeout based on | ||
998 | * the duration value. | ||
999 | * | ||
991 | * @testmode_cmd: run a test mode command | 1000 | * @testmode_cmd: run a test mode command |
992 | * | 1001 | * |
993 | * @set_pmksa: Cache a PMKID for a BSSID. This is mostly useful for fullmac | 1002 | * @set_pmksa: Cache a PMKID for a BSSID. This is mostly useful for fullmac |
@@ -1123,6 +1132,16 @@ struct cfg80211_ops { | |||
1123 | struct cfg80211_pmksa *pmksa); | 1132 | struct cfg80211_pmksa *pmksa); |
1124 | int (*flush_pmksa)(struct wiphy *wiphy, struct net_device *netdev); | 1133 | int (*flush_pmksa)(struct wiphy *wiphy, struct net_device *netdev); |
1125 | 1134 | ||
1135 | int (*remain_on_channel)(struct wiphy *wiphy, | ||
1136 | struct net_device *dev, | ||
1137 | struct ieee80211_channel *chan, | ||
1138 | enum nl80211_channel_type channel_type, | ||
1139 | unsigned int duration, | ||
1140 | u64 *cookie); | ||
1141 | int (*cancel_remain_on_channel)(struct wiphy *wiphy, | ||
1142 | struct net_device *dev, | ||
1143 | u64 cookie); | ||
1144 | |||
1126 | /* some temporary stuff to finish wext */ | 1145 | /* some temporary stuff to finish wext */ |
1127 | int (*set_power_mgmt)(struct wiphy *wiphy, struct net_device *dev, | 1146 | int (*set_power_mgmt)(struct wiphy *wiphy, struct net_device *dev, |
1128 | bool enabled, int timeout); | 1147 | bool enabled, int timeout); |
@@ -2147,5 +2166,33 @@ void cfg80211_roamed(struct net_device *dev, const u8 *bssid, | |||
2147 | void cfg80211_disconnected(struct net_device *dev, u16 reason, | 2166 | void cfg80211_disconnected(struct net_device *dev, u16 reason, |
2148 | u8 *ie, size_t ie_len, gfp_t gfp); | 2167 | u8 *ie, size_t ie_len, gfp_t gfp); |
2149 | 2168 | ||
2169 | /** | ||
2170 | * cfg80211_ready_on_channel - notification of remain_on_channel start | ||
2171 | * @dev: network device | ||
2172 | * @cookie: the request cookie | ||
2173 | * @chan: The current channel (from remain_on_channel request) | ||
2174 | * @channel_type: Channel type | ||
2175 | * @duration: Duration in milliseconds that the driver intents to remain on the | ||
2176 | * channel | ||
2177 | * @gfp: allocation flags | ||
2178 | */ | ||
2179 | void cfg80211_ready_on_channel(struct net_device *dev, u64 cookie, | ||
2180 | struct ieee80211_channel *chan, | ||
2181 | enum nl80211_channel_type channel_type, | ||
2182 | unsigned int duration, gfp_t gfp); | ||
2183 | |||
2184 | /** | ||
2185 | * cfg80211_remain_on_channel_expired - remain_on_channel duration expired | ||
2186 | * @dev: network device | ||
2187 | * @cookie: the request cookie | ||
2188 | * @chan: The current channel (from remain_on_channel request) | ||
2189 | * @channel_type: Channel type | ||
2190 | * @gfp: allocation flags | ||
2191 | */ | ||
2192 | void cfg80211_remain_on_channel_expired(struct net_device *dev, | ||
2193 | u64 cookie, | ||
2194 | struct ieee80211_channel *chan, | ||
2195 | enum nl80211_channel_type channel_type, | ||
2196 | gfp_t gfp); | ||
2150 | 2197 | ||
2151 | #endif /* __NET_CFG80211_H */ | 2198 | #endif /* __NET_CFG80211_H */ |