eHalStatus csrTdlsProcessAddSta( tpAniSirGlobal pMac, tSmeCmd *cmd ) { tTdlsAddStaCmdInfo *tdlsAddStaCmdInfo = &cmd->u.tdlsCmd.u.tdlsAddStaCmdInfo ; tSirTdlsAddStaReq *tdlsAddStaReq = NULL ; tCsrRoamSession *pSession = CSR_GET_SESSION( pMac, cmd->sessionId ); eHalStatus status = eHAL_STATUS_FAILURE; if (NULL == pSession->pConnectBssDesc) { smsLog( pMac, LOGE, FL("BSS description is not present") ); return eHAL_STATUS_FAILURE; } status = palAllocateMemory( pMac->hHdd, (void **)&tdlsAddStaReq, (sizeof(tSirTdlsAddStaReq) ) ); if (!HAL_STATUS_SUCCESS( status ) ) { smsLog( pMac, LOGE, FL("alloc failed") ); VOS_ASSERT(0) ; return status ; } tdlsAddStaReq->sessionId = cmd->sessionId; tdlsAddStaReq->tdlsAddOper = tdlsAddStaCmdInfo->tdlsAddOper; //Using dialog as transactionId. This can be used to match response with request tdlsAddStaReq->transactionId = 0; palCopyMemory(pMac->hHdd, tdlsAddStaReq->bssid, pSession->pConnectBssDesc->bssId, sizeof (tSirMacAddr)); palCopyMemory(pMac->hHdd, tdlsAddStaReq->peerMac, tdlsAddStaCmdInfo->peerMac, sizeof(tSirMacAddr)) ; tdlsAddStaReq->capability = tdlsAddStaCmdInfo->capability; tdlsAddStaReq->uapsd_queues = tdlsAddStaCmdInfo->uapsdQueues; tdlsAddStaReq->max_sp = tdlsAddStaCmdInfo->maxSp; palCopyMemory(pMac->hHdd, tdlsAddStaReq->extn_capability, tdlsAddStaCmdInfo->extnCapability, SIR_MAC_MAX_EXTN_CAP); tdlsAddStaReq->htcap_present = tdlsAddStaCmdInfo->htcap_present; palCopyMemory(pMac->hHdd, &tdlsAddStaReq->htCap, &tdlsAddStaCmdInfo->HTCap, sizeof(tdlsAddStaCmdInfo->HTCap)); tdlsAddStaReq->vhtcap_present = tdlsAddStaCmdInfo->vhtcap_present; palCopyMemory(pMac->hHdd, &tdlsAddStaReq->vhtCap, &tdlsAddStaCmdInfo->VHTCap, sizeof(tdlsAddStaCmdInfo->VHTCap)); tdlsAddStaReq->supported_rates_length = tdlsAddStaCmdInfo->supportedRatesLen; palCopyMemory(pMac->hHdd, &tdlsAddStaReq->supported_rates, tdlsAddStaCmdInfo->supportedRates, tdlsAddStaCmdInfo->supportedRatesLen); // Send the request to PE. smsLog( pMac, LOGE, "sending TDLS Add Sta req to PE " ); status = tdlsSendMessage(pMac, eWNI_SME_TDLS_ADD_STA_REQ, (void *)tdlsAddStaReq , sizeof(tSirTdlsAddStaReq)) ; if(!HAL_STATUS_SUCCESS( status ) ) { smsLog( pMac, LOGE, FL("Failed to send request to MAC")); } return status; }
/* --------------------------------------------------------------------------- \fn oemData_SendMBOemDataReq \brief Request an OEM DATA REQ to be passed down to PE \param pMac: \param pOemDataReq: Pointer to the oem data request \return eHalStatus -------------------------------------------------------------------------------*/ eHalStatus oemData_SendMBOemDataReq(tpAniSirGlobal pMac, tOemDataReq *pOemDataReq) { eHalStatus status = eHAL_STATUS_SUCCESS; tSirOemDataReq* pMsg; tANI_U16 msgLen; tCsrRoamSession *pSession = CSR_GET_SESSION( pMac, pOemDataReq->sessionId ); smsLog(pMac, LOGW, "OEM_DATA: entering Function %s", __func__); msgLen = (tANI_U16)(sizeof(tSirOemDataReq)); status = palAllocateMemory(pMac->hHdd, (void**)&pMsg, msgLen); if(HAL_STATUS_SUCCESS(status)) { palZeroMemory(pMac->hHdd, pMsg, msgLen); pMsg->messageType = pal_cpu_to_be16((tANI_U16)eWNI_SME_OEM_DATA_REQ); palCopyMemory(pMac->hHdd, pMsg->selfMacAddr, pSession->selfMacAddr, sizeof(tSirMacAddr) ); status = palCopyMemory(pMac->hHdd, pMsg->oemDataReq, pOemDataReq->oemDataReq, OEM_DATA_REQ_SIZE); if(HAL_STATUS_SUCCESS(status)) { smsLog(pMac, LOGW, "OEM_DATA: sending message to pe%s", __func__); status = palSendMBMessage(pMac->hHdd, pMsg); } else { palFreeMemory(pMac->hHdd, pMsg); } } smsLog(pMac, LOGW, "OEM_DATA: exiting Function %s", __func__); return status; }
eHalStatus csrTdlsProcessSendMgmt( tpAniSirGlobal pMac, tSmeCmd *cmd ) { tTdlsSendMgmtCmdInfo *tdlsSendMgmtCmdInfo = &cmd->u.tdlsCmd.u.tdlsSendMgmtCmdInfo ; tSirTdlsSendMgmtReq *tdlsSendMgmtReq = NULL ; tCsrRoamSession *pSession = CSR_GET_SESSION( pMac, cmd->sessionId ); eHalStatus status = eHAL_STATUS_FAILURE; if (NULL == pSession->pConnectBssDesc) { smsLog( pMac, LOGE, FL("BSS Description is not present") ); return eHAL_STATUS_FAILURE; } status = palAllocateMemory( pMac->hHdd, (void **)&tdlsSendMgmtReq, (sizeof(tSirTdlsSendMgmtReq) + tdlsSendMgmtCmdInfo->len ) ); if (!HAL_STATUS_SUCCESS( status ) ) { smsLog( pMac, LOGE, FL("alloc failed") ); VOS_ASSERT(0) ; return status ; } tdlsSendMgmtReq->sessionId = cmd->sessionId; //Using dialog as transactionId. This can be used to match response with request tdlsSendMgmtReq->transactionId = tdlsSendMgmtCmdInfo->dialog; tdlsSendMgmtReq->reqType = tdlsSendMgmtCmdInfo->frameType ; tdlsSendMgmtReq->dialog = tdlsSendMgmtCmdInfo->dialog ; tdlsSendMgmtReq->statusCode = tdlsSendMgmtCmdInfo->statusCode ; tdlsSendMgmtReq->responder = tdlsSendMgmtCmdInfo->responder; palCopyMemory(pMac->hHdd, tdlsSendMgmtReq->bssid, pSession->pConnectBssDesc->bssId, sizeof (tSirMacAddr)); palCopyMemory(pMac->hHdd, tdlsSendMgmtReq->peerMac, tdlsSendMgmtCmdInfo->peerMac, sizeof(tSirMacAddr)) ; if(tdlsSendMgmtCmdInfo->len && tdlsSendMgmtCmdInfo->buf) { palCopyMemory(pMac->hHdd, tdlsSendMgmtReq->addIe, tdlsSendMgmtCmdInfo->buf, tdlsSendMgmtCmdInfo->len); } // Send the request to PE. smsLog( pMac, LOG1, "sending TDLS Mgmt Frame req to PE " ); status = tdlsSendMessage(pMac, eWNI_SME_TDLS_SEND_MGMT_REQ, (void *)tdlsSendMgmtReq , sizeof(tSirTdlsSendMgmtReq)+tdlsSendMgmtCmdInfo->len) ; if(!HAL_STATUS_SUCCESS( status ) ) { smsLog( pMac, LOGE, FL("Failed to send request to MAC")); } if(tdlsSendMgmtCmdInfo->len && tdlsSendMgmtCmdInfo->buf) { //Done with the buf. Free it. vos_mem_free( tdlsSendMgmtCmdInfo->buf ); tdlsSendMgmtCmdInfo->buf = NULL; tdlsSendMgmtCmdInfo->len = 0; } return status; }
/* --------------------------------------------------------------------------- \fn oemData_SendMBOemDataReq \brief Request an OEM DATA REQ to be passed down to PE \param pMac: \param pOemDataReq: Pointer to the oem data request \return eHalStatus -------------------------------------------------------------------------------*/ eHalStatus oemData_SendMBOemDataReq(tpAniSirGlobal pMac, tOemDataReq *pOemDataReq) { eHalStatus status = eHAL_STATUS_SUCCESS; tSirOemDataReq* pMsg; tANI_U16 msgLen; tCsrRoamSession *pSession = CSR_GET_SESSION( pMac, pOemDataReq->sessionId ); smsLog(pMac, LOGW, "OEM_DATA: entering Function %s", __func__); msgLen = (tANI_U16)(sizeof(tSirOemDataReq)); pMsg = vos_mem_malloc(msgLen); if ( NULL == pMsg ) status = eHAL_STATUS_FAILURE; else status = eHAL_STATUS_SUCCESS; if(HAL_STATUS_SUCCESS(status)) { vos_mem_set(pMsg, msgLen, 0); pMsg->messageType = pal_cpu_to_be16((tANI_U16)eWNI_SME_OEM_DATA_REQ); pMsg->messageLen = pal_cpu_to_be16(msgLen); vos_mem_copy(pMsg->selfMacAddr, pSession->selfMacAddr, sizeof(tSirMacAddr) ); vos_mem_copy(pMsg->oemDataReq, pOemDataReq->oemDataReq, OEM_DATA_REQ_SIZE); smsLog(pMac, LOGW, "OEM_DATA: sending message to pe%s", __func__); status = palSendMBMessage(pMac->hHdd, pMsg); } smsLog(pMac, LOGW, "OEM_DATA: exiting Function %s", __func__); return status; }
/*-------------------------------------------------------------------------- Initialize the FT context. ------------------------------------------------------------------------*/ void sme_FTOpen(tHalHandle hHal, tANI_U32 sessionId) { tpAniSirGlobal pMac = PMAC_STRUCT( hHal ); eHalStatus status = eHAL_STATUS_SUCCESS; tCsrRoamSession *pSession = CSR_GET_SESSION(pMac, sessionId); if (NULL != pSession) { /* Clean up the context */ vos_mem_set(&pSession->ftSmeContext, sizeof(tftSMEContext), 0); pSession->ftSmeContext.pUsrCtx = vos_mem_malloc( sizeof(tFTRoamCallbackUsrCtx)); if (NULL == pSession->ftSmeContext.pUsrCtx) { smsLog(pMac, LOGE, FL("Memory allocation failure")); return; } pSession->ftSmeContext.pUsrCtx->pMac = pMac; pSession->ftSmeContext.pUsrCtx->sessionId = sessionId; status = vos_timer_init(&pSession->ftSmeContext.preAuthReassocIntvlTimer, VOS_TIMER_TYPE_SW, sme_PreauthReassocIntvlTimerCallback, (void *)pSession->ftSmeContext.pUsrCtx); if (eHAL_STATUS_SUCCESS != status) { smsLog(pMac, LOGE, FL("Preauth Reassoc interval Timer allocation failed")); vos_mem_free(pSession->ftSmeContext.pUsrCtx); pSession->ftSmeContext.pUsrCtx = NULL; return; } } }
static void smeTraceDump(tpAniSirGlobal pMac, tpvosTraceRecord pRecord, tANI_U16 recIndex) { switch (pRecord->code) { case TRACE_CODE_SME_COMMAND: smsLog(pMac, LOG1, "%04d %s S%d %-14s %-30s(0x%x)", recIndex, pRecord->time, pRecord->session, "SME COMMAND:", smeTraceGetCommandString(pRecord->data), pRecord->data); break; case TRACE_CODE_SME_TX_WDA_MSG: smsLog(pMac, LOG1, "%04d %s S%d %-14s %-30s(0x%x)", recIndex, pRecord->time, pRecord->session, "TX WDA Msg:", macTraceGetWdaMsgString((tANI_U16)pRecord->data), pRecord->data); break; case TRACE_CODE_SME_RX_WDA_MSG: smsLog(pMac, LOG1, "%04d %s S%d %-14s %-30s(0x%x)", recIndex, pRecord->time, pRecord->session, "RX WDA Msg:", macTraceGetSmeMsgString((tANI_U16)pRecord->data), pRecord->data); break; default: smsLog(pMac, LOG1, "%04d %s S%d %-14s %-30s(0x%x)", recIndex, pRecord->time, pRecord->session, "RX HDD MSG:", smeTraceGetRxMsgString(pRecord->code), pRecord->data); break; } }
/*-------------------------------------------------------------------------- Cleanup the SME FT Global context. ------------------------------------------------------------------------*/ void sme_FTClose(tHalHandle hHal, tANI_U32 sessionId) { tpAniSirGlobal pMac = PMAC_STRUCT( hHal ); tCsrRoamSession *pSession = NULL; /* Clear the FT Context */ sme_FTReset(hHal, sessionId); pSession = CSR_GET_SESSION( pMac, sessionId ); if (NULL != pSession) { /* check if the timer is running */ if (VOS_TIMER_STATE_RUNNING == vos_timer_getCurrentState( &pSession->ftSmeContext.preAuthReassocIntvlTimer)) { vos_timer_stop(&pSession->ftSmeContext.preAuthReassocIntvlTimer); } if (VOS_STATUS_SUCCESS != vos_timer_destroy(&pSession->ftSmeContext.preAuthReassocIntvlTimer)) { smsLog(pMac, LOGE, FL("preAuthReAssocTimer destroy failed")); } if (pSession->ftSmeContext.pUsrCtx != NULL) { smsLog(pMac, LOG1, FL("Freeing ftSmeContext.pUsrCtx and setting to NULL")); vos_mem_free(pSession->ftSmeContext.pUsrCtx); pSession->ftSmeContext.pUsrCtx = NULL; } } }
/* --------------------------------------------------------------------------- \fn oemData_ProcessOemDataReqCommand \brief This function is called by the smeProcessCommand when the case hits eSmeCommandOemDataReq \return eHalStatus -------------------------------------------------------------------------------*/ eHalStatus oemData_ProcessOemDataReqCommand(tpAniSirGlobal pMac, tSmeCmd *pOemDataReqCmd) { eHalStatus status = eHAL_STATUS_SUCCESS; //check if the system is in proper mode of operation for //oem data req/rsp to be functional. Currently, concurrency is not //supported and the driver must be operational only as //STA for oem data req/rsp to be functional. We return an invalid //mode flag if it is operational as any one of the following //in any of the active sessions //1. AP Mode //2. IBSS Mode //3. BTAMP Mode ... if(eHAL_STATUS_SUCCESS == oemData_IsOemDataReqAllowed(pMac)) { smsLog(pMac, LOG1, "%s: OEM_DATA REQ allowed in the current mode", __func__); pMac->oemData.oemDataReqActive = eANI_BOOLEAN_TRUE; status = oemData_SendMBOemDataReq(pMac, &(pOemDataReqCmd->u.oemDataCmd.oemDataReq)); } else { smsLog(pMac, LOG1, "%s: OEM_DATA REQ not allowed in the current mode", __func__); oemData_ReleaseOemDataReqCommand(pMac, pOemDataReqCmd, eOEM_DATA_REQ_INVALID_MODE); pMac->oemData.oemDataReqActive = eANI_BOOLEAN_FALSE; } return status; }
/* --------------------------------------------------------------------------- \fn oemData_IsOemDataReqAllowed \brief This function checks if OEM DATA REQs can be performed in the current driver state \return eHalStatus -------------------------------------------------------------------------------*/ eHalStatus oemData_IsOemDataReqAllowed(tHalHandle hHal) { eHalStatus status = eHAL_STATUS_SUCCESS; tANI_U32 sessionId; tpAniSirGlobal pMac = PMAC_STRUCT(hHal); for(sessionId = 0; sessionId < CSR_ROAM_SESSION_MAX; sessionId++) { if(CSR_IS_SESSION_VALID(pMac, sessionId)) { if(csrIsConnStateIbss(pMac, sessionId) || csrIsBTAMP(pMac, sessionId) || csrIsConnStateConnectedInfraAp(pMac, sessionId) ) { //co-exist with IBSS or BT-AMP or Soft-AP mode is not supported smsLog(pMac, LOGW, "OEM DATA REQ is not allowed due to IBSS|BTAMP|SAP exist in session %d", sessionId); status = eHAL_STATUS_CSR_WRONG_STATE; break; } } } smsLog(pMac, LOG1, "Exiting oemData_IsOemDataReqAllowed with status %d", status); return (status); }
static eHalStatus cfgSet(tHalHandle hHal, tANI_U32 cfgId, tANI_U32 type, tANI_S32 length, void * ccmPtr, tANI_U32 ccmValue, tCcmCfgSetCallback callback, eAniBoolean toBeSaved) { tHddHandle hHdd = halHandle2HddHandle(hHal); tpAniSirGlobal pMac = PMAC_STRUCT( hHal ); eHalStatus status; tCfgReq *req ; if (pal_in_interrupt()) { #ifdef CCM_DEBUG2 smsLog(pMac, LOG1, FL("WNI_CFG_%s (%d 0x%x), in_interrupt()=TRUE"), gCfgParamName[cfgId], (int)cfgId, (int)cfgId); #endif status = cfgSetSub(pMac, hHdd, cfgId, type, length, ccmPtr, ccmValue, callback, toBeSaved, NULL, &req); } else { void *sem ; #ifdef CCM_DEBUG2 smsLog(pMac, LOG1, FL("WNI_CFG_%s (%d 0x%x), in_interrupt()=FALSE"), gCfgParamName[cfgId], (int)cfgId, (int)cfgId); #endif pal_local_bh_disable() ; status = palMutexAllocLocked( hHdd, &sem ) ; if (status != eHAL_STATUS_SUCCESS) { smsLog(pMac, LOGE, FL("mutex alloc failed")); sem = NULL; } else { status = cfgSetSub(pMac, hHdd, cfgId, type, length, ccmPtr, ccmValue, callback, toBeSaved, sem, &req); if ((status != eHAL_STATUS_SUCCESS) || (req == NULL)) { //Either it fails to send or the req is finished already palSemaphoreFree( hHdd, sem ); sem = NULL; } } pal_local_bh_enable() ; if ((status == eHAL_STATUS_SUCCESS) && (sem != NULL)) { #ifdef CCM_DEBUG smsLog(pMac, LOG1, FL("ccmWaitForCompletion(%p)"), req->done); #endif ccmWaitForCompletion(hHdd, sem); #ifdef CCM_DEBUG smsLog(pMac, LOG1, FL("free(%p)"), req->done); #endif palSemaphoreFree( hHdd, sem ) ; } } return status ; }
eHalStatus csrTdlsProcessDelSta( tpAniSirGlobal pMac, tSmeCmd *cmd ) { tTdlsDelStaCmdInfo *tdlsDelStaCmdInfo = &cmd->u.tdlsCmd.u.tdlsDelStaCmdInfo ; tSirTdlsDelStaReq *tdlsDelStaReq = NULL ; tCsrRoamSession *pSession = CSR_GET_SESSION( pMac, cmd->sessionId ); eHalStatus status = eHAL_STATUS_FAILURE; if (NULL == pSession) { smsLog( pMac, LOGE, FL("pSession is NULL")); return eHAL_STATUS_FAILURE; } if (NULL == pSession->pConnectBssDesc) { smsLog( pMac, LOGE, FL("BSS description is not present") ); return eHAL_STATUS_FAILURE; } tdlsDelStaReq = vos_mem_malloc(sizeof(tSirTdlsDelStaReq)); if ( NULL == tdlsDelStaReq ) 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 ; } tdlsDelStaReq->sessionId = cmd->sessionId; //Using dialog as transactionId. This can be used to match response with request tdlsDelStaReq->transactionId = 0; vos_mem_copy( tdlsDelStaReq->bssid, pSession->pConnectBssDesc->bssId, sizeof (tSirMacAddr)); vos_mem_copy( tdlsDelStaReq->peerMac, tdlsDelStaCmdInfo->peerMac, sizeof(tSirMacAddr)) ; // Send the request to PE. #ifdef WLAN_FEATURE_TDLS_DEBUG smsLog( pMac, LOGE, #else smsLog( pMac, LOG1, #endif "sending TDLS Del Sta "MAC_ADDRESS_STR" req to PE", MAC_ADDR_ARRAY(tdlsDelStaCmdInfo->peerMac)); status = tdlsSendMessage(pMac, eWNI_SME_TDLS_DEL_STA_REQ, (void *)tdlsDelStaReq , sizeof(tSirTdlsDelStaReq)) ; if(!HAL_STATUS_SUCCESS( status ) ) { smsLog( pMac, LOGE, FL("Failed to send request to MAC")); } 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 ); if (NULL == pSession) { smsLog( pMac, LOGE, FL("pSession is NULL")); return eHAL_STATUS_FAILURE; } tdlsLinkEstablishReq = vos_mem_malloc(sizeof(tSirTdlsLinkEstablishReq)); if (tdlsLinkEstablishReq == NULL) { 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; vos_mem_copy(tdlsLinkEstablishReq->peerMac, tdlsLinkEstablishCmdInfo->peerMac, sizeof(tSirMacAddr)); vos_mem_copy(tdlsLinkEstablishReq->bssid, pSession->pConnectBssDesc->bssId, sizeof (tSirMacAddr)); vos_mem_copy(tdlsLinkEstablishReq->supportedChannels, tdlsLinkEstablishCmdInfo->supportedChannels, tdlsLinkEstablishCmdInfo->supportedChannelsLen); tdlsLinkEstablishReq->supportedChannelsLen = tdlsLinkEstablishCmdInfo->supportedChannelsLen; vos_mem_copy(tdlsLinkEstablishReq->supportedOperClasses, tdlsLinkEstablishCmdInfo->supportedOperClasses, tdlsLinkEstablishCmdInfo->supportedOperClassesLen); tdlsLinkEstablishReq->supportedOperClassesLen = tdlsLinkEstablishCmdInfo->supportedOperClassesLen; tdlsLinkEstablishReq->isBufSta = tdlsLinkEstablishCmdInfo->isBufSta; tdlsLinkEstablishReq->isResponder= tdlsLinkEstablishCmdInfo->isResponder; tdlsLinkEstablishReq->uapsdQueues= tdlsLinkEstablishCmdInfo->uapsdQueues; tdlsLinkEstablishReq->maxSp= tdlsLinkEstablishCmdInfo->maxSp; tdlsLinkEstablishReq->isOffChannelSupported = tdlsLinkEstablishCmdInfo->isOffChannelSupported; // 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; }
eHalStatus p2pProcessRemainOnChannelCmd(tpAniSirGlobal pMac, tSmeCmd *p2pRemainonChn) { eHalStatus status = eHAL_STATUS_FAILURE; tSirRemainOnChnReq* pMsg; tANI_U32 len; tCsrRoamSession *pSession = CSR_GET_SESSION( pMac, p2pRemainonChn->sessionId ); if(!pSession) { smsLog(pMac, LOGE, FL(" session %d not found "), p2pRemainonChn->sessionId); goto error; } if(!pSession->sessionActive) { smsLog(pMac, LOGE, FL(" session %d is invalid or listen is disabled "), p2pRemainonChn->sessionId); goto error; } len = sizeof(tSirRemainOnChnReq) + pMac->p2pContext.probeRspIeLength; if( len > 0xFFFF ) { /*In coming len for Msg is more then 16bit value*/ smsLog(pMac, LOGE, FL(" Message length is very large, %d"), len); goto error; } pMsg = vos_mem_malloc(len); if ( NULL == pMsg ) goto error; else { VOS_TRACE(VOS_MODULE_ID_SME, VOS_TRACE_LEVEL_INFO, "%s call", __func__); vos_mem_set(pMsg, sizeof(tSirRemainOnChnReq), 0); pMsg->messageType = eWNI_SME_REMAIN_ON_CHANNEL_REQ; pMsg->length = (tANI_U16)len; vos_mem_copy(pMsg->selfMacAddr, pSession->selfMacAddr, sizeof(tSirMacAddr)); pMsg->chnNum = p2pRemainonChn->u.remainChlCmd.chn; pMsg->phyMode = p2pRemainonChn->u.remainChlCmd.phyMode; pMsg->duration = p2pRemainonChn->u.remainChlCmd.duration; pMsg->sessionId = p2pRemainonChn->sessionId; pMsg->isProbeRequestAllowed = p2pRemainonChn->u.remainChlCmd.isP2PProbeReqAllowed; if( pMac->p2pContext.probeRspIeLength ) vos_mem_copy((void *)pMsg->probeRspIe, (void *)pMac->p2pContext.probeRspIe, pMac->p2pContext.probeRspIeLength); status = palSendMBMessage(pMac->hHdd, pMsg); } error: if (eHAL_STATUS_FAILURE == status) csr_release_roc_req_cmd(pMac); return status; }
eHalStatus csrTdlsProcessDelSta( tpAniSirGlobal pMac, tSmeCmd *cmd ) { tTdlsDelStaCmdInfo *tdlsDelStaCmdInfo = &cmd->u.tdlsCmd.u.tdlsDelStaCmdInfo ; tSirTdlsDelStaReq *tdlsDelStaReq = NULL ; tCsrRoamSession *pSession = CSR_GET_SESSION( pMac, cmd->sessionId ); eHalStatus status = eHAL_STATUS_FAILURE; if (NULL == pSession) { return eHAL_STATUS_FAILURE; } if (NULL == pSession->pConnectBssDesc) { smsLog( pMac, LOGE, FL("BSS description is not present") ); return eHAL_STATUS_FAILURE; } status = palAllocateMemory( pMac->hHdd, (void **)&tdlsDelStaReq, (sizeof(tSirTdlsDelStaReq) ) ); if (!HAL_STATUS_SUCCESS( status ) ) { smsLog( pMac, LOGE, FL("alloc failed") ); VOS_ASSERT(0) ; return status ; } tdlsDelStaReq->sessionId = cmd->sessionId; //Using dialog as transactionId. This can be used to match response with request tdlsDelStaReq->transactionId = 0; palCopyMemory(pMac->hHdd, tdlsDelStaReq->bssid, pSession->pConnectBssDesc->bssId, sizeof (tSirMacAddr)); palCopyMemory(pMac->hHdd, tdlsDelStaReq->peerMac, tdlsDelStaCmdInfo->peerMac, sizeof(tSirMacAddr)) ; // Send the request to PE. #ifdef WLAN_FEATURE_TDLS_DEBUG smsLog( pMac, LOGE, #else smsLog( pMac, LOG1, #endif "sending TDLS Del Sta %02x:%02x:%02x:%02x:%02x:%02x req to PE", tdlsDelStaCmdInfo->peerMac[0], tdlsDelStaCmdInfo->peerMac[1], tdlsDelStaCmdInfo->peerMac[2], tdlsDelStaCmdInfo->peerMac[3], tdlsDelStaCmdInfo->peerMac[4], tdlsDelStaCmdInfo->peerMac[5]); status = tdlsSendMessage(pMac, eWNI_SME_TDLS_DEL_STA_REQ, (void *)tdlsDelStaReq , sizeof(tSirTdlsDelStaReq)) ; if(!HAL_STATUS_SUCCESS( status ) ) { smsLog( pMac, LOGE, FL("Failed to send request to MAC")); } return status; }
/*-------------------------------------------------------------------------- Reset the FT context. ------------------------------------------------------------------------*/ void sme_FTReset(tHalHandle hHal) { tpAniSirGlobal pMac = PMAC_STRUCT( hHal ); if (pMac == NULL) { VOS_TRACE(VOS_MODULE_ID_SME, VOS_TRACE_LEVEL_ERROR, FL("pMac is NULL")); return; } if (pMac->ft.ftSmeContext.auth_ft_ies != NULL) { #if defined WLAN_FEATURE_VOWIFI_11R_DEBUG smsLog( pMac, LOGE, FL(" Freeing FT Auth IE %p and setting to NULL"), pMac->ft.ftSmeContext.auth_ft_ies); #endif vos_mem_free(pMac->ft.ftSmeContext.auth_ft_ies); } pMac->ft.ftSmeContext.auth_ft_ies = NULL; pMac->ft.ftSmeContext.auth_ft_ies_length = 0; if (pMac->ft.ftSmeContext.reassoc_ft_ies != NULL) { #if defined WLAN_FEATURE_VOWIFI_11R_DEBUG smsLog( pMac, LOGE, FL(" Freeing FT Reassoc IE %p and setting to NULL"), pMac->ft.ftSmeContext.auth_ft_ies); #endif vos_mem_free(pMac->ft.ftSmeContext.reassoc_ft_ies); } pMac->ft.ftSmeContext.reassoc_ft_ies = NULL; pMac->ft.ftSmeContext.reassoc_ft_ies_length = 0; if (pMac->ft.ftSmeContext.psavedFTPreAuthRsp != NULL) { #if defined WLAN_FEATURE_VOWIFI_11R_DEBUG smsLog( pMac, LOGE, FL("Freeing FtPreAuthRsp %p and setting to NULL"), pMac->ft.ftSmeContext.psavedFTPreAuthRsp); #endif vos_mem_free(pMac->ft.ftSmeContext.psavedFTPreAuthRsp); } pMac->ft.ftSmeContext.psavedFTPreAuthRsp = NULL; pMac->ft.ftSmeContext.setFTPreAuthState = FALSE; pMac->ft.ftSmeContext.setFTPTKState = FALSE; if (pMac->ft.ftSmeContext.pCsrFTKeyInfo != NULL) { vos_mem_zero(pMac->ft.ftSmeContext.pCsrFTKeyInfo, sizeof(tCsrRoamSetKey)); vos_mem_free(pMac->ft.ftSmeContext.pCsrFTKeyInfo); } pMac->ft.ftSmeContext.pCsrFTKeyInfo = NULL; vos_mem_zero(pMac->ft.ftSmeContext.preAuthbssId, ANI_MAC_ADDR_SIZE); pMac->ft.ftSmeContext.FTState = eFT_START_READY; }
eHalStatus ccmCfgUpdate(tHalHandle hHal, tCcmCfgSetCallback callback) { tHddHandle hHdd = halHandle2HddHandle(hHal); tpAniSirGlobal pMac = PMAC_STRUCT( hHal ); eHalStatus status ; pal_local_bh_disable() ; status = cfgUpdate(pMac, hHdd, callback) ; if (status == eHAL_STATUS_SUCCESS) { if (pMac->ccm.replay.nr_param == 0) { /* there is nothing saved at comp[], so we are done! */ pMac->ccm.replay.started = 0 ; } else { /* we have sent update message to MAC SW */ void *sem ; status = palMutexAllocLocked( hHdd, &sem ) ; if (status != eHAL_STATUS_SUCCESS) { smsLog(pMac, LOGE, FL("mutex alloc failed")); pMac->ccm.replay.started = 0 ; } else { pMac->ccm.replay.done = sem ; } } } pal_local_bh_enable() ; /* Waiting here ... */ if (status == eHAL_STATUS_SUCCESS && pMac->ccm.replay.done) { #ifdef CCM_DEBUG smsLog(pMac, LOGW, FL("ccmWaitForCompletion(%p)"), pMac->ccm.replay.done); #endif ccmWaitForCompletion(hHdd, pMac->ccm.replay.done); #ifdef CCM_DEBUG smsLog(pMac, LOGW, FL("free(%p)"), pMac->ccm.replay.done); #endif palSemaphoreFree( hHdd, pMac->ccm.replay.done) ; } return status ; }
/*-------------------------------------------------------------------------- Reset the FT context. ------------------------------------------------------------------------*/ void sme_FTReset(tHalHandle hHal, tANI_U32 sessionId) { tpAniSirGlobal pMac = PMAC_STRUCT(hHal); tCsrRoamSession *pSession = NULL; if (pMac == NULL) { VOS_TRACE(VOS_MODULE_ID_SME, VOS_TRACE_LEVEL_ERROR, FL("pMac is NULL")); return; } pSession = CSR_GET_SESSION(pMac, sessionId); if (NULL != pSession) { if (pSession->ftSmeContext.auth_ft_ies != NULL) { #if defined WLAN_FEATURE_VOWIFI_11R_DEBUG smsLog(pMac, LOG1, FL("Freeing FT Auth IE %p and setting to NULL"), pSession->ftSmeContext.auth_ft_ies); #endif vos_mem_free(pSession->ftSmeContext.auth_ft_ies); pSession->ftSmeContext.auth_ft_ies = NULL; } pSession->ftSmeContext.auth_ft_ies_length = 0; if (pSession->ftSmeContext.reassoc_ft_ies != NULL) { #if defined WLAN_FEATURE_VOWIFI_11R_DEBUG smsLog(pMac, LOG1, FL("Freeing FT Reassoc IE %p and setting to NULL"), pSession->ftSmeContext.reassoc_ft_ies); #endif vos_mem_free(pSession->ftSmeContext.reassoc_ft_ies); pSession->ftSmeContext.reassoc_ft_ies = NULL; } pSession->ftSmeContext.reassoc_ft_ies_length = 0; if (pSession->ftSmeContext.psavedFTPreAuthRsp != NULL) { #if defined WLAN_FEATURE_VOWIFI_11R_DEBUG smsLog( pMac, LOG1, FL("Freeing FtPreAuthRsp %p and setting to NULL"), pSession->ftSmeContext.psavedFTPreAuthRsp); #endif vos_mem_free(pSession->ftSmeContext.psavedFTPreAuthRsp); vos_mem_set(pSession->ftSmeContext.psavedFTPreAuthRsp, sizeof(tSirFTPreAuthRsp), 0); } pSession->ftSmeContext.setFTPreAuthState = VOS_FALSE; pSession->ftSmeContext.setFTPTKState = VOS_FALSE; vos_mem_zero(pSession->ftSmeContext.preAuthbssId, ANI_MAC_ADDR_SIZE); pSession->ftSmeContext.FTState = eFT_START_READY; } }
/* * 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 ; }
/*-------------------------------------------------------------------------- Initialize the FT context. ------------------------------------------------------------------------*/ void sme_FTOpen(tHalHandle hHal) { tpAniSirGlobal pMac = PMAC_STRUCT( hHal ); eHalStatus status = eHAL_STATUS_SUCCESS; pMac->ft.ftSmeContext.auth_ft_ies = NULL; pMac->ft.ftSmeContext.auth_ft_ies_length = 0; pMac->ft.ftSmeContext.reassoc_ft_ies = NULL; pMac->ft.ftSmeContext.reassoc_ft_ies_length = 0; pMac->ft.ftSmeContext.setFTPreAuthState = FALSE; pMac->ft.ftSmeContext.setFTPTKState = FALSE; status = palTimerAlloc(pMac->hHdd, &pMac->ft.ftSmeContext.preAuthReassocIntvlTimer, sme_PreauthReassocIntvlTimerCallback, (void *)pMac); if (eHAL_STATUS_SUCCESS != status) { smsLog(pMac, LOGE, FL("Preauth Reassoc interval Timer allocation failed")); return; } pMac->ft.ftSmeContext.psavedFTPreAuthRsp = NULL; pMac->ft.ftSmeContext.pCsrFTKeyInfo = NULL; pMac->ft.ftSmeContext.FTState = eFT_START_READY; #ifdef DEBUG_ROAM_DELAY vos_reset_roam_timer_log(); #endif }
/*-------------------------------------------------------------------------- Initialize the FT context. ------------------------------------------------------------------------*/ void sme_FTOpen(tHalHandle hHal) { tpAniSirGlobal pMac = PMAC_STRUCT( hHal ); eHalStatus status = eHAL_STATUS_SUCCESS; pMac->ft.ftSmeContext.auth_ft_ies = NULL; pMac->ft.ftSmeContext.auth_ft_ies_length = 0; pMac->ft.ftSmeContext.reassoc_ft_ies = NULL; pMac->ft.ftSmeContext.reassoc_ft_ies_length = 0; pMac->ft.ftSmeContext.setFTPreAuthState = FALSE; pMac->ft.ftSmeContext.setFTPTKState = FALSE; status = vos_timer_init(&pMac->ft.ftSmeContext.preAuthReassocIntvlTimer,VOS_TIMER_TYPE_SW, sme_PreauthReassocIntvlTimerCallback, (void *)pMac); if (eHAL_STATUS_SUCCESS != status) { smsLog(pMac, LOGE, FL("Preauth Reassoc interval Timer allocation failed")); return; } pMac->ft.ftSmeContext.psavedFTPreAuthRsp = NULL; pMac->ft.ftSmeContext.pCsrFTKeyInfo = NULL; pMac->ft.ftSmeContext.FTState = eFT_START_READY; }
static void smeTraceDump(tpAniSirGlobal pMac, tpvosTraceRecord pRecord, tANI_U16 recIndex) { if (TRACE_CODE_SME_COMMAND == pRecord->code) { smsLog(pMac, LOGE, "%04d %012u S%d %-14s %-30s(0x%x)", recIndex, pRecord->time, pRecord->session, "SME COMMAND:", smeTraceGetCommandString(pRecord->data), pRecord->data ); } else { smsLog(pMac, LOGE, "%04d %012u S%d %-14s %-30s(0x%x)", recIndex, pRecord->time, pRecord->session, "RX HDD MSG:", smeTraceGetRxMsgString(pRecord->code), pRecord->data ); } }
/* * TDLS request API, called from HDD to delete a TDLS peer */ eHalStatus csrTdlsDelPeerSta(tHalHandle hHal, tANI_U8 sessionId, const 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 ; smsLog( pMac, LOG1, FL("Successfully posted tdlsDelStaCmd to SME")); } } return status ; }
/*-------------------------------------------------------------------------- * * SME now sends the RIC IEs up to the supplicant. * The supplicant will then proceed to send down the * Reassoc Req. * *------------------------------------------------------------------------*/ void sme_GetRICIEs( tHalHandle hHal, tANI_U8 *ric_ies, tANI_U32 ric_ies_ip_len, tANI_U32 *ric_ies_length ) { tpAniSirGlobal pMac = PMAC_STRUCT( hHal ); eHalStatus status = eHAL_STATUS_FAILURE; *ric_ies_length = 0; status = sme_AcquireGlobalLock( &pMac->sme ); if (!( HAL_STATUS_SUCCESS( status ))) return; /* All or nothing */ if (pMac->ft.ftSmeContext.psavedFTPreAuthRsp->ric_ies_length > ric_ies_ip_len) { sme_ReleaseGlobalLock( &pMac->sme ); return; } vos_mem_copy(ric_ies, pMac->ft.ftSmeContext.psavedFTPreAuthRsp->ric_ies, pMac->ft.ftSmeContext.psavedFTPreAuthRsp->ric_ies_length); *ric_ies_length = pMac->ft.ftSmeContext.psavedFTPreAuthRsp->ric_ies_length; #ifdef WLAN_FEATURE_VOWIFI_11R_DEBUG smsLog( pMac, LOGE, FL(" Filled ric ies = %d\n"), *ric_ies_length); #endif sme_ReleaseGlobalLock( &pMac->sme ); return; }
/*-------------------------------------------------------------------------- * * HDD Interface to SME. SME now sends the Auth 2 and RIC IEs up to the supplicant. * The supplicant will then proceed to send down the * Reassoc Req. * *------------------------------------------------------------------------*/ void sme_GetFTPreAuthResponse( tHalHandle hHal, tANI_U32 sessionId, tANI_U8 *ft_ies, tANI_U32 ft_ies_ip_len, tANI_U16 *ft_ies_length ) { tpAniSirGlobal pMac = PMAC_STRUCT( hHal ); tCsrRoamSession *pSession = CSR_GET_SESSION( pMac, sessionId ); eHalStatus status = eHAL_STATUS_FAILURE; if (!pSession) { smsLog( pMac, LOGE, FL("pSession is NULL")); return; } *ft_ies_length = 0; status = sme_AcquireGlobalLock( &pMac->sme ); if (!( HAL_STATUS_SUCCESS( status ))) return; /* All or nothing - proceed only if both BSSID and FT IE fit */ if((ANI_MAC_ADDR_SIZE + pSession->ftSmeContext.psavedFTPreAuthRsp->ft_ies_length) > ft_ies_ip_len) { sme_ReleaseGlobalLock( &pMac->sme ); return; } // hdd needs to pack the bssid also along with the // auth response to supplicant vos_mem_copy(ft_ies, pSession->ftSmeContext.preAuthbssId, ANI_MAC_ADDR_SIZE); // Copy the auth resp FTIEs vos_mem_copy(&(ft_ies[ANI_MAC_ADDR_SIZE]), pSession->ftSmeContext.psavedFTPreAuthRsp->ft_ies, pSession->ftSmeContext.psavedFTPreAuthRsp->ft_ies_length); *ft_ies_length = ANI_MAC_ADDR_SIZE + pSession->ftSmeContext.psavedFTPreAuthRsp->ft_ies_length; pSession->ftSmeContext.FTState = eFT_REASSOC_REQ_WAIT; #ifdef WLAN_FEATURE_VOWIFI_11R_DEBUG smsLog( pMac, LOG1, FL(" Filled auth resp = %d"), *ft_ies_length); #endif sme_ReleaseGlobalLock( &pMac->sme ); return; }
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 ); if (NULL == pSession) { smsLog( pMac, LOGE, FL("pSession is NULL")); return eHAL_STATUS_FAILURE; } 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; 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; 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; }
/* * 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 ; }
static char *dump_btcSetEvent( tpAniSirGlobal pMac, tANI_U32 arg1, tANI_U32 arg2, tANI_U32 arg3, tANI_U32 arg4, char *p ) { tSmeBtEvent btEvent; if( arg1 < BT_EVENT_TYPE_MAX ) { smsLog(pMac, LOGE, FL(" signal BT event (%d) handle (%d) 3rd param(%d)"), arg1, arg2, arg3); vos_mem_zero(&btEvent, sizeof(tSmeBtEvent)); btEvent.btEventType = arg1; switch( arg1 ) { case BT_EVENT_SYNC_CONNECTION_COMPLETE: case BT_EVENT_SYNC_CONNECTION_UPDATED: btEvent.uEventParam.btSyncConnection.connectionHandle = (v_U16_t)arg2; btEvent.uEventParam.btSyncConnection.status = (v_U8_t)arg3; break; case BT_EVENT_DISCONNECTION_COMPLETE: btEvent.uEventParam.btDisconnect.connectionHandle = (v_U16_t)arg2; break; case BT_EVENT_CREATE_ACL_CONNECTION: case BT_EVENT_ACL_CONNECTION_COMPLETE: btEvent.uEventParam.btAclConnection.connectionHandle = (v_U16_t)arg2; btEvent.uEventParam.btAclConnection.status = (v_U8_t)arg3; break; case BT_EVENT_MODE_CHANGED: btEvent.uEventParam.btAclModeChange.connectionHandle = (v_U16_t)arg2; break; default: break; } #ifndef WLAN_MDM_CODE_REDUCTION_OPT if(HAL_STATUS_SUCCESS(sme_AcquireGlobalLock( &pMac->sme ))) { btcSignalBTEvent(pMac, &btEvent); sme_ReleaseGlobalLock( &pMac->sme ); } #endif } else { smsLog(pMac, LOGE, FL(" invalid event (%d)"), arg1); } return p; }
// tdlsoffchan eHalStatus csrTdlsProcessChanSwitchReq( tpAniSirGlobal pMac, tSmeCmd *cmd ) { tTdlsChanSwitchCmdInfo *tdlsChanSwitchCmdInfo = &cmd->u.tdlsCmd.u.tdlsChanSwitchCmdInfo ; tSirTdlsChanSwitch *tdlsChanSwitch = NULL ; eHalStatus status = eHAL_STATUS_FAILURE; tCsrRoamSession *pSession = CSR_GET_SESSION( pMac, cmd->sessionId ); if (NULL == pSession) { smsLog( pMac, LOGE, FL("pSession is NULL")); return eHAL_STATUS_FAILURE; } tdlsChanSwitch = vos_mem_malloc(sizeof(tSirTdlsChanSwitch)); if (tdlsChanSwitch == NULL) { smsLog( pMac, LOGE, FL("alloc failed \n") ); VOS_ASSERT(0) ; return status ; } tdlsChanSwitch->sessionId = cmd->sessionId; //Using dialog as transactionId. This can be used to match response with request tdlsChanSwitch->transactionId = 0; vos_mem_copy( tdlsChanSwitch->peerMac, tdlsChanSwitchCmdInfo->peerMac, sizeof(tSirMacAddr)); vos_mem_copy(tdlsChanSwitch->bssid, pSession->pConnectBssDesc->bssId, sizeof (tSirMacAddr)); tdlsChanSwitch->tdlsOffCh = tdlsChanSwitchCmdInfo->tdlsOffCh; tdlsChanSwitch->tdlsOffChBwOffset = tdlsChanSwitchCmdInfo->tdlsOffChBwOffset; tdlsChanSwitch->tdlsSwMode = tdlsChanSwitchCmdInfo->tdlsSwMode; // Send the request to PE. smsLog( pMac, LOGE, "sending TDLS Channel Switch to PE \n" ); status = tdlsSendMessage(pMac, eWNI_SME_TDLS_CHANNEL_SWITCH_REQ, (void *)tdlsChanSwitch, sizeof(tSirTdlsChanSwitch)); if (!HAL_STATUS_SUCCESS( status ) ) { smsLog( pMac, LOGE, FL("Failed to send request to MAC\n")); } return status; }
void sme_SetFTPTKState(tHalHandle hHal, tANI_U32 sessionId, v_BOOL_t state) { tpAniSirGlobal pMac = PMAC_STRUCT(hHal); tCsrRoamSession *pSession = CSR_GET_SESSION(pMac, sessionId); if (!pSession) { smsLog(pMac, LOGE, FL("pSession is NULL")); return; } pSession->ftSmeContext.setFTPTKState = state; }
/*-------------------------------------------------------------------------- Cleanup the SME FT Global context. ------------------------------------------------------------------------*/ void sme_FTClose(tHalHandle hHal) { tpAniSirGlobal pMac = PMAC_STRUCT( hHal ); if (pMac->ft.ftSmeContext.auth_ft_ies != NULL) { #if defined WLAN_FEATURE_VOWIFI_11R_DEBUG smsLog( pMac, LOGE, FL(" Freeing %p and setting to NULL\n"), pMac->ft.ftSmeContext.auth_ft_ies); #endif vos_mem_free(pMac->ft.ftSmeContext.auth_ft_ies); pMac->ft.ftSmeContext.auth_ft_ies = NULL; } pMac->ft.ftSmeContext.auth_ft_ies_length = 0; if (pMac->ft.ftSmeContext.reassoc_ft_ies != NULL) { #if defined WLAN_FEATURE_VOWIFI_11R_DEBUG smsLog( pMac, LOGE, FL(" Freeing %p and setting to NULL\n"), pMac->ft.ftSmeContext.reassoc_ft_ies); #endif vos_mem_free(pMac->ft.ftSmeContext.reassoc_ft_ies); pMac->ft.ftSmeContext.reassoc_ft_ies = NULL; } pMac->ft.ftSmeContext.reassoc_ft_ies_length = 0; pMac->ft.ftSmeContext.FTState = eFT_START_READY; vos_mem_zero(pMac->ft.ftSmeContext.preAuthbssId, ANI_MAC_ADDR_SIZE); if (pMac->ft.ftSmeContext.psavedFTPreAuthRsp != NULL) { #if defined WLAN_FEATURE_VOWIFI_11R_DEBUG smsLog( pMac, LOGE, FL("%s: Freeing %p and setting to NULL\n"), pMac->ft.ftSmeContext.psavedFTPreAuthRsp); #endif vos_mem_free(pMac->ft.ftSmeContext.psavedFTPreAuthRsp); pMac->ft.ftSmeContext.psavedFTPreAuthRsp = NULL; } palTimerFree(pMac->hHdd, pMac->ft.ftSmeContext.preAuthReassocIntvlTimer); }