Bläddra i källkod

qcacld-3.0: Fix timestamp values for BTM connectivity logs

Firmware timestamp values are not printed for BTM_QUERY &
BTM_REQ events and wrong value for BTM_RSP. This is because
the timestamp values is read from wrong structures.

Read the firmware timestamp values from correct wmi structure
to fill the connectivity diag event

Change-Id: I568e87ee3e4bb66d3f73d353df794ced92b418c1
CRs-Fixed: 3788350
Abhinav Kumar 11 månader sedan
förälder
incheckning
404d297834

+ 11 - 6
components/umac/mlme/connection_mgr/core/src/wlan_cm_roam_offload.c

@@ -6955,7 +6955,7 @@ cm_roam_btm_query_event(struct wmi_neighbor_report_data *btm_data,
 	qdf_mem_zero(&wlan_diag_event, sizeof(wlan_diag_event));
 
 	populate_diag_cmn(&wlan_diag_event.diag_cmn, vdev_id,
-			  (uint64_t)btm_data->timestamp, NULL);
+			  (uint64_t)btm_data->req_time, NULL);
 
 	wlan_diag_event.subtype = WLAN_CONN_DIAG_BTM_QUERY_EVENT;
 	wlan_diag_event.version = DIAG_BTM_VERSION_2;
@@ -7076,7 +7076,7 @@ cm_roam_btm_resp_event(struct wmi_roam_trigger_info *trigger_info,
 	qdf_mem_zero(&wlan_diag_event, sizeof(wlan_diag_event));
 
 	populate_diag_cmn(&wlan_diag_event.diag_cmn, vdev_id,
-			  (uint64_t)trigger_info->timestamp,
+			  (uint64_t)btm_data->timestamp,
 			  &btm_data->target_bssid);
 
 	wlan_diag_event.version = DIAG_BTM_VERSION_2;
@@ -7124,7 +7124,8 @@ cm_roam_btm_candidate_event(struct wmi_btm_req_candidate_info *btm_data,
 }
 
 QDF_STATUS
-cm_roam_btm_req_event(struct wmi_roam_btm_trigger_data *btm_data,
+cm_roam_btm_req_event(struct wmi_neighbor_report_data *neigh_rpt,
+		      struct wmi_roam_btm_trigger_data *btm_data,
 		      struct wmi_roam_trigger_info *trigger_info,
 		      uint8_t vdev_id, bool is_wtc)
 {
@@ -7145,9 +7146,13 @@ cm_roam_btm_req_event(struct wmi_roam_btm_trigger_data *btm_data,
 	    btm_data->disassoc_timer)
 		return status;
 
-	populate_diag_cmn(&wlan_diag_event.diag_cmn, vdev_id,
-			  (uint64_t)btm_data->timestamp,
-			  NULL);
+	if (neigh_rpt->resp_time)
+		populate_diag_cmn(&wlan_diag_event.diag_cmn, vdev_id,
+				  (uint64_t)neigh_rpt->resp_time, NULL);
+	else
+		populate_diag_cmn(&wlan_diag_event.diag_cmn, vdev_id,
+				  (uint64_t)trigger_info->timestamp, NULL);
+
 
 	wlan_diag_event.subtype = WLAN_CONN_DIAG_BTM_REQ_EVENT;
 	wlan_diag_event.version = DIAG_BTM_VERSION_2;

+ 6 - 3
components/umac/mlme/connection_mgr/core/src/wlan_cm_roam_offload.h

@@ -603,15 +603,17 @@ cm_roam_mgmt_frame_event(struct wlan_objmgr_vdev *vdev,
 
 /**
  * cm_roam_btm_req_event  - Send BTM request related logging event
- * @vdev_id: Vdev id
+ * @neigh_rpt: Neighbor report/BTM request related data
  * @btm_data: BTM trigger related data
  * @trigger_info: Roam trigger related info
+ * @vdev_id: vdev id
  * @is_wtc: Is WTC or BTM response
  *
  * Return: QDF_STATUS
  */
 QDF_STATUS
-cm_roam_btm_req_event(struct wmi_roam_btm_trigger_data *btm_data,
+cm_roam_btm_req_event(struct wmi_neighbor_report_data *neigh_rpt,
+		      struct wmi_roam_btm_trigger_data *btm_data,
 		      struct wmi_roam_trigger_info *trigger_info,
 		      uint8_t vdev_id, bool is_wtc);
 
@@ -696,7 +698,8 @@ cm_roam_mgmt_frame_event(struct wlan_objmgr_vdev *vdev,
 }
 
 static inline QDF_STATUS
-cm_roam_btm_req_event(struct wmi_roam_btm_trigger_data *btm_data,
+cm_roam_btm_req_event(struct wmi_neighbor_report_data *neigh_rpt,
+		      struct wmi_roam_btm_trigger_data *btm_data,
 		      struct wmi_roam_trigger_info *trigger_info,
 		      uint8_t vdev_id, bool is_wtc)
 {

+ 20 - 9
components/umac/mlme/connection_mgr/dispatcher/src/wlan_cm_roam_api.c

@@ -2899,6 +2899,7 @@ cm_roam_scan_ch_list_event_handler(struct cm_roam_scan_ch_resp *data)
 /**
  * cm_roam_stats_get_trigger_detail_str - Return roam trigger string from the
  * enum roam_trigger_reason
+ * @neigh_rpt: Neighbor report/BTM request related data
  * @ptr: Pointer to the roam trigger info
  * @buf: Destination buffer to write the reason string
  * @is_full_scan: Is roam scan partial scan or all channels scan
@@ -2907,7 +2908,8 @@ cm_roam_scan_ch_list_event_handler(struct cm_roam_scan_ch_resp *data)
  * Return: None
  */
 static void
-cm_roam_stats_get_trigger_detail_str(struct wmi_roam_trigger_info *ptr,
+cm_roam_stats_get_trigger_detail_str(struct wmi_neighbor_report_data *neigh_rpt,
+				     struct wmi_roam_trigger_info *ptr,
 				     char *buf, bool is_full_scan,
 				     uint8_t vdev_id)
 {
@@ -2938,7 +2940,8 @@ cm_roam_stats_get_trigger_detail_str(struct wmi_roam_trigger_info *ptr,
 	case ROAM_TRIGGER_REASON_UNIT_TEST:
 		break;
 	case ROAM_TRIGGER_REASON_BTM:
-		cm_roam_btm_req_event(&ptr->btm_trig_data, ptr, vdev_id, false);
+		cm_roam_btm_req_event(neigh_rpt, &ptr->btm_trig_data, ptr,
+				      vdev_id, false);
 		buf_cons = qdf_snprint(
 				temp, buf_left,
 				"Req_mode: %d Disassoc_timer: %d",
@@ -3030,6 +3033,7 @@ cm_roam_stats_get_trigger_detail_str(struct wmi_roam_trigger_info *ptr,
 /**
  * cm_roam_stats_print_trigger_info  - Roam trigger related details
  * @psoc:  Pointer to PSOC object
+ * @neigh_rpt: Neighbor report/BTM request related data
  * @data:  Pointer to the roam trigger data
  * @scan_data: Roam scan data pointer
  * @vdev_id: Vdev ID
@@ -3042,6 +3046,7 @@ cm_roam_stats_get_trigger_detail_str(struct wmi_roam_trigger_info *ptr,
  */
 static void
 cm_roam_stats_print_trigger_info(struct wlan_objmgr_psoc *psoc,
+				 struct wmi_neighbor_report_data *neigh_rpt,
 				 struct wmi_roam_trigger_info *data,
 				 struct wmi_roam_scan_data *scan_data,
 				 uint8_t vdev_id, bool is_full_scan)
@@ -3054,7 +3059,8 @@ cm_roam_stats_print_trigger_info(struct wlan_objmgr_psoc *psoc,
 	if (!buf)
 		return;
 
-	cm_roam_stats_get_trigger_detail_str(data, buf, is_full_scan, vdev_id);
+	cm_roam_stats_get_trigger_detail_str(neigh_rpt, data, buf,
+					     is_full_scan, vdev_id);
 	mlme_get_converted_timestamp(data->timestamp, time);
 
 	/* Update roam trigger info to userspace */
@@ -3604,7 +3610,8 @@ cm_roam_handle_btm_stats(struct wlan_objmgr_psoc *psoc,
 	 */
 	if (stats_info->scan[i].present &&
 	    stats_info->scan[i].type == ROAM_STATS_SCAN_TYPE_NO_SCAN) {
-		cm_roam_btm_req_event(&stats_info->trigger[i].btm_trig_data,
+		cm_roam_btm_req_event(&stats_info->data_11kv[i],
+				      &stats_info->trigger[i].btm_trig_data,
 				      &stats_info->trigger[i],
 				      stats_info->vdev_id, false);
 		log_btm_frames_only = true;
@@ -3616,7 +3623,9 @@ cm_roam_handle_btm_stats(struct wlan_objmgr_psoc *psoc,
 				    stats_info->scan[i].type;
 
 		/* BTM request diag log event will be sent from inside below */
-		cm_roam_stats_print_trigger_info(psoc, &stats_info->trigger[i],
+		cm_roam_stats_print_trigger_info(psoc,
+						 &stats_info->data_11kv[i],
+						 &stats_info->trigger[i],
 						 &stats_info->scan[i],
 						 stats_info->vdev_id,
 						 is_full_scan);
@@ -4384,7 +4393,8 @@ cm_roam_stats_event_handler(struct wlan_objmgr_psoc *psoc,
 			}
 
 			cm_roam_stats_print_trigger_info(
-					psoc, &stats_info->trigger[i],
+					psoc, &stats_info->data_11kv[i],
+					&stats_info->trigger[i],
 					&stats_info->scan[i],
 					stats_info->vdev_id, is_full_scan);
 
@@ -4469,9 +4479,10 @@ cm_roam_stats_event_handler(struct wlan_objmgr_psoc *psoc,
 			    ROAM_TRIGGER_REASON_WTC_BTM)
 				is_wtc = true;
 
-			cm_roam_btm_req_event(&stats_info->trigger[0].btm_trig_data,
-					      &stats_info->trigger[0],
-					      stats_info->vdev_id, is_wtc);
+			cm_roam_btm_req_event(&stats_info->data_11kv[0],
+					&stats_info->trigger[0].btm_trig_data,
+					&stats_info->trigger[0],
+					stats_info->vdev_id, is_wtc);
 		}
 
 		if (stats_info->scan[0].present &&