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,