mirror of
https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
synced 2026-07-24 02:09:13 -04:00
wifi: cfg80211: add NTB continuous ranging and FTM request type support
Enable NTB continuous ranging with configurable timing and measurement
parameters as per the Wi-Fi Alliance specification "Proximity Ranging
(PR) Implementation Consideration Draft 1.9 Rev 1, section 5.3". Add
new FTM request attributes for min/max time between measurements,
nominal time (mandatory for NTB), AW duration, and total measurement
count.
Add NL80211_PMSR_PEER_ATTR_REQ_TYPE attribute using the new
nl80211_peer_measurement_ftm_req_type enum to allow userspace to
specify the ranging request type per peer:
- NL80211_PMSR_FTM_REQ_TYPE_INFRA: STA-to-AP or AP-to-STA ranging
(default if attribute is absent)
- NL80211_PMSR_FTM_REQ_TYPE_PD: peer-to-peer ranging
Validate the request type against the device TYPE_CAPS capabilities
advertised via NL80211_PMSR_FTM_CAPA_ATTR_TYPE_CAPS. Reject PD
requests if the device does not advertise PD support.
Reject PD requests that set trigger-based ranging, as TB ranging is
not compatible with peer-to-peer proximity detection.
Add ftms_per_burst limit of 4 for PD NTB ranging requests.
Signed-off-by: Peddolla Harshavardhan Reddy <peddolla.reddy@oss.qualcomm.com>
Link: https://patch.msgid.link/20260420090856.2152905-7-peddolla.reddy@oss.qualcomm.com
Signed-off-by: Johannes Berg <johannes.berg@intel.com>
This commit is contained in:
committed by
Johannes Berg
parent
18709c618d
commit
8823a9b0e7
@@ -7991,6 +7991,26 @@ enum nl80211_peer_measurement_resp {
|
||||
NL80211_PMSR_RESP_ATTR_MAX = NUM_NL80211_PMSR_RESP_ATTRS - 1
|
||||
};
|
||||
|
||||
/**
|
||||
* enum nl80211_peer_measurement_ftm_req_type - FTM ranging request type,
|
||||
* used with %NL80211_PMSR_PEER_ATTR_REQ_TYPE
|
||||
*
|
||||
* @NL80211_PMSR_FTM_REQ_TYPE_INFRA: infrastructure ranging, i.e. STA-to-AP
|
||||
* @NL80211_PMSR_FTM_REQ_TYPE_PD: peer-to-peer ranging as defined in the
|
||||
* Wi-Fi Alliance specification "Proximity Ranging (PR) Implementation
|
||||
* Consideration Draft 1.9 Rev 1"
|
||||
* @NUM_NL80211_PMSR_FTM_REQ_TYPE: internal
|
||||
* @NL80211_PMSR_FTM_REQ_TYPE_MAX: highest request type value
|
||||
*/
|
||||
enum nl80211_peer_measurement_ftm_req_type {
|
||||
NL80211_PMSR_FTM_REQ_TYPE_INFRA,
|
||||
NL80211_PMSR_FTM_REQ_TYPE_PD,
|
||||
|
||||
/* keep last */
|
||||
NUM_NL80211_PMSR_FTM_REQ_TYPE,
|
||||
NL80211_PMSR_FTM_REQ_TYPE_MAX = NUM_NL80211_PMSR_FTM_REQ_TYPE - 1
|
||||
};
|
||||
|
||||
/**
|
||||
* enum nl80211_peer_measurement_peer_attrs - peer attributes for measurement
|
||||
* @__NL80211_PMSR_PEER_ATTR_INVALID: invalid
|
||||
@@ -8004,6 +8024,9 @@ enum nl80211_peer_measurement_resp {
|
||||
* @NL80211_PMSR_PEER_ATTR_RESP: This is a nested attribute indexed by
|
||||
* measurement type, with attributes from the
|
||||
* &enum nl80211_peer_measurement_resp inside.
|
||||
* @NL80211_PMSR_PEER_ATTR_REQ_TYPE: u32 attribute specifying the ranging
|
||||
* request type, using values from &enum nl80211_peer_measurement_ftm_req_type.
|
||||
* If absent, defaults to %NL80211_PMSR_FTM_REQ_TYPE_INFRA.
|
||||
*
|
||||
* @NUM_NL80211_PMSR_PEER_ATTRS: internal
|
||||
* @NL80211_PMSR_PEER_ATTR_MAX: highest attribute number
|
||||
@@ -8015,6 +8038,7 @@ enum nl80211_peer_measurement_peer_attrs {
|
||||
NL80211_PMSR_PEER_ATTR_CHAN,
|
||||
NL80211_PMSR_PEER_ATTR_REQ,
|
||||
NL80211_PMSR_PEER_ATTR_RESP,
|
||||
NL80211_PMSR_PEER_ATTR_REQ_TYPE,
|
||||
|
||||
/* keep last */
|
||||
NUM_NL80211_PMSR_PEER_ATTRS,
|
||||
@@ -8238,9 +8262,11 @@ enum nl80211_peer_measurement_ftm_type_capa {
|
||||
* default 15 i.e. "no preference"). For non-EDCA ranging, this is the
|
||||
* burst duration in milliseconds (optional with default 0, i.e. let the
|
||||
* device decide).
|
||||
* @NL80211_PMSR_FTM_REQ_ATTR_FTMS_PER_BURST: number of successful FTM frames
|
||||
* requested per burst
|
||||
* @NL80211_PMSR_FTM_REQ_ATTR_FTMS_PER_BURST: (Optional) number of successful
|
||||
* FTM frames requested per burst
|
||||
* (u8, 0-31, optional with default 0 i.e. "no preference")
|
||||
* If the attribute is absent ("no preference"), the driver or firmware can
|
||||
* choose a suitable value.
|
||||
* @NL80211_PMSR_FTM_REQ_ATTR_NUM_FTMR_RETRIES: number of FTMR frame retries
|
||||
* (u8, default 3)
|
||||
* @NL80211_PMSR_FTM_REQ_ATTR_REQUEST_LCI: request LCI data (flag)
|
||||
@@ -8274,6 +8300,33 @@ enum nl80211_peer_measurement_ftm_type_capa {
|
||||
* Only valid if %NL80211_PMSR_FTM_REQ_ATTR_LMR_FEEDBACK is set (so the
|
||||
* RSTA will have the measurement results to report back in the FTM
|
||||
* response).
|
||||
* @NL80211_PMSR_FTM_REQ_ATTR_MIN_TIME_BETWEEN_MEASUREMENTS: minimum time
|
||||
* between two consecutive range measurements in units of 100 microseconds,
|
||||
* for non-trigger based ranging (u32). Should be set as short as possible
|
||||
* to minimize turnaround time, since two-way ranging with delayed LMR
|
||||
* requires two measurements. Only valid if
|
||||
* %NL80211_PMSR_FTM_REQ_ATTR_NON_TRIGGER_BASED is set.
|
||||
* @NL80211_PMSR_FTM_REQ_ATTR_MAX_TIME_BETWEEN_MEASUREMENTS: maximum time
|
||||
* between two consecutive range measurements in units of 10 milliseconds,
|
||||
* for non-trigger based ranging (u32). Acts as a session timeout; if
|
||||
* exceeded, the ranging session should be terminated. Only valid if
|
||||
* %NL80211_PMSR_FTM_REQ_ATTR_NON_TRIGGER_BASED is set.
|
||||
* @NL80211_PMSR_FTM_REQ_ATTR_NOMINAL_TIME: The nominal time field shall be
|
||||
* set to the nominal duration between adjacent Availability Windows in
|
||||
* units of milli seconds (u32). Mandatory if
|
||||
* %NL80211_PMSR_FTM_REQ_ATTR_NON_TRIGGER_BASED is set.
|
||||
* @NL80211_PMSR_FTM_REQ_ATTR_AW_DURATION: (Optional) The AW duration field
|
||||
* shall be set to the duration of the AW in units of 1ms (0-255 ms) (u32).
|
||||
* Only valid if %NL80211_PMSR_FTM_REQ_ATTR_NON_TRIGGER_BASED is set.
|
||||
* If the attribute is absent ("no preference"), the driver or firmware
|
||||
* can choose a suitable value.
|
||||
* @NL80211_PMSR_FTM_REQ_ATTR_NUM_MEASUREMENTS: (Optional) number of
|
||||
* Availability Windows (AWs) to schedule for non-trigger-based ranging.
|
||||
* Each AW may contain multiple FTM exchanges as configured by
|
||||
* %NL80211_PMSR_FTM_REQ_ATTR_FTMS_PER_BURST. Only valid if
|
||||
* %NL80211_PMSR_FTM_REQ_ATTR_NON_TRIGGER_BASED is set.
|
||||
* If the attribute is absent ("no preference"), the driver or firmware
|
||||
* can choose a suitable value.
|
||||
*
|
||||
* @NUM_NL80211_PMSR_FTM_REQ_ATTR: internal
|
||||
* @NL80211_PMSR_FTM_REQ_ATTR_MAX: highest attribute number
|
||||
@@ -8295,6 +8348,11 @@ enum nl80211_peer_measurement_ftm_req {
|
||||
NL80211_PMSR_FTM_REQ_ATTR_LMR_FEEDBACK,
|
||||
NL80211_PMSR_FTM_REQ_ATTR_BSS_COLOR,
|
||||
NL80211_PMSR_FTM_REQ_ATTR_RSTA,
|
||||
NL80211_PMSR_FTM_REQ_ATTR_MIN_TIME_BETWEEN_MEASUREMENTS,
|
||||
NL80211_PMSR_FTM_REQ_ATTR_MAX_TIME_BETWEEN_MEASUREMENTS,
|
||||
NL80211_PMSR_FTM_REQ_ATTR_NOMINAL_TIME,
|
||||
NL80211_PMSR_FTM_REQ_ATTR_AW_DURATION,
|
||||
NL80211_PMSR_FTM_REQ_ATTR_NUM_MEASUREMENTS,
|
||||
|
||||
/* keep last */
|
||||
NUM_NL80211_PMSR_FTM_REQ_ATTR,
|
||||
|
||||
Reference in New Issue
Block a user