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