📄 wlan_fw.c
字号:
static u8 dfltBgScanCfg[] = {
0x01, 0x00,
0x00,
0x03,
0x0E,
0x00,
0x64, 0x00,
0x01, 0x00, 0x00, 0x00,
0x01, 0x00, 0x00, 0x00,
0x0E, 0x00,
0x01, 0x01, 0x4d, 0x00,
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
/*
0x01, 0x01, 0x5b, 0x00,
0x01, 0x24, 0x00, 0x06, 0x00, 0x64, 0x00,
0x01, 0x28, 0x00, 0x06, 0x00, 0x64, 0x00,
0x01, 0x2c, 0x00, 0x06, 0x00, 0x64, 0x00,
0x01, 0x30, 0x00, 0x06, 0x00, 0x64, 0x00,
0x01, 0x34, 0x00, 0x06, 0x00, 0x64, 0x00,
0x01, 0x38, 0x00, 0x06, 0x00, 0x64, 0x00,
0x01, 0x3c, 0x00, 0x06, 0x00, 0x64, 0x00,
0x01, 0x40, 0x00, 0x06, 0x00, 0x64, 0x00,
0x01, 0x95, 0x00, 0x06, 0x00, 0x64, 0x00,
0x01, 0x99, 0x00, 0x06, 0x00, 0x64, 0x00,
0x01, 0x9d, 0x00, 0x06, 0x00, 0x64, 0x00,
0x01, 0xa1, 0x00, 0x06, 0x00, 0x64, 0x00,
0x01, 0xa5, 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->TimerInterval = MRVDRV_DEFAULT_TIMER_INTERVAL;
Adapter->isCommandTimerExpired = FALSE;
/* ATIM params */
Adapter->AtimWindow = 0;
Adapter->ATIMEnabled = FALSE;
/* Operation characteristics */
/* Remove: CurrentLookAhead doesn't seem to be used anywhere. ???? */
Adapter->CurrentLookAhead = (u32) MRVDRV_MAXIMUM_ETH_PACKET_SIZE -
MRVDRV_ETH_HEADER_SIZE;
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->LastRSSI = MRVDRV_RSSI_DEFAULT_NOISE_VALUE;
Adapter->bIsScanInProgress = FALSE;
Adapter->bIsAssociationInProgress = FALSE;
Adapter->bIsPendingReset = FALSE;
#ifdef CONFIG_MARVELL_PM
Adapter->DeepSleep_State = DEEP_SLEEP_DISABLED;
Adapter->PM_State = PM_DISABLED;
#endif
/* SDCF: MPS/20041012: Is this really required */
Adapter->HisRegCpy |= HIS_TxDnLdRdy; // MPS
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;
/* This is added for reassociation on and off */
Adapter->Reassoc_on = TRUE;
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;
#define SHORT_PREAMBLE_ALLOWED 1
//Adapter->Preamble = HostCmd_TYPE_LONG_PREAMBLE;
// set default value of capInfo.
memset(&Adapter->capInfo, 0, sizeof(Adapter->capInfo));
Adapter->capInfo.ShortPreamble = SHORT_PREAMBLE_ALLOWED;
Adapter->Channel = DEFAULT_CHANNEL; // default
Adapter->AdhocChannel = DEFAULT_AD_HOC_CHANNEL; // default
#ifdef PS_REQUIRED
/* **** POWER_MODE ***** */
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->autoHwmMode = FALSE; /* Disable hwmMode*/
#ifdef FW_WAKEUP_METHOD
Adapter->fwWakeupMethod = WAKEUP_FW_UNCHANGED;
#endif
#endif
#ifdef DEEP_SLEEP
Adapter->IsDeepSleep = FALSE;
Adapter->IsDeepSleepRequired = FALSE;
#endif // DEEP_SLEEP_CMD
#ifdef HOST_WAKEUP
Adapter->bHostWakeupDevRequired = FALSE;
Adapter->bHostWakeupConfigured = FALSE;
#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]);
#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 // #ifdef WPA
spin_lock_init(&Adapter->CurrentTxLock);
Adapter->CurrentTxSkb = NULL;
Adapter->PktTxCtrl = 0; //init value for TxControl ioctl
return;
}
void MrvDrvCommandTimerFunction(void *FunctionContext)
{
// get the adapter context
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);
//#ifdef BULVERDE_SDIO
// sdio_enable_SDIO_INT();
//#endif
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;
/*
* Initialize the timer for packet sending
* For the reassociation
*/
InitializeTimer(&Adapter->MrvDrvTimer, MrvDrvTimerFunction, priv);
Adapter->TimerIsSet = FALSE;
return WLAN_STATUS_SUCCESS;
}
int wlan_is_tx_download_ready(wlan_private * priv)
{
int rval;
u8 cs;
ENTER1();
if ((rval = sbi_get_int_status(priv, &cs)) < 0)
goto done;
rval = (cs & HIS_TxDnLdRdy) ? 0 : -EBUSY;
if (rval)
//sbi_reenable_host_interrupt(priv, HIS_TxDnLdRdy);
sbi_reenable_host_interrupt(priv, 0);
done:
LEAVE1();
return rval;
}
void MrvDrvTimerFunction(void *FunctionContext)
{
/* get the adapter context */
wlan_private *priv = (wlan_private *) FunctionContext;
wlan_adapter *Adapter = priv->adapter;
OS_INTERRUPT_SAVE_AREA; /* Needed for Threadx; Dummy in linux */
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, (1 * HZ));
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;
}
#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 + -