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

📄 cmm_sync.c

📁 ralink最新rt3070 usb wifi 无线网卡驱动程序
💻 C
📖 第 1 页 / 共 2 页
字号:
			RssiOffset = pAd->ARssiOffset2;    }    else    {        if (RssiNumber == 0)			RssiOffset = pAd->BGRssiOffset0;		else if (RssiNumber == 1)			RssiOffset = pAd->BGRssiOffset1;		else			RssiOffset = pAd->BGRssiOffset2;    }	    return (-12 - RssiOffset - LNAGain - Rssi);}/*	==========================================================================	Description:		Scan next channel	========================================================================== */VOID ScanNextChannel(	IN PRTMP_ADAPTER pAd) {	HEADER_802_11   Hdr80211;	PUCHAR          pOutBuffer = NULL;	NDIS_STATUS     NStatus;	ULONG           FrameLen = 0;	UCHAR           SsidLen = 0, ScanType = pAd->MlmeAux.ScanType, BBPValue = 0;#ifdef CONFIG_STA_SUPPORT	USHORT          Status;	PHEADER_802_11  pHdr80211;#endif // CONFIG_STA_SUPPORT //	UINT			ScanTimeIn5gChannel = SHORT_CHANNEL_TIME;#ifdef CONFIG_STA_SUPPORT	IF_DEV_CONFIG_OPMODE_ON_STA(pAd)	{		if (MONITOR_ON(pAd))			return;	}#endif // CONFIG_STA_SUPPORT //#ifdef RALINK_ATE	// Nothing to do in ATE mode. 	if (ATE_ON(pAd))		return;#endif // RALINK_ATE //	if (pAd->MlmeAux.Channel == 0) 	{		if ((pAd->CommonCfg.BBPCurrentBW == BW_40)#ifdef CONFIG_STA_SUPPORT			&& (INFRA_ON(pAd)				|| (pAd->OpMode == OPMODE_AP))#endif // CONFIG_STA_SUPPORT //			)		{			AsicSwitchChannel(pAd, pAd->CommonCfg.CentralChannel, FALSE);			AsicLockChannel(pAd, pAd->CommonCfg.CentralChannel);			RTMP_BBP_IO_READ8_BY_REG_ID(pAd, BBP_R4, &BBPValue);			BBPValue &= (~0x18);			BBPValue |= 0x10;			RTMP_BBP_IO_WRITE8_BY_REG_ID(pAd, BBP_R4, BBPValue);			DBGPRINT(RT_DEBUG_TRACE, ("SYNC - End of SCAN, restore to 40MHz channel %d, Total BSS[%02d]\n",pAd->CommonCfg.CentralChannel, pAd->ScanTab.BssNr));		}		else		{			AsicSwitchChannel(pAd, pAd->CommonCfg.Channel, FALSE);			AsicLockChannel(pAd, pAd->CommonCfg.Channel);			DBGPRINT(RT_DEBUG_TRACE, ("SYNC - End of SCAN, restore to channel %d, Total BSS[%02d]\n",pAd->CommonCfg.Channel, pAd->ScanTab.BssNr));		}		#ifdef CONFIG_STA_SUPPORT		IF_DEV_CONFIG_OPMODE_ON_STA(pAd)		{			//			// To prevent data lost.			// Send an NULL data with turned PSM bit on to current associated AP before SCAN progress.			// Now, we need to send an NULL data with turned PSM bit off to AP, when scan progress done 			//			if (OPSTATUS_TEST_FLAG(pAd, fOP_STATUS_MEDIA_STATE_CONNECTED) && (INFRA_ON(pAd)))			{				NStatus = MlmeAllocateMemory(pAd, (PVOID)&pOutBuffer);				if (NStatus	== NDIS_STATUS_SUCCESS)				{					pHdr80211 = (PHEADER_802_11) pOutBuffer;					MgtMacHeaderInit(pAd, pHdr80211, SUBTYPE_NULL_FUNC, 1, pAd->CommonCfg.Bssid, pAd->CommonCfg.Bssid);					pHdr80211->Duration = 0;					pHdr80211->FC.Type = BTYPE_DATA;					pHdr80211->FC.PwrMgmt = (pAd->StaCfg.Psm == PWR_SAVE);					// Send using priority queue					MiniportMMRequest(pAd, 0, pOutBuffer, sizeof(HEADER_802_11));					DBGPRINT(RT_DEBUG_TRACE, ("MlmeScanReqAction -- Send PSM Data frame\n"));					MlmeFreeMemory(pAd, pOutBuffer);					RTMPusecDelay(5000);				}			}			pAd->Mlme.SyncMachine.CurrState = SYNC_IDLE;			Status = MLME_SUCCESS;			MlmeEnqueue(pAd, MLME_CNTL_STATE_MACHINE, MT2_SCAN_CONF, 2, &Status);		}#endif // CONFIG_STA_SUPPORT //		RTMP_CLEAR_FLAG(pAd, fRTMP_ADAPTER_BSS_SCAN_IN_PROGRESS);	} #ifdef RT2870#ifdef CONFIG_STA_SUPPORT	else if (RTMP_TEST_FLAG(pAd, fRTMP_ADAPTER_NIC_NOT_EXIST) && (pAd->OpMode == OPMODE_STA))	{		pAd->Mlme.SyncMachine.CurrState = SYNC_IDLE;		MlmeCntlConfirm(pAd, MT2_SCAN_CONF, MLME_FAIL_NO_RESOURCE);	}	#endif // CONFIG_STA_SUPPORT //#endif // RT2870 //	else 	{#ifdef CONFIG_STA_SUPPORT		IF_DEV_CONFIG_OPMODE_ON_STA(pAd)		{		// BBP and RF are not accessible in PS mode, we has to wake them up first		if (OPSTATUS_TEST_FLAG(pAd, fOP_STATUS_DOZE))			AsicForceWakeup(pAd, TRUE);			// leave PSM during scanning. otherwise we may lost ProbeRsp & BEACON			if (pAd->StaCfg.Psm == PWR_SAVE)				MlmeSetPsmBit(pAd, PWR_ACTIVE);		}#endif // CONFIG_STA_SUPPORT //		AsicSwitchChannel(pAd, pAd->MlmeAux.Channel, TRUE);		AsicLockChannel(pAd, pAd->MlmeAux.Channel);#ifdef CONFIG_STA_SUPPORT		IF_DEV_CONFIG_OPMODE_ON_STA(pAd)		{			if (pAd->MlmeAux.Channel > 14)			{				if ((pAd->CommonCfg.bIEEE80211H == 1) && RadarChannelCheck(pAd, pAd->MlmeAux.Channel))				{					ScanType = SCAN_PASSIVE;					ScanTimeIn5gChannel = MIN_CHANNEL_TIME;				}			}#ifdef CARRIER_DETECTION_SUPPORT // Roger sync Carrier			// carrier detection			if (pAd->CommonCfg.CarrierDetect.Enable == TRUE)			{				ScanType = SCAN_PASSIVE;				ScanTimeIn5gChannel = MIN_CHANNEL_TIME;			}#endif // CARRIER_DETECTION_SUPPORT // 		}#endif // CONFIG_STA_SUPPORT //		//Global country domain(ch1-11:active scan, ch12-14 passive scan)		if ((pAd->MlmeAux.Channel <= 14) && (pAd->MlmeAux.Channel >= 12) && ((pAd->CommonCfg.CountryRegion & 0x7f) == REGION_31_BG_BAND))		{			ScanType = SCAN_PASSIVE;		}		// We need to shorten active scan time in order for WZC connect issue		// Chnage the channel scan time for CISCO stuff based on its IAPP announcement		if (ScanType == FAST_SCAN_ACTIVE)			RTMPSetTimer(&pAd->MlmeAux.ScanTimer, FAST_ACTIVE_SCAN_TIME);#ifdef CONFIG_STA_SUPPORT		else if (((ScanType == SCAN_CISCO_ACTIVE) ||				(ScanType == SCAN_CISCO_PASSIVE) ||				(ScanType == SCAN_CISCO_CHANNEL_LOAD) ||				(ScanType == SCAN_CISCO_NOISE)) && (pAd->OpMode == OPMODE_STA))		{			if (pAd->StaCfg.CCXScanTime < 25)				RTMPSetTimer(&pAd->MlmeAux.ScanTimer, pAd->StaCfg.CCXScanTime * 2);			else				RTMPSetTimer(&pAd->MlmeAux.ScanTimer, pAd->StaCfg.CCXScanTime);		}#endif // CONFIG_STA_SUPPORT //		else // must be SCAN_PASSIVE or SCAN_ACTIVE		{			if ((pAd->CommonCfg.PhyMode == PHY_11ABG_MIXED) #ifdef DOT11_N_SUPPORT				|| (pAd->CommonCfg.PhyMode == PHY_11ABGN_MIXED) || (pAd->CommonCfg.PhyMode == PHY_11AGN_MIXED)#endif // DOT11_N_SUPPORT //			)			{				if (pAd->MlmeAux.Channel > 14)					RTMPSetTimer(&pAd->MlmeAux.ScanTimer, ScanTimeIn5gChannel);				else					RTMPSetTimer(&pAd->MlmeAux.ScanTimer, MIN_CHANNEL_TIME);			}			else				RTMPSetTimer(&pAd->MlmeAux.ScanTimer, MAX_CHANNEL_TIME);		}		if ((ScanType == SCAN_ACTIVE) || (ScanType == FAST_SCAN_ACTIVE) ||			(ScanType == SCAN_CISCO_ACTIVE))		{			NStatus = MlmeAllocateMemory(pAd, &pOutBuffer);  //Get an unused nonpaged memory			if (NStatus != NDIS_STATUS_SUCCESS)			{				DBGPRINT(RT_DEBUG_TRACE, ("SYNC - ScanNextChannel() allocate memory fail\n"));#ifdef CONFIG_STA_SUPPORT				IF_DEV_CONFIG_OPMODE_ON_STA(pAd)				{					pAd->Mlme.SyncMachine.CurrState = SYNC_IDLE;					Status = MLME_FAIL_NO_RESOURCE;					MlmeEnqueue(pAd, MLME_CNTL_STATE_MACHINE, MT2_SCAN_CONF, 2, &Status);				}#endif // CONFIG_STA_SUPPORT //				return;			}			// There is no need to send broadcast probe request if active scan is in effect.			if ((ScanType == SCAN_ACTIVE) || (ScanType == FAST_SCAN_ACTIVE)				)				SsidLen = pAd->MlmeAux.SsidLen;			else				SsidLen = 0;			MgtMacHeaderInit(pAd, &Hdr80211, SUBTYPE_PROBE_REQ, 0, BROADCAST_ADDR, BROADCAST_ADDR);			MakeOutgoingFrame(pOutBuffer,               &FrameLen,							  sizeof(HEADER_802_11),    &Hdr80211,							  1,                        &SsidIe,							  1,                        &SsidLen,							  SsidLen,			        pAd->MlmeAux.Ssid,							  1,                        &SupRateIe,							  1,                        &pAd->CommonCfg.SupRateLen,							  pAd->CommonCfg.SupRateLen,  pAd->CommonCfg.SupRate, 							  END_OF_ARGS);			if (pAd->CommonCfg.ExtRateLen)			{				ULONG Tmp;				MakeOutgoingFrame(pOutBuffer + FrameLen,            &Tmp,								  1,                                &ExtRateIe,								  1,                                &pAd->CommonCfg.ExtRateLen,								  pAd->CommonCfg.ExtRateLen,          pAd->CommonCfg.ExtRate, 								  END_OF_ARGS);				FrameLen += Tmp;			}#ifdef DOT11_N_SUPPORT			if (pAd->CommonCfg.PhyMode >= PHY_11ABGN_MIXED)			{				ULONG	Tmp;				UCHAR	HtLen;				UCHAR	BROADCOM[4] = {0x0, 0x90, 0x4c, 0x33};#ifdef RT_BIG_ENDIAN				HT_CAPABILITY_IE HtCapabilityTmp;#endif				if (pAd->bBroadComHT == TRUE)				{					HtLen = pAd->MlmeAux.HtCapabilityLen + 4;#ifdef RT_BIG_ENDIAN					NdisMoveMemory(&HtCapabilityTmp, &pAd->MlmeAux.HtCapability, SIZE_HT_CAP_IE);					*(USHORT *)(&HtCapabilityTmp.HtCapInfo) = SWAP16(*(USHORT *)(&HtCapabilityTmp.HtCapInfo));					*(USHORT *)(&HtCapabilityTmp.ExtHtCapInfo) = SWAP16(*(USHORT *)(&HtCapabilityTmp.ExtHtCapInfo));					MakeOutgoingFrame(pOutBuffer + FrameLen,          &Tmp,									1,                                &WpaIe,									1,                                &HtLen,									4,                                &BROADCOM[0],									pAd->MlmeAux.HtCapabilityLen,     &HtCapabilityTmp, 									END_OF_ARGS);#else					MakeOutgoingFrame(pOutBuffer + FrameLen,          &Tmp,									1,                                &WpaIe,									1,                                &HtLen,									4,                                &BROADCOM[0],									pAd->MlmeAux.HtCapabilityLen,     &pAd->MlmeAux.HtCapability, 									END_OF_ARGS);#endif // RT_BIG_ENDIAN //				}				else								{					HtLen = pAd->MlmeAux.HtCapabilityLen;#ifdef RT_BIG_ENDIAN					NdisMoveMemory(&HtCapabilityTmp, &pAd->CommonCfg.HtCapability, SIZE_HT_CAP_IE);					*(USHORT *)(&HtCapabilityTmp.HtCapInfo) = SWAP16(*(USHORT *)(&HtCapabilityTmp.HtCapInfo));					*(USHORT *)(&HtCapabilityTmp.ExtHtCapInfo) = SWAP16(*(USHORT *)(&HtCapabilityTmp.ExtHtCapInfo));					MakeOutgoingFrame(pOutBuffer + FrameLen,          &Tmp,									1,                                &HtCapIe,									1,                                &HtLen,									HtLen,                            &HtCapabilityTmp, 									END_OF_ARGS);#else					MakeOutgoingFrame(pOutBuffer + FrameLen,          &Tmp,									1,                                &HtCapIe,									1,                                &HtLen,									HtLen,                            &pAd->CommonCfg.HtCapability, 									END_OF_ARGS);#endif // RT_BIG_ENDIAN //				}				FrameLen += Tmp;#ifdef DOT11N_DRAFT3				if (pAd->CommonCfg.BACapability.field.b2040CoexistScanSup == 1)				{					ULONG		Tmp;					HtLen = 1;					MakeOutgoingFrame(pOutBuffer + FrameLen,            &Tmp,									  1,					&ExtHtCapIe,									  1,					&HtLen,									  1,          			&pAd->CommonCfg.BSSCoexist2040.word, 									  END_OF_ARGS);					FrameLen += Tmp;				}#endif // DOT11N_DRAFT3 //			}#endif // DOT11_N_SUPPORT //			MiniportMMRequest(pAd, 0, pOutBuffer, FrameLen);			MlmeFreeMemory(pAd, pOutBuffer);		}		// For SCAN_CISCO_PASSIVE, do nothing and silently wait for beacon or other probe reponse		#ifdef CONFIG_STA_SUPPORT		IF_DEV_CONFIG_OPMODE_ON_STA(pAd)			pAd->Mlme.SyncMachine.CurrState = SCAN_LISTEN;#endif // CONFIG_STA_SUPPORT //	}}VOID MgtProbReqMacHeaderInit(	IN	PRTMP_ADAPTER	pAd, 	IN OUT PHEADER_802_11 pHdr80211, 	IN UCHAR SubType, 	IN UCHAR ToDs, 	IN PUCHAR pDA, 	IN PUCHAR pBssid) {	NdisZeroMemory(pHdr80211, sizeof(HEADER_802_11));		pHdr80211->FC.Type = BTYPE_MGMT;	pHdr80211->FC.SubType = SubType;	if (SubType == SUBTYPE_ACK)		pHdr80211->FC.Type = BTYPE_CNTL;	pHdr80211->FC.ToDs = ToDs;	COPY_MAC_ADDR(pHdr80211->Addr1, pDA);	COPY_MAC_ADDR(pHdr80211->Addr2, pAd->CurrentAddress);	COPY_MAC_ADDR(pHdr80211->Addr3, pBssid);}

⌨️ 快捷键说明

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