⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 wlan_fw.c

📁 marvell wifi driver GSPI-8385-LINUX-OMAP1510-5.0.10.p0-144-src.rar
💻 C
📖 第 1 页 / 共 2 页
字号:
}

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 + -