Преглед на файлове

qcacld-3.0: Send STA_INFO connectivity event after roaming

Driver sends STA_INFO event with self mac addresses for each link
before initial connection. With the new requirement to send the
STA_INFO after every roam to detect the change in mac address, add
the sta info call after reassoc response is received and roaming
status is successful.

CRs-Fixed: 3653662
Change-Id: I18ecbdfea47fb3524154f799ea0c4777276cb34a
Pragaspathi Thilagaraj преди 1 година
родител
ревизия
b74100cbb7

+ 7 - 3
components/cmn_services/logging/inc/wlan_connectivity_logging.h

@@ -1428,10 +1428,13 @@ static inline void wlan_connectivity_logging_stop(void)
  * wlan_connectivity_sta_info_event() - APi to send STA info event
  * @psoc: Pointer to global psoc object
  * @vdev_id: Vdev id
+ * @is_roam: Is sta info event for roaming stats
+ *
+ * Return: None
  */
 void
 wlan_connectivity_sta_info_event(struct wlan_objmgr_psoc *psoc,
-				 uint8_t vdev_id);
+				 uint8_t vdev_id, bool is_roam);
 
 /**
  * wlan_connectivity_connecting_event() - API to log connecting event
@@ -1536,10 +1539,11 @@ wlan_populate_vsie(struct wlan_objmgr_vdev *vdev,
  * wlan_connectivity_sta_info_event() - APi to send STA info event
  * @psoc: Pointer to global psoc object
  * @vdev_id: Vdev id
+ * @is_roam: Is sta info event for roaming stats
  */
 void
 wlan_connectivity_sta_info_event(struct wlan_objmgr_psoc *psoc,
-				 uint8_t vdev_id);
+				 uint8_t vdev_id, bool is_roam);
 
 /**
  * wlan_convert_freq_to_diag_band() - API to convert frequency to band value
@@ -1640,7 +1644,7 @@ wlan_connectivity_mlo_reconfig_event(struct wlan_objmgr_vdev *vdev)
 
 static inline void
 wlan_connectivity_sta_info_event(struct wlan_objmgr_psoc *psoc,
-				 uint8_t vdev_id)
+				 uint8_t vdev_id, bool is_roam)
 {}
 
 static inline void

+ 3 - 2
components/cmn_services/logging/src/wlan_connectivity_logging.c

@@ -847,7 +847,8 @@ wlan_cdp_set_peer_freq(struct wlan_objmgr_psoc *psoc, uint8_t *peer_mac,
 }
 
 void
-wlan_connectivity_sta_info_event(struct wlan_objmgr_psoc *psoc, uint8_t vdev_id)
+wlan_connectivity_sta_info_event(struct wlan_objmgr_psoc *psoc, uint8_t vdev_id,
+				 bool is_roam)
 {
 	QDF_STATUS status;
 	struct wlan_objmgr_vdev *vdev = NULL;
@@ -867,7 +868,7 @@ wlan_connectivity_sta_info_event(struct wlan_objmgr_psoc *psoc, uint8_t vdev_id)
 	      wlan_vdev_mlme_is_mlo_link_vdev(vdev))))
 		goto out;
 
-	if (!wlan_cm_is_first_candidate_connect_attempt(vdev))
+	if (!is_roam && !wlan_cm_is_first_candidate_connect_attempt(vdev))
 		goto out;
 
 	wlan_diag_event.diag_cmn.timestamp_us = qdf_get_time_of_the_day_us();

+ 12 - 2
components/umac/mlme/connection_mgr/core/src/wlan_cm_roam_offload.c

@@ -7057,7 +7057,8 @@ wlan_convert_bitmap_to_band(uint8_t bitmap)
 QDF_STATUS
 cm_roam_mgmt_frame_event(struct wlan_objmgr_vdev *vdev,
 			 struct roam_frame_info *frame_data,
-			 struct wmi_roam_scan_data *scan_data)
+			 struct wmi_roam_scan_data *scan_data,
+			 struct wmi_roam_result *result)
 {
 	QDF_STATUS status = QDF_STATUS_SUCCESS;
 	uint8_t i;
@@ -7137,9 +7138,18 @@ cm_roam_mgmt_frame_event(struct wlan_objmgr_vdev *vdev,
 
 	WLAN_HOST_DIAG_EVENT_REPORT(&wlan_diag_event, diag_event);
 	if (wlan_diag_event.subtype == WLAN_CONN_DIAG_REASSOC_RESP_EVENT ||
-	    wlan_diag_event.subtype == WLAN_CONN_DIAG_ASSOC_RESP_EVENT)
+	    wlan_diag_event.subtype == WLAN_CONN_DIAG_ASSOC_RESP_EVENT) {
 		wlan_connectivity_mlo_setup_event(vdev);
 
+		/*
+		 * Send STA info event when roaming is successful
+		 */
+		if (result->present && !result->status)
+			wlan_connectivity_sta_info_event(wlan_vdev_get_psoc(vdev),
+							 wlan_vdev_get_id(vdev),
+							 true);
+	}
+
 	return status;
 }
 

+ 5 - 2
components/umac/mlme/connection_mgr/core/src/wlan_cm_roam_offload.h

@@ -591,13 +591,15 @@ cm_handle_mlo_rso_state_change(struct wlan_objmgr_pdev *pdev, uint8_t *vdev_id,
  * @vdev: vdev pointer
  * @frame_data: frame_data
  * @scan_data: Roam scan data
+ * @result: Roam result
  *
  * Return: QDF_STATUS
  */
 QDF_STATUS
 cm_roam_mgmt_frame_event(struct wlan_objmgr_vdev *vdev,
 			 struct roam_frame_info *frame_data,
-			 struct wmi_roam_scan_data *scan_data);
+			 struct wmi_roam_scan_data *scan_data,
+			 struct wmi_roam_result *result);
 
 /**
  * cm_roam_btm_req_event  - Send BTM request related logging event
@@ -675,7 +677,8 @@ cm_roam_neigh_rpt_resp_event(struct wmi_neighbor_report_data *neigh_rpt,
 static inline QDF_STATUS
 cm_roam_mgmt_frame_event(struct wlan_objmgr_vdev *vdev,
 			 struct roam_frame_info *frame_data,
-			 struct wmi_roam_scan_data *scan_data)
+			 struct wmi_roam_scan_data *scan_data,
+			 struct wmi_roam_result *result)
 {
 	return QDF_STATUS_E_NOSUPPORT;
 }

+ 7 - 4
components/umac/mlme/connection_mgr/dispatcher/src/wlan_cm_roam_api.c

@@ -3434,7 +3434,8 @@ static void
 cm_roam_print_frame_info(struct wlan_objmgr_psoc *psoc,
 			 struct wlan_objmgr_vdev *vdev,
 			 struct roam_frame_stats *frame_data,
-			 struct wmi_roam_scan_data *scan_data)
+			 struct wmi_roam_scan_data *scan_data,
+			 struct wmi_roam_result *result)
 {
 	struct roam_frame_info *frame_info;
 	char time[TIME_STRING_LEN];
@@ -3478,7 +3479,7 @@ cm_roam_print_frame_info(struct wlan_objmgr_psoc *psoc,
 				       frame_info->status_code,
 				       frame_info->seq_num);
 
-		cm_roam_mgmt_frame_event(vdev, frame_info, scan_data);
+		cm_roam_mgmt_frame_event(vdev, frame_info, scan_data, result);
 	}
 }
 
@@ -3620,7 +3621,8 @@ cm_roam_handle_btm_stats(struct wlan_objmgr_psoc *psoc,
 	if (stats_info->frame_stats[i].num_frame)
 		cm_roam_print_frame_info(psoc, vdev,
 					 &stats_info->frame_stats[i],
-					 &stats_info->scan[i]);
+					 &stats_info->scan[i],
+					 &stats_info->result[i]);
 
 log_btm_frames_only:
 
@@ -4387,7 +4389,8 @@ cm_roam_stats_event_handler(struct wlan_objmgr_psoc *psoc,
 			cm_roam_print_frame_info(psoc,
 						 vdev,
 						 &stats_info->frame_stats[i],
-						 &stats_info->scan[i]);
+						 &stats_info->scan[i],
+						 &stats_info->result[i]);
 
 		wlan_cm_update_roam_stats_info(psoc, stats_info, i);
 

+ 2 - 1
core/mac/src/pe/lim/lim_process_mlm_rsp_messages.c

@@ -307,7 +307,8 @@ void lim_process_mlm_join_cnf(struct mac_context *mac_ctx,
 		return;
 	}
 
-	wlan_connectivity_sta_info_event(mac_ctx->psoc, session_entry->vdev_id);
+	wlan_connectivity_sta_info_event(mac_ctx->psoc, session_entry->vdev_id,
+					 false);
 
 	if (session_entry->limSmeState != eLIM_SME_WT_JOIN_STATE) {
 		pe_err("received unexpected MLM_JOIN_CNF in state %X",