All of lore.kernel.org
 help / color / mirror / Atom feed
* [PATCH] cfg80211: add extensible feature flag attribute
@ 2014-12-23 15:55 Arend van Spriel
  2014-12-23 15:58 ` Johannes Berg
  2015-01-06 10:35 ` Johannes Berg
  0 siblings, 2 replies; 6+ messages in thread
From: Arend van Spriel @ 2014-12-23 15:55 UTC (permalink / raw)
  To: Johannes Berg
  Cc: linux-wireless, Gautam Kumar Shukla, Avinash Patil, Arend van Spriel

From: Gautam Kumar Shukla <gautams@broadcom.com>

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>
---
 include/net/cfg80211.h       | 39 +++++++++++++++++++++++++++++++++++++++
 include/uapi/linux/nl80211.h | 22 ++++++++++++++++++++++
 net/wireless/nl80211.c       |  5 +++++
 3 files changed, 66 insertions(+)

diff --git a/include/net/cfg80211.h b/include/net/cfg80211.h
index bd672ea..f38645f 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 18cb0aa..0fe36b4 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,
@@ -4221,6 +4230,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.
diff --git a/net/wireless/nl80211.c b/net/wireless/nl80211.c
index 7029201..689e1a8 100644
--- a/net/wireless/nl80211.c
+++ b/net/wireless/nl80211.c
@@ -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;
-- 
1.9.1


^ permalink raw reply related	[flat|nested] 6+ messages in thread

* Re: [PATCH] cfg80211: add extensible feature flag attribute
  2014-12-23 15:55 [PATCH] cfg80211: add extensible feature flag attribute Arend van Spriel
@ 2014-12-23 15:58 ` Johannes Berg
  2014-12-23 16:05   ` Arend van Spriel
  2015-01-06 10:35 ` Johannes Berg
  1 sibling, 1 reply; 6+ messages in thread
From: Johannes Berg @ 2014-12-23 15:58 UTC (permalink / raw)
  To: Arend van Spriel; +Cc: linux-wireless, Gautam Kumar Shukla, Avinash Patil

On Tue, 2014-12-23 at 16:55 +0100, Arend van Spriel wrote:
> From: Gautam Kumar Shukla <gautams@broadcom.com>
> 
> 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.

Ah, I guess this will compile without even any flags defined, so
Avinash, you can just build on top of this and define the first flag,
and for the sake of attribution I'll apply it as two separate patches.

Thanks Arend.

johannes


^ permalink raw reply	[flat|nested] 6+ messages in thread

* Re: [PATCH] cfg80211: add extensible feature flag attribute
  2014-12-23 15:58 ` Johannes Berg
@ 2014-12-23 16:05   ` Arend van Spriel
  2014-12-23 16:07     ` Johannes Berg
  0 siblings, 1 reply; 6+ messages in thread
From: Arend van Spriel @ 2014-12-23 16:05 UTC (permalink / raw)
  To: Johannes Berg; +Cc: linux-wireless, Gautam Kumar Shukla, Avinash Patil

On 12/23/14 16:58, Johannes Berg wrote:
> On Tue, 2014-12-23 at 16:55 +0100, Arend van Spriel wrote:
>> From: Gautam Kumar Shukla<gautams@broadcom.com>
>>
>> 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.
>
> Ah, I guess this will compile without even any flags defined, so
> Avinash, you can just build on top of this and define the first flag,
> and for the sake of attribution I'll apply it as two separate patches.

If Avinash keeps my signed-off-by and add note of what he changed below 
that I feel sufficiently attributed. Either way is fine by me.

It compiles, but I guess nla_put() will fail for u8[0+8-1/8] field.

Gr. AvS

> Thanks Arend.
>
> johannes
>


^ permalink raw reply	[flat|nested] 6+ messages in thread

* Re: [PATCH] cfg80211: add extensible feature flag attribute
  2014-12-23 16:05   ` Arend van Spriel
@ 2014-12-23 16:07     ` Johannes Berg
  2014-12-23 19:05       ` Arend van Spriel
  0 siblings, 1 reply; 6+ messages in thread
From: Johannes Berg @ 2014-12-23 16:07 UTC (permalink / raw)
  To: Arend van Spriel; +Cc: linux-wireless, Gautam Kumar Shukla, Avinash Patil

On Tue, 2014-12-23 at 17:05 +0100, Arend van Spriel wrote:

> It compiles, but I guess nla_put() will fail for u8[0+8-1/8] field.

I think it should work - the array is 0 bytes long, so sizeof() would
return 0, and that turns out to be equivalent to nla_put_flag().

johannes


^ permalink raw reply	[flat|nested] 6+ messages in thread

* Re: [PATCH] cfg80211: add extensible feature flag attribute
  2014-12-23 16:07     ` Johannes Berg
@ 2014-12-23 19:05       ` Arend van Spriel
  0 siblings, 0 replies; 6+ messages in thread
From: Arend van Spriel @ 2014-12-23 19:05 UTC (permalink / raw)
  To: Johannes Berg; +Cc: linux-wireless, Gautam Kumar Shukla, Avinash Patil

On 12/23/14 17:07, Johannes Berg wrote:
> On Tue, 2014-12-23 at 17:05 +0100, Arend van Spriel wrote:
>
>> It compiles, but I guess nla_put() will fail for u8[0+8-1/8] field.
>
> I think it should work - the array is 0 bytes long, so sizeof() would
> return 0, and that turns out to be equivalent to nla_put_flag().

Another day, another lesson ;-) Wondered how netlink flags were 
transported in the message, but never bothered to look. Thanks.

Arend

> johannes
>


^ permalink raw reply	[flat|nested] 6+ messages in thread

* Re: [PATCH] cfg80211: add extensible feature flag attribute
  2014-12-23 15:55 [PATCH] cfg80211: add extensible feature flag attribute Arend van Spriel
  2014-12-23 15:58 ` Johannes Berg
@ 2015-01-06 10:35 ` Johannes Berg
  1 sibling, 0 replies; 6+ messages in thread
From: Johannes Berg @ 2015-01-06 10:35 UTC (permalink / raw)
  To: Arend van Spriel; +Cc: linux-wireless, Gautam Kumar Shukla, Avinash Patil

On Tue, 2014-12-23 at 16:55 +0100, Arend van Spriel wrote:
> From: Gautam Kumar Shukla <gautams@broadcom.com>
> 
> 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.

Since it's quite clear that *somebody* will soon use this, I've applied
it now.

Thanks.

johannes


^ permalink raw reply	[flat|nested] 6+ messages in thread

end of thread, other threads:[~2015-01-06 10:36 UTC | newest]

Thread overview: 6+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2014-12-23 15:55 [PATCH] cfg80211: add extensible feature flag attribute Arend van Spriel
2014-12-23 15:58 ` Johannes Berg
2014-12-23 16:05   ` Arend van Spriel
2014-12-23 16:07     ` Johannes Berg
2014-12-23 19:05       ` Arend van Spriel
2015-01-06 10:35 ` Johannes Berg

This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.