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

📄 connect.c

📁 ralink 2870 usb无线网卡 最新驱动
💻 C
📖 第 1 页 / 共 5 页
字号:
			if (pAd->CommonCfg.bWirelessEvent)			{								RTMPSendWirelessEvent(pAd, IW_ASSOC_EVENT_FLAG, pAd->MacTab.Content[BSSID_WCID].Addr, BSS0, 0); 			}						LinkUp(pAd, BSS_INFRA);			pAd->Mlme.CntlMachine.CurrState = CNTL_IDLE;			DBGPRINT(RT_DEBUG_TRACE, ("CNTL - Association successful on BSS #%ld\n",pAd->MlmeAux.BssIdx));					} 		else 		{			// not success, try next BSS			DBGPRINT(RT_DEBUG_TRACE, ("CNTL - Association fails on BSS #%ld\n",pAd->MlmeAux.BssIdx));			pAd->MlmeAux.BssIdx++;			IterateOnBssTab(pAd);		}	}}/*	==========================================================================	Description:	IRQL = DISPATCH_LEVEL		==========================================================================*/VOID CntlWaitReassocProc(	IN PRTMP_ADAPTER pAd, 	IN MLME_QUEUE_ELEM *Elem) {	USHORT      Result;	if (Elem->MsgType == MT2_REASSOC_CONF) 	{		NdisMoveMemory(&Result, Elem->Msg, sizeof(USHORT));		if (Result == MLME_SUCCESS) 		{			// send wireless event - for association			if (pAd->CommonCfg.bWirelessEvent)				RTMPSendWirelessEvent(pAd, IW_ASSOC_EVENT_FLAG, pAd->MacTab.Content[BSSID_WCID].Addr, BSS0, 0);						// 			// NDIS requires a new Link UP indication but no Link Down for RE-ASSOC			//			LinkUp(pAd, BSS_INFRA);			pAd->Mlme.CntlMachine.CurrState = CNTL_IDLE;            			DBGPRINT(RT_DEBUG_TRACE, ("CNTL - Re-assocition successful on BSS #%ld\n", pAd->MlmeAux.RoamIdx));		} 		else 		{			// reassoc failed, try to pick next BSS in the BSS Table			DBGPRINT(RT_DEBUG_TRACE, ("CNTL - Re-assocition fails on BSS #%ld\n", pAd->MlmeAux.RoamIdx));			{				pAd->MlmeAux.RoamIdx++;				IterateOnBssTab2(pAd);			}		}	}}VOID	AdhocTurnOnQos(	IN  PRTMP_ADAPTER pAd){#define AC0_DEF_TXOP		0#define AC1_DEF_TXOP		0#define AC2_DEF_TXOP		94#define AC3_DEF_TXOP		47	// Turn on QOs if use HT rate.	if (pAd->CommonCfg.APEdcaParm.bValid == FALSE)	{		pAd->CommonCfg.APEdcaParm.bValid = TRUE;		pAd->CommonCfg.APEdcaParm.Aifsn[0] = 3;		pAd->CommonCfg.APEdcaParm.Aifsn[1] = 7;		pAd->CommonCfg.APEdcaParm.Aifsn[2] = 1;		pAd->CommonCfg.APEdcaParm.Aifsn[3] = 1;		pAd->CommonCfg.APEdcaParm.Cwmin[0] = 4;		pAd->CommonCfg.APEdcaParm.Cwmin[1] = 4;		pAd->CommonCfg.APEdcaParm.Cwmin[2] = 3;		pAd->CommonCfg.APEdcaParm.Cwmin[3] = 2;		pAd->CommonCfg.APEdcaParm.Cwmax[0] = 10;		pAd->CommonCfg.APEdcaParm.Cwmax[1] = 6;		pAd->CommonCfg.APEdcaParm.Cwmax[2] = 4;		pAd->CommonCfg.APEdcaParm.Cwmax[3] = 3;		pAd->CommonCfg.APEdcaParm.Txop[0]  = 0;		pAd->CommonCfg.APEdcaParm.Txop[1]  = 0;		pAd->CommonCfg.APEdcaParm.Txop[2]  = AC2_DEF_TXOP;		pAd->CommonCfg.APEdcaParm.Txop[3]  = AC3_DEF_TXOP;	}	AsicSetEdcaParm(pAd, &pAd->CommonCfg.APEdcaParm);}/*	==========================================================================	Description:	IRQL = DISPATCH_LEVEL		==========================================================================*/VOID LinkUp(	IN PRTMP_ADAPTER pAd,	IN UCHAR BssType) {	ULONG	Now;	UINT32	Data;	BOOLEAN	Cancelled;	UCHAR	Value = 0, idx = 0, HashIdx = 0;	MAC_TABLE_ENTRY *pEntry = NULL, *pCurrEntry = NULL;		pEntry = MacTableLookup(pAd, pAd->CommonCfg.Bssid);	if (pEntry)	{		MacTableDeleteEntry(pAd, pEntry->Aid, pEntry->Addr);		pEntry = NULL;	}		pEntry = &pAd->MacTab.Content[BSSID_WCID];	//	// ASSOC - DisassocTimeoutAction	// CNTL - Dis-associate successful	// !!! LINK DOWN !!!	// [88888] OID_802_11_SSID should have returned NDTEST_WEP_AP2(Returned: )	// 	// To prevent DisassocTimeoutAction to call Link down after we link up,	// cancel the DisassocTimer no matter what it start or not.	//	RTMPCancelTimer(&pAd->MlmeAux.DisassocTimer,  &Cancelled);		COPY_SETTINGS_FROM_MLME_AUX_TO_ACTIVE_CFG(pAd);#ifdef DOT11_N_SUPPORT	COPY_HTSETTINGS_FROM_MLME_AUX_TO_ACTIVE_CFG(pAd);#endif // DOT11_N_SUPPORT //	if (BssType == BSS_ADHOC)	{		OPSTATUS_SET_FLAG(pAd, fOP_STATUS_ADHOC_ON);		OPSTATUS_CLEAR_FLAG(pAd, fOP_STATUS_INFRA_ON);		#ifdef CARRIER_DETECTION_SUPPORT // Roger sync Carrier		// No carrier detection when adhoc		// CarrierDetectionStop(pAd);		pAd->CommonCfg.CarrierDetect.CD_State = CD_NORMAL;#endif // CARRIER_DETECTION_SUPPORT //#ifdef DOT11_N_SUPPORT		if (pAd->CommonCfg.PhyMode >= PHY_11ABGN_MIXED)			AdhocTurnOnQos(pAd);#endif // DOT11_N_SUPPORT //		DBGPRINT(RT_DEBUG_TRACE, ("!!!Adhoc LINK UP !!! \n" ));	}	else	{		OPSTATUS_SET_FLAG(pAd, fOP_STATUS_INFRA_ON);		OPSTATUS_CLEAR_FLAG(pAd, fOP_STATUS_ADHOC_ON);			DBGPRINT(RT_DEBUG_TRACE, ("!!!Infra LINK UP !!! \n" ));	}			// 3*3		// reset Tx beamforming bit		RTMP_BBP_IO_READ8_BY_REG_ID(pAd, BBP_R4, &Value);		Value &= (~0x01);		Value |= pAd->CommonCfg.RegTransmitSetting.field.TxBF;		RTMP_BBP_IO_WRITE8_BY_REG_ID(pAd, BBP_R4, Value);#ifdef DOT11_N_SUPPORT    	// Change to AP channel        if ((pAd->CommonCfg.CentralChannel > pAd->CommonCfg.Channel) && (pAd->MlmeAux.HtCapability.HtCapInfo.ChannelWidth == BW_40))    	{	    		// Must using 40MHz.    		pAd->CommonCfg.BBPCurrentBW = BW_40;    		AsicSwitchChannel(pAd, pAd->CommonCfg.CentralChannel, FALSE);    		AsicLockChannel(pAd, pAd->CommonCfg.CentralChannel);    			    		RTMP_BBP_IO_READ8_BY_REG_ID(pAd, BBP_R4, &Value);    		Value &= (~0x18);    		Value |= 0x10;    		RTMP_BBP_IO_WRITE8_BY_REG_ID(pAd, BBP_R4, Value);    		    		//  RX : control channel at lower     		RTMP_BBP_IO_READ8_BY_REG_ID(pAd, BBP_R3, &Value);    		Value &= (~0x20);    		RTMP_BBP_IO_WRITE8_BY_REG_ID(pAd, BBP_R3, Value);    		RTMP_IO_READ32(pAd, TX_BAND_CFG, &Data);    		Data &= 0xfffffffe;    		RTMP_IO_WRITE32(pAd, TX_BAND_CFG, Data);    		    		if (pAd->MACVersion == 0x28600100)    		{    			RTMP_BBP_IO_WRITE8_BY_REG_ID(pAd, BBP_R69, 0x1A);    			RTMP_BBP_IO_WRITE8_BY_REG_ID(pAd, BBP_R70, 0x0A);    			RTMP_BBP_IO_WRITE8_BY_REG_ID(pAd, BBP_R73, 0x16);                DBGPRINT(RT_DEBUG_TRACE, ("!!!rt2860C !!! \n" ));    		}	    		DBGPRINT(RT_DEBUG_TRACE, ("!!!40MHz Lower LINK UP !!! Control Channel at Below. Central = %d \n", pAd->CommonCfg.CentralChannel ));    	}		else if ((pAd->CommonCfg.CentralChannel < pAd->CommonCfg.Channel) && (pAd->MlmeAux.HtCapability.HtCapInfo.ChannelWidth == BW_40))	    {			    // Must using 40MHz.			pAd->CommonCfg.BBPCurrentBW = BW_40;			AsicSwitchChannel(pAd, pAd->CommonCfg.CentralChannel, FALSE);		    AsicLockChannel(pAd, pAd->CommonCfg.CentralChannel);						RTMP_BBP_IO_READ8_BY_REG_ID(pAd, BBP_R4, &Value);    		Value &= (~0x18);    		Value |= 0x10;			RTMP_BBP_IO_WRITE8_BY_REG_ID(pAd, BBP_R4, Value);			    		RTMP_IO_READ32(pAd, TX_BAND_CFG, &Data);    		Data |= 0x1;    		RTMP_IO_WRITE32(pAd, TX_BAND_CFG, Data);						RTMP_BBP_IO_READ8_BY_REG_ID(pAd, BBP_R3, &Value);		    Value |= (0x20);			RTMP_BBP_IO_WRITE8_BY_REG_ID(pAd, BBP_R3, Value);		    		if (pAd->MACVersion == 0x28600100)    		{    			RTMP_BBP_IO_WRITE8_BY_REG_ID(pAd, BBP_R69, 0x1A);    			RTMP_BBP_IO_WRITE8_BY_REG_ID(pAd, BBP_R70, 0x0A);    			RTMP_BBP_IO_WRITE8_BY_REG_ID(pAd, BBP_R73, 0x16);    			    DBGPRINT(RT_DEBUG_TRACE, ("!!!rt2860C !!! \n" ));    		}		    DBGPRINT(RT_DEBUG_TRACE, ("!!! 40MHz Upper LINK UP !!! Control Channel at UpperCentral = %d \n", pAd->CommonCfg.CentralChannel ));	    }	    else#endif // DOT11_N_SUPPORT //	    {		    pAd->CommonCfg.BBPCurrentBW = BW_20;			pAd->CommonCfg.CentralChannel = pAd->CommonCfg.Channel;			AsicSwitchChannel(pAd, pAd->CommonCfg.Channel, FALSE);			AsicLockChannel(pAd, pAd->CommonCfg.Channel);						RTMP_BBP_IO_READ8_BY_REG_ID(pAd, BBP_R4, &Value);			Value &= (~0x18);			RTMP_BBP_IO_WRITE8_BY_REG_ID(pAd, BBP_R4, Value);						RTMP_IO_READ32(pAd, TX_BAND_CFG, &Data);			Data &= 0xfffffffe;			RTMP_IO_WRITE32(pAd, TX_BAND_CFG, Data);						RTMP_BBP_IO_READ8_BY_REG_ID(pAd, BBP_R3, &Value);			Value &= (~0x20);			RTMP_BBP_IO_WRITE8_BY_REG_ID(pAd, BBP_R3, Value);						if (pAd->MACVersion == 0x28600100)			{				RTMP_BBP_IO_WRITE8_BY_REG_ID(pAd, BBP_R69, 0x16);				RTMP_BBP_IO_WRITE8_BY_REG_ID(pAd, BBP_R70, 0x08);				RTMP_BBP_IO_WRITE8_BY_REG_ID(pAd, BBP_R73, 0x11);				DBGPRINT(RT_DEBUG_TRACE, ("!!!rt2860C !!! \n" ));			}					    DBGPRINT(RT_DEBUG_TRACE, ("!!! 20MHz LINK UP !!! \n" ));	}	RTMPSetAGCInitValue(pAd, pAd->CommonCfg.BBPCurrentBW);	//	// Save BBP_R66 value, it will be used in RTUSBResumeMsduTransmission	//	RTMP_BBP_IO_READ8_BY_REG_ID(pAd, BBP_R66, &pAd->BbpTuning.R66CurrentValue);	DBGPRINT(RT_DEBUG_TRACE, ("!!! LINK UP !!! (BssType=%d, AID=%d, ssid=%s, Channel=%d, CentralChannel = %d)\n", 		BssType, pAd->StaActive.Aid, pAd->CommonCfg.Ssid, pAd->CommonCfg.Channel, pAd->CommonCfg.CentralChannel));#ifdef DOT11_N_SUPPORT	DBGPRINT(RT_DEBUG_TRACE, ("!!! LINK UP !!! (Density =%d, )\n", pAd->MacTab.Content[BSSID_WCID].MpduDensity));#endif // DOT11_N_SUPPORT //		AsicSetBssid(pAd, pAd->CommonCfg.Bssid);			AsicSetSlotTime(pAd, TRUE);	AsicSetEdcaParm(pAd, &pAd->CommonCfg.APEdcaParm);	// Call this for RTS protectionfor legacy rate, we will always enable RTS threshold, but normally it will not hit	AsicUpdateProtect(pAd, 0, (OFDMSETPROTECT | CCKSETPROTECT), TRUE, FALSE);#ifdef DOT11_N_SUPPORT	if ((pAd->StaActive.SupportedPhyInfo.bHtEnable == TRUE))	{		// Update HT protectionfor based on AP's operating mode.    	if (pAd->MlmeAux.AddHtInfo.AddHtInfo2.NonGfPresent == 1)    	{    		AsicUpdateProtect(pAd, pAd->MlmeAux.AddHtInfo.AddHtInfo2.OperaionMode,  ALLN_SETPROTECT, FALSE, TRUE);    	}    	else   			AsicUpdateProtect(pAd, pAd->MlmeAux.AddHtInfo.AddHtInfo2.OperaionMode,  ALLN_SETPROTECT, FALSE, FALSE);	}#endif // DOT11_N_SUPPORT //	NdisZeroMemory(&pAd->DrsCounters, sizeof(COUNTER_DRS));	NdisGetSystemUpTime(&Now);	pAd->StaCfg.LastBeaconRxTime = Now;   // last RX timestamp	if ((pAd->CommonCfg.TxPreamble != Rt802_11PreambleLong) &&		CAP_IS_SHORT_PREAMBLE_ON(pAd->StaActive.CapabilityInfo))	{		MlmeSetTxPreamble(pAd, Rt802_11PreambleShort);	}	OPSTATUS_CLEAR_FLAG(pAd, fOP_STATUS_AGGREGATION_INUSED); 	if (pAd->CommonCfg.RadarDetect.RDMode == RD_SILENCE_MODE)	{#ifdef DFS_SUPPORT		RadarDetectionStop(pAd);#endif // DFS_SUPPORT //	}	pAd->CommonCfg.RadarDetect.RDMode = RD_NORMAL_MODE;		if (BssType == BSS_ADHOC)	{		MakeIbssBeacon(pAd);		if ((pAd->CommonCfg.Channel > 14)			&& (pAd->CommonCfg.bIEEE80211H == 1)			&& RadarChannelCheck(pAd, pAd->CommonCfg.Channel))		{			; //Do nothing		}		else		{			AsicEnableIbssSync(pAd);		}				// In ad hoc mode, use MAC table from index 1. 		// p.s ASIC use all 0xff as termination of WCID table search.To prevent it's 0xff-ff-ff-ff-ff-ff, Write 0 here.		RTMP_IO_WRITE32(pAd, MAC_WCID_BASE, 0x00);		RTMP_IO_WRITE32(pAd, 0x1808, 0x00);		// If WEP is enabled, add key material and cipherAlg into Asic		// Fill in Shared Key Table(offset: 0x6c00) and Shared Key Mode(offset: 0x7000)        		if (pAd->StaCfg.WepStatus == Ndis802_11WEPEnabled)		{						PUCHAR	Key; 						UCHAR 	CipherAlg;						for (idx=0; idx < SHARE_KEY_NUM; idx++)        	{				CipherAlg = pAd->SharedKey[BSS0][idx].CipherAlg;    			Key = pAd->SharedKey[BSS0][idx].Key;							if (pAd->SharedKey[BSS0][idx].KeyLen > 0)				{					// Set key material and cipherAlg to Asic    				AsicAddSharedKeyEntry(pAd, BSS0, idx, CipherAlg, Key, NULL, NULL);						                                        if (idx == pAd->StaCfg.DefaultKeyId)					{						// Update WCID attribute table and IVEIV table for this group key table  						RTMPAddWcidAttributeEntry(pAd, BSS0, idx, CipherAlg, NULL);					}				}	                			}    		   		  		   					

⌨️ 快捷键说明

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