v_UINT_t tx_timer_create_intern( v_PVOID_t pMacGlobal, TX_TIMER *timer_ptr, char *name_ptr, v_VOID_t ( *expiration_function )( v_PVOID_t, tANI_U32 ), tANI_U32 expiration_input, v_ULONG_t initScheduleTimeInTicks, v_ULONG_t rescheduleTimeInTicks, v_ULONG_t auto_activate ) { VOS_STATUS status; if((NULL == name_ptr) || (NULL == expiration_function)) return TX_TIMER_ERROR; if (!initScheduleTimeInTicks) return TX_TICK_ERROR; if (!timer_ptr) return TX_TIMER_ERROR; // Initialize timer structure timer_ptr->pExpireFunc = expiration_function; timer_ptr->expireInput = expiration_input; timer_ptr->initScheduleTimeInMsecs = TX_MSECS_IN_1_TICK * initScheduleTimeInTicks; timer_ptr->rescheduleTimeInMsecs = TX_MSECS_IN_1_TICK * rescheduleTimeInTicks; timer_ptr->pMac = pMacGlobal; // Set the flag indicating that the timer was created timer_ptr->tmrSignature = TX_AIRGO_TMR_SIGNATURE; #ifdef WLAN_DEBUG // Store the timer name strlcpy(timer_ptr->timerName, name_ptr, sizeof(timer_ptr->timerName)); #endif // Store the timer name, for Debug build only status = vos_timer_init( &timer_ptr->vosTimer, VOS_TIMER_TYPE_SW, tx_main_timer_func, (v_PVOID_t)timer_ptr ); if (VOS_STATUS_SUCCESS != status) { VOS_TRACE(VOS_MODULE_ID_SYS, VOS_TRACE_LEVEL_ERROR, "Cannot create timer for %s\n", TIMER_NAME); return TX_TIMER_ERROR; } if(0 != rescheduleTimeInTicks) { VOS_TRACE(VOS_MODULE_ID_SYS, VOS_TRACE_LEVEL_INFO, "Creating periodic timer for %s\n", TIMER_NAME); } // Activate this timer if required if (auto_activate) { tx_timer_activate(timer_ptr); } return TX_SUCCESS; } //** tx_timer_create() ***/
/*========================================================================== FUNCTION WLANBAP_Start DESCRIPTION Called as part of the overall start procedure (vos_start). BAP will use this call to register with TL as the BAP entity for BT-AMP RSN frames. DEPENDENCIES PARAMETERS IN pvosGCtx: pointer to the global vos context; a handle to BAP's control block can be extracted from its context RETURN VALUE The result code associated with performing the operation VOS_STATUS_E_FAULT: pointer to BAP cb is NULL ; access would cause a page fault VOS_STATUS_SUCCESS: Everything is good :) Other codes can be returned as a result of a BAL failure; SIDE EFFECTS ============================================================================*/ VOS_STATUS WLANBAP_Start ( v_PVOID_t pvosGCtx ) { ptBtampContext pBtampCtx = NULL; VOS_STATUS vosStatus; /*- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -*/ /*------------------------------------------------------------------------ Sanity check Extract BAP control block ------------------------------------------------------------------------*/ pBtampCtx = VOS_GET_BAP_CB(pvosGCtx); if ( NULL == pBtampCtx ) { VOS_TRACE( VOS_MODULE_ID_BAP, VOS_TRACE_LEVEL_ERROR, "Invalid BAP pointer from pvosGCtx on WLANBAP_Start"); return VOS_STATUS_E_FAULT; } /*------------------------------------------------------------------------ Register with TL as an BT-AMP RSN client ------------------------------------------------------------------------*/ VOS_TRACE( VOS_MODULE_ID_BAP, VOS_TRACE_LEVEL_INFO_HIGH, "WLANBAP_Start TL register"); /*------------------------------------------------------------------------ Register with CSR for Roam (connection status) Events ------------------------------------------------------------------------*/ VOS_TRACE( VOS_MODULE_ID_BAP, VOS_TRACE_LEVEL_INFO_HIGH, "WLANBAP_Start CSR Register"); /* Initialize the BAP Tx packet monitor timer */ WLANBAP_InitConnectionAcceptTimer (pBtampCtx ); WLANBAP_InitLinkSupervisionTimer(pBtampCtx); vosStatus = vos_timer_init( &pBtampCtx->bapTxPktMonitorTimer, VOS_TIMER_TYPE_SW, /* use this type */ WLANBAP_TxPacketMonitorHandler, pBtampCtx); vosStatus = vos_lock_init(&pBtampCtx->bapLock); if(!VOS_IS_STATUS_SUCCESS(vosStatus)) { VOS_TRACE(VOS_MODULE_ID_BAP, VOS_TRACE_LEVEL_ERROR,"Lock Init Fail"); } return vosStatus; }/* WLANBAP_Start */
/*-------------------------------------------------------------------------- Initialize the FT context. ------------------------------------------------------------------------*/ void sme_FTOpen(tHalHandle hHal) { tpAniSirGlobal pMac = PMAC_STRUCT( hHal ); eHalStatus status = eHAL_STATUS_SUCCESS; //Clear the FT Context. sme_FTReset(hHal); 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; } }
/*---------------------------------------------------------------------------- @brief Register function Register Thermal Mitigation Level Changed handle callback function @param hdd_context_t pHddCtx Global hdd context @return General status code VOS_STATUS_SUCCESS Registration Success VOS_STATUS_E_FAILURE Registration Fail ----------------------------------------------------------------------------*/ VOS_STATUS hddDevTmRegisterNotifyCallback(hdd_context_t *pHddCtx) { VOS_TRACE(VOS_MODULE_ID_HDD,VOS_TRACE_LEVEL_INFO, "%s: Register TM Handler", __func__); wcnss_register_thermal_mitigation(pHddCtx->parent_dev ,hddDevTmLevelChangedHandler); /* Set Default TM Level as Lowest, do nothing */ pHddCtx->tmInfo.currentTmLevel = WLAN_HDD_TM_LEVEL_0; vos_mem_zero(&pHddCtx->tmInfo.tmAction, sizeof(hdd_tmLevelAction_t)); vos_timer_init(&pHddCtx->tmInfo.txSleepTimer, VOS_TIMER_TYPE_SW, hddDevTmTxBlockTimeoutHandler, (void *)pHddCtx); mutex_init(&pHddCtx->tmInfo.tmOperationLock); pHddCtx->tmInfo.txFrameCount = 0; pHddCtx->tmInfo.blockedQueue = NULL; pHddCtx->tmInfo.qBlocked = VOS_FALSE; return VOS_STATUS_SUCCESS; }
/*--------------------------------------------------------------------------- \brief wpalTimerInit - initialize a wpt_timer object \param pTimer - a pointer to caller allocated wpt_timer object \param callback - A callback function \param pUserData - A cookie to data passed back in the callback function \return wpt_status eWLAN_PAL_STATUS_SUCCESS - success. Fail otherwise. ---------------------------------------------------------------------------*/ wpt_status wpalTimerInit(wpt_timer * pTimer, wpal_timer_callback callback, void *pUserData) { /* Sanity Checks */ if( pTimer == NULL || callback == NULL ) { WPAL_TRACE( eWLAN_MODULE_PAL, eWLAN_PAL_TRACE_LEVEL_ERROR, " %s Wrong param pTimer(%d) callback(%d)\n", __func__, (wpt_uint32)pTimer, (wpt_uint32)callback ); return eWLAN_PAL_STATUS_E_INVAL; } if ( vos_timer_init( &pTimer->timer.timerObj, VOS_TIMER_TYPE_SW, wpalTimerCback, (void*)pTimer ) == VOS_STATUS_SUCCESS ) { pTimer->callback = callback; pTimer->pUserData = pUserData; return eWLAN_PAL_STATUS_SUCCESS; } return eWLAN_PAL_STATUS_E_FAILURE; }/*wpalTimerInit*/
eHalStatus palTimerAlloc( tHddHandle hHdd, tPalTimerHandle *phPalTimer, palTimerCallback pCallback, void *pContext ) { eHalStatus halStatus = eHAL_STATUS_FAILURE; tPalTimer *pPalTimer = NULL; VOS_STATUS vosStatus; do { // allocate the internal timer structure. pPalTimer = vos_mem_malloc( sizeof( tPalTimer ) ); if ( NULL == pPalTimer ) break; // initialize the vos Timer that underlies the pal Timer. vosStatus = vos_timer_init( &pPalTimer->vosTimer, VOS_TIMER_TYPE_SW, internalTimerCallback, pPalTimer ); if ( !VOS_IS_STATUS_SUCCESS( vosStatus ) ) { // if fail to init the vos timer, free the memory and bail out. vos_mem_free( pPalTimer ); break; } // initialize the info in the internal palTimer struct so we can pPalTimer->timerCallback = pCallback; pPalTimer->pContext = pContext; pPalTimer->hHdd = hHdd; // return a 'handle' to the caller. *phPalTimer = pPalTimer; halStatus = eHAL_STATUS_SUCCESS; } while( 0 ); return( halStatus ); }
/** * authRsnFsmCreate * * FUNCTION * Allocates and initializes the state of an RSN key FSM instance for * the given STA context. * * @parm staCtx the STA context whose instance is being created * @param pskBased pass in eANI_BOOLEAN_TRUE is this STA is to be * authenticated based on a pre-shared key as opposed to EAP. * * @return ANI_OK if the operation succeeds */ int authRsnFsmCreate(tBtampContext *ctx) { int retVal = ANI_OK; tAuthRsnFsm *fsm = &ctx->uFsm.authFsm; // First, clear everything out vos_mem_zero( fsm, sizeof(tAuthRsnFsm)); if( !VOS_IS_STATUS_SUCCESS( bapRsnRegisterTxRxCallbacks( authRsnTxCompleteHandler, authRsnRxFrameHandler ) ) ) { return ANI_ERROR; } if( !VOS_IS_STATUS_SUCCESS( bapRsnRegisterRxCallback( ctx->pvosGCtx ) ) ) { return ANI_ERROR; } // Allocate the station context fsm->staCtx = (tStaContext *)vos_mem_malloc( sizeof(tStaContext) ); if (fsm->staCtx == NULL) { retVal = ANI_E_MALLOC_FAILED; VOS_ASSERT( 0 ); goto error; } // Clear out the station context vos_mem_zero( fsm->staCtx, sizeof(tStaContext) ); fsm->ctx = ctx; fsm->staCtx->authRsnFsm = fsm; //Only support CCMP fsm->staCtx->pwCipherType = eCSR_ENCRYPT_TYPE_AES; if( !VOS_IS_STATUS_SUCCESS( vos_timer_init( &fsm->msg2Timer, VOS_TIMER_TYPE_SW, msg2TimerCallback, fsm ) ) ) { retVal = ANI_E_MALLOC_FAILED; VOS_ASSERT( 0 ); goto error; } if( !VOS_IS_STATUS_SUCCESS( vos_timer_init( &fsm->msg4Timer, VOS_TIMER_TYPE_SW, msg4TimerCallback, fsm ) ) ) { retVal = ANI_E_MALLOC_FAILED; VOS_ASSERT( 0 ); goto error; } retVal = aniAsfPacketAllocateExplicit(&fsm->lastEapol, RSN_MAX_PACKET_SIZE, EAPOL_TX_HEADER_SIZE ); if (retVal != ANI_OK) { VOS_ASSERT( 0 ); goto error; } aniAsfPacketAllocate(&fsm->staCtx->pmk); if (fsm->staCtx->pmk == NULL) { retVal = ANI_E_MALLOC_FAILED; VOS_ASSERT( 0 ); goto error; } aniAsfPacketAllocateExplicit(&fsm->staCtx->ieSta, RSN_IE_MAX_PACKET_SIZE, RSN_IE_HEADER_SIZE ); if (fsm->staCtx->ieSta == NULL) { retVal = ANI_E_MALLOC_FAILED; VOS_ASSERT( 0 ); goto error; } fsm->cryptHandle = 0; if( !VOS_IS_STATUS_SUCCESS( vos_crypto_init( &fsm->cryptHandle ) ) ) { retVal = ANI_E_FAILED; VOS_ASSERT( 0 ); goto error; } fsm->currentState = INITIALIZE; gotoStateInit(fsm); //We can call this function here because it is connected at this time authRsnFsmProcessEvent( fsm, RSN_FSM_AUTH_START, NULL ); return ANI_OK; error: authRsnFsmFree(ctx); return retVal; }