diff options
author | Arend van Spriel <arend@broadcom.com> | 2013-04-18 09:49:00 -0400 |
---|---|---|
committer | Johannes Berg <johannes.berg@intel.com> | 2013-04-22 09:48:00 -0400 |
commit | 5de17984898c5758fc6ebe08eccea9f4b6548914 (patch) | |
tree | 17aab780c025cfac0bd5a8b010b8ea9c138ff780 /include/net | |
parent | a36473621c871df14bbf2106ab0721b475aac8e0 (diff) |
cfg80211: introduce critical protocol indication from user-space
Some protocols need a more reliable connection to complete
successful in reasonable time. This patch adds a user-space
API to indicate the wireless driver that a critical protocol
is about to commence and when it is done, using nl80211 primitives
NL80211_CMD_CRIT_PROTOCOL_START and NL80211_CRIT_PROTOCOL_STOP.
There can be only on critical protocol session started per
registered cfg80211 device.
The driver can support this by implementing the cfg80211 callbacks
.crit_proto_start() and .crit_proto_stop(). Examples of protocols
that can benefit from this are DHCP, EAPOL, APIPA. Exactly how the
link can/should be made more reliable is up to the driver. Things
to consider are avoid scanning, no multi-channel operations, and
alter coexistence schemes.
Reviewed-by: Pieter-Paul Giesberts <pieterpg@broadcom.com>
Reviewed-by: Franky (Zhenhui) Lin <frankyl@broadcom.com>
Signed-off-by: Arend van Spriel <arend@broadcom.com>
Signed-off-by: Johannes Berg <johannes.berg@intel.com>
Diffstat (limited to 'include/net')
-rw-r--r-- | include/net/cfg80211.h | 23 |
1 files changed, 23 insertions, 0 deletions
diff --git a/include/net/cfg80211.h b/include/net/cfg80211.h index dff96d8cafcd..26b5b692c22b 100644 --- a/include/net/cfg80211.h +++ b/include/net/cfg80211.h | |||
@@ -2002,6 +2002,12 @@ struct cfg80211_update_ft_ies_params { | |||
2002 | * @update_ft_ies: Provide updated Fast BSS Transition information to the | 2002 | * @update_ft_ies: Provide updated Fast BSS Transition information to the |
2003 | * driver. If the SME is in the driver/firmware, this information can be | 2003 | * driver. If the SME is in the driver/firmware, this information can be |
2004 | * used in building Authentication and Reassociation Request frames. | 2004 | * used in building Authentication and Reassociation Request frames. |
2005 | * | ||
2006 | * @crit_proto_start: Indicates a critical protocol needs more link reliability | ||
2007 | * for a given duration (milliseconds). The protocol is provided so the | ||
2008 | * driver can take the most appropriate actions. | ||
2009 | * @crit_proto_stop: Indicates critical protocol no longer needs increased link | ||
2010 | * reliability. This operation can not fail. | ||
2005 | */ | 2011 | */ |
2006 | struct cfg80211_ops { | 2012 | struct cfg80211_ops { |
2007 | int (*suspend)(struct wiphy *wiphy, struct cfg80211_wowlan *wow); | 2013 | int (*suspend)(struct wiphy *wiphy, struct cfg80211_wowlan *wow); |
@@ -2231,6 +2237,12 @@ struct cfg80211_ops { | |||
2231 | struct cfg80211_chan_def *chandef); | 2237 | struct cfg80211_chan_def *chandef); |
2232 | int (*update_ft_ies)(struct wiphy *wiphy, struct net_device *dev, | 2238 | int (*update_ft_ies)(struct wiphy *wiphy, struct net_device *dev, |
2233 | struct cfg80211_update_ft_ies_params *ftie); | 2239 | struct cfg80211_update_ft_ies_params *ftie); |
2240 | int (*crit_proto_start)(struct wiphy *wiphy, | ||
2241 | struct wireless_dev *wdev, | ||
2242 | enum nl80211_crit_proto_id protocol, | ||
2243 | u16 duration); | ||
2244 | void (*crit_proto_stop)(struct wiphy *wiphy, | ||
2245 | struct wireless_dev *wdev); | ||
2234 | }; | 2246 | }; |
2235 | 2247 | ||
2236 | /* | 2248 | /* |
@@ -4137,6 +4149,17 @@ void cfg80211_report_wowlan_wakeup(struct wireless_dev *wdev, | |||
4137 | struct cfg80211_wowlan_wakeup *wakeup, | 4149 | struct cfg80211_wowlan_wakeup *wakeup, |
4138 | gfp_t gfp); | 4150 | gfp_t gfp); |
4139 | 4151 | ||
4152 | /** | ||
4153 | * cfg80211_crit_proto_stopped() - indicate critical protocol stopped by driver. | ||
4154 | * | ||
4155 | * @wdev: the wireless device for which critical protocol is stopped. | ||
4156 | * | ||
4157 | * This function can be called by the driver to indicate it has reverted | ||
4158 | * operation back to normal. One reason could be that the duration given | ||
4159 | * by .crit_proto_start() has expired. | ||
4160 | */ | ||
4161 | void cfg80211_crit_proto_stopped(struct wireless_dev *wdev, gfp_t gfp); | ||
4162 | |||
4140 | /* Logging, debugging and troubleshooting/diagnostic helpers. */ | 4163 | /* Logging, debugging and troubleshooting/diagnostic helpers. */ |
4141 | 4164 | ||
4142 | /* wiphy_printk helpers, similar to dev_printk */ | 4165 | /* wiphy_printk helpers, similar to dev_printk */ |