/* * TDLS request API, called from HDD to enable TDLS link teardown request * in SME/CSR and send message to PE to trigger TDLS link teardown procedure. */ eHalStatus csrTdlsTeardownReq(tHalHandle hHal, tANI_U8 sessionId, tCsrTdlsTeardownRequest *tdlsTeardownReq) { tpAniSirGlobal pMac = PMAC_STRUCT( hHal ); tSmeCmd *tdlsTeardownReqCmd ; eHalStatus status = eHAL_STATUS_FAILURE ; if(tdlsTeardownReq) { tdlsTeardownReqCmd = csrGetCommandBuffer(pMac) ; if(tdlsTeardownReqCmd) { tTdlsLinkTeardownCmdinfo *teardownCmdInfo = &tdlsTeardownReqCmd->u.tdlsCmd.u.tdlsLinkTeardownCmdInfo ; tdlsTeardownReqCmd->sessionId = sessionId; vos_mem_copy(teardownCmdInfo->peerMac, tdlsTeardownReq->peerMac, sizeof(tSirMacAddr)) ; tdlsTeardownReqCmd->command = eSmeCommandTdlsLinkTear ; tdlsTeardownReqCmd->u.tdlsCmd.size = sizeof(tTdlsLinkTeardownCmdinfo) ; smePushCommand(pMac, tdlsTeardownReqCmd, FALSE) ; status = eHAL_STATUS_SUCCESS ; } } return status ; }
eHalStatus csrTdlsAddPeerSta(tHalHandle hHal, tANI_U8 sessionId, tSirMacAddr peerMac) { tpAniSirGlobal pMac = PMAC_STRUCT( hHal ); tSmeCmd *tdlsAddStaCmd ; eHalStatus status = eHAL_STATUS_FAILURE ; if( CSR_IS_SESSION_VALID( pMac, sessionId ) && csrIsConnStateConnectedInfra( pMac, sessionId ) && (NULL != peerMac) ) { tdlsAddStaCmd = csrGetCommandBuffer(pMac) ; if(tdlsAddStaCmd) { tTdlsAddStaCmdInfo *tdlsAddStaCmdInfo = &tdlsAddStaCmd->u.tdlsCmd.u.tdlsAddStaCmdInfo ; tdlsAddStaCmd->sessionId = sessionId; tdlsAddStaCmdInfo->tdlsAddOper = TDLS_OPER_ADD; palCopyMemory(pMac->hHdd, tdlsAddStaCmdInfo->peerMac, peerMac, sizeof(tSirMacAddr)) ; tdlsAddStaCmd->command = eSmeCommandTdlsAddPeer ; tdlsAddStaCmd->u.tdlsCmd.size = sizeof(tTdlsAddStaCmdInfo) ; smePushCommand(pMac, tdlsAddStaCmd, FALSE) ; status = eHAL_STATUS_SUCCESS ; } } return status ; }
/* * TDLS request API, called from HDD to delete a TDLS peer */ eHalStatus csrTdlsDelPeerSta(tHalHandle hHal, tANI_U8 sessionId, tSirMacAddr peerMac) { tpAniSirGlobal pMac = PMAC_STRUCT( hHal ); tSmeCmd *tdlsDelStaCmd ; 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) ) { tdlsDelStaCmd = csrGetCommandBuffer(pMac) ; if(tdlsDelStaCmd) { tTdlsDelStaCmdInfo *tdlsDelStaCmdInfo = &tdlsDelStaCmd->u.tdlsCmd.u.tdlsDelStaCmdInfo ; tdlsDelStaCmd->sessionId = sessionId; vos_mem_copy(tdlsDelStaCmdInfo->peerMac, peerMac, sizeof(tSirMacAddr)) ; tdlsDelStaCmd->command = eSmeCommandTdlsDelPeer ; tdlsDelStaCmd->u.tdlsCmd.size = sizeof(tTdlsDelStaCmdInfo) ; smePushCommand(pMac, tdlsDelStaCmd, FALSE) ; status = eHAL_STATUS_SUCCESS ; } } return status ; }
/* * TDLS request API, called from HDD to enable TDLS discovery request * in SME/CSR and send message to PE to trigger TDLS discovery procedure. */ eHalStatus csrTdlsDiscoveryReq(tHalHandle hHal, tANI_U8 sessionId, tCsrTdlsDisRequest *tdlsDisReq) { tpAniSirGlobal pMac = PMAC_STRUCT( hHal ); tSmeCmd *tdlsDisReqCmd ; eHalStatus status = eHAL_STATUS_FAILURE ; if(tdlsDisReq) { tdlsDisReqCmd = csrGetCommandBuffer(pMac) ; if(tdlsDisReqCmd) { tTdlsDisReqCmdinfo *disReqCmdInfo = &tdlsDisReqCmd->u.tdlsCmd.u.tdlsDisReqCmdInfo ; vos_mem_zero(&tdlsDisReqCmd->u.tdlsCmd, sizeof(tTdlsCmd)); tdlsDisReqCmd->sessionId = sessionId; disReqCmdInfo->tdlsDisType = tdlsDisReq->disType ; palCopyMemory(pMac->hHdd, disReqCmdInfo->peerMac, tdlsDisReq->peerMac, sizeof(tSirMacAddr)) ; tdlsDisReqCmd->command = eSmeCommandTdlsDiscovery ; tdlsDisReqCmd->u.tdlsCmd.size = sizeof(tTdlsDisReqCmdinfo) ; smePushCommand(pMac, tdlsDisReqCmd, FALSE) ; status = eHAL_STATUS_SUCCESS ; } } return status ; }
/* * TDLS request API, called from HDD to send a TDLS frame * in SME/CSR and send message to PE to trigger TDLS discovery procedure. */ eHalStatus csrTdlsSendMgmtReq(tHalHandle hHal, tANI_U8 sessionId, tCsrTdlsSendMgmt *tdlsSendMgmt) { tpAniSirGlobal pMac = PMAC_STRUCT( hHal ); tSmeCmd *tdlsSendMgmtCmd ; 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 != tdlsSendMgmt) ) { tdlsSendMgmtCmd = csrGetCommandBuffer(pMac) ; if(tdlsSendMgmtCmd) { tTdlsSendMgmtCmdInfo *tdlsSendMgmtCmdInfo = &tdlsSendMgmtCmd->u.tdlsCmd.u.tdlsSendMgmtCmdInfo ; tdlsSendMgmtCmd->sessionId = sessionId; tdlsSendMgmtCmdInfo->frameType = tdlsSendMgmt->frameType ; tdlsSendMgmtCmdInfo->dialog = tdlsSendMgmt->dialog ; tdlsSendMgmtCmdInfo->statusCode = tdlsSendMgmt->statusCode ; tdlsSendMgmtCmdInfo->responder = tdlsSendMgmt->responder; tdlsSendMgmtCmdInfo->peerCapability = tdlsSendMgmt->peerCapability; vos_mem_copy(tdlsSendMgmtCmdInfo->peerMac, tdlsSendMgmt->peerMac, sizeof(tSirMacAddr)) ; if( (0 != tdlsSendMgmt->len) && (NULL != tdlsSendMgmt->buf) ) { tdlsSendMgmtCmdInfo->buf = vos_mem_malloc(tdlsSendMgmt->len); if ( NULL == tdlsSendMgmtCmdInfo->buf ) status = eHAL_STATUS_FAILURE; else status = eHAL_STATUS_SUCCESS; if(!HAL_STATUS_SUCCESS( status ) ) { smsLog( pMac, LOGE, FL("Alloc Failed") ); VOS_ASSERT(0) ; return status ; } vos_mem_copy(tdlsSendMgmtCmdInfo->buf, tdlsSendMgmt->buf, tdlsSendMgmt->len ); tdlsSendMgmtCmdInfo->len = tdlsSendMgmt->len; } else { tdlsSendMgmtCmdInfo->buf = NULL; tdlsSendMgmtCmdInfo->len = 0; } tdlsSendMgmtCmd->command = eSmeCommandTdlsSendMgmt ; tdlsSendMgmtCmd->u.tdlsCmd.size = sizeof(tTdlsSendMgmtCmdInfo) ; smePushCommand(pMac, tdlsSendMgmtCmd, FALSE) ; status = eHAL_STATUS_SUCCESS ; } } 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 ; vos_mem_zero(&tdlsLinkEstablishCmd->u.tdlsCmd, sizeof(tTdlsCmd)); tdlsLinkEstablishCmd->sessionId = sessionId; vos_mem_copy( tdlsLinkEstablishCmdInfo->peerMac, peerMac, sizeof(tSirMacAddr)); tdlsLinkEstablishCmdInfo->isBufSta = tdlsLinkEstablishParams->isBufSta; tdlsLinkEstablishCmdInfo->isResponder = tdlsLinkEstablishParams->isResponder; tdlsLinkEstablishCmdInfo->maxSp = tdlsLinkEstablishParams->maxSp; tdlsLinkEstablishCmdInfo->uapsdQueues = tdlsLinkEstablishParams->uapsdQueues; tdlsLinkEstablishCmdInfo->isOffChannelSupported = tdlsLinkEstablishParams->isOffChannelSupported; vos_mem_copy(tdlsLinkEstablishCmdInfo->supportedChannels, tdlsLinkEstablishParams->supportedChannels, tdlsLinkEstablishParams->supportedChannelsLen); tdlsLinkEstablishCmdInfo->supportedChannelsLen = tdlsLinkEstablishParams->supportedChannelsLen; vos_mem_copy(tdlsLinkEstablishCmdInfo->supportedOperClasses, tdlsLinkEstablishParams->supportedOperClasses, tdlsLinkEstablishParams->supportedOperClassesLen); tdlsLinkEstablishCmdInfo->supportedOperClassesLen = tdlsLinkEstablishParams->supportedOperClassesLen; 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 ; smsLog( pMac, LOG1, FL("Successfully posted tdlsLinkEstablishCmd to SME")); } } return status ; }
/* * TDLS request API, called from HDD to Send Channel Switch Parameters */ VOS_STATUS csrTdlsSendChanSwitchReq(tHalHandle hHal, tANI_U8 sessionId, tSirMacAddr peerMac, tANI_S32 tdlsOffCh, tANI_S32 tdlsOffChBwOffset, tANI_U8 tdlsSwMode) { tpAniSirGlobal pMac = PMAC_STRUCT( hHal ); tSmeCmd *tdlsChanSwitchCmd; 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) ) { tdlsChanSwitchCmd = csrGetCommandBuffer(pMac) ; if(tdlsChanSwitchCmd) { tTdlsChanSwitchCmdInfo *tdlsChanSwitchCmdInfo = &tdlsChanSwitchCmd->u.tdlsCmd.u.tdlsChanSwitchCmdInfo; vos_mem_zero(&tdlsChanSwitchCmd->u.tdlsCmd, sizeof(tTdlsCmd)); tdlsChanSwitchCmd->sessionId = sessionId; vos_mem_copy(tdlsChanSwitchCmdInfo->peerMac, peerMac, sizeof(tSirMacAddr)); tdlsChanSwitchCmdInfo->tdlsOffCh = tdlsOffCh; tdlsChanSwitchCmdInfo->tdlsOffChBwOffset = tdlsOffChBwOffset; tdlsChanSwitchCmdInfo->tdlsSwMode = tdlsSwMode; tdlsChanSwitchCmd->command = eSmeCommandTdlsChannelSwitch; tdlsChanSwitchCmd->u.tdlsCmd.size = sizeof(tTdlsChanSwitchCmdInfo) ; smePushCommand(pMac, tdlsChanSwitchCmd, FALSE) ; status = eHAL_STATUS_SUCCESS ; smsLog( pMac, LOG1, FL("Successfully posted tdlsChanSwitchCmd to SME")); } } 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 modify an existing TDLS peer */ eHalStatus csrTdlsChangePeerSta(tHalHandle hHal, tANI_U8 sessionId, tSirMacAddr peerMac, tCsrStaParams *pstaParams) { tpAniSirGlobal pMac = PMAC_STRUCT( hHal ); tSmeCmd *tdlsAddStaCmd ; eHalStatus status = eHAL_STATUS_FAILURE ; if (NULL == pstaParams) return status; //If connected and in Infra. Only then allow this if (CSR_IS_SESSION_VALID( pMac, sessionId ) && csrIsConnStateConnectedInfra( pMac, sessionId ) && (NULL != peerMac)){ tdlsAddStaCmd = csrGetCommandBuffer(pMac) ; if (tdlsAddStaCmd) { tTdlsAddStaCmdInfo *tdlsAddStaCmdInfo = &tdlsAddStaCmd->u.tdlsCmd.u.tdlsAddStaCmdInfo ; tdlsAddStaCmdInfo->tdlsAddOper = TDLS_OPER_UPDATE; tdlsAddStaCmd->sessionId = sessionId; vos_mem_copy(tdlsAddStaCmdInfo->peerMac, peerMac, sizeof(tSirMacAddr)) ; tdlsAddStaCmdInfo->capability = pstaParams->capability; tdlsAddStaCmdInfo->uapsdQueues = pstaParams->uapsd_queues; tdlsAddStaCmdInfo->maxSp = pstaParams->max_sp; vos_mem_copy(tdlsAddStaCmdInfo->extnCapability, pstaParams->extn_capability, sizeof(pstaParams->extn_capability)); tdlsAddStaCmdInfo->htcap_present = pstaParams->htcap_present; if(pstaParams->htcap_present) vos_mem_copy( &tdlsAddStaCmdInfo->HTCap, &pstaParams->HTCap, sizeof(pstaParams->HTCap)); else vos_mem_set(&tdlsAddStaCmdInfo->HTCap, sizeof(pstaParams->HTCap), 0); tdlsAddStaCmdInfo->vhtcap_present = pstaParams->vhtcap_present; if(pstaParams->vhtcap_present) vos_mem_copy( &tdlsAddStaCmdInfo->VHTCap, &pstaParams->VHTCap, sizeof(pstaParams->VHTCap)); else vos_mem_set(&tdlsAddStaCmdInfo->VHTCap, sizeof(pstaParams->VHTCap), 0); tdlsAddStaCmdInfo->supportedRatesLen = pstaParams->supported_rates_len; if (0 != pstaParams->supported_rates_len) vos_mem_copy( &tdlsAddStaCmdInfo->supportedRates, pstaParams->supported_rates, pstaParams->supported_rates_len); tdlsAddStaCmd->command = eSmeCommandTdlsAddPeer; tdlsAddStaCmd->u.tdlsCmd.size = sizeof(tTdlsAddStaCmdInfo) ; smePushCommand(pMac, tdlsAddStaCmd, FALSE) ; status = eHAL_STATUS_SUCCESS ; } } return status ; }
if(((0 == pScanCmd->u.scanCmd.scanID) && (eCSR_SCAN_REQUEST_11D_SCAN != pScanRequest->requestType)) #ifdef SOFTAP_CHANNEL_RANGE && (eCSR_SCAN_SOFTAP_CHANNEL_RANGE != pScanRequest->requestType) #endif && (eANI_BOOLEAN_FALSE == pMac->scan.fEnableBypass11d) ) { tSmeCmd *p11dScanCmd; tCsrScanRequest scanReq; tCsrChannelInfo *pChnInfo = &scanReq.ChannelInfo; palZeroMemory(pMac->hHdd, &scanReq, sizeof(tCsrScanRequest)); p11dScanCmd = csrGetCommandBuffer(pMac); if(p11dScanCmd) { tANI_U32 numChn = pMac->scan.baseChannels.numChannels; palZeroMemory(pMac->hHdd, &p11dScanCmd->u.scanCmd, sizeof(tScanCmd)); status = palAllocateMemory( pMac->hHdd, (void **)&pChnInfo->ChannelList, numChn ); if( !HAL_STATUS_SUCCESS( status ) ) { break; } status = palCopyMemory( pMac->hHdd, pChnInfo->ChannelList, pMac->scan.baseChannels.channelList, numChn ); if( !HAL_STATUS_SUCCESS( status ) ) { palFreeMemory( pMac->hHdd, pChnInfo->ChannelList ); pChnInfo->ChannelList = NULL;