summaryrefslogtreecommitdiff
path: root/include
diff options
context:
space:
mode:
authorJohannes Berg <johannes.berg@intel.com>2020-02-24 13:34:25 +0300
committerJohannes Berg <johannes.berg@intel.com>2020-02-24 14:01:10 +0300
commit3710a8a6284f58a78ba4fe9c4b6672207636a223 (patch)
tree23aad86b1eae74040558aeb3d9022f699aafa90d /include
parent77f576deaa393b54a0f2ca8ab1ab5b2d3c6b971b (diff)
downloadlinux-3710a8a6284f58a78ba4fe9c4b6672207636a223.tar.xz
nl80211: modify TID-config API
Make some changes to the TID-config API: * use u16 in nl80211 (only, and restrict to using 8 bits for now), to avoid issues in the future if we ever want to use higher TIDs. * reject empty TIDs mask (via netlink policy) * change feature advertising to not use extended feature flags but have own mechanism for this, which simplifies the code * fix all variable names from 'tid' to 'tids' since it's a mask * change to cfg80211_ name prefixes, not ieee80211_ * fix some minor docs/spelling things. Change-Id: Ia234d464b3f914cdeab82f540e018855be580dce Signed-off-by: Johannes Berg <johannes.berg@intel.com>
Diffstat (limited to 'include')
-rw-r--r--include/net/cfg80211.h43
-rw-r--r--include/uapi/linux/nl80211.h51
2 files changed, 54 insertions, 40 deletions
diff --git a/include/net/cfg80211.h b/include/net/cfg80211.h
index 65a8bf73d21e..bbe4acef729d 100644
--- a/include/net/cfg80211.h
+++ b/include/net/cfg80211.h
@@ -626,36 +626,32 @@ struct cfg80211_chan_def {
struct ieee80211_edmg edmg;
};
-enum ieee80211_tid_conf_mask {
- IEEE80211_TID_CONF_NOACK = BIT(NL80211_TID_CONFIG_ATTR_NOACK),
-};
-
/**
- * struct ieee80211_tid_cfg - TID specific configuration
+ * struct cfg80211_tid_cfg - TID specific configuration
* @config_override: Flag to notify driver to reset TID configuration
* of the peer.
- * @tid: TID number
- * @tid_conf_mask: bitmap indicating which parameter changed
- * see &enum ieee80211_tid_conf_mask
+ * @tids: bitmap of TIDs to modify
+ * @mask: bitmap of attributes indicating which parameter changed,
+ * similar to &nl80211_tid_config_supp.
* @noack: noack configuration value for the TID
*/
-struct ieee80211_tid_cfg {
+struct cfg80211_tid_cfg {
bool config_override;
- u8 tid;
- u32 tid_conf_mask;
+ u8 tids;
+ u32 mask;
enum nl80211_tid_config noack;
};
/**
- * struct ieee80211_tid_config - TID configuration
+ * struct cfg80211_tid_config - TID configuration
* @peer: Station's MAC address
* @n_tid_conf: Number of TID specific configurations to be applied
* @tid_conf: Configuration change info
*/
-struct ieee80211_tid_config {
+struct cfg80211_tid_config {
const u8 *peer;
u32 n_tid_conf;
- struct ieee80211_tid_cfg tid_conf[];
+ struct cfg80211_tid_cfg tid_conf[];
};
/**
@@ -3705,8 +3701,8 @@ struct cfg80211_update_owe_info {
* and overrule HWMP path selection algorithm.
* @set_tid_config: TID specific configuration, this can be peer or BSS specific
* This callback may sleep.
- * @reset_tid_config: Reset TID specific configuration for the peer.
- * This callback may sleep.
+ * @reset_tid_config: Reset TID specific configuration for the peer, for the
+ * given TIDs. This callback may sleep.
*/
struct cfg80211_ops {
int (*suspend)(struct wiphy *wiphy, struct cfg80211_wowlan *wow);
@@ -4031,9 +4027,9 @@ struct cfg80211_ops {
int (*probe_mesh_link)(struct wiphy *wiphy, struct net_device *dev,
const u8 *buf, size_t len);
int (*set_tid_config)(struct wiphy *wiphy, struct net_device *dev,
- struct ieee80211_tid_config *tid_conf);
+ struct cfg80211_tid_config *tid_conf);
int (*reset_tid_config)(struct wiphy *wiphy, struct net_device *dev,
- const u8 *peer, u8 tid);
+ const u8 *peer, u8 tids);
};
/*
@@ -4641,6 +4637,13 @@ struct wiphy_iftype_akm_suites {
* @support_mbssid must be set for this to have any effect.
*
* @pmsr_capa: peer measurement capabilities
+ *
+ * @tid_config_support: describes the per-TID config support that the
+ * device has
+ * @tid_config_support.vif: bitmap of attributes (configurations)
+ * supported by the driver for each vif
+ * @tid_config_support.peer: bitmap of attributes (configurations)
+ * supported by the driver for each peer
*/
struct wiphy {
/* assign these fields before you register the wiphy */
@@ -4772,6 +4775,10 @@ struct wiphy {
const struct cfg80211_pmsr_capabilities *pmsr_capa;
+ struct {
+ u64 peer, vif;
+ } tid_config_support;
+
char priv[0] __aligned(NETDEV_ALIGN);
};
diff --git a/include/uapi/linux/nl80211.h b/include/uapi/linux/nl80211.h
index 0b12fcffb518..591d843eda72 100644
--- a/include/uapi/linux/nl80211.h
+++ b/include/uapi/linux/nl80211.h
@@ -267,20 +267,22 @@
/**
* DOC: TID configuration
*
- * TID configuration support can be advertised by drivers by setting
- * @NL80211_EXT_FEATURE_PER_TID_* and/or @NL80211_EXT_FEATURE_PER_STA_* config
- * mentioned in &enum nl80211_tid_config_attr.
- * Needed configuration parameters are mentioned in
- * &enum nl80211_tid_config_attr and it will be passed using
- * %NL80211_CMD_SET_TID_CONFIG through %NL80211_ATTR_TID_CONFIG.
- * If the configuration needs to be applied for specific peer then MAC address
- * of the peer needs to be passed in %NL80211_ATT_MAC, otherwise the
+ * TID config support can be checked in the %NL80211_ATTR_TID_CONFIG
+ * attribute given in wiphy capabilities.
+ *
+ * The necessary configuration parameters are mentioned in
+ * &enum nl80211_tid_config_attr and it will be passed to the
+ * %NL80211_CMD_SET_TID_CONFIG command in %NL80211_ATTR_TID_CONFIG.
+ *
+ * If the configuration needs to be applied for specific peer then the MAC
+ * address of the peer needs to be passed in %NL80211_ATTR_MAC, otherwise the
* configuration will be applied for all the connected peers in the vif except
- * the peer which has peer specific configuration for the TID.
- * And the peer specific configuration will be overridden if
- * %NL80211_TID_CONFIG_ATTR_OVERRIDE flag is set.
- * All this configurations are valid only for STA's current connection
- * i.e. the configurations will be reset to default when the STA connects back
+ * any peers that have peer specific configuration for the TID by default; if
+ * the %NL80211_TID_CONFIG_ATTR_OVERRIDE flag is set, peer specific values
+ * will be overwritten.
+ *
+ * All this configuration is valid only for STA's current connection
+ * i.e. the configuration will be reset to default when the STA connects back
* after disconnection/roaming, and this configuration will be cleared when
* the interface goes down.
*/
@@ -2436,7 +2438,9 @@ enum nl80211_commands {
* advertised for a specific interface type.
*
* @NL80211_ATTR_TID_CONFIG: TID specific configuration in a
- * nested attribute with &enum nl80211_tid_config_attr sub-attributes.
+ * nested attribute with &enum nl80211_tid_config_attr sub-attributes;
+ * on output (in wiphy attributes) it contains only the feature sub-
+ * attributes.
*
* @NUM_NL80211_ATTR: total number of nl80211_attrs available
* @NL80211_ATTR_MAX: highest attribute number currently defined
@@ -4764,20 +4768,29 @@ enum nl80211_tid_config {
};
/* enum nl80211_tid_config_attr - TID specific configuration.
+ * @NL80211_TID_CONFIG_ATTR_PAD: pad attribute for 64-bit values
+ * @NL80211_TID_CONFIG_ATTR_VIF_SUPP: a bitmap (u64) of attributes supported
+ * for per-vif configuration; doesn't list the ones that are generic
+ * (%NL80211_TID_CONFIG_ATTR_TIDS, %NL80211_TID_CONFIG_ATTR_OVERRIDE).
+ * @NL80211_TID_CONFIG_ATTR_PEER_SUPP: same as the previous per-vif one, but
+ * per peer instead.
* @NL80211_TID_CONFIG_ATTR_OVERRIDE: flag attribue, if no peer
* is selected, if set indicates that the new configuration overrides
* all previous peer configurations, otherwise previous peer specific
* configurations should be left untouched. If peer is selected then
* it will reset particular TID configuration of that peer and it will
* not accept other TID config attributes along with peer.
- * @NL80211_TID_CONFIG_ATTR_TIDS: a bitmask value of TIDs(bit 0 to 7)
- * Its type is u8.
+ * @NL80211_TID_CONFIG_ATTR_TIDS: a bitmask value of TIDs (bit 0 to 7)
+ * Its type is u16.
* @NL80211_TID_CONFIG_ATTR_NOACK: Configure ack policy for the TID.
* specified in %NL80211_TID_CONFIG_ATTR_TID. see %enum nl80211_tid_config.
* Its type is u8.
*/
enum nl80211_tid_config_attr {
__NL80211_TID_CONFIG_ATTR_INVALID,
+ NL80211_TID_CONFIG_ATTR_PAD,
+ NL80211_TID_CONFIG_ATTR_VIF_SUPP,
+ NL80211_TID_CONFIG_ATTR_PEER_SUPP,
NL80211_TID_CONFIG_ATTR_OVERRIDE,
NL80211_TID_CONFIG_ATTR_TIDS,
NL80211_TID_CONFIG_ATTR_NOACK,
@@ -5605,10 +5618,6 @@ enum nl80211_feature_flags {
* @NL80211_EXT_FEATURE_AQL: The driver supports the Airtime Queue Limit (AQL)
* feature, which prevents bufferbloat by using the expected transmission
* time to limit the amount of data buffered in the hardware.
- * @NL80211_EXT_FEATURE_PER_TID_NOACK_CONFIG: Driver supports per TID NoAck
- * policy functionality.
- * @NL80211_EXT_FEATURE_PER_STA_NOACK_CONFIG: Driver supports STA specific NoAck
- * policy functionality.
*
* @NL80211_EXT_FEATURE_BEACON_PROTECTION: The driver supports Beacon protection
* and can receive key configuration for BIGTK using key indexes 6 and 7.
@@ -5661,8 +5670,6 @@ enum nl80211_ext_feature_index {
NL80211_EXT_FEATURE_VLAN_OFFLOAD,
NL80211_EXT_FEATURE_AQL,
NL80211_EXT_FEATURE_BEACON_PROTECTION,
- NL80211_EXT_FEATURE_PER_TID_NOACK_CONFIG,
- NL80211_EXT_FEATURE_PER_STA_NOACK_CONFIG,
/* add new features before the definition below */
NUM_NL80211_EXT_FEATURES,