TDLS : Host Changes supporting PUAPSD implementation.
This commit has the host changes to support the PUAPSD
implementation in the firmware.
Change-Id: I60a33f8067ea316d5179374cf6ec41400ceabbf2
CRs-fixed: 488980
diff --git a/CORE/HDD/inc/wlan_hdd_cfg.h b/CORE/HDD/inc/wlan_hdd_cfg.h
index 6b0ed89..24e76d1 100644
--- a/CORE/HDD/inc/wlan_hdd_cfg.h
+++ b/CORE/HDD/inc/wlan_hdd_cfg.h
@@ -1646,6 +1646,26 @@
#define CFG_TDLS_RSSI_TEARDOWN_THRESHOLD_MIN ( -120 )
#define CFG_TDLS_RSSI_TEARDOWN_THRESHOLD_MAX ( 0 )
#define CFG_TDLS_RSSI_TEARDOWN_THRESHOLD_DEFAULT ( -75 )
+
+#define CFG_TDLS_QOS_WMM_UAPSD_MASK_NAME "gTDLSUapsdMask" // ACs to setup U-APSD for TDLS Sta
+#define CFG_TDLS_QOS_WMM_UAPSD_MASK_MIN (0)
+#define CFG_TDLS_QOS_WMM_UAPSD_MASK_MAX (15)
+#define CFG_TDLS_QOS_WMM_UAPSD_MASK_DEFAULT (0)
+
+#define CFG_TDLS_BUFFER_STA_SUPPORT_ENABLE "gEnableTDLSBufferSta"
+#define CFG_TDLS_BUFFER_STA_SUPPORT_ENABLE_MIN (0)
+#define CFG_TDLS_BUFFER_STA_SUPPORT_ENABLE_MAX (1)
+#define CFG_TDLS_BUFFER_STA_SUPPORT_ENABLE_DEFAULT (1)
+
+#define CFG_TDLS_PUAPSD_INACTIVITY_TIME "gTDLSPuapsdInactivityTime"
+#define CFG_TDLS_PUAPSD_INACTIVITY_TIME_MIN (0)
+#define CFG_TDLS_PUAPSD_INACTIVITY_TIME_MAX (10)
+#define CFG_TDLS_PUAPSD_INACTIVITY_TIME_DEFAULT (0)
+
+#define CFG_TDLS_PUAPSD_RX_FRAME_THRESHOLD "gTDLSPuapsdRxFrameThreshold"
+#define CFG_TDLS_PUAPSD_RX_FRAME_THRESHOLD_MIN (10)
+#define CFG_TDLS_PUAPSD_RX_FRAME_THRESHOLD_MAX (20)
+#define CFG_TDLS_PUAPSD_RX_FRAME_THRESHOLD_DEFAULT (10)
#endif
#ifdef WLAN_ACTIVEMODE_OFFLOAD_FEATURE
@@ -2108,6 +2128,10 @@
v_U32_t fTDLSRSSIHysteresis;
v_S31_t fTDLSRSSITriggerThreshold;
v_S31_t fTDLSRSSITeardownThreshold;
+ v_U32_t fTDLSUapsdMask; // what ACs to setup U-APSD for TDLS
+ v_U32_t fEnableTDLSBufferSta;
+ v_U32_t fTDLSPuapsdInactivityTimer;
+ v_U32_t fTDLSRxFrameThreshold;
#endif
v_U32_t enableLpwrImgTransition;
#ifdef WLAN_SOFTAP_VSTA_FEATURE
diff --git a/CORE/HDD/inc/wlan_hdd_main.h b/CORE/HDD/inc/wlan_hdd_main.h
index 7a9440a..698d5e5 100644
--- a/CORE/HDD/inc/wlan_hdd_main.h
+++ b/CORE/HDD/inc/wlan_hdd_main.h
@@ -127,6 +127,9 @@
/** Maximum time(ms) to wait for tdls del sta to complete **/
#define WAIT_TIME_TDLS_DEL_STA 1500
+/** Maximum time(ms) to wait for Link Establish Req to complete **/
+#define WAIT_TIME_TDLS_LINK_ESTABLISH_REQ 1500
+
/** Maximum time(ms) to wait for tdls mgmt to complete **/
#define WAIT_TIME_TDLS_MGMT 11000
@@ -760,6 +763,7 @@
struct completion tdls_add_station_comp;
struct completion tdls_del_station_comp;
struct completion tdls_mgmt_comp;
+ struct completion tdls_link_establish_req_comp;
eHalStatus tdlsAddStaStatus;
#endif
/* Track whether the linkup handling is needed */
diff --git a/CORE/HDD/inc/wlan_hdd_tdls.h b/CORE/HDD/inc/wlan_hdd_tdls.h
index f461757..d067bca 100644
--- a/CORE/HDD/inc/wlan_hdd_tdls.h
+++ b/CORE/HDD/inc/wlan_hdd_tdls.h
@@ -159,6 +159,9 @@
tANI_U16 discovery_attempt;
tANI_U16 tx_pkt;
tANI_U16 rx_pkt;
+ tANI_U8 uapsdQueues;
+ tANI_U8 maxSp;
+ tANI_U8 isBufSta;
vos_timer_t peerIdleTimer;
vos_timer_t initiatorWaitTimeoutTimer;
} hddTdlsPeer_t;
@@ -188,6 +191,8 @@
hddTdlsPeer_t *wlan_hdd_tdls_find_all_peer(hdd_context_t *pHddCtx, u8 *mac);
+int wlan_hdd_tdls_get_link_establish_params(hdd_adapter_t *pAdapter, u8 *mac,
+ tCsrTdlsLinkEstablishParams* tdlsLinkEstablishParams);
hddTdlsPeer_t *wlan_hdd_tdls_get_peer(hdd_adapter_t *pAdapter, u8 *mac);
int wlan_hdd_tdls_set_cap(hdd_adapter_t *pAdapter, u8* mac, tTDLSCapType cap);
@@ -198,6 +203,12 @@
int wlan_hdd_tdls_recv_discovery_resp(hdd_adapter_t *pAdapter, u8 *mac);
+int wlan_hdd_tdls_set_peer_caps(hdd_adapter_t *pAdapter,
+ u8 *mac,
+ tANI_U8 uapsdQueues,
+ tANI_U8 maxSp,
+ tANI_BOOLEAN isBufSta);
+
int wlan_hdd_tdls_set_rssi(hdd_adapter_t *pAdapter, u8 *mac, tANI_S8 rxRssi);
int wlan_hdd_tdls_set_responder(hdd_adapter_t *pAdapter, u8 *mac, tANI_U8 responder);
diff --git a/CORE/HDD/inc/wlan_hdd_wmm.h b/CORE/HDD/inc/wlan_hdd_wmm.h
index a51a4b6..fecb6b8 100644
--- a/CORE/HDD/inc/wlan_hdd_wmm.h
+++ b/CORE/HDD/inc/wlan_hdd_wmm.h
@@ -1,46 +1,23 @@
/*
- * Copyright (c) 2012-2013, The Linux Foundation. All rights reserved.
- *
- * Previously licensed under the ISC license by Qualcomm Atheros, Inc.
- *
- *
- * Permission to use, copy, modify, and/or distribute this software for
- * any purpose with or without fee is hereby granted, provided that the
- * above copyright notice and this permission notice appear in all
- * copies.
- *
- * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL
- * WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED
- * WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE
- * AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL
- * DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR
- * PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER
- * TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
- * PERFORMANCE OF THIS SOFTWARE.
- */
-/*
- * Copyright (c) 2012, The Linux Foundation. All rights reserved.
- *
- * Previously licensed under the ISC license by Qualcomm Atheros, Inc.
- *
- *
- * Permission to use, copy, modify, and/or distribute this software for
- * any purpose with or without fee is hereby granted, provided that the
- * above copyright notice and this permission notice appear in all
- * copies.
- *
- * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL
- * WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED
- * WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE
- * AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL
- * DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR
- * PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER
- * TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
- * PERFORMANCE OF THIS SOFTWARE.
- */
-
-/*
- * */
+ * Copyright (c) 2012-2013, The Linux Foundation. All rights reserved.
+ *
+ * Previously licensed under the ISC license by Qualcomm Atheros, Inc.
+ *
+ *
+ * Permission to use, copy, modify, and/or distribute this software for
+ * any purpose with or without fee is hereby granted, provided that the
+ * above copyright notice and this permission notice appear in all
+ * copies.
+ *
+ * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL
+ * WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED
+ * WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE
+ * AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL
+ * DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR
+ * PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER
+ * TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
+ * PERFORMANCE OF THIS SOFTWARE.
+*/
#ifndef _WLAN_HDD_WMM_H
#define _WLAN_HDD_WMM_H
/*============================================================================
@@ -65,9 +42,9 @@
The remaining functions are utility functions for information hiding.
- Copyright (c) 2008-9 QUALCOMM Incorporated.
+ Copyright (c) 2008-9 Qualcomm Technologies, Inc.
All Rights Reserved.
- Qualcomm Confidential and Proprietary
+ Qualcomm Technologies Confidential and Proprietary
============================================================================*/
/* $Header$ */
@@ -140,6 +117,12 @@
} hdd_wmm_user_mode_t;
+// UAPSD Mask bits
+// (Bit0:VO; Bit1:VI; Bit2:BK; Bit3:BE all other bits are ignored)
+#define HDD_AC_VO 0x1
+#define HDD_AC_VI 0x2
+#define HDD_AC_BK 0x4
+#define HDD_AC_BE 0x8
/*! @brief WMM Qos instance control block
*/
diff --git a/CORE/HDD/src/wlan_hdd_assoc.c b/CORE/HDD/src/wlan_hdd_assoc.c
index 742c32f..81162c9 100644
--- a/CORE/HDD/src/wlan_hdd_assoc.c
+++ b/CORE/HDD/src/wlan_hdd_assoc.c
@@ -2115,6 +2115,7 @@
roamResult == eCSR_ROAM_RESULT_TEARDOWN_TDLS_PEER_IND ? "DEL_TDLS_PEER_IND" :
roamResult == eCSR_ROAM_RESULT_DELETE_ALL_TDLS_PEER_IND? "DEL_ALL_TDLS_PEER_IND" :
roamResult == eCSR_ROAM_RESULT_UPDATE_TDLS_PEER? "UPDATE_TDLS_PEER" :
+ roamResult == eCSR_ROAM_RESULT_LINK_ESTABLISH_REQ_RSP? "LINK_ESTABLISH_REQ_RSP" :
#ifdef FEATURE_WLAN_TDLS_OXYGEN_DISAPPEAR_AP
roamResult == eCSR_ROAM_RESULT_TDLS_DISAPPEAR_AP_IND? "DISAPPEAR_AP_DEREG_STA" :
#endif
@@ -2207,6 +2208,16 @@
complete(&pAdapter->tdls_add_station_comp);
break;
}
+ case eCSR_ROAM_RESULT_LINK_ESTABLISH_REQ_RSP:
+ {
+ if (eSIR_SME_SUCCESS != pRoamInfo->statusCode)
+ {
+ VOS_TRACE(VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_ERROR,
+ "%s: Link Establish Request failed. %d", __func__, pRoamInfo->statusCode);
+ }
+ complete(&pAdapter->tdls_link_establish_req_comp);
+ break;
+ }
case eCSR_ROAM_RESULT_DELETE_TDLS_PEER:
{
hddTdlsPeer_t *curr_peer;
diff --git a/CORE/HDD/src/wlan_hdd_cfg.c b/CORE/HDD/src/wlan_hdd_cfg.c
index 98fc710..688207f 100644
--- a/CORE/HDD/src/wlan_hdd_cfg.c
+++ b/CORE/HDD/src/wlan_hdd_cfg.c
@@ -2134,6 +2134,34 @@
CFG_TDLS_RSSI_TEARDOWN_THRESHOLD_DEFAULT,
CFG_TDLS_RSSI_TEARDOWN_THRESHOLD_MIN,
CFG_TDLS_RSSI_TEARDOWN_THRESHOLD_MAX ),
+
+REG_VARIABLE( CFG_TDLS_QOS_WMM_UAPSD_MASK_NAME , WLAN_PARAM_HexInteger,
+ hdd_config_t, fTDLSUapsdMask,
+ VAR_FLAGS_OPTIONAL | VAR_FLAGS_RANGE_CHECK_ASSUME_DEFAULT,
+ CFG_TDLS_QOS_WMM_UAPSD_MASK_DEFAULT,
+ CFG_TDLS_QOS_WMM_UAPSD_MASK_MIN,
+ CFG_TDLS_QOS_WMM_UAPSD_MASK_MAX ),
+
+REG_VARIABLE( CFG_TDLS_BUFFER_STA_SUPPORT_ENABLE, WLAN_PARAM_Integer,
+ hdd_config_t, fEnableTDLSBufferSta,
+ VAR_FLAGS_OPTIONAL | VAR_FLAGS_RANGE_CHECK_ASSUME_DEFAULT,
+ CFG_TDLS_BUFFER_STA_SUPPORT_ENABLE_DEFAULT,
+ CFG_TDLS_BUFFER_STA_SUPPORT_ENABLE_MIN,
+ CFG_TDLS_BUFFER_STA_SUPPORT_ENABLE_MAX ),
+
+REG_VARIABLE( CFG_TDLS_PUAPSD_INACTIVITY_TIME, WLAN_PARAM_Integer,
+ hdd_config_t, fTDLSPuapsdInactivityTimer,
+ VAR_FLAGS_OPTIONAL | VAR_FLAGS_RANGE_CHECK_ASSUME_DEFAULT,
+ CFG_TDLS_PUAPSD_INACTIVITY_TIME_DEFAULT,
+ CFG_TDLS_PUAPSD_INACTIVITY_TIME_MIN,
+ CFG_TDLS_PUAPSD_INACTIVITY_TIME_MAX ),
+
+REG_VARIABLE( CFG_TDLS_PUAPSD_RX_FRAME_THRESHOLD, WLAN_PARAM_Integer,
+ hdd_config_t, fTDLSRxFrameThreshold,
+ VAR_FLAGS_OPTIONAL | VAR_FLAGS_RANGE_CHECK_ASSUME_DEFAULT,
+ CFG_TDLS_PUAPSD_RX_FRAME_THRESHOLD_DEFAULT,
+ CFG_TDLS_PUAPSD_RX_FRAME_THRESHOLD_MIN,
+ CFG_TDLS_PUAPSD_RX_FRAME_THRESHOLD_MAX ),
#endif
#ifdef WLAN_SOFTAP_VSTA_FEATURE
@@ -3777,6 +3805,34 @@
hddLog(LOGE, "Could not pass on WNI_CFG_MAX_MEDIUM_TIME to CCM");
}
+#ifdef FEATURE_WLAN_TDLS
+
+ if (ccmCfgSetInt(pHddCtx->hHal, WNI_CFG_TDLS_QOS_WMM_UAPSD_MASK, pConfig->fTDLSUapsdMask,
+ NULL, eANI_BOOLEAN_FALSE)==eHAL_STATUS_FAILURE)
+ {
+ fStatus = FALSE;
+ hddLog(LOGE, "Could not pass on WNI_CFG_TDLS_QOS_WMM_UAPSD_MASK to CCM\n");
+ }
+ if (ccmCfgSetInt(pHddCtx->hHal, WNI_CFG_TDLS_BUF_STA_ENABLED, pConfig->fEnableTDLSBufferSta,
+ NULL, eANI_BOOLEAN_FALSE)==eHAL_STATUS_FAILURE)
+ {
+ fStatus = FALSE;
+ hddLog(LOGE, "Could not pass on WNI_CFG_TDLS_BUF_STA_ENABLED to CCM\n");
+ }
+ if (ccmCfgSetInt(pHddCtx->hHal, WNI_CFG_TDLS_PUAPSD_INACT_TIME, pConfig->fTDLSPuapsdInactivityTimer,
+ NULL, eANI_BOOLEAN_FALSE)==eHAL_STATUS_FAILURE)
+ {
+ fStatus = FALSE;
+ hddLog(LOGE, "Could not pass on WNI_CFG_TDLS_PUAPSD_INACT_TIME to CCM\n");
+ }
+ if (ccmCfgSetInt(pHddCtx->hHal, WNI_CFG_TDLS_RX_FRAME_THRESHOLD, pConfig->fTDLSRxFrameThreshold,
+ NULL, eANI_BOOLEAN_FALSE)==eHAL_STATUS_FAILURE)
+ {
+ fStatus = FALSE;
+ hddLog(LOGE, "Could not pass on WNI_CFG_TDLS_RX_FRAME_THRESHOLD to CCM\n");
+ }
+#endif
+
return fStatus;
}
diff --git a/CORE/HDD/src/wlan_hdd_cfg80211.c b/CORE/HDD/src/wlan_hdd_cfg80211.c
index f474e8c..9564479 100644
--- a/CORE/HDD/src/wlan_hdd_cfg80211.c
+++ b/CORE/HDD/src/wlan_hdd_cfg80211.c
@@ -83,6 +83,7 @@
#include <qc_sap_ioctl.h>
#ifdef FEATURE_WLAN_TDLS
#include "wlan_hdd_tdls.h"
+#include "wlan_hdd_wmm.h"
#endif
#include "wlan_nv.h"
@@ -3043,13 +3044,13 @@
isBufSta = 1;
}
}
- //status = wlan_hdd_tdls_set_peer_caps( mac, params->uapsd_queues,
- // params->max_sp, isBufSta);
- //if (VOS_STATUS_SUCCESS != status) {
- // VOS_TRACE(VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_ERROR,
- // "%s: wlan_hdd_tdls_set_peer_caps failed!", __func__);
- // return -EINVAL;
- //}
+ status = wlan_hdd_tdls_set_peer_caps( pAdapter, mac, params->uapsd_queues,
+ params->max_sp, isBufSta);
+ if (VOS_STATUS_SUCCESS != status) {
+ VOS_TRACE(VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_ERROR,
+ "%s: wlan_hdd_tdls_set_peer_caps failed!", __func__);
+ return -EINVAL;
+ }
status = wlan_hdd_tdls_add_station(wiphy, dev, mac, 1, &StaParams);
if (VOS_STATUS_SUCCESS != status) {
@@ -7586,6 +7587,7 @@
case NL80211_TDLS_ENABLE_LINK:
{
VOS_STATUS status;
+ tCsrTdlsLinkEstablishParams tdlsLinkEstablishParams;
if (!TDLS_STA_INDEX_VALID(pTdlsPeer->staId))
{
@@ -7597,6 +7599,26 @@
if (eTDLS_LINK_CONNECTED != pTdlsPeer->link_status)
{
+ if (0 != wlan_hdd_tdls_get_link_establish_params(pAdapter, peer,&tdlsLinkEstablishParams)) {
+ return -EINVAL;
+ }
+ INIT_COMPLETION(pAdapter->tdls_link_establish_req_comp);
+
+ sme_SendTdlsLinkEstablishParams(WLAN_HDD_GET_HAL_CTX(pAdapter),
+ pAdapter->sessionId, peer, &tdlsLinkEstablishParams);
+ /* Send TDLS peer UAPSD capabilities to the firmware and
+ * register with the TL on after the response for this operation
+ * is received .
+ */
+ status = wait_for_completion_interruptible_timeout(&pAdapter->tdls_link_establish_req_comp,
+ msecs_to_jiffies(WAIT_TIME_TDLS_LINK_ESTABLISH_REQ));
+ if (status <= 0)
+ {
+ VOS_TRACE(VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_ERROR,
+ "%s: Link Establish Request Faled Status %ld",
+ __func__, status);
+ return -EINVAL;
+ }
wlan_hdd_tdls_set_peer_link_status(pTdlsPeer, eTDLS_LINK_CONNECTED);
/* Mark TDLS client Authenticated .*/
status = WLANTL_ChangeSTAState( pHddCtx->pvosContext,
@@ -7619,6 +7641,68 @@
wlan_hdd_tdls_increment_peer_count(pAdapter);
}
wlan_hdd_tdls_check_bmps(pAdapter);
+
+ /* Update TL about the UAPSD masks , to route the packets to firmware */
+ if ( TRUE == pHddCtx->cfg_ini->fEnableTDLSBufferSta &&
+ pHddCtx->cfg_ini->fTDLSUapsdMask & HDD_AC_VO )
+ {
+ status = WLANTL_EnableUAPSDForAC( (WLAN_HDD_GET_CTX(pAdapter))->pvosContext,
+ pTdlsPeer->staId,
+ WLANTL_AC_VO,
+ 7,
+ 7,
+ 0,
+ 0,
+ WLANTL_BI_DIR );
+
+ VOS_ASSERT( VOS_IS_STATUS_SUCCESS( status ));
+ }
+
+ if ( TRUE == pHddCtx->cfg_ini->fEnableTDLSBufferSta &&
+ pHddCtx->cfg_ini->fTDLSUapsdMask & HDD_AC_VI )
+ {
+ status = WLANTL_EnableUAPSDForAC( (WLAN_HDD_GET_CTX(pAdapter))->pvosContext,
+ pTdlsPeer->staId,
+ WLANTL_AC_VI,
+ 5,
+ 5,
+ 0,
+ 0,
+ WLANTL_BI_DIR );
+
+ VOS_ASSERT( VOS_IS_STATUS_SUCCESS( status ));
+ }
+
+ if ( TRUE == pHddCtx->cfg_ini->fEnableTDLSBufferSta &&
+ pHddCtx->cfg_ini->fTDLSUapsdMask & HDD_AC_BK )
+ {
+ status = WLANTL_EnableUAPSDForAC( (WLAN_HDD_GET_CTX(pAdapter))->pvosContext,
+ pTdlsPeer->staId,
+ WLANTL_AC_BK,
+ 2,
+ 2,
+ 0,
+ 0,
+ WLANTL_BI_DIR );
+
+ VOS_ASSERT( VOS_IS_STATUS_SUCCESS( status ));
+ }
+
+ if ( TRUE == pHddCtx->cfg_ini->fEnableTDLSBufferSta &&
+ pHddCtx->cfg_ini->fTDLSUapsdMask & HDD_AC_BE )
+ {
+ status = WLANTL_EnableUAPSDForAC( (WLAN_HDD_GET_CTX(pAdapter))->pvosContext,
+ pTdlsPeer->staId,
+ WLANTL_AC_BE,
+ 3,
+ 3,
+ 0,
+ 0,
+ WLANTL_BI_DIR );
+
+ VOS_ASSERT( VOS_IS_STATUS_SUCCESS( status ));
+ }
+
}
}
diff --git a/CORE/HDD/src/wlan_hdd_main.c b/CORE/HDD/src/wlan_hdd_main.c
index 04aa401..033bce8 100644
--- a/CORE/HDD/src/wlan_hdd_main.c
+++ b/CORE/HDD/src/wlan_hdd_main.c
@@ -3071,6 +3071,7 @@
init_completion(&pAdapter->tdls_add_station_comp);
init_completion(&pAdapter->tdls_del_station_comp);
init_completion(&pAdapter->tdls_mgmt_comp);
+ init_completion(&pAdapter->tdls_link_establish_req_comp);
#endif
init_completion(&pHddCtx->mc_sus_event_var);
init_completion(&pHddCtx->tx_sus_event_var);
diff --git a/CORE/HDD/src/wlan_hdd_tdls.c b/CORE/HDD/src/wlan_hdd_tdls.c
index 6e3519c..0ab884a 100644
--- a/CORE/HDD/src/wlan_hdd_tdls.c
+++ b/CORE/HDD/src/wlan_hdd_tdls.c
@@ -904,6 +904,40 @@
return 0;
}
+int wlan_hdd_tdls_set_peer_caps(hdd_adapter_t *pAdapter,
+ u8 *mac,
+ tANI_U8 uapsdQueues,
+ tANI_U8 maxSp,
+ tANI_BOOLEAN isBufSta)
+{
+ hddTdlsPeer_t *curr_peer;
+
+ curr_peer = wlan_hdd_tdls_get_peer(pAdapter, mac);
+ if (curr_peer == NULL)
+ return -1;
+
+ curr_peer->uapsdQueues = uapsdQueues;
+ curr_peer->maxSp = maxSp;
+ curr_peer->isBufSta = isBufSta;
+ return 0;
+}
+
+int wlan_hdd_tdls_get_link_establish_params(hdd_adapter_t *pAdapter, u8 *mac,
+ tCsrTdlsLinkEstablishParams* tdlsLinkEstablishParams)
+{
+ hddTdlsPeer_t *curr_peer;
+
+ curr_peer = wlan_hdd_tdls_get_peer(pAdapter, mac);
+ if (curr_peer == NULL)
+ return -1;
+
+ tdlsLinkEstablishParams->isResponder = curr_peer->is_responder;
+ tdlsLinkEstablishParams->uapsdQueues = curr_peer->uapsdQueues;
+ tdlsLinkEstablishParams->maxSp = curr_peer->maxSp;
+ tdlsLinkEstablishParams->isBufSta = curr_peer->isBufSta;
+ return 0;
+}
+
int wlan_hdd_tdls_set_rssi(hdd_adapter_t *pAdapter, u8 *mac, tANI_S8 rxRssi)
{
hddTdlsPeer_t *curr_peer;
diff --git a/CORE/HDD/src/wlan_hdd_wmm.c b/CORE/HDD/src/wlan_hdd_wmm.c
index b9faa76..40f59f8 100644
--- a/CORE/HDD/src/wlan_hdd_wmm.c
+++ b/CORE/HDD/src/wlan_hdd_wmm.c
@@ -100,13 +100,6 @@
#endif
-// UAPSD Mask bits
-// (Bit0:VO; Bit1:VI; Bit2:BK; Bit3:BE all other bits are ignored)
-#define HDD_AC_VO 0x1
-#define HDD_AC_VI 0x2
-#define HDD_AC_BK 0x4
-#define HDD_AC_BE 0x8
-
#define WLAN_HDD_MAX_DSCP 0x3f
static sme_QosWmmUpType hddWmmDscpToUpMap[WLAN_HDD_MAX_DSCP+1];
diff --git a/CORE/MAC/inc/aniGlobal.h b/CORE/MAC/inc/aniGlobal.h
index fd78b7a..1c6aba9 100644
--- a/CORE/MAC/inc/aniGlobal.h
+++ b/CORE/MAC/inc/aniGlobal.h
@@ -664,6 +664,8 @@
tLimAdmitPolicyInfo admitPolicyInfo;
vos_lock_t lkPeGlobalLock;
tANI_U8 disableLDPCWithTxbfAP;
+ tANI_U8 gLimTDLSBufStaEnabled;
+ tANI_U8 gLimTDLSUapsdMask;
diff --git a/CORE/MAC/inc/sirApi.h b/CORE/MAC/inc/sirApi.h
index 8d324c6..0dfddd0 100644
--- a/CORE/MAC/inc/sirApi.h
+++ b/CORE/MAC/inc/sirApi.h
@@ -2319,6 +2319,14 @@
tANI_U32 bssIdx;
} tSirP2PNoaStart, *tpSirP2PNoaStart;
+typedef struct sSirTdlsInd
+{
+ tANI_U16 status;
+ tANI_U16 assocId;
+ tANI_U16 staIdx;
+ tANI_U16 reasonCode;
+} tSirTdlsInd, *tpSirTdlsInd;
+
typedef struct sSirP2PNoaAttr
{
#ifdef ANI_BIG_BYTE_ENDIAN
@@ -3877,6 +3885,33 @@
tANI_U8 bcastSig;
eTdlsAddOper tdlsAddOper;
} tSirTdlsAddStaRsp ;
+
+/* TDLS Request struct SME-->PE */
+typedef struct
+{
+ tANI_U16 messageType; // eWNI_SME_TDLS_LINK_ESTABLISH_REQ
+ tANI_U16 length;
+ tANI_U8 sessionId; // Session ID
+ tANI_U16 transactionId; // Transaction ID for cmd
+ tANI_U8 uapsdQueues; // Peer's uapsd Queues Information
+ tANI_U8 maxSp; // Peer's Supported Maximum Service Period
+ tANI_U8 isBufSta; // Does Peer Support as Buffer Station.
+ tANI_U8 isResponder; // Is Peer a responder.
+ tSirMacAddr bssid; // For multi-session, for PE to locate peSession ID
+ tSirMacAddr peerMac;
+}tSirTdlsLinkEstablishReq, *tpSirTdlsLinkEstablishReq;
+
+/* TDLS Request struct SME-->PE */
+typedef struct
+{
+ tANI_U16 messageType; // eWNI_SME_TDLS_LINK_ESTABLISH_RSP
+ tANI_U16 length;
+ tANI_U8 sessionId; // Session ID
+ tANI_U16 transactionId; // Transaction ID for cmd
+ tSirResultCodes statusCode;
+ tSirMacAddr peerMac;
+}tSirTdlsLinkEstablishReqRsp, *tpSirTdlsLinkEstablishReqRsp;
+
/* TDLS Request struct SME-->PE */
typedef struct sSirTdlsDelStaReq
{
diff --git a/CORE/MAC/inc/wniApi.h b/CORE/MAC/inc/wniApi.h
index 8c1ca67..129b8d7 100644
--- a/CORE/MAC/inc/wniApi.h
+++ b/CORE/MAC/inc/wniApi.h
@@ -347,6 +347,8 @@
#ifdef FEATURE_WLAN_TDLS_OXYGEN_DISAPPEAR_AP
eWNI_SME_TDLS_AP_DISAPPEAR_IND,
#endif
+ eWNI_SME_TDLS_LINK_ESTABLISH_REQ,
+ eWNI_SME_TDLS_LINK_ESTABLISH_RSP,
#endif
//NOTE: If you are planning to add more mesages, please make sure that
//SIR_LIM_ITC_MSG_TYPES_BEGIN is moved appropriately. It is set as
diff --git a/CORE/MAC/inc/wniCfgAp.h b/CORE/MAC/inc/wniCfgAp.h
index 615ff73..59897b0 100644
--- a/CORE/MAC/inc/wniCfgAp.h
+++ b/CORE/MAC/inc/wniCfgAp.h
@@ -1,4 +1,5 @@
/*
+<<<<<<< HEAD:CORE/MAC/inc/wniCfgAp.h
* Copyright (c) 2012-2013, The Linux Foundation. All rights reserved.
*
* Previously licensed under the ISC license by Qualcomm Atheros, Inc.
@@ -41,10 +42,13 @@
/*
* Copyright (C) 2007-2009 QUALCOMM Incorporated. All rights reserved. Proprietary and Confidential.
+=======
+ * Copyright (C) 2007-2009 Qualcomm Technologies, Inc. All rights reserved. Proprietary and Confidential.
+>>>>>>> 5f03499... TDLS : Host Changes supporting PUAPSD implementation.:prima/CORE/MAC/inc/wniCfgAp.h
*/
/*
- * DO NOT EDIT - This file is generated automatically
+ * DO NOT EDIT - This file is generated automaticlly
*/
/*
@@ -360,6 +364,10 @@
#define WNI_CFG_ENABLE_MCC_ADAPTIVE_SCHED 295
#define WNI_CFG_DISABLE_LDPC_WITH_TXBF_AP 296
#define WNI_CFG_AP_LINK_MONITOR_TIMEOUT 297
+#define WNI_CFG_TDLS_QOS_WMM_UAPSD_MASK 298
+#define WNI_CFG_TDLS_BUF_STA_ENABLED 299
+#define WNI_CFG_TDLS_PUAPSD_INACT_TIME 300
+#define WNI_CFG_TDLS_RX_FRAME_THRESHOLD 301
/*
* String parameter lengths
@@ -2486,10 +2494,42 @@
#define WNI_CFG_AP_LINK_MONITOR_TIMEOUT_APMAX 255
#define WNI_CFG_AP_LINK_MONITOR_TIMEOUT_APDEF 3
-#define CFG_PARAM_MAX_NUM 298
-#define CFG_AP_IBUF_MAX_SIZE 237
+#define WNI_CFG_TDLS_QOS_WMM_UAPSD_MASK_STAMIN 0
+#define WNI_CFG_TDLS_QOS_WMM_UAPSD_MASK_STAMAX 15
+#define WNI_CFG_TDLS_QOS_WMM_UAPSD_MASK_STADEF 0
+
+#define WNI_CFG_TDLS_QOS_WMM_UAPSD_MASK_APMIN 0
+#define WNI_CFG_TDLS_QOS_WMM_UAPSD_MASK_APMAX 15
+#define WNI_CFG_TDLS_QOS_WMM_UAPSD_MASK_APDEF 0
+
+#define WNI_CFG_TDLS_BUF_STA_ENABLED_STAMIN 0
+#define WNI_CFG_TDLS_BUF_STA_ENABLED_STAMAX 1
+#define WNI_CFG_TDLS_BUF_STA_ENABLED_STADEF 0
+
+#define WNI_CFG_TDLS_BUF_STA_ENABLED_APMIN 0
+#define WNI_CFG_TDLS_BUF_STA_ENABLED_APMAX 1
+#define WNI_CFG_TDLS_BUF_STA_ENABLED_APDEF 0
+
+#define WNI_CFG_TDLS_PUAPSD_INACT_TIME_STAMIN 0
+#define WNI_CFG_TDLS_PUAPSD_INACT_TIME_STAMAX 10
+#define WNI_CFG_TDLS_PUAPSD_INACT_TIME_STADEF 0
+
+#define WNI_CFG_TDLS_PUAPSD_INACT_TIME_APMIN 0
+#define WNI_CFG_TDLS_PUAPSD_INACT_TIME_APMAX 10
+#define WNI_CFG_TDLS_PUAPSD_INACT_TIME_APDEF 0
+
+#define WNI_CFG_TDLS_RX_FRAME_THRESHOLD_STAMIN 10
+#define WNI_CFG_TDLS_RX_FRAME_THRESHOLD_STAMAX 20
+#define WNI_CFG_TDLS_RX_FRAME_THRESHOLD_STADEF 10
+
+#define WNI_CFG_TDLS_RX_FRAME_THRESHOLD_APMIN 10
+#define WNI_CFG_TDLS_RX_FRAME_THRESHOLD_APMAX 20
+#define WNI_CFG_TDLS_RX_FRAME_THRESHOLD_APDEF 10
+
+#define CFG_PARAM_MAX_NUM 302
+#define CFG_AP_IBUF_MAX_SIZE 241
#define CFG_AP_SBUF_MAX_SIZE 3422
-#define CFG_STA_IBUF_MAX_SIZE 232
+#define CFG_STA_IBUF_MAX_SIZE 236
#define CFG_STA_SBUF_MAX_SIZE 3388
#define CFG_SEM_MAX_NUM 19
diff --git a/CORE/MAC/inc/wniCfgSta.h b/CORE/MAC/inc/wniCfgSta.h
index 4d1e31a..3a9dbec 100644
--- a/CORE/MAC/inc/wniCfgSta.h
+++ b/CORE/MAC/inc/wniCfgSta.h
@@ -1,4 +1,5 @@
/*
+<<<<<<< HEAD:CORE/MAC/inc/wniCfgSta.h
* Copyright (c) 2012-2013, The Linux Foundation. All rights reserved.
*
* Previously licensed under the ISC license by Qualcomm Atheros, Inc.
@@ -41,10 +42,13 @@
/*
* Copyright (C) 2007-2009 QUALCOMM Incorporated. All rights reserved. Proprietary and Confidential.
+=======
+ * Copyright (C) 2007-2009 Qualcomm Technologies, Inc. All rights reserved. Proprietary and Confidential.
+>>>>>>> 5f03499... TDLS : Host Changes supporting PUAPSD implementation.:prima/CORE/MAC/inc/wniCfgSta.h
*/
/*
- * DO NOT EDIT - This file is generated automatically
+ * DO NOT EDIT - This file is generated automaticlly
*/
/*
@@ -354,6 +358,10 @@
#define WNI_CFG_ENABLE_MCC_ADAPTIVE_SCHED 295
#define WNI_CFG_DISABLE_LDPC_WITH_TXBF_AP 296
#define WNI_CFG_AP_LINK_MONITOR_TIMEOUT 297
+#define WNI_CFG_TDLS_QOS_WMM_UAPSD_MASK 298
+#define WNI_CFG_TDLS_BUF_STA_ENABLED 299
+#define WNI_CFG_TDLS_PUAPSD_INACT_TIME 300
+#define WNI_CFG_TDLS_RX_FRAME_THRESHOLD 301
/*
* String parameter lengths
@@ -1615,8 +1623,24 @@
#define WNI_CFG_AP_LINK_MONITOR_TIMEOUT_STAMAX 255
#define WNI_CFG_AP_LINK_MONITOR_TIMEOUT_STADEF 3
-#define CFG_PARAM_MAX_NUM 298
-#define CFG_STA_IBUF_MAX_SIZE 232
+#define WNI_CFG_TDLS_QOS_WMM_UAPSD_MASK_STAMIN 0
+#define WNI_CFG_TDLS_QOS_WMM_UAPSD_MASK_STAMAX 15
+#define WNI_CFG_TDLS_QOS_WMM_UAPSD_MASK_STADEF 0
+
+#define WNI_CFG_TDLS_BUF_STA_ENABLED_STAMIN 0
+#define WNI_CFG_TDLS_BUF_STA_ENABLED_STAMAX 1
+#define WNI_CFG_TDLS_BUF_STA_ENABLED_STADEF 0
+
+#define WNI_CFG_TDLS_PUAPSD_INACT_TIME_STAMIN 0
+#define WNI_CFG_TDLS_PUAPSD_INACT_TIME_STAMAX 10
+#define WNI_CFG_TDLS_PUAPSD_INACT_TIME_STADEF 0
+
+#define WNI_CFG_TDLS_RX_FRAME_THRESHOLD_STAMIN 10
+#define WNI_CFG_TDLS_RX_FRAME_THRESHOLD_STAMAX 20
+#define WNI_CFG_TDLS_RX_FRAME_THRESHOLD_STADEF 10
+
+#define CFG_PARAM_MAX_NUM 302
+#define CFG_STA_IBUF_MAX_SIZE 236
#define CFG_STA_SBUF_MAX_SIZE 3388
#define CFG_SEM_MAX_NUM 19
diff --git a/CORE/MAC/src/cfg/cfgParamName.c b/CORE/MAC/src/cfg/cfgParamName.c
index c0db1a0..e75f729 100644
--- a/CORE/MAC/src/cfg/cfgParamName.c
+++ b/CORE/MAC/src/cfg/cfgParamName.c
@@ -1,50 +1,25 @@
/*
- * Copyright (c) 2012-2013, The Linux Foundation. All rights reserved.
- *
- * Previously licensed under the ISC license by Qualcomm Atheros, Inc.
- *
- *
- * Permission to use, copy, modify, and/or distribute this software for
- * any purpose with or without fee is hereby granted, provided that the
- * above copyright notice and this permission notice appear in all
- * copies.
- *
- * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL
- * WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED
- * WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE
- * AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL
- * DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR
- * PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER
- * TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
- * PERFORMANCE OF THIS SOFTWARE.
- */
+ * Copyright (c) 2012-2013, The Linux Foundation. All rights reserved.
+ *
+ * Previously licensed under the ISC license by Qualcomm Atheros, Inc.
+ *
+ *
+ * Permission to use, copy, modify, and/or distribute this software for
+ * any purpose with or without fee is hereby granted, provided that the
+ * above copyright notice and this permission notice appear in all
+ * copies.
+ *
+ * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL
+ * WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED
+ * WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE
+ * AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL
+ * DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR
+ * PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER
+ * TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
+ * PERFORMANCE OF THIS SOFTWARE.
+*/
/*
- * Copyright (c) 2012, The Linux Foundation. All rights reserved.
- *
- * Previously licensed under the ISC license by Qualcomm Atheros, Inc.
- *
- *
- * Permission to use, copy, modify, and/or distribute this software for
- * any purpose with or without fee is hereby granted, provided that the
- * above copyright notice and this permission notice appear in all
- * copies.
- *
- * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL
- * WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED
- * WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE
- * AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL
- * DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR
- * PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER
- * TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
- * PERFORMANCE OF THIS SOFTWARE.
- */
-
-/*
- * Copyright (C) 2007-2009 QUALCOMM Incorporated. All rights reserved. Proprietary and Confidential.
- */
-
-/*
- * DO NOT EDIT - This file is generated automatically
+ * DO NOT EDIT - This file is generated automaticlly
*/
/*
@@ -53,303 +28,308 @@
#include "cfgPriv.h"
unsigned char *gCfgParamName[] = {
- (unsigned char *)"STA_ID",
- (unsigned char *)"CF_POLLABLE",
- (unsigned char *)"CFP_PERIOD",
- (unsigned char *)"CFP_MAX_DURATION",
- (unsigned char *)"SSID",
- (unsigned char *)"BEACON_INTERVAL",
- (unsigned char *)"DTIM_PERIOD",
- (unsigned char *)"WEP_KEY_LENGTH",
- (unsigned char *)"WEP_DEFAULT_KEY_1",
- (unsigned char *)"WEP_DEFAULT_KEY_2",
- (unsigned char *)"WEP_DEFAULT_KEY_3",
- (unsigned char *)"WEP_DEFAULT_KEY_4",
- (unsigned char *)"WEP_DEFAULT_KEYID",
- (unsigned char *)"EXCLUDE_UNENCRYPTED",
- (unsigned char *)"RTS_THRESHOLD",
- (unsigned char *)"SHORT_RETRY_LIMIT",
- (unsigned char *)"LONG_RETRY_LIMIT",
- (unsigned char *)"FRAGMENTATION_THRESHOLD",
- (unsigned char *)"ACTIVE_MINIMUM_CHANNEL_TIME",
- (unsigned char *)"ACTIVE_MAXIMUM_CHANNEL_TIME",
- (unsigned char *)"PASSIVE_MINIMUM_CHANNEL_TIME",
- (unsigned char *)"PASSIVE_MAXIMUM_CHANNEL_TIME",
- (unsigned char *)"JOIN_FAILURE_TIMEOUT",
- (unsigned char *)"AUTHENTICATE_FAILURE_TIMEOUT",
- (unsigned char *)"AUTHENTICATE_RSP_TIMEOUT",
- (unsigned char *)"ASSOCIATION_FAILURE_TIMEOUT",
- (unsigned char *)"REASSOCIATION_FAILURE_TIMEOUT",
- (unsigned char *)"RA_PERIODICITY_TIMEOUT_IN_PS",
- (unsigned char *)"PS_ENABLE_BCN_FILTER",
- (unsigned char *)"PS_ENABLE_HEART_BEAT",
- (unsigned char *)"PS_ENABLE_RSSI_MONITOR",
- (unsigned char *)"PS_DATA_INACTIVITY_TIMEOUT",
- (unsigned char *)"RF_SETTLING_TIME_CLK",
- (unsigned char *)"SUPPORTED_RATES_11B",
- (unsigned char *)"SUPPORTED_RATES_11A",
- (unsigned char *)"PHY_MODE",
- (unsigned char *)"DOT11_MODE",
- (unsigned char *)"OPERATIONAL_RATE_SET",
- (unsigned char *)"EXTENDED_OPERATIONAL_RATE_SET",
- (unsigned char *)"PROPRIETARY_OPERATIONAL_RATE_SET",
- (unsigned char *)"BSSID",
- (unsigned char *)"LISTEN_INTERVAL",
- (unsigned char *)"VALID_CHANNEL_LIST",
- (unsigned char *)"CURRENT_CHANNEL",
- (unsigned char *)"DEFAULT_RATE_INDEX_5GHZ",
- (unsigned char *)"DEFAULT_RATE_INDEX_24GHZ",
- (unsigned char *)"RATE_ADAPTATION_TYPE",
- (unsigned char *)"FIXED_RATE",
- (unsigned char *)"FIXED_RATE_MULTICAST_24GHZ",
- (unsigned char *)"FIXED_RATE_MULTICAST_5GHZ",
- (unsigned char *)"RETRYRATE_POLICY",
- (unsigned char *)"RETRYRATE_SECONDARY",
- (unsigned char *)"RETRYRATE_TERTIARY",
- (unsigned char *)"APSD_ENABLED",
- (unsigned char *)"SHARED_KEY_AUTH_ENABLE",
- (unsigned char *)"OPEN_SYSTEM_AUTH_ENABLE",
- (unsigned char *)"AUTHENTICATION_TYPE",
- (unsigned char *)"CF_POLL_REQUEST",
- (unsigned char *)"PRIVACY_ENABLED",
- (unsigned char *)"SHORT_PREAMBLE",
- (unsigned char *)"SHORT_SLOT_TIME",
- (unsigned char *)"ACCEPT_SHORT_SLOT_ASSOC_ONLY",
- (unsigned char *)"QOS_ENABLED",
- (unsigned char *)"HCF_ENABLED",
- (unsigned char *)"RSN_ENABLED",
- (unsigned char *)"BACKGROUND_SCAN_PERIOD",
- (unsigned char *)"MAX_NUM_PRE_AUTH",
- (unsigned char *)"PREAUTH_CLNUP_TIMEOUT",
- (unsigned char *)"RELEASE_AID_TIMEOUT",
- (unsigned char *)"HEART_BEAT_THRESHOLD",
- (unsigned char *)"PROBE_AFTER_HB_FAIL_TIMEOUT",
- (unsigned char *)"MANUFACTURER_OUI",
- (unsigned char *)"MANUFACTURER_NAME",
- (unsigned char *)"MODEL_NUMBER",
- (unsigned char *)"MODEL_NAME",
- (unsigned char *)"MANUFACTURER_PRODUCT_NAME",
- (unsigned char *)"MANUFACTURER_PRODUCT_VERSION",
- (unsigned char *)"11D_ENABLED",
- (unsigned char *)"MAX_TX_POWER_2_4",
- (unsigned char *)"MAX_TX_POWER_5",
- (unsigned char *)"NETWORK_DENSITY",
- (unsigned char *)"ADAPTIVE_THRESHOLD_ALGORITHM",
- (unsigned char *)"CURRENT_TX_ANTENNA",
- (unsigned char *)"CURRENT_RX_ANTENNA",
- (unsigned char *)"CURRENT_TX_POWER_LEVEL",
- (unsigned char *)"POWER_STATE_PER_CHAIN",
- (unsigned char *)"NEW_BSS_FOUND_IND",
- (unsigned char *)"PROPRIETARY_ANI_FEATURES_ENABLED",
- (unsigned char *)"PROPRIETARY_RATES_ENABLED",
- (unsigned char *)"AP_NODE_NAME",
- (unsigned char *)"COUNTRY_CODE",
- (unsigned char *)"11H_ENABLED",
- (unsigned char *)"WT_CNF_TIMEOUT",
- (unsigned char *)"KEEPALIVE_TIMEOUT",
- (unsigned char *)"PROXIMITY",
- (unsigned char *)"LOG_LEVEL",
- (unsigned char *)"OLBC_DETECT_TIMEOUT",
- (unsigned char *)"PROTECTION_ENABLED",
- (unsigned char *)"11G_PROTECTION_ALWAYS",
- (unsigned char *)"FORCE_POLICY_PROTECTION",
- (unsigned char *)"11G_SHORT_PREAMBLE_ENABLED",
- (unsigned char *)"11G_SHORT_SLOT_TIME_ENABLED",
- (unsigned char *)"CAL_PERIOD",
- (unsigned char *)"STATS_PERIOD",
- (unsigned char *)"CAL_CONTROL",
- (unsigned char *)"11G_ONLY_POLICY",
- (unsigned char *)"PACKET_CLASSIFICATION",
- (unsigned char *)"WME_ENABLED",
- (unsigned char *)"ADDTS_RSP_TIMEOUT",
- (unsigned char *)"MAX_SP_LENGTH",
- (unsigned char *)"KEEP_ALIVE_STA_LIMIT_THRESHOLD",
- (unsigned char *)"SEND_SINGLE_SSID_ALWAYS",
- (unsigned char *)"WSM_ENABLED",
- (unsigned char *)"PROP_CAPABILITY",
- (unsigned char *)"EDCA_PROFILE",
- (unsigned char *)"EDCA_ANI_ACBK_LOCAL",
- (unsigned char *)"EDCA_ANI_ACBE_LOCAL",
- (unsigned char *)"EDCA_ANI_ACVI_LOCAL",
- (unsigned char *)"EDCA_ANI_ACVO_LOCAL",
- (unsigned char *)"EDCA_ANI_ACBK",
- (unsigned char *)"EDCA_ANI_ACBE",
- (unsigned char *)"EDCA_ANI_ACVI",
- (unsigned char *)"EDCA_ANI_ACVO",
- (unsigned char *)"EDCA_WME_ACBK_LOCAL",
- (unsigned char *)"EDCA_WME_ACBE_LOCAL",
- (unsigned char *)"EDCA_WME_ACVI_LOCAL",
- (unsigned char *)"EDCA_WME_ACVO_LOCAL",
- (unsigned char *)"EDCA_WME_ACBK",
- (unsigned char *)"EDCA_WME_ACBE",
- (unsigned char *)"EDCA_WME_ACVI",
- (unsigned char *)"EDCA_WME_ACVO",
- (unsigned char *)"EDCA_TIT_DEMO_ACBK_LOCAL",
- (unsigned char *)"EDCA_TIT_DEMO_ACBE_LOCAL",
- (unsigned char *)"EDCA_TIT_DEMO_ACVI_LOCAL",
- (unsigned char *)"EDCA_TIT_DEMO_ACVO_LOCAL",
- (unsigned char *)"EDCA_TIT_DEMO_ACBK",
- (unsigned char *)"EDCA_TIT_DEMO_ACBE",
- (unsigned char *)"EDCA_TIT_DEMO_ACVI",
- (unsigned char *)"EDCA_TIT_DEMO_ACVO",
- (unsigned char *)"RDET_FLAG",
- (unsigned char *)"RADAR_CHANNEL_LIST",
- (unsigned char *)"LOCAL_POWER_CONSTRAINT",
- (unsigned char *)"ADMIT_POLICY",
- (unsigned char *)"ADMIT_BWFACTOR",
- (unsigned char *)"MAX_CONSECUTIVE_BACKGROUND_SCAN_FAILURE",
- (unsigned char *)"CHANNEL_BONDING_MODE",
- (unsigned char *)"CB_SECONDARY_CHANNEL_STATE",
- (unsigned char *)"DYNAMIC_THRESHOLD_ZERO",
- (unsigned char *)"DYNAMIC_THRESHOLD_ONE",
- (unsigned char *)"DYNAMIC_THRESHOLD_TWO",
- (unsigned char *)"TRIG_STA_BK_SCAN",
- (unsigned char *)"DYNAMIC_PROFILE_SWITCHING",
- (unsigned char *)"SCAN_CONTROL_LIST",
- (unsigned char *)"MIMO_ENABLED",
- (unsigned char *)"BLOCK_ACK_ENABLED",
- (unsigned char *)"BA_ACTIVITY_CHECK_TIMEOUT",
- (unsigned char *)"HT_RX_STBC",
- (unsigned char *)"HT_CAP_INFO",
- (unsigned char *)"HT_AMPDU_PARAMS",
- (unsigned char *)"SUPPORTED_MCS_SET",
- (unsigned char *)"EXT_HT_CAP_INFO",
- (unsigned char *)"TX_BF_CAP",
- (unsigned char *)"AS_CAP",
- (unsigned char *)"HT_INFO_FIELD1",
- (unsigned char *)"HT_INFO_FIELD2",
- (unsigned char *)"HT_INFO_FIELD3",
- (unsigned char *)"BASIC_MCS_SET",
- (unsigned char *)"CURRENT_MCS_SET",
- (unsigned char *)"GREENFIELD_CAPABILITY",
- (unsigned char *)"VHT_MAX_MPDU_LENGTH",
- (unsigned char *)"VHT_SUPPORTED_CHAN_WIDTH_SET",
- (unsigned char *)"VHT_LDPC_CODING_CAP",
- (unsigned char *)"VHT_SHORT_GI_80MHZ",
- (unsigned char *)"VHT_SHORT_GI_160_AND_80_PLUS_80MHZ",
- (unsigned char *)"VHT_TXSTBC",
- (unsigned char *)"VHT_RXSTBC",
- (unsigned char *)"VHT_SU_BEAMFORMER_CAP",
- (unsigned char *)"VHT_SU_BEAMFORMEE_CAP",
- (unsigned char *)"VHT_CSN_BEAMFORMEE_ANT_SUPPORTED",
- (unsigned char *)"VHT_NUM_SOUNDING_DIMENSIONS",
- (unsigned char *)"VHT_MU_BEAMFORMER_CAP",
- (unsigned char *)"VHT_MU_BEAMFORMEE_CAP",
- (unsigned char *)"VHT_TXOP_PS",
- (unsigned char *)"VHT_HTC_VHTC_CAP",
- (unsigned char *)"VHT_AMPDU_LEN_EXPONENT",
- (unsigned char *)"VHT_LINK_ADAPTATION_CAP",
- (unsigned char *)"VHT_RX_ANT_PATTERN",
- (unsigned char *)"VHT_TX_ANT_PATTERN",
- (unsigned char *)"VHT_RX_MCS_MAP",
- (unsigned char *)"VHT_TX_MCS_MAP",
- (unsigned char *)"VHT_RX_HIGHEST_SUPPORTED_DATA_RATE",
- (unsigned char *)"VHT_TX_HIGHEST_SUPPORTED_DATA_RATE",
- (unsigned char *)"VHT_CHANNEL_WIDTH",
- (unsigned char *)"VHT_CHANNEL_CENTER_FREQ_SEGMENT1",
- (unsigned char *)"VHT_CHANNEL_CENTER_FREQ_SEGMENT2",
- (unsigned char *)"VHT_BASIC_MCS_SET",
- (unsigned char *)"VHT_MU_MIMO_CAP_STA_COUNT",
- (unsigned char *)"VHT_SS_UNDER_UTIL",
- (unsigned char *)"VHT_40MHZ_UTILIZATION",
- (unsigned char *)"VHT_80MHZ_UTILIZATION",
- (unsigned char *)"VHT_160MHZ_UTILIZATION",
- (unsigned char *)"MAX_AMSDU_LENGTH",
- (unsigned char *)"MPDU_DENSITY",
- (unsigned char *)"NUM_BUFF_ADVERT",
- (unsigned char *)"MAX_RX_AMPDU_FACTOR",
- (unsigned char *)"SHORT_GI_20MHZ",
- (unsigned char *)"SHORT_GI_40MHZ",
- (unsigned char *)"RIFS_ENABLED",
- (unsigned char *)"MAX_PS_POLL",
- (unsigned char *)"NUM_BEACON_PER_RSSI_AVERAGE",
- (unsigned char *)"RSSI_FILTER_PERIOD",
- (unsigned char *)"MIN_RSSI_THRESHOLD",
- (unsigned char *)"NTH_BEACON_FILTER",
- (unsigned char *)"BROADCAST_FRAME_FILTER_ENABLE",
- (unsigned char *)"SCAN_IN_POWERSAVE",
- (unsigned char *)"IGNORE_DTIM",
- (unsigned char *)"WOWLAN_UCAST_PATTERN_FILTER_ENABLE",
- (unsigned char *)"WOWLAN_CHANNEL_SWITCH_ENABLE",
- (unsigned char *)"WOWLAN_DEAUTH_ENABLE",
- (unsigned char *)"WOWLAN_DISASSOC_ENABLE",
- (unsigned char *)"WOWLAN_MAX_MISSED_BEACON",
- (unsigned char *)"WOWLAN_MAX_SLEEP_PERIOD",
- (unsigned char *)"BA_TIMEOUT",
- (unsigned char *)"BA_THRESHOLD_HIGH",
- (unsigned char *)"MAX_BA_BUFFERS",
- (unsigned char *)"MAX_BA_SESSIONS",
- (unsigned char *)"BA_AUTO_SETUP",
- (unsigned char *)"ADDBA_REQ_DECLINE",
- (unsigned char *)"BG_SCAN_CHANNEL_LIST",
- (unsigned char *)"MAX_MEDIUM_TIME",
- (unsigned char *)"MAX_MPDUS_IN_AMPDU",
- (unsigned char *)"IBSS_AUTO_BSSID",
- (unsigned char *)"PROBE_REQ_ADDNIE_FLAG",
- (unsigned char *)"PROBE_REQ_ADDNIE_DATA",
- (unsigned char *)"PROBE_RSP_ADDNIE_FLAG",
- (unsigned char *)"PROBE_RSP_ADDNIE_DATA1",
- (unsigned char *)"PROBE_RSP_ADDNIE_DATA2",
- (unsigned char *)"PROBE_RSP_ADDNIE_DATA3",
- (unsigned char *)"ASSOC_RSP_ADDNIE_FLAG",
- (unsigned char *)"ASSOC_RSP_ADDNIE_DATA",
- (unsigned char *)"PROBE_REQ_ADDNP2PIE_FLAG",
- (unsigned char *)"PROBE_REQ_ADDNP2PIE_DATA",
- (unsigned char *)"PROBE_RSP_BCN_ADDNIE_FLAG",
- (unsigned char *)"PROBE_RSP_BCN_ADDNIE_DATA",
- (unsigned char *)"WPS_ENABLE",
- (unsigned char *)"WPS_STATE",
- (unsigned char *)"WPS_PROBE_REQ_FLAG",
- (unsigned char *)"WPS_VERSION",
- (unsigned char *)"WPS_REQUEST_TYPE",
- (unsigned char *)"WPS_CFG_METHOD",
- (unsigned char *)"WPS_UUID",
- (unsigned char *)"WPS_PRIMARY_DEVICE_CATEGORY",
- (unsigned char *)"WPS_PIMARY_DEVICE_OUI",
- (unsigned char *)"WPS_DEVICE_SUB_CATEGORY",
- (unsigned char *)"WPS_ASSOCIATION_STATE",
- (unsigned char *)"WPS_CONFIGURATION_ERROR",
- (unsigned char *)"WPS_DEVICE_PASSWORD_ID",
- (unsigned char *)"WPS_ASSOC_METHOD",
- (unsigned char *)"LOW_GAIN_OVERRIDE",
- (unsigned char *)"ENABLE_PHY_AGC_LISTEN_MODE",
- (unsigned char *)"RPE_POLLING_THRESHOLD",
- (unsigned char *)"RPE_AGING_THRESHOLD_FOR_AC0_REG",
- (unsigned char *)"RPE_AGING_THRESHOLD_FOR_AC1_REG",
- (unsigned char *)"RPE_AGING_THRESHOLD_FOR_AC2_REG",
- (unsigned char *)"RPE_AGING_THRESHOLD_FOR_AC3_REG",
- (unsigned char *)"NO_OF_ONCHIP_REORDER_SESSIONS",
- (unsigned char *)"SINGLE_TID_RC",
- (unsigned char *)"RRM_ENABLED",
- (unsigned char *)"RRM_OPERATING_CHAN_MAX",
- (unsigned char *)"RRM_NON_OPERATING_CHAN_MAX",
- (unsigned char *)"TX_PWR_CTRL_ENABLE",
- (unsigned char *)"MCAST_BCAST_FILTER_SETTING",
- (unsigned char *)"BTC_DHCP_BT_SLOTS_TO_BLOCK",
- (unsigned char *)"DYNAMIC_PS_POLL_VALUE",
- (unsigned char *)"PS_NULLDATA_AP_RESP_TIMEOUT",
- (unsigned char *)"TELE_BCN_WAKEUP_EN",
- (unsigned char *)"TELE_BCN_TRANS_LI",
- (unsigned char *)"TELE_BCN_TRANS_LI_IDLE_BCNS",
- (unsigned char *)"TELE_BCN_MAX_LI",
- (unsigned char *)"TELE_BCN_MAX_LI_IDLE_BCNS",
- (unsigned char *)"BTC_A2DP_DHCP_BT_SUB_INTERVALS",
- (unsigned char *)"INFRA_STA_KEEP_ALIVE_PERIOD",
- (unsigned char *)"ASSOC_STA_LIMIT",
- (unsigned char *)"SAP_CHANNEL_SELECT_START_CHANNEL",
- (unsigned char *)"SAP_CHANNEL_SELECT_END_CHANNEL",
- (unsigned char *)"SAP_CHANNEL_SELECT_OPERATING_BAND",
- (unsigned char *)"AP_DATA_AVAIL_POLL_PERIOD",
- (unsigned char *)"ENABLE_CLOSE_LOOP",
- (unsigned char *)"ENABLE_LTE_COEX",
- (unsigned char *)"AP_KEEP_ALIVE_TIMEOUT",
- (unsigned char *)"GO_KEEP_ALIVE_TIMEOUT",
- (unsigned char *)"ENABLE_MC_ADDR_LIST",
- (unsigned char *)"ENABLE_UC_FILTER",
- (unsigned char *)"ENABLE_LPWR_IMG_TRANSITION",
- (unsigned char *)"ENABLE_MCC_ADAPTIVE_SCHED",
- (unsigned char *)"DISABLE_LDPC_WITH_TXBF_AP",
- (unsigned char *)"AP_LINK_MONITOR_TIMEOUT",
+ (unsigned char *)"STA_ID",
+ (unsigned char *)"CF_POLLABLE",
+ (unsigned char *)"CFP_PERIOD",
+ (unsigned char *)"CFP_MAX_DURATION",
+ (unsigned char *)"SSID",
+ (unsigned char *)"BEACON_INTERVAL",
+ (unsigned char *)"DTIM_PERIOD",
+ (unsigned char *)"WEP_KEY_LENGTH",
+ (unsigned char *)"WEP_DEFAULT_KEY_1",
+ (unsigned char *)"WEP_DEFAULT_KEY_2",
+ (unsigned char *)"WEP_DEFAULT_KEY_3",
+ (unsigned char *)"WEP_DEFAULT_KEY_4",
+ (unsigned char *)"WEP_DEFAULT_KEYID",
+ (unsigned char *)"EXCLUDE_UNENCRYPTED",
+ (unsigned char *)"RTS_THRESHOLD",
+ (unsigned char *)"SHORT_RETRY_LIMIT",
+ (unsigned char *)"LONG_RETRY_LIMIT",
+ (unsigned char *)"FRAGMENTATION_THRESHOLD",
+ (unsigned char *)"ACTIVE_MINIMUM_CHANNEL_TIME",
+ (unsigned char *)"ACTIVE_MAXIMUM_CHANNEL_TIME",
+ (unsigned char *)"PASSIVE_MINIMUM_CHANNEL_TIME",
+ (unsigned char *)"PASSIVE_MAXIMUM_CHANNEL_TIME",
+ (unsigned char *)"JOIN_FAILURE_TIMEOUT",
+ (unsigned char *)"AUTHENTICATE_FAILURE_TIMEOUT",
+ (unsigned char *)"AUTHENTICATE_RSP_TIMEOUT",
+ (unsigned char *)"ASSOCIATION_FAILURE_TIMEOUT",
+ (unsigned char *)"REASSOCIATION_FAILURE_TIMEOUT",
+ (unsigned char *)"RA_PERIODICITY_TIMEOUT_IN_PS",
+ (unsigned char *)"PS_ENABLE_BCN_FILTER",
+ (unsigned char *)"PS_ENABLE_HEART_BEAT",
+ (unsigned char *)"PS_ENABLE_RSSI_MONITOR",
+ (unsigned char *)"PS_DATA_INACTIVITY_TIMEOUT",
+ (unsigned char *)"RF_SETTLING_TIME_CLK",
+ (unsigned char *)"SUPPORTED_RATES_11B",
+ (unsigned char *)"SUPPORTED_RATES_11A",
+ (unsigned char *)"PHY_MODE",
+ (unsigned char *)"DOT11_MODE",
+ (unsigned char *)"OPERATIONAL_RATE_SET",
+ (unsigned char *)"EXTENDED_OPERATIONAL_RATE_SET",
+ (unsigned char *)"PROPRIETARY_OPERATIONAL_RATE_SET",
+ (unsigned char *)"BSSID",
+ (unsigned char *)"LISTEN_INTERVAL",
+ (unsigned char *)"VALID_CHANNEL_LIST",
+ (unsigned char *)"CURRENT_CHANNEL",
+ (unsigned char *)"DEFAULT_RATE_INDEX_5GHZ",
+ (unsigned char *)"DEFAULT_RATE_INDEX_24GHZ",
+ (unsigned char *)"RATE_ADAPTATION_TYPE",
+ (unsigned char *)"FIXED_RATE",
+ (unsigned char *)"FIXED_RATE_MULTICAST_24GHZ",
+ (unsigned char *)"FIXED_RATE_MULTICAST_5GHZ",
+ (unsigned char *)"RETRYRATE_POLICY",
+ (unsigned char *)"RETRYRATE_SECONDARY",
+ (unsigned char *)"RETRYRATE_TERTIARY",
+ (unsigned char *)"APSD_ENABLED",
+ (unsigned char *)"SHARED_KEY_AUTH_ENABLE",
+ (unsigned char *)"OPEN_SYSTEM_AUTH_ENABLE",
+ (unsigned char *)"AUTHENTICATION_TYPE",
+ (unsigned char *)"CF_POLL_REQUEST",
+ (unsigned char *)"PRIVACY_ENABLED",
+ (unsigned char *)"SHORT_PREAMBLE",
+ (unsigned char *)"SHORT_SLOT_TIME",
+ (unsigned char *)"ACCEPT_SHORT_SLOT_ASSOC_ONLY",
+ (unsigned char *)"QOS_ENABLED",
+ (unsigned char *)"HCF_ENABLED",
+ (unsigned char *)"RSN_ENABLED",
+ (unsigned char *)"BACKGROUND_SCAN_PERIOD",
+ (unsigned char *)"MAX_NUM_PRE_AUTH",
+ (unsigned char *)"PREAUTH_CLNUP_TIMEOUT",
+ (unsigned char *)"RELEASE_AID_TIMEOUT",
+ (unsigned char *)"HEART_BEAT_THRESHOLD",
+ (unsigned char *)"PROBE_AFTER_HB_FAIL_TIMEOUT",
+ (unsigned char *)"MANUFACTURER_OUI",
+ (unsigned char *)"MANUFACTURER_NAME",
+ (unsigned char *)"MODEL_NUMBER",
+ (unsigned char *)"MODEL_NAME",
+ (unsigned char *)"MANUFACTURER_PRODUCT_NAME",
+ (unsigned char *)"MANUFACTURER_PRODUCT_VERSION",
+ (unsigned char *)"11D_ENABLED",
+ (unsigned char *)"MAX_TX_POWER_2_4",
+ (unsigned char *)"MAX_TX_POWER_5",
+ (unsigned char *)"NETWORK_DENSITY",
+ (unsigned char *)"ADAPTIVE_THRESHOLD_ALGORITHM",
+ (unsigned char *)"CURRENT_TX_ANTENNA",
+ (unsigned char *)"CURRENT_RX_ANTENNA",
+ (unsigned char *)"CURRENT_TX_POWER_LEVEL",
+ (unsigned char *)"POWER_STATE_PER_CHAIN",
+ (unsigned char *)"NEW_BSS_FOUND_IND",
+ (unsigned char *)"PROPRIETARY_ANI_FEATURES_ENABLED",
+ (unsigned char *)"PROPRIETARY_RATES_ENABLED",
+ (unsigned char *)"AP_NODE_NAME",
+ (unsigned char *)"COUNTRY_CODE",
+ (unsigned char *)"11H_ENABLED",
+ (unsigned char *)"WT_CNF_TIMEOUT",
+ (unsigned char *)"KEEPALIVE_TIMEOUT",
+ (unsigned char *)"PROXIMITY",
+ (unsigned char *)"LOG_LEVEL",
+ (unsigned char *)"OLBC_DETECT_TIMEOUT",
+ (unsigned char *)"PROTECTION_ENABLED",
+ (unsigned char *)"11G_PROTECTION_ALWAYS",
+ (unsigned char *)"FORCE_POLICY_PROTECTION",
+ (unsigned char *)"11G_SHORT_PREAMBLE_ENABLED",
+ (unsigned char *)"11G_SHORT_SLOT_TIME_ENABLED",
+ (unsigned char *)"CAL_PERIOD",
+ (unsigned char *)"STATS_PERIOD",
+ (unsigned char *)"CAL_CONTROL",
+ (unsigned char *)"11G_ONLY_POLICY",
+ (unsigned char *)"PACKET_CLASSIFICATION",
+ (unsigned char *)"WME_ENABLED",
+ (unsigned char *)"ADDTS_RSP_TIMEOUT",
+ (unsigned char *)"MAX_SP_LENGTH",
+ (unsigned char *)"KEEP_ALIVE_STA_LIMIT_THRESHOLD",
+ (unsigned char *)"SEND_SINGLE_SSID_ALWAYS",
+ (unsigned char *)"WSM_ENABLED",
+ (unsigned char *)"PROP_CAPABILITY",
+ (unsigned char *)"EDCA_PROFILE",
+ (unsigned char *)"EDCA_ANI_ACBK_LOCAL",
+ (unsigned char *)"EDCA_ANI_ACBE_LOCAL",
+ (unsigned char *)"EDCA_ANI_ACVI_LOCAL",
+ (unsigned char *)"EDCA_ANI_ACVO_LOCAL",
+ (unsigned char *)"EDCA_ANI_ACBK",
+ (unsigned char *)"EDCA_ANI_ACBE",
+ (unsigned char *)"EDCA_ANI_ACVI",
+ (unsigned char *)"EDCA_ANI_ACVO",
+ (unsigned char *)"EDCA_WME_ACBK_LOCAL",
+ (unsigned char *)"EDCA_WME_ACBE_LOCAL",
+ (unsigned char *)"EDCA_WME_ACVI_LOCAL",
+ (unsigned char *)"EDCA_WME_ACVO_LOCAL",
+ (unsigned char *)"EDCA_WME_ACBK",
+ (unsigned char *)"EDCA_WME_ACBE",
+ (unsigned char *)"EDCA_WME_ACVI",
+ (unsigned char *)"EDCA_WME_ACVO",
+ (unsigned char *)"EDCA_TIT_DEMO_ACBK_LOCAL",
+ (unsigned char *)"EDCA_TIT_DEMO_ACBE_LOCAL",
+ (unsigned char *)"EDCA_TIT_DEMO_ACVI_LOCAL",
+ (unsigned char *)"EDCA_TIT_DEMO_ACVO_LOCAL",
+ (unsigned char *)"EDCA_TIT_DEMO_ACBK",
+ (unsigned char *)"EDCA_TIT_DEMO_ACBE",
+ (unsigned char *)"EDCA_TIT_DEMO_ACVI",
+ (unsigned char *)"EDCA_TIT_DEMO_ACVO",
+ (unsigned char *)"RDET_FLAG",
+ (unsigned char *)"RADAR_CHANNEL_LIST",
+ (unsigned char *)"LOCAL_POWER_CONSTRAINT",
+ (unsigned char *)"ADMIT_POLICY",
+ (unsigned char *)"ADMIT_BWFACTOR",
+ (unsigned char *)"MAX_CONSECUTIVE_BACKGROUND_SCAN_FAILURE",
+ (unsigned char *)"CHANNEL_BONDING_MODE",
+ (unsigned char *)"CB_SECONDARY_CHANNEL_STATE",
+ (unsigned char *)"DYNAMIC_THRESHOLD_ZERO",
+ (unsigned char *)"DYNAMIC_THRESHOLD_ONE",
+ (unsigned char *)"DYNAMIC_THRESHOLD_TWO",
+ (unsigned char *)"TRIG_STA_BK_SCAN",
+ (unsigned char *)"DYNAMIC_PROFILE_SWITCHING",
+ (unsigned char *)"SCAN_CONTROL_LIST",
+ (unsigned char *)"MIMO_ENABLED",
+ (unsigned char *)"BLOCK_ACK_ENABLED",
+ (unsigned char *)"BA_ACTIVITY_CHECK_TIMEOUT",
+ (unsigned char *)"HT_RX_STBC",
+ (unsigned char *)"HT_CAP_INFO",
+ (unsigned char *)"HT_AMPDU_PARAMS",
+ (unsigned char *)"SUPPORTED_MCS_SET",
+ (unsigned char *)"EXT_HT_CAP_INFO",
+ (unsigned char *)"TX_BF_CAP",
+ (unsigned char *)"AS_CAP",
+ (unsigned char *)"HT_INFO_FIELD1",
+ (unsigned char *)"HT_INFO_FIELD2",
+ (unsigned char *)"HT_INFO_FIELD3",
+ (unsigned char *)"BASIC_MCS_SET",
+ (unsigned char *)"CURRENT_MCS_SET",
+ (unsigned char *)"GREENFIELD_CAPABILITY",
+ (unsigned char *)"VHT_MAX_MPDU_LENGTH",
+ (unsigned char *)"VHT_SUPPORTED_CHAN_WIDTH_SET",
+ (unsigned char *)"VHT_LDPC_CODING_CAP",
+ (unsigned char *)"VHT_SHORT_GI_80MHZ",
+ (unsigned char *)"VHT_SHORT_GI_160_AND_80_PLUS_80MHZ",
+ (unsigned char *)"VHT_TXSTBC",
+ (unsigned char *)"VHT_RXSTBC",
+ (unsigned char *)"VHT_SU_BEAMFORMER_CAP",
+ (unsigned char *)"VHT_SU_BEAMFORMEE_CAP",
+ (unsigned char *)"VHT_CSN_BEAMFORMEE_ANT_SUPPORTED",
+ (unsigned char *)"VHT_NUM_SOUNDING_DIMENSIONS",
+ (unsigned char *)"VHT_MU_BEAMFORMER_CAP",
+ (unsigned char *)"VHT_MU_BEAMFORMEE_CAP",
+ (unsigned char *)"VHT_TXOP_PS",
+ (unsigned char *)"VHT_HTC_VHTC_CAP",
+ (unsigned char *)"VHT_AMPDU_LEN_EXPONENT",
+ (unsigned char *)"VHT_LINK_ADAPTATION_CAP",
+ (unsigned char *)"VHT_RX_ANT_PATTERN",
+ (unsigned char *)"VHT_TX_ANT_PATTERN",
+ (unsigned char *)"VHT_RX_MCS_MAP",
+ (unsigned char *)"VHT_TX_MCS_MAP",
+ (unsigned char *)"VHT_RX_HIGHEST_SUPPORTED_DATA_RATE",
+ (unsigned char *)"VHT_TX_HIGHEST_SUPPORTED_DATA_RATE",
+ (unsigned char *)"VHT_CHANNEL_WIDTH",
+ (unsigned char *)"VHT_CHANNEL_CENTER_FREQ_SEGMENT1",
+ (unsigned char *)"VHT_CHANNEL_CENTER_FREQ_SEGMENT2",
+ (unsigned char *)"VHT_BASIC_MCS_SET",
+ (unsigned char *)"VHT_MU_MIMO_CAP_STA_COUNT",
+ (unsigned char *)"VHT_SS_UNDER_UTIL",
+ (unsigned char *)"VHT_40MHZ_UTILIZATION",
+ (unsigned char *)"VHT_80MHZ_UTILIZATION",
+ (unsigned char *)"VHT_160MHZ_UTILIZATION",
+ (unsigned char *)"MAX_AMSDU_LENGTH",
+ (unsigned char *)"MPDU_DENSITY",
+ (unsigned char *)"NUM_BUFF_ADVERT",
+ (unsigned char *)"MAX_RX_AMPDU_FACTOR",
+ (unsigned char *)"SHORT_GI_20MHZ",
+ (unsigned char *)"SHORT_GI_40MHZ",
+ (unsigned char *)"RIFS_ENABLED",
+ (unsigned char *)"MAX_PS_POLL",
+ (unsigned char *)"NUM_BEACON_PER_RSSI_AVERAGE",
+ (unsigned char *)"RSSI_FILTER_PERIOD",
+ (unsigned char *)"MIN_RSSI_THRESHOLD",
+ (unsigned char *)"NTH_BEACON_FILTER",
+ (unsigned char *)"BROADCAST_FRAME_FILTER_ENABLE",
+ (unsigned char *)"SCAN_IN_POWERSAVE",
+ (unsigned char *)"IGNORE_DTIM",
+ (unsigned char *)"WOWLAN_UCAST_PATTERN_FILTER_ENABLE",
+ (unsigned char *)"WOWLAN_CHANNEL_SWITCH_ENABLE",
+ (unsigned char *)"WOWLAN_DEAUTH_ENABLE",
+ (unsigned char *)"WOWLAN_DISASSOC_ENABLE",
+ (unsigned char *)"WOWLAN_MAX_MISSED_BEACON",
+ (unsigned char *)"WOWLAN_MAX_SLEEP_PERIOD",
+ (unsigned char *)"BA_TIMEOUT",
+ (unsigned char *)"BA_THRESHOLD_HIGH",
+ (unsigned char *)"MAX_BA_BUFFERS",
+ (unsigned char *)"MAX_BA_SESSIONS",
+ (unsigned char *)"BA_AUTO_SETUP",
+ (unsigned char *)"ADDBA_REQ_DECLINE",
+ (unsigned char *)"DEL_ALL_RX_BA_SESSIONS_2_4_G_BTC",
+ (unsigned char *)"BG_SCAN_CHANNEL_LIST",
+ (unsigned char *)"MAX_MEDIUM_TIME",
+ (unsigned char *)"MAX_MPDUS_IN_AMPDU",
+ (unsigned char *)"IBSS_AUTO_BSSID",
+ (unsigned char *)"PROBE_REQ_ADDNIE_FLAG",
+ (unsigned char *)"PROBE_REQ_ADDNIE_DATA",
+ (unsigned char *)"PROBE_RSP_ADDNIE_FLAG",
+ (unsigned char *)"PROBE_RSP_ADDNIE_DATA1",
+ (unsigned char *)"PROBE_RSP_ADDNIE_DATA2",
+ (unsigned char *)"PROBE_RSP_ADDNIE_DATA3",
+ (unsigned char *)"ASSOC_RSP_ADDNIE_FLAG",
+ (unsigned char *)"ASSOC_RSP_ADDNIE_DATA",
+ (unsigned char *)"PROBE_REQ_ADDNP2PIE_FLAG",
+ (unsigned char *)"PROBE_REQ_ADDNP2PIE_DATA",
+ (unsigned char *)"PROBE_RSP_BCN_ADDNIE_FLAG",
+ (unsigned char *)"PROBE_RSP_BCN_ADDNIE_DATA",
+ (unsigned char *)"WPS_ENABLE",
+ (unsigned char *)"WPS_STATE",
+ (unsigned char *)"WPS_PROBE_REQ_FLAG",
+ (unsigned char *)"WPS_VERSION",
+ (unsigned char *)"WPS_REQUEST_TYPE",
+ (unsigned char *)"WPS_CFG_METHOD",
+ (unsigned char *)"WPS_UUID",
+ (unsigned char *)"WPS_PRIMARY_DEVICE_CATEGORY",
+ (unsigned char *)"WPS_PIMARY_DEVICE_OUI",
+ (unsigned char *)"WPS_DEVICE_SUB_CATEGORY",
+ (unsigned char *)"WPS_ASSOCIATION_STATE",
+ (unsigned char *)"WPS_CONFIGURATION_ERROR",
+ (unsigned char *)"WPS_DEVICE_PASSWORD_ID",
+ (unsigned char *)"WPS_ASSOC_METHOD",
+ (unsigned char *)"LOW_GAIN_OVERRIDE",
+ (unsigned char *)"ENABLE_PHY_AGC_LISTEN_MODE",
+ (unsigned char *)"RPE_POLLING_THRESHOLD",
+ (unsigned char *)"RPE_AGING_THRESHOLD_FOR_AC0_REG",
+ (unsigned char *)"RPE_AGING_THRESHOLD_FOR_AC1_REG",
+ (unsigned char *)"RPE_AGING_THRESHOLD_FOR_AC2_REG",
+ (unsigned char *)"RPE_AGING_THRESHOLD_FOR_AC3_REG",
+ (unsigned char *)"NO_OF_ONCHIP_REORDER_SESSIONS",
+ (unsigned char *)"SINGLE_TID_RC",
+ (unsigned char *)"RRM_ENABLED",
+ (unsigned char *)"RRM_OPERATING_CHAN_MAX",
+ (unsigned char *)"RRM_NON_OPERATING_CHAN_MAX",
+ (unsigned char *)"TX_PWR_CTRL_ENABLE",
+ (unsigned char *)"MCAST_BCAST_FILTER_SETTING",
+ (unsigned char *)"BTC_DHCP_BT_SLOTS_TO_BLOCK",
+ (unsigned char *)"DYNAMIC_PS_POLL_VALUE",
+ (unsigned char *)"PS_NULLDATA_AP_RESP_TIMEOUT",
+ (unsigned char *)"TELE_BCN_WAKEUP_EN",
+ (unsigned char *)"TELE_BCN_TRANS_LI",
+ (unsigned char *)"TELE_BCN_TRANS_LI_IDLE_BCNS",
+ (unsigned char *)"TELE_BCN_MAX_LI",
+ (unsigned char *)"TELE_BCN_MAX_LI_IDLE_BCNS",
+ (unsigned char *)"BTC_A2DP_DHCP_BT_SUB_INTERVALS",
+ (unsigned char *)"INFRA_STA_KEEP_ALIVE_PERIOD",
+ (unsigned char *)"ASSOC_STA_LIMIT",
+ (unsigned char *)"SAP_CHANNEL_SELECT_START_CHANNEL",
+ (unsigned char *)"SAP_CHANNEL_SELECT_END_CHANNEL",
+ (unsigned char *)"SAP_CHANNEL_SELECT_OPERATING_BAND",
+ (unsigned char *)"AP_DATA_AVAIL_POLL_PERIOD",
+ (unsigned char *)"ENABLE_CLOSE_LOOP",
+ (unsigned char *)"ENABLE_LTE_COEX",
+ (unsigned char *)"AP_KEEP_ALIVE_TIMEOUT",
+ (unsigned char *)"GO_KEEP_ALIVE_TIMEOUT",
+ (unsigned char *)"ENABLE_MC_ADDR_LIST",
+ (unsigned char *)"ENABLE_UC_FILTER",
+ (unsigned char *)"ENABLE_LPWR_IMG_TRANSITION",
+ (unsigned char *)"ENABLE_MCC_ADAPTIVE_SCHED",
+ (unsigned char *)"DISABLE_LDPC_WITH_TXBF_AP",
+ (unsigned char *)"AP_LINK_MONITOR_TIMEOUT",
+ (unsigned char *)"TDLS_QOS_WMM_UAPSD_MASK",
+ (unsigned char *)"TDLS_BUF_STA_ENABLED",
+ (unsigned char *)"TDLS_PUAPSD_INACT_TIME",
+ (unsigned char *)"TDLS_RX_FRAME_THRESHOLD",
};
diff --git a/CORE/MAC/src/cfg/cfgUtil/cfg.txt b/CORE/MAC/src/cfg/cfgUtil/cfg.txt
index 7240b7d..2d7fa87 100644
--- a/CORE/MAC/src/cfg/cfgUtil/cfg.txt
+++ b/CORE/MAC/src/cfg/cfgUtil/cfg.txt
@@ -4498,3 +4498,50 @@
V RW NP
HAL
1 255 3
+
+*
+*TDLS Station's UAPSD MASK Configuration
+*
+*
+*
+WNI_CFG_TDLS_QOS_WMM_UAPSD_MASK I 4 7
+V RW NP
+LIM
+0 15 0
+V RW NP
+LIM
+0 15 0
+*
+*TDLS Stations Buffer STA Capability
+*
+*
+*
+WNI_CFG_TDLS_BUF_STA_ENABLED I 4 7
+V RW NP
+LIM
+0 1 0
+V RW NP
+LIM
+0 1 0
+*TDLS Stations PUAPSD Inactivity Timer
+*
+*
+*
+WNI_CFG_TDLS_PUAPSD_INACT_TIME I 4 7
+V RW NP
+LIM
+0 10 0
+V RW NP
+LIM
+0 10 0
+*TDLS Stations PUAPSD RX Frame Threshold
+*
+*
+*
+WNI_CFG_TDLS_RX_FRAME_THRESHOLD I 4 7
+V RW NP
+LIM
+10 20 10
+V RW NP
+LIM
+10 20 10
diff --git a/CORE/MAC/src/include/sirParams.h b/CORE/MAC/src/include/sirParams.h
index 7dc0cf9..4f0fb91 100644
--- a/CORE/MAC/src/include/sirParams.h
+++ b/CORE/MAC/src/include/sirParams.h
@@ -568,6 +568,12 @@
#ifdef WLAN_FEATURE_11W
#define SIR_HAL_EXCLUDE_UNENCRYPTED_IND (SIR_HAL_ITC_MSG_TYPES_BEGIN + 196)
#endif
+#ifdef FEATURE_WLAN_TDLS
+/// PE <-> HAL TDLS messages
+#define SIR_HAL_TDLS_LINK_ESTABLISH_REQ (SIR_HAL_ITC_MSG_TYPES_BEGIN + 197)
+#define SIR_HAL_TDLS_LINK_ESTABLISH_REQ_RSP (SIR_HAL_ITC_MSG_TYPES_BEGIN + 198)
+#define SIR_HAL_TDLS_IND (SIR_HAL_ITC_MSG_TYPES_BEGIN + 199)
+#endif
#define SIR_HAL_MSG_TYPES_END (SIR_HAL_ITC_MSG_TYPES_BEGIN + 0xFF)
// CFG message types
diff --git a/CORE/MAC/src/pe/lim/limApi.c b/CORE/MAC/src/pe/lim/limApi.c
index e458129..a0ba77a 100644
--- a/CORE/MAC/src/pe/lim/limApi.c
+++ b/CORE/MAC/src/pe/lim/limApi.c
@@ -621,7 +621,18 @@
limLog(pMac, LOGP, FL("cfg get disableLDPCWithTxbfAP failed"));
return eSIR_FAILURE;
}
-
+#ifdef FEATURE_WLAN_TDLS
+ if(wlan_cfgGetInt(pMac, WNI_CFG_TDLS_BUF_STA_ENABLED,(tANI_U32 *) &pMac->lim.gLimTDLSBufStaEnabled) != eSIR_SUCCESS)
+ {
+ limLog(pMac, LOGP, FL("cfg get LimTDLSBufStaEnabled failed"));
+ return eSIR_FAILURE;
+ }
+ if(wlan_cfgGetInt(pMac, WNI_CFG_TDLS_QOS_WMM_UAPSD_MASK,(tANI_U32 *) &pMac->lim.gLimTDLSUapsdMask) != eSIR_SUCCESS)
+ {
+ limLog(pMac, LOGP, FL("cfg get LimTDLSUapsdMask failed"));
+ return eSIR_FAILURE;
+ }
+#endif
return eSIR_SUCCESS;
}
diff --git a/CORE/MAC/src/pe/lim/limProcessMessageQueue.c b/CORE/MAC/src/pe/lim/limProcessMessageQueue.c
index cf7b4b0..235bb3e 100644
--- a/CORE/MAC/src/pe/lim/limProcessMessageQueue.c
+++ b/CORE/MAC/src/pe/lim/limProcessMessageQueue.c
@@ -1202,6 +1202,7 @@
case eWNI_SME_TDLS_SEND_MGMT_REQ:
case eWNI_SME_TDLS_ADD_STA_REQ:
case eWNI_SME_TDLS_DEL_STA_REQ:
+ case eWNI_SME_TDLS_LINK_ESTABLISH_REQ:
#endif
#ifdef FEATURE_WLAN_TDLS_INTERNAL
case eWNI_SME_TDLS_DISCOVERY_START_REQ:
@@ -1349,7 +1350,41 @@
limMsg->bodyptr = NULL;
}
break;
+#ifdef FEATURE_WLAN_TDLS
+ case SIR_HAL_TDLS_IND:
+ {
+ tSirTdlsInd *pTdlsInd = (tpSirTdlsInd)limMsg->bodyptr ;
+ tpDphHashNode pStaDs = NULL ;
+ tpPESession psessionEntry = NULL;
+ tANI_U8 sessionId;
+ if((psessionEntry = peFindSessionByStaId(pMac,pTdlsInd->staIdx,&sessionId))== NULL)
+ {
+ limLog(pMac, LOG1, FL("session does not exist for given bssId\n"));
+ palFreeMemory(pMac->hHdd, (tANI_U8 *)limMsg->bodyptr);
+ limMsg->bodyptr = NULL;
+ return;
+ }
+ if ((pStaDs = dphGetHashEntry(pMac, pTdlsInd->assocId, &psessionEntry->dph.dphHashTable)) == NULL)
+ {
+ limLog(pMac, LOG1, FL("pStaDs Does not exist for given staId\n"));
+ palFreeMemory(pMac->hHdd, (tANI_U8 *)limMsg->bodyptr);
+ limMsg->bodyptr = NULL;
+ return;
+ }
+ if ((STA_ENTRY_TDLS_PEER == pStaDs->staType))
+ {
+ limLog(pMac, LOGE,
+ FL("received TDLS Indication from the Firmware with Reason Code %d "),
+ pTdlsInd->reasonCode);
+ limSendSmeTDLSDelStaInd(pMac, pStaDs, psessionEntry,
+ /*pTdlsInd->reasonCode*/eSIR_MAC_TDLS_TEARDOWN_PEER_UNREACHABLE);
+ }
+ palFreeMemory(pMac->hHdd, (tANI_U8 *)limMsg->bodyptr);
+ limMsg->bodyptr = NULL;
+ }
+ break;
+#endif
case SIR_HAL_P2P_NOA_ATTR_IND:
{
tpPESession psessionEntry = &pMac->lim.gpSession[0];
@@ -1888,6 +1923,14 @@
#endif
}
break;
+#ifdef FEATURE_WLAN_TDLS
+ case WDA_SET_TDLS_LINK_ESTABLISH_REQ_RSP:
+ {
+ /*TODO Sunil , See how do you enhance this , Reason Code ???*/
+ limSendSmeTdlsLinkEstablishReqRsp(pMac, 0 , NULL, NULL, eSIR_SUCCESS ) ;
+ break;
+ }
+#endif
default:
vos_mem_free((v_VOID_t*)limMsg->bodyptr);
limMsg->bodyptr = NULL;
diff --git a/CORE/MAC/src/pe/lim/limProcessSmeReqMessages.c b/CORE/MAC/src/pe/lim/limProcessSmeReqMessages.c
index ae2c512..3196621 100644
--- a/CORE/MAC/src/pe/lim/limProcessSmeReqMessages.c
+++ b/CORE/MAC/src/pe/lim/limProcessSmeReqMessages.c
@@ -5406,6 +5406,9 @@
case eWNI_SME_TDLS_DEL_STA_REQ:
limProcessSmeTdlsDelStaReq(pMac, pMsgBuf);
break;
+ case eWNI_SME_TDLS_LINK_ESTABLISH_REQ:
+ limProcesSmeTdlsLinkEstablishReq(pMac, pMsgBuf);
+ break;
#endif
#ifdef FEATURE_WLAN_TDLS_INTERNAL
case eWNI_SME_TDLS_DISCOVERY_START_REQ:
diff --git a/CORE/MAC/src/pe/lim/limProcessTdls.c b/CORE/MAC/src/pe/lim/limProcessTdls.c
index 73f3762..cb15591 100644
--- a/CORE/MAC/src/pe/lim/limProcessTdls.c
+++ b/CORE/MAC/src/pe/lim/limProcessTdls.c
@@ -1,44 +1,23 @@
/*
- * Copyright (c) 2012-2013, The Linux Foundation. All rights reserved.
- *
- * Previously licensed under the ISC license by Qualcomm Atheros, Inc.
- *
- *
- * Permission to use, copy, modify, and/or distribute this software for
- * any purpose with or without fee is hereby granted, provided that the
- * above copyright notice and this permission notice appear in all
- * copies.
- *
- * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL
- * WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED
- * WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE
- * AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL
- * DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR
- * PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER
- * TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
- * PERFORMANCE OF THIS SOFTWARE.
- */
-/*
- * Copyright (c) 2012-2013, The Linux Foundation. All rights reserved.
- *
- * Previously licensed under the ISC license by Qualcomm Atheros, Inc.
- *
- *
- * Permission to use, copy, modify, and/or distribute this software for
- * any purpose with or without fee is hereby granted, provided that the
- * above copyright notice and this permission notice appear in all
- * copies.
- *
- * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL
- * WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED
- * WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE
- * AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL
- * DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR
- * PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER
- * TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
- * PERFORMANCE OF THIS SOFTWARE.
- */
-
+ * Copyright (c) 2012-2013, The Linux Foundation. All rights reserved.
+ *
+ * Previously licensed under the ISC license by Qualcomm Atheros, Inc.
+ *
+ *
+ * Permission to use, copy, modify, and/or distribute this software for
+ * any purpose with or without fee is hereby granted, provided that the
+ * above copyright notice and this permission notice appear in all
+ * copies.
+ *
+ * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL
+ * WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED
+ * WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE
+ * AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL
+ * DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR
+ * PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER
+ * TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
+ * PERFORMANCE OF THIS SOFTWARE.
+*/
/*===========================================================================
limProcessTdls.c
@@ -49,10 +28,9 @@
Are listed for each API below.
-
- Copyright (c) 2010 QUALCOMM Incorporated.
+ Copyright (c) 2010 Qualcomm Technologies, Inc.
All Rights Reserved.
- Qualcomm Confidential and Proprietary
+ Qualcomm Technologies Confidential and Proprietary
===========================================================================*/
/*===========================================================================
@@ -1199,10 +1177,10 @@
tSirRetStatus limSendTdlsLinkSetupReqFrame(tpAniSirGlobal pMac,
tSirMacAddr peerMac, tANI_U8 dialog, tpPESession psessionEntry,
- tANI_U8 *addIe, tANI_U16 addIeLen)
+ tANI_U8 *addIe, tANI_U16 addIeLen)
{
tDot11fTDLSSetupReq tdlsSetupReq ;
- tANI_U16 caps = 0 ;
+ tANI_U16 caps = 0 ;
tANI_U32 status = 0 ;
tANI_U32 nPayload = 0 ;
tANI_U32 nBytes = 0 ;
@@ -1217,12 +1195,12 @@
// As of now, we hardcoded to max channel bonding of dot11Mode (i.e HT80 for 11ac/HT40 for 11n)
// uint32 tdlsChannelBondingMode;
- /*
+ /*
* The scheme here is to fill out a 'tDot11fProbeRequest' structure
* and then hand it off to 'dot11fPackProbeRequest' (for
* serialization). We start by zero-initializing the structure:
*/
- palZeroMemory( pMac->hHdd, ( tANI_U8* )&tdlsSetupReq,
+ palZeroMemory( pMac->hHdd, ( tANI_U8* )&tdlsSetupReq,
sizeof( tDot11fTDLSSetupReq ) );
tdlsSetupReq.Category.category = SIR_MAC_ACTION_TDLS ;
tdlsSetupReq.Action.action = SIR_MAC_TDLS_SETUP_REQ ;
@@ -1244,9 +1222,9 @@
swapBitField16(caps, ( tANI_U16* )&tdlsSetupReq.Capabilities );
/* populate supported rate IE */
- PopulateDot11fSuppRates( pMac, POPULATE_DOT11F_RATES_OPERATIONAL,
+ PopulateDot11fSuppRates( pMac, POPULATE_DOT11F_RATES_OPERATIONAL,
&tdlsSetupReq.SuppRates, psessionEntry );
-
+
/* Populate extended supported rates */
PopulateDot11fExtSuppRates( pMac, POPULATE_DOT11F_RATES_OPERATIONAL,
&tdlsSetupReq.ExtSuppRates, psessionEntry );
@@ -1254,10 +1232,10 @@
/* Populate extended supported rates */
PopulateDot11fTdlsExtCapability( pMac, &tdlsSetupReq.ExtCap );
- /*
+ /*
* TODO: we need to see if we have to support conditions where we have
* EDCA parameter info element is needed a) if we need different QOS
- * parameters for off channel operations or QOS is not supported on
+ * parameters for off channel operations or QOS is not supported on
* AP link and we wanted to QOS on direct link.
*/
/* Populate QOS info, needed for Peer U-APSD session */
@@ -1266,11 +1244,11 @@
tdlsSetupReq.QOSCapsStation.present = 1;
tdlsSetupReq.QOSCapsStation.max_sp_length = 0;
tdlsSetupReq.QOSCapsStation.qack = 0;
- tdlsSetupReq.QOSCapsStation.acbe_uapsd = 0;
- tdlsSetupReq.QOSCapsStation.acbk_uapsd = 0;
- tdlsSetupReq.QOSCapsStation.acvi_uapsd = 0;
- tdlsSetupReq.QOSCapsStation.acvo_uapsd = 0;
-
+ tdlsSetupReq.QOSCapsStation.acbe_uapsd = ((pMac->lim.gLimTDLSUapsdMask & 0x08) >> 3) ;
+ tdlsSetupReq.QOSCapsStation.acbk_uapsd = ((pMac->lim.gLimTDLSUapsdMask & 0x04)>> 2);
+ tdlsSetupReq.QOSCapsStation.acvi_uapsd = ((pMac->lim.gLimTDLSUapsdMask & 0x02)>> 1);
+ tdlsSetupReq.QOSCapsStation.acvo_uapsd = (pMac->lim.gLimTDLSUapsdMask & 0x01);
+
/*
* we will always try to init TDLS link with 11n capabilities
@@ -1338,10 +1316,10 @@
}
#endif
}
- /*
+ /*
* now we pack it. First, how much space are we going to need?
*/
- status = dot11fGetPackedTDLSSetupReqSize( pMac, &tdlsSetupReq,
+ status = dot11fGetPackedTDLSSetupReqSize( pMac, &tdlsSetupReq,
&nPayload);
if ( DOT11F_FAILED( status ) )
{
@@ -1362,7 +1340,7 @@
* This frame is going out from PE as data frames with special ethertype
* 89-0d.
* 8 bytes of RFC 1042 header
- */
+ */
nBytes = nPayload + ((IS_QOS_ENABLED(psessionEntry))
@@ -1386,28 +1364,28 @@
/* zero out the memory */
palZeroMemory( pMac->hHdd, pFrame, nBytes );
- /*
+ /*
* IE formation, memory allocation is completed, Now form TDLS discovery
* request frame
*/
/* fill out the buffer descriptor */
- header_offset = limPrepareTdlsFrameHeader(pMac, pFrame,
+ header_offset = limPrepareTdlsFrameHeader(pMac, pFrame,
LINK_IDEN_ADDR_OFFSET(tdlsSetupReq), TDLS_LINK_AP, TDLS_INITIATOR, TID_AC_BK, psessionEntry) ;
#ifdef FEATURE_WLAN_TDLS_NEGATIVE
if(pMac->lim.gLimTdlsNegativeBehavior & LIM_TDLS_NEGATIVE_WRONG_BSSID_IN_SETUP_REQ)
{
tdlsSetupReq.LinkIdentifier.bssid[4] = 0xde;
- tdlsSetupReq.LinkIdentifier.bssid[5] = 0xad;
- VOS_TRACE(VOS_MODULE_ID_PE, VOS_TRACE_LEVEL_ERROR,
+ tdlsSetupReq.LinkIdentifier.bssid[5] = 0xad;
+ VOS_TRACE(VOS_MODULE_ID_PE, VOS_TRACE_LEVEL_ERROR,
("TDLS negative running: wrong BSSID %02x:%02x:%02x:%02x:%02x:%02x in TDLS Setup Req"), \
- tdlsSetupReq.LinkIdentifier.bssid[0],
- tdlsSetupReq.LinkIdentifier.bssid[1],
- tdlsSetupReq.LinkIdentifier.bssid[2],
- tdlsSetupReq.LinkIdentifier.bssid[3],
- tdlsSetupReq.LinkIdentifier.bssid[4],
+ tdlsSetupReq.LinkIdentifier.bssid[0],
+ tdlsSetupReq.LinkIdentifier.bssid[1],
+ tdlsSetupReq.LinkIdentifier.bssid[2],
+ tdlsSetupReq.LinkIdentifier.bssid[3],
+ tdlsSetupReq.LinkIdentifier.bssid[4],
tdlsSetupReq.LinkIdentifier.bssid[5]);
}
#endif
@@ -1415,7 +1393,7 @@
__func__, tdlsSetupReq.VHTCaps.supportedChannelWidthSet, tdlsSetupReq.VHTCaps.rxMCSMap,
tdlsSetupReq.VHTCaps.txMCSMap, tdlsSetupReq.VHTCaps.txSupDataRate );
- status = dot11fPackTDLSSetupReq( pMac, &tdlsSetupReq, pFrame
+ status = dot11fPackTDLSSetupReq( pMac, &tdlsSetupReq, pFrame
+ header_offset, nPayload, &nPayload );
if ( DOT11F_FAILED( status ) )
@@ -1432,7 +1410,7 @@
"Discovery Request (0x%08x).") );
}
- //Copy the additional IE.
+ //Copy the additional IE.
//TODO : addIe is added at the end of the frame. This means it doesnt
//follow the order. This should be ok, but we should consider changing this
//if there is any IOT issue.
@@ -1471,7 +1449,7 @@
tSirRetStatus limSendTdlsTeardownFrame(tpAniSirGlobal pMac,
tSirMacAddr peerMac, tANI_U16 reason, tANI_U8 responder, tpPESession psessionEntry,
- tANI_U8 *addIe, tANI_U16 addIeLen)
+ tANI_U8 *addIe, tANI_U16 addIeLen)
{
tDot11fTDLSTeardown teardown ;
tANI_U32 status = 0 ;
@@ -1484,22 +1462,22 @@
#ifndef NO_PAD_TDLS_MIN_8023_SIZE
tANI_U32 padLen = 0;
#endif
- /*
+ /*
* The scheme here is to fill out a 'tDot11fProbeRequest' structure
* and then hand it off to 'dot11fPackProbeRequest' (for
* serialization). We start by zero-initializing the structure:
*/
- palZeroMemory( pMac->hHdd, ( tANI_U8* )&teardown,
+ palZeroMemory( pMac->hHdd, ( tANI_U8* )&teardown,
sizeof( tDot11fTDLSTeardown ) );
teardown.Category.category = SIR_MAC_ACTION_TDLS ;
teardown.Action.action = SIR_MAC_TDLS_TEARDOWN ;
teardown.Reason.code = reason ;
- PopulateDot11fLinkIden( pMac, psessionEntry, &teardown.LinkIdentifier,
+ PopulateDot11fLinkIden( pMac, psessionEntry, &teardown.LinkIdentifier,
peerMac, (responder == TRUE) ? TDLS_RESPONDER : TDLS_INITIATOR) ;
- /*
+ /*
* now we pack it. First, how much space are we going to need?
*/
status = dot11fGetPackedTDLSTeardownSize( pMac, &teardown, &nPayload);
@@ -1522,7 +1500,7 @@
* This frame is going out from PE as data frames with special ethertype
* 89-0d.
* 8 bytes of RFC 1042 header
- */
+ */
nBytes = nPayload + ((IS_QOS_ENABLED(psessionEntry))
@@ -1563,28 +1541,28 @@
/* zero out the memory */
palZeroMemory( pMac->hHdd, pFrame, nBytes );
- /*
+ /*
* IE formation, memory allocation is completed, Now form TDLS discovery
* request frame
*/
/* fill out the buffer descriptor */
- header_offset = limPrepareTdlsFrameHeader(pMac, pFrame,
- LINK_IDEN_ADDR_OFFSET(teardown),
- (reason == eSIR_MAC_TDLS_TEARDOWN_PEER_UNREACHABLE)
+ header_offset = limPrepareTdlsFrameHeader(pMac, pFrame,
+ LINK_IDEN_ADDR_OFFSET(teardown),
+ (reason == eSIR_MAC_TDLS_TEARDOWN_PEER_UNREACHABLE)
? TDLS_LINK_AP : TDLS_LINK_DIRECT,
(responder == TRUE) ? TDLS_RESPONDER : TDLS_INITIATOR,
TID_AC_VI, psessionEntry) ;
- status = dot11fPackTDLSTeardown( pMac, &teardown, pFrame
+ status = dot11fPackTDLSTeardown( pMac, &teardown, pFrame
+ header_offset, nPayload, &nPayload );
if ( DOT11F_FAILED( status ) )
{
limLog( pMac, LOGE, FL("Failed to pack a TDLS Teardown req \
(0x%08x)."), status );
- palPktFree( pMac->hHdd, HAL_TXRX_FRM_802_11_MGMT,
+ palPktFree( pMac->hHdd, HAL_TXRX_FRM_802_11_MGMT,
( void* ) pFrame, ( void* ) pPacket );
return eSIR_FAILURE;
}
@@ -1594,10 +1572,10 @@
"Teardown Request (0x%08x).") );
}
#if 0
- if(pMac->hal.pCBackFnTxComp == NULL)
+ if(pMac->hal.pCBackFnTxComp == NULL)
{
pMac->hal.pCBackFnTxComp = (tpCBackFnTxComp)limTdlsTeardownTxComplete;
- if(TX_SUCCESS != tx_timer_activate(&pMac->hal.txCompTimer))
+ if(TX_SUCCESS != tx_timer_activate(&pMac->hal.txCompTimer))
{
status = eHAL_STATUS_FAILURE;
return status;
@@ -1610,12 +1588,12 @@
return status ;
}
#endif
-
+
if( addIeLen != 0 )
{
LIM_LOG_TDLS(VOS_TRACE(VOS_MODULE_ID_PE, VOS_TRACE_LEVEL_ERROR, ("Copy Additional Ie Len = %d"),
addIeLen ));
- palCopyMemory( pMac->hHdd, pFrame + header_offset + nPayload, addIe, addIeLen );
+ palCopyMemory( pMac->hHdd, pFrame + header_offset + nPayload, addIe, addIeLen );
}
#ifndef NO_PAD_TDLS_MIN_8023_SIZE
@@ -1646,7 +1624,7 @@
HAL_TXRX_FRM_802_11_DATA,
ANI_TXDIR_TODS,
TID_AC_VI,
- limTxComplete, pFrame,
+ limTxComplete, pFrame,
limMgmtTXComplete,
HAL_USE_BD_RATE2_FOR_MANAGEMENT_FRAME );
if ( ! HAL_STATUS_SUCCESS ( halstatus ) )
@@ -1736,10 +1714,10 @@
tdlsSetupRsp.QOSCapsStation.present = 1;
tdlsSetupRsp.QOSCapsStation.max_sp_length = 0;
tdlsSetupRsp.QOSCapsStation.qack = 0;
- tdlsSetupRsp.QOSCapsStation.acbe_uapsd = 1;
- tdlsSetupRsp.QOSCapsStation.acbk_uapsd = 1;
- tdlsSetupRsp.QOSCapsStation.acvi_uapsd = 1;
- tdlsSetupRsp.QOSCapsStation.acvo_uapsd = 1;
+ tdlsSetupRsp.QOSCapsStation.acbe_uapsd = ((pMac->lim.gLimTDLSUapsdMask & 0x08) >> 3);
+ tdlsSetupRsp.QOSCapsStation.acbk_uapsd = ((pMac->lim.gLimTDLSUapsdMask & 0x04) >> 2);
+ tdlsSetupRsp.QOSCapsStation.acvi_uapsd = ((pMac->lim.gLimTDLSUapsdMask & 0x02) >> 1);
+ tdlsSetupRsp.QOSCapsStation.acvo_uapsd = (pMac->lim.gLimTDLSUapsdMask & 0x01);
wlan_cfgGetInt(pMac,WNI_CFG_DOT11_MODE,&selfDot11Mode);
@@ -5110,7 +5088,7 @@
tDot11fIEExtCap *extCapability)
{
extCapability->TDLSPeerPSMSupp = PEER_PSM_SUPPORT ;
- extCapability->TDLSPeerUAPSDBufferSTA = PEER_BUFFER_STA_SUPPORT ;
+ extCapability->TDLSPeerUAPSDBufferSTA = pMac->lim.gLimTDLSBufStaEnabled;
extCapability->TDLSChannelSwitching = CH_SWITCH_SUPPORT ;
extCapability->TDLSSupport = TDLS_SUPPORT ;
extCapability->TDLSProhibited = TDLS_PROHIBITED ;
@@ -5315,6 +5293,38 @@
}
/*
+ * Send Response to Link Establish Request to SME
+ */
+void limSendSmeTdlsLinkEstablishReqRsp(tpAniSirGlobal pMac,
+ tANI_U8 sessionId, tSirMacAddr peerMac, tDphHashNode *pStaDs,
+ tANI_U8 status)
+{
+ tSirMsgQ mmhMsg = {0} ;
+
+ tSirTdlsLinkEstablishReqRsp *pTdlsLinkEstablishReqRsp = NULL ;
+
+ if(eHAL_STATUS_SUCCESS != palAllocateMemory(pMac->hHdd,(void * *) &pTdlsLinkEstablishReqRsp,
+ (sizeof(tSirTdlsLinkEstablishReqRsp))))
+ {
+ PELOGE(limLog(pMac, LOGE, FL("Failed to allocate memory"));)
+ return ;
+ }
+ pTdlsLinkEstablishReqRsp->statusCode = status ;
+ if( peerMac )
+ {
+ palCopyMemory(pMac->hHdd, pTdlsLinkEstablishReqRsp->peerMac, peerMac, sizeof(tSirMacAddr));
+ }
+ pTdlsLinkEstablishReqRsp->sessionId = sessionId;
+ mmhMsg.type = eWNI_SME_TDLS_LINK_ESTABLISH_RSP ;
+ mmhMsg.bodyptr = pTdlsLinkEstablishReqRsp;
+ mmhMsg.bodyval = 0;
+ limSysProcessMmhMsgApi(pMac, &mmhMsg, ePROT);
+ return ;
+
+
+}
+
+/*
* Once link is teardown, send Del Peer Ind to SME
*/
static eHalStatus limSendSmeTdlsDelStaRsp(tpAniSirGlobal pMac,
@@ -5490,6 +5500,99 @@
return eSIR_SUCCESS;
}
+
+/*
+ * Process Link Establishment Request from SME .
+ */
+tSirRetStatus limProcesSmeTdlsLinkEstablishReq(tpAniSirGlobal pMac,
+ tANI_U32 *pMsgBuf)
+{
+ /* get all discovery request parameters */
+ tSirTdlsLinkEstablishReq *pTdlsLinkEstablishReq = (tSirTdlsLinkEstablishReq*) pMsgBuf ;
+ tpPESession psessionEntry;
+ tANI_U8 sessionId;
+ tpTdlsLinkEstablishParams pMsgTdlsLinkEstablishReq;
+ tSirMsgQ msg;
+ tANI_U16 peerIdx = 0 ;
+ tpDphHashNode pStaDs = NULL ;
+
+ VOS_TRACE(VOS_MODULE_ID_PE, VOS_TRACE_LEVEL_INFO,
+ ("Send Mgmt Recieved\n")) ;
+
+ if((psessionEntry = peFindSessionByBssid(pMac, pTdlsLinkEstablishReq->bssid, &sessionId))
+ == NULL)
+ {
+ VOS_TRACE(VOS_MODULE_ID_PE, VOS_TRACE_LEVEL_ERROR,
+ "PE Session does not exist for given sme sessionId %d\n",
+ pTdlsLinkEstablishReq->sessionId);
+ limSendSmeTdlsLinkEstablishReqRsp(pMac, pTdlsLinkEstablishReq->sessionId, pTdlsLinkEstablishReq->peerMac,
+ NULL, eSIR_FAILURE) ;
+ return eSIR_FAILURE;
+ }
+
+ /* check if we are in proper state to work as TDLS client */
+ if (psessionEntry->limSystemRole != eLIM_STA_ROLE)
+ {
+ VOS_TRACE(VOS_MODULE_ID_PE, VOS_TRACE_LEVEL_ERROR,
+ "TDLS Link Establish Request received in wrong system Role %d\n",
+ psessionEntry->limSystemRole);
+ goto lim_tdls_link_establish_error;
+ }
+
+ /*
+ * if we are still good, go ahead and check if we are in proper state to
+ * do TDLS discovery req/rsp/....frames.
+ */
+ if ((psessionEntry->limSmeState != eLIM_SME_ASSOCIATED_STATE) &&
+ (psessionEntry->limSmeState != eLIM_SME_LINK_EST_STATE))
+ {
+
+ limLog(pMac, LOGE, "TDLS Link Establish Request received in invalid LIMsme \
+ state (%d)\n", psessionEntry->limSmeState);
+ goto lim_tdls_link_establish_error;
+ }
+ /*TODO Sunil , TDLSPeer Entry has the STA ID , Use it */
+ pStaDs = dphLookupHashEntry(pMac, pTdlsLinkEstablishReq->peerMac, &peerIdx,
+ &psessionEntry->dph.dphHashTable) ;
+ if ( NULL == pStaDs )
+ {
+ limLog( pMac, LOGE, FL( "pStaDs is NULL \n" ));
+ goto lim_tdls_link_establish_error;
+
+ }
+ if ( eHAL_STATUS_SUCCESS != palAllocateMemory(
+ pMac->hHdd, (void **) &pMsgTdlsLinkEstablishReq, sizeof( tTdlsLinkEstablishParams )))
+ {
+ limLog( pMac, LOGE,
+ FL( "Unable to allocate memory TDLS Link Establish Request \n" ));
+ return eSIR_MEM_ALLOC_FAILED;
+ }
+
+ palZeroMemory( pMac->hHdd, (tANI_U8 *)pMsgTdlsLinkEstablishReq, sizeof(tpTdlsLinkEstablishParams));
+
+ pMsgTdlsLinkEstablishReq->sta_idx = pStaDs->staIndex;
+ pMsgTdlsLinkEstablishReq->is_responder = pTdlsLinkEstablishReq->isResponder;
+ pMsgTdlsLinkEstablishReq->uapsd_queues = pTdlsLinkEstablishReq->uapsdQueues;
+ pMsgTdlsLinkEstablishReq->max_sp = pTdlsLinkEstablishReq->maxSp;
+ pMsgTdlsLinkEstablishReq->is_bufsta = pTdlsLinkEstablishReq->isBufSta;
+ msg.type = WDA_SET_TDLS_LINK_ESTABLISH_REQ;
+ msg.reserved = 0;
+ msg.bodyptr = pMsgTdlsLinkEstablishReq;
+ msg.bodyval = 0;
+ if(eSIR_SUCCESS != wdaPostCtrlMsg(pMac, &msg))
+ {
+ limLog(pMac, LOGE, FL("halPostMsgApi failed\n"));
+ goto lim_tdls_link_establish_error;
+ }
+ return eSIR_SUCCESS;
+lim_tdls_link_establish_error:
+ limSendSmeTdlsLinkEstablishReqRsp(pMac, psessionEntry->smeSessionId, pTdlsLinkEstablishReq->peerMac,
+ NULL, eSIR_FAILURE) ;
+
+ return eSIR_SUCCESS;
+}
+
+
/* Delete all the TDLS peer connected before leaving the BSS */
tSirRetStatus limDeleteTDLSPeers(tpAniSirGlobal pMac, tpPESession psessionEntry)
{
diff --git a/CORE/MAC/src/pe/lim/limSendSmeRspMessages.h b/CORE/MAC/src/pe/lim/limSendSmeRspMessages.h
index 3ef5351..bb7ac66 100644
--- a/CORE/MAC/src/pe/lim/limSendSmeRspMessages.h
+++ b/CORE/MAC/src/pe/lim/limSendSmeRspMessages.h
@@ -1,44 +1,23 @@
/*
- * Copyright (c) 2012-2013, The Linux Foundation. All rights reserved.
- *
- * Previously licensed under the ISC license by Qualcomm Atheros, Inc.
- *
- *
- * Permission to use, copy, modify, and/or distribute this software for
- * any purpose with or without fee is hereby granted, provided that the
- * above copyright notice and this permission notice appear in all
- * copies.
- *
- * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL
- * WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED
- * WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE
- * AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL
- * DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR
- * PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER
- * TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
- * PERFORMANCE OF THIS SOFTWARE.
- */
-/*
- * Copyright (c) 2012, The Linux Foundation. All rights reserved.
- *
- * Previously licensed under the ISC license by Qualcomm Atheros, Inc.
- *
- *
- * Permission to use, copy, modify, and/or distribute this software for
- * any purpose with or without fee is hereby granted, provided that the
- * above copyright notice and this permission notice appear in all
- * copies.
- *
- * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL
- * WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED
- * WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE
- * AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL
- * DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR
- * PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER
- * TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
- * PERFORMANCE OF THIS SOFTWARE.
- */
-
+ * Copyright (c) 2012-2013, The Linux Foundation. All rights reserved.
+ *
+ * Previously licensed under the ISC license by Qualcomm Atheros, Inc.
+ *
+ *
+ * Permission to use, copy, modify, and/or distribute this software for
+ * any purpose with or without fee is hereby granted, provided that the
+ * above copyright notice and this permission notice appear in all
+ * copies.
+ *
+ * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL
+ * WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED
+ * WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE
+ * AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL
+ * DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR
+ * PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER
+ * TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
+ * PERFORMANCE OF THIS SOFTWARE.
+*/
/*
* Airgo Networks, Inc proprietary. All rights reserved.
* This file limSendSmeRspMessages.h contains the definitions for
@@ -124,6 +103,9 @@
void limSendSmeTdlsDisRsp(tpAniSirGlobal pMac, tSirResultCodes statusCode, tANI_U16 msgType);
void limSendSmeTdlsLinkStartRsp(tpAniSirGlobal pMac, tSirResultCodes statusCode, tSirMacAddr peerMac, tANI_U16 msgType);
void limSendSmeTdlsTeardownRsp(tpAniSirGlobal pMac, tSirResultCodes statusCode, tSirMacAddr peerMac, tANI_U16 msgType);
+void limSendSmeTdlsLinkEstablishReqRsp(tpAniSirGlobal pMac,
+ tANI_U8 sessionId, tSirMacAddr peerMac, tDphHashNode *pStaDs,
+ tANI_U8 status);
#endif
#endif /* __LIM_SEND_SME_RSP_H */
diff --git a/CORE/MAC/src/pe/lim/limTypes.h b/CORE/MAC/src/pe/lim/limTypes.h
index 00bff88..8f86cf9 100644
--- a/CORE/MAC/src/pe/lim/limTypes.h
+++ b/CORE/MAC/src/pe/lim/limTypes.h
@@ -739,6 +739,8 @@
tANI_U32 *pMsgBuf);
tSirRetStatus limProcessSmeTdlsAddStaReq(tpAniSirGlobal pMac,
tANI_U32 *pMsgBuf);
+tSirRetStatus limProcesSmeTdlsLinkEstablishReq(tpAniSirGlobal pMac,
+ tANI_U32 *pMsgBuf);
tSirRetStatus limProcessSmeTdlsDelStaReq(tpAniSirGlobal pMac,
tANI_U32 *pMsgBuf);
void limSendSmeTDLSDeleteAllPeerInd(tpAniSirGlobal pMac, tpPESession psessionEntry);
diff --git a/CORE/SME/inc/csrApi.h b/CORE/SME/inc/csrApi.h
index 4b8b869..4708ae3 100644
--- a/CORE/SME/inc/csrApi.h
+++ b/CORE/SME/inc/csrApi.h
@@ -555,6 +555,7 @@
eCSR_ROAM_RESULT_DELETE_TDLS_PEER,
eCSR_ROAM_RESULT_TEARDOWN_TDLS_PEER_IND,
eCSR_ROAM_RESULT_DELETE_ALL_TDLS_PEER_IND,
+ eCSR_ROAM_RESULT_LINK_ESTABLISH_REQ_RSP,
#ifdef FEATURE_WLAN_TDLS_OXYGEN_DISAPPEAR_AP
eCSR_ROAM_RESULT_TDLS_DISAPPEAR_AP_IND,
#endif
@@ -1330,6 +1331,16 @@
} tCsrRoamRemoveKey;
#ifdef FEATURE_WLAN_TDLS
+
+typedef struct tagCsrLinkEstablishParams
+{
+ tSirMacAddr peerMac;
+ tANI_U8 uapsdQueues;
+ tANI_U8 maxSp;
+ tANI_U8 isBufSta;
+ tANI_U8 isResponder;
+}tCsrTdlsLinkEstablishParams;
+
typedef struct tagCsrTdlsSendMgmt
{
tSirMacAddr peerMac;
diff --git a/CORE/SME/inc/smeInside.h b/CORE/SME/inc/smeInside.h
index 1a4ee23..c885744 100644
--- a/CORE/SME/inc/smeInside.h
+++ b/CORE/SME/inc/smeInside.h
@@ -132,6 +132,15 @@
tANI_U8 len;
} tTdlsSendMgmtCmdInfo;
+typedef struct TdlsLinkEstablishInfo
+{
+ tSirMacAddr peerMac;
+ tANI_U8 uapsdQueues;
+ tANI_U8 maxSp;
+ tANI_U8 isBufSta;
+ tANI_U8 isResponder;
+} tTdlsLinkEstablishCmdInfo;
+
typedef struct TdlsAddStaInfo
{
eTdlsAddOper tdlsAddOper;
@@ -184,6 +193,7 @@
//tEnterPeerUAPSDInfo enterUapsdInfo ;
//tExitPeerUAPSDinfo exitUapsdInfo ;
#endif
+ tTdlsLinkEstablishCmdInfo tdlsLinkEstablishCmdInfo;
tTdlsSendMgmtCmdInfo tdlsSendMgmtCmdInfo;
tTdlsAddStaCmdInfo tdlsAddStaCmdInfo;
tTdlsDelStaCmdInfo tdlsDelStaCmdInfo;
@@ -293,10 +303,15 @@
tANI_BOOLEAN csrRoamGetConcurrencyConnectStatusForBmps(tpAniSirGlobal pMac);
#ifdef FEATURE_WLAN_TDLS
eHalStatus csrTdlsSendMgmtReq(tHalHandle hHal, tANI_U8 sessionId, tCsrTdlsSendMgmt *tdlsSendMgmt);
+VOS_STATUS csrTdlsSendLinkEstablishParams(tHalHandle hHal,
+ tANI_U8 sessionId,
+ tSirMacAddr peerMac,
+ tCsrTdlsLinkEstablishParams *tdlsLinkEstablishParams);
eHalStatus csrTdlsAddPeerSta(tHalHandle hHal, tANI_U8 sessionId, tSirMacAddr peerMac);
eHalStatus csrTdlsChangePeerSta(tHalHandle hHal, tANI_U8 sessionId, tSirMacAddr peerMac, tCsrStaParams *pstaParams);
eHalStatus csrTdlsDelPeerSta(tHalHandle hHal, tANI_U8 sessionId, tSirMacAddr peerMac);
eHalStatus csrTdlsProcessCmd(tpAniSirGlobal pMac,tSmeCmd *pCommand );
+eHalStatus csrTdlsProcessLinkEstablish( tpAniSirGlobal pMac, tSmeCmd *cmd );
eHalStatus tdlsMsgProcessor(tpAniSirGlobal pMac,v_U16_t msg_type,
void *pMsgBuf);
#ifdef FEATURE_WLAN_TDLS_INTERNAL
diff --git a/CORE/SME/inc/smeInternal.h b/CORE/SME/inc/smeInternal.h
index f37ce4b..24c7f6e 100644
--- a/CORE/SME/inc/smeInternal.h
+++ b/CORE/SME/inc/smeInternal.h
@@ -91,6 +91,7 @@
eSmeCommandTdlsSendMgmt,
eSmeCommandTdlsAddPeer,
eSmeCommandTdlsDelPeer,
+ eSmeCommandTdlsLinkEstablish,
#ifdef FEATURE_WLAN_TDLS_INTERNAL
eSmeCommandTdlsDiscovery,
eSmeCommandTdlsLinkSetup,
diff --git a/CORE/SME/inc/sme_Api.h b/CORE/SME/inc/sme_Api.h
index 052983e..b76959a 100644
--- a/CORE/SME/inc/sme_Api.h
+++ b/CORE/SME/inc/sme_Api.h
@@ -2714,6 +2714,21 @@
-------------------------------------------------------------------------*/
tANI_U8 sme_IsFeatureSupportedByFW(tANI_U8 featEnumValue);
#ifdef FEATURE_WLAN_TDLS
+
+/* ---------------------------------------------------------------------------
+ \fn sme_SendTdlsLinkEstablishParams
+ \brief API to send TDLS Link Establishment Parameters.
+
+ \param peerMac - peer's Mac Adress.
+ \param tdlsLinkEstablishParams - TDLS Peer Link Establishment Parameters
+ \- return VOS_STATUS_SUCCES
+ -------------------------------------------------------------------------*/
+
+VOS_STATUS sme_SendTdlsLinkEstablishParams(tHalHandle hHal,
+ tANI_U8 sessionId,
+ tSirMacAddr peerMac,
+ tCsrTdlsLinkEstablishParams *tdlsLinkEstablishParams);
+
/* ---------------------------------------------------------------------------
\fn sme_SendTdlsMgmtFrame
\brief API to send TDLS management frames.
diff --git a/CORE/SME/src/csr/csrTdlsProcess.c b/CORE/SME/src/csr/csrTdlsProcess.c
index 684627d..44a8404 100644
--- a/CORE/SME/src/csr/csrTdlsProcess.c
+++ b/CORE/SME/src/csr/csrTdlsProcess.c
@@ -237,6 +237,46 @@
return status ;
}
+/*
+ * TDLS request API, called from HDD to Send Link Establishment Parameters
+ */
+VOS_STATUS csrTdlsSendLinkEstablishParams(tHalHandle hHal,
+ tANI_U8 sessionId,
+ tSirMacAddr peerMac,
+ tCsrTdlsLinkEstablishParams *tdlsLinkEstablishParams)
+{
+ tpAniSirGlobal pMac = PMAC_STRUCT( hHal );
+ tSmeCmd *tdlsLinkEstablishCmd;
+ eHalStatus status = eHAL_STATUS_FAILURE ;
+ //If connected and in Infra. Only then allow this
+ if( CSR_IS_SESSION_VALID( pMac, sessionId ) &&
+ csrIsConnStateConnectedInfra( pMac, sessionId ) &&
+ (NULL != peerMac) )
+ {
+ tdlsLinkEstablishCmd = csrGetCommandBuffer(pMac) ;
+
+ if(tdlsLinkEstablishCmd)
+ {
+ tTdlsLinkEstablishCmdInfo *tdlsLinkEstablishCmdInfo =
+ &tdlsLinkEstablishCmd->u.tdlsCmd.u.tdlsLinkEstablishCmdInfo ;
+
+ tdlsLinkEstablishCmd->sessionId = sessionId;
+
+ palCopyMemory(pMac->hHdd, tdlsLinkEstablishCmdInfo->peerMac,
+ peerMac, sizeof(tSirMacAddr));
+ tdlsLinkEstablishCmdInfo->isBufSta = tdlsLinkEstablishParams->isBufSta;
+ tdlsLinkEstablishCmdInfo->isResponder= tdlsLinkEstablishParams->isResponder;
+ tdlsLinkEstablishCmdInfo->maxSp= tdlsLinkEstablishParams->maxSp;
+ tdlsLinkEstablishCmdInfo->uapsdQueues= tdlsLinkEstablishParams->uapsdQueues;
+ tdlsLinkEstablishCmd->command = eSmeCommandTdlsLinkEstablish ;
+ tdlsLinkEstablishCmd->u.tdlsCmd.size = sizeof(tTdlsLinkEstablishCmdInfo) ;
+ smePushCommand(pMac, tdlsLinkEstablishCmd, FALSE) ;
+ status = eHAL_STATUS_SUCCESS ;
+ }
+ }
+
+ return status ;
+}
/*
* TDLS request API, called from HDD to add a TDLS peer
@@ -646,6 +686,15 @@
}
}
break;
+ case eSmeCommandTdlsLinkEstablish:
+ {
+ status = csrTdlsProcessLinkEstablish( pMac, cmd );
+ if(HAL_STATUS_SUCCESS( status ) )
+ {
+ status = eANI_BOOLEAN_FALSE ;
+ }
+ }
+ break;
#ifdef FEATURE_WLAN_TDLS_INTERNAL
case eSmeCommandTdlsDiscovery:
{
@@ -761,6 +810,47 @@
return status ;
}
+eHalStatus csrTdlsProcessLinkEstablish( tpAniSirGlobal pMac, tSmeCmd *cmd )
+{
+ tTdlsLinkEstablishCmdInfo *tdlsLinkEstablishCmdInfo = &cmd->u.tdlsCmd.u.tdlsLinkEstablishCmdInfo ;
+ tSirTdlsLinkEstablishReq *tdlsLinkEstablishReq = NULL ;
+ eHalStatus status = eHAL_STATUS_FAILURE;
+ tCsrRoamSession *pSession = CSR_GET_SESSION( pMac, cmd->sessionId );
+
+ status = palAllocateMemory( pMac->hHdd, (void **)&tdlsLinkEstablishReq,
+ (sizeof(tSirTdlsLinkEstablishReq) ) );
+
+ if (!HAL_STATUS_SUCCESS( status ) )
+ {
+ smsLog( pMac, LOGE, FL("alloc failed \n") );
+ VOS_ASSERT(0) ;
+ return status ;
+ }
+ tdlsLinkEstablishReq->sessionId = cmd->sessionId;
+ //Using dialog as transactionId. This can be used to match response with request
+ tdlsLinkEstablishReq->transactionId = 0;
+ palCopyMemory(pMac->hHdd, tdlsLinkEstablishReq->peerMac,
+ tdlsLinkEstablishCmdInfo->peerMac, sizeof(tSirMacAddr));
+ palCopyMemory(pMac->hHdd, tdlsLinkEstablishReq->bssid, pSession->pConnectBssDesc->bssId,
+ sizeof (tSirMacAddr));
+ tdlsLinkEstablishReq->isBufSta = tdlsLinkEstablishCmdInfo->isBufSta;
+ tdlsLinkEstablishReq->isResponder= tdlsLinkEstablishCmdInfo->isResponder;
+ tdlsLinkEstablishReq->uapsdQueues= tdlsLinkEstablishCmdInfo->uapsdQueues;
+ tdlsLinkEstablishReq->maxSp= tdlsLinkEstablishCmdInfo->maxSp;
+
+
+ // Send the request to PE.
+ smsLog( pMac, LOGE, "sending TDLS Link Establish Request to PE \n" );
+ status = tdlsSendMessage(pMac, eWNI_SME_TDLS_LINK_ESTABLISH_REQ,
+ (void *)tdlsLinkEstablishReq,
+ sizeof(tSirTdlsLinkEstablishReq));
+ if (!HAL_STATUS_SUCCESS( status ) )
+ {
+ smsLog( pMac, LOGE, FL("Failed to send request to MAC\n"));
+ }
+ return status;
+}
+
#ifdef FEATURE_WLAN_TDLS_INTERNAL
/*
* Find specific TDLS peer (based on peer MAC address).
@@ -997,6 +1087,24 @@
csrRoamCallCallback(pMac, pSirTdlsDelAllPeerInd->sessionId, &roamInfo,
0, eCSR_ROAM_RESULT_MGMT_TX_COMPLETE_IND, 0);
+ break;
+ }
+ case eWNI_SME_TDLS_LINK_ESTABLISH_RSP:
+ {
+ tSirTdlsLinkEstablishReqRsp *linkEstablishReqRsp = (tSirTdlsLinkEstablishReqRsp *) pMsgBuf ;
+ tCsrRoamInfo roamInfo = {0} ;
+#if 0
+ palCopyMemory(pMac->hHdd, &roamInfo.peerMac, delStaRsp->peerMac,
+ sizeof(tSirMacAddr)) ;
+ roamInfo.staId = delStaRsp->staId ;
+ roamInfo.statusCode = delStaRsp->statusCode ;
+#endif
+ csrRoamCallCallback(pMac, linkEstablishReqRsp->sessionId, &roamInfo, 0,
+ eCSR_ROAM_TDLS_STATUS_UPDATE,
+ eCSR_ROAM_RESULT_LINK_ESTABLISH_REQ_RSP);
+ /* remove pending eSmeCommandTdlsLinkEstablish command */
+ csrTdlsRemoveSmeCmd(pMac, eSmeCommandTdlsLinkEstablish);
+ break;
}
#ifdef FEATURE_WLAN_TDLS_INTERNAL
case eWNI_SME_TDLS_DISCOVERY_START_RSP:
diff --git a/CORE/SME/src/sme_common/sme_Api.c b/CORE/SME/src/sme_common/sme_Api.c
index e97000a..a14ac58 100644
--- a/CORE/SME/src/sme_common/sme_Api.c
+++ b/CORE/SME/src/sme_common/sme_Api.c
@@ -789,6 +789,7 @@
case eSmeCommandTdlsSendMgmt:
case eSmeCommandTdlsAddPeer:
case eSmeCommandTdlsDelPeer:
+ case eSmeCommandTdlsLinkEstablish:
#ifdef FEATURE_WLAN_TDLS_INTERNAL
case eSmeCommandTdlsDiscovery:
case eSmeCommandTdlsLinkSetup:
@@ -1716,6 +1717,7 @@
case eWNI_SME_TDLS_DEL_STA_IND:
case eWNI_SME_TDLS_DEL_ALL_PEER_IND:
case eWNI_SME_MGMT_FRM_TX_COMPLETION_IND:
+ case eWNI_SME_TDLS_LINK_ESTABLISH_RSP:
#ifdef FEATURE_WLAN_TDLS_OXYGEN_DISAPPEAR_AP
case eWNI_SME_TDLS_AP_DISAPPEAR_IND:
#endif
@@ -8071,6 +8073,33 @@
return IS_FEATURE_SUPPORTED_BY_FW(featEnumValue);
}
#ifdef FEATURE_WLAN_TDLS
+
+/* ---------------------------------------------------------------------------
+ \fn sme_SendTdlsMgmtFrame
+ \brief API to send TDLS management frames.
+
+ \param peerMac - peer's Mac Adress.
+ \param tdlsLinkEstablishParams - TDLS Peer Link Establishment Parameters
+ \- return VOS_STATUS_SUCCES
+ -------------------------------------------------------------------------*/
+VOS_STATUS sme_SendTdlsLinkEstablishParams(tHalHandle hHal,
+ tANI_U8 sessionId,
+ tSirMacAddr peerMac,
+ tCsrTdlsLinkEstablishParams *tdlsLinkEstablishParams)
+{
+ eHalStatus status = eHAL_STATUS_SUCCESS;
+ tpAniSirGlobal pMac = PMAC_STRUCT(hHal);
+
+ status = sme_AcquireGlobalLock( &pMac->sme );
+
+ if ( HAL_STATUS_SUCCESS( status ) )
+ {
+ status = csrTdlsSendLinkEstablishParams(hHal, sessionId, peerMac, tdlsLinkEstablishParams) ;
+ sme_ReleaseGlobalLock( &pMac->sme );
+ }
+ return status ;
+}
+
/* ---------------------------------------------------------------------------
\fn sme_SendTdlsMgmtFrame
\brief API to send TDLS management frames.
diff --git a/CORE/TL/src/wlan_qct_tl.c b/CORE/TL/src/wlan_qct_tl.c
index 3869fc5..0716816 100644
--- a/CORE/TL/src/wlan_qct_tl.c
+++ b/CORE/TL/src/wlan_qct_tl.c
@@ -10520,24 +10520,36 @@
/*Set this flag in order to remember that this is a trigger enabled AC*/
pTLCb->atlSTAClients[ucSTAId]->wUAPSDInfo[ucAC].ucSet = 1;
-
- TLLOG2(VOS_TRACE( VOS_MODULE_ID_TL, VOS_TRACE_LEVEL_INFO_HIGH,
- "WLAN TL:Enabling U-APSD in FW for STA: %d AC: %d SI: %d SPI: %d "
- "DI: %d",
- ucSTAId, ucAC, uServiceInt, uSuspendInt,
- pTLCb->tlConfigInfo.uDelayedTriggerFrmInt));
- /*Save all info for HAL*/
- halUAPSDInfo.staidx = ucSTAId;
- halUAPSDInfo.ac = ucAC;
- halUAPSDInfo.up = ucUP;
- halUAPSDInfo.srvInterval = uServiceInt;
- halUAPSDInfo.susInterval = uSuspendInt;
- halUAPSDInfo.delayInterval = pTLCb->tlConfigInfo.uDelayedTriggerFrmInt;
+#ifdef FEATURE_WLAN_TDLS
+ if(pTLCb->atlSTAClients[ucSTAId]->wSTADesc.wSTAType != WLAN_STA_TDLS)
+#endif
+ {
+ if( 0 == uServiceInt )
+ {
+ TLLOGE(VOS_TRACE( VOS_MODULE_ID_TL, VOS_TRACE_LEVEL_ERROR,
+ "WLAN TL:Invalid input params on WLANTL_EnableUAPSDForAC"
+ " SI: %d", uServiceInt ));
+ return VOS_STATUS_E_FAULT;
+ }
- /*Notify HAL*/
- vosStatus = WDA_EnableUapsdAcParams(pvosGCtx, ucSTAId, &halUAPSDInfo);
+ TLLOG2(VOS_TRACE( VOS_MODULE_ID_TL, VOS_TRACE_LEVEL_INFO_HIGH,
+ "WLAN TL:Enabling U-APSD in FW for STA: %d AC: %d SI: %d SPI: %d "
+ "DI: %d",
+ ucSTAId, ucAC, uServiceInt, uSuspendInt,
+ pTLCb->tlConfigInfo.uDelayedTriggerFrmInt));
+ /*Save all info for HAL*/
+ halUAPSDInfo.staidx = ucSTAId;
+ halUAPSDInfo.ac = ucAC;
+ halUAPSDInfo.up = ucUP;
+ halUAPSDInfo.srvInterval = uServiceInt;
+ halUAPSDInfo.susInterval = uSuspendInt;
+ halUAPSDInfo.delayInterval = pTLCb->tlConfigInfo.uDelayedTriggerFrmInt;
+
+ /*Notify HAL*/
+ vosStatus = WDA_EnableUapsdAcParams(pvosGCtx, ucSTAId, &halUAPSDInfo);
+ }
return vosStatus;
}/*WLANTL_EnableUAPSDForAC*/
diff --git a/CORE/WDA/inc/legacy/halMsgApi.h b/CORE/WDA/inc/legacy/halMsgApi.h
index 98a8bbd..32a1755 100644
--- a/CORE/WDA/inc/legacy/halMsgApi.h
+++ b/CORE/WDA/inc/legacy/halMsgApi.h
@@ -1318,6 +1318,15 @@
tANI_U8 psSelection;
}tP2pPsParams, *tpP2pPsParams;
+typedef struct sTdlsLinkEstablishParams
+{
+ tANI_U16 sta_idx;
+ tANI_U8 is_responder;
+ tANI_U8 uapsd_queues;
+ tANI_U8 max_sp;
+ tANI_U8 is_bufsta;
+}tTdlsLinkEstablishParams, *tpTdlsLinkEstablishParams;
+
static inline void halGetTxTSFtimer(tpAniSirGlobal pMac,
tSirMacTimeStamp *pTime)
{
diff --git a/CORE/WDA/inc/wlan_qct_wda.h b/CORE/WDA/inc/wlan_qct_wda.h
index 8938dec..6443ebb 100644
--- a/CORE/WDA/inc/wlan_qct_wda.h
+++ b/CORE/WDA/inc/wlan_qct_wda.h
@@ -1006,6 +1006,8 @@
#define WDA_DEL_STA_SELF_REQ SIR_HAL_DEL_STA_SELF_REQ
#define WDA_SET_P2P_GO_NOA_REQ SIR_HAL_SET_P2P_GO_NOA_REQ
+#define WDA_SET_TDLS_LINK_ESTABLISH_REQ SIR_HAL_TDLS_LINK_ESTABLISH_REQ
+#define WDA_SET_TDLS_LINK_ESTABLISH_REQ_RSP SIR_HAL_TDLS_LINK_ESTABLISH_REQ_RSP
#define WDA_TX_COMPLETE_TIMEOUT_IND (WDA_MSG_TYPES_END - 1)
#define WDA_WLAN_SUSPEND_IND SIR_HAL_WLAN_SUSPEND_IND
diff --git a/CORE/WDA/src/wlan_qct_wda.c b/CORE/WDA/src/wlan_qct_wda.c
index 72ca23e..478863b 100644
--- a/CORE/WDA/src/wlan_qct_wda.c
+++ b/CORE/WDA/src/wlan_qct_wda.c
@@ -1478,6 +1478,61 @@
tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
+ sizeof(tHalCfg) + tlvStruct->length) ;
+#ifdef FEATURE_WLAN_TDLS
+ /* QWLAN_HAL_CFG_TDLS_PUAPSD_MASK */
+ tlvStruct->type = QWLAN_HAL_CFG_TDLS_PUAPSD_MASK;
+ tlvStruct->length = sizeof(tANI_U32);
+ configDataValue = (tANI_U32 *)(tlvStruct + 1);
+ if(wlan_cfgGetInt(pMac, WNI_CFG_TDLS_QOS_WMM_UAPSD_MASK,
+ configDataValue ) != eSIR_SUCCESS)
+ {
+ VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
+ "Failed to get value for WNI_CFG_TDLS_QOS_WMM_UAPSD_MASK");
+ goto handle_failure;
+ }
+ tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
+ + sizeof(tHalCfg) + tlvStruct->length) ;
+
+ /* QWLAN_HAL_CFG_TDLS_PUAPSD_BUFFER_STA_CAPABLE */
+ tlvStruct->type = QWLAN_HAL_CFG_TDLS_PUAPSD_BUFFER_STA_CAPABLE;
+ tlvStruct->length = sizeof(tANI_U32);
+ configDataValue = (tANI_U32 *)(tlvStruct + 1);
+ if(wlan_cfgGetInt(pMac, WNI_CFG_TDLS_BUF_STA_ENABLED,
+ configDataValue ) != eSIR_SUCCESS)
+ {
+ VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
+ "Failed to get value for WNI_CFG_TDLS_BUF_STA_ENABLED");
+ goto handle_failure;
+ }
+ tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
+ + sizeof(tHalCfg) + tlvStruct->length) ;
+ /* QWLAN_HAL_CFG_TDLS_PUAPSD_INACTIVITY_TIME */
+ tlvStruct->type = QWLAN_HAL_CFG_TDLS_PUAPSD_INACTIVITY_TIME;
+ tlvStruct->length = sizeof(tANI_U32);
+ configDataValue = (tANI_U32 *)(tlvStruct + 1);
+ if(wlan_cfgGetInt(pMac, WNI_CFG_TDLS_PUAPSD_INACT_TIME,
+ configDataValue ) != eSIR_SUCCESS)
+ {
+ VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
+ "Failed to get value for WNI_CFG_TDLS_PUAPSD_INACT_TIME");
+ goto handle_failure;
+ }
+ tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
+ + sizeof(tHalCfg) + tlvStruct->length) ;
+ /* QWLAN_HAL_CFG_TDLS_PUAPSD_RX_FRAME_THRESHOLD_IN_SP */
+ tlvStruct->type = QWLAN_HAL_CFG_TDLS_PUAPSD_RX_FRAME_THRESHOLD_IN_SP;
+ tlvStruct->length = sizeof(tANI_U32);
+ configDataValue = (tANI_U32 *)(tlvStruct + 1);
+ if(wlan_cfgGetInt(pMac, WNI_CFG_TDLS_RX_FRAME_THRESHOLD,
+ configDataValue ) != eSIR_SUCCESS)
+ {
+ VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
+ "Failed to get value for WNI_CFG_TDLS_RX_FRAME_THRESHOLD");
+ goto handle_failure;
+ }
+ tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
+ + sizeof(tHalCfg) + tlvStruct->length) ;
+#endif
wdiStartParams->usConfigBufferLen = (tANI_U8 *)tlvStruct - tlvStructStart ;
#ifdef WLAN_DEBUG
@@ -6365,6 +6420,107 @@
return CONVERT_WDI2VOS_STATUS(status);
}
+
+#ifdef FEATURE_WLAN_TDLS
+/*
+ * FUNCTION: WDA_SetP2PGONOAReqParamsCallback
+ * Free the memory. No need to send any response to PE in this case
+ */
+void WDA_SetTDLSLinkEstablishReqParamsCallback(WDI_Status status, void* pUserData)
+{
+ tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
+ tWDA_CbContext *pWDA = NULL;
+
+
+ VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
+ "<------ %s " ,__func__);
+ if(NULL == pWdaParams)
+ {
+ VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
+ "%s: pWdaParams received NULL", __func__);
+ VOS_ASSERT(0) ;
+ return ;
+ }
+ pWDA = (tWDA_CbContext *) pWdaParams->pWdaContext;
+
+ if(NULL == pWdaParams)
+ {
+ VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
+ "%s: pWdaParams received NULL", __func__);
+ VOS_ASSERT(0) ;
+ return ;
+ }
+ /* send response to UMAC*/
+ WDA_SendMsg(pWDA, WDA_SET_TDLS_LINK_ESTABLISH_REQ_RSP, NULL , 0) ;
+
+ vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
+ vos_mem_free(pWdaParams->wdaMsgParam) ;
+ vos_mem_free(pWdaParams);
+ return ;
+}
+
+VOS_STATUS WDA_ProcessSetTdlsLinkEstablishReq(tWDA_CbContext *pWDA,
+ tTdlsLinkEstablishParams *pTdlsLinkEstablishParams)
+{
+ WDI_Status status = WDI_STATUS_SUCCESS ;
+ WDI_SetTDLSLinkEstablishReqParamsType *wdiSetTDLSLinkEstablishReqParam =
+ (WDI_SetTDLSLinkEstablishReqParamsType *)vos_mem_malloc(
+ sizeof(WDI_SetTDLSLinkEstablishReqParamsType)) ;
+ tWDA_ReqParams *pWdaParams = NULL;
+ VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
+ "------> %s " ,__func__);
+ if(NULL == wdiSetTDLSLinkEstablishReqParam)
+ {
+ VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
+ "%s: VOS MEM Alloc Failure", __func__);
+ VOS_ASSERT(0);
+ return VOS_STATUS_E_NOMEM;
+ }
+ pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
+ if(NULL == pWdaParams)
+ {
+ VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
+ "%s: VOS MEM Alloc Failure", __func__);
+ vos_mem_free(pTdlsLinkEstablishParams);
+ vos_mem_free(wdiSetTDLSLinkEstablishReqParam);
+ VOS_ASSERT(0);
+ return VOS_STATUS_E_NOMEM;
+ }
+ wdiSetTDLSLinkEstablishReqParam->wdiTDLSLinkEstablishInfo.uStaIdx =
+ pTdlsLinkEstablishParams->sta_idx;
+ wdiSetTDLSLinkEstablishReqParam->wdiTDLSLinkEstablishInfo.uIsResponder =
+ pTdlsLinkEstablishParams->is_responder;
+ wdiSetTDLSLinkEstablishReqParam->wdiTDLSLinkEstablishInfo.uUapsdQueues =
+ pTdlsLinkEstablishParams->uapsd_queues;
+ wdiSetTDLSLinkEstablishReqParam->wdiTDLSLinkEstablishInfo.uMaxSp =
+ pTdlsLinkEstablishParams->max_sp;
+ wdiSetTDLSLinkEstablishReqParam->wdiTDLSLinkEstablishInfo.uIsBufSta =
+ pTdlsLinkEstablishParams->is_bufsta;
+
+ wdiSetTDLSLinkEstablishReqParam->wdiReqStatusCB = NULL ;
+ /* Store msg pointer from PE, as this will be used for response */
+ pWdaParams->wdaMsgParam = (void *)pTdlsLinkEstablishParams ;
+ /* store Params pass it to WDI */
+ pWdaParams->wdaWdiApiMsgParam = (void *)wdiSetTDLSLinkEstablishReqParam ;
+ pWdaParams->pWdaContext = pWDA;
+
+ status = WDI_SetTDLSLinkEstablishReq(wdiSetTDLSLinkEstablishReqParam,
+ (WDI_SetTDLSLinkEstablishReqParamsRspCb)
+ WDA_SetTDLSLinkEstablishReqParamsCallback,
+ pWdaParams);
+ if(IS_WDI_STATUS_FAILURE(status))
+ {
+ VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
+ "Failure in Set P2P GO NOA Req WDI API, free all the memory " );
+ vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
+ vos_mem_free(pWdaParams->wdaMsgParam);
+ vos_mem_free(pWdaParams);
+ }
+ return CONVERT_WDI2VOS_STATUS(status);
+}
+#endif
+
+
#ifdef WLAN_FEATURE_VOWIFI_11R
/*
* FUNCTION: WDA_AggrAddTSReqCallback
@@ -11005,6 +11161,13 @@
break;
}
#endif
+#ifdef FEATURE_WLAN_TDLS
+ case WDA_SET_TDLS_LINK_ESTABLISH_REQ:
+ {
+ WDA_ProcessSetTdlsLinkEstablishReq(pWDA, (tTdlsLinkEstablishParams *)pMsg->bodyptr);
+ break;
+ }
+#endif
default:
{
VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
@@ -11266,6 +11429,32 @@
break;
}
+#ifdef FEATURE_WLAN_TDLS
+ case WDI_TDLS_IND :
+ {
+ tSirTdlsInd *pTdlsInd =
+ (tSirTdlsInd *)vos_mem_malloc(sizeof(tSirTdlsInd));
+
+ if (NULL == pTdlsInd)
+ {
+ VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
+ "Memory allocation failure, "
+ "WDI_TDLS_IND not forwarded");
+ break;
+ }
+ pTdlsInd->status =
+ wdiLowLevelInd->wdiIndicationData.wdiTdlsIndInfo.status;
+ pTdlsInd->assocId =
+ wdiLowLevelInd->wdiIndicationData.wdiTdlsIndInfo.assocId;
+ pTdlsInd->staIdx =
+ wdiLowLevelInd->wdiIndicationData.wdiTdlsIndInfo.staIdx;
+ pTdlsInd->reasonCode =
+ wdiLowLevelInd->wdiIndicationData.wdiTdlsIndInfo.reasonCode;
+ WDA_SendMsg(pWDA, SIR_HAL_TDLS_IND,
+ (void *)pTdlsInd , 0) ;
+ break;
+ }
+#endif
case WDI_P2P_NOA_ATTR_IND :
{
tSirP2PNoaAttr *pP2pNoaAttr =
diff --git a/CORE/WDI/CP/inc/wlan_qct_wdi.h b/CORE/WDI/CP/inc/wlan_qct_wdi.h
index 50416eb..d18d099 100644
--- a/CORE/WDI/CP/inc/wlan_qct_wdi.h
+++ b/CORE/WDI/CP/inc/wlan_qct_wdi.h
@@ -390,6 +390,9 @@
/* P2P_NOA_Start_Indication */
WDI_P2P_NOA_START_IND,
+ /* TDLS_Indication */
+ WDI_TDLS_IND,
+
WDI_MAX_IND
}WDI_LowLevelIndEnumType;
@@ -551,6 +554,16 @@
wpt_uint32 bssIdx;
}WDI_P2pNoaStartIndType;
+/*---------------------------------------------------------------------------
+ *WDI_TdlsIndType
+ *-------------------------------------------------------------------------*/
+typedef struct
+{
+ wpt_uint16 status;
+ wpt_uint16 assocId;
+ wpt_uint16 staIdx;
+ wpt_uint16 reasonCode;
+}WDI_TdlsIndType;
#ifdef WLAN_WAKEUP_EVENTS
/*---------------------------------------------------------------------------
@@ -615,6 +628,8 @@
/* P2P NOA ATTR Indication */
WDI_P2pNoaAttrIndType wdiP2pNoaAttrInfo;
WDI_P2pNoaStartIndType wdiP2pNoaStartInfo;
+ /* TDLS Indications */
+ WDI_TdlsIndType wdiTdlsIndInfo;
#ifdef FEATURE_WLAN_SCAN_PNO
@@ -3052,6 +3067,33 @@
void* pUserData;
}WDI_SetP2PGONOAReqParamsType;
+typedef struct
+{
+ wpt_uint16 uStaIdx;
+ wpt_uint8 uIsResponder;
+ wpt_uint8 uUapsdQueues;
+ wpt_uint8 uMaxSp;
+ wpt_uint8 uIsBufSta;
+}WDI_SetTDLSLinkEstablishReqInfoType;
+/*---------------------------------------------------------------------------
+ WDI_SetTDLSLinkEstablishReqParamsType
+---------------------------------------------------------------------------*/
+typedef struct
+{
+ /*TDLS Link Establish Req*/
+ WDI_SetTDLSLinkEstablishReqInfoType wdiTDLSLinkEstablishInfo;
+
+ /*Request status callback offered by UMAC - it is called if the current
+ req has returned PENDING as status; it delivers the status of sending
+ the message over the BUS */
+ WDI_ReqStatusCb wdiReqStatusCB;
+
+ /*The user data passed in by UMAC, it will be sent back when the above
+ function pointer will be called */
+ void* pUserData;
+}WDI_SetTDLSLinkEstablishReqParamsType;
+
+
/*---------------------------------------------------------------------------
WDI_SetAddSTASelfParamsType
@@ -5713,6 +5755,27 @@
typedef void (*WDI_SetP2PGONOAReqParamsRspCb)(WDI_Status wdiStatus,
void* pUserData);
+/*---------------------------------------------------------------------------
+ WDI_SetTDLSLinkEstablishReqParamsRspCb
+
+ DESCRIPTION
+
+ This callback is invoked by DAL when it has received a TDLS Link Establish Req response from
+ the underlying device.
+
+ PARAMETERS
+
+ IN
+ wdiStatus: response status received from HAL
+ pUserData: user data
+
+
+
+ RETURN VALUE
+ The result code associated with performing the operation
+---------------------------------------------------------------------------*/
+typedef void (*WDI_SetTDLSLinkEstablishReqParamsRspCb)(WDI_Status wdiStatus,
+ void* pUserData);
/*---------------------------------------------------------------------------
WDI_SetPwrSaveCfgCb
@@ -7771,6 +7834,37 @@
void* pUserData
);
+/**
+ @brief WDI_SetTDLSLinkEstablishReq will be called when the
+ upper MAC wants to send TDLS Link Establish Request Parameters
+ Upon the call of this API the WLAN DAL will
+ pack and send the TDLS Link Establish Request message to the
+ lower RIVA sub-system if DAL is in state STARTED.
+
+ In state BUSY this request will be queued. Request won't
+ be allowed in any other state.
+
+
+ @param pwdiTDLSLinkEstablishReqParams: TDLS Peer Parameters
+ for Link Establishment (Used for PUAPSD , TDLS Off Channel ...)
+
+ wdiTDLSLinkEstablishReqRspCb: callback for passing back the
+ response of the TDLS Link Establish request received
+ from the device
+
+ pUserData: user data will be passed back with the
+ callback
+
+ @see
+ @return Result of the function call
+*/
+WDI_Status
+WDI_SetTDLSLinkEstablishReq
+(
+ WDI_SetTDLSLinkEstablishReqParamsType* pwdiTDLSLinkEstablishReqParams,
+ WDI_SetTDLSLinkEstablishReqParamsRspCb wdiTDLSLinkEstablishReqRspCb,
+ void* pUserData
+);
/*========================================================================
diff --git a/CORE/WDI/CP/inc/wlan_qct_wdi_i.h b/CORE/WDI/CP/inc/wlan_qct_wdi_i.h
index b653813..50a77ee 100644
--- a/CORE/WDI/CP/inc/wlan_qct_wdi_i.h
+++ b/CORE/WDI/CP/inc/wlan_qct_wdi_i.h
@@ -446,6 +446,9 @@
/*WLAN DAL Set Tx Power Request*/
WDI_SET_TX_POWER_REQ = 82,
WDI_ROAM_SCAN_OFFLOAD_REQ = 83,
+
+ WDI_TDLS_LINK_ESTABLISH_REQ = 84,
+
WDI_MAX_REQ,
/*Send a suspend Indication down to HAL*/
@@ -712,6 +715,8 @@
WDI_SET_TX_POWER_RESP = 81,
WDI_ROAM_SCAN_OFFLOAD_RESP = 82,
+
+ WDI_TDLS_LINK_ESTABLISH_REQ_RESP = 83,
/*-------------------------------------------------------------------------
Indications
!! Keep these last in the enum if possible
@@ -759,6 +764,9 @@
/* NOA Start Indication from FW to Host */
WDI_HAL_P2P_NOA_START_IND = WDI_HAL_IND_MIN + 12,
+ /* TDLS Indication from FW to Host */
+ WDI_HAL_TDLS_IND = WDI_HAL_IND_MIN + 13,
+
WDI_MAX_RESP
}WDI_ResponseEnumType;
@@ -2221,6 +2229,23 @@
);
/**
+ @brief Process TDLS Link Establish Request function (called when Main FSM
+ allows it)
+
+ @param pWDICtx: pointer to the WLAN DAL context
+ pEventData: pointer to the event information structure
+
+ @see
+ @return Result of the function call
+*/
+WDI_Status
+WDI_ProcessTdlsLinkEstablishReq
+(
+ WDI_ControlBlockType* pWDICtx,
+ WDI_EventInfoType* pEventData
+);
+
+/**
@brief Process Enter IMPS Request function (called when
Main FSM allows it)
@@ -3407,6 +3432,23 @@
WDI_EventInfoType* pEventData
);
+ /**
+ @brief Process TDLS Link Establish Req Rsp function (called when a response
+ is being received over the bus from HAL)
+
+ @param pWDICtx: pointer to the WLAN DAL context
+ pEventData: pointer to the event information structure
+
+ @see
+ @return Result of the function call
+*/
+WDI_Status
+WDI_ProcessLinkEstablishReqRsp
+(
+ WDI_ControlBlockType* pWDICtx,
+ WDI_EventInfoType* pEventData
+);
+
/**
@brief Process Nv download(called when a response
is being received over the bus from HAL)
@@ -4070,6 +4112,24 @@
);
/**
+*@brief Process Tdls Indication function (called when
+ an indication of this kind is being received over the
+ bus from HAL)
+
+ @param pWDICtx: pointer to the WLAN DAL context
+ pEventData: pointer to the event information structure
+
+ @see
+ @return Result of the function call
+*/
+WDI_Status
+WDI_ProcessTdlsInd
+(
+ WDI_ControlBlockType* pWDICtx,
+ WDI_EventInfoType* pEventData
+);
+
+/**
*@brief Process Noa Start Indication function (called when
an indication of this kind is being received over the
bus from HAL)
diff --git a/CORE/WDI/CP/src/wlan_qct_wdi.c b/CORE/WDI/CP/src/wlan_qct_wdi.c
index 2884177..a113a8e 100644
--- a/CORE/WDI/CP/src/wlan_qct_wdi.c
+++ b/CORE/WDI/CP/src/wlan_qct_wdi.c
@@ -359,6 +359,11 @@
#else
NULL,
#endif /* WLAN_FEATURE_ROAM_SCAN_OFFLOAD */
+#ifdef FEATURE_WLAN_TDLS
+ WDI_ProcessTdlsLinkEstablishReq, /* WDI_TDLS_LINK_ESTABLISH_REQ */
+#else
+ NULL,
+#endif
/*-------------------------------------------------------------------------
Indications
-------------------------------------------------------------------------*/
@@ -542,6 +547,11 @@
#else
NULL,
#endif
+#ifdef FEATURE_WLAN_TDLS
+ WDI_ProcessLinkEstablishReqRsp, /*WDI_TDLS_LINK_ESTABLISH_REQ_RESP*/
+#else
+ NULL,
+#endif
/*---------------------------------------------------------------------
Indications
---------------------------------------------------------------------*/
@@ -573,6 +583,11 @@
WDI_ProcessTxPerHitInd, /* WDI_HAL_TX_PER_HIT_IND */
WDI_ProcessP2pNoaStartInd, /* WDI_NOA_START_IND */
+#ifdef FEATURE_WLAN_TDLS
+ WDI_ProcessTdlsInd, /* WDI_HAL_TDLS_IND */
+#else
+ NULL,
+#endif
};
@@ -829,6 +844,9 @@
CASE_RETURN_STRING( WDI_RMV_STA_BCAST_KEY_REQ );
CASE_RETURN_STRING( WDI_SET_MAX_TX_POWER_REQ );
CASE_RETURN_STRING( WDI_P2P_GO_NOTICE_OF_ABSENCE_REQ );
+#ifdef FEATURE_WLAN_TDLS
+ CASE_RETURN_STRING( WDI_TDLS_LINK_ESTABLISH_REQ );
+#endif
CASE_RETURN_STRING( WDI_ENTER_IMPS_REQ );
CASE_RETURN_STRING( WDI_EXIT_IMPS_REQ );
CASE_RETURN_STRING( WDI_ENTER_BMPS_REQ );
@@ -933,6 +951,10 @@
CASE_RETURN_STRING( WDI_RMV_STA_BCAST_KEY_RESP );
CASE_RETURN_STRING( WDI_SET_MAX_TX_POWER_RESP );
CASE_RETURN_STRING( WDI_P2P_GO_NOTICE_OF_ABSENCE_RESP );
+#ifdef FEATURE_WLAN_TDLS
+ CASE_RETURN_STRING( WDI_TDLS_LINK_ESTABLISH_REQ_RESP );
+ CASE_RETURN_STRING( WDI_HAL_TDLS_IND );
+#endif
CASE_RETURN_STRING( WDI_ENTER_IMPS_RESP );
CASE_RETURN_STRING( WDI_EXIT_IMPS_RESP );
CASE_RETURN_STRING( WDI_ENTER_BMPS_RESP );
@@ -5271,6 +5293,67 @@
}/*WDI_SetP2PGONOAReq*/
+#ifdef FEATURE_WLAN_TDLS
+/**
+ @brief WDI_SetTDLSLinkEstablishReq will be called when the
+ upper MAC wants to send TDLS Link Establish Request Parameters
+ Upon the call of this API the WLAN DAL will
+ pack and send the TDLS Link Establish Request message to the
+ lower RIVA sub-system if DAL is in state STARTED.
+
+ In state BUSY this request will be queued. Request won't
+ be allowed in any other state.
+
+
+ @param pwdiTDLSLinkEstablishReqParams: TDLS Peer Parameters
+ for Link Establishment (Used for PUAPSD , TDLS Off Channel ...)
+
+ wdiTDLSLinkEstablishReqRspCb: callback for passing back the
+ response of the TDLS Link Establish request received
+ from the device
+
+ pUserData: user data will be passed back with the
+ callback
+
+ @see
+ @return Result of the function call
+*/
+WDI_Status
+WDI_SetTDLSLinkEstablishReq
+(
+ WDI_SetTDLSLinkEstablishReqParamsType* pwdiTDLSLinkEstablishReqParams,
+ WDI_SetTDLSLinkEstablishReqParamsRspCb wdiTDLSLinkEstablishReqRspCb,
+ void* pUserData
+)
+{
+ WDI_EventInfoType wdiEventData;
+ /*- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - */
+
+ /*------------------------------------------------------------------------
+ Sanity Check
+ ------------------------------------------------------------------------*/
+ if ( eWLAN_PAL_FALSE == gWDIInitialized )
+ {
+ WPAL_TRACE(eWLAN_MODULE_DAL_CTRL, eWLAN_PAL_TRACE_LEVEL_ERROR,
+ "WDI API call before module is initialized - Fail request");
+
+ return WDI_STATUS_E_NOT_ALLOWED;
+ }
+
+ /*------------------------------------------------------------------------
+ Fill in Event data and post to the Main FSM
+ ------------------------------------------------------------------------*/
+ wdiEventData.wdiRequest = WDI_TDLS_LINK_ESTABLISH_REQ;
+ wdiEventData.pEventData = pwdiTDLSLinkEstablishReqParams;
+ wdiEventData.uEventDataSize = sizeof(*pwdiTDLSLinkEstablishReqParams);
+ wdiEventData.pCBfnc = wdiTDLSLinkEstablishReqRspCb;
+ wdiEventData.pUserData = pUserData;
+
+ return WDI_PostMainEvent(&gWDICb, WDI_REQUEST_EVENT, &wdiEventData);
+
+}/*WDI_SetTDLSLinkEstablishReq*/
+#endif
+
/**
@brief WDI_AddSTASelfReq will be called when the
UMAC wanted to add STA self while opening any new session
@@ -12222,6 +12305,104 @@
WDI_P2P_GO_NOTICE_OF_ABSENCE_RESP);
}/*WDI_ProcessP2PGONOAReq*/
+#ifdef FEATURE_WLAN_TDLS
+
+/**
+ @brief Process P2P Notice Of Absence Request function (called when Main FSM
+ allows it)
+
+ @param pWDICtx: pointer to the WLAN DAL context
+ pEventData: pointer to the event information structure
+
+ @see
+ @return Result of the function call
+*/
+WDI_Status
+WDI_ProcessTdlsLinkEstablishReq
+(
+ WDI_ControlBlockType* pWDICtx,
+ WDI_EventInfoType* pEventData
+)
+{
+ WDI_SetTDLSLinkEstablishReqParamsType* pwdiTDLSLinkEstablishReqParams;
+ WDI_SetTDLSLinkEstablishReqParamsRspCb wdiTDLSLinkEstablishReqRspCb;
+ wpt_uint8* pSendBuffer = NULL;
+ wpt_uint16 usDataOffset = 0;
+ wpt_uint16 usSendSize = 0;
+
+ tTDLSLinkEstablishedType halSetTDLSLinkEstablishParams;
+ /*- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - */
+
+ /*-------------------------------------------------------------------------
+ Sanity check
+ -------------------------------------------------------------------------*/
+ if (( NULL == pEventData ) ||
+ ( NULL == pEventData->pEventData) ||
+ ( NULL == pEventData->pCBfnc))
+ {
+ WPAL_TRACE( eWLAN_MODULE_DAL_CTRL, eWLAN_PAL_TRACE_LEVEL_WARN,
+ "%s: Invalid parameters", __func__);
+ WDI_ASSERT(0);
+ return WDI_STATUS_E_FAILURE;
+ }
+ pwdiTDLSLinkEstablishReqParams =
+ (WDI_SetTDLSLinkEstablishReqParamsType*)pEventData->pEventData;
+ wdiTDLSLinkEstablishReqRspCb =
+ (WDI_SetTDLSLinkEstablishReqParamsRspCb)pEventData->pCBfnc;
+
+
+ /*-----------------------------------------------------------------------
+ Get message buffer
+ -----------------------------------------------------------------------*/
+ if (( WDI_STATUS_SUCCESS != WDI_GetMessageBuffer( pWDICtx,
+ WDI_TDLS_LINK_ESTABLISH_REQ,
+ sizeof(halSetTDLSLinkEstablishParams),
+ &pSendBuffer, &usDataOffset, &usSendSize))||
+ ( usSendSize < (usDataOffset + sizeof(halSetTDLSLinkEstablishParams) )))
+ {
+ WPAL_TRACE( eWLAN_MODULE_DAL_CTRL, eWLAN_PAL_TRACE_LEVEL_WARN,
+ "Unable to get send buffer in set P2P GO NOA REQ %x %x %x",
+ pEventData, pwdiTDLSLinkEstablishReqParams, wdiTDLSLinkEstablishReqRspCb);
+ WDI_ASSERT(0);
+ return WDI_STATUS_E_FAILURE;
+ }
+
+ halSetTDLSLinkEstablishParams.staIdx =
+ pwdiTDLSLinkEstablishReqParams->wdiTDLSLinkEstablishInfo.uStaIdx;
+ halSetTDLSLinkEstablishParams.bIsResponder =
+ pwdiTDLSLinkEstablishReqParams->wdiTDLSLinkEstablishInfo.uIsResponder;
+ halSetTDLSLinkEstablishParams.acVOUAPSDFlag =
+ (pwdiTDLSLinkEstablishReqParams->wdiTDLSLinkEstablishInfo.uUapsdQueues & 0x08) >> 3;
+ halSetTDLSLinkEstablishParams.acVIUAPSDFlag =
+ (pwdiTDLSLinkEstablishReqParams->wdiTDLSLinkEstablishInfo.uUapsdQueues & 0x04) >> 2;
+ halSetTDLSLinkEstablishParams.acBKUAPSDFlag =
+ (pwdiTDLSLinkEstablishReqParams->wdiTDLSLinkEstablishInfo.uUapsdQueues & 0x02) >> 1;
+ halSetTDLSLinkEstablishParams.acBEUAPSDFlag =
+ pwdiTDLSLinkEstablishReqParams->wdiTDLSLinkEstablishInfo.uUapsdQueues & 0x01;
+ halSetTDLSLinkEstablishParams.aAck = 0;
+ halSetTDLSLinkEstablishParams.maxServicePeriodLength = (pwdiTDLSLinkEstablishReqParams->wdiTDLSLinkEstablishInfo.uMaxSp & 0x03);
+ halSetTDLSLinkEstablishParams.moreDataAck = 0;
+ halSetTDLSLinkEstablishParams.TPUBufferStaSupport = pwdiTDLSLinkEstablishReqParams->wdiTDLSLinkEstablishInfo.uIsBufSta;
+
+ wpalMemoryCopy( pSendBuffer+usDataOffset,
+ &halSetTDLSLinkEstablishParams,
+ sizeof(halSetTDLSLinkEstablishParams));
+
+ pWDICtx->wdiReqStatusCB = pwdiTDLSLinkEstablishReqParams->wdiReqStatusCB;
+ pWDICtx->pReqStatusUserData = pwdiTDLSLinkEstablishReqParams->pUserData;
+
+ /*-------------------------------------------------------------------------
+ Send Update Probe Resp Template Request to HAL
+ -------------------------------------------------------------------------*/
+ return WDI_SendMsg( pWDICtx, pSendBuffer, usSendSize,
+ wdiTDLSLinkEstablishReqRspCb, pEventData->pUserData,
+ WDI_TDLS_LINK_ESTABLISH_REQ_RESP);
+ return 0;
+}/*WDI_ProcessTdlsLinkEstablishReq*/
+
+
+#endif
+
/**
@@ -17500,6 +17681,58 @@
return WDI_STATUS_SUCCESS;
}
+#ifdef FEATURE_WLAN_TDLS
+/**
+ @brief Process TDLS Link Establish Rsp function (called
+ when a response is being received over the bus from HAL)
+
+ @param pWDICtx: pointer to the WLAN DAL context
+ pEventData: pointer to the event information structure
+
+ @see
+ @return Result of the function call
+*/
+WDI_Status
+WDI_ProcessLinkEstablishReqRsp
+(
+ WDI_ControlBlockType* pWDICtx,
+ WDI_EventInfoType* pEventData
+)
+{
+ WDI_Status wdiStatus;
+ eHalStatus halStatus;
+ WDI_SetTDLSLinkEstablishReqParamsRspCb wdiTDLSLinkEstablishReqParamsRspCb;
+ /*- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - */
+
+ /*-------------------------------------------------------------------------
+ Sanity check
+ -------------------------------------------------------------------------*/
+ if (( NULL == pWDICtx ) || ( NULL == pEventData ) ||
+ ( NULL == pEventData->pEventData))
+ {
+ WPAL_TRACE( eWLAN_MODULE_DAL_CTRL, eWLAN_PAL_TRACE_LEVEL_WARN,
+ "%s: Invalid parameters", __func__);
+ WDI_ASSERT(0);
+ return WDI_STATUS_E_FAILURE;
+ }
+
+ wdiTDLSLinkEstablishReqParamsRspCb = (WDI_SetTDLSLinkEstablishReqParamsRspCb)pWDICtx->pfncRspCB;
+
+ /*-------------------------------------------------------------------------
+ Extract response and send it to UMAC
+ -------------------------------------------------------------------------*/
+ wpalMemoryCopy( &halStatus,
+ pEventData->pEventData,
+ sizeof(halStatus));
+
+ wdiStatus = WDI_HAL_2_WDI_STATUS(halStatus);
+
+ /*Notify UMAC*/
+ wdiTDLSLinkEstablishReqParamsRspCb( wdiStatus, pWDICtx->pRspCBUserData);
+
+ return WDI_STATUS_SUCCESS;
+}/*WDI_ProcessLinkEstablishReqRsp*/
+#endif
/**
@brief Process P2P Group Owner Notice Of Absense Rsp function (called
@@ -19390,7 +19623,66 @@
return WDI_STATUS_SUCCESS;
}/*WDI_ProcessTxCompleteInd*/
+#ifdef FEATURE_WLAN_TDLS
+/**
+*@brief Process TDLS Indication function (called when
+ an indication of this kind is being received over the
+ bus from HAL)
+ @param pWDICtx: pointer to the WLAN DAL context
+ pEventData: pointer to the event information structure
+
+ @see
+ @return Result of the function call
+*/
+WDI_Status
+WDI_ProcessTdlsInd
+(
+ WDI_ControlBlockType* pWDICtx,
+ WDI_EventInfoType* pEventData
+)
+{
+ WDI_LowLevelIndType wdiInd;
+ tTdlsIndMsg halTdlsIndMsg;
+ /*- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - */
+
+ /*-------------------------------------------------------------------------
+ Sanity check
+ -------------------------------------------------------------------------*/
+ if (( NULL == pWDICtx ) || ( NULL == pEventData ) ||
+ ( NULL == pEventData->pEventData ))
+ {
+ WPAL_TRACE( eWLAN_MODULE_DAL_CTRL, eWLAN_PAL_TRACE_LEVEL_WARN,
+ "%s: Invalid parameters", __func__);
+ WDI_ASSERT( 0 );
+ return WDI_STATUS_E_FAILURE;
+ }
+
+ /*-------------------------------------------------------------------------
+ Extract indication and send it to UMAC
+ -------------------------------------------------------------------------*/
+ wpalMemoryCopy( &halTdlsIndMsg.tdlsIndParams,
+ pEventData->pEventData,
+ sizeof(halTdlsIndMsg.tdlsIndParams) );
+
+ /*Fill in the indication parameters*/
+ wdiInd.wdiIndicationType = WDI_TDLS_IND;
+
+ wdiInd.wdiIndicationData.wdiTdlsIndInfo.status
+ = halTdlsIndMsg.tdlsIndParams.status;
+
+ wdiInd.wdiIndicationData.wdiTdlsIndInfo.staIdx
+ = halTdlsIndMsg.tdlsIndParams.staIdx;
+
+ wdiInd.wdiIndicationData.wdiTdlsIndInfo.reasonCode
+ = halTdlsIndMsg.tdlsIndParams.reasonCode;
+
+ /*Notify UMAC*/
+ pWDICtx->wdiLowLevelIndCB( &wdiInd, pWDICtx->pIndUserData );
+
+ return WDI_STATUS_SUCCESS;
+}/*WDI_ProcessTdlsInd*/
+#endif
/**
*@brief Process Noa Start Indication function (called when
an indication of this kind is being received over the
@@ -21727,6 +22019,10 @@
return WLAN_HAL_SET_TX_POWER_REQ;
case WDI_P2P_GO_NOTICE_OF_ABSENCE_REQ:
return WLAN_HAL_SET_P2P_GONOA_REQ;
+#ifdef FEATURE_WLAN_TDLS
+ case WDI_TDLS_LINK_ESTABLISH_REQ:
+ return WLAN_HAL_TDLS_LINK_ESTABLISHED_REQ;
+#endif
case WDI_ENTER_IMPS_REQ:
return WLAN_HAL_ENTER_IMPS_REQ;
case WDI_EXIT_IMPS_REQ:
@@ -21956,6 +22252,12 @@
return WDI_SET_TX_POWER_RESP;
case WLAN_HAL_SET_P2P_GONOA_RSP:
return WDI_P2P_GO_NOTICE_OF_ABSENCE_RESP;
+#ifdef FEATURE_WLAN_TDLS
+ case WLAN_HAL_TDLS_LINK_ESTABLISHED_RSP:
+ return WDI_TDLS_LINK_ESTABLISH_REQ_RESP;
+ case WLAN_HAL_TDLS_IND:
+ return WDI_HAL_TDLS_IND;
+#endif
case WLAN_HAL_ENTER_IMPS_RSP:
return WDI_ENTER_IMPS_RESP;
case WLAN_HAL_EXIT_IMPS_RSP:
diff --git a/CORE/WDI/CP/src/wlan_qct_wdi_dp.c b/CORE/WDI/CP/src/wlan_qct_wdi_dp.c
index a7e8ef5..3a53c48 100644
--- a/CORE/WDI/CP/src/wlan_qct_wdi_dp.c
+++ b/CORE/WDI/CP/src/wlan_qct_wdi_dp.c
@@ -924,16 +924,19 @@
return VOS_STATUS_E_FAILURE;
} */
#ifdef WLAN_SOFTAP_VSTA_FEATURE
- // if this is a Virtual Station then change the DPU Routing Flag so
+ // if this is a Virtual Station or statype is TDLS and trig enabled mask
+ // set then change the DPU Routing Flag so
// that the frame will be routed to Firmware for queuing & transmit
- if (IS_VSTA_IDX(ucStaId))
+ if (IS_VSTA_IDX(ucStaId) ||
+ ((ucSTAType == WDI_STA_ENTRY_TDLS_PEER ) &&
+ (ucTxFlag & WDI_TRIGGER_ENABLED_AC_MASK)))
{
pBd->dpuRF = BMUWQ_FW_DPU_TX;
}
#endif
- }
-
+ }
+
/*------------------------------------------------------------------------
Over SDIO bus, SIF won't swap data bytes to/from data FIFO.
In order for MAC modules to recognize BD in Riva's default endian
@@ -947,7 +950,7 @@
byte order */
pBd->txBdSignature = uTxBdSignature ;
#endif
-
+
return wdiStatus;
}/*WDI_FillTxBd*/
@@ -1032,10 +1035,10 @@
/**
@brief WDI_RxAmsduBdFix - fix for HW issue for AMSDU
-
+
@param pWDICtx: Context to the WDI
pBDHeader - pointer to the BD header
-
+
@return None
*/
void
diff --git a/firmware_bin/WCNSS_cfg.dat b/firmware_bin/WCNSS_cfg.dat
index a5ee46c..6e64517 100644
--- a/firmware_bin/WCNSS_cfg.dat
+++ b/firmware_bin/WCNSS_cfg.dat
Binary files differ
diff --git a/riva/inc/wlan_hal_cfg.h b/riva/inc/wlan_hal_cfg.h
index c9a319c..4b45abb 100644
--- a/riva/inc/wlan_hal_cfg.h
+++ b/riva/inc/wlan_hal_cfg.h
@@ -1,24 +1,23 @@
/*
- * Copyright (c) 2012-2013, The Linux Foundation. All rights reserved.
- *
- * Previously licensed under the ISC license by Qualcomm Atheros, Inc.
- *
- *
- * Permission to use, copy, modify, and/or distribute this software for
- * any purpose with or without fee is hereby granted, provided that the
- * above copyright notice and this permission notice appear in all
- * copies.
- *
- * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL
- * WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED
- * WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE
- * AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL
- * DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR
- * PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER
- * TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
- * PERFORMANCE OF THIS SOFTWARE.
- */
-
+ * Copyright (c) 2012-2013, The Linux Foundation. All rights reserved.
+ *
+ * Previously licensed under the ISC license by Qualcomm Atheros, Inc.
+ *
+ *
+ * Permission to use, copy, modify, and/or distribute this software for
+ * any purpose with or without fee is hereby granted, provided that the
+ * above copyright notice and this permission notice appear in all
+ * copies.
+ *
+ * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL
+ * WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED
+ * WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE
+ * AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL
+ * DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR
+ * PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER
+ * TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
+ * PERFORMANCE OF THIS SOFTWARE.
+*/
/*==========================================================================
*
* @file: wlan_hal_cfg.h
@@ -156,7 +155,11 @@
#define QWLAN_HAL_CFG_AP_LINK_MONITOR_TIMEOUT 102
#define QWLAN_HAL_CFG_BTC_DWELL_TIME_MULTIPLIER 103
#define QWLAN_HAL_CFG_ENABLE_TDLS_OXYGEN_MODE 104
-#define QWLAN_HAL_CFG_MAX_PARAMS 105
+#define QWLAN_HAL_CFG_TDLS_PUAPSD_BUFFER_STA_CAPABLE 108
+#define QWLAN_HAL_CFG_TDLS_PUAPSD_MASK 109
+#define QWLAN_HAL_CFG_TDLS_PUAPSD_INACTIVITY_TIME 110
+#define QWLAN_HAL_CFG_TDLS_PUAPSD_RX_FRAME_THRESHOLD_IN_SP 111
+#define QWLAN_HAL_CFG_MAX_PARAMS 112
@@ -757,6 +760,27 @@
#define QWLAN_HAL_CFG_BTC_DWELL_TIME_MULTIPLIER_MAX 300
#define QWLAN_HAL_CFG_BTC_DWELL_TIME_MULTIPLIER_DEF 300
+/* QWLAN_HAL_CFG_TDLS_PUAPSD_BUFFER_STA_CAPABLE */
+#define QWLAN_HAL_CFG_TDLS_PUAPSD_BUFFER_STA_CAPABLE_MIN 0
+#define QWLAN_HAL_CFG_TDLS_PUAPSD_BUFFER_STA_CAPABLE_MAX 1
+#define QWLAN_HAL_CFG_TDLS_PUAPSD_BUFFER_STA_CAPABLE_DEF 0
+
+/* QWLAN_HAL_CFG_TDLS_PUAPSD_MASK */
+#define QWLAN_HAL_CFG_TDLS_PUAPSD_MASK_MIN 0
+#define QWLAN_HAL_CFG_TDLS_PUAPSD_MASK_MAX 0xf
+#define QWLAN_HAL_CFG_TDLS_PUAPSD_MASK_DEF 0
+
+/* QWLAN_HAL_CFG_TDLS_PUAPSD_INACTIVITY_TIME */
+#define QWLAN_HAL_CFG_TDLS_PUAPSD_INACTIVITY_TIME_MIN 0
+#define QWLAN_HAL_CFG_TDLS_PUAPSD_INACTIVITY_TIME_MAX 10
+#define QWLAN_HAL_CFG_TDLS_PUAPSD_INACTIVITY_TIME_DEF 0
+
+/* QWLAN_HAL_CFG_TDLS_PUAPSD_RX_FRAME_THRESHOLD_IN_SP */
+#define QWLAN_HAL_CFG_TDLS_PUAPSD_RX_FRAME_THRESHOLD_IN_SP_MIN 10
+#define QWLAN_HAL_CFG_TDLS_PUAPSD_RX_FRAME_THRESHOLD_IN_SP_MAX 20
+#define QWLAN_HAL_CFG_TDLS_PUAPSD_RX_FRAME_THRESHOLD_IN_SP_DEF 10
+
+
#endif //__WLAN_HAL_CFG_H__
diff --git a/riva/inc/wlan_hal_msg.h b/riva/inc/wlan_hal_msg.h
index 5878a2b..08503e5 100644
--- a/riva/inc/wlan_hal_msg.h
+++ b/riva/inc/wlan_hal_msg.h
@@ -376,6 +376,12 @@
WLAN_ROAM_SCAN_OFFLOAD_RSP = 192,
WLAN_HAL_WIFI_PROXIMITY_REQ = 193,
WLAN_HAL_WIFI_PROXIMITY_RSP = 194,
+ WLAN_HAL_TDLS_LINK_ESTABLISHED_REQ = 198,
+ WLAN_HAL_TDLS_LINK_ESTABLISHED_RSP = 199,
+ WLAN_HAL_TDLS_LINK_TEARDOWN_REQ = 200,
+ WLAN_HAL_TDLS_LINK_TEARDOWN_RSP = 201,
+ WLAN_HAL_TDLS_IND = 202,
+
WLAN_HAL_MSG_MAX = WLAN_HAL_MSG_TYPE_MAX_ENUM_SIZE
}tHalHostMsgType;
@@ -5994,6 +6000,110 @@
} tSetWifiProximityRspMsg, *tpSetWifiProxmityRspMsg;
#endif
+#ifdef FEATURE_WLAN_TDLS
+/*---------------------------------------------------------------------------
+ * WLAN_HAL_TDLS_LINK_ESTABLISHED_REQ
+ *-------------------------------------------------------------------------*/
+typedef PACKED_PRE struct PACKED_POST
+{
+ /*STA Index*/
+ tANI_U16 staIdx;
+
+ /* if this is 1, self is initiator and peer is reponder */
+ tANI_U8 bIsResponder;
+
+ /* QoS Info */
+ tANI_U8 acVOUAPSDFlag:1;
+ tANI_U8 acVIUAPSDFlag:1;
+ tANI_U8 acBKUAPSDFlag:1;
+ tANI_U8 acBEUAPSDFlag:1;
+ tANI_U8 aAck:1;
+ tANI_U8 maxServicePeriodLength:2;
+ tANI_U8 moreDataAck:1;
+
+ /*TDLS Peer U-APSD Buffer STA Support*/
+ tANI_U8 TPUBufferStaSupport;
+
+}tTDLSLinkEstablishedType, *tpTDLSLinkEstablishedType;
+
+typedef PACKED_PRE struct PACKED_POST
+{
+ tHalMsgHeader header;
+ tTDLSLinkEstablishedType tdlsLinkEstablishedParams;
+} tTDLSLinkEstablishedReqMsg, *tpTDLSLinkEstablishedReqMsg;
+
+/*---------------------------------------------------------------------------
+ * WLAN_HAL_TDLS_LINK_ESTABLISHED_RSP
+ *-------------------------------------------------------------------------*/
+
+typedef PACKED_PRE struct PACKED_POST
+{
+ tANI_U32 status;
+
+ /*STA Index*/
+ tANI_U16 staIdx;
+} tTDLSLinkEstablishedResp, *tpTDLSLinkEstablishedResp;
+
+typedef PACKED_PRE struct PACKED_POST
+{
+ tHalMsgHeader header;
+ tTDLSLinkEstablishedResp TDLSLinkEstablishedRespParams;
+} tTDLSLinkEstablishedRespMsg, *tpTDLSLinkEstablishedRespMsg;
+
+/*---------------------------------------------------------------------------
+ * WLAN_HAL_TDLS_LINK_TEARDOWN_REQ
+ *-------------------------------------------------------------------------*/
+typedef PACKED_PRE struct PACKED_POST
+{
+ /*STA Index*/
+ tANI_U16 staIdx;
+}tTDLSLinkTeardownType, *tpTDLSLinkTeardownType;
+
+typedef PACKED_PRE struct PACKED_POST
+{
+ tHalMsgHeader header;
+ tTDLSLinkTeardownType tdlsLinkTeardownParams;
+} tTDLSLinkTeardownReqMsg, *tpTDLSLinkTeardownReqMsg;
+
+/*---------------------------------------------------------------------------
+ * WLAN_HAL_TDLS_LINK_TEARDOWN_RSP
+ *-------------------------------------------------------------------------*/
+
+typedef PACKED_PRE struct PACKED_POST
+{
+ tANI_U32 status;
+
+ /*STA Index*/
+ tANI_U16 staIdx;
+} tTDLSLinkTeardownResp, *tpTDLSLinkTeardownResp;
+
+typedef PACKED_PRE struct PACKED_POST
+{
+ tHalMsgHeader header;
+ tTDLSLinkTeardownResp TDLSLinkTeardownRespParams;
+} tTDLSLinkTeardownRespMsg, *tpTDLSLinkTeardownRespMsg;
+
+/*---------------------------------------------------------------------------
+ *WLAN_HAL_TDLS_IND
+ *--------------------------------------------------------------------------*/
+
+typedef PACKED_PRE struct PACKED_POST
+{
+ tANI_U16 assocId;
+ tANI_U16 staIdx;
+ tANI_U16 status;
+ tANI_U16 reasonCode;
+}tTdlsIndParams, *tpTdlsIndParams;
+
+
+typedef PACKED_PRE struct PACKED_POST
+{
+ tHalMsgHeader header;
+ tTdlsIndParams tdlsIndParams;
+}tTdlsIndMsg, *tpTdlsIndMsg;
+
+#endif
+
#if defined(__ANI_COMPILER_PRAGMA_PACK_STACK)
#pragma pack(pop)
#elif defined(__ANI_COMPILER_PRAGMA_PACK)