eHalStatus ccmCfgGetStr(tHalHandle hHal, tANI_U32 cfgId, tANI_U8 *pBuf, tANI_U32 *pLength) { tpAniSirGlobal pMac = PMAC_STRUCT( hHal ); tHddHandle hHdd; eHalStatus status = eHAL_STATUS_SUCCESS ; tCfgReq *req; if (!pMac) return eHAL_STATUS_FAILURE; hHdd = halHandle2HddHandle(hHal); req = pMac->ccm.comp[cfgId] ; if (req && req->state == eCCM_REQ_DONE && (tANI_U32)req->length <= *pLength) { *pLength = req->length ; vos_mem_copy((void *)pBuf, (void *)req->ccmPtr, req->length); } else { if (wlan_cfgGetStr(pMac, (tANI_U16)cfgId, pBuf, pLength) != eSIR_SUCCESS) status = eHAL_STATUS_FAILURE; } return status ; }
static char * dump_pmc_enter_wowl( tpAniSirGlobal pMac, tANI_U32 arg1, tANI_U32 arg2, tANI_U32 arg3, tANI_U32 arg4, char *p) { tSirSmeWowlEnterParams wowlEnterParams; tSirRetStatus status; tANI_U32 length; tANI_U8 sessionId = 0; (void) arg4; palZeroMemory(pMac->hHdd, &wowlEnterParams, sizeof(tSirSmeWowlEnterParams)); if (arg1 == 0 && arg2 == 0) { pmcLog(pMac, LOGE, "Requesting WoWL but neither magic pkt and ptrn byte matching is being enabled\n"); return p; } if(arg1 == 1) { wowlEnterParams.ucMagicPktEnable = 1; length = SIR_MAC_ADDR_LENGTH; status = wlan_cfgGetStr(pMac, WNI_CFG_STA_ID, (tANI_U8 *)wowlEnterParams.magicPtrn, &length); if (eSIR_SUCCESS != status) { pmcLog(pMac, LOGE, "Reading of WNI_CFG_STA_ID from CFG failed. Using hardcoded STA MAC Addr\n"); wowlEnterParams.magicPtrn[0] = 0x00; wowlEnterParams.magicPtrn[1] = 0x0a; wowlEnterParams.magicPtrn[2] = 0xf5; wowlEnterParams.magicPtrn[3] = 0x04; wowlEnterParams.magicPtrn[4] = 0x05; wowlEnterParams.magicPtrn[5] = 0x06; } } if(arg2 == 1) { wowlEnterParams.ucPatternFilteringEnable = 1; } if(arg3 == CSR_ROAM_SESSION_MAX ) { pmcLog(pMac, LOGE, "Enter valid sessionId\n"); return p; } pMac->pmc.bmpsEnabled = TRUE; pMac->pmc.wowlEnabled = TRUE; sessionId = (tANI_U8 ) arg3; #ifdef WLAN_WAKEUP_EVENTS (void)sme_EnterWowl(pMac, dump_pmc_callbackRoutine, pMac, dump_pmc_callbackRoutine2, pMac, &wowlEnterParams, sessionId); #else (void)sme_EnterWowl(pMac, dump_pmc_callbackRoutine, pMac, &wowlEnterParams, sessionId); #endif return p; }
void limRestoreFromAuthState(tpAniSirGlobal pMac, tSirResultCodes resultCode, tANI_U16 protStatusCode,tpPESession sessionEntry) { tSirMacAddr currentBssId; tLimMlmAuthCnf mlmAuthCnf; vos_mem_copy( (tANI_U8 *) &mlmAuthCnf.peerMacAddr, (tANI_U8 *) &pMac->lim.gpLimMlmAuthReq->peerMacAddr, sizeof(tSirMacAddr)); mlmAuthCnf.authType = pMac->lim.gpLimMlmAuthReq->authType; mlmAuthCnf.resultCode = resultCode; mlmAuthCnf.protStatusCode = protStatusCode; /* Update PE session ID*/ mlmAuthCnf.sessionId = sessionEntry->peSessionId; /// Free up buffer allocated /// for pMac->lim.gLimMlmAuthReq vos_mem_free(pMac->lim.gpLimMlmAuthReq); pMac->lim.gpLimMlmAuthReq = NULL; sessionEntry->limMlmState = sessionEntry->limPrevMlmState; MTRACE(macTrace(pMac, TRACE_CODE_MLM_STATE, sessionEntry->peSessionId, sessionEntry->limMlmState)); // 'Change' timer for future activations limDeactivateAndChangeTimer(pMac, eLIM_AUTH_FAIL_TIMER); #if 0 if (wlan_cfgGetStr(pMac, WNI_CFG_BSSID, currentBssId, &cfg) != eSIR_SUCCESS) { /// Could not get BSSID from CFG. Log error. limLog(pMac, LOGP, FL("could not retrieve BSSID")); } #endif //TO SUPPORT BT-AMP sirCopyMacAddr(currentBssId,sessionEntry->bssId); if (sessionEntry->limSmeState == eLIM_SME_WT_PRE_AUTH_STATE) { pMac->lim.gLimPreAuthChannelNumber = 0; } limPostSmeMessage(pMac, LIM_MLM_AUTH_CNF, (tANI_U32 *) &mlmAuthCnf); } /*** end limRestoreFromAuthState() ***/
static void Log_getCfg(tpAniSirGlobal pMac, tANI_U16 cfgId) { #define CFG_CTL_INT 0x00080000 if ((pMac->cfg.gCfgEntry[cfgId].control & CFG_CTL_INT) != 0) { tANI_U32 val; // Get integer parameter if (wlan_cfgGetInt(pMac, (tANI_U16)cfgId, &val) != eSIR_SUCCESS) { sysLog(pMac, LOGE, FL("Get cfgId 0x%x failed\n"), cfgId); } else { sysLog( pMac, LOGE, FL("WNI_CFG_%s(%d 0x%x) = %ld\n"), gCfgParamName[cfgId], cfgId, cfgId, val ); } } else { tANI_U8 buf[CFG_MAX_STR_LEN] = {0} ; tANI_U32 valueLen ; // Get string parameter valueLen = CFG_MAX_STR_LEN ; if (wlan_cfgGetStr(pMac, cfgId, buf, &valueLen) != eSIR_SUCCESS) { sysLog(pMac, LOGE, FL("Get cfgId 0x%x failed\n"), cfgId); } else { sysLog( pMac, LOGE, FL("WNI_CFG_%s(%d 0x%x) len=%ld\n"), gCfgParamName[cfgId], cfgId, cfgId, valueLen ); sirDumpBuf(pMac, SIR_WDA_MODULE_ID, LOG1, buf, valueLen) ; } } return; }
/** * @function : limUpdateAssocStaDatas * * @brief : This function is called to Update the Station Descriptor (dph) Details from * Association / ReAssociation Response Frame * *LOGIC: * *ASSUMPTIONS: * *NOTE: * * @param pMac - Pointer to Global MAC structure * @param pStaDs - Station Descriptor in DPH * @param pAssocRsp - Pointer to Association Response Structure * * @return None */ void limUpdateAssocStaDatas(tpAniSirGlobal pMac, tpDphHashNode pStaDs, tpSirAssocRsp pAssocRsp,tpPESession psessionEntry) { tANI_U32 prop; tANI_U32 phyMode; tANI_U32 val; //tpSirBoardCapabilities pBoardCaps; tANI_BOOLEAN qosMode; tANI_U16 rxHighestRate = 0; limGetPhyMode(pMac, &phyMode, psessionEntry); pStaDs->staType= STA_ENTRY_SELF; limGetQosMode(psessionEntry, &qosMode); // set the ani peer bit, if self mode is one of the proprietary modes if(IS_DOT11_MODE_PROPRIETARY(psessionEntry->dot11mode)) { wlan_cfgGetInt(pMac, WNI_CFG_PROPRIETARY_ANI_FEATURES_ENABLED, &prop); if (prop) { pStaDs->aniPeer = eHAL_SET; pStaDs->propCapability = pAssocRsp->propIEinfo.capability; } } //pMac->lim.gLimMlmState = eLIM_MLM_LINK_ESTABLISHED_STATE; pStaDs->mlmStaContext.authType = psessionEntry->limCurrentAuthType; // Add capabilities information, rates and AID pStaDs->mlmStaContext.capabilityInfo = pAssocRsp->capabilityInfo; pStaDs->shortPreambleEnabled= (tANI_U8)pAssocRsp->capabilityInfo.shortPreamble; //Update HT Capabilites only when the self mode supports HT if(IS_DOT11_MODE_HT(psessionEntry->dot11mode)) { pStaDs->mlmStaContext.htCapability = pAssocRsp->HTCaps.present; if ( pAssocRsp->HTCaps.present ) { pStaDs->htGreenfield = ( tANI_U8 ) pAssocRsp->HTCaps.greenField; pStaDs->htSupportedChannelWidthSet = ( tANI_U8 ) (pAssocRsp->HTCaps.supportedChannelWidthSet ? pAssocRsp->HTInfo.recommendedTxWidthSet : pAssocRsp->HTCaps.supportedChannelWidthSet ); pStaDs->htLsigTXOPProtection = ( tANI_U8 ) pAssocRsp->HTCaps.lsigTXOPProtection; pStaDs->htMIMOPSState = (tSirMacHTMIMOPowerSaveState)pAssocRsp->HTCaps.mimoPowerSave; pStaDs->htMaxAmsduLength = ( tANI_U8 ) pAssocRsp->HTCaps.maximalAMSDUsize; pStaDs->htAMpduDensity = pAssocRsp->HTCaps.mpduDensity; pStaDs->htDsssCckRate40MHzSupport = (tANI_U8)pAssocRsp->HTCaps.dsssCckMode40MHz; pStaDs->htShortGI20Mhz = (tANI_U8)pAssocRsp->HTCaps.shortGI20MHz; pStaDs->htShortGI40Mhz = (tANI_U8)pAssocRsp->HTCaps.shortGI40MHz; pStaDs->htMaxRxAMpduFactor = pAssocRsp->HTCaps.maxRxAMPDUFactor; limFillRxHighestSupportedRate(pMac, &rxHighestRate, pAssocRsp->HTCaps.supportedMCSSet); pStaDs->supportedRates.rxHighestDataRate = rxHighestRate; /* This is for AP as peer STA and we are INFRA STA. We will put APs offset in dph node which is peer STA */ pStaDs->htSecondaryChannelOffset = (tANI_U8)pAssocRsp->HTInfo.secondaryChannelOffset; //FIXME_AMPDU // In the future, may need to check for "assoc.HTCaps.delayedBA" // For now, it is IMMEDIATE BA only on ALL TID's pStaDs->baPolicyFlag = 0xFF; } } #ifdef WLAN_FEATURE_11AC if(IS_DOT11_MODE_VHT(psessionEntry->dot11mode)) { pStaDs->mlmStaContext.vhtCapability = pAssocRsp->VHTCaps.present; } if (limPopulatePeerRateSet(pMac, &pStaDs->supportedRates, pAssocRsp->HTCaps.supportedMCSSet, false,psessionEntry , &pAssocRsp->VHTCaps) != eSIR_SUCCESS) #else if (limPopulatePeerRateSet(pMac, &pStaDs->supportedRates, pAssocRsp->HTCaps.supportedMCSSet, false,psessionEntry) != eSIR_SUCCESS) #endif { limLog(pMac, LOGP, FL("could not get rateset and extended rate set")); return; } //If one of the rates is 11g rates, set the ERP mode. if ((phyMode == WNI_CFG_PHY_MODE_11G) && sirIsArate(pStaDs->supportedRates.llaRates[0] & 0x7f)) pStaDs->erpEnabled = eHAL_SET; val = WNI_CFG_PROPRIETARY_OPERATIONAL_RATE_SET_LEN; if (wlan_cfgGetStr(pMac, WNI_CFG_PROPRIETARY_OPERATIONAL_RATE_SET, (tANI_U8 *) &pStaDs->mlmStaContext.propRateSet.propRate, &val) != eSIR_SUCCESS) { /// Could not get prop rateset from CFG. Log error. limLog(pMac, LOGP, FL("could not retrieve prop rateset")); return; } pStaDs->mlmStaContext.propRateSet.numPropRates = (tANI_U8) val; pStaDs->qosMode = 0; pStaDs->lleEnabled = 0; // update TSID to UP mapping //if (pMac->lim.gLimQosEnabled) if (qosMode) { if (pAssocRsp->edcaPresent) { tSirRetStatus status; status = schBeaconEdcaProcess(pMac,&pAssocRsp->edca, psessionEntry); PELOG2(limLog(pMac, LOG2, "Edca set update based on AssocRsp: status %d", status);) if (status != eSIR_SUCCESS) { PELOGE(limLog(pMac, LOGE, FL("Edca error in AssocResp "));) } else { // update default tidmap based on ACM
tSirRetStatus schAppendAddnIE(tpAniSirGlobal pMac, tpPESession psessionEntry, tANI_U8 *pFrame, tANI_U32 maxBeaconSize, tANI_U32 *nBytes) { tSirRetStatus status = eSIR_FAILURE; tANI_U32 present, len; tANI_U8 addIE[WNI_CFG_PROBE_RSP_BCN_ADDNIE_DATA_LEN]; if((status = wlan_cfgGetInt(pMac, WNI_CFG_PROBE_RSP_BCN_ADDNIE_FLAG, &present)) != eSIR_SUCCESS) { schLog(pMac, LOGP, FL("Unable to get WNI_CFG_PROBE_RSP_BCN_ADDNIE_FLAG")); return status; } if(present) { if((status = wlan_cfgGetStrLen(pMac, WNI_CFG_PROBE_RSP_BCN_ADDNIE_DATA, &len)) != eSIR_SUCCESS) { schLog(pMac, LOGP, FL("Unable to get WNI_CFG_PROBE_RSP_BCN_ADDNIE_DATA length")); return status; } if(len <= WNI_CFG_PROBE_RSP_BCN_ADDNIE_DATA_LEN && len && ((len + *nBytes) <= maxBeaconSize)) { if((status = wlan_cfgGetStr(pMac, WNI_CFG_PROBE_RSP_BCN_ADDNIE_DATA, &addIE[0], &len)) == eSIR_SUCCESS) { tANI_U8* pP2pIe = limGetP2pIEPtr(pMac, &addIE[0], len); if(pP2pIe != NULL) { tANI_U8 noaLen = 0; tANI_U8 noaStream[SIR_MAX_NOA_ATTR_LEN + SIR_P2P_IE_HEADER_LEN]; noaLen = limGetNoaAttrStream(pMac, noaStream, psessionEntry); if(noaLen) { if(noaLen + len <= WNI_CFG_PROBE_RSP_BCN_ADDNIE_DATA_LEN) { vos_mem_copy(&addIE[len], noaStream, noaLen); len += noaLen; pP2pIe[1] += noaLen; } else { schLog(pMac, LOGE, FL("Not able to insert NoA because of length constraint")); } } } vos_mem_copy(pFrame, &addIE[0], len); *nBytes = *nBytes + len; } } } return status; }