Sfoglia il codice sorgente

qcacld-3.0: Refactor channel change APIs

Use link info pointer as function argument for the
following channel change notifying APIs to call
for each link info corresponding to the VDEV.
1) hdd_roam_channel_switch_handler()
2) hdd_chan_change_notify()
3) hdd_hostapd_chan_change()

Change-Id: Ic78f8ee88524ede97a53c0d4f8b88cff7ed7a3e5
CRs-Fixed: 3523026
Vinod Kumar Pirla 2 anni fa
parent
commit
60b472aad1
3 ha cambiato i file con 36 aggiunte e 32 eliminazioni
  1. 6 5
      core/hdd/inc/wlan_hdd_main.h
  2. 16 14
      core/hdd/src/wlan_hdd_assoc.c
  3. 14 13
      core/hdd/src/wlan_hdd_hostapd.c

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

@@ -3612,7 +3612,7 @@ int hdd_update_components_config(struct hdd_context *hdd_ctx);
 
 /**
  * hdd_chan_change_notify() - Function to notify hostapd about channel change
- * @adapter:		hostapd adapter
+ * @link_info:          Link info pointer in HDD adapter
  * @dev:		Net device structure
  * @chan_change:	New channel change parameters
  * @legacy_phymode:	is the phymode legacy
@@ -3622,10 +3622,11 @@ int hdd_update_components_config(struct hdd_context *hdd_ctx);
  * Return: Success on intimating userspace
  *
  */
-QDF_STATUS hdd_chan_change_notify(struct hdd_adapter *adapter,
-		struct net_device *dev,
-		struct hdd_chan_change_params chan_change,
-		bool legacy_phymode);
+QDF_STATUS hdd_chan_change_notify(struct wlan_hdd_link_info *link_info,
+				  struct net_device *dev,
+				  struct hdd_chan_change_params chan_change,
+				  bool legacy_phymode);
+
 int wlan_hdd_set_channel(struct wiphy *wiphy,
 		struct net_device *dev,
 		struct cfg80211_chan_def *chandef,

+ 16 - 14
core/hdd/src/wlan_hdd_assoc.c

@@ -2180,16 +2180,18 @@ hdd_indicate_ese_bcn_report_ind(const struct hdd_adapter *adapter,
 
 /*
  * hdd_roam_channel_switch_handler() - hdd channel switch handler
- * @adapter: Pointer to adapter context
+ * @link_info: Link info pointer in HDD adapter
  * @roam_info: Pointer to roam info
  *
  * Return: None
  */
-static void hdd_roam_channel_switch_handler(struct hdd_adapter *adapter,
-					    struct csr_roam_info *roam_info)
+static void
+hdd_roam_channel_switch_handler(struct wlan_hdd_link_info *link_info,
+				struct csr_roam_info *roam_info)
 {
 	struct hdd_chan_change_params chan_change = {0};
 	QDF_STATUS status;
+	struct hdd_adapter *adapter = link_info->adapter;
 	struct hdd_context *hdd_ctx = WLAN_HDD_GET_CTX(adapter);
 	mac_handle_t mac_handle;
 	struct hdd_station_ctx *sta_ctx;
@@ -2203,11 +2205,11 @@ static void hdd_roam_channel_switch_handler(struct hdd_adapter *adapter,
 
 	/* Enable Roaming on STA interface which was disabled before CSA */
 	if (adapter->device_mode == QDF_STA_MODE)
-		sme_start_roaming(mac_handle, adapter->deflink->vdev_id,
+		sme_start_roaming(mac_handle, link_info->vdev_id,
 				  REASON_DRIVER_ENABLED,
 				  RSO_CHANNEL_SWITCH);
 
-	sta_ctx = WLAN_HDD_GET_STATION_CTX_PTR(adapter->deflink);
+	sta_ctx = WLAN_HDD_GET_STATION_CTX_PTR(link_info);
 	if (sta_ctx) {
 		sta_ctx->conn_info.chan_freq = roam_info->chan_info.mhz;
 		sta_ctx->conn_info.ch_width = roam_info->chan_info.ch_width;
@@ -2223,7 +2225,7 @@ static void hdd_roam_channel_switch_handler(struct hdd_adapter *adapter,
 	chan_change.chan_params.mhz_freq_seg1 =
 		roam_info->chan_info.band_center_freq2;
 
-	vdev = hdd_objmgr_get_vdev_by_user(adapter->deflink, WLAN_OSIF_ID);
+	vdev = hdd_objmgr_get_vdev_by_user(link_info, WLAN_OSIF_ID);
 	if (!vdev) {
 		hdd_err("Invalid vdev");
 		return;
@@ -2235,13 +2237,13 @@ static void hdd_roam_channel_switch_handler(struct hdd_adapter *adapter,
 				hdd_ctx->pdev, sta_ctx->conn_info.bssid.bytes,
 				&connected_vdev))
 			notify = false;
-		else if (adapter->deflink->vdev_id != connected_vdev ||
+		else if (link_info->vdev_id != connected_vdev ||
 			 !ucfg_cm_is_vdev_active(vdev))
 			notify = false;
 	}
 	if (notify) {
-		status = hdd_chan_change_notify(adapter, adapter->dev,
-						chan_change,
+		status = hdd_chan_change_notify(link_info,
+						adapter->dev, chan_change,
 						roam_info->mode ==
 						SIR_SME_PHY_MODE_LEGACY);
 		if (QDF_IS_STATUS_ERROR(status))
@@ -2249,10 +2251,10 @@ static void hdd_roam_channel_switch_handler(struct hdd_adapter *adapter,
 	} else {
 		hdd_err("BSS "QDF_MAC_ADDR_FMT" no connected with vdev %d (%d)",
 			QDF_MAC_ADDR_REF(sta_ctx->conn_info.bssid.bytes),
-			adapter->deflink->vdev_id, connected_vdev);
+			link_info->vdev_id, connected_vdev);
 	}
 	status = policy_mgr_set_hw_mode_on_channel_switch(hdd_ctx->psoc,
-		adapter->deflink->vdev_id);
+							  link_info->vdev_id);
 	if (QDF_IS_STATUS_ERROR(status))
 		hdd_debug("set hw mode change not done");
 
@@ -2263,12 +2265,12 @@ static void hdd_roam_channel_switch_handler(struct hdd_adapter *adapter,
 	if (!is_sap_go_moved_before_sta)
 		policy_mgr_check_concurrent_intf_and_restart_sap(
 		   hdd_ctx->psoc,
-		   !!adapter->deflink->session.ap.sap_config.acs_cfg.acs_mode);
+		   !!link_info->session.ap.sap_config.acs_cfg.acs_mode);
 
 	wlan_twt_concurrency_update(hdd_ctx);
 	if (adapter->device_mode == QDF_STA_MODE ||
 	    adapter->device_mode == QDF_P2P_CLIENT_MODE) {
-		vdev = hdd_objmgr_get_vdev_by_user(adapter->deflink,
+		vdev = hdd_objmgr_get_vdev_by_user(link_info,
 						   WLAN_OSIF_ID);
 		if (!vdev)
 			return;
@@ -2368,7 +2370,7 @@ QDF_STATUS hdd_sme_roam_callback(void *context,
 	}
 #endif /* FEATURE_WLAN_ESE */
 	case eCSR_ROAM_STA_CHANNEL_SWITCH:
-		hdd_roam_channel_switch_handler(adapter, roam_info);
+		hdd_roam_channel_switch_handler(link_info, roam_info);
 		break;
 
 	case eCSR_ROAM_NDP_STATUS_UPDATE:

+ 14 - 13
core/hdd/src/wlan_hdd_hostapd.c

@@ -959,15 +959,16 @@ wlan_hdd_get_puncture_bitmap(struct hdd_chan_change_params chan_change)
 }
 #endif /* WLAN_FEATURE_11BE */
 
-QDF_STATUS hdd_chan_change_notify(struct hdd_adapter *adapter,
-		struct net_device *dev,
-		struct hdd_chan_change_params chan_change,
-		bool legacy_phymode)
+QDF_STATUS hdd_chan_change_notify(struct wlan_hdd_link_info *link_info,
+				  struct net_device *dev,
+				  struct hdd_chan_change_params chan_change,
+				  bool legacy_phymode)
 {
 	struct ieee80211_channel *chan;
 	struct cfg80211_chan_def chandef;
 	enum nl80211_channel_type channel_type;
 	uint32_t freq;
+	struct hdd_adapter *adapter = link_info->adapter;
 	mac_handle_t mac_handle = adapter->hdd_ctx->mac_handle;
 	struct wlan_objmgr_vdev *vdev;
 	uint16_t link_id = 0;
@@ -980,7 +981,6 @@ QDF_STATUS hdd_chan_change_notify(struct hdd_adapter *adapter,
 	}
 
 	freq = chan_change.chan_freq;
-
 	chan = ieee80211_get_channel(adapter->wdev.wiphy, freq);
 
 	if (!chan) {
@@ -1043,7 +1043,7 @@ QDF_STATUS hdd_chan_change_notify(struct hdd_adapter *adapter,
 				chan_change.chan_params.mhz_freq_seg0;
 	}
 
-	vdev = hdd_objmgr_get_vdev_by_user(adapter->deflink, WLAN_OSIF_ID);
+	vdev = hdd_objmgr_get_vdev_by_user(link_info, WLAN_OSIF_ID);
 	if (!vdev)
 		return -EINVAL;
 
@@ -1749,23 +1749,24 @@ hdd_fill_channel_change_puncture(struct hdd_chan_change_params *chan_change,
 
 /**
  * hdd_hostapd_chan_change() - prepare new operation chan info to kernel
- * @adapter: pointre to hdd_adapter
+ * @link_info: Link info pointer in HDD adapter
  * @sap_event: pointer to sap_event
  *
  * Return: QDF_STATUS
  */
-static QDF_STATUS hdd_hostapd_chan_change(struct hdd_adapter *adapter,
+static QDF_STATUS hdd_hostapd_chan_change(struct wlan_hdd_link_info *link_info,
 					  struct sap_event *sap_event)
 {
 	struct hdd_chan_change_params chan_change = {0};
 	struct ch_params sap_ch_param = {0};
 	eCsrPhyMode phy_mode;
 	bool legacy_phymode;
+	struct hdd_adapter *adapter = link_info->adapter;
 	struct hdd_context *hdd_ctx = WLAN_HDD_GET_CTX(adapter);
 	struct sap_ch_selected_s *sap_chan_selected =
 			&sap_event->sapevt.sap_ch_selected;
 	struct sap_config *sap_config =
-				&adapter->deflink->session.ap.sap_config;
+				&link_info->session.ap.sap_config;
 
 	sap_ch_param.ch_width = sap_chan_selected->ch_width;
 	sap_ch_param.mhz_freq_seg0 =
@@ -1782,7 +1783,7 @@ static QDF_STATUS hdd_hostapd_chan_change(struct hdd_adapter *adapter,
 		&sap_ch_param, REG_CURRENT_PWR_MODE);
 
 	phy_mode = wlan_sap_get_phymode(
-			WLAN_HDD_GET_SAP_CTX_PTR(adapter->deflink));
+			WLAN_HDD_GET_SAP_CTX_PTR(link_info));
 
 	switch (phy_mode) {
 	case eCSR_DOT11_MODE_11n:
@@ -1810,7 +1811,7 @@ static QDF_STATUS hdd_hostapd_chan_change(struct hdd_adapter *adapter,
 			sap_chan_selected->vht_seg1_center_ch_freq;
 	hdd_fill_channel_change_puncture(&chan_change, &sap_ch_param);
 
-	return hdd_chan_change_notify(adapter, adapter->dev,
+	return hdd_chan_change_notify(link_info, adapter->dev,
 				      chan_change, legacy_phymode);
 }
 
@@ -2974,7 +2975,7 @@ QDF_STATUS hdd_hostapd_sap_event_cb(struct sap_event *sap_event,
 
 		hdd_son_deliver_chan_change_event(
 			adapter, sap_event->sapevt.sap_ch_selected.pri_ch_freq);
-		return hdd_hostapd_chan_change(adapter, sap_event);
+		return hdd_hostapd_chan_change(link_info, sap_event);
 	case eSAP_ACS_SCAN_SUCCESS_EVENT:
 		return hdd_handle_acs_scan_event(sap_event, adapter);
 
@@ -3065,7 +3066,7 @@ QDF_STATUS hdd_hostapd_sap_event_cb(struct sap_event *sap_event,
 		if (!QDF_IS_STATUS_SUCCESS(qdf_status))
 			hdd_err("qdf_event_set failed! status: %d",
 				qdf_status);
-		return hdd_hostapd_chan_change(adapter, sap_event);
+		return hdd_hostapd_chan_change(link_info, sap_event);
 	default:
 		hdd_debug("SAP message is not handled");
 		goto stopbss;