diff options
| author | Gautam Kumar Shukla <gautams@broadcom.com> | 2014-12-23 16:55:19 +0100 | 
|---|---|---|
| committer | Johannes Berg <johannes.berg@intel.com> | 2015-01-06 12:10:24 +0100 | 
| commit | d75bb06b61cb69ee6223d791d3bb230e68623b20 (patch) | |
| tree | a395b7335718bcafbd87275bb148169ed708666c /include | |
| parent | 1803f594cbf9bb2e662ac945038113d0d0cc5e89 (diff) | |
cfg80211: add extensible feature flag attribute
With the wiphy::features flag being used up this patch adds a
new field wiphy::ext_features. Considering extensibility this
new field is declared as a byte array. This extensible flag is
exposed to user-space by NL80211_ATTR_EXT_FEATURES.
Cc: Avinash Patil <patila@marvell.com>
Signed-off-by: Gautam (Gautam Kumar) Shukla <gautams@broadcom.com>
Signed-off-by: Arend van Spriel <arend@broadcom.com>
Signed-off-by: Johannes Berg <johannes.berg@intel.com>
Diffstat (limited to 'include')
| -rw-r--r-- | include/net/cfg80211.h | 39 | ||||
| -rw-r--r-- | include/uapi/linux/nl80211.h | 22 | 
2 files changed, 61 insertions, 0 deletions
| diff --git a/include/net/cfg80211.h b/include/net/cfg80211.h index bd672ea08c9a..f38645fb83b9 100644 --- a/include/net/cfg80211.h +++ b/include/net/cfg80211.h @@ -3016,6 +3016,8 @@ struct wiphy_vendor_command {   * @regulatory_flags: wiphy regulatory flags, see   *	&enum ieee80211_regulatory_flags   * @features: features advertised to nl80211, see &enum nl80211_feature_flags. + * @ext_features: extended features advertised to nl80211, see + *	&enum nl80211_ext_feature_index.   * @bss_priv_size: each BSS struct has private data allocated with it,   *	this variable determines its size   * @max_scan_ssids: maximum number of SSIDs the device can scan for in @@ -3125,6 +3127,7 @@ struct wiphy {  	u16 max_acl_mac_addrs;  	u32 flags, regulatory_flags, features; +	u8 ext_features[DIV_ROUND_UP(NUM_NL80211_EXT_FEATURES, 8)];  	u32 ap_sme_capa; @@ -5052,6 +5055,42 @@ void cfg80211_stop_iface(struct wiphy *wiphy, struct wireless_dev *wdev,   */  void cfg80211_shutdown_all_interfaces(struct wiphy *wiphy); +/** + * wiphy_ext_feature_set - set the extended feature flag + * + * @wiphy: the wiphy to modify. + * @ftidx: extended feature bit index. + * + * The extended features are flagged in multiple bytes (see + * &struct wiphy.@ext_features) + */ +static inline void wiphy_ext_feature_set(struct wiphy *wiphy, +					 enum nl80211_ext_feature_index ftidx) +{ +	u8 *ft_byte; + +	ft_byte = &wiphy->ext_features[ftidx / 8]; +	*ft_byte |= BIT(ftidx % 8); +} + +/** + * wiphy_ext_feature_isset - check the extended feature flag + * + * @wiphy: the wiphy to modify. + * @ftidx: extended feature bit index. + * + * The extended features are flagged in multiple bytes (see + * &struct wiphy.@ext_features) + */ +static inline bool +wiphy_ext_feature_isset(struct wiphy *wiphy, +			enum nl80211_ext_feature_index ftidx) +{ +	u8 ft_byte; + +	ft_byte = wiphy->ext_features[ftidx / 8]; +	return (ft_byte & BIT(ftidx % 8)) != 0; +}  /* ethtool helper */  void cfg80211_get_drvinfo(struct net_device *dev, struct ethtool_drvinfo *info); diff --git a/include/uapi/linux/nl80211.h b/include/uapi/linux/nl80211.h index 54f391141351..f95d35483086 100644 --- a/include/uapi/linux/nl80211.h +++ b/include/uapi/linux/nl80211.h @@ -1713,6 +1713,13 @@ enum nl80211_commands {   *	obtained from it is coming from the device's wiphy and not the global   *	cfg80211 regdomain.   * + * @NL80211_ATTR_EXT_FEATURES: extended feature flags contained in a byte + *	array. The feature flags are identified by their bit index (see &enum + *	nl80211_ext_feature_index). The bit index is ordered starting at the + *	least-significant bit of the first byte in the array, ie. bit index 0 + *	is located at bit 0 of byte 0. bit index 25 would be located at bit 1 + *	of byte 3 (u8 array). + *   * @NUM_NL80211_ATTR: total number of nl80211_attrs available   * @NL80211_ATTR_MAX: highest attribute number currently defined   * @__NL80211_ATTR_AFTER_LAST: internal use @@ -2072,6 +2079,8 @@ enum nl80211_attrs {  	NL80211_ATTR_WIPHY_SELF_MANAGED_REG, +	NL80211_ATTR_EXT_FEATURES, +  	/* add attributes here, update the policy in nl80211.c */  	__NL80211_ATTR_AFTER_LAST, @@ -4224,6 +4233,19 @@ enum nl80211_feature_flags {  };  /** + * enum nl80211_ext_feature_index - bit index of extended features. + * + * @NUM_NL80211_EXT_FEATURES: number of extended features. + * @MAX_NL80211_EXT_FEATURES: highest extended feature index. + */ +enum nl80211_ext_feature_index { + +	/* add new features before the definition below */ +	NUM_NL80211_EXT_FEATURES, +	MAX_NL80211_EXT_FEATURES = NUM_NL80211_EXT_FEATURES - 1 +}; + +/**   * enum nl80211_probe_resp_offload_support_attr - optional supported   *	protocols for probe-response offloading by the driver/FW.   *	To be used with the %NL80211_ATTR_PROBE_RESP_OFFLOAD attribute. | 
