diff --git a/wmi/inc/wmi_unified_param.h b/wmi/inc/wmi_unified_param.h index 5c737b0595..14e9832c82 100644 --- a/wmi/inc/wmi_unified_param.h +++ b/wmi/inc/wmi_unified_param.h @@ -7501,6 +7501,7 @@ struct vap_tidmap_prec_params { * Each of these 8-bit RSSI reports is in dBm units. 0x80 means invalid. * Unused bytes within used chain_rssi indices will be 0x80. * Unused rssi_chain indices will be set to 0x80808080. + * @chain_phase: Per chain phase of peer for upto WMI_HOST_MAX_CHAINS. */ typedef struct { uint32_t capture_method; @@ -7518,6 +7519,7 @@ typedef struct { uint32_t timestamp_us; uint32_t counter; uint32_t chain_rssi[WMI_HOST_MAX_CHAINS]; + uint16_t chain_phase[WMI_HOST_MAX_CHAINS]; } wmi_cfr_peer_tx_event_param; /** diff --git a/wmi/src/wmi_unified_tlv.c b/wmi/src/wmi_unified_tlv.c index 0577f99571..5e15a33ccf 100644 --- a/wmi/src/wmi_unified_tlv.c +++ b/wmi/src/wmi_unified_tlv.c @@ -11568,8 +11568,10 @@ static QDF_STATUS extract_cfr_peer_tx_event_param_tlv(wmi_unified_t wmi_handle, void *evt_buf, wmi_cfr_peer_tx_event_param *peer_tx_event) { + int idx; WMI_PEER_CFR_CAPTURE_EVENTID_param_tlvs *param_buf; wmi_peer_cfr_capture_event_fixed_param *peer_tx_event_ev; + wmi_peer_cfr_capture_event_phase_fixed_param *chain_phase_ev; param_buf = (WMI_PEER_CFR_CAPTURE_EVENTID_param_tlvs *)evt_buf; if (!param_buf) { @@ -11604,6 +11606,20 @@ extract_cfr_peer_tx_event_param_tlv(wmi_unified_t wmi_handle, void *evt_buf, qdf_mem_copy(peer_tx_event->chain_rssi, peer_tx_event_ev->chain_rssi, sizeof(peer_tx_event->chain_rssi)); + chain_phase_ev = param_buf->phase_param; + if (chain_phase_ev) { + for (idx = 0; idx < WMI_HOST_MAX_CHAINS; idx++) { + /* Due to FW's alignment rules, phase information being + * passed is 32-bit, out of which only 16 bits is valid. + * Remaining bits are all zeroed. So direct mem copy + * will not work as it will copy extra zeroes into host + * structures. + */ + peer_tx_event->chain_phase[idx] = + (0xffff & chain_phase_ev->chain_phase[idx]); + } + } + return QDF_STATUS_SUCCESS; } #endif /* WLAN_CFR_ENABLE */