qcacld-3.0: Add legacy changes for TDLS UMAC component

Add changes in hdd and mlme modules to support TDLS UMAC
component.

Change-Id: I9e8514e73cebaef566444c9c89e2db2609962b4c
CRs-Fixed: 2035617
diff --git a/core/hdd/inc/wlan_hdd_wmm.h b/core/hdd/inc/wlan_hdd_wmm.h
index 84cd0a8..63e013a 100644
--- a/core/hdd/inc/wlan_hdd_wmm.h
+++ b/core/hdd/inc/wlan_hdd_wmm.h
@@ -343,6 +343,16 @@
 bool hdd_wmm_is_active(hdd_adapter_t *pAdapter);
 
 /**
+ * hdd_wmm_is_acm_allowed() - Function which will determine if WMM is
+ * active on the current connection
+ *
+ * @vdev: vdev object
+ *
+ * Return: true if WMM is enabled, false if WMM is not enabled
+ */
+bool hdd_wmm_is_acm_allowed(struct wlan_objmgr_vdev **vdev);
+
+/**
  * hdd_wmm_addts() - Function which will add a traffic spec at the
  * request of an application
  *
diff --git a/core/hdd/src/wlan_hdd_assoc.c b/core/hdd/src/wlan_hdd_assoc.c
index ca1e94e..37c879c 100644
--- a/core/hdd/src/wlan_hdd_assoc.c
+++ b/core/hdd/src/wlan_hdd_assoc.c
@@ -1919,6 +1919,7 @@
 						);
 
 		hdd_conn_set_authenticated(pAdapter, true);
+		hdd_objmgr_set_peer_mlme_auth_state(pAdapter->hdd_vdev, true);
 	} else {
 		hdd_debug("ULA auth StaId= %d. Changing TL state to CONNECTED at Join time",
 			 pHddStaCtx->conn_info.staId[0]);
@@ -1932,6 +1933,7 @@
 #endif
 						);
 		hdd_conn_set_authenticated(pAdapter, false);
+		hdd_objmgr_set_peer_mlme_auth_state(pAdapter->hdd_vdev, false);
 	}
 	return qdf_status;
 }
@@ -2164,6 +2166,8 @@
 	status = hdd_change_peer_state(adapter, staid, OL_TXRX_PEER_STATE_AUTH,
 			hdd_is_roam_sync_in_progress(roaminfo));
 	hdd_conn_set_authenticated(adapter, true);
+	hdd_objmgr_set_peer_mlme_auth_state(adapter->hdd_vdev, true);
+
 	if ((QDF_STA_MODE == adapter->device_mode) ||
 		(QDF_P2P_CLIENT_MODE == adapter->device_mode)) {
 		sme_ps_enable_auto_ps_timer(
@@ -2814,6 +2818,9 @@
 #endif
 						);
 				hdd_conn_set_authenticated(pAdapter, false);
+				hdd_objmgr_set_peer_mlme_auth_state(
+							pAdapter->hdd_vdev,
+							false);
 			} else {
 				hdd_debug("staId: %d Changing TL state to AUTHENTICATED",
 					 pHddStaCtx->conn_info.staId[0]);
@@ -2828,6 +2835,9 @@
 #endif
 						);
 				hdd_conn_set_authenticated(pAdapter, true);
+				hdd_objmgr_set_peer_mlme_auth_state(
+							pAdapter->hdd_vdev,
+							true);
 			}
 
 			if (QDF_IS_STATUS_SUCCESS(qdf_status)) {
diff --git a/core/hdd/src/wlan_hdd_main.c b/core/hdd/src/wlan_hdd_main.c
index 29ff27a..67c029a 100644
--- a/core/hdd/src/wlan_hdd_main.c
+++ b/core/hdd/src/wlan_hdd_main.c
@@ -11270,6 +11270,10 @@
 	tdls_cfg.tdls_tl_peer_data = hdd_ctx;
 	tdls_cfg.tdls_reg_tl_peer = hdd_tdls_register_tdls_peer;
 	tdls_cfg.tdls_dereg_tl_peer = hdd_tdls_deregister_tdl_peer;
+	tdls_cfg.tdls_wmm_cb = hdd_wmm_is_acm_allowed;
+	tdls_cfg.tdls_wmm_cb_data = psoc;
+	tdls_cfg.tdls_rx_cb = wlan_cfg80211_tdls_rx_callback;
+	tdls_cfg.tdls_rx_cb_data = psoc;
 
 	status = ucfg_tdls_update_config(psoc, &tdls_cfg);
 	if (status != QDF_STATUS_SUCCESS) {
diff --git a/core/hdd/src/wlan_hdd_object_manager.c b/core/hdd/src/wlan_hdd_object_manager.c
index d613b31..bc7e57d 100644
--- a/core/hdd/src/wlan_hdd_object_manager.c
+++ b/core/hdd/src/wlan_hdd_object_manager.c
@@ -316,8 +316,35 @@
 	return -EINVAL;
 }
 
+int hdd_objmgr_set_peer_mlme_auth_state(struct wlan_objmgr_vdev *vdev,
+					bool is_authenticated)
+{
+	struct wlan_objmgr_peer *peer;
+	QDF_STATUS status;
+
+	wlan_vdev_obj_lock(vdev);
+	peer = wlan_vdev_get_bsspeer(vdev);
+	wlan_vdev_obj_unlock(vdev);
+
+	if (!peer) {
+		hdd_err("peer is null");
+
+		return -EINVAL;
+	}
+	status = wlan_objmgr_peer_try_get_ref(peer, WLAN_TDLS_NB_ID);
+	if (status != QDF_STATUS_SUCCESS)
+		return -EINVAL;
+
+	wlan_peer_obj_lock(peer);
+	wlan_peer_mlme_set_auth_state(peer, is_authenticated);
+	wlan_peer_obj_unlock(peer);
+
+	wlan_objmgr_peer_release_ref(peer, WLAN_TDLS_NB_ID);
+	return 0;
+}
+
 int hdd_objmgr_set_peer_mlme_state(struct wlan_objmgr_vdev *vdev,
-				   enum wlan_peer_state peer_state)
+	enum wlan_peer_state peer_state)
 {
 	struct wlan_objmgr_peer *peer;
 
diff --git a/core/hdd/src/wlan_hdd_object_manager.h b/core/hdd/src/wlan_hdd_object_manager.h
index 2d18c77..610ee49 100644
--- a/core/hdd/src/wlan_hdd_object_manager.h
+++ b/core/hdd/src/wlan_hdd_object_manager.h
@@ -183,6 +183,18 @@
 				  uint8_t *mac_addr);
 
 /**
+ * hdd_objmgr_set_peer_mlme_auth_state() - set the peer mlme auth state
+ * @vdev: vdev pointer
+ * @is_authenticated: Peer mlme auth state true/false
+ *
+ * This API set the peer mlme auth state
+ *
+ * Return: 0 for success, negative error code for failure
+ */
+int hdd_objmgr_set_peer_mlme_auth_state(struct wlan_objmgr_vdev *vdev,
+					bool is_authenticated);
+
+/**
  * hdd_objmgr_set_peer_mlme_state() - set the peer mlme state
  * @vdev: vdev pointer
  * @peer_state: Peer mlme state
diff --git a/core/hdd/src/wlan_hdd_tdls.c b/core/hdd/src/wlan_hdd_tdls.c
index 99be041..67d7b30 100644
--- a/core/hdd/src/wlan_hdd_tdls.c
+++ b/core/hdd/src/wlan_hdd_tdls.c
@@ -4110,6 +4110,13 @@
 
 	hdd_sta_ctx = WLAN_HDD_GET_STATION_CTX_PTR(pAdapter);
 
+#ifdef CONVERGED_TDLS_ENABLE
+	return wlan_cfg80211_tdls_mgmt(pHddCtx->hdd_pdev, dev, peer,
+				       action_code, dialog_token,
+				       status_code, peer_capability,
+				       buf, len);
+#endif
+
 	/*
 	 * STA or P2P client should be connected and authenticated before
 	 *  sending any TDLS frames
diff --git a/core/hdd/src/wlan_hdd_wmm.c b/core/hdd/src/wlan_hdd_wmm.c
index afaf029..10c042f 100644
--- a/core/hdd/src/wlan_hdd_wmm.c
+++ b/core/hdd/src/wlan_hdd_wmm.c
@@ -2065,6 +2065,25 @@
 	}
 }
 
+bool hdd_wmm_is_acm_allowed(struct wlan_objmgr_vdev **vdev)
+{
+	hdd_adapter_t *adapter;
+	struct hdd_wmm_ac_status *wmm_ac_status;
+
+
+	adapter = container_of(vdev, hdd_adapter_t, hdd_vdev);
+	if (NULL == adapter) {
+		hdd_err("failed, hdd adapter is NULL");
+		return false;
+	}
+	wmm_ac_status = adapter->hddWmmStatus.wmmAcStatus;
+
+	if (hdd_wmm_is_active(adapter) &&
+	    !(wmm_ac_status[OL_TX_WMM_AC_VI].wmmAcAccessAllowed))
+		return false;
+	return true;
+}
+
 /**
  * hdd_wmm_addts() - Function which will add a traffic spec at the
  * request of an application