Lines Matching full:ftm

20 	if (!(rdev->wiphy.pmsr_capa->ftm.bandwidths & BIT(out->chandef.width))) {  in pmsr_parse_ftm()
21 NL_SET_ERR_MSG(info->extack, "FTM: unsupported bandwidth"); in pmsr_parse_ftm()
33 out->ftm.requested = true; in pmsr_parse_ftm()
42 "FTM: must specify preamble"); in pmsr_parse_ftm()
47 if (!(capa->ftm.preambles & BIT(preamble))) { in pmsr_parse_ftm()
50 "FTM: invalid preamble"); in pmsr_parse_ftm()
54 out->ftm.preamble = preamble; in pmsr_parse_ftm()
56 out->ftm.burst_period = 0; in pmsr_parse_ftm()
58 out->ftm.burst_period = in pmsr_parse_ftm()
61 out->ftm.asap = !!tb[NL80211_PMSR_FTM_REQ_ATTR_ASAP]; in pmsr_parse_ftm()
62 if (out->ftm.asap && !capa->ftm.asap) { in pmsr_parse_ftm()
65 "FTM: ASAP mode not supported"); in pmsr_parse_ftm()
69 if (!out->ftm.asap && !capa->ftm.non_asap) { in pmsr_parse_ftm()
71 "FTM: non-ASAP mode not supported"); in pmsr_parse_ftm()
75 out->ftm.num_bursts_exp = 0; in pmsr_parse_ftm()
77 out->ftm.num_bursts_exp = in pmsr_parse_ftm()
80 if (capa->ftm.max_bursts_exponent >= 0 && in pmsr_parse_ftm()
81 out->ftm.num_bursts_exp > capa->ftm.max_bursts_exponent) { in pmsr_parse_ftm()
84 "FTM: max NUM_BURSTS_EXP must be set lower than the device limit"); in pmsr_parse_ftm()
88 out->ftm.ftms_per_burst = 0; in pmsr_parse_ftm()
90 out->ftm.ftms_per_burst = in pmsr_parse_ftm()
93 if (capa->ftm.max_ftms_per_burst && in pmsr_parse_ftm()
94 (out->ftm.ftms_per_burst > capa->ftm.max_ftms_per_burst || in pmsr_parse_ftm()
95 out->ftm.ftms_per_burst == 0)) { in pmsr_parse_ftm()
98 "FTM: FTMs per burst must be set lower than the device limit but non-zero"); in pmsr_parse_ftm()
102 out->ftm.ftmr_retries = 3; in pmsr_parse_ftm()
104 out->ftm.ftmr_retries = in pmsr_parse_ftm()
107 out->ftm.request_lci = !!tb[NL80211_PMSR_FTM_REQ_ATTR_REQUEST_LCI]; in pmsr_parse_ftm()
108 if (out->ftm.request_lci && !capa->ftm.request_lci) { in pmsr_parse_ftm()
111 "FTM: LCI request not supported"); in pmsr_parse_ftm()
114 out->ftm.request_civicloc = in pmsr_parse_ftm()
116 if (out->ftm.request_civicloc && !capa->ftm.request_civicloc) { in pmsr_parse_ftm()
119 "FTM: civic location request not supported"); in pmsr_parse_ftm()
122 out->ftm.trigger_based = in pmsr_parse_ftm()
124 if (out->ftm.trigger_based && !capa->ftm.trigger_based) { in pmsr_parse_ftm()
127 "FTM: trigger based ranging is not supported"); in pmsr_parse_ftm()
131 out->ftm.non_trigger_based = in pmsr_parse_ftm()
133 if (out->ftm.non_trigger_based && !capa->ftm.non_trigger_based) { in pmsr_parse_ftm()
136 "FTM: trigger based ranging is not supported"); in pmsr_parse_ftm()
140 if (out->ftm.trigger_based && out->ftm.non_trigger_based) { in pmsr_parse_ftm()
142 "FTM: can't set both trigger based and non trigger based"); in pmsr_parse_ftm()
146 if (out->ftm.ftms_per_burst > 31 && !out->ftm.non_trigger_based && in pmsr_parse_ftm()
147 !out->ftm.trigger_based) { in pmsr_parse_ftm()
150 "FTM: FTMs per burst must be set lower than 31"); in pmsr_parse_ftm()
154 if ((out->ftm.trigger_based || out->ftm.non_trigger_based) && in pmsr_parse_ftm()
155 out->ftm.preamble != NL80211_PREAMBLE_HE) { in pmsr_parse_ftm()
158 "FTM: non EDCA based ranging must use HE preamble"); in pmsr_parse_ftm()
163 out->ftm.burst_duration = in pmsr_parse_ftm()
165 else if (!out->ftm.non_trigger_based && !out->ftm.trigger_based) in pmsr_parse_ftm()
166 out->ftm.burst_duration = 15; in pmsr_parse_ftm()
168 out->ftm.lmr_feedback = in pmsr_parse_ftm()
170 if (!out->ftm.trigger_based && !out->ftm.non_trigger_based && in pmsr_parse_ftm()
171 out->ftm.lmr_feedback) { in pmsr_parse_ftm()
174 "FTM: LMR feedback set for EDCA based ranging"); in pmsr_parse_ftm()
179 if (!out->ftm.non_trigger_based && !out->ftm.trigger_based) { in pmsr_parse_ftm()
182 "FTM: BSS color set for EDCA based ranging"); in pmsr_parse_ftm()
186 out->ftm.bss_color = in pmsr_parse_ftm()
190 out->ftm.rsta = !!tb[NL80211_PMSR_FTM_REQ_ATTR_RSTA]; in pmsr_parse_ftm()
191 if (out->ftm.rsta && !capa->ftm.support_rsta) { in pmsr_parse_ftm()
194 "FTM: RSTA not supported by device"); in pmsr_parse_ftm()
198 if (out->ftm.rsta && !out->ftm.lmr_feedback) { in pmsr_parse_ftm()
201 "FTM: RSTA set without LMR feedback"); in pmsr_parse_ftm()
423 res->ftm.failure_reason)) in nl80211_pmsr_send_ftm_res()
426 if (res->ftm.failure_reason == in nl80211_pmsr_send_ftm_res()
428 res->ftm.busy_retry_time && in nl80211_pmsr_send_ftm_res()
430 res->ftm.busy_retry_time)) in nl80211_pmsr_send_ftm_res()
440 res->ftm.val)) \ in nl80211_pmsr_send_ftm_res()
446 if (res->ftm.val##_valid) \ in nl80211_pmsr_send_ftm_res()
454 res->ftm.val, \ in nl80211_pmsr_send_ftm_res()
461 if (res->ftm.val##_valid) \ in nl80211_pmsr_send_ftm_res()
465 if (res->ftm.burst_index >= 0) in nl80211_pmsr_send_ftm_res()
475 if (res->ftm.tx_rate_valid && in nl80211_pmsr_send_ftm_res()
476 !nl80211_put_sta_rate(msg, &res->ftm.tx_rate, in nl80211_pmsr_send_ftm_res()
479 if (res->ftm.rx_rate_valid && in nl80211_pmsr_send_ftm_res()
480 !nl80211_put_sta_rate(msg, &res->ftm.rx_rate, in nl80211_pmsr_send_ftm_res()
489 if (res->ftm.lci && res->ftm.lci_len && in nl80211_pmsr_send_ftm_res()
491 res->ftm.lci_len, res->ftm.lci)) in nl80211_pmsr_send_ftm_res()
493 if (res->ftm.civicloc && res->ftm.civicloc_len && in nl80211_pmsr_send_ftm_res()
495 res->ftm.civicloc_len, res->ftm.civicloc)) in nl80211_pmsr_send_ftm_res()