Pārlūkot izejas kodu

qcacld-3.0: Add address search flags for TDLS

Add support to set address search flags in WLAN Tx Descriptor
for TDLS operation.

Change-Id: I8ab30e78d63139a729353268f5dce51d64405c8f
CRs-Fixed: 2041759
Kabilan Kannan 8 gadi atpakaļ
vecāks
revīzija
256e3185e7

+ 5 - 0
core/hdd/inc/wlan_hdd_assoc.h

@@ -333,6 +333,11 @@ static inline bool hdd_is_roam_sync_in_progress(tCsrRoamInfo *roaminfo)
 }
 #endif
 
+QDF_STATUS hdd_update_dp_vdev_flags(void *cbk_data,
+				    uint8_t sta_id,
+				    uint32_t vdev_param,
+				    bool is_link_up);
+
 QDF_STATUS hdd_roam_register_sta(struct hdd_adapter_s *adapter,
 					struct tagCsrRoamInfo *roam_info,
 					uint8_t sta_id,

+ 1 - 0
core/hdd/inc/wlan_hdd_main.h

@@ -1607,6 +1607,7 @@ struct hdd_context_s {
 	/* tdls source timer to enable/disable TDLS on p2p listen */
 	qdf_mc_timer_t tdls_source_timer;
 	bool tdls_umac_comp_active;
+	bool tdls_nap_active;
 	uint8_t beacon_probe_rsp_cnt_per_scan;
 	uint8_t last_scan_reject_session_id;
 	enum scan_reject_states last_scan_reject_reason;

+ 41 - 0
core/hdd/src/wlan_hdd_assoc.c

@@ -59,6 +59,7 @@
 #include <cdp_txrx_flow_ctrl_legacy.h>
 #include <cdp_txrx_peer_ops.h>
 #include <cdp_txrx_misc.h>
+#include <cdp_txrx_ctrl.h>
 #include <wlan_logging_sock_svc.h>
 #include <wlan_hdd_object_manager.h>
 #include <cdp_txrx_handle.h>
@@ -1843,6 +1844,46 @@ QDF_STATUS hdd_change_peer_state(hdd_adapter_t *pAdapter,
 	return QDF_STATUS_SUCCESS;
 }
 
+/**
+ * hdd_update_dp_vdev_flags() - update datapath vdev flags
+ * @cbk_data: callback data
+ * @sta_id: station id
+ * @vdev_param: vdev parameter
+ * @is_link_up: link state up or down
+ *
+ * Return: QDF status
+ */
+QDF_STATUS hdd_update_dp_vdev_flags(void *cbk_data,
+				    uint8_t sta_id,
+				    uint32_t vdev_param,
+				    bool is_link_up)
+{
+	struct cdp_vdev *data_vdev;
+	QDF_STATUS status = QDF_STATUS_SUCCESS;
+	void *soc = cds_get_context(QDF_MODULE_ID_SOC);
+	hdd_context_t *hdd_ctx;
+	struct wlan_objmgr_psoc **psoc;
+
+	if (!cbk_data)
+		return status;
+
+	psoc = cbk_data;
+	hdd_ctx = container_of(psoc, hdd_context_t, hdd_psoc);
+
+	if (!hdd_ctx->tdls_nap_active)
+		return status;
+
+	data_vdev = cdp_peer_get_vdev_by_sta_id(soc, sta_id);
+	if (NULL == data_vdev) {
+		status = QDF_STATUS_E_FAILURE;
+		return status;
+	}
+
+	cdp_txrx_set_vdev_param(soc, data_vdev, vdev_param, is_link_up);
+
+	return status;
+}
+
 /**
  * hdd_roam_register_sta() - register station
  * @pAdapter: pointer to adapter

+ 6 - 0
core/hdd/src/wlan_hdd_main.c

@@ -11243,6 +11243,7 @@ static int hdd_update_tdls_config(hdd_context_t *hdd_ctx)
 	tdls_cfg.tdls_del_sta_req = eWNI_SME_TDLS_DEL_STA_REQ;
 	tdls_cfg.tdls_update_peer_state = WMA_UPDATE_TDLS_PEER_STATE;
 	tdls_cfg.tdls_del_all_peers = eWNI_SME_DEL_ALL_TDLS_PEERS;
+	tdls_cfg.tdls_update_dp_vdev_flags = CDP_UPDATE_TDLS_FLAGS;
 	tdls_cfg.tdls_event_cb = wlan_cfg80211_tdls_event_callback;
 	tdls_cfg.tdls_evt_cb_data = psoc;
 	tdls_cfg.tdls_tl_peer_data = hdd_ctx;
@@ -11252,6 +11253,7 @@ static int hdd_update_tdls_config(hdd_context_t *hdd_ctx)
 	tdls_cfg.tdls_wmm_cb_data = psoc;
 	tdls_cfg.tdls_rx_cb = wlan_cfg80211_tdls_rx_callback;
 	tdls_cfg.tdls_rx_cb_data = psoc;
+	tdls_cfg.tdls_dp_vdev_update = hdd_update_dp_vdev_flags;
 
 	status = ucfg_tdls_update_config(psoc, &tdls_cfg);
 	if (status != QDF_STATUS_SUCCESS) {
@@ -11260,6 +11262,8 @@ static int hdd_update_tdls_config(hdd_context_t *hdd_ctx)
 	}
 
 	hdd_ctx->tdls_umac_comp_active = true;
+	/* disable napier specific tdls data path */
+	hdd_ctx->tdls_nap_active = false;
 
 	return 0;
 }
@@ -11267,6 +11271,8 @@ static int hdd_update_tdls_config(hdd_context_t *hdd_ctx)
 static int hdd_update_tdls_config(hdd_context_t *hdd_ctx)
 {
 	hdd_ctx->tdls_umac_comp_active = false;
+	/* disable napier specific tdls data path */
+	hdd_ctx->tdls_nap_active = false;
 	return 0;
 }
 #endif