diff --git a/umac/cmn_services/mgmt_txrx/core/src/wlan_mgmt_txrx_rx_reo_i.h b/umac/cmn_services/mgmt_txrx/core/src/wlan_mgmt_txrx_rx_reo_i.h index 1d008c9213..51f04f3095 100644 --- a/umac/cmn_services/mgmt_txrx/core/src/wlan_mgmt_txrx_rx_reo_i.h +++ b/umac/cmn_services/mgmt_txrx/core/src/wlan_mgmt_txrx_rx_reo_i.h @@ -685,6 +685,52 @@ mgmt_rx_reo_get_global_ts(struct mgmt_rx_event_params *rx_params) return rx_params->reo_params->global_timestamp; } +/** + * mgmt_rx_reo_get_start_ts() - Helper API to get start time stamp of the frame + * @rx_params: Management rx event params + * + * Return: start time stamp of the frame + */ +static inline uint32_t +mgmt_rx_reo_get_start_ts(struct mgmt_rx_event_params *rx_params) +{ + qdf_assert_always(rx_params); + qdf_assert_always(rx_params->reo_params); + + return rx_params->reo_params->start_timestamp; +} + +/** + * mgmt_rx_reo_get_end_ts() - Helper API to get end time stamp of the frame + * @rx_params: Management rx event params + * + * Return: end time stamp of the frame + */ +static inline uint32_t +mgmt_rx_reo_get_end_ts(struct mgmt_rx_event_params *rx_params) +{ + qdf_assert_always(rx_params); + qdf_assert_always(rx_params->reo_params); + + return rx_params->reo_params->end_timestamp; +} + +/** + * mgmt_rx_reo_get_duration_us() - Helper API to get the duration of the frame + * in us + * @rx_params: Management rx event params + * + * Return: Duration of the frame in us + */ +static inline uint32_t +mgmt_rx_reo_get_duration_us(struct mgmt_rx_event_params *rx_params) +{ + qdf_assert_always(rx_params); + qdf_assert_always(rx_params->reo_params); + + return rx_params->reo_params->duration_us; +} + /** * mgmt_rx_reo_get_pkt_counter() - Helper API to get packet counter * corresponding to the mgmt rx event diff --git a/umac/cmn_services/mgmt_txrx/dispatcher/inc/wlan_mgmt_txrx_rx_reo_public_structs.h b/umac/cmn_services/mgmt_txrx/dispatcher/inc/wlan_mgmt_txrx_rx_reo_public_structs.h index 5c283c06f4..dec3888c77 100644 --- a/umac/cmn_services/mgmt_txrx/dispatcher/inc/wlan_mgmt_txrx_rx_reo_public_structs.h +++ b/umac/cmn_services/mgmt_txrx/dispatcher/inc/wlan_mgmt_txrx_rx_reo_public_structs.h @@ -100,6 +100,9 @@ struct mgmt_rx_reo_shared_snapshot { * @link_id: link ID for which FW consumed event is received * @mgmt_pkt_ctr: MGMT packet counter of the frame that is consumed * @global_timestamp: Global timestamp of the frame that is consumed + * @duration_us: duration in us + * @start_timestamp: start time stamp + * @end_timestamp: end time stamp */ struct mgmt_rx_reo_params { bool valid; @@ -107,6 +110,9 @@ struct mgmt_rx_reo_params { uint8_t link_id; uint16_t mgmt_pkt_ctr; uint32_t global_timestamp; + uint16_t duration_us; + uint32_t start_timestamp; + uint32_t end_timestamp; }; /* diff --git a/wmi/src/wmi_unified_tlv.c b/wmi/src/wmi_unified_tlv.c index ebbc45ba54..04ab8e18cb 100644 --- a/wmi/src/wmi_unified_tlv.c +++ b/wmi/src/wmi_unified_tlv.c @@ -11499,6 +11499,10 @@ extract_mgmt_rx_fw_consumed_tlv(wmi_unified_t wmi_handle, params->global_timestamp = ev_hdr->global_timestamp; params->mgmt_pkt_ctr = WMI_MGMT_RX_FW_CONSUMED_PARAM_MGMT_PKT_CTR_GET( ev_hdr->mgmt_pkt_ctr_info); + params->duration_us = ev_hdr->rx_ppdu_duration_us; + params->start_timestamp = params->global_timestamp; + params->end_timestamp = params->start_timestamp + + params->duration_us; return QDF_STATUS_SUCCESS; } @@ -11550,6 +11554,10 @@ static QDF_STATUS extract_mgmt_rx_reo_params_tlv(wmi_unified_t wmi_handle, reo_params->global_timestamp = reo_params_tlv->global_timestamp; reo_params->mgmt_pkt_ctr = WMI_MGMT_RX_REO_PARAM_MGMT_PKT_CTR_GET( reo_params_tlv->mgmt_pkt_ctr_link_info); + reo_params->duration_us = reo_params_tlv->rx_ppdu_duration_us; + reo_params->start_timestamp = reo_params->global_timestamp; + reo_params->end_timestamp = reo_params->start_timestamp + + reo_params->duration_us; return QDF_STATUS_SUCCESS; }