Explorar o código

qcacld-3.0: Fix roam failure for no scan entry

After increased wmi len, bcn frames go to roam sync event instead of roam
sync frame event, add scan entry logic of roam sync frame event handler is
missed in roam sync event handler, if old scan entry for roamed bssid aged
out, roam sync fails for no scan entry found.

To fix it, add scan entry logic in roam sync event handler too.

Change-Id: Ifb2d3323256b42a094a2871279353273275fbddf
CRs-Fixed: 3848978
Jianmin Zhu hai 1 ano
pai
achega
894c8b5e07
Modificáronse 1 ficheiros con 11 adicións e 0 borrados
  1. 11 0
      components/wmi/src/wmi_unified_roam_tlv.c

+ 11 - 0
components/wmi/src/wmi_unified_roam_tlv.c

@@ -2353,6 +2353,7 @@ wmi_fill_roam_sync_buffer(wmi_unified_t wmi_handle,
 	QDF_STATUS status = QDF_STATUS_E_FAILURE;
 	uint8_t kck_len;
 	uint8_t kek_len;
+	struct roam_scan_candidate_frame roam_candidate = {0};
 
 	synch_event = param_buf->fixed_param;
 	roam_sync_ind->roamed_vdev_id = synch_event->vdev_id;
@@ -2403,6 +2404,16 @@ wmi_fill_roam_sync_buffer(wmi_unified_t wmi_handle,
 		wmi_fill_data_synch_frame_event(rso_cfg, roam_sync_ind);
 	} else {
 		wmi_fill_data_synch_event(roam_sync_ind, param_buf);
+
+		roam_candidate.vdev_id = roam_sync_ind->roamed_vdev_id;
+		roam_candidate.frame_length =
+				roam_sync_ind->beacon_probe_resp_length;
+		roam_candidate.frame = (uint8_t *)roam_sync_ind +
+				       roam_sync_ind->beacon_probe_resp_offset;
+		roam_candidate.rssi = roam_sync_ind->rssi;
+		roam_candidate.roam_offload_candidate_frm = false;
+		wlan_cm_add_all_link_probe_rsp_to_scan_db(wlan_vdev_get_psoc(vdev),
+							  &roam_candidate);
 	}
 	chan = param_buf->chan;
 	if (chan) {