wlan: TDLS Integration from Dev32Sta
Support for TDLS discovery, setup and teardown.
Exit BMPS while in active TDLS link and enable back afterwards.
Change-Id: Ic653c5369cb0b61e04e9a8be5e7f625ab7160365
CR-Fixed: 426223
diff --git a/CORE/SME/inc/csrApi.h b/CORE/SME/inc/csrApi.h
index 6605386..0656a29 100644
--- a/CORE/SME/inc/csrApi.h
+++ b/CORE/SME/inc/csrApi.h
@@ -418,6 +418,9 @@
#ifdef FEATURE_WLAN_LFR
eCSR_ROAM_PMK_NOTIFY,
#endif
+#ifdef FEATURE_WLAN_TDLS
+ eCSR_ROAM_TDLS_STATUS_UPDATE,
+#endif
eCSR_ROAM_DISCONNECT_ALL_P2P_CLIENTS, //Disaconnect all the clients
eCSR_ROAM_SEND_P2P_STOP_BSS, //Stopbss triggered from SME due to different
// beacon interval
@@ -506,6 +509,11 @@
eCSR_ROAM_RESULT_MAX_ASSOC_EXCEEDED,
//Assoc rejected due to concurrent session running on a different channel
eCSR_ROAM_RESULT_ASSOC_FAIL_CON_CHANNEL,
+#ifdef FEATURE_WLAN_TDLS
+ eCSR_ROAM_RESULT_ADD_TDLS_PEER,
+ eCSR_ROAM_RESULT_DELETE_TDLS_PEER,
+#endif
+
}eCsrRoamResult;
@@ -1094,6 +1102,10 @@
tANI_U32 rxChan;
#endif
+#ifdef FEATURE_WLAN_TDLS
+ tANI_U8 staType;
+#endif
+
// Required for indicating the frames to upper layer
tANI_U32 beaconLength;
tANI_U8* beaconPtr;
@@ -1250,6 +1262,38 @@
tANI_U8 keyId; //key index
} tCsrRoamRemoveKey;
+#ifdef FEATURE_WLAN_TDLS
+typedef struct tagCsrTdlsSendMgmt
+{
+ tSirMacAddr peerMac;
+ tANI_U8 frameType;
+ tANI_U8 dialog;
+ tANI_U16 statusCode;
+ tANI_U8 *buf;
+ tANI_U8 len;
+
+}tCsrTdlsSendMgmt;
+
+#ifdef FEATURE_WLAN_TDLS_INTERNAL
+typedef struct tagCsrTdlsDisRequest
+{
+ tSirMacAddr peerMac;
+ tANI_U8 disType;
+}tCsrTdlsDisRequest;
+
+typedef struct tagCsrTdlsSetupRequest
+{
+ tSirMacAddr peerMac;
+ tANI_U8 linkIndex;
+}tCsrTdlsSetupRequest;
+
+typedef struct tagCsrTdlsTeardownRequest
+{
+ tSirMacAddr peerMac;
+ tANI_U8 linkIndex;
+}tCsrTdlsTeardownRequest ;
+#endif
+#endif
typedef void * tScanResultHandle;
diff --git a/CORE/SME/inc/csrInternal.h b/CORE/SME/inc/csrInternal.h
index fa743b7..f17c7de 100644
--- a/CORE/SME/inc/csrInternal.h
+++ b/CORE/SME/inc/csrInternal.h
@@ -708,6 +708,30 @@
tANI_BOOLEAN fIgnore_chan165;
}tCsrScanStruct;
+#ifdef FEATURE_WLAN_TDLS
+/*
+ * struct to carry TDLS discovery info..
+ */
+typedef struct sCsrTdlsContext
+{
+#ifdef FEATURE_WLAN_TDLS_INTERNAL
+ tDblLinkList tdlsPotentialPeerList ;
+ tANI_U16 tdlsCommonFlag ;
+ tANI_U16 tdlsCommonState ;
+#endif
+ tANI_U16 tdlsPeerCount ;
+}tCsrTdlsCtxStruct;
+
+#ifdef FEATURE_WLAN_TDLS_INTERNAL
+typedef struct sCsrTdlsPeerLinkInfo
+{
+ tListElem tdlsPeerStaLink ;
+ tSirTdlsPeerInfo tdlsDisPeerInfo ;
+}tCsrTdlsPeerLinkinfo ;
+#endif
+#endif
+
+
//Save the connected information. This structure + connectedProfile
//should contain all information about the connection
diff --git a/CORE/SME/inc/smeInside.h b/CORE/SME/inc/smeInside.h
index dbf55cb..ee95c00 100644
--- a/CORE/SME/inc/smeInside.h
+++ b/CORE/SME/inc/smeInside.h
@@ -102,6 +102,64 @@
tP2pPsConfig NoA;
} tNoACmd;
#endif
+#ifdef FEATURE_WLAN_TDLS
+typedef struct TdlsSendMgmtInfo
+{
+ tSirMacAddr peerMac;
+ tANI_U8 frameType;
+ tANI_U8 dialog;
+ tANI_U16 statusCode;
+ tANI_U8 *buf;
+ tANI_U8 len;
+} tTdlsSendMgmtCmdInfo;
+
+typedef struct TdlsAddStaInfo
+{
+ tSirMacAddr peerMac;
+} tTdlsAddStaCmdInfo;
+
+typedef struct TdlsDelStaInfo
+{
+ tSirMacAddr peerMac;
+} tTdlsDelStaCmdInfo;
+#ifdef FEATURE_WLAN_TDLS_INTERNAL
+typedef struct TdlsDisReqCmdinfo
+{
+ tSirMacAddr peerMac;
+ tANI_U8 tdlsDisType;
+} tTdlsDisReqCmdinfo;
+
+typedef struct tdlsLinkSetupReqCmdinfo
+{
+ tSirMacAddr peerMac;
+} tTdlsLinkSetupReqCmdinfo;
+
+typedef struct tdlsLinkTeardownCmdinfo
+{
+ tSirMacAddr peerMac;
+} tTdlsLinkTeardownCmdinfo;
+#endif
+/*
+ * TDLS cmd info, CMD from SME to PE.
+ */
+typedef struct s_tdls_cmd
+{
+ tANI_U32 size;
+ union
+ {
+#ifdef FEATURE_WLAN_TDLS_INTERNAL
+ tTdlsDisReqCmdinfo tdlsDisReqCmdInfo ;
+ tTdlsLinkSetupReqCmdinfo tdlsLinkSetupReqCmdInfo ;
+ tTdlsLinkTeardownCmdinfo tdlsLinkTeardownCmdInfo ;
+ //tEnterPeerUAPSDInfo enterUapsdInfo ;
+ //tExitPeerUAPSDinfo exitUapsdInfo ;
+#endif
+ tTdlsSendMgmtCmdInfo tdlsSendMgmtCmdInfo;
+ tTdlsAddStaCmdInfo tdlsAddStaCmdInfo;
+ tTdlsDelStaCmdInfo tdlsDelStaCmdInfo;
+ }u;
+} tTdlsCmd;
+#endif /* FEATURE_WLAN_TDLS */
typedef struct tagSmeCmd
{
@@ -126,6 +184,9 @@
#endif
tAddStaForSessionCmd addStaSessionCmd;
tDelStaForSessionCmd delStaSessionCmd;
+#ifdef FEATURE_WLAN_TDLS
+ tTdlsCmd tdlsCmd;
+#endif
}u;
}tSmeCmd;
@@ -202,4 +263,24 @@
eHalStatus pmcSetPowerParams(tHalHandle hHal, tSirSetPowerParamsReq* pwParams);
tANI_BOOLEAN csrRoamGetConcurrencyConnectStatusForBmps(tpAniSirGlobal pMac);
+#ifdef FEATURE_WLAN_TDLS
+eHalStatus csrTdlsSendMgmtReq(tHalHandle hHal, tANI_U8 sessionId, tCsrTdlsSendMgmt *tdlsSendMgmt);
+eHalStatus csrTdlsAddPeerSta(tHalHandle hHal, tANI_U8 sessionId, tSirMacAddr peerMac);
+eHalStatus csrTdlsDelPeerSta(tHalHandle hHal, tANI_U8 sessionId, tSirMacAddr peerMac);
+eHalStatus csrTdlsProcessCmd(tpAniSirGlobal pMac,tSmeCmd *pCommand );
+eHalStatus tdlsMsgProcessor(tpAniSirGlobal pMac,v_U16_t msg_type,
+ void *pMsgBuf);
+eHalStatus csrTdlsOpen(tHalHandle hHal);
+tANI_BOOLEAN csrTdlsPowerSaveCheck( void* hHal );
+#ifdef FEATURE_WLAN_TDLS_INTERNAL
+eHalStatus csrTdlsDiscoveryReq(tHalHandle hHal, tANI_U8 sessionId,
+ tCsrTdlsDisRequest *tdlsDisReq);
+eHalStatus csrTdlsSetupReq(tHalHandle hHal, tANI_U8 sessionId,
+ tCsrTdlsSetupRequest *tdlsSetupReq);
+eHalStatus csrTdlsTeardownReq(tHalHandle hHal, tANI_U8 sessionId,
+ tCsrTdlsTeardownRequest *teardown);
+#endif
+
+#endif /* FEATURE_WLAN_TDLS */
+
#endif //#if !defined( __SMEINSIDE_H )
diff --git a/CORE/SME/inc/smeInternal.h b/CORE/SME/inc/smeInternal.h
index fe54444..2220c0a 100644
--- a/CORE/SME/inc/smeInternal.h
+++ b/CORE/SME/inc/smeInternal.h
@@ -65,6 +65,20 @@
eSmeCommandRemoveKey,
eSmeCommandAddStaSession,
eSmeCommandDelStaSession,
+#ifdef FEATURE_WLAN_TDLS
+ //eSmeTdlsCommandMask = 0x80000, //To identify TDLS commands <TODO>
+ //These can be considered as csr commands.
+ eSmeCommandTdlsSendMgmt,
+ eSmeCommandTdlsAddPeer,
+ eSmeCommandTdlsDelPeer,
+#ifdef FEATURE_WLAN_TDLS_INTERNAL
+ eSmeCommandTdlsDiscovery,
+ eSmeCommandTdlsLinkSetup,
+ eSmeCommandTdlsLinkTear,
+ eSmeCommandTdlsEnterUapsd,
+ eSmeCommandTdlsExitUapsd,
+#endif
+#endif
//PMC
eSmePmcCommandMask = 0x20000, //To identify PMC commands
eSmeCommandEnterImps,
diff --git a/CORE/SME/inc/sme_Api.h b/CORE/SME/inc/sme_Api.h
index 968df13..aa37c14 100644
--- a/CORE/SME/inc/sme_Api.h
+++ b/CORE/SME/inc/sme_Api.h
@@ -1595,9 +1595,9 @@
\param pAPWPSIES - pointer to a caller allocated object of tCsrRoamAPWPSIES
- \return eHalStatus SUCCESS Roam callback will be called indicate actually results
+ \return eHalStatus SUCCESS Roam callback will be called indicate actually results
- FAILURE or RESOURCES The API finished and failed.
+ FAILURE or RESOURCES The API finished and failed.
-------------------------------------------------------------------------------*/
@@ -1611,9 +1611,9 @@
\param pAPSirRSNie - pointer to a caller allocated object of tSirRSNie with WPS/RSN IEs
- \return eHalStatus SUCCESS
+ \return eHalStatus SUCCESS
- FAILURE or RESOURCES The API finished and failed.
+ FAILURE or RESOURCES The API finished and failed.
-------------------------------------------------------------------------------*/
eHalStatus sme_RoamUpdateAPWPARSNIEs(tHalHandle hHal, tANI_U8 sessionId, tSirRSNie * pAPSirRSNie);
@@ -1624,9 +1624,9 @@
\brief To update P2P-GO's beacon Interval.
- \return eHalStatus SUCCESS
- FAILURE or RESOURCES
- The API finished and failed.
+ \return eHalStatus SUCCESS
+ FAILURE or RESOURCES
+ The API finished and failed.
-------------------------------------------------------------------------------*/
eHalStatus sme_ChangeMCCBeaconInterval(tHalHandle hHal, tANI_U8 sessionId);
@@ -1638,8 +1638,8 @@
\brief API to send the btAMPstate to FW
\param hHal - The handle returned by macOpen.
\param btAmpEvent -- btAMP event
- \return eHalStatus SUCCESS
- FAILURE or RESOURCES The API finished and failed.
+ \return eHalStatus SUCCESS
+ FAILURE or RESOURCES The API finished and failed.
--------------------------------------------------------------------------- */
@@ -2199,4 +2199,61 @@
eHalStatus sme_UpdateRoamPrefer5GHz(tHalHandle hHal, v_BOOL_t nRoamPrefer5GHz);
#endif
+/* ---------------------------------------------------------------------------
+ \fn sme_IsFeatureSupportedByFW
+ \brief Check if an feature is enabled by FW
+
+ \param feattEnumValue - Enumeration value of the feature to be checked.
+ A value from enum placeHolderInCapBitmap
+
+ \- return 1/0 (TRUE/FALSE)
+ -------------------------------------------------------------------------*/
+tANI_U8 sme_IsFeatureSupportedByFW(tANI_U8 featEnumValue);
+#ifdef FEATURE_WLAN_TDLS
+/* ---------------------------------------------------------------------------
+ \fn sme_SendTdlsMgmtFrame
+ \brief API to send TDLS management frames.
+
+ \param peerMac - peer's Mac Adress.
+ \param frame_type - Type of TDLS mgmt frame to be sent.
+ \param dialog - dialog token used in the frame.
+ \param status - status to be incuded in the frame.
+ \param buf - additional IEs to be included
+ \param len - lenght of additional Ies
+ \- return VOS_STATUS_SUCCES
+ -------------------------------------------------------------------------*/
+VOS_STATUS sme_SendTdlsMgmtFrame(tHalHandle hHal, tANI_U8 sessionId, tSirMacAddr peerMac,
+ tANI_U8 frame_type, tANI_U8 dialog, tANI_U16 status, tANI_U8 *buf, tANI_U8 len);
+/* ---------------------------------------------------------------------------
+ \fn sme_AddTdlsPeerSta
+ \brief API to Add TDLS peer sta entry.
+
+ \param peerMac - peer's Mac Adress.
+ \- return VOS_STATUS_SUCCES
+ -------------------------------------------------------------------------*/
+VOS_STATUS sme_AddTdlsPeerSta(tHalHandle hHal, tANI_U8 sessionId, tSirMacAddr peerMac);
+/* ---------------------------------------------------------------------------
+ \fn sme_DeleteTdlsPeerSta
+ \brief API to Delete TDLS peer sta entry.
+
+ \param peerMac - peer's Mac Adress.
+ \- return VOS_STATUS_SUCCES
+ -------------------------------------------------------------------------*/
+VOS_STATUS sme_DeleteTdlsPeerSta(tHalHandle hHal, tANI_U8 sessionId, tSirMacAddr peerMac);
+#endif
+#ifdef FEATURE_WLAN_TDLS_INTERNAL
+typedef struct smeTdlsDisResult
+{
+ tSirMacAddr tdlsPeerMac;
+ v_S7_t tdlsPeerRssi;
+} tSmeTdlsDisResult;
+
+VOS_STATUS sme_StartTdlsDiscoveryReq(tHalHandle hHal, tANI_U8 sessionId, tSirMacAddr peerMac);
+v_U8_t sme_GetTdlsDiscoveryResult(tHalHandle hHal,
+ tSmeTdlsDisResult *disResult, v_U8_t listType);
+VOS_STATUS sme_StartTdlsLinkSetupReq(tHalHandle hHal, tANI_U8 sessionId, tSirMacAddr peerMac);
+VOS_STATUS sme_StartTdlsLinkTeardownReq(tHalHandle hHal, tANI_U8 sessionId, tSirMacAddr peerMac);
+
+#endif /* FEATURE_WLAN_TDLS */
+
#endif //#if !defined( __SME_API_H )
diff --git a/CORE/SME/src/csr/csrApiRoam.c b/CORE/SME/src/csr/csrApiRoam.c
index d175502..e2e17d5 100644
--- a/CORE/SME/src/csr/csrApiRoam.c
+++ b/CORE/SME/src/csr/csrApiRoam.c
@@ -14682,6 +14682,14 @@
fNeedFullPower = eANI_BOOLEAN_TRUE;
reason = eSME_LINK_DISCONNECTED_BY_OTHER;
}
+#ifdef FEATURE_WLAN_TDLS
+ else if( eSmeCommandTdlsAddPeer == pCommand->command )
+ {
+ //TDLS link is getting established. need full power
+ fNeedFullPower = eANI_BOOLEAN_TRUE;
+ reason = eSME_FULL_PWR_NEEDED_BY_TDLS_PEER_SETUP;
+ }
+#endif
break;
case REQUEST_STOP_UAPSD:
case REQUEST_EXIT_WOWL:
diff --git a/CORE/SME/src/pmc/pmc.c b/CORE/SME/src/pmc/pmc.c
index c6e10b7..a7f453f 100644
--- a/CORE/SME/src/pmc/pmc.c
+++ b/CORE/SME/src/pmc/pmc.c
@@ -2546,7 +2546,13 @@
smsLog(pMac, LOG1, FL("Multiple Sessions/GO/SAP sessions . BMPS should not be started"));
return eANI_BOOLEAN_FALSE;
}
-
+#ifdef FEATURE_WLAN_TDLS
+ if( !csrTdlsPowerSaveCheck( pMac ) )
+ {
+ smsLog(pMac, LOGE, FL("TDLS peer(s) connected. Dont start BMPS timer\n"));
+ return eANI_BOOLEAN_FALSE;
+ }
+#endif
/* Check if there is an Infra session. BMPS is possible only if there is
* an Infra session */
if (!csrIsInfraConnected(pMac))
diff --git a/CORE/SME/src/sme_common/sme_Api.c b/CORE/SME/src/sme_common/sme_Api.c
index f495e2c..54c37e4 100644
--- a/CORE/SME/src/sme_common/sme_Api.c
+++ b/CORE/SME/src/sme_common/sme_Api.c
@@ -750,6 +750,26 @@
}
#endif
break;
+#ifdef FEATURE_WLAN_TDLS
+ case eSmeCommandTdlsSendMgmt:
+ case eSmeCommandTdlsAddPeer:
+ case eSmeCommandTdlsDelPeer:
+#ifdef FEATURE_WLAN_TDLS_INTERNAL
+ case eSmeCommandTdlsDiscovery:
+ case eSmeCommandTdlsLinkSetup:
+ case eSmeCommandTdlsLinkTear:
+ case eSmeCommandTdlsEnterUapsd:
+ case eSmeCommandTdlsExitUapsd:
+#endif
+ {
+ VOS_TRACE(VOS_MODULE_ID_SME, VOS_TRACE_LEVEL_ERROR,
+ "sending TDLS Command 0x%x to PE\n", pCommand->command);
+
+ csrLLUnlock( &pMac->sme.smeCmdActiveList );
+ status = csrTdlsProcessCmd( pMac, pCommand );
+ }
+ break ;
+#endif
default:
//something is wrong
@@ -930,6 +950,16 @@
#if defined WLAN_FEATURE_P2P
sme_p2pOpen(pMac);
#endif
+#ifdef FEATURE_WLAN_TDLS
+ status = csrTdlsOpen(pMac) ;
+ if ( ! HAL_STATUS_SUCCESS( status ) )
+ {
+ smsLog( pMac, LOGE, "Tdlspen open failed during initialization with \
+ status=%d\n", status );
+ break;
+ }
+#endif
+
}while (0);
@@ -1639,6 +1669,39 @@
break;
#endif // WLAN_WAKEUP_EVENTS
+#ifdef FEATURE_WLAN_TDLS
+ /*
+ * command rescived from PE, SME tdls msg processor shall be called
+ * to process commands recieved from PE
+ */
+ case eWNI_SME_TDLS_SEND_MGMT_RSP:
+ case eWNI_SME_TDLS_ADD_STA_RSP:
+ case eWNI_SME_TDLS_DEL_STA_RSP:
+#ifdef FEATURE_WLAN_TDLS_INTERNAL
+ case eWNI_SME_TDLS_DISCOVERY_START_RSP:
+ case eWNI_SME_TDLS_DISCOVERY_START_IND:
+ case eWNI_SME_TDLS_LINK_START_RSP:
+ case eWNI_SME_TDLS_LINK_START_IND:
+ case eWNI_SME_TDLS_TEARDOWN_RSP:
+ case eWNI_SME_TDLS_TEARDOWN_IND:
+ case eWNI_SME_ADD_TDLS_PEER_IND:
+ case eWNI_SME_DELETE_TDLS_PEER_IND:
+#endif
+ {
+ if (pMsg->bodyptr)
+ {
+ status = tdlsMsgProcessor(pMac, pMsg->type, pMsg->bodyptr);
+ vos_mem_free( pMsg->bodyptr );
+ }
+ else
+ {
+ smsLog( pMac, LOGE, "Empty rsp message for TDLS, \
+ nothing to process\n");
+ }
+ break;
+ }
+#endif
+
default:
if ( ( pMsg->type >= eWNI_SME_MSG_TYPES_BEGIN )
@@ -5059,9 +5122,9 @@
\param
- \return eHalStatus SUCCESS
- FAILURE or RESOURCES
- The API finished and failed.
+ \return eHalStatus SUCCESS
+ FAILURE or RESOURCES
+ The API finished and failed.
-------------------------------------------------------------------------------*/
eHalStatus sme_ChangeMCCBeaconInterval(tHalHandle hHal, tANI_U8 sessionId)
@@ -6756,3 +6819,201 @@
#endif
+/* ---------------------------------------------------------------------------
+ \fn sme_IsFeatureSupportedByFW
+ \brief Check if an feature is enabled by FW
+
+ \param feattEnumValue - Enumeration value from placeHolderInCapBitmap
+ \- return 1/0 (TRUE/FALSE)
+ -------------------------------------------------------------------------*/
+tANI_U8 sme_IsFeatureSupportedByFW(tANI_U8 featEnumValue)
+{
+ 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 frame_type - Type of TDLS mgmt frame to be sent.
+ \param dialog - dialog token used in the frame.
+ \param status - status to be incuded in the frame.
+ \param buf - additional IEs to be included
+ \param len - lenght of additional Ies
+ \- return VOS_STATUS_SUCCES
+ -------------------------------------------------------------------------*/
+VOS_STATUS sme_SendTdlsMgmtFrame(tHalHandle hHal, tANI_U8 sessionId, tSirMacAddr peerMac,
+ tANI_U8 frame_type, tANI_U8 dialog, tANI_U16 statusCode, tANI_U8 *buf, tANI_U8 len)
+{
+ eHalStatus status = eHAL_STATUS_SUCCESS;
+ tCsrTdlsSendMgmt sendTdlsReq = {{0}} ;
+ tpAniSirGlobal pMac = PMAC_STRUCT(hHal);
+
+ status = sme_AcquireGlobalLock( &pMac->sme );
+ if ( HAL_STATUS_SUCCESS( status ) )
+ {
+ vos_mem_copy(sendTdlsReq.peerMac, peerMac, sizeof(tSirMacAddr)) ;
+ sendTdlsReq.frameType = frame_type;
+ sendTdlsReq.buf = buf;
+ sendTdlsReq.len = len;
+ sendTdlsReq.dialog = dialog;
+ sendTdlsReq.statusCode = statusCode;
+
+ status = csrTdlsSendMgmtReq(hHal, sessionId, &sendTdlsReq) ;
+
+ sme_ReleaseGlobalLock( &pMac->sme );
+ }
+
+ return status ;
+
+}
+/* ---------------------------------------------------------------------------
+ \fn sme_AddTdlsPeerSta
+ \brief API to Add TDLS peer sta entry.
+
+ \param peerMac - peer's Mac Adress.
+ \- return VOS_STATUS_SUCCES
+ -------------------------------------------------------------------------*/
+VOS_STATUS sme_AddTdlsPeerSta(tHalHandle hHal, tANI_U8 sessionId, tSirMacAddr peerMac)
+{
+ eHalStatus status = eHAL_STATUS_SUCCESS;
+ tpAniSirGlobal pMac = PMAC_STRUCT(hHal);
+
+ status = sme_AcquireGlobalLock( &pMac->sme );
+ if ( HAL_STATUS_SUCCESS( status ) )
+ {
+ status = csrTdlsAddPeerSta(hHal, sessionId, peerMac);
+
+ sme_ReleaseGlobalLock( &pMac->sme );
+ }
+
+ return status ;
+
+}
+/* ---------------------------------------------------------------------------
+ \fn sme_DeleteTdlsPeerSta
+ \brief API to Delete TDLS peer sta entry.
+
+ \param peerMac - peer's Mac Adress.
+ \- return VOS_STATUS_SUCCES
+ -------------------------------------------------------------------------*/
+VOS_STATUS sme_DeleteTdlsPeerSta(tHalHandle hHal, tANI_U8 sessionId, tSirMacAddr peerMac)
+{
+ eHalStatus status = eHAL_STATUS_SUCCESS;
+ tpAniSirGlobal pMac = PMAC_STRUCT(hHal);
+
+ status = sme_AcquireGlobalLock( &pMac->sme );
+ if ( HAL_STATUS_SUCCESS( status ) )
+ {
+ status = csrTdlsDelPeerSta(hHal, sessionId, peerMac) ;
+
+ sme_ReleaseGlobalLock( &pMac->sme );
+ }
+
+ return status ;
+
+}
+#endif
+#ifdef FEATURE_WLAN_TDLS_INTERNAL
+/*
+ * SME API to start TDLS discovery Procedure
+ */
+VOS_STATUS sme_StartTdlsDiscoveryReq(tHalHandle hHal, tANI_U8 sessionId, tSirMacAddr peerMac)
+{
+ VOS_STATUS status = VOS_STATUS_SUCCESS;
+ tCsrTdlsDisRequest disReq = {{0}} ;
+ vos_mem_copy(disReq.peerMac, peerMac, sizeof(tSirMacAddr)) ;
+ status = csrTdlsDiscoveryReq(hHal, sessionId, &disReq) ;
+
+ return status ;
+
+}
+
+/*
+ * Process TDLS discovery results
+ */
+v_U8_t sme_GetTdlsDiscoveryResult(tHalHandle hHal,
+ tSmeTdlsDisResult *disResult, v_U8_t listType)
+{
+ tCsrTdlsPeerLinkinfo *peerLinkInfo = NULL ;
+ tSirTdlsPeerInfo *peerInfo = NULL ;
+ tpAniSirGlobal pMac = PMAC_STRUCT( hHal );
+ tCsrTdlsCtxStruct *disInfo = &pMac->tdlsCtx ;
+ tDblLinkList *peerList = &disInfo->tdlsPotentialPeerList ;
+ tListElem *pEntry = NULL ;
+ v_U8_t peerCnt = 0 ;
+
+ VOS_TRACE(VOS_MODULE_ID_SME, VOS_TRACE_LEVEL_INFO,
+ ("TDLS peer count = %d\n"),disInfo->tdlsPeerCount ) ;
+ pEntry = csrLLPeekHead( peerList, LL_ACCESS_LOCK );
+ while(pEntry)
+ {
+ peerLinkInfo = GET_BASE_ADDR( pEntry, tCsrTdlsPeerLinkinfo,
+ tdlsPeerStaLink) ;
+ peerInfo = &peerLinkInfo->tdlsDisPeerInfo ;
+
+ switch(listType)
+ {
+ case TDLS_SETUP_LIST:
+ {
+ if(TDLS_LINK_SETUP_STATE == peerInfo->tdlsPeerState)
+ {
+ palCopyMemory(pMac->hHdd, disResult[peerCnt].tdlsPeerMac,
+ peerInfo->peerMac, sizeof(tSirMacAddr)) ;
+ disResult[peerCnt].tdlsPeerRssi = peerInfo->tdlsPeerRssi ;
+ peerCnt++ ;
+ }
+ break ;
+ }
+ case TDLS_DIS_LIST:
+ {
+ palCopyMemory(pMac->hHdd, disResult[peerCnt].tdlsPeerMac,
+ peerInfo->peerMac, sizeof(tSirMacAddr)) ;
+ disResult[peerCnt].tdlsPeerRssi = peerInfo->tdlsPeerRssi ;
+ peerCnt++ ;
+ break ;
+ }
+ default:
+ {
+ VOS_TRACE(VOS_MODULE_ID_SME, VOS_TRACE_LEVEL_ERROR,
+ ("unknown list type \n")) ;
+ break ;
+ }
+ }
+
+ pEntry = csrLLNext( peerList, pEntry, LL_ACCESS_LOCK) ;
+ }
+
+ return peerCnt ;
+
+}
+
+/*
+ * SME API to start TDLS link setup Procedure.
+ */
+VOS_STATUS sme_StartTdlsLinkSetupReq(tHalHandle hHal, tANI_U8 sessionId, tSirMacAddr peerMac)
+{
+ VOS_STATUS status = VOS_STATUS_SUCCESS;
+ tCsrTdlsSetupRequest setupReq = {{0}} ;
+ vos_mem_copy(setupReq.peerMac, peerMac, sizeof(tSirMacAddr)) ;
+ status = csrTdlsSetupReq(hHal, sessionId, &setupReq) ;
+ return status ;
+
+}
+
+/*
+ * SME API to start TDLS link Teardown Procedure.
+ */
+VOS_STATUS sme_StartTdlsLinkTeardownReq(tHalHandle hHal, tANI_U8 sessionId, tSirMacAddr peerMac)
+{
+ VOS_STATUS status = VOS_STATUS_SUCCESS;
+ tCsrTdlsTeardownRequest teardownReq = {{0}} ;
+ vos_mem_copy(teardownReq.peerMac, peerMac, sizeof(tSirMacAddr)) ;
+ status = csrTdlsTeardownReq(hHal, sessionId, &teardownReq) ;
+ return status ;
+
+}
+
+#endif /* FEATURE_WLAN_TDLS */
+