Kaynağa Gözat

qcacld-3.0: Modify wlan_hdd_get_adapter_from_vdev() API

To get the adapter, wlan_hdd_get_adapter_from_vdev() calls
hdd_get_link_info_by_vdev() which will return link info.

As vdev is moved to per link data structure, modify the API
prototype to return link info pointer and rename as
wlan_hdd_get_link_info_from_vdev().
Callers can get adapter in the link info structure.

Change-Id: I579796ab395515bb777f3204528287b4595c60a7
CRs-Fixed: 3451442
Vinod Kumar Pirla 2 yıl önce
ebeveyn
işleme
2070480e26

+ 7 - 5
core/hdd/inc/wlan_hdd_main.h

@@ -4050,17 +4050,19 @@ int wlan_hdd_send_mcc_vdev_quota(struct hdd_adapter *adapter, int sval);
 int wlan_hdd_send_mcc_latency(struct hdd_adapter *adapter, int sval);
 
 /**
- * wlan_hdd_get_adapter_from_vdev()- Get adapter from vdev id
+ * wlan_hdd_get_link_info_from_vdev()- Get link info from vdev id
  * and PSOC object data
  * @psoc: Psoc object data
  * @vdev_id: vdev id
  *
- * Get adapter from vdev id and PSOC object data
+ * Get link info from vdev id and PSOC object data
  *
- * Return: adapter pointer
+ * Return: link info pointer
  */
-struct hdd_adapter *wlan_hdd_get_adapter_from_vdev(struct wlan_objmgr_psoc
-					*psoc, uint8_t vdev_id);
+struct wlan_hdd_link_info *
+wlan_hdd_get_link_info_from_vdev(struct wlan_objmgr_psoc *psoc,
+				 uint8_t vdev_id);
+
 /**
  * hdd_unregister_notifiers()- unregister kernel notifiers
  * @hdd_ctx: Hdd Context

+ 7 - 5
core/hdd/src/wlan_hdd_btc_chain_mode.c

@@ -40,6 +40,7 @@ wlan_hdd_btc_chain_mode_handler(struct wlan_objmgr_vdev *vdev)
 	uint8_t vdev_id;
 	uint32_t freq;
 	struct wlan_objmgr_psoc *psoc;
+	struct wlan_hdd_link_info *link_info;
 
 	if (!vdev) {
 		hdd_err("NULL vdev");
@@ -56,12 +57,13 @@ wlan_hdd_btc_chain_mode_handler(struct wlan_objmgr_vdev *vdev)
 		return QDF_STATUS_E_INVAL;
 	}
 
-	adapter = wlan_hdd_get_adapter_from_vdev(psoc, vdev_id);
-	if (!adapter) {
-		hdd_err("NULL adapter");
+	link_info = wlan_hdd_get_link_info_from_vdev(psoc, vdev_id);
+	if (!link_info) {
+		hdd_err("Invalid vdev");
 		return QDF_STATUS_E_INVAL;
 	}
 
+	adapter =  link_info->adapter;
 	status = ucfg_coex_psoc_get_btc_chain_mode(psoc, &mode);
 	if (QDF_IS_STATUS_ERROR(status)) {
 		hdd_err("failed to get cur BTC chain mode, status %d", status);
@@ -78,7 +80,7 @@ wlan_hdd_btc_chain_mode_handler(struct wlan_objmgr_vdev *vdev)
 		mode == WLAN_COEX_BTC_CHAIN_MODE_HYBRID) ? 1 : 2);
 
 	hdd_debug("update nss to %d for vdev %d, device mode %d",
-		  nss, adapter->deflink->vdev_id, adapter->device_mode);
+		  nss, link_info->vdev_id, adapter->device_mode);
 	band = NSS_CHAINS_BAND_2GHZ;
 	sme_update_nss_in_mlme_cfg(mac_handle, nss, nss,
 				   adapter->device_mode, band);
@@ -90,7 +92,7 @@ wlan_hdd_btc_chain_mode_handler(struct wlan_objmgr_vdev *vdev)
 		wlan_objmgr_vdev_release_ref(vdev, WLAN_OSIF_ID);
 	}
 
-	sme_update_he_cap_nss(mac_handle, adapter->deflink->vdev_id, nss);
+	sme_update_he_cap_nss(mac_handle, link_info->vdev_id, nss);
 	freq = hdd_get_adapter_home_channel(adapter);
 
 	/*

+ 61 - 60
core/hdd/src/wlan_hdd_hostapd.c

@@ -3677,38 +3677,36 @@ QDF_STATUS hdd_sap_restart_chan_switch_cb(struct wlan_objmgr_psoc *psoc,
 					  uint8_t vdev_id, uint32_t ch_freq,
 					  uint32_t channel_bw, bool forced)
 {
-	struct hdd_adapter *ap_adapter =
-		wlan_hdd_get_adapter_from_vdev(psoc, vdev_id);
+	struct wlan_hdd_link_info *link_info;
 
-	if (!ap_adapter) {
-		hdd_err("Adapter is NULL");
+	link_info = wlan_hdd_get_link_info_from_vdev(psoc, vdev_id);
+	if (!link_info) {
+		hdd_err("Invalid vdev");
 		return QDF_STATUS_E_INVAL;
 	}
 
-	return hdd_sap_restart_with_channel_switch(psoc,
-						   ap_adapter,
-						   ch_freq,
-						   channel_bw, forced);
+	return hdd_sap_restart_with_channel_switch(psoc, link_info->adapter,
+						   ch_freq, channel_bw, forced);
 }
 
 QDF_STATUS wlan_hdd_check_cc_intf_cb(struct wlan_objmgr_psoc *psoc,
 				     uint8_t vdev_id, uint32_t *ch_freq)
 {
-	struct hdd_adapter *ap_adapter;
+	struct wlan_hdd_link_info *link_info;
 	struct sap_context *sap_context;
 
-	ap_adapter = wlan_hdd_get_adapter_from_vdev(psoc, vdev_id);
-	if (!ap_adapter) {
-		hdd_err("ap_adapter is NULL");
+	link_info = wlan_hdd_get_link_info_from_vdev(psoc, vdev_id);
+	if (!link_info) {
+		hdd_err("Invalid vdev");
 		return QDF_STATUS_E_FAILURE;
 	}
 
-	if (!test_bit(SOFTAP_BSS_STARTED, &ap_adapter->event_flags)) {
+	if (!test_bit(SOFTAP_BSS_STARTED, &link_info->adapter->event_flags)) {
 		hdd_err("SOFTAP_BSS_STARTED not set");
 		return QDF_STATUS_E_FAILURE;
 	}
 
-	sap_context = WLAN_HDD_GET_SAP_CTX_PTR(ap_adapter->deflink);
+	sap_context = WLAN_HDD_GET_SAP_CTX_PTR(link_info);
 	if (!sap_context) {
 		hdd_err("sap_context is null");
 		return QDF_STATUS_E_FAILURE;
@@ -3728,31 +3726,33 @@ QDF_STATUS wlan_hdd_check_cc_intf_cb(struct wlan_objmgr_psoc *psoc,
 void wlan_hdd_set_sap_csa_reason(struct wlan_objmgr_psoc *psoc, uint8_t vdev_id,
 				 uint8_t reason)
 {
+	struct wlan_hdd_link_info *link_info;
 	struct sap_context *sap_ctx;
-	struct hdd_adapter *ap_adapter = wlan_hdd_get_adapter_from_vdev(
-				psoc, vdev_id);
-	if (!ap_adapter) {
-		hdd_err("ap adapter is NULL");
+
+	link_info = wlan_hdd_get_link_info_from_vdev(psoc, vdev_id);
+	if (!link_info) {
+		hdd_err("Invalid vdev");
 		return;
 	}
-	sap_ctx = WLAN_HDD_GET_SAP_CTX_PTR(ap_adapter->deflink);
+
+	sap_ctx = WLAN_HDD_GET_SAP_CTX_PTR(link_info);
 	if (sap_ctx)
 		sap_ctx->csa_reason = reason;
 	hdd_nofl_debug("set csa reason %d %s vdev %d",
 		       reason, sap_get_csa_reason_str(reason), vdev_id);
 }
 
-QDF_STATUS wlan_hdd_get_channel_for_sap_restart(
-				struct wlan_objmgr_psoc *psoc,
-				uint8_t vdev_id, uint32_t *ch_freq)
+QDF_STATUS wlan_hdd_get_channel_for_sap_restart(struct wlan_objmgr_psoc *psoc,
+						uint8_t vdev_id,
+						uint32_t *ch_freq)
 {
 	mac_handle_t mac_handle;
 	struct hdd_ap_ctx *hdd_ap_ctx;
 	struct hdd_context *hdd_ctx;
 	uint8_t mcc_to_scc_switch = 0;
 	struct ch_params ch_params = {0};
-	struct hdd_adapter *ap_adapter = wlan_hdd_get_adapter_from_vdev(
-					psoc, vdev_id);
+	struct hdd_adapter *ap_adapter;
+	struct wlan_hdd_link_info *link_info;
 	uint32_t sap_ch_freq, intf_ch_freq, temp_ch_freq;
 	struct sap_context *sap_context;
 	enum sap_csa_reason_code csa_reason =
@@ -3760,19 +3760,21 @@ QDF_STATUS wlan_hdd_get_channel_for_sap_restart(
 	QDF_STATUS status;
 	bool use_sap_original_bw = false;
 
-	if (!ap_adapter) {
-		hdd_err("ap_adapter is NULL");
+	if (!ch_freq) {
+		hdd_err("Null parameters");
 		return QDF_STATUS_E_FAILURE;
 	}
 
-	hdd_ctx = WLAN_HDD_GET_CTX(ap_adapter);
-	if (!hdd_ctx) {
-		hdd_err("hdd_ctx is NULL");
+	link_info = wlan_hdd_get_link_info_from_vdev(psoc, vdev_id);
+	if (!link_info) {
+		hdd_err("Invalid vdev");
 		return QDF_STATUS_E_FAILURE;
 	}
 
-	if (!ch_freq) {
-		hdd_err("Null parameters");
+	ap_adapter = link_info->adapter;
+	hdd_ctx = WLAN_HDD_GET_CTX(ap_adapter);
+	if (!hdd_ctx) {
+		hdd_err("hdd_ctx is NULL");
 		return QDF_STATUS_E_FAILURE;
 	}
 
@@ -3781,7 +3783,7 @@ QDF_STATUS wlan_hdd_get_channel_for_sap_restart(
 		return QDF_STATUS_E_FAILURE;
 	}
 
-	hdd_ap_ctx = WLAN_HDD_GET_AP_CTX_PTR(ap_adapter->deflink);
+	hdd_ap_ctx = WLAN_HDD_GET_AP_CTX_PTR(link_info);
 	mac_handle = hdd_ctx->mac_handle;
 	if (!mac_handle) {
 		hdd_err("mac_handle is NULL");
@@ -3815,7 +3817,7 @@ QDF_STATUS wlan_hdd_get_channel_for_sap_restart(
 	 */
 	if (policy_mgr_is_sap_restart_required_after_sta_disconnect(
 	    psoc, vdev_id, &intf_ch_freq,
-	    !!ap_adapter->deflink->session.ap.sap_config.acs_cfg.acs_mode)) {
+	    !!link_info->session.ap.sap_config.acs_cfg.acs_mode)) {
 		hdd_debug("Move the sap (vdev %d) to user configured channel %u",
 			  vdev_id, intf_ch_freq);
 		goto sap_restart;
@@ -3921,26 +3923,24 @@ QDF_STATUS
 wlan_get_sap_acs_band(struct wlan_objmgr_psoc *psoc, uint8_t vdev_id,
 		      uint32_t *acs_band)
 {
-	struct hdd_adapter *ap_adapter = wlan_hdd_get_adapter_from_vdev(psoc,
-								vdev_id);
+	struct wlan_hdd_link_info *link_info;
 	struct sap_config *sap_config;
 
-	if (!ap_adapter || (ap_adapter->device_mode != QDF_SAP_MODE &&
-			    ap_adapter->device_mode != QDF_P2P_GO_MODE)) {
-		hdd_err("invalid adapter");
+	link_info = wlan_hdd_get_link_info_from_vdev(psoc, vdev_id);
+	if (!link_info || (link_info->adapter->device_mode != QDF_P2P_GO_MODE &&
+			   link_info->adapter->device_mode != QDF_SAP_MODE)) {
+		hdd_err("Invalid vdev or device mode");
 		return QDF_STATUS_E_FAILURE;
 	}
 	/*
 	 * If acs mode is false, that means acs is disabled and acs band can be
 	 * QCA_ACS_MODE_IEEE80211ANY
 	 */
-	sap_config = &ap_adapter->deflink->session.ap.sap_config;
-	if (sap_config->acs_cfg.acs_mode == false) {
+	sap_config = &link_info->session.ap.sap_config;
+	if (!sap_config->acs_cfg.acs_mode)
 		*acs_band = QCA_ACS_MODE_IEEE80211ANY;
-		return QDF_STATUS_SUCCESS;
-	}
-
-	*acs_band = sap_config->acs_cfg.band;
+	else
+		*acs_band = sap_config->acs_cfg.band;
 
 	return QDF_STATUS_SUCCESS;
 }
@@ -3953,15 +3953,15 @@ wlan_get_ap_prefer_conc_ch_params(
 {
 	struct hdd_ap_ctx *hdd_ap_ctx;
 	struct sap_context *sap_context;
-	struct hdd_adapter *ap_adapter = wlan_hdd_get_adapter_from_vdev(
-					psoc, vdev_id);
+	struct wlan_hdd_link_info *link_info;
 
-	if (!ap_adapter || (ap_adapter->device_mode != QDF_SAP_MODE &&
-			    ap_adapter->device_mode != QDF_P2P_GO_MODE)) {
-		hdd_err("invalid adapter");
+	link_info = wlan_hdd_get_link_info_from_vdev(psoc, vdev_id);
+	if (!link_info || (link_info->adapter->device_mode != QDF_P2P_GO_MODE &&
+			   link_info->adapter->device_mode != QDF_SAP_MODE)) {
+		hdd_err("Invalid vdev or device mode");
 		return QDF_STATUS_E_FAILURE;
 	}
-	hdd_ap_ctx = WLAN_HDD_GET_AP_CTX_PTR(ap_adapter->deflink);
+	hdd_ap_ctx = WLAN_HDD_GET_AP_CTX_PTR(link_info);
 	sap_context = hdd_ap_ctx->sap_context;
 	if (!sap_context) {
 		hdd_err("sap_context is null");
@@ -3986,6 +3986,7 @@ uint32_t hdd_get_ap_6ghz_capable(struct wlan_objmgr_psoc *psoc, uint8_t vdev_id)
 	struct wlan_objmgr_vdev *vdev;
 	int32_t keymgmt;
 	struct hdd_adapter *ap_adapter;
+	struct wlan_hdd_link_info *link_info;
 	struct hdd_ap_ctx *ap_ctx;
 	struct sap_context *sap_context;
 	struct sap_config *sap_config;
@@ -4003,14 +4004,14 @@ uint32_t hdd_get_ap_6ghz_capable(struct wlan_objmgr_psoc *psoc, uint8_t vdev_id)
 		return 0;
 	}
 
-	ap_adapter = wlan_hdd_get_adapter_from_vdev(
-					psoc, vdev_id);
-	if (!ap_adapter) {
-		hdd_err("ap_adapter is NULL %d", vdev_id);
+	link_info = wlan_hdd_get_link_info_from_vdev(psoc, vdev_id);
+	if (!link_info) {
+		hdd_err("Invalid vdev %d", vdev_id);
 		wlan_objmgr_vdev_release_ref(vdev, WLAN_HDD_ID_OBJ_MGR);
 		return 0;
 	}
 
+	ap_adapter = link_info->adapter;
 	conn_mode = policy_mgr_convert_device_mode_to_qdf_type(
 			ap_adapter->device_mode);
 	if ((conn_mode != PM_SAP_MODE && conn_mode != PM_P2P_GO_MODE) ||
@@ -4020,7 +4021,7 @@ uint32_t hdd_get_ap_6ghz_capable(struct wlan_objmgr_psoc *psoc, uint8_t vdev_id)
 		return 0;
 	}
 
-	ap_ctx = WLAN_HDD_GET_AP_CTX_PTR(ap_adapter->deflink);
+	ap_ctx = WLAN_HDD_GET_AP_CTX_PTR(link_info);
 	sap_config = &ap_ctx->sap_config;
 	sap_context = ap_ctx->sap_context;
 	if (QDF_IS_STATUS_ERROR(wlansap_context_get(sap_context))) {
@@ -4178,20 +4179,20 @@ void hdd_sap_destroy_ctx_all(struct hdd_context *hdd_ctx, bool is_ssr)
 static void
 hdd_indicate_peers_deleted(struct wlan_objmgr_psoc *psoc, uint8_t vdev_id)
 {
-	struct hdd_adapter *adapter;
+	struct wlan_hdd_link_info *link_info;
 
 	if (!psoc) {
 		hdd_err("psoc obj is NULL");
 		return;
 	}
 
-	adapter = wlan_hdd_get_adapter_from_vdev(psoc, vdev_id);
-	if (hdd_validate_adapter(adapter)) {
-		hdd_err("invalid adapter");
+	link_info = wlan_hdd_get_link_info_from_vdev(psoc, vdev_id);
+	if (!link_info || hdd_validate_adapter(link_info->adapter)) {
+		hdd_err("invalid vdev or adapter");
 		return;
 	}
 
-	hdd_sap_indicate_disconnect_for_sta(adapter);
+	hdd_sap_indicate_disconnect_for_sta(link_info->adapter);
 }
 
 QDF_STATUS hdd_init_ap_mode(struct hdd_adapter *adapter, bool reinit)

+ 23 - 17
core/hdd/src/wlan_hdd_main.c

@@ -492,12 +492,14 @@ QDF_STATUS hdd_common_roam_callback(struct wlan_objmgr_psoc *psoc,
 {
 	struct hdd_context *hdd_ctx;
 	struct hdd_adapter *adapter;
+	struct wlan_hdd_link_info *link_info;
 	QDF_STATUS status = QDF_STATUS_SUCCESS;
 
-	adapter = wlan_hdd_get_adapter_from_vdev(psoc, session_id);
-	if (!adapter)
+	link_info = wlan_hdd_get_link_info_from_vdev(psoc, session_id);
+	if (!link_info)
 		return QDF_STATUS_E_INVAL;
 
+	adapter = link_info->adapter;
 	hdd_ctx = WLAN_HDD_GET_CTX(adapter);
 	if (!hdd_ctx)
 		return QDF_STATUS_E_INVAL;
@@ -512,8 +514,10 @@ QDF_STATUS hdd_common_roam_callback(struct wlan_objmgr_psoc *psoc,
 		break;
 	case QDF_SAP_MODE:
 	case QDF_P2P_GO_MODE:
-		status = wlansap_roam_callback(adapter->deflink->session.ap.sap_context,
-					       roam_info, roam_status, roam_result);
+		status =
+			wlansap_roam_callback(link_info->session.ap.sap_context,
+					      roam_info, roam_status,
+					      roam_result);
 		break;
 	default:
 		hdd_err("Wrong device mode");
@@ -1549,17 +1553,19 @@ static int hdd_update_tdls_config(struct hdd_context *hdd_ctx)
 void hdd_indicate_active_ndp_cnt(struct wlan_objmgr_psoc *psoc,
 				 uint8_t vdev_id, uint8_t cnt)
 {
-	struct hdd_adapter *adapter = NULL;
+	struct wlan_hdd_link_info *link_info;
 
-	adapter = wlan_hdd_get_adapter_from_vdev(psoc, vdev_id);
-	if (adapter && cfg_nan_is_roam_config_disabled(psoc)) {
-		hdd_debug("vdev_id:%d%s active ndp sessions present", vdev_id,
-			  cnt ? "" : " no more");
-		if (!cnt)
-			wlan_hdd_enable_roaming(adapter, RSO_NDP_CON_ON_NDI);
-		else
-			wlan_hdd_disable_roaming(adapter, RSO_NDP_CON_ON_NDI);
-	}
+	link_info = wlan_hdd_get_link_info_from_vdev(psoc, vdev_id);
+	if (!link_info || !cfg_nan_is_roam_config_disabled(psoc))
+		return;
+
+	hdd_debug("vdev_id:%d%s active ndp sessions present", vdev_id,
+		  cnt ? "" : " no more");
+	if (!cnt)
+		wlan_hdd_enable_roaming(link_info->adapter, RSO_NDP_CON_ON_NDI);
+	else
+		wlan_hdd_disable_roaming(link_info->adapter,
+					 RSO_NDP_CON_ON_NDI);
 }
 
 #ifdef WLAN_FEATURE_ROAM_OFFLOAD
@@ -20079,8 +20085,8 @@ int wlan_hdd_send_mcc_latency(struct hdd_adapter *adapter, int set_value)
 	return 0;
 }
 
-struct hdd_adapter *
-wlan_hdd_get_adapter_from_vdev(struct wlan_objmgr_psoc *psoc, uint8_t vdev_id)
+struct wlan_hdd_link_info *
+wlan_hdd_get_link_info_from_vdev(struct wlan_objmgr_psoc *psoc, uint8_t vdev_id)
 {
 	struct hdd_context *hdd_ctx = cds_get_context(QDF_MODULE_ID_HDD);
 	struct wlan_hdd_link_info *link_info;
@@ -20097,7 +20103,7 @@ wlan_hdd_get_adapter_from_vdev(struct wlan_objmgr_psoc *psoc, uint8_t vdev_id)
 		return NULL;
 	}
 
-	return link_info->adapter;
+	return link_info;
 }
 
 int hdd_get_rssi_snr_by_bssid(struct hdd_adapter *adapter, const uint8_t *bssid,

+ 12 - 10
core/hdd/src/wlan_hdd_pre_cac.c

@@ -515,16 +515,18 @@ wlan_hdd_pre_cac_conditional_freq_switch_ind(struct wlan_objmgr_vdev *vdev,
 	struct wlan_objmgr_psoc *psoc = wlan_vdev_get_psoc(vdev);
 	uint8_t vdev_id = vdev->vdev_objmgr.vdev_id;
 	struct hdd_adapter *adapter;
+	struct wlan_hdd_link_info *link_info;
 	struct hdd_ap_ctx *ap_ctx;
 
-	adapter = wlan_hdd_get_adapter_from_vdev(psoc, vdev_id);
-	if (!adapter) {
-		hdd_err("Invalid adapter");
+	link_info = wlan_hdd_get_link_info_from_vdev(psoc, vdev_id);
+	if (!link_info) {
+		hdd_err("Invalid vdev");
 		return;
 	}
 
+	adapter = link_info->adapter;
 	if (completed) {
-		ap_ctx = WLAN_HDD_GET_AP_CTX_PTR(adapter->deflink);
+		ap_ctx = WLAN_HDD_GET_AP_CTX_PTR(link_info);
 		ap_ctx->dfs_cac_block_tx = false;
 		ucfg_ipa_set_dfs_cac_tx(adapter->hdd_ctx->pdev,
 					ap_ctx->dfs_cac_block_tx);
@@ -543,18 +545,18 @@ wlan_hdd_pre_cac_complete(struct wlan_objmgr_psoc *psoc,
 			  uint8_t vdev_id,
 			  QDF_STATUS status)
 {
-	struct hdd_adapter *adapter;
+	struct wlan_hdd_link_info *link_info;
 
-	adapter = wlan_hdd_get_adapter_from_vdev(psoc, vdev_id);
-	if (!adapter) {
-		hdd_err("Invalid adapter vdev %d", vdev_id);
+	link_info = wlan_hdd_get_link_info_from_vdev(psoc, vdev_id);
+	if (!link_info) {
+		hdd_err("Invalid vdev %d", vdev_id);
 		return;
 	}
 
 	if (QDF_IS_STATUS_SUCCESS(status))
-		wlan_hdd_pre_cac_success(adapter);
+		wlan_hdd_pre_cac_success(link_info->adapter);
 	else
-		wlan_hdd_pre_cac_failure(adapter);
+		wlan_hdd_pre_cac_failure(link_info->adapter);
 }
 
 struct osif_pre_cac_legacy_ops pre_cac_legacy_ops = {

+ 11 - 17
core/hdd/src/wlan_hdd_tdls.c

@@ -653,7 +653,7 @@ hdd_check_and_set_tdls_conn_params(struct wlan_objmgr_vdev *vdev)
 {
 	uint8_t vdev_id;
 	enum hdd_dot11_mode selfdot11mode;
-	struct hdd_adapter *adapter;
+	struct wlan_hdd_link_info *link_info;
 	struct wlan_objmgr_psoc *psoc;
 	struct hdd_context *hdd_ctx;
 
@@ -661,18 +661,15 @@ hdd_check_and_set_tdls_conn_params(struct wlan_objmgr_vdev *vdev)
 	if (!psoc)
 		return;
 
-	vdev_id = wlan_vdev_get_id(vdev);
-	adapter = wlan_hdd_get_adapter_from_vdev(psoc, vdev_id);
-	if (!adapter)
-		return;
-
 	/*
 	 * Only need to set this if STA link is in legacy mode
 	 */
-	if (!hdd_is_sta_legacy(adapter->deflink))
+	vdev_id = wlan_vdev_get_id(vdev);
+	link_info = wlan_hdd_get_link_info_from_vdev(psoc, vdev_id);
+	if (!link_info || !hdd_is_sta_legacy(link_info))
 		return;
 
-	hdd_ctx = WLAN_HDD_GET_CTX(adapter);
+	hdd_ctx = WLAN_HDD_GET_CTX(link_info->adapter);
 	if (!hdd_ctx)
 		return;
 
@@ -692,32 +689,29 @@ hdd_check_and_set_tdls_conn_params(struct wlan_objmgr_vdev *vdev)
 	    selfdot11mode == eHDD_DOT11_MODE_11ac ||
 	    selfdot11mode == eHDD_DOT11_MODE_11n ||
 	    selfdot11mode == eHDD_DOT11_MODE_11n_ONLY)
-		hdd_cm_netif_queue_enable(adapter);
+		hdd_cm_netif_queue_enable(link_info->adapter);
 }
 
 void
 hdd_check_and_set_tdls_disconn_params(struct wlan_objmgr_vdev *vdev)
 {
-	struct hdd_adapter *adapter;
 	uint8_t vdev_id;
 	struct wlan_objmgr_psoc *psoc;
+	struct wlan_hdd_link_info *link_info;
 
 	psoc = wlan_vdev_get_psoc(vdev);
 	if (!psoc)
 		return;
 
-	vdev_id = wlan_vdev_get_id(vdev);
-	adapter = wlan_hdd_get_adapter_from_vdev(psoc, vdev_id);
-	if (!adapter)
-		return;
-
 	/*
 	 * Only need to set this if STA link is in legacy mode
 	 */
-	if (!hdd_is_sta_legacy(adapter->deflink))
+	vdev_id = wlan_vdev_get_id(vdev);
+	link_info = wlan_hdd_get_link_info_from_vdev(psoc, vdev_id);
+	if (!link_info || !hdd_is_sta_legacy(link_info))
 		return;
 
-	hdd_cm_netif_queue_enable(adapter);
+	hdd_cm_netif_queue_enable(link_info->adapter);
 }
 
 /**

+ 34 - 31
core/hdd/src/wlan_hdd_twt.c

@@ -1914,14 +1914,16 @@ hdd_twt_add_dialog_comp_cb(struct wlan_objmgr_psoc *psoc,
 			   bool renego_fail)
 {
 	struct hdd_adapter *adapter;
+	struct wlan_hdd_link_info *link_info;
 	uint8_t vdev_id = add_dialog_event->params.vdev_id;
 
-	adapter = wlan_hdd_get_adapter_from_vdev(psoc, vdev_id);
-	if (!adapter) {
-		hdd_err("adapter is NULL");
+	link_info = wlan_hdd_get_link_info_from_vdev(psoc, vdev_id);
+	if (!link_info) {
+		hdd_err("Invalid vdev");
 		return;
 	}
 
+	adapter = link_info->adapter;
 	hdd_debug("TWT: add dialog_id:%d, status:%d vdev_id:%d renego_fail:%d peer mac_addr "
 		  QDF_MAC_ADDR_FMT, add_dialog_event->params.dialog_id,
 		  add_dialog_event->params.status, vdev_id, renego_fail,
@@ -2334,8 +2336,7 @@ static void
 hdd_twt_del_dialog_comp_cb(struct wlan_objmgr_psoc *psoc,
 			   struct wmi_twt_del_dialog_complete_event_param *params)
 {
-	struct hdd_adapter *adapter =
-		wlan_hdd_get_adapter_from_vdev(psoc, params->vdev_id);
+	struct wlan_hdd_link_info *link_info;
 	struct wireless_dev *wdev;
 	struct hdd_context *hdd_ctx;
 	struct sk_buff *twt_vendor_event;
@@ -2344,16 +2345,17 @@ hdd_twt_del_dialog_comp_cb(struct wlan_objmgr_psoc *psoc,
 
 	hdd_enter();
 
-	if (!adapter) {
-		hdd_err("adapter is NULL");
+	link_info = wlan_hdd_get_link_info_from_vdev(psoc, params->vdev_id);
+	if (!link_info) {
+		hdd_err("Invalid vdev");
 		return;
 	}
 
-	hdd_ctx = WLAN_HDD_GET_CTX(adapter);
+	hdd_ctx = WLAN_HDD_GET_CTX(link_info->adapter);
 	if (!hdd_ctx || cds_is_load_or_unload_in_progress())
 		return;
 
-	wdev = adapter->dev->ieee80211_ptr;
+	wdev = &link_info->adapter->wdev;
 
 	data_len = hdd_get_twt_event_len() + nla_total_size(sizeof(u8));
 	data_len += NLA_HDRLEN;
@@ -2798,8 +2800,7 @@ static void hdd_twt_nudge_dialog_comp_cb(
 		struct wmi_twt_nudge_dialog_complete_event_param *params)
 {
 
-	struct hdd_adapter *adapter =
-		wlan_hdd_get_adapter_from_vdev(psoc, params->vdev_id);
+	struct wlan_hdd_link_info *link_info;
 	struct wireless_dev *wdev;
 	struct hdd_context *hdd_ctx;
 	struct sk_buff *twt_vendor_event;
@@ -2807,12 +2808,14 @@ static void hdd_twt_nudge_dialog_comp_cb(
 	QDF_STATUS status;
 
 	hdd_enter();
-	if (hdd_validate_adapter(adapter))
+
+	link_info = wlan_hdd_get_link_info_from_vdev(psoc, params->vdev_id);
+	if (!link_info || hdd_validate_adapter(link_info->adapter))
 		return;
 
-	hdd_ctx = WLAN_HDD_GET_CTX(adapter);
+	hdd_ctx = WLAN_HDD_GET_CTX(link_info->adapter);
 
-	wdev = adapter->dev->ieee80211_ptr;
+	wdev = &link_info->adapter->wdev;
 
 	hdd_debug("Nudge dialog_id:%d, status:%d vdev_id %d peer mac_addr "
 		  QDF_MAC_ADDR_FMT, params->dialog_id,
@@ -2911,8 +2914,7 @@ hdd_twt_pause_dialog_comp_cb(
 		struct wlan_objmgr_psoc *psoc,
 		struct wmi_twt_pause_dialog_complete_event_param *params)
 {
-	struct hdd_adapter *adapter =
-		wlan_hdd_get_adapter_from_vdev(psoc, params->vdev_id);
+	struct wlan_hdd_link_info *link_info;
 	struct wireless_dev *wdev;
 	struct hdd_context *hdd_ctx;
 	struct sk_buff *twt_vendor_event;
@@ -2921,17 +2923,18 @@ hdd_twt_pause_dialog_comp_cb(
 
 	hdd_enter();
 
-	if (!adapter) {
-		hdd_err("adapter is NULL");
+	link_info = wlan_hdd_get_link_info_from_vdev(psoc, params->vdev_id);
+	if (!link_info) {
+		hdd_err("Invalid vdev");
 		return;
 	}
 
-	hdd_ctx = WLAN_HDD_GET_CTX(adapter);
+	hdd_ctx = WLAN_HDD_GET_CTX(link_info->adapter);
 	status = wlan_hdd_validate_context(hdd_ctx);
 	if (QDF_IS_STATUS_ERROR(status))
 		return;
 
-	wdev = adapter->dev->ieee80211_ptr;
+	wdev = &link_info->adapter->wdev;
 
 	hdd_debug("pause dialog_id:%d, status:%d vdev_id %d peer mac_addr "
 		  QDF_MAC_ADDR_FMT, params->dialog_id,
@@ -3373,8 +3376,7 @@ static void hdd_twt_resume_dialog_comp_cb(
 		struct wlan_objmgr_psoc *psoc,
 		struct wmi_twt_resume_dialog_complete_event_param *params)
 {
-	struct hdd_adapter *adapter =
-		wlan_hdd_get_adapter_from_vdev(psoc, params->vdev_id);
+	struct wlan_hdd_link_info *link_info;
 	struct hdd_context *hdd_ctx;
 	struct wireless_dev *wdev;
 	struct sk_buff *twt_vendor_event;
@@ -3383,17 +3385,18 @@ static void hdd_twt_resume_dialog_comp_cb(
 
 	hdd_enter();
 
-	if (!adapter) {
-		hdd_err("adapter is NULL");
+	link_info = wlan_hdd_get_link_info_from_vdev(psoc, params->vdev_id);
+	if (!link_info) {
+		hdd_err("Invalid vdev");
 		return;
 	}
 
-	hdd_ctx = WLAN_HDD_GET_CTX(adapter);
+	hdd_ctx = WLAN_HDD_GET_CTX(link_info->adapter);
 	status = wlan_hdd_validate_context(hdd_ctx);
 	if (QDF_IS_STATUS_ERROR(status))
 		return;
 
-	wdev = adapter->dev->ieee80211_ptr;
+	wdev = &link_info->adapter->wdev;
 
 	hdd_debug("TWT: resume dialog_id:%d status:%d vdev_id %d peer mac_addr "
 		  QDF_MAC_ADDR_FMT, params->dialog_id,
@@ -4156,8 +4159,7 @@ static void
 hdd_twt_notify_cb(struct wlan_objmgr_psoc *psoc,
 		  struct wmi_twt_notify_event_param *params)
 {
-	struct hdd_adapter *adapter =
-		wlan_hdd_get_adapter_from_vdev(psoc, params->vdev_id);
+	struct wlan_hdd_link_info *link_info;
 	struct wireless_dev *wdev;
 	struct sk_buff *twt_vendor_event;
 	size_t data_len;
@@ -4165,16 +4167,17 @@ hdd_twt_notify_cb(struct wlan_objmgr_psoc *psoc,
 
 	hdd_enter();
 
-	if (hdd_validate_adapter(adapter))
+	link_info = wlan_hdd_get_link_info_from_vdev(psoc, params->vdev_id);
+	if (!link_info || hdd_validate_adapter(link_info->adapter))
 		return;
 
-	wdev = adapter->dev->ieee80211_ptr;
+	wdev = &link_info->adapter->wdev;
 
 	data_len = NLA_HDRLEN;
 	data_len += nla_total_size(sizeof(u8));
 
 	twt_vendor_event = wlan_cfg80211_vendor_event_alloc(
-				adapter->wdev.wiphy, wdev,
+				wdev->wiphy, wdev,
 				data_len,
 				QCA_NL80211_VENDOR_SUBCMD_CONFIG_TWT_INDEX,
 				GFP_KERNEL);