wifi: nl80211/cfg80211: add new FTM capabilities

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>
This commit is contained in:
Avraham Stern 2026-01-11 19:03:48 +02:00 committed by Johannes Berg
parent 1e1dd9eeaa
commit 86c6b6e4d1
3 changed files with 71 additions and 1 deletions

View 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;
};

View 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,

View 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;