Quellcode durchsuchen

qcacld-3.0: Refactor ML AP config APIs

To store/load MLO SAP configuration on each link's AP context
in adapter, change the function argument of below APIs to take
link info pointer instead of adapter.
Existing callers moved to deflink.

1) wlan_hdd_mlo_reset()
2) wlan_hdd_mlo_update()
3) wlan_hdd_mlo_sap_reinit()

Change-Id: I35d1459b22d290dccfb8710586a8facd59425265
CRs-Fixed: 3463288
Vinod Kumar Pirla vor 2 Jahren
Ursprung
Commit
c6c6fce5cd
3 geänderte Dateien mit 83 neuen und 102 gelöschten Zeilen
  1. 32 37
      core/hdd/src/wlan_hdd_hostapd.c
  2. 3 3
      core/hdd/src/wlan_hdd_hostapd.h
  3. 48 62
      core/hdd/src/wlan_hdd_main.c

+ 32 - 37
core/hdd/src/wlan_hdd_hostapd.c

@@ -6119,33 +6119,28 @@ static void wlan_hdd_set_sap_mcc_chnl_avoid(struct hdd_context *hdd_ctx)
 #ifdef WLAN_FEATURE_11BE_MLO
 /**
  * wlan_hdd_mlo_update() - handle mlo scenario for start bss
- * @hdd_ctx: Pointer to hdd context
- * @config: Pointer to sap config
- * @adapter: Pointer to hostapd adapter
- * @beacon: Pointer to beacon
+ * @link_info: Pointer to hostapd adapter
  *
  * Return: QDF_STATUS
  */
-static QDF_STATUS wlan_hdd_mlo_update(struct hdd_context *hdd_ctx,
-				      struct sap_config *config,
-				      struct hdd_adapter *adapter,
-				      struct hdd_beacon_data *beacon)
+static QDF_STATUS wlan_hdd_mlo_update(struct wlan_hdd_link_info *link_info)
 {
-	uint8_t link_id = 0;
-	uint8_t num_link = 0;
 	bool is_ml_ap;
+	uint8_t link_id = 0, num_link = 0;
+	struct hdd_context *hdd_ctx = link_info->adapter->hdd_ctx;
+	struct sap_config *config = &link_info->session.ap.sap_config;
+	struct hdd_beacon_data *beacon = link_info->session.ap.beacon;
 
 	if (config->SapHw_mode == eCSR_DOT11_MODE_11be ||
 	    config->SapHw_mode == eCSR_DOT11_MODE_11be_ONLY) {
 		wlan_hdd_get_mlo_link_id(beacon, &link_id, &num_link);
 		hdd_debug("MLO SAP vdev id %d, link id %d total link %d",
-			  adapter->deflink->vdev_id, link_id, num_link);
+			  link_info->vdev_id, link_id, num_link);
 		if (!num_link) {
 			hdd_debug("start 11be AP without mlo");
 			return QDF_STATUS_SUCCESS;
 		}
-		if (!mlo_ap_vdev_attach(adapter->deflink->vdev,
-					link_id, num_link)) {
+		if (!mlo_ap_vdev_attach(link_info->vdev, link_id, num_link)) {
 			hdd_err("MLO SAP attach fails");
 			return QDF_STATUS_E_INVAL;
 		}
@@ -6155,9 +6150,9 @@ static QDF_STATUS wlan_hdd_mlo_update(struct hdd_context *hdd_ctx,
 		config->num_link = num_link;
 	}
 
-	is_ml_ap = wlan_vdev_mlme_is_mlo_ap(adapter->deflink->vdev);
-	if (!policy_mgr_is_mlo_sap_concurrency_allowed(
-						hdd_ctx->psoc, is_ml_ap)) {
+	is_ml_ap = wlan_vdev_mlme_is_mlo_ap(link_info->vdev);
+	if (!policy_mgr_is_mlo_sap_concurrency_allowed(hdd_ctx->psoc,
+						       is_ml_ap)) {
 		hdd_err("MLO SAP concurrency check fails");
 		return QDF_STATUS_E_INVAL;
 	}
@@ -6165,20 +6160,22 @@ static QDF_STATUS wlan_hdd_mlo_update(struct hdd_context *hdd_ctx,
 	return QDF_STATUS_SUCCESS;
 }
 
-void wlan_hdd_mlo_reset(struct hdd_adapter *adapter)
+void wlan_hdd_mlo_reset(struct wlan_hdd_link_info *link_info)
 {
-	if (wlan_vdev_mlme_is_mlo_ap(adapter->deflink->vdev)) {
-		adapter->deflink->session.ap.sap_config.mlo_sap = false;
-		adapter->deflink->session.ap.sap_config.link_id = 0;
-		adapter->deflink->session.ap.sap_config.num_link = 0;
-		mlo_ap_vdev_detach(adapter->deflink->vdev);
-	}
+	struct sap_config *sap_config;
+
+	if (!wlan_vdev_mlme_is_mlo_ap(link_info->vdev))
+		return;
+
+	sap_config = &link_info->session.ap.sap_config;
+	sap_config->mlo_sap = false;
+	sap_config->link_id = 0;
+	sap_config->num_link = 0;
+	mlo_ap_vdev_detach(link_info->vdev);
 }
 #else
-static QDF_STATUS wlan_hdd_mlo_update(struct hdd_context *hdd_ctx,
-				      struct sap_config *config,
-				      struct hdd_adapter *adapter,
-				      struct hdd_beacon_data *beacon)
+static inline QDF_STATUS
+wlan_hdd_mlo_update(struct wlan_hdd_link_info *link_info)
 {
 	return QDF_STATUS_SUCCESS;
 }
@@ -6729,12 +6726,13 @@ int wlan_hdd_cfg80211_start_bss(struct hdd_adapter *adapter,
 	if (!cds_is_sub_20_mhz_enabled())
 		wlan_hdd_set_sap_hwmode(adapter->deflink);
 
-	if (QDF_IS_STATUS_ERROR(wlan_hdd_mlo_update(hdd_ctx, config,
-						    adapter, beacon))) {
+	qdf_status = wlan_hdd_mlo_update(adapter->deflink);
+	if (QDF_IS_STATUS_ERROR(qdf_status)) {
 		ret = -EINVAL;
 		goto error;
 	}
-	status = ucfg_mlme_get_vht_for_24ghz(hdd_ctx->psoc, &bval);
+
+	qdf_status = ucfg_mlme_get_vht_for_24ghz(hdd_ctx->psoc, &bval);
 	if (QDF_IS_STATUS_ERROR(qdf_status))
 		hdd_err("Failed to get vht_for_24ghz");
 
@@ -6760,8 +6758,7 @@ int wlan_hdd_cfg80211_start_bss(struct hdd_adapter *adapter,
 	config->SapHw_mode = csr_convert_from_reg_phy_mode(updated_phy_mode);
 	if (config->sap_orig_hw_mode != config->SapHw_mode)
 		hdd_info("orig phymode %d new phymode %d",
-			 config->sap_orig_hw_mode,
-			 config->SapHw_mode);
+			 config->sap_orig_hw_mode, config->SapHw_mode);
 	qdf_mem_zero(sme_config, sizeof(*sme_config));
 	sme_get_config_param(mac_handle, sme_config);
 	/* Override hostapd.conf wmm_enabled only for 11n and 11AC configs (IOT)
@@ -6778,10 +6775,8 @@ int wlan_hdd_cfg80211_start_bss(struct hdd_adapter *adapter,
 		sme_config->csr_config.WMMSupportMode = WMM_USER_MODE_NO_QOS;
 	sme_update_config(mac_handle, sme_config);
 
-	if (((adapter->device_mode == QDF_SAP_MODE) &&
-	     (sap_force_11n_for_11ac)) ||
-	     ((adapter->device_mode == QDF_P2P_GO_MODE) &&
-	     (go_force_11n_for_11ac))) {
+	if ((adapter->device_mode == QDF_SAP_MODE && sap_force_11n_for_11ac) ||
+	    (adapter->device_mode == QDF_P2P_GO_MODE && go_force_11n_for_11ac)) {
 		if (config->ch_width_orig > CH_WIDTH_40MHZ)
 			config->ch_width_orig = CH_WIDTH_40MHZ;
 	}
@@ -6962,7 +6957,7 @@ int wlan_hdd_cfg80211_start_bss(struct hdd_adapter *adapter,
 	goto free;
 
 error:
-	wlan_hdd_mlo_reset(adapter);
+	wlan_hdd_mlo_reset(adapter->deflink);
 	/* Revert the indoor to passive marking if START BSS fails */
 	if (indoor_chnl_marking && adapter->device_mode == QDF_SAP_MODE) {
 		hdd_update_indoor_channel(hdd_ctx, false);

+ 3 - 3
core/hdd/src/wlan_hdd_hostapd.h

@@ -477,13 +477,13 @@ wlan_hdd_configure_twt_responder(struct hdd_context *hdd_ctx,
 #ifdef WLAN_FEATURE_11BE_MLO
 /**
  * wlan_hdd_mlo_reset() - reset mlo configuration if start bss fails
- * @adapter: Pointer to hostapd adapter
+ * @link_info: Pointer to link_info in hostapd adapter
  *
  * Return: void
  */
-void wlan_hdd_mlo_reset(struct hdd_adapter *adapter);
+void wlan_hdd_mlo_reset(struct wlan_hdd_link_info *link_info);
 #else
-static inline void wlan_hdd_mlo_reset(struct hdd_adapter *adapter)
+static inline void wlan_hdd_mlo_reset(struct wlan_hdd_link_info *link_info)
 {
 }
 #endif /* end WLAN_FEATURE_11BE_MLO */

+ 48 - 62
core/hdd/src/wlan_hdd_main.c

@@ -17164,29 +17164,25 @@ void wlan_hdd_stop_sap(struct hdd_adapter *ap_adapter)
 #if defined(WLAN_FEATURE_11BE_MLO) && defined(CFG80211_11BE_BASIC)
 /**
  * wlan_hdd_mlo_sap_reinit() - handle mlo scenario for ssr
- * @hdd_ctx: Pointer to hdd context
- * @config: Pointer to sap config
- * @adapter: Pointer to hostapd adapter
+ * @link_info: Pointer of link_info in adapter
  *
  * Return: QDF_STATUS
  */
-static QDF_STATUS wlan_hdd_mlo_sap_reinit(struct hdd_context *hdd_ctx,
-					  struct sap_config *config,
-					  struct hdd_adapter *adapter)
+static QDF_STATUS wlan_hdd_mlo_sap_reinit(struct wlan_hdd_link_info *link_info)
 {
-	bool is_ml_ap;
+	struct hdd_context *hdd_ctx = link_info->adapter->hdd_ctx;
+	struct sap_config *config = &link_info->session.ap.sap_config;
 
 	if (config->mlo_sap) {
-		if (!mlo_ap_vdev_attach(adapter->deflink->vdev, config->link_id,
+		if (!mlo_ap_vdev_attach(link_info->vdev, config->link_id,
 					config->num_link)) {
 			hdd_err("SAP mlo mgr attach fail");
 			return QDF_STATUS_E_INVAL;
 		}
 	}
 
-	is_ml_ap = wlan_vdev_mlme_is_mlo_ap(adapter->deflink->vdev);
-	if (!policy_mgr_is_mlo_sap_concurrency_allowed(
-				hdd_ctx->psoc, is_ml_ap)) {
+	if (!policy_mgr_is_mlo_sap_concurrency_allowed(hdd_ctx->psoc,
+						       config->mlo_sap)) {
 		hdd_err("MLO SAP concurrency check fails");
 		return QDF_STATUS_E_INVAL;
 	}
@@ -17194,9 +17190,8 @@ static QDF_STATUS wlan_hdd_mlo_sap_reinit(struct hdd_context *hdd_ctx,
 	return QDF_STATUS_SUCCESS;
 }
 #else
-static QDF_STATUS wlan_hdd_mlo_sap_reinit(struct hdd_context *hdd_ctx,
-					  struct sap_config *config,
-					  struct hdd_adapter *adapter)
+static inline QDF_STATUS
+wlan_hdd_mlo_sap_reinit(struct wlan_hdd_link_info *link_info)
 {
 	return QDF_STATUS_SUCCESS;
 }
@@ -17212,7 +17207,7 @@ static QDF_STATUS wlan_hdd_mlo_sap_reinit(struct hdd_context *hdd_ctx,
  */
 void wlan_hdd_start_sap(struct hdd_adapter *ap_adapter, bool reinit)
 {
-	struct hdd_ap_ctx *hdd_ap_ctx;
+	struct hdd_ap_ctx *ap_ctx;
 	struct hdd_hostapd_state *hostapd_state;
 	QDF_STATUS qdf_status;
 	struct hdd_context *hdd_ctx;
@@ -17229,34 +17224,33 @@ void wlan_hdd_start_sap(struct hdd_adapter *ap_adapter, bool reinit)
 	}
 
 	hdd_ctx = WLAN_HDD_GET_CTX(ap_adapter);
-	hdd_ap_ctx = WLAN_HDD_GET_AP_CTX_PTR(ap_adapter->deflink);
+	ap_ctx = WLAN_HDD_GET_AP_CTX_PTR(ap_adapter->deflink);
 	hostapd_state = WLAN_HDD_GET_HOSTAP_STATE_PTR(ap_adapter->deflink);
-	sap_config = &ap_adapter->deflink->session.ap.sap_config;
+	sap_config = &ap_ctx->sap_config;
 
 	mutex_lock(&hdd_ctx->sap_lock);
 	if (test_bit(SOFTAP_BSS_STARTED, &ap_adapter->deflink->link_flags))
 		goto end;
 
-	if (0 != wlan_hdd_cfg80211_update_apies(ap_adapter)) {
+	if (wlan_hdd_cfg80211_update_apies(ap_adapter)) {
 		hdd_err("SAP Not able to set AP IEs");
 		goto end;
 	}
-	wlan_reg_set_channel_params_for_pwrmode(
-				hdd_ctx->pdev,
-				hdd_ap_ctx->sap_config.chan_freq,
-				0, &hdd_ap_ctx->sap_config.ch_params,
-				REG_CURRENT_PWR_MODE);
-	if (QDF_IS_STATUS_ERROR(wlan_hdd_mlo_sap_reinit(hdd_ctx, sap_config,
-							ap_adapter))) {
+	wlan_reg_set_channel_params_for_pwrmode(hdd_ctx->pdev,
+						sap_config->chan_freq, 0,
+						&sap_config->ch_params,
+						REG_CURRENT_PWR_MODE);
+	qdf_status = wlan_hdd_mlo_sap_reinit(ap_adapter->deflink);
+	if (QDF_IS_STATUS_ERROR(qdf_status)) {
 		hdd_err("SAP Not able to do mlo attach");
 		goto end;
 	}
 
 	qdf_event_reset(&hostapd_state->qdf_event);
-	if (wlansap_start_bss(hdd_ap_ctx->sap_context, hdd_hostapd_sap_event_cb,
-			      &hdd_ap_ctx->sap_config,
-			      ap_adapter->dev)
-			      != QDF_STATUS_SUCCESS)
+	qdf_status = wlansap_start_bss(ap_ctx->sap_context,
+				       hdd_hostapd_sap_event_cb, sap_config,
+				       ap_adapter->dev);
+	if (QDF_IS_STATUS_ERROR(qdf_status))
 		goto end;
 
 	hdd_debug("Waiting for SAP to start");
@@ -17283,7 +17277,7 @@ void wlan_hdd_start_sap(struct hdd_adapter *ap_adapter, bool reinit)
 
 	return;
 end:
-	wlan_hdd_mlo_reset(ap_adapter);
+	wlan_hdd_mlo_reset(ap_adapter->deflink);
 	wlansap_reset_sap_config_add_ie(sap_config, eUPDATE_IE_ALL);
 	mutex_unlock(&hdd_ctx->sap_lock);
 	/* SAP context and beacon cleanup will happen during driver unload
@@ -17291,10 +17285,8 @@ end:
 	 */
 	hdd_err("SAP restart after SSR failed! Reload WLAN and try SAP again");
 	/* Free the beacon memory in case of failure in the sap restart */
-	if (ap_adapter->deflink->session.ap.beacon) {
-		qdf_mem_free(ap_adapter->deflink->session.ap.beacon);
-		ap_adapter->deflink->session.ap.beacon = NULL;
-	}
+	qdf_mem_free(ap_ctx->beacon);
+	ap_ctx->beacon = NULL;
 }
 
 #ifdef QCA_CONFIG_SMP
@@ -19921,29 +19913,26 @@ bool hdd_is_connection_in_progress(uint8_t *out_vdev_id,
  */
 void hdd_restart_sap(struct hdd_adapter *ap_adapter)
 {
-	struct hdd_ap_ctx *hdd_ap_ctx;
-	struct hdd_hostapd_state *hostapd_state;
-	QDF_STATUS qdf_status;
+	struct hdd_hostapd_state *hapd_state;
+	QDF_STATUS status;
 	struct hdd_context *hdd_ctx = WLAN_HDD_GET_CTX(ap_adapter);
 	struct sap_config *sap_config;
 	void *sap_ctx;
 
-	hdd_ap_ctx = WLAN_HDD_GET_AP_CTX_PTR(ap_adapter->deflink);
-	sap_config = &hdd_ap_ctx->sap_config;
-	sap_ctx = hdd_ap_ctx->sap_context;
+	sap_config =
+		&(WLAN_HDD_GET_AP_CTX_PTR(ap_adapter->deflink)->sap_config);
+	sap_ctx = WLAN_HDD_GET_SAP_CTX_PTR(ap_adapter->deflink);
 
 	mutex_lock(&hdd_ctx->sap_lock);
 	if (test_bit(SOFTAP_BSS_STARTED, &ap_adapter->deflink->link_flags)) {
 		wlan_hdd_del_station(ap_adapter, NULL);
-		hostapd_state =
-			WLAN_HDD_GET_HOSTAP_STATE_PTR(ap_adapter->deflink);
-		qdf_event_reset(&hostapd_state->qdf_stop_bss_event);
+		hapd_state = WLAN_HDD_GET_HOSTAP_STATE_PTR(ap_adapter->deflink);
+		qdf_event_reset(&hapd_state->qdf_stop_bss_event);
 		if (QDF_STATUS_SUCCESS == wlansap_stop_bss(sap_ctx)) {
-			qdf_status = qdf_wait_single_event(
-					&hostapd_state->qdf_stop_bss_event,
-					SME_CMD_STOP_BSS_TIMEOUT);
+			status = qdf_wait_single_event(&hapd_state->qdf_stop_bss_event,
+						       SME_CMD_STOP_BSS_TIMEOUT);
 
-			if (!QDF_IS_STATUS_SUCCESS(qdf_status)) {
+			if (!QDF_IS_STATUS_SUCCESS(status)) {
 				hdd_err("SAP Stop Failed");
 				goto end;
 			}
@@ -19960,35 +19949,32 @@ void hdd_restart_sap(struct hdd_adapter *ap_adapter)
 			goto end;
 		}
 
-		qdf_status = wlan_hdd_mlo_sap_reinit(hdd_ctx, sap_config,
-						     ap_adapter);
-		if (QDF_IS_STATUS_ERROR(qdf_status)) {
+		status = wlan_hdd_mlo_sap_reinit(ap_adapter->deflink);
+		if (QDF_IS_STATUS_ERROR(status)) {
 			hdd_err("SAP Not able to do mlo attach");
 			goto deinit_mlo;
 		}
 
-		qdf_event_reset(&hostapd_state->qdf_event);
-		if (wlansap_start_bss(sap_ctx, hdd_hostapd_sap_event_cb,
-				      sap_config,
-				      ap_adapter->dev) != QDF_STATUS_SUCCESS) {
+		qdf_event_reset(&hapd_state->qdf_event);
+		status = wlansap_start_bss(sap_ctx, hdd_hostapd_sap_event_cb,
+					   sap_config, ap_adapter->dev);
+		if (QDF_IS_STATUS_ERROR(status)) {
 			hdd_err("SAP Start Bss fail");
 			goto deinit_mlo;
 		}
 
 		hdd_info("Waiting for SAP to start");
-		qdf_status =
-			qdf_wait_single_event(&hostapd_state->qdf_event,
-					SME_CMD_START_BSS_TIMEOUT);
-		if (!QDF_IS_STATUS_SUCCESS(qdf_status)) {
+		status = qdf_wait_single_event(&hapd_state->qdf_event,
+					       SME_CMD_START_BSS_TIMEOUT);
+		if (!QDF_IS_STATUS_SUCCESS(status)) {
 			hdd_err("SAP Start failed");
 			goto deinit_mlo;
 		}
-		wlansap_reset_sap_config_add_ie(sap_config,
-						eUPDATE_IE_ALL);
+		wlansap_reset_sap_config_add_ie(sap_config, eUPDATE_IE_ALL);
 		hdd_err("SAP Start Success");
 		hdd_medium_assess_init();
 		set_bit(SOFTAP_BSS_STARTED, &ap_adapter->deflink->link_flags);
-		if (hostapd_state->bss_state == BSS_START) {
+		if (hapd_state->bss_state == BSS_START) {
 			policy_mgr_incr_active_session(hdd_ctx->psoc,
 						ap_adapter->device_mode,
 						ap_adapter->deflink->vdev_id);
@@ -20001,7 +19987,7 @@ void hdd_restart_sap(struct hdd_adapter *ap_adapter)
 	return;
 
 deinit_mlo:
-	wlan_hdd_mlo_reset(ap_adapter);
+	wlan_hdd_mlo_reset(ap_adapter->deflink);
 end:
 	wlansap_reset_sap_config_add_ie(sap_config, eUPDATE_IE_ALL);
 	mutex_unlock(&hdd_ctx->sap_lock);