mirror of
https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git
synced 2024-08-24 17:59:32 +00:00
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>
This commit is contained in:
parent
1803f594cb
commit
d75bb06b61
3 changed files with 66 additions and 0 deletions
|
@ -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);
|
||||
|
|
|
@ -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,
|
||||
|
@ -4223,6 +4232,19 @@ enum nl80211_feature_flags {
|
|||
NL80211_FEATURE_ND_RANDOM_MAC_ADDR = 1 << 31,
|
||||
};
|
||||
|
||||
/**
|
||||
* 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.
|
||||
|
|
|
@ -1706,6 +1706,11 @@ static int nl80211_send_wiphy(struct cfg80211_registered_device *rdev,
|
|||
nla_put_flag(msg, NL80211_ATTR_WIPHY_SELF_MANAGED_REG))
|
||||
goto nla_put_failure;
|
||||
|
||||
if (nla_put(msg, NL80211_ATTR_EXT_FEATURES,
|
||||
sizeof(rdev->wiphy.ext_features),
|
||||
rdev->wiphy.ext_features))
|
||||
goto nla_put_failure;
|
||||
|
||||
/* done */
|
||||
state->split_start = 0;
|
||||
break;
|
||||
|
|
Loading…
Reference in a new issue