Переглянути джерело

qcacmn: Use PPDU duration to find end time stamp

Use the PPDU duration given by FW to find the end time
stamp of management frames.

CRs-Fixed: 3181500
Change-Id: Ibabe82c8e2d3cd7e494e764a9a2baeded89a7300
Edayilliam Jayadev 3 роки тому
батько
коміт
1c9f82f0ec

+ 46 - 0
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

+ 6 - 0
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;
 };
 
 /*

+ 8 - 0
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;
 }