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

📄 mlme.c

📁 ralink 2870 usb无线网卡 最新驱动
💻 C
📖 第 1 页 / 共 5 页
字号:
#ifdef RALINK_ATE    	if (ATE_ON(pAd))    	{			/* request from Baron : move this routine from later to here */			/* for showing Rx error count in ATE RXFRAME */            NICUpdateRawCounters(pAd);			if (pAd->ate.bRxFER == 1)			{				pAd->ate.RxTotalCnt += pAd->ate.RxCntPerSec;			    ate_print(KERN_EMERG "MlmePeriodicExec: Rx packet cnt = %d/%d\n", pAd->ate.RxCntPerSec, pAd->ate.RxTotalCnt);				pAd->ate.RxCntPerSec = 0;				if (pAd->ate.RxAntennaSel == 0)					ate_print(KERN_EMERG "MlmePeriodicExec: Rx AvgRssi0=%d, AvgRssi1=%d, AvgRssi2=%d\n\n",						pAd->ate.AvgRssi0, pAd->ate.AvgRssi1, pAd->ate.AvgRssi2);				else					ate_print(KERN_EMERG "MlmePeriodicExec: Rx AvgRssi=%d\n\n", pAd->ate.AvgRssi0);			}			MlmeResetRalinkCounters(pAd);			return;    	}#endif // RALINK_ATE //		//ORIBATimerTimeout(pAd);				// Media status changed, report to NDIS		if (RTMP_TEST_FLAG(pAd, fRTMP_ADAPTER_MEDIA_STATE_CHANGE)) 		{			RTMP_CLEAR_FLAG(pAd, fRTMP_ADAPTER_MEDIA_STATE_CHANGE);			if (OPSTATUS_TEST_FLAG(pAd, fOP_STATUS_MEDIA_STATE_CONNECTED))			{				pAd->IndicateMediaState = NdisMediaStateConnected;				RTMP_IndicateMediaState(pAd);			}			else			{				pAd->IndicateMediaState = NdisMediaStateDisconnected;				RTMP_IndicateMediaState(pAd);			}		}		NdisGetSystemUpTime(&pAd->Mlme.Now32);		// add the most up-to-date h/w raw counters into software variable, so that		// the dynamic tuning mechanism below are based on most up-to-date information		NICUpdateRawCounters(pAd);																										#ifdef RTMP_MAC_USB		RTUSBWatchDog(pAd);#endif // RTMP_MAC_USB //#ifdef DOT11_N_SUPPORT   		// Need statistics after read counter. So put after NICUpdateRawCounters		ORIBATimerTimeout(pAd);#endif // DOT11_N_SUPPORT //		// if MGMT RING is full more than twice within 1 second, we consider there's		// a hardware problem stucking the TX path. In this case, try a hardware reset		// to recover the system	//	if (pAd->RalinkCounters.MgmtRingFullCount >= 2)	//		RTMP_SET_FLAG(pAd, fRTMP_ADAPTER_HARDWARE_ERROR);	//	else	//		pAd->RalinkCounters.MgmtRingFullCount = 0;		// The time period for checking antenna is according to traffic		{			if (pAd->Mlme.bEnableAutoAntennaCheck)			{				TxTotalCnt = pAd->RalinkCounters.OneSecTxNoRetryOkCount + 								 pAd->RalinkCounters.OneSecTxRetryOkCount + 								 pAd->RalinkCounters.OneSecTxFailCount;								// dynamic adjust antenna evaluation period according to the traffic				if (TxTotalCnt > 50)				{					if (pAd->Mlme.OneSecPeriodicRound % 10 == 0)					{						AsicEvaluateRxAnt(pAd);					}				}				else				{					if (pAd->Mlme.OneSecPeriodicRound % 3 == 0)					{						AsicEvaluateRxAnt(pAd);					}				}			}		}#ifdef CONFIG_STA_SUPPORT		IF_DEV_CONFIG_OPMODE_ON_STA(pAd)			STAMlmePeriodicExec(pAd);#endif // CONFIG_STA_SUPPORT //		MlmeResetRalinkCounters(pAd);#ifdef CONFIG_STA_SUPPORT		IF_DEV_CONFIG_OPMODE_ON_STA(pAd)		{			{			// When Adhoc beacon is enabled and RTS/CTS is enabled, there is a chance that hardware MAC FSM will run into a deadlock			// and sending CTS-to-self over and over.			// Software Patch Solution: 			// 1. Polling debug state register 0x10F4 every one second.			// 2. If in 0x10F4 the ((bit29==1) && (bit7==1)) OR ((bit29==1) && (bit5==1)), it means the deadlock has occurred.			// 3. If the deadlock occurred, reset MAC/BBP by setting 0x1004 to 0x0001 for a while then setting it back to 0x000C again.			UINT32	MacReg = 0;						RTMP_IO_READ32(pAd, 0x10F4, &MacReg);			if (((MacReg & 0x20000000) && (MacReg & 0x80)) || ((MacReg & 0x20000000) && (MacReg & 0x20)))			{				RTMP_IO_WRITE32(pAd, MAC_SYS_CTRL, 0x1);				RTMPusecDelay(1);				RTMP_IO_WRITE32(pAd, MAC_SYS_CTRL, 0xC);				DBGPRINT(RT_DEBUG_WARN,("Warning, MAC specific condition occurs \n"));			}		}		}#endif // CONFIG_STA_SUPPORT //		RTMP_MLME_HANDLER(pAd);	}	pAd->bUpdateBcnCntDone = FALSE;}/*	==========================================================================	Validate SSID for connection try and rescan purpose	Valid SSID will have visible chars only.	The valid length is from 0 to 32.	IRQL = DISPATCH_LEVEL	========================================================================== */BOOLEAN MlmeValidateSSID(	IN PUCHAR	pSsid,	IN UCHAR	SsidLen){	int	index;	if (SsidLen > MAX_LEN_OF_SSID)		return (FALSE);	// Check each character value	for (index = 0; index < SsidLen; index++)	{		if (pSsid[index] < 0x20)			return (FALSE);	}	// All checked	return (TRUE);}VOID MlmeSelectTxRateTable(	IN PRTMP_ADAPTER		pAd,	IN PMAC_TABLE_ENTRY		pEntry,	IN PUCHAR				*ppTable,	IN PUCHAR				pTableSize,	IN PUCHAR				pInitTxRateIdx){	do	{		// decide the rate table for tuning		if (pAd->CommonCfg.TxRateTableSize > 0)		{			*ppTable = RateSwitchTable;			*pTableSize = RateSwitchTable[0];			*pInitTxRateIdx = RateSwitchTable[1];			break;		}#ifdef CONFIG_STA_SUPPORT		if ((pAd->OpMode == OPMODE_STA) && ADHOC_ON(pAd))		{#ifdef DOT11_N_SUPPORT			if ((pAd->CommonCfg.PhyMode >= PHY_11ABGN_MIXED) && 				(pEntry->HTCapability.MCSSet[0] == 0xff) && 				((pEntry->HTCapability.MCSSet[1] == 0x00) || (pAd->Antenna.field.TxPath == 1)))			{// 11N 1S Adhoc				*ppTable = RateSwitchTable11N1S;				*pTableSize = RateSwitchTable11N1S[0];				*pInitTxRateIdx = RateSwitchTable11N1S[1];							}			else if ((pAd->CommonCfg.PhyMode >= PHY_11ABGN_MIXED) && 					(pEntry->HTCapability.MCSSet[0] == 0xff) && 					(pEntry->HTCapability.MCSSet[1] == 0xff) &&					(pAd->Antenna.field.TxPath == 2))			{// 11N 2S Adhoc				if (pAd->LatchRfRegs.Channel <= 14)				{					*ppTable = RateSwitchTable11N2S;					*pTableSize = RateSwitchTable11N2S[0];					*pInitTxRateIdx = RateSwitchTable11N2S[1];				}				else				{					*ppTable = RateSwitchTable11N2SForABand;					*pTableSize = RateSwitchTable11N2SForABand[0];					*pInitTxRateIdx = RateSwitchTable11N2SForABand[1];				}							}			else#endif // DOT11_N_SUPPORT //								if ((pEntry->RateLen == 4)#ifdef DOT11_N_SUPPORT					&& (pEntry->HTCapability.MCSSet[0] == 0) && (pEntry->HTCapability.MCSSet[1] == 0)#endif // DOT11_N_SUPPORT //					)			{				*ppTable = RateSwitchTable11B;				*pTableSize = RateSwitchTable11B[0];				*pInitTxRateIdx = RateSwitchTable11B[1];							}			else if (pAd->LatchRfRegs.Channel <= 14)			{				*ppTable = RateSwitchTable11BG;				*pTableSize = RateSwitchTable11BG[0];				*pInitTxRateIdx = RateSwitchTable11BG[1];							}			else			{				*ppTable = RateSwitchTable11G;				*pTableSize = RateSwitchTable11G[0];				*pInitTxRateIdx = RateSwitchTable11G[1];							}			break;		}#endif // CONFIG_STA_SUPPORT //#ifdef DOT11_N_SUPPORT		//if ((pAd->StaActive.SupRateLen + pAd->StaActive.ExtRateLen == 12) && (pAd->StaActive.SupportedPhyInfo.MCSSet[0] == 0xff) &&		//	((pAd->StaActive.SupportedPhyInfo.MCSSet[1] == 0x00) || (pAd->Antenna.field.TxPath == 1)))		if (((pEntry->RateLen == 12) || (pAd->OpMode == OPMODE_STA)) && (pEntry->HTCapability.MCSSet[0] == 0xff) &&			((pEntry->HTCapability.MCSSet[1] == 0x00) || (pAd->CommonCfg.TxStream == 1)))		{// 11BGN 1S AP			*ppTable = RateSwitchTable11BGN1S;			*pTableSize = RateSwitchTable11BGN1S[0];			*pInitTxRateIdx = RateSwitchTable11BGN1S[1];						break;		}		//else if ((pAd->StaActive.SupRateLen + pAd->StaActive.ExtRateLen == 12) && (pAd->StaActive.SupportedPhyInfo.MCSSet[0] == 0xff) &&		//	(pAd->StaActive.SupportedPhyInfo.MCSSet[1] == 0xff) && (pAd->Antenna.field.TxPath == 2))		if (((pEntry->RateLen == 12) || (pAd->OpMode == OPMODE_STA)) && (pEntry->HTCapability.MCSSet[0] == 0xff) &&			(pEntry->HTCapability.MCSSet[1] == 0xff) && (pAd->CommonCfg.TxStream == 2))		{// 11BGN 2S AP			if (pAd->LatchRfRegs.Channel <= 14)			{				*ppTable = RateSwitchTable11BGN2S;				*pTableSize = RateSwitchTable11BGN2S[0];				*pInitTxRateIdx = RateSwitchTable11BGN2S[1];							}			else			{				*ppTable = RateSwitchTable11BGN2SForABand;				*pTableSize = RateSwitchTable11BGN2SForABand[0];				*pInitTxRateIdx = RateSwitchTable11BGN2SForABand[1];                					}			break;		}		//else if ((pAd->StaActive.SupportedPhyInfo.MCSSet[0] == 0xff) && ((pAd->StaActive.SupportedPhyInfo.MCSSet[1] == 0x00) || (pAd->Antenna.field.TxPath == 1)))		if ((pEntry->HTCapability.MCSSet[0] == 0xff) && ((pEntry->HTCapability.MCSSet[1] == 0x00) || (pAd->CommonCfg.TxStream == 1)))		{// 11N 1S AP			*ppTable = RateSwitchTable11N1S;			*pTableSize = RateSwitchTable11N1S[0];			*pInitTxRateIdx = RateSwitchTable11N1S[1];						break;		}		//else if ((pAd->StaActive.SupportedPhyInfo.MCSSet[0] == 0xff) && (pAd->StaActive.SupportedPhyInfo.MCSSet[1] == 0xff) && (pAd->Antenna.field.TxPath == 2))		if ((pEntry->HTCapability.MCSSet[0] == 0xff) && (pEntry->HTCapability.MCSSet[1] == 0xff) && (pAd->CommonCfg.TxStream == 2))		{// 11N 2S AP			if (pAd->LatchRfRegs.Channel <= 14)			{			*ppTable = RateSwitchTable11N2S;			*pTableSize = RateSwitchTable11N2S[0];			*pInitTxRateIdx = RateSwitchTable11N2S[1];			}			else			{				*ppTable = RateSwitchTable11N2SForABand;				*pTableSize = RateSwitchTable11N2SForABand[0];				*pInitTxRateIdx = RateSwitchTable11N2SForABand[1];			}						break;		}#endif // DOT11_N_SUPPORT //		//else if ((pAd->StaActive.SupRateLen == 4) && (pAd->StaActive.ExtRateLen == 0) && (pAd->StaActive.SupportedPhyInfo.MCSSet[0] == 0) && (pAd->StaActive.SupportedPhyInfo.MCSSet[1] == 0))		if ((pEntry->RateLen == 4) #ifdef DOT11_N_SUPPORT		//Iverson mark for Adhoc b mode,sta will use rate 54  Mbps when connect with sta b/g/n mode 		/* && (pEntry->HTCapability.MCSSet[0] == 0) && (pEntry->HTCapability.MCSSet[1] == 0)*/#endif // DOT11_N_SUPPORT //			)		{// B only AP			*ppTable = RateSwitchTable11B;			*pTableSize = RateSwitchTable11B[0];			*pInitTxRateIdx = RateSwitchTable11B[1];						break;		}		//else if ((pAd->StaActive.SupRateLen + pAd->StaActive.ExtRateLen > 8) && (pAd->StaActive.SupportedPhyInfo.MCSSet[0] == 0) && (pAd->StaActive.SupportedPhyInfo.MCSSet[1] == 0))		if ((pEntry->RateLen > 8) #ifdef DOT11_N_SUPPORT			&& (pEntry->HTCapability.MCSSet[0] == 0) && (pEntry->HTCapability.MCSSet[1] == 0)#endif // DOT11_N_SUPPORT //			)		{// B/G  mixed AP			*ppTable = RateSwitchTable11BG;			*pTableSize = RateSwitchTable11BG[0];			*pInitTxRateIdx = RateSwitchTable11BG[1];						break;		}		//else if ((pAd->StaActive.SupRateLen + pAd->StaActive.ExtRateLen == 8) && (pAd->StaActive.SupportedPhyInfo.MCSSet[0] == 0) && (pAd->StaActive.SupportedPhyInfo.MCSSet[1] == 0))		if ((pEntry->RateLen == 8) #ifdef DOT11_N_SUPPORT			&& (pEntry->HTCapability.MCSSet[0] == 0) && (pEntry->HTCapability.MCSSet[1] == 0)#endif // DOT11_N_SUPPORT //			)		{// G only AP			*ppTable = RateSwitchTable11G;			*pTableSize = RateSwitchTable11G[0];			*pInitTxRateIdx = RateSwitchTable11G[1];						break;		}#ifdef DOT11_N_SUPPORT#endif // DOT11_N_SUPPORT //#ifdef CONFIG_STA_SUPPORT		IF_DEV_CONFIG_OPMODE_ON_STA(pAd)		{#ifdef DOT11_N_SUPPORT			//else if ((pAd->StaActive.SupportedPhyInfo.MCSSet[0] == 0) && (pAd->StaActive.SupportedPhyInfo.MCSSet[1] == 0))			if ((pEntry->HTCapability.MCSSet[0] == 0) && (pEntry->HTCapability.MCSSet[1] == 0))#endif // DOT11_N_SUPPORT //			{	// Legacy mode				if (pAd->CommonCfg.MaxTxRate <= RATE_11)				{					*ppTable = RateSwitchTable11B;					*pTableSize = RateSwitchTable11B[0];					*pInitTxRateIdx = RateSwitchTable11B[1];				}				else if ((pAd->CommonCfg.MaxTxRate > RATE_11) && (pAd->CommonCfg.MinTxRate > RATE_11))				{					*ppTable = RateSwitchTable11G;					*pTableSize = RateSwitchTable11G[0];					*pInitTxRateIdx = RateSwitchTable11G[1];									}				else						{					*ppTable = RateSwitchTable11BG;					*pTableSize = RateSwitchTable11BG[0];					*pInitTxRateIdx = RateSwitchTable11BG[1];				}				break;			}#ifdef DOT11_N_SUPPORT			if (pAd->LatchRfRegs.Channel <= 14)			{				if (pAd->CommonCfg.TxStream == 1)				{					*ppTable = RateSwitchTable11N1S;					*pTableSize = RateSwitchTable11N1S[0];					*pInitTxRateIdx = RateSwitchTable11N1S[1];					DBGPRINT_RAW(RT_DEBUG_ERROR,("DRS: unkown mode,default use 11N 1S AP \n"));				}				else				{					*ppTable = RateSwitchTable11N2S;					*pTableSize = RateSwitchTable11N2S[0];					*pInitTxRateIdx = RateSwitchTable11N2S[1];					DBGPRINT_RAW(RT_DEBUG_ERROR,("DRS: unkown mode,default use 11N 2S AP \n"));									}			}			else

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -