wlan: Update Tx counters using correct TDLS station Id.
Setup of BA session on TDLS link. BA session is setup only if there is
any tx activity on a link and this is obtained by looking at the Tx
counter mainatined in TL.
Change-Id: I04a1e5ba14ea7c914d701bdfd09a3c7232490293
CR-Fixed: 431762
diff --git a/CORE/TL/src/wlan_qct_tl.c b/CORE/TL/src/wlan_qct_tl.c
index 010fff1..fb28efb 100644
--- a/CORE/TL/src/wlan_qct_tl.c
+++ b/CORE/TL/src/wlan_qct_tl.c
@@ -2112,9 +2112,15 @@
if (( 0 == pMetaInfo->ucDisableFrmXtl ) &&
( 0 != pTLCb->atlSTAClients[ucStaId].wSTADesc.ucSwFrameTXXlation ))
{
+#ifdef FEATURE_WLAN_TDLS
+ vosStatus = WLANTL_Translate8023To80211Header( vosDataBuff, &vosStatus,
+ pTLCb, &ucStaId,
+ pMetaInfo->ucUP, &ucWDSEnabled, &extraHeadSpace);
+#else
vosStatus = WLANTL_Translate8023To80211Header(vosDataBuff, &vosStatus,
pTLCb, ucStaId,
pMetaInfo->ucUP, &ucWDSEnabled, &extraHeadSpace);
+#endif
if ( VOS_STATUS_SUCCESS != vosStatus )
{
@@ -5999,10 +6005,15 @@
( 0 != pTLCb->atlSTAClients[ucSTAId].wSTADesc.ucSwFrameTXXlation) )
#endif //#ifdef FEATURE_WLAN_WAPI
{
+#ifdef FEATURE_WLAN_TDLS
+ vosStatus = WLANTL_Translate8023To80211Header( vosDataBuff, &vosStatus,
+ pTLCb, &ucSTAId,
+ tlMetaInfo.ucUP, &ucWDSEnabled, &extraHeadSpace);
+#else
vosStatus = WLANTL_Translate8023To80211Header( vosDataBuff, &vosStatus,
pTLCb, ucSTAId,
tlMetaInfo.ucUP, &ucWDSEnabled, &extraHeadSpace);
-
+#endif
if ( VOS_STATUS_SUCCESS != vosStatus )
{
TLLOGE(VOS_TRACE( VOS_MODULE_ID_TL, VOS_TRACE_LEVEL_ERROR,
@@ -6386,9 +6397,15 @@
gUcIsWai = tlMetaInfo.ucIsWai,
#endif
+#ifdef FEATURE_WLAN_TDLS
+ vosStatus = WLANTL_Translate8023To80211Header( vosDataBuff, &vosStatus,
+ pTLCb, &ucSTAId,
+ tlMetaInfo.ucUP, &ucWDSEnabled, &extraHeadSpace);
+#else
vosStatus = WLANTL_Translate8023To80211Header( vosDataBuff, &vosStatus,
pTLCb, ucSTAId,
tlMetaInfo.ucUP, &ucWDSEnabled, &extraHeadSpace);
+#endif
if ( VOS_STATUS_SUCCESS != vosStatus )
{
TLLOGE(VOS_TRACE( VOS_MODULE_ID_TL, VOS_TRACE_LEVEL_ERROR,
@@ -6462,10 +6479,14 @@
}
#endif
+#ifndef FEATURE_WLAN_TDLS
/*-----------------------------------------------------------------------
Update tx counter for BA session query for tx side
-----------------------------------------------------------------------*/
pStaClient->auTxCount[ucTid]++;
+#else
+ pTLCb->atlSTAClients[ucSTAId].auTxCount[ucTid]++;
+#endif
/* This code is to send traffic with lower priority AC when we does not
get admitted to send it. Today HAL does not downgrade AC so this code
@@ -8116,6 +8137,19 @@
SIDE EFFECTS
============================================================================*/
+#ifdef FEATURE_WLAN_TDLS
+VOS_STATUS
+WLANTL_Translate8023To80211Header
+(
+ vos_pkt_t* vosDataBuff,
+ VOS_STATUS* pvosStatus,
+ WLANTL_CbType* pTLCb,
+ v_U8_t *pucStaId,
+ v_U8_t ucUP,
+ v_U8_t *ucWDSEnabled,
+ v_U8_t *extraHeadSpace
+)
+#else
VOS_STATUS
WLANTL_Translate8023To80211Header
(
@@ -8127,6 +8161,7 @@
v_U8_t *ucWDSEnabled,
v_U8_t *extraHeadSpace
)
+#endif
{
WLANTL_8023HeaderType w8023Header;
WLANTL_80211HeaderType *pw80211Header; // Allocate an aligned BD and then fill it.
@@ -8137,6 +8172,9 @@
#ifdef WLAN_SOFTAP_FEATURE
v_U8_t ucQoSOffset = WLAN80211_MANDATORY_HEADER_SIZE;
#endif
+#ifdef FEATURE_WLAN_TDLS
+ v_U8_t ucStaId;
+#endif
*ucWDSEnabled = 0; // default WDS off.
vosStatus = vos_pkt_pop_head( vosDataBuff, &w8023Header,
@@ -8150,23 +8188,31 @@
}
#ifdef FEATURE_WLAN_TDLS
- if( WLAN_STA_INFRA == pTLCb->atlSTAClients[ucStaId].wSTADesc.wSTAType )
- {
- v_U8_t ucIndex = 0;
- for ( ucIndex = 0; ucIndex < WLAN_MAX_STA_COUNT ; ucIndex++)
- {
- if( ucIndex != ucStaId && pTLCb->atlSTAClients[ucIndex].ucExists &&
- vos_mem_compare( (void*)pTLCb->atlSTAClients[ucIndex].wSTADesc.vSTAMACAddress.bytes,
- (void*)w8023Header.vDA, 6) )
- {
- TLLOGE(VOS_TRACE( VOS_MODULE_ID_TL, VOS_TRACE_LEVEL_INFO_LOW,
- "WLAN TL: Got a TDLS station. Using that index"));
- ucStaId = ucIndex;
- break;
- }
- }
+ if( NULL == pucStaId )
+ {
+ TLLOGE(VOS_TRACE( VOS_MODULE_ID_TL, VOS_TRACE_LEVEL_ERROR,
+ "WLAN TL: Invalid pointer for StaId"));
+ return VOS_STATUS_E_INVAL;
+ }
+ ucStaId = *pucStaId;
+ if( WLAN_STA_INFRA == pTLCb->atlSTAClients[ucStaId].wSTADesc.wSTAType )
+ {
+ v_U8_t ucIndex = 0;
+ for ( ucIndex = 0; ucIndex < WLAN_MAX_STA_COUNT ; ucIndex++)
+ {
+ if( ucIndex != ucStaId && pTLCb->atlSTAClients[ucIndex].ucExists &&
+ vos_mem_compare( (void*)pTLCb->atlSTAClients[ucIndex].wSTADesc.vSTAMACAddress.bytes,
+ (void*)w8023Header.vDA, 6) )
+ {
+ TLLOGE(VOS_TRACE( VOS_MODULE_ID_TL, VOS_TRACE_LEVEL_INFO_LOW,
+ "WLAN TL: Got a TDLS station. Using that index"));
+ ucStaId = ucIndex;
+ *pucStaId = ucStaId;
+ break;
+ }
}
+ }
#endif
diff --git a/CORE/TL/src/wlan_qct_tli.h b/CORE/TL/src/wlan_qct_tli.h
index a9fbf98..078748e 100644
--- a/CORE/TL/src/wlan_qct_tli.h
+++ b/CORE/TL/src/wlan_qct_tli.h
@@ -1262,7 +1262,11 @@
IN
pTLCb: TL control block
+#ifdef FEATURE_WLAN_TDLS
+ *pucStaId Returns the staId used in case of TDLS
+#else
ucStaId: station ID
+#endif
IN/OUT
vosDataBuff: vos data buffer, will contain the new header on output
@@ -1276,6 +1280,19 @@
SIDE EFFECTS
============================================================================*/
+#ifdef FEATURE_WLAN_TDLS
+VOS_STATUS
+WLANTL_Translate8023To80211Header
+(
+ vos_pkt_t* vosDataBuff,
+ VOS_STATUS* pvosStatus,
+ WLANTL_CbType* pTLCb,
+ v_U8_t *pucStaId,
+ v_U8_t ucUP,
+ v_U8_t *ucWDSEnabled,
+ v_U8_t *extraHeadSpace
+);
+#else
VOS_STATUS
WLANTL_Translate8023To80211Header
(
@@ -1287,7 +1304,7 @@
v_U8_t *ucWDSEnabled,
v_U8_t *extraHeadSpace
);
-
+#endif
/*==========================================================================
FUNCTION WLANTL_Translate80211To8023Header