]> git.ipfire.org Git - thirdparty/hostap.git/commitdiff
Add QCA vendor command for airtime fairness (ATF)
authorHarish Rachakonda <rachakon@qti.qualcomm.com>
Fri, 10 Oct 2025 15:43:05 +0000 (21:13 +0530)
committerJouni Malinen <j@w1.fi>
Mon, 13 Oct 2025 20:00:46 +0000 (23:00 +0300)
Define a QCA vendor subcmd QCA_NL80211_VENDOR_SUBCMD_ATF_OFFLOAD_OPS and
attributes for for Airtime Fairness (ATF) offload operations. This
command enables configuration and control of ATF features, which aim to
managing airtime distribution across various entities such as SSIDs,
SSID groups, peers, and access categories.

This interface is intended for use to dynamically manage airtime
distribution based on scheduling policy (if configured) across various
entities such as SSIDs, SSID groups, peers, and access categories.

Signed-off-by: Harish Rachakonda <rachakon@qti.qualcomm.com>
src/common/qca-vendor.h

index 6cb7657b194ac7931bc3eaa3eb66415eb1c25fe8..bf50d063f693ba51c73fe307e4412b60a5bfe028 100644 (file)
@@ -1454,6 +1454,10 @@ enum qca_radiotap_vendor_ids {
  *
  *     The attributes used with this command are defined in
  *     enum qca_wlan_vendor_attr_coex_stats.
+ *
+ * @QCA_NL80211_VENDOR_SUBCMD_ATF_OFFLOAD_OPS: This vendor subcommand is used to
+ *     configure airtime fairness. The attributes used with this subcommand
+ *     are defined in enum qca_wlan_vendor_attr_atf_offload_ops.
  */
 enum qca_nl80211_vendor_subcmds {
        QCA_NL80211_VENDOR_SUBCMD_UNSPEC = 0,
@@ -1705,6 +1709,7 @@ enum qca_nl80211_vendor_subcmds {
        QCA_NL80211_VENDOR_SUBCMD_DAR = 265,
        QCA_NL80211_VENDOR_SUBCMD_FEATURE_CONFIG = 266,
        QCA_NL80211_VENDOR_SUBCMD_GET_COEX_STATS = 267,
+       QCA_NL80211_VENDOR_SUBCMD_ATF_OFFLOAD_OPS = 268,
 };
 
 /* Compatibility defines for previously used subcmd names.
@@ -22237,4 +22242,278 @@ enum qca_wlan_vendor_attr_feature_config {
        QCA_WLAN_VENDOR_ATTR_FEATURE_CONFIG_AFTER_LAST - 1,
 };
 
+/**
+ * enum qca_wlan_vendor_attr_atf_offload_ops - Defines attributes to be used
+ * with vendor subcmd QCA_NL80211_VENDOR_SUBCMD_ATF_OFFLOAD_OPS.
+ *
+ * QCA_WLAN_VENDOR_ATTR_ATF_OFFLOAD_RADIO_INDEX: Mandatory u32 attribute.
+ * An attribute that represents the index of the radio for which ATF
+ * configuration is received. Radio index is fetched from
+ * NL80211_WIPHY_RADIO_ATTR_INDEX, which is part of the
+ * NL80211_ATTR_WIPHY_RADIOS.
+ *
+ * QCA_WLAN_VENDOR_ATTR_ATF_OFFLOAD_ENABLED: u8 attribute.
+ * An attribute used to enable or disable ATF offload.
+ * 0 - Disable.
+ * 1 - Enable.
+ * Note: The ATF offload must be enabled first by setting this to 1.
+ * Only if this attribute is enabled, the remaining ATF configuration
+ * attributes will be applied. If ATF offload is disabled (value 0),
+ * all other configuration attributes will be ignored.
+ *
+ * QCA_WLAN_VENDOR_ATTR_ATF_OFFLOAD_SSID_GROUP_CONFIG: Nested attribute.
+ * This attribute is used to send SSID group configuration information.
+ * Each SSID group must contain at least one SSID, and each group can have
+ * its own distinct configuration.
+ * The configuration for each SSID group is provided as a nested attribute.
+ * These nested attributes are defined in
+ * enum qca_wlan_vendor_attr_atf_offload_ssid_group_config.
+
+ * QCA_WLAN_VENDOR_ATTR_ATF_OFFLOAD_WMM_AC_CONFIG: Nested attribute.
+ * This attribute is used to send configuration for each WMM Access
+ * Category (AC) within an SSID group. The attributes defined in
+ * enum qca_wlan_vendor_attr_atf_offload_wmm_ac_config are nested in
+ * this attribute.
+ *
+ * QCA_WLAN_VENDOR_ATTR_ATF_OFFLOAD_PEER_CONFIG: Nested attribute.
+ * Indicates the airtime configuration of each peer associated to the radio.
+ * The attributes defined in enum qca_wlan_vendor_attr_atf_offload_peer_config
+ * are nested in this attribute.
+ *
+ * QCA_WLAN_VENDOR_ATTR_ATF_OFFLOAD_STATS_ENABLED: u8 attribute
+ * Indicates whether ATF offload statistics are enabled or disabled.
+ * 0 - Disable.
+ * 1 - Enable.
+ *
+ * QCA_WLAN_VENDOR_ATTR_ATF_OFFLOAD_STRICT_SCHEDULING_ENABLED: u8 attribute.
+ * Indicates the ATF strict scheduling to be enabled or disabled.
+ * 0 - Disable.
+ * 1 - Enable.
+ *
+ * QCA_WLAN_VENDOR_ATTR_ATF_OFFLOAD_VO_DEDICATED_TIME_CONFIG: u16 attribute.
+ * An attribute used to dedicate time slot for Voice (VO) within every
+ * one second window. The value is between 0 to 1000 milliseconds.
+ *
+ * QCA_WLAN_VENDOR_ATTR_ATF_OFFLOAD_VI_DEDICATED_TIME_CONFIG: u16 attribute.
+ * An attribute used to dedicate time slot for Video (VI) within every one
+ * second window. The value is between 0 to 1000 milliseconds.
+ *
+ * QCA_WLAN_VENDOR_ATTR_ATF_OFFLOAD_SSID_SCHED_POLICY: Nested attribute
+ * representing the ATF scheduling policy of the interface. This attribute is
+ * applicable for an SSID, allowing the firmware to apply the scheduling policy
+ * directly at the interface level. The attributes defined in enum
+ * qca_wlan_vendor_attr_atf_offload_ssid_scheduling_policy are nested in this
+ * attribute.
+ */
+enum qca_wlan_vendor_attr_atf_offload_ops {
+       QCA_WLAN_VENDOR_ATTR_ATF_OFFLOAD_INVALID = 0,
+       QCA_WLAN_VENDOR_ATTR_ATF_OFFLOAD_RADIO_INDEX = 1,
+       QCA_WLAN_VENDOR_ATTR_ATF_OFFLOAD_ENABLED = 2,
+       QCA_WLAN_VENDOR_ATTR_ATF_OFFLOAD_SSID_GROUP_CONFIG = 3,
+       QCA_WLAN_VENDOR_ATTR_ATF_OFFLOAD_WMM_AC_CONFIG = 4,
+       QCA_WLAN_VENDOR_ATTR_ATF_OFFLOAD_PEER_CONFIG = 5,
+       QCA_WLAN_VENDOR_ATTR_ATF_OFFLOAD_STATS_ENABLED = 6,
+       QCA_WLAN_VENDOR_ATTR_ATF_OFFLOAD_STRICT_SCHEDULING_ENABLED = 7,
+       QCA_WLAN_VENDOR_ATTR_ATF_OFFLOAD_VO_DEDICATED_TIME_CONFIG = 8,
+       QCA_WLAN_VENDOR_ATTR_ATF_OFFLOAD_VI_DEDICATED_TIME_CONFIG = 9,
+       QCA_WLAN_VENDOR_ATTR_ATF_OFFLOAD_SSID_SCHED_POLICY = 10,
+
+       /* keep last */
+       QCA_WLAN_VENDOR_ATTR_ATF_OFFLOAD_AFTER_LAST,
+       QCA_WLAN_VENDOR_ATTR_ATF_OFFLOAD_MAX =
+       QCA_WLAN_VENDOR_ATTR_ATF_OFFLOAD_AFTER_LAST - 1
+};
+
+/**
+ * enum qca_wlan_vendor_attr_atf_offload_ssid_group_config -
+ * Defines attributes to be used with vendor attribute
+ * QCA_WLAN_VENDOR_ATTR_ATF_OFFLOAD_SSID_GROUP_CONFIG.
+ *
+ * @QCA_WLAN_VENDOR_ATTR_ATF_OFFLOAD_SSID_GROUP_INDEX: Mandatory
+ * u8 attribute. Indicates the unique index of the SSID group.
+ * These indexes are assigned based on the order in which the SSID
+ * groups are configured.
+ *
+ * @QCA_WLAN_VENDOR_ATTR_ATF_OFFLOAD_SSID_GROUP_AIRTIME_CONFIGURED:
+ * Mandatory u16 attribute. Indicates the percentage of airtime configured by
+ * the user for the SSID group. The value is represented as a fixed-point
+ * integer with one digit after the decimal point.
+ *
+ * @QCA_WLAN_VENDOR_ATTR_ATF_OFFLOAD_SSID_GROUP_POLICY: Mandatory
+ * u8 attribute. Indicates the scheduling policy of the SSID group.
+ * Attribute value range is 0 to 2.
+ * 0 - Fair scheduling, the SSID group can contribute its
+ * unused airtime with other SSID groups and can also borrow from them.
+ * 1 - Strict scheduling, the SSID group can contribute
+ * its unused airtime with other SSID groups but cannot be borrowed.
+ * 2 - Fair with upper bound, the SSID group can only contribute
+ * its unused airtime, but cannot borrow airtime from other SSID groups.
+ *
+ * @QCA_WLAN_VENDOR_ATTR_ATF_OFFLOAD_SSID_GROUP_UNCONFIGURED_PEERS:
+ * Mandatory u16 attribute. Indicates the number of peers that are associated
+ * but do not have airtime configured by user.
+ *
+ * @QCA_WLAN_VENDOR_ATTR_ATF_OFFLOAD_SSID_GROUP_CONFIGURED_PEERS:
+ * Mandatory u16 attribute. Indicates the number of peers that are associated
+ * and have airtime configured by user. Note: The total number of associated
+ * peers to the SSID group is the sum of configured and unconfigured peers.
+ *
+ * @QCA_WLAN_VENDOR_ATTR_ATF_OFFLOAD_SSID_GROUP_UNCONFIGURED_PEERS_AIRTIME:
+ * Mandatory u16 attribute. Indicates the percentage of total airtime allocated
+ * for unconfigured peers within the SSID group. The value is represented as
+ * a fixed-point integer with one digit after the decimal point.
+ */
+enum qca_wlan_vendor_attr_atf_offload_ssid_group_config {
+       QCA_WLAN_VENDOR_ATTR_ATF_OFFLOAD_SSID_GROUP_INVALID = 0,
+       QCA_WLAN_VENDOR_ATTR_ATF_OFFLOAD_SSID_GROUP_INDEX = 1,
+       QCA_WLAN_VENDOR_ATTR_ATF_OFFLOAD_SSID_GROUP_AIRTIME_CONFIGURED = 2,
+       QCA_WLAN_VENDOR_ATTR_ATF_OFFLOAD_SSID_GROUP_POLICY = 3,
+       QCA_WLAN_VENDOR_ATTR_ATF_OFFLOAD_SSID_GROUP_UNCONFIGURED_PEERS = 4,
+       QCA_WLAN_VENDOR_ATTR_ATF_OFFLOAD_SSID_GROUP_CONFIGURED_PEERS = 5,
+       QCA_WLAN_VENDOR_ATTR_ATF_OFFLOAD_SSID_GROUP_UNCONFIGURED_PEERS_AIRTIME = 6,
+
+       /* keep last */
+       QCA_WLAN_VENDOR_ATTR_ATF_OFFLOAD_SSID_GROUP_LAST,
+       QCA_WLAN_VENDOR_ATTR_ATF_OFFLOAD_SSID_GROUP_MAX =
+       QCA_WLAN_VENDOR_ATTR_ATF_OFFLOAD_SSID_GROUP_LAST - 1,
+};
+
+/**
+ * enum qca_wlan_vendor_attr_atf_offload_wmm_ac_config -
+ * Defines attributes to be used with vendor attribute
+ * QCA_WLAN_VENDOR_ATTR_ATF_OFFLOAD_WMM_AC_CONFIG.
+ *
+ * @QCA_WLAN_VENDOR_ATTR_ATF_OFFLOAD_WMM_AC_GROUP_INDEX: Mandatory u8 attribute.
+ * Indicates the unique index of the SSID group. These indexes are assigned
+ * based on the order in which the SSID groups are configured.
+ *
+ * @QCA_WLAN_VENDOR_ATTR_ATF_OFFLOAD_WMM_AC_BE_AIRTIME: Mandatory u16 attribute.
+ * Indicates the airtime percentage configured for the Best Effort (BE) WMM
+ * Access Category of SSID group. The value is represented as a fixed-point
+ * integer with one digit after the decimal point.
+ *
+ * @QCA_WLAN_VENDOR_ATTR_ATF_OFFLOAD_WMM_AC_BK_AIRTIME: Mandatory u16 attribute.
+ * Indicates the airtime percentage configured for the Background (BK) WMM
+ * Access Category of SSID group. The value is represented as a fixed-point
+ * integer with one digit after the decimal point.
+ *
+ * @QCA_WLAN_VENDOR_ATTR_ATF_OFFLOAD_WMM_AC_VI_AIRTIME: Mandatory u16 attribute.
+ * Indicates the airtime percentage configured for the Video (VI) WMM Access
+ * Category of SSID group. The value is represented as a fixed-point integer
+ * with one digit after the decimal point.
+ *
+ * @QCA_WLAN_VENDOR_ATTR_ATF_OFFLOAD_WMM_AC_VO_AIRTIME: Mandatory u16 attribute.
+ * Indicates the airtime percentage configured for the Voice (VO) WMM Access
+ * Category of SSID group. The value is represented as a fixed-point integer
+ * with one digit after the decimal point.
+ */
+enum qca_wlan_vendor_attr_atf_offload_wmm_ac_config {
+       QCA_WLAN_VENDOR_ATTR_ATF_OFFLOAD_NUM_WMM_AC_INVALID = 0,
+       QCA_WLAN_VENDOR_ATTR_ATF_OFFLOAD_WMM_AC_GROUP_INDEX = 1,
+       QCA_WLAN_VENDOR_ATTR_ATF_OFFLOAD_WMM_AC_BE_AIRTIME = 2,
+       QCA_WLAN_VENDOR_ATTR_ATF_OFFLOAD_WMM_AC_BK_AIRTIME = 3,
+       QCA_WLAN_VENDOR_ATTR_ATF_OFFLOAD_WMM_AC_VI_AIRTIME = 4,
+       QCA_WLAN_VENDOR_ATTR_ATF_OFFLOAD_WMM_AC_VO_AIRTIME = 5,
+
+       /* keep last */
+       QCA_WLAN_VENDOR_ATTR_ATF_OFFLOAD_NUM_WMM_AC_LAST,
+       QCA_WLAN_VENDOR_ATTR_ATF_OFFLOAD_NUM_WMM_AC_MAX =
+       QCA_WLAN_VENDOR_ATTR_ATF_OFFLOAD_NUM_WMM_AC_LAST - 1,
+};
+
+/**
+ * enum qca_wlan_vendor_attr_atf_offload_peer_config - Defines
+ * attributes to be used with vendor attribute
+ * QCA_WLAN_VENDOR_ATTR_ATF_OFFLOAD_PEER_CONFIG.
+ *
+ * @QCA_WLAN_VENDOR_ATTR_ATF_OFFLOAD_PEER_CONFIG_FULL_UPDATE: Mandatory NLA_FLAG
+ * attribute. When included, the configuration update applies to all currently
+ * connected peers. If not include, the update applies only to newly connected
+ * peers.
+ *
+ * @QCA_WLAN_VENDOR_ATTR_ATF_OFFLOAD_PEER_CONFIG_MORE: Mandatory NLA_FLAG
+ * attribute. Indicates that the current
+ * QCA_NL80211_VENDOR_SUBCMD_ATF_OFFLOAD_OPS command does not include
+ * configuration data for all connected peers. When this flag is included,
+ * it signals that additional command(s) will follow, each carrying the
+ * remaining peer configurations using the
+ * QCA_WLAN_VENDOR_ATTR_ATF_OFFLOAD_PEER_CONFIG attribute.
+ *
+ * @QCA_WLAN_VENDOR_ATTR_ATF_OFFLOAD_PEER_CONFIG_PAYLOAD: Mandatory nested
+ * attribute. Indicates each peer's configuration associated with the radio.
+ * The attributes defined in enum qca_wlan_vendor_attr_atf_offload_peer are
+ * nested in this attribute.
+ */
+enum qca_wlan_vendor_attr_atf_offload_peer_config {
+       QCA_WLAN_VENDOR_ATTR_ATF_OFFLOAD_PEER_CONFIG_INVALID = 0,
+       QCA_WLAN_VENDOR_ATTR_ATF_OFFLOAD_PEER_CONFIG_FULL_UPDATE = 1,
+       QCA_WLAN_VENDOR_ATTR_ATF_OFFLOAD_PEER_CONFIG_MORE = 2,
+       QCA_WLAN_VENDOR_ATTR_ATF_OFFLOAD_PEER_CONFIG_PAYLOAD = 3,
+
+       /* keep last */
+       QCA_WLAN_VENDOR_ATTR_ATF_OFFLOAD_PEER_CONFIG_LAST,
+       QCA_WLAN_VENDOR_ATTR_ATF_OFFLOAD_PEER_CONFIG_MAX =
+       QCA_WLAN_VENDOR_ATTR_ATF_OFFLOAD_PEER_CONFIG_LAST - 1,
+};
+
+/**
+ * enum qca_wlan_vendor_attr_atf_offload_peer - Defines
+ * attributes to be used with vendor attribute
+ * QCA_WLAN_VENDOR_ATTR_ATF_OFFLOAD_PEER_PAYLOAD.
+ *
+ * @QCA_WLAN_VENDOR_ATTR_ATF_OFFLOAD_PEER_MAC: MAC address mandatory attribute.
+ * Indicates the MAC address of the peer or link peer in case of MLO.
+ *
+ * @QCA_WLAN_VENDOR_ATTR_ATF_OFFLOAD_PEER_AIRTIME: Mandatory u16 attribute.
+ * Indicates the percentage of airtime configured for the peer. The airtime
+ * assigned to a peer is relative to the SSID group's total airtime allocation.
+ * The value is represented as a fixed-point integer with one digit after the
+ * decimal point.
+ *
+ * @QCA_WLAN_VENDOR_ATTR_ATF_OFFLOAD_PEER_GROUP_INDEX: Mandatory u8 attribute.
+ * Indicates the index of the SSID group to which the peer belongs.
+ *
+ * @QCA_WLAN_VENDOR_ATTR_ATF_OFFLOAD_PEER_CONFIGURED: Mandatory NLA_FLAG
+ * attribute. This flag is included if the peer has explicitly configured
+ * airtime by user.
+ */
+enum qca_wlan_vendor_attr_atf_offload_peer {
+       QCA_WLAN_VENDOR_ATTR_ATF_OFFLOAD_PEER_INVALID = 0,
+       QCA_WLAN_VENDOR_ATTR_ATF_OFFLOAD_PEER_MAC = 1,
+       QCA_WLAN_VENDOR_ATTR_ATF_OFFLOAD_PEER_AIRTIME = 2,
+       QCA_WLAN_VENDOR_ATTR_ATF_OFFLOAD_PEER_GROUP_INDEX = 3,
+       QCA_WLAN_VENDOR_ATTR_ATF_OFFLOAD_PEER_CONFIGURED = 4,
+
+       /* keep last */
+       QCA_WLAN_VENDOR_ATTR_ATF_OFFLOAD_PEER_MAX,
+       QCA_WLAN_VENDOR_ATTR_ATF_OFFLOAD_PEER_LAST =
+       QCA_WLAN_VENDOR_ATTR_ATF_OFFLOAD_PEER_MAX - 1,
+};
+
+/**
+ * enum qca_wlan_vendor_attr_atf_offload_ssid_scheduling_policy -
+ * Defines attributes to be used with vendor attribute
+ * QCA_WLAN_VENDOR_ATTR_ATF_OFFLOAD_SSID_SCHED_POLICY.
+ *
+ * @QCA_WLAN_VENDOR_ATTR_ATF_OFFLOAD_SSID_SCHED_LINK_ID: u8 attribute.
+ * Mandatory attribute when interface is configured in Multi Link Operation
+ * (MLO). This attribute must not be included in non-MLO scenarios. This is the
+ * link ID of the interface in the MLO case. Possible values are 0 to 14.
+ *
+ * @QCA_WLAN_VENDOR_ATTR_ATF_OFFLOAD_SSID_SCHEDULING: Mandatory u8 attribute.
+ * An attribute used to define the scheduling policy.
+ * The accepted values for the attribute are
+ * 0 - fair, 1 - strict, 2 - fair with upper bound.
+ */
+enum qca_wlan_vendor_attr_atf_offload_ssid_scheduling_policy {
+       QCA_WLAN_VENDOR_ATTR_ATF_OFFLOAD_SSID_SCHED_INVALID = 0,
+       QCA_WLAN_VENDOR_ATTR_ATF_OFFLOAD_SSID_SCHED_LINK_ID = 1,
+       QCA_WLAN_VENDOR_ATTR_ATF_OFFLOAD_SSID_SCHEDULING = 2,
+
+       /* keep last */
+       QCA_WLAN_VENDOR_ATTR_ATF_OFFLOAD_SSID_SCHED_LAST,
+       QCA_WLAN_VENDOR_ATTR_ATF_OFFLOAD_SSID_SCHED_MAX =
+       QCA_WLAN_VENDOR_ATTR_ATF_OFFLOAD_SSID_SCHED_LAST - 1,
+};
+
 #endif /* QCA_VENDOR_H */