/** * @brief This function initializes firmware * * @param priv A pointer to wlan_private structure * @return WLAN_STATUS_SUCCESS or WLAN_STATUS_FAILURE */ int wlan_init_fw(wlan_private * priv) { int ret = WLAN_STATUS_SUCCESS; wlan_adapter *Adapter = priv->adapter; ENTER(); /* Allocate adapter structure */ if ((ret = wlan_allocate_adapter(priv)) != WLAN_STATUS_SUCCESS) { goto done; } /* init adapter structure */ wlan_init_adapter(priv); /* init timer etc. */ init_sync_objects(priv); /* init 802.11d */ wlan_init_11d(priv); Adapter->HardwareStatus = WlanHardwareStatusReady; ret = WLAN_STATUS_SUCCESS; done: LEAVE(); return ret; }
/** * @brief This function initializes the adapter structure * and set default value to the member of adapter. * * @param priv A pointer to wlan_private structure * @return n/a */ void wlan_init_adapter(wlan_private * priv) { wlan_adapter *Adapter = priv->adapter; int i; ENTER(); Adapter->ScanProbes = 0; Adapter->bcn_avg_factor = DEFAULT_BCN_AVG_FACTOR; Adapter->data_avg_factor = DEFAULT_DATA_AVG_FACTOR; /* ATIM params */ Adapter->AtimWindow = 0; Adapter->ATIMEnabled = FALSE; Adapter->MediaConnectStatus = WlanMediaStateDisconnected; memset(Adapter->CurrentAddr, 0xff, ETH_ALEN); /* Status variables */ Adapter->HardwareStatus = WlanHardwareStatusInitializing; /* scan type */ Adapter->ScanType = HostCmd_SCAN_TYPE_ACTIVE; /* scan mode */ Adapter->ScanMode = HostCmd_BSS_TYPE_ANY; /* Enable auto auth */ Adapter->AuthType = AUTHTYPE_ALLOW_BOTH; /* scan time */ Adapter->SpecificScanTime = MRVDRV_SPECIFIC_SCAN_CHAN_TIME; Adapter->ActiveScanTime = MRVDRV_ACTIVE_SCAN_CHAN_TIME; Adapter->PassiveScanTime = MRVDRV_PASSIVE_SCAN_CHAN_TIME; /* 802.11 specific */ Adapter->SecInfo.WEPStatus = Wlan802_11WEPDisabled; for (i = 0; i < sizeof(Adapter->WepKey) / sizeof(Adapter->WepKey[0]); i++) memset(&Adapter->WepKey[i], 0, sizeof(MRVL_WEP_KEY)); Adapter->CurrentWepKeyIndex = 0; Adapter->SecInfo.AuthenticationMode = Wlan802_11AuthModeOpen; Adapter->SecInfo.EncryptionMode = CIPHER_NONE; Adapter->AdhocAESEnabled = FALSE; Adapter->AdhocState = ADHOC_IDLE; Adapter->InfrastructureMode = Wlan802_11Infrastructure; Adapter->NumInScanTable = 0; Adapter->pAttemptedBSSDesc = NULL; #ifdef REASSOCIATION OS_INIT_SEMAPHORE(&Adapter->ReassocSem); #endif Adapter->pBeaconBufEnd = Adapter->beaconBuffer; Adapter->HisRegCpy |= HIS_TxDnLdRdy; memset(&Adapter->CurBssParams, 0, sizeof(Adapter->CurBssParams)); /* PnP and power profile */ Adapter->SurpriseRemoved = FALSE; Adapter->CurrentPacketFilter = HostCmd_ACT_MAC_RX_ON | HostCmd_ACT_MAC_TX_ON | HostCmd_ACT_MAC_ETHERNETII_ENABLE; Adapter->RadioOn = RADIO_ON; #ifdef REASSOCIATION #if (WIRELESS_EXT >= 18) Adapter->Reassoc_on = FALSE; #else Adapter->Reassoc_on = TRUE; #endif #endif /* REASSOCIATION */ Adapter->HWRateDropMode = HW_TABLE_RATE_DROP; Adapter->Is_DataRate_Auto = TRUE; Adapter->BeaconPeriod = MRVDRV_BEACON_INTERVAL; Adapter->AdhocChannel = DEFAULT_AD_HOC_CHANNEL; Adapter->AdhocAutoSel = TRUE; Adapter->PSMode = Wlan802_11PowerModeCAM; Adapter->MultipleDtim = MRVDRV_DEFAULT_MULTIPLE_DTIM; Adapter->ListenInterval = MRVDRV_DEFAULT_LISTEN_INTERVAL; Adapter->PSState = PS_STATE_FULL_POWER; Adapter->NeedToWakeup = FALSE; Adapter->LocalListenInterval = 0; /* default value in firmware will be used */ Adapter->IsDeepSleep = FALSE; Adapter->IsAutoDeepSleepEnabled = FALSE; Adapter->IsEnhancedPSEnabled = FALSE; Adapter->bWakeupDevRequired = FALSE; Adapter->WakeupTries = 0; Adapter->bHostSleepConfigured = FALSE; Adapter->HSCfg.conditions = HOST_SLEEP_CFG_CANCEL; Adapter->HSCfg.gpio = 0; Adapter->HSCfg.gap = 0; Adapter->DataRate = 0; /* Initially indicate the rate as auto */ Adapter->adhoc_grate_enabled = TRUE; Adapter->IntCounter = Adapter->IntCounterSaved = 0; Adapter->gen_null_pkg = TRUE; /* Enable NULL Pkg generation */ Adapter->BCNMissTimeOut = DEFAULT_BCN_MISS_TIMEOUT; init_waitqueue_head(&Adapter->HS_wait_q); init_waitqueue_head(&Adapter->ds_awake_q); spin_lock_init(&Adapter->CurrentTxLock); spin_lock_init(&Adapter->driver_lock); Adapter->PktTxCtrl = 0; /* Initialize 802.11d */ wlan_init_11d(priv); LEAVE(); return; }