Bläddra i källkod

qcacld-3.0: Use object manager to fetch vdev info

Currently host driver uses wma->interfaces to fetch vdev
info.
This change is to use object manager instead of wma interface
to check vdev info.

Change-Id: I356e002ba6b43382e96c8e2da6d433df68de603b
CRs-Fixed: 3525139
Aasir Rasheed 1 år sedan
förälder
incheckning
ffc2dc0ba8
1 ändrade filer med 30 tillägg och 8 borttagningar
  1. 30 8
      core/wma/src/wma_features.c

+ 30 - 8
core/wma/src/wma_features.c

@@ -1474,9 +1474,11 @@ int wma_csa_offload_handler(void *handle, uint8_t *event, uint32_t len)
 	struct csa_offload_params *csa_offload_event;
 	struct ieee80211_extendedchannelswitch_ie *xcsa_ie;
 	struct ieee80211_ie_wide_bw_switch *wb_ie;
-	struct wma_txrx_node *intr = wma->interfaces;
+	struct wlan_objmgr_peer *peer;
+	struct wlan_objmgr_vdev *vdev;
 	QDF_STATUS status;
 	uint8_t tlv_len;
+	struct wlan_channel *chan;
 
 	param_buf = (WMI_CSA_HANDLING_EVENTID_param_tlvs *) event;
 
@@ -1488,20 +1490,31 @@ int wma_csa_offload_handler(void *handle, uint8_t *event, uint32_t len)
 	csa_event = param_buf->fixed_param;
 	WMI_MAC_ADDR_TO_CHAR_ARRAY(&csa_event->i_addr2, &bssid[0]);
 
-	if (wma_find_vdev_id_by_bssid(wma, bssid, &vdev_id)) {
-		wma_err("Invalid bssid received");
+	peer = wlan_objmgr_get_peer_by_mac(wma->psoc,
+					   bssid, WLAN_LEGACY_WMA_ID);
+	if (!peer) {
+		wma_err("Invalid peer");
 		return -EINVAL;
 	}
 
-	csa_offload_event = qdf_mem_malloc(sizeof(*csa_offload_event));
-	if (!csa_offload_event)
+	vdev_id = wlan_vdev_get_id(wlan_peer_get_vdev(peer));
+	wlan_objmgr_peer_release_ref(peer, WLAN_LEGACY_WMA_ID);
+	vdev = wlan_objmgr_get_vdev_by_id_from_psoc(wma->psoc,
+						    vdev_id,
+						    WLAN_LEGACY_WMA_ID);
+	if (!vdev)
 		return -EINVAL;
 
-	if (intr[vdev_id].vdev &&
-	    wlan_cm_is_vdev_roaming(intr[vdev_id].vdev)) {
+	csa_offload_event = qdf_mem_malloc(sizeof(*csa_offload_event));
+	if (!csa_offload_event) {
+		wlan_objmgr_vdev_release_ref(vdev, WLAN_LEGACY_WMA_ID);
+			return -EINVAL;
+	}
+	if (wlan_cm_is_vdev_roaming(vdev)) {
 		wma_err("Roaming in progress for vdev %d, ignore csa event",
 			 vdev_id);
 		qdf_mem_free(csa_offload_event);
+		wlan_objmgr_vdev_release_ref(vdev, WLAN_LEGACY_WMA_ID);
 		return -EINVAL;
 	}
 
@@ -1538,6 +1551,7 @@ int wma_csa_offload_handler(void *handle, uint8_t *event, uint32_t len)
 	} else {
 		wma_err("CSA Event error: No CSA IE present");
 		qdf_mem_free(csa_offload_event);
+		wlan_objmgr_vdev_release_ref(vdev, WLAN_LEGACY_WMA_ID);
 		return -EINVAL;
 	}
 
@@ -1601,7 +1615,15 @@ got_chan:
 		 csa_offload_event->new_ch_freq_seg2,
 		 csa_offload_event->new_op_class);
 
-	cur_chan = cds_freq_to_chan(intr[vdev_id].ch_freq);
+	chan = wlan_vdev_get_active_channel(vdev);
+	if (!chan) {
+		wmi_err("failed to get active channel");
+		wlan_objmgr_vdev_release_ref(vdev, WLAN_LEGACY_WMA_ID);
+		qdf_mem_free(csa_offload_event);
+		return false;
+	}
+	wlan_objmgr_vdev_release_ref(vdev, WLAN_LEGACY_WMA_ID);
+	cur_chan = cds_freq_to_chan(chan->ch_freq);
 	/*
 	 * basic sanity check: requested channel should not be 0
 	 * and equal to home channel