iwlwifi: mvm: support rtt confidence indication
The range response notification API has changed to add a value that indicates the confidence of the rtt result. Support the new API and print the rtt confidence for debug. Signed-off-by: Avraham Stern <avraham.stern@intel.com> Signed-off-by: Luca Coelho <luciano.coelho@intel.com>
This commit is contained in:
parent
e91130cebd
commit
957a67c828
@ -675,7 +675,7 @@ struct iwl_tof_range_rsp_ap_entry_ntfy_v3 {
|
|||||||
} __packed; /* LOCATION_RANGE_RSP_AP_ETRY_NTFY_API_S_VER_3 */
|
} __packed; /* LOCATION_RANGE_RSP_AP_ETRY_NTFY_API_S_VER_3 */
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* struct iwl_tof_range_rsp_ap_entry_ntfy - AP parameters (response)
|
* struct iwl_tof_range_rsp_ap_entry_ntfy_v4 - AP parameters (response)
|
||||||
* @bssid: BSSID of the AP
|
* @bssid: BSSID of the AP
|
||||||
* @measure_status: current APs measurement status, one of
|
* @measure_status: current APs measurement status, one of
|
||||||
* &enum iwl_tof_entry_status.
|
* &enum iwl_tof_entry_status.
|
||||||
@ -705,7 +705,7 @@ struct iwl_tof_range_rsp_ap_entry_ntfy_v3 {
|
|||||||
* @papd_calib_output: The result of the tof papd calibration that was injected
|
* @papd_calib_output: The result of the tof papd calibration that was injected
|
||||||
* into the algorithm.
|
* into the algorithm.
|
||||||
*/
|
*/
|
||||||
struct iwl_tof_range_rsp_ap_entry_ntfy {
|
struct iwl_tof_range_rsp_ap_entry_ntfy_v4 {
|
||||||
u8 bssid[ETH_ALEN];
|
u8 bssid[ETH_ALEN];
|
||||||
u8 measure_status;
|
u8 measure_status;
|
||||||
u8 measure_bw;
|
u8 measure_bw;
|
||||||
@ -727,6 +727,63 @@ struct iwl_tof_range_rsp_ap_entry_ntfy {
|
|||||||
__le32 papd_calib_output;
|
__le32 papd_calib_output;
|
||||||
} __packed; /* LOCATION_RANGE_RSP_AP_ETRY_NTFY_API_S_VER_4 */
|
} __packed; /* LOCATION_RANGE_RSP_AP_ETRY_NTFY_API_S_VER_4 */
|
||||||
|
|
||||||
|
/**
|
||||||
|
* struct iwl_tof_range_rsp_ap_entry_ntfy - AP parameters (response)
|
||||||
|
* @bssid: BSSID of the AP
|
||||||
|
* @measure_status: current APs measurement status, one of
|
||||||
|
* &enum iwl_tof_entry_status.
|
||||||
|
* @measure_bw: Current AP Bandwidth: 0 20MHz, 1 40MHz, 2 80MHz
|
||||||
|
* @rtt: The Round Trip Time that took for the last measurement for
|
||||||
|
* current AP [pSec]
|
||||||
|
* @rtt_variance: The Variance of the RTT values measured for current AP
|
||||||
|
* @rtt_spread: The Difference between the maximum and the minimum RTT
|
||||||
|
* values measured for current AP in the current session [pSec]
|
||||||
|
* @rssi: RSSI as uploaded in the Channel Estimation notification
|
||||||
|
* @rssi_spread: The Difference between the maximum and the minimum RSSI values
|
||||||
|
* measured for current AP in the current session
|
||||||
|
* @last_burst: 1 if no more FTM sessions are scheduled for this responder
|
||||||
|
* @refusal_period: refusal period in case of
|
||||||
|
* @IWL_TOF_ENTRY_RESPONDER_CANNOT_COLABORATE [sec]
|
||||||
|
* @timestamp: The GP2 Clock [usec] where Channel Estimation notification was
|
||||||
|
* uploaded by the LMAC
|
||||||
|
* @start_tsf: measurement start time in TSF of the mac specified in the range
|
||||||
|
* request
|
||||||
|
* @rx_rate_n_flags: rate and flags of the last FTM frame received from this
|
||||||
|
* responder
|
||||||
|
* @tx_rate_n_flags: rate and flags of the last ack sent to this responder
|
||||||
|
* @t2t3_initiator: as calculated from the algo in the initiator
|
||||||
|
* @t1t4_responder: as calculated from the algo in the responder
|
||||||
|
* @common_calib: Calib val that was used in for this AP measurement
|
||||||
|
* @specific_calib: val that was used in for this AP measurement
|
||||||
|
* @papd_calib_output: The result of the tof papd calibration that was injected
|
||||||
|
* into the algorithm.
|
||||||
|
* @rttConfidence: a value between 0 - 31 that represents the rtt accuracy.
|
||||||
|
* @reserved: for alignment
|
||||||
|
*/
|
||||||
|
struct iwl_tof_range_rsp_ap_entry_ntfy {
|
||||||
|
u8 bssid[ETH_ALEN];
|
||||||
|
u8 measure_status;
|
||||||
|
u8 measure_bw;
|
||||||
|
__le32 rtt;
|
||||||
|
__le32 rtt_variance;
|
||||||
|
__le32 rtt_spread;
|
||||||
|
s8 rssi;
|
||||||
|
u8 rssi_spread;
|
||||||
|
u8 last_burst;
|
||||||
|
u8 refusal_period;
|
||||||
|
__le32 timestamp;
|
||||||
|
__le32 start_tsf;
|
||||||
|
__le32 rx_rate_n_flags;
|
||||||
|
__le32 tx_rate_n_flags;
|
||||||
|
__le32 t2t3_initiator;
|
||||||
|
__le32 t1t4_responder;
|
||||||
|
__le16 common_calib;
|
||||||
|
__le16 specific_calib;
|
||||||
|
__le32 papd_calib_output;
|
||||||
|
u8 rttConfidence;
|
||||||
|
u8 reserved[3];
|
||||||
|
} __packed; /* LOCATION_RANGE_RSP_AP_ETRY_NTFY_API_S_VER_5 */
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* enum iwl_tof_response_status - tof response status
|
* enum iwl_tof_response_status - tof response status
|
||||||
*
|
*
|
||||||
@ -760,6 +817,22 @@ struct iwl_tof_range_rsp_ntfy_v5 {
|
|||||||
struct iwl_tof_range_rsp_ap_entry_ntfy_v3 ap[IWL_MVM_TOF_MAX_APS];
|
struct iwl_tof_range_rsp_ap_entry_ntfy_v3 ap[IWL_MVM_TOF_MAX_APS];
|
||||||
} __packed; /* LOCATION_RANGE_RSP_NTFY_API_S_VER_5 */
|
} __packed; /* LOCATION_RANGE_RSP_NTFY_API_S_VER_5 */
|
||||||
|
|
||||||
|
/**
|
||||||
|
* struct iwl_tof_range_rsp_ntfy_v6 - ranging response notification
|
||||||
|
* @request_id: A Token ID of the corresponding Range request
|
||||||
|
* @num_of_aps: Number of APs results
|
||||||
|
* @last_report: 1 if no more FTM sessions are scheduled, 0 otherwise.
|
||||||
|
* @reserved: reserved
|
||||||
|
* @ap: per-AP data
|
||||||
|
*/
|
||||||
|
struct iwl_tof_range_rsp_ntfy_v6 {
|
||||||
|
u8 request_id;
|
||||||
|
u8 num_of_aps;
|
||||||
|
u8 last_report;
|
||||||
|
u8 reserved;
|
||||||
|
struct iwl_tof_range_rsp_ap_entry_ntfy_v4 ap[IWL_MVM_TOF_MAX_APS];
|
||||||
|
} __packed; /* LOCATION_RANGE_RSP_NTFY_API_S_VER_6 */
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* struct iwl_tof_range_rsp_ntfy - ranging response notification
|
* struct iwl_tof_range_rsp_ntfy - ranging response notification
|
||||||
* @request_id: A Token ID of the corresponding Range request
|
* @request_id: A Token ID of the corresponding Range request
|
||||||
@ -774,7 +847,7 @@ struct iwl_tof_range_rsp_ntfy {
|
|||||||
u8 last_report;
|
u8 last_report;
|
||||||
u8 reserved;
|
u8 reserved;
|
||||||
struct iwl_tof_range_rsp_ap_entry_ntfy ap[IWL_MVM_TOF_MAX_APS];
|
struct iwl_tof_range_rsp_ap_entry_ntfy ap[IWL_MVM_TOF_MAX_APS];
|
||||||
} __packed; /* LOCATION_RANGE_RSP_NTFY_API_S_VER_6 */
|
} __packed; /* LOCATION_RANGE_RSP_NTFY_API_S_VER_7 */
|
||||||
|
|
||||||
#define IWL_MVM_TOF_MCSI_BUF_SIZE (245)
|
#define IWL_MVM_TOF_MCSI_BUF_SIZE (245)
|
||||||
/**
|
/**
|
||||||
|
@ -311,6 +311,7 @@ enum iwl_ucode_tlv_api {
|
|||||||
IWL_UCODE_TLV_API_FTM_NEW_RANGE_REQ = (__force iwl_ucode_tlv_api_t)49,
|
IWL_UCODE_TLV_API_FTM_NEW_RANGE_REQ = (__force iwl_ucode_tlv_api_t)49,
|
||||||
IWL_UCODE_TLV_API_SCAN_OFFLOAD_CHANS = (__force iwl_ucode_tlv_api_t)50,
|
IWL_UCODE_TLV_API_SCAN_OFFLOAD_CHANS = (__force iwl_ucode_tlv_api_t)50,
|
||||||
IWL_UCODE_TLV_API_MBSSID_HE = (__force iwl_ucode_tlv_api_t)52,
|
IWL_UCODE_TLV_API_MBSSID_HE = (__force iwl_ucode_tlv_api_t)52,
|
||||||
|
IWL_UCODE_TLV_API_FTM_RTT_ACCURACY = (__force iwl_ucode_tlv_api_t)54,
|
||||||
|
|
||||||
NUM_IWL_UCODE_TLV_API
|
NUM_IWL_UCODE_TLV_API
|
||||||
#ifdef __CHECKER__
|
#ifdef __CHECKER__
|
||||||
|
@ -480,6 +480,7 @@ void iwl_mvm_ftm_range_resp(struct iwl_mvm *mvm, struct iwl_rx_cmd_buffer *rxb)
|
|||||||
{
|
{
|
||||||
struct iwl_rx_packet *pkt = rxb_addr(rxb);
|
struct iwl_rx_packet *pkt = rxb_addr(rxb);
|
||||||
struct iwl_tof_range_rsp_ntfy_v5 *fw_resp_v5 = (void *)pkt->data;
|
struct iwl_tof_range_rsp_ntfy_v5 *fw_resp_v5 = (void *)pkt->data;
|
||||||
|
struct iwl_tof_range_rsp_ntfy_v6 *fw_resp_v6 = (void *)pkt->data;
|
||||||
struct iwl_tof_range_rsp_ntfy *fw_resp = (void *)pkt->data;
|
struct iwl_tof_range_rsp_ntfy *fw_resp = (void *)pkt->data;
|
||||||
int i;
|
int i;
|
||||||
bool new_api = fw_has_api(&mvm->fw->ucode_capa,
|
bool new_api = fw_has_api(&mvm->fw->ucode_capa,
|
||||||
@ -519,7 +520,12 @@ void iwl_mvm_ftm_range_resp(struct iwl_mvm *mvm, struct iwl_rx_cmd_buffer *rxb)
|
|||||||
int peer_idx;
|
int peer_idx;
|
||||||
|
|
||||||
if (new_api) {
|
if (new_api) {
|
||||||
|
if (fw_has_api(&mvm->fw->ucode_capa,
|
||||||
|
IWL_UCODE_TLV_API_FTM_RTT_ACCURACY))
|
||||||
fw_ap = &fw_resp->ap[i];
|
fw_ap = &fw_resp->ap[i];
|
||||||
|
else
|
||||||
|
fw_ap = (void *)&fw_resp_v6->ap[i];
|
||||||
|
|
||||||
result.final = fw_resp->ap[i].last_burst;
|
result.final = fw_resp->ap[i].last_burst;
|
||||||
} else {
|
} else {
|
||||||
/* the first part is the same for old and new APIs */
|
/* the first part is the same for old and new APIs */
|
||||||
@ -588,6 +594,11 @@ void iwl_mvm_ftm_range_resp(struct iwl_mvm *mvm, struct iwl_rx_cmd_buffer *rxb)
|
|||||||
mvm->ftm_initiator.req,
|
mvm->ftm_initiator.req,
|
||||||
&result, GFP_KERNEL);
|
&result, GFP_KERNEL);
|
||||||
|
|
||||||
|
if (fw_has_api(&mvm->fw->ucode_capa,
|
||||||
|
IWL_UCODE_TLV_API_FTM_RTT_ACCURACY))
|
||||||
|
IWL_DEBUG_INFO(mvm, "RTT confidence: %hhu\n",
|
||||||
|
fw_ap->rttConfidence);
|
||||||
|
|
||||||
iwl_mvm_debug_range_resp(mvm, i, &result);
|
iwl_mvm_debug_range_resp(mvm, i, &result);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user