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

📄 connect.c

📁 ralink最新rt3070 usb wifi 无线网卡驱动程序
💻 C
📖 第 1 页 / 共 5 页
字号:
}/*	==========================================================================	Description:	IRQL = DISPATCH_LEVEL		==========================================================================*/VOID CntlWaitAuthProc2(	IN PRTMP_ADAPTER pAd, 	IN MLME_QUEUE_ELEM *Elem) {	USHORT                       Reason;	MLME_ASSOC_REQ_STRUCT        AssocReq;	MLME_AUTH_REQ_STRUCT         AuthReq;	if (Elem->MsgType == MT2_AUTH_CONF) 	{		NdisMoveMemory(&Reason, Elem->Msg, sizeof(USHORT));		if (Reason == MLME_SUCCESS) 		{			DBGPRINT(RT_DEBUG_TRACE, ("CNTL - AUTH OK\n"));			AssocParmFill(pAd, &AssocReq, pAd->MlmeAux.Bssid, pAd->MlmeAux.CapabilityInfo, 						  ASSOC_TIMEOUT, pAd->StaCfg.DefaultListenCount);			MlmeEnqueue(pAd, ASSOC_STATE_MACHINE, MT2_MLME_ASSOC_REQ, 						sizeof(MLME_ASSOC_REQ_STRUCT), &AssocReq);			pAd->Mlme.CntlMachine.CurrState = CNTL_WAIT_ASSOC;		} 		else		{#ifdef LEAP_SUPPORT			// Process LEAP first, since it use different control variable			// We don't want to affect other poven operation			if (pAd->StaCfg.LeapAuthMode == CISCO_AuthModeLEAP)			{				// LEAP Auth not success, try next BSS				DBGPRINT(RT_DEBUG_TRACE, ("CNTL - *LEAP* AUTH FAIL, give up; try next BSS\n"));				DBGPRINT(RT_DEBUG_TRACE, ("Total match BSSID [=%d]\n", pAd->MlmeAux.SsidBssTab.BssNr));				pAd->Mlme.CntlMachine.CurrState = CNTL_IDLE;				pAd->MlmeAux.BssIdx++;				IterateOnBssTab(pAd);			}			else #endif // LEAP_SUPPORT //			if ((pAd->StaCfg.AuthMode == Ndis802_11AuthModeAutoSwitch) &&				 (pAd->MlmeAux.Alg == Ndis802_11AuthModeShared))			{				DBGPRINT(RT_DEBUG_TRACE, ("CNTL - AUTH FAIL, try OPEN system...\n"));				AuthParmFill(pAd, &AuthReq, pAd->MlmeAux.Bssid, Ndis802_11AuthModeOpen);				MlmeEnqueue(pAd, AUTH_STATE_MACHINE, MT2_MLME_AUTH_REQ, 							sizeof(MLME_AUTH_REQ_STRUCT), &AuthReq);				pAd->Mlme.CntlMachine.CurrState = CNTL_WAIT_AUTH2;			}			else 			{				// not success, try next BSS				DBGPRINT(RT_DEBUG_TRACE, ("CNTL - AUTH FAIL, give up; try next BSS\n"));				pAd->Mlme.CntlMachine.CurrState = CNTL_IDLE; //???????				pAd->MlmeAux.BssIdx++;				IterateOnBssTab(pAd);			}		}	}}/*	==========================================================================	Description:	IRQL = DISPATCH_LEVEL		==========================================================================*/VOID CntlWaitAssocProc(	IN PRTMP_ADAPTER pAd, 	IN MLME_QUEUE_ELEM *Elem) {	USHORT      Reason;	if (Elem->MsgType == MT2_ASSOC_CONF) 	{		NdisMoveMemory(&Reason, Elem->Msg, sizeof(USHORT));		if (Reason == MLME_SUCCESS) 		{			LinkUp(pAd, BSS_INFRA);			pAd->Mlme.CntlMachine.CurrState = CNTL_IDLE;			DBGPRINT(RT_DEBUG_TRACE, ("CNTL - Association successful on BSS #%ld\n",pAd->MlmeAux.BssIdx));			if (pAd->CommonCfg.bWirelessEvent)			{								RTMPSendWirelessEvent(pAd, IW_ASSOC_EVENT_FLAG, pAd->MacTab.Content[BSSID_WCID].Addr, BSS0, 0); 			}		} 		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) 		{			// 			// NDIS requires a new Link UP indication but no Link Down for RE-ASSOC			//			LinkUp(pAd, BSS_INFRA);			// send wireless event - for association			if (pAd->CommonCfg.bWirelessEvent)				RTMPSendWirelessEvent(pAd, IW_ASSOC_EVENT_FLAG, pAd->MacTab.Content[BSSID_WCID].Addr, BSS0, 0);			#ifdef LEAP_SUPPORT						if (LEAP_CCKM_ON(pAd))			{				STA_PORT_SECURED(pAd);				pAd->StaCfg.WpaState = SS_FINISH;						}#endif // LEAP_SUPPORT //						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;	MAC_TABLE_ENTRY *pEntry = NULL, *pCurrEntry;		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 //	// It's quite difficult to tell if a newly added KEY is WEP or CKIP until a new BSS	// is formed (either ASSOC/RE-ASSOC done or IBSS started. LinkUP should be a safe place	// to examine if cipher algorithm switching is required.	//rt2860b. Don't know why need this	SwitchBetweenWepAndCkip(pAd);	if (BssType == BSS_ADHOC)	{		OPSTATUS_SET_FLAG(pAd, fOP_STATUS_ADHOC_ON);		OPSTATUS_CLEAR_FLAG(pAd, fOP_STATUS_INFRA_ON);		#ifdef DOT11_N_SUPPORT		if ((pAd->CommonCfg.HtCapability.HtCapInfo.ChannelWidth  == BW_40) && 			(pAd->CommonCfg.AddHTInfo.AddHtInfo.ExtChanOffset == EXTCHA_ABOVE))		{			pAd->CommonCfg.CentralChannel = pAd->CommonCfg.Channel + 2;		}		else if ((pAd->CommonCfg.Channel > 2) &&				 (pAd->CommonCfg.HtCapability.HtCapInfo.ChannelWidth  == BW_40) && 				 (pAd->CommonCfg.AddHTInfo.AddHtInfo.ExtChanOffset == EXTCHA_BELOW))		{			pAd->CommonCfg.CentralChannel = pAd->CommonCfg.Channel - 2;		}#endif // DOT11_N_SUPPORT //#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);

⌨️ 快捷键说明

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