]> git.ipfire.org Git - thirdparty/kernel/linux.git/commitdiff
wifi: nl80211/cfg80211: add new FTM capabilities
authorAvraham Stern <avraham.stern@intel.com>
Sun, 11 Jan 2026 17:03:48 +0000 (19:03 +0200)
committerJohannes Berg <johannes.berg@intel.com>
Tue, 27 Jan 2026 12:40:25 +0000 (13:40 +0100)
Add new capabilities to the PMSR FTM capabilities list. The new
capabilities include 6 GHz support, supported number of spatial streams
and supported number of LTF repetitions.

Signed-off-by: Avraham Stern <avraham.stern@intel.com>
Tested-by: Miriam Rachel Korenblit <miriam.rachel.korenblit@intel.com>
Signed-off-by: Miri Korenblit <miriam.rachel.korenblit@intel.com>
Link: https://patch.msgid.link/20260111190221.bf43785c18f6.Ic98cf9790ddee84bf88e5720b93c46c23af3c96c@changeid
Signed-off-by: Johannes Berg <johannes.berg@intel.com>
include/net/cfg80211.h
include/uapi/linux/nl80211.h
net/wireless/nl80211.c

index 6d8e35a0dde4cdbe76a82b4c5915d65a998a536c..8153b6aaa998cc8eb11c5957c729f1b0a298c076 100644 (file)
@@ -5643,6 +5643,17 @@ cfg80211_get_iftype_ext_capa(struct wiphy *wiphy, enum nl80211_iftype type);
  *     not limited)
  * @ftm.trigger_based: trigger based ranging measurement is supported
  * @ftm.non_trigger_based: non trigger based ranging measurement is supported
+ * @ftm.support_6ghz: supports ranging in 6 GHz band
+ * @ftm.max_tx_ltf_rep: maximum number of TX LTF repetitions supported (0 means
+ *     only one LTF, no repetitions)
+ * @ftm.max_rx_ltf_rep: maximum number of RX LTF repetitions supported (0 means
+ *     only one LTF, no repetitions)
+ * @ftm.max_tx_sts: maximum number of TX STS supported (zero based)
+ * @ftm.max_rx_sts: maximum number of RX STS supported (zero based)
+ * @ftm.max_total_ltf_tx: maximum total number of LTFs that can be transmitted
+ *     (0 means unknown)
+ * @ftm.max_total_ltf_rx: maximum total number of LTFs that can be received
+ *     (0 means unknown)
  */
 struct cfg80211_pmsr_capabilities {
        unsigned int max_peers;
@@ -5660,7 +5671,14 @@ struct cfg80211_pmsr_capabilities {
                   request_lci:1,
                   request_civicloc:1,
                   trigger_based:1,
-                  non_trigger_based:1;
+                  non_trigger_based:1,
+                  support_6ghz:1;
+               u8 max_tx_ltf_rep;
+               u8 max_rx_ltf_rep;
+               u8 max_tx_sts;
+               u8 max_rx_sts;
+               u8 max_total_ltf_tx;
+               u8 max_total_ltf_rx;
        } ftm;
 };
 
index b0f050e36fa4a99f51026aa6b809206c17d2e6f3..200703c8b2c169d5b5a3735ab975e6998065ad53 100644 (file)
@@ -7790,6 +7790,28 @@ enum nl80211_peer_measurement_attrs {
  *     trigger based ranging measurement is supported
  * @NL80211_PMSR_FTM_CAPA_ATTR_NON_TRIGGER_BASED: flag attribute indicating
  *     if non-trigger-based ranging measurement is supported
+ * @NL80211_PMSR_FTM_CAPA_ATTR_6GHZ_SUPPORT: flag attribute indicating if
+ *     ranging on the 6 GHz band is supported
+ * @NL80211_PMSR_FTM_CAPA_ATTR_MAX_TX_LTF_REP: u32 attribute indicating
+ *     the maximum number of LTF repetitions the device can transmit in the
+ *     preamble of the ranging NDP (zero means only one LTF, no repetitions)
+ * @NL80211_PMSR_FTM_CAPA_ATTR_MAX_RX_LTF_REP: u32 attribute indicating
+ *     the maximum number of LTF repetitions the device can receive in the
+ *     preamble of the ranging NDP (zero means only one LTF, no repetitions)
+ * @NL80211_PMSR_FTM_CAPA_ATTR_MAX_TX_STS: u32 attribute indicating
+ *     the maximum number of space-time streams supported for ranging NDP TX
+ *     (zero-based)
+ * @NL80211_PMSR_FTM_CAPA_ATTR_MAX_RX_STS: u32 attribute indicating
+ *     the maximum number of space-time streams supported for ranging NDP RX
+ *     (zero-based)
+ * @NL80211_PMSR_FTM_CAPA_ATTR_MAX_TOTAL_LTF_TX: u32 attribute indicating the
+ *     maximum total number of LTFs the device can transmit. The total number
+ *     of LTFs is (number of LTF repetitions) * (number of space-time streams).
+ *     This limits the allowed combinations of LTF repetitions and STS.
+ * @NL80211_PMSR_FTM_CAPA_ATTR_MAX_TOTAL_LTF_RX: u32 attribute indicating the
+ *     maximum total number of LTFs the device can receive. The total number
+ *     of LTFs is (number of LTF repetitions) * (number of space-time streams).
+ *     This limits the allowed combinations of LTF repetitions and STS.
  *
  * @NUM_NL80211_PMSR_FTM_CAPA_ATTR: internal
  * @NL80211_PMSR_FTM_CAPA_ATTR_MAX: highest attribute number
@@ -7807,6 +7829,13 @@ enum nl80211_peer_measurement_ftm_capa {
        NL80211_PMSR_FTM_CAPA_ATTR_MAX_FTMS_PER_BURST,
        NL80211_PMSR_FTM_CAPA_ATTR_TRIGGER_BASED,
        NL80211_PMSR_FTM_CAPA_ATTR_NON_TRIGGER_BASED,
+       NL80211_PMSR_FTM_CAPA_ATTR_6GHZ_SUPPORT,
+       NL80211_PMSR_FTM_CAPA_ATTR_MAX_TX_LTF_REP,
+       NL80211_PMSR_FTM_CAPA_ATTR_MAX_RX_LTF_REP,
+       NL80211_PMSR_FTM_CAPA_ATTR_MAX_TX_STS,
+       NL80211_PMSR_FTM_CAPA_ATTR_MAX_RX_STS,
+       NL80211_PMSR_FTM_CAPA_ATTR_MAX_TOTAL_LTF_TX,
+       NL80211_PMSR_FTM_CAPA_ATTR_MAX_TOTAL_LTF_RX,
 
        /* keep last */
        NUM_NL80211_PMSR_FTM_CAPA_ATTR,
index 56cc5ed33ea336604385f01cd518805df8da2a39..74ea922a5e8a82a2b9d21ee633674cd403a89e8c 100644 (file)
@@ -2313,6 +2313,29 @@ nl80211_send_pmsr_ftm_capa(const struct cfg80211_pmsr_capabilities *cap,
        if (cap->ftm.non_trigger_based &&
            nla_put_flag(msg, NL80211_PMSR_FTM_CAPA_ATTR_NON_TRIGGER_BASED))
                return -ENOBUFS;
+       if (cap->ftm.support_6ghz &&
+           nla_put_flag(msg, NL80211_PMSR_FTM_CAPA_ATTR_6GHZ_SUPPORT))
+               return -ENOBUFS;
+       if (nla_put_u32(msg, NL80211_PMSR_FTM_CAPA_ATTR_MAX_TX_LTF_REP,
+                       cap->ftm.max_tx_ltf_rep))
+               return -ENOBUFS;
+       if (nla_put_u32(msg, NL80211_PMSR_FTM_CAPA_ATTR_MAX_RX_LTF_REP,
+                       cap->ftm.max_rx_ltf_rep))
+               return -ENOBUFS;
+       if (nla_put_u32(msg, NL80211_PMSR_FTM_CAPA_ATTR_MAX_TX_STS,
+                       cap->ftm.max_tx_sts))
+               return -ENOBUFS;
+       if (nla_put_u32(msg, NL80211_PMSR_FTM_CAPA_ATTR_MAX_RX_STS,
+                       cap->ftm.max_rx_sts))
+               return -ENOBUFS;
+       if (cap->ftm.max_total_ltf_tx > 0 &&
+           nla_put_u32(msg, NL80211_PMSR_FTM_CAPA_ATTR_MAX_TOTAL_LTF_TX,
+                       cap->ftm.max_total_ltf_tx))
+               return -ENOBUFS;
+       if (cap->ftm.max_total_ltf_rx > 0 &&
+           nla_put_u32(msg, NL80211_PMSR_FTM_CAPA_ATTR_MAX_TOTAL_LTF_RX,
+                       cap->ftm.max_total_ltf_rx))
+               return -ENOBUFS;
 
        nla_nest_end(msg, ftm);
        return 0;