qcacld-3.0: Send correct value of roam result info

As per requirement send ROAM or NO ROAM connectivity
log event to upper layer based on below conditions:
Print ROAM If,
1.FW sends res->status == 0 on successful roaming to AP
2.FW sends res->status == 1 if FW triggered roaming but
  failed due to reason other than below reason

Print NO_ROAM for below reasons where either candidate
AP is not found or we roamed to current AP itself
irrespective of the res->status value:
1.ROAM_FAIL_REASON_NO_AP_FOUND
2.ROAM_FAIL_REASON_NO_CAND_AP_FOUND
3.ROAM_FAIL_REASON_NO_AP_FOUND_AND_FINAL_BMISS_SENT
4.ROAM_FAIL_REASON_NO_CAND_AP_FOUND_AND_FINAL_BMISS_SENT
5.ROAM_FAIL_REASON_CURR_AP_STILL_OK

Change-Id: Ia2e07dcdacb78a22af9ae6b66c18c2c716161bf3
CRs-Fixed: 3653702
This commit is contained in:
Abhinav Kumar
2023-11-06 02:38:07 -08:00
committed by Ravindra Konda
parent dda17ba73b
commit 6d594c749b

View File

@@ -6460,7 +6460,6 @@ void cm_roam_result_info_event(struct wlan_objmgr_psoc *psoc,
{ {
uint8_t i; uint8_t i;
struct qdf_mac_addr bssid = {0}; struct qdf_mac_addr bssid = {0};
bool ap_found_in_roam_scan = false;
bool roam_abort = (res->fail_reason == ROAM_FAIL_REASON_SYNC || bool roam_abort = (res->fail_reason == ROAM_FAIL_REASON_SYNC ||
res->fail_reason == ROAM_FAIL_REASON_DISCONNECT || res->fail_reason == ROAM_FAIL_REASON_DISCONNECT ||
res->fail_reason == ROAM_FAIL_REASON_HOST || res->fail_reason == ROAM_FAIL_REASON_HOST ||
@@ -6479,30 +6478,33 @@ void cm_roam_result_info_event(struct wlan_objmgr_psoc *psoc,
populate_diag_cmn(&wlan_diag_event.diag_cmn, vdev_id, populate_diag_cmn(&wlan_diag_event.diag_cmn, vdev_id,
(uint64_t)res->timestamp, NULL); (uint64_t)res->timestamp, NULL);
for (i = 0; i < scan_data->num_ap && scan_data->present; i++) {
if (i >= MAX_ROAM_CANDIDATE_AP)
break;
if (scan_data->ap[i].type == WLAN_ROAM_SCAN_ROAMED_AP ||
scan_data->ap[i].type == WLAN_ROAM_SCAN_CANDIDATE_AP) {
ap_found_in_roam_scan = true;
break;
}
}
wlan_diag_event.version = DIAG_ROAM_RESULT_VERSION; wlan_diag_event.version = DIAG_ROAM_RESULT_VERSION;
wlan_diag_event.roam_fail_reason = res->fail_reason; wlan_diag_event.roam_fail_reason = res->fail_reason;
/* /*
* Print ROAM if: * Print ROAM if,
* 1. Roaming is successful to AP * 1. FW sends res->status == 0 on successful roaming to AP
* 2. Atleast one candidate AP found during scan * 2. FW sends res->status == 1 if FW triggered roaming but failed due
* to the reason other than below reasons
* *
* Print NO_ROAM only if: * Print NO_ROAM for below reasons where either candidate AP is not
* 1. No candidate AP found(even though other APs are found in scan) * found or we roamed to current AP itself irrespective of the
* res->status value:
* ROAM_FAIL_REASON_NO_AP_FOUND
* ROAM_FAIL_REASON_NO_CAND_AP_FOUND
* ROAM_FAIL_REASON_NO_AP_FOUND_AND_FINAL_BMISS_SENT
* ROAM_FAIL_REASON_NO_CAND_AP_FOUND_AND_FINAL_BMISS_SENT
* ROAM_FAIL_REASON_CURR_AP_STILL_OK
*/ */
wlan_diag_event.is_roam_successful = (res->status == 0) || wlan_diag_event.is_roam_successful = true;
(ap_found_in_roam_scan &&
res->fail_reason != ROAM_FAIL_REASON_NO_CAND_AP_FOUND); if (res->fail_reason == ROAM_FAIL_REASON_NO_AP_FOUND ||
res->fail_reason == ROAM_FAIL_REASON_NO_CAND_AP_FOUND ||
res->fail_reason == ROAM_FAIL_REASON_CURR_AP_STILL_OK ||
res->fail_reason ==
ROAM_FAIL_REASON_NO_CAND_AP_FOUND_AND_FINAL_BMISS_SENT ||
res->fail_reason ==
ROAM_FAIL_REASON_NO_AP_FOUND_AND_FINAL_BMISS_SENT)
wlan_diag_event.is_roam_successful = false;
for (i = 0; i < scan_data->num_ap; i++) { for (i = 0; i < scan_data->num_ap; i++) {
if (i >= MAX_ROAM_CANDIDATE_AP) if (i >= MAX_ROAM_CANDIDATE_AP)