Browse Source

qcacld-3.0: Refactor hdd_roam_register_sta() API

Use link info pointer to register STA on connection success
on each VDEV corresponding to the link info pointer.
Move existing callers to deflink pointer.
Skipped DP tx/rx functions registration for non vdev_id matching
DP interface

Change-Id: I6bd7b7be547efa58962f8b2e2c0b65eb48065769
CRs-Fixed: 3522205
Vinod Kumar Pirla 2 years ago
parent
commit
27148d7774

+ 2 - 2
core/hdd/inc/wlan_hdd_assoc.h

@@ -363,13 +363,13 @@ QDF_STATUS hdd_update_dp_vdev_flags(void *cbk_data,
 
 /**
  * hdd_roam_register_sta() - register station
- * @adapter: pointer to adapter
+ * @link_info: Link info pointer in HDD adapter
  * @bssid: bssid of the connection
  * @is_auth_required: is upper layer authenticatoin required
  *
  * Return: QDF_STATUS enumeration
  */
-QDF_STATUS hdd_roam_register_sta(struct hdd_adapter *adapter,
+QDF_STATUS hdd_roam_register_sta(struct wlan_hdd_link_info *link_info,
 				 struct qdf_mac_addr *bssid,
 				 bool is_auth_required);
 

+ 13 - 4
core/hdd/src/wlan_hdd_assoc.c

@@ -1367,7 +1367,7 @@ QDF_STATUS hdd_update_dp_vdev_flags(void *cbk_data,
 	return status;
 }
 
-QDF_STATUS hdd_roam_register_sta(struct hdd_adapter *adapter,
+QDF_STATUS hdd_roam_register_sta(struct wlan_hdd_link_info *link_info,
 				 struct qdf_mac_addr *bssid,
 				 bool is_auth_required)
 {
@@ -1377,6 +1377,7 @@ QDF_STATUS hdd_roam_register_sta(struct hdd_adapter *adapter,
 	enum phy_ch_width ch_width;
 	enum wlan_phymode phymode;
 	struct wlan_objmgr_vdev *vdev;
+	struct hdd_adapter *adapter = link_info->adapter;
 
 	/* Get the Station ID from the one saved during the association */
 	if (!QDF_IS_ADDR_BROADCAST(bssid->bytes))
@@ -1401,11 +1402,19 @@ QDF_STATUS hdd_roam_register_sta(struct hdd_adapter *adapter,
 		txrx_desc.is_wapi_supported = 0;
 #endif /* FEATURE_WLAN_WAPI */
 
-	vdev = hdd_objmgr_get_vdev_by_user(adapter->deflink, WLAN_DP_ID);
+	vdev = hdd_objmgr_get_vdev_by_user(link_info, WLAN_DP_ID);
 	if (!vdev)
 		return QDF_STATUS_E_INVAL;
 
-	qdf_status = ucfg_dp_sta_register_txrx_ops(vdev);
+	/* TODO, right now only one interface is registered with DP
+	 * so for second vdev not doing the register ops as it will
+	 * point to the same again.
+	 */
+	if (ucfg_dp_get_intf_id(vdev) == wlan_vdev_get_id(vdev))
+		qdf_status = ucfg_dp_sta_register_txrx_ops(vdev);
+	else
+		qdf_status = QDF_STATUS_SUCCESS;
+
 	hdd_objmgr_put_vdev_by_user(vdev, WLAN_DP_ID);
 	if (!QDF_IS_STATUS_SUCCESS(qdf_status)) {
 		hdd_err("DP tx/rx ops register failed Status: %d", qdf_status);
@@ -1415,7 +1424,7 @@ QDF_STATUS hdd_roam_register_sta(struct hdd_adapter *adapter,
 	if (adapter->device_mode == QDF_NDI_MODE) {
 		phymode = ucfg_mlme_get_vdev_phy_mode(
 						adapter->hdd_ctx->psoc,
-						adapter->deflink->vdev_id);
+						link_info->vdev_id);
 		ch_width = ucfg_mlme_get_ch_width_from_phymode(phymode);
 	} else {
 		ch_width = ucfg_mlme_get_peer_ch_width(adapter->hdd_ctx->psoc,

+ 1 - 1
core/hdd/src/wlan_hdd_cm_connect.c

@@ -1546,7 +1546,7 @@ hdd_cm_connect_success_pre_user_update(struct wlan_objmgr_vdev *vdev,
 		}
 		hdd_debug("is_roam_offload %d, is_roam %d, is_auth_required %d",
 			  is_roam_offload, is_roam, is_auth_required);
-		hdd_roam_register_sta(adapter, &rsp->bssid, is_auth_required);
+		hdd_roam_register_sta(link_info, &rsp->bssid, is_auth_required);
 	} else {
 		/* for host roam/LFR2 */
 		hdd_cm_set_peer_authenticate(adapter, &rsp->bssid,

+ 8 - 5
core/hdd/src/wlan_hdd_nan_datapath.c

@@ -911,8 +911,9 @@ int hdd_ndi_delete(uint8_t vdev_id, const char *iface_name,
  * wmi_vdev_param_ndp_keepalive_timeout
  */
 
-void hdd_ndi_drv_ndi_create_rsp_handler(uint8_t vdev_id,
-				struct nan_datapath_inf_create_rsp *ndi_rsp)
+void
+hdd_ndi_drv_ndi_create_rsp_handler(uint8_t vdev_id,
+				   struct nan_datapath_inf_create_rsp *ndi_rsp)
 {
 	struct hdd_context *hdd_ctx;
 	struct hdd_adapter *adapter;
@@ -999,7 +1000,8 @@ void hdd_ndi_drv_ndi_create_rsp_handler(uint8_t vdev_id,
 
 	hdd_save_peer(sta_ctx, &bc_mac_addr);
 	qdf_copy_macaddr(&roam_info->bssid, &bc_mac_addr);
-	hdd_roam_register_sta(adapter, &roam_info->bssid,
+	hdd_roam_register_sta(link_info,
+			      &roam_info->bssid,
 			      roam_info->fAuthRequired);
 
 error:
@@ -1100,7 +1102,8 @@ static void hdd_send_obss_scan_req(struct hdd_context *hdd_ctx, bool val)
 }
 
 int hdd_ndp_new_peer_handler(uint8_t vdev_id, uint16_t sta_id,
-			struct qdf_mac_addr *peer_mac_addr, bool first_peer)
+			     struct qdf_mac_addr *peer_mac_addr,
+			     bool first_peer)
 {
 	struct hdd_context *hdd_ctx;
 	struct hdd_adapter *adapter;
@@ -1134,7 +1137,7 @@ int hdd_ndp_new_peer_handler(uint8_t vdev_id, uint16_t sta_id,
 	qdf_copy_macaddr(&roam_info->bssid, peer_mac_addr);
 
 	/* this function is called for each new peer */
-	hdd_roam_register_sta(adapter, &roam_info->bssid,
+	hdd_roam_register_sta(link_info, &roam_info->bssid,
 			      roam_info->fAuthRequired);
 
 	if (!first_peer)