📄 wlan_fw.c
字号:
}
void wlan_init_adapter(wlan_private * priv)
{
wlan_adapter *Adapter = priv->adapter;
int i;
#ifdef BG_SCAN
static u8 dfltBgScanCfg[] = {
0x01, 0x00, //Action
0x00, //Enable
0x03, //BssType
0x0E, //ChannelsPerScan
0x00, //DiscardWhenFull
0x00, 0x00, //Reserved
0x64, 0x00, 0x00, 0x00, //Scan Interval
0x01, 0x00, 0x00, 0x00, //StoreCondition
0x01, 0x00, 0x00, 0x00, //ReportConditions
0x0E, 0x00, //MaxScanResults
0x01, 0x01, 0x4d, 0x00, //ChannelList
0x00, 0x0b, 0x00, 0x06, 0x00, 0x64, 0x00,
0x00, 0x01, 0x00, 0x06, 0x00, 0x64, 0x00,
0x00, 0x02, 0x00, 0x06, 0x00, 0x64, 0x00,
0x00, 0x03, 0x00, 0x06, 0x00, 0x64, 0x00,
0x00, 0x04, 0x00, 0x06, 0x00, 0x64, 0x00,
0x00, 0x05, 0x00, 0x06, 0x00, 0x64, 0x00,
0x00, 0x06, 0x00, 0x06, 0x00, 0x64, 0x00,
0x00, 0x07, 0x00, 0x06, 0x00, 0x64, 0x00,
0x00, 0x08, 0x00, 0x06, 0x00, 0x64, 0x00,
0x00, 0x09, 0x00, 0x06, 0x00, 0x64, 0x00,
0x00, 0x0a, 0x00, 0x06, 0x00, 0x64, 0x00
};
#endif /* BG_SCAN */
Adapter->ScanProbes = 0;
Adapter->bcn_avg_factor = DEFAULT_BCN_AVG_FACTOR;
Adapter->data_avg_factor = DEFAULT_DATA_AVG_FACTOR;
/* Timer variables */
Adapter->isCommandTimerExpired = FALSE;
/* ATIM params */
Adapter->AtimWindow = 0;
Adapter->ATIMEnabled = FALSE;
Adapter->MediaConnectStatus = WlanMediaStateDisconnected;
Adapter->LinkSpeed = MRVDRV_LINK_SPEED_1mbps;
memset(Adapter->CurrentAddr, 0xff, MRVDRV_ETH_ADDR_LEN);
/* Status variables */
Adapter->HardwareStatus = WlanHardwareStatusInitializing;
/* scan type */
Adapter->ScanType = HostCmd_SCAN_TYPE_ACTIVE;
/* scan mode */
Adapter->ScanMode = HostCmd_BSS_TYPE_ANY;
/* 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.Auth1XAlg = WLAN_1X_AUTH_ALG_NONE;
Adapter->SecInfo.EncryptionMode = CIPHER_NONE;
#ifdef ADHOCAES
Adapter->AdhocAESEnabled = FALSE;
#endif
Adapter->InfrastructureMode = Wlan802_11Infrastructure;
Adapter->ulNumOfBSSIDs = 0;
Adapter->ulCurrentBSSIDIndex = 0;
Adapter->ulAttemptedBSSIDIndex = 0;
Adapter->bAutoAssociation = FALSE;
Adapter->bIsScanInProgress = FALSE;
Adapter->bIsAssociationInProgress = FALSE;
Adapter->HisRegCpy |= HIS_TxDnLdRdy;
memset(&Adapter->CurBssParams, 0, sizeof(Adapter->CurBssParams));
Adapter->TxRetryCount = 4;
/* PnP and power profile */
Adapter->SurpriseRemoved = FALSE;
Adapter->CurrentPacketFilter =
HostCmd_ACT_MAC_RX_ON | HostCmd_ACT_MAC_TX_ON;
Adapter->SetSpecificScanSSID = FALSE; // default
/*Default: broadcast*/
memset( Adapter->SpecificScanBSSID, 0xff, ETH_ALEN );
#ifdef PROGRESSIVE_SCAN
Adapter->ChannelsPerScan = MRVDRV_CHANNELS_PER_SCAN;
#endif
Adapter->RadioOn = RADIO_ON;
#ifdef REASSOCIATION
Adapter->Reassoc_on = TRUE;
#endif /* REASSOCIATION */
Adapter->TxAntenna = RF_ANTENNA_2;
Adapter->RxAntenna = RF_ANTENNA_AUTO;
Adapter->Is_DataRate_Auto = TRUE;
Adapter->FragThsd = MRVDRV_FRAG_MAX_VALUE;
Adapter->RTSThsd = MRVDRV_RTS_MAX_VALUE;
// set default value of capInfo.
#define SHORT_PREAMBLE_ALLOWED 1
memset(&Adapter->capInfo, 0, sizeof(Adapter->capInfo));
Adapter->capInfo.ShortPreamble = SHORT_PREAMBLE_ALLOWED;
Adapter->Channel = DEFAULT_CHANNEL;
Adapter->AdhocChannel = DEFAULT_AD_HOC_CHANNEL;
#ifdef PS_REQUIRED
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 */
#ifdef FW_WAKEUP_METHOD
Adapter->fwWakeupMethod = WAKEUP_FW_UNCHANGED;
#endif
#endif
#ifdef DEEP_SLEEP
Adapter->IsDeepSleep = FALSE;
Adapter->IsDeepSleepRequired = FALSE;
#endif // DEEP_SLEEP
#ifdef HOST_WAKEUP
Adapter->bHostWakeupDevRequired = FALSE;
Adapter->bHostWakeupConfigured = FALSE;
Adapter->WakeupTries = 0;
#endif // HOST_WAKEUP
/* **** Extended Scan ***** */
Adapter->ExtendedScan = 0; // Off by default
Adapter->pExtendedScanParams = NULL;
Adapter->BeaconPeriod = 100;
#ifdef PS_REQUIRED
Adapter->PreTbttTime = 0;
#endif
Adapter->DataRate = 0; // Initially indicate the rate as auto
#ifdef ADHOC_GRATE
Adapter->adhoc_grate_enabled=FALSE;
#endif
Adapter->IntCounter = Adapter->IntCounterSaved = 0;
#ifdef WMM
memset(&Adapter->wmm, 0, sizeof(WMM_DESC));
for (i = 0; i < MAX_AC_QUEUES; i++)
INIT_LIST_HEAD(&Adapter->wmm.TxSkbQ[i]);
#ifdef WMM_UAPSD
Adapter->wmm.gen_null_pkg = TRUE; /*Enable NULL Pkg generation*/
#endif
#endif /* WMM */
INIT_LIST_HEAD(&Adapter->RxSkbQ);
#ifdef BG_SCAN
Adapter->bgScanConfig = kmalloc(sizeof(dfltBgScanCfg), GFP_KERNEL);
memcpy(Adapter->bgScanConfig, dfltBgScanCfg, sizeof(dfltBgScanCfg));
Adapter->bgScanConfigSize = sizeof(dfltBgScanCfg);
#endif /* BG_SCAN */
#ifdef ADHOCAES
init_waitqueue_head(&Adapter->cmd_EncKey);
#endif
#ifdef WPA
Adapter->EncryptionStatus = Wlan802_11WEPDisabled;
/* setup association information buffer */
{
PWLAN_802_11_ASSOCIATION_INFORMATION pAssoInfo;
pAssoInfo = (PWLAN_802_11_ASSOCIATION_INFORMATION)
Adapter->AssocInfoBuffer;
// assume the buffer has already been zero-ed
// no variable IE, so both request and response IE are
// pointed to the end of the buffer, 4 byte aligned
pAssoInfo->OffsetRequestIEs =
pAssoInfo->OffsetResponseIEs =
pAssoInfo->Length =
((sizeof(WLAN_802_11_ASSOCIATION_INFORMATION) + 3) / 4) * 4;
}
#endif
spin_lock_init(&Adapter->CurrentTxLock);
Adapter->CurrentTxSkb = NULL;
Adapter->PktTxCtrl = 0;
return;
}
void MrvDrvCommandTimerFunction(void *FunctionContext)
{
wlan_private *priv = (wlan_private *)FunctionContext;
wlan_adapter *Adapter = priv->adapter;
CmdCtrlNode *pTempNode;
u32 flags;
ENTER();
PRINTK1("No response CommandTimerFunction ON\n");
Adapter->CommandTimerIsSet = FALSE;
pTempNode = Adapter->CurCmd;
if(pTempNode == NULL){
PRINTK("PTempnode Empty\n");
return ;
}
spin_lock_irqsave(&Adapter->QueueSpinLock, flags);
Adapter->CurCmd = NULL;
spin_unlock_irqrestore(&Adapter->QueueSpinLock, flags);
PRINTK1("Re-sending same command as it timeout...!\n");
QueueCmd(Adapter,pTempNode, FALSE);
wake_up_interruptible(&priv->MainThread.waitQ);
LEAVE();
return;
}
int init_sync_objects(wlan_private * priv)
{
wlan_adapter *Adapter = priv->adapter;
InitializeTimer(&Adapter->MrvDrvCommandTimer,
MrvDrvCommandTimerFunction, priv);
Adapter->CommandTimerIsSet = FALSE;
#ifdef REASSOCIATION
/*
* Initialize the timer for the reassociation
*/
InitializeTimer(&Adapter->MrvDrvTimer, MrvDrvTimerFunction, priv);
Adapter->TimerIsSet = FALSE;
#endif /* REASSOCIATION */
return WLAN_STATUS_SUCCESS;
}
#ifdef REASSOCIATION
void MrvDrvTimerFunction(void *FunctionContext)
{
wlan_private *priv = (wlan_private *) FunctionContext;
wlan_adapter *Adapter = priv->adapter;
OS_INTERRUPT_SAVE_AREA;
ENTER();
PRINTK1("Timer Function triggered\n");
PRINTK1("Media Status = 0x%x\n", Adapter->MediaConnectStatus);
#ifdef PS_REQUIRED
if (Adapter->PSState != PS_STATE_FULL_POWER) {
Adapter->TimerIsSet = TRUE;
ModTimer(&Adapter->MrvDrvTimer, MRVDRV_TIMER_1S);
PRINTK1("MrvDrvTimerFunction(PSState=%d) waiting"
"for Exit_PS done\n",Adapter->PSState);
LEAVE();
return;
}
#endif
PRINTK1("Waking Up the Event Thread\n");
OS_INT_DISABLE;
Adapter->EventCounter++;
OS_INT_RESTORE;
wake_up_interruptible(&priv->ReassocThread.waitQ);
LEAVE();
return;
}
#endif /* REASSOCIATION */
#ifdef PCB_REV4
void wlan_read_write_rfreg(wlan_private *priv)
{
wlan_offset_value offval;
offval.offset = RF_REG_OFFSET;
offval.value = RF_REG_VALUE;
PrepareAndSendCommand( priv, HostCmd_CMD_RF_REG_ACCESS,
HostCmd_ACT_GEN_GET,
HostCmd_OPTION_USE_INT | HostCmd_OPTION_WAITFORRSP,
0, HostCmd_PENDING_ON_NONE, &offval);
offval.value |= 0x1;
PrepareAndSendCommand(priv, HostCmd_CMD_RF_REG_ACCESS,
HostCmd_ACT_GEN_SET,
HostCmd_OPTION_USE_INT | HostCmd_OPTION_WAITFORRSP,
0, HostCmd_PENDING_ON_NONE, &offval);
}
#endif
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -