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
diff --git a/core/mac/inc/sir_api.h b/core/mac/inc/sir_api.h
index 7ff2d76..6468f06 100644
--- a/core/mac/inc/sir_api.h
+++ b/core/mac/inc/sir_api.h
@@ -427,6 +427,9 @@
 	uint8_t sessionId;      /* To support BT-AMP */
 	uint16_t transactionId; /* To support BT-AMP */
 	tSirResultCodes statusCode;
+#ifdef CONVERGED_TDLS_ENABLE
+	struct wlan_objmgr_psoc *psoc;
+#endif
 } tSirSmeRsp, *tpSirSmeRsp;
 
 /* / Definition for indicating all modules ready on STA */
@@ -3446,6 +3449,9 @@
 	uint16_t length;
 	uint8_t sessionId;      /* Session ID */
 	uint32_t txCompleteStatus;
+#ifdef CONVERGED_TDLS_ENABLE
+	struct wlan_objmgr_psoc *psoc;
+#endif
 } tSirMgmtTxCompletionInd, *tpSirMgmtTxCompletionInd;
 
 typedef struct sSirTdlsEventnotify {
diff --git a/core/mac/src/pe/lim/lim_process_tdls.c b/core/mac/src/pe/lim/lim_process_tdls.c
index 3d6a98c..c4b7bbf 100644
--- a/core/mac/src/pe/lim/lim_process_tdls.c
+++ b/core/mac/src/pe/lim/lim_process_tdls.c
@@ -2889,6 +2889,56 @@
 	return status;
 }
 
+#ifdef CONVERGED_TDLS_ENABLE
+/**
+ * lim_send_tdls_comp_mgmt_rsp() - Send Response to upper layers
+ * @mac_ctx:          Pointer to Global MAC structure
+ * @msg_type:         Indicates message type
+ * @result_code:       Indicates the result of previously issued
+ *                    eWNI_SME_msg_type_REQ message
+ *
+ * This function is called by lim_process_sme_req_messages() to send
+ * eWNI_SME_START_RSP, eWNI_SME_STOP_BSS_RSP
+ * or eWNI_SME_SWITCH_CHL_RSP messages to applications above MAC
+ * Software.
+ *
+ * Return: None
+ */
+
+static void
+lim_send_tdls_comp_mgmt_rsp(tpAniSirGlobal mac_ctx, uint16_t msg_type,
+	 tSirResultCodes result_code, uint8_t sme_session_id,
+	 uint16_t sme_transaction_id)
+{
+	struct scheduler_msg msg;
+	tSirSmeRsp *sme_rsp;
+
+	lim_log(mac_ctx, LOG1, FL("Sending message %s with reasonCode %s"),
+		lim_msg_str(msg_type), lim_result_code_str(result_code));
+
+	sme_rsp = qdf_mem_malloc(sizeof(tSirSmeRsp));
+	if (NULL == sme_rsp) {
+		/* Buffer not available. Log error */
+		QDF_TRACE(QDF_MODULE_ID_PE, LOGP,
+			FL("call to AllocateMemory failed for eWNI_SME_*_RSP"));
+		return;
+	}
+
+	sme_rsp->messageType = msg_type;
+	sme_rsp->length = sizeof(tSirSmeRsp);
+	sme_rsp->statusCode = result_code;
+
+	sme_rsp->sessionId = sme_session_id;
+	sme_rsp->transactionId = sme_transaction_id;
+
+	msg.type = msg_type;
+	sme_rsp->psoc = mac_ctx->psoc;
+	msg.bodyptr = sme_rsp;
+	msg.callback = tgt_tdls_send_mgmt_rsp;
+	scheduler_post_msg(QDF_MODULE_ID_TARGET_IF, &msg);
+
+}
+#endif
 /**
  * lim_process_sme_tdls_mgmt_send_req() - send out tdls management frames
  *
@@ -3005,9 +3055,15 @@
 	}
 
 lim_tdls_send_mgmt_error:
+#ifdef CONVERGED_TDLS_ENABLE
+	lim_send_tdls_comp_mgmt_rsp(mac_ctx, eWNI_SME_TDLS_SEND_MGMT_RSP,
+		 result_code, send_req->sessionId,
+		 send_req->transactionId);
+#else
 	lim_send_sme_rsp(mac_ctx, eWNI_SME_TDLS_SEND_MGMT_RSP,
-			 result_code, send_req->sessionId,
-			 send_req->transactionId);
+		 result_code, send_req->sessionId,
+		 send_req->transactionId);
+#endif
 
 	return eSIR_SUCCESS;
 }
diff --git a/core/mac/src/pe/lim/lim_send_sme_rsp_messages.c b/core/mac/src/pe/lim/lim_send_sme_rsp_messages.c
index 034041e..5426882 100644
--- a/core/mac/src/pe/lim/lim_send_sme_rsp_messages.c
+++ b/core/mac/src/pe/lim/lim_send_sme_rsp_messages.c
@@ -60,6 +60,9 @@
 #include "nan_datapath.h"
 #include "lim_assoc_utils.h"
 
+#include "wlan_tdls_tgt_api.h"
+
+
 static void lim_handle_join_rsp_status(tpAniSirGlobal mac_ctx,
 	tpPESession session_entry, tSirResultCodes result_code,
 	tpSirSmeJoinRsp sme_join_rsp);
@@ -1305,8 +1308,15 @@
 	mmhMsg.bodyptr = pSirMgmtTxCompletionInd;
 	mmhMsg.bodyval = 0;
 
+#ifdef CONVERGED_TDLS_ENABLE
+	pSirMgmtTxCompletionInd->psoc = pMac->psoc;
+	mmhMsg.callback = tgt_tdls_send_mgmt_tx_completion;
+	scheduler_post_msg(QDF_MODULE_ID_TARGET_IF, &mmhMsg);
+	return;
+#else
 	lim_sys_process_mmh_msg_api(pMac, &mmhMsg, ePROT);
 	return;
+#endif
 } /*** end lim_send_sme_tdls_delete_all_peer_ind() ***/
 
 void lim_send_sme_tdls_event_notify(tpAniSirGlobal pMac, uint16_t msgType,