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

📄 cmm_sync.c

📁 ralink最新rt3070 usb wifi 无线网卡驱动程序
💻 C
📖 第 1 页 / 共 2 页
字号:
/* ************************************************************************* * Ralink Tech Inc. * 5F., No.36, Taiyuan St., Jhubei City, * Hsinchu County 302, * Taiwan, R.O.C. * * (c) Copyright 2002-2007, Ralink Technology, Inc. * * This program is free software; you can redistribute it and/or modify  *  * it under the terms of the GNU General Public License as published by  *  * the Free Software Foundation; either version 2 of the License, or     *  * (at your option) any later version.                                   *  *                                                                       *  * This program is distributed in the hope that it will be useful,       *  * but WITHOUT ANY WARRANTY; without even the implied warranty of        *  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the         *  * GNU General Public License for more details.                          *  *                                                                       *  * You should have received a copy of the GNU General Public License     *  * along with this program; if not, write to the                         *  * Free Software Foundation, Inc.,                                       *  * 59 Temple Place - Suite 330, Boston, MA  02111-1307, USA.             *  *                                                                       *  *************************************************************************	Module Name:	sync.c	Abstract:	Revision History:	Who			When			What	--------	----------		----------------------------------------------	John Chang	2004-09-01      modified for rt2561/2661*/#include "rt_config.h"// 2.4 Ghz channel plan index in the TxPower arrays.#define	BG_BAND_REGION_0_START	0			// 1,2,3,4,5,6,7,8,9,10,11	#define	BG_BAND_REGION_0_SIZE	11#define	BG_BAND_REGION_1_START	0			// 1,2,3,4,5,6,7,8,9,10,11,12,13#define	BG_BAND_REGION_1_SIZE	13#define	BG_BAND_REGION_2_START	9			// 10,11#define	BG_BAND_REGION_2_SIZE	2#define	BG_BAND_REGION_3_START	9			// 10,11,12,13#define	BG_BAND_REGION_3_SIZE	4#define	BG_BAND_REGION_4_START	13			// 14#define	BG_BAND_REGION_4_SIZE	1#define	BG_BAND_REGION_5_START	0			// 1,2,3,4,5,6,7,8,9,10,11,12,13,14 #define	BG_BAND_REGION_5_SIZE	14#define	BG_BAND_REGION_6_START	2			// 3,4,5,6,7,8,9#define	BG_BAND_REGION_6_SIZE	7#define	BG_BAND_REGION_7_START	4			// 5,6,7,8,9,10,11,12,13#define	BG_BAND_REGION_7_SIZE	9#define	BG_BAND_REGION_31_START	0			// 1,2,3,4,5,6,7,8,9,10,11,12,13,14 #define	BG_BAND_REGION_31_SIZE	14// 5 Ghz channel plan index in the TxPower arrays.UCHAR A_BAND_REGION_0_CHANNEL_LIST[]={36, 40, 44, 48, 52, 56, 60, 64, 149, 153, 157, 161, 165};UCHAR A_BAND_REGION_1_CHANNEL_LIST[]={36, 40, 44, 48, 52, 56, 60, 64, 100, 104, 108, 112, 116, 120, 124, 128, 132, 136, 140};UCHAR A_BAND_REGION_2_CHANNEL_LIST[]={36, 40, 44, 48, 52, 56, 60, 64};UCHAR A_BAND_REGION_3_CHANNEL_LIST[]={52, 56, 60, 64, 149, 153, 157, 161};UCHAR A_BAND_REGION_4_CHANNEL_LIST[]={149, 153, 157, 161, 165};UCHAR A_BAND_REGION_5_CHANNEL_LIST[]={149, 153, 157, 161};UCHAR A_BAND_REGION_6_CHANNEL_LIST[]={36, 40, 44, 48};UCHAR A_BAND_REGION_7_CHANNEL_LIST[]={36, 40, 44, 48, 52, 56, 60, 64, 100, 104, 108, 112, 116, 120, 124, 128, 132, 136, 140, 149, 153, 157, 161, 165};UCHAR A_BAND_REGION_8_CHANNEL_LIST[]={52, 56, 60, 64};UCHAR A_BAND_REGION_9_CHANNEL_LIST[]={36, 40, 44, 48, 52, 56, 60, 64, 100, 104, 108, 112, 116, 132, 136, 140, 149, 153, 157, 161, 165};UCHAR A_BAND_REGION_10_CHANNEL_LIST[]={36, 40, 44, 48, 149, 153, 157, 161, 165};UCHAR A_BAND_REGION_11_CHANNEL_LIST[]={36, 40, 44, 48, 52, 56, 60, 64, 100, 104, 108, 112, 116, 120, 149, 153, 157, 161};//BaSizeArray follows the 802.11n definition as MaxRxFactor.  2^(13+factor) bytes. When factor =0, it's about Ba buffer size =8.UCHAR BaSizeArray[4] = {8,16,32,64};/* 	==========================================================================	Description:		Update StaCfg->ChannelList[] according to 1) Country Region 2) RF IC type,		and 3) PHY-mode user selected.		The outcome is used by driver when doing site survey.	IRQL = PASSIVE_LEVEL	IRQL = DISPATCH_LEVEL		========================================================================== */VOID BuildChannelList(	IN PRTMP_ADAPTER pAd){	UCHAR i, j, index=0, num=0;	PUCHAR	pChannelList = NULL;	NdisZeroMemory(pAd->ChannelList, MAX_NUM_OF_CHANNELS * sizeof(CHANNEL_TX_POWER));	// if not 11a-only mode, channel list starts from 2.4Ghz band	if ((pAd->CommonCfg.PhyMode != PHY_11A) #ifdef DOT11_N_SUPPORT		&& (pAd->CommonCfg.PhyMode != PHY_11AN_MIXED) && (pAd->CommonCfg.PhyMode != PHY_11N_5G)#endif // DOT11_N_SUPPORT //	)	{		switch (pAd->CommonCfg.CountryRegion  & 0x7f)		{			case REGION_0_BG_BAND:	// 1 -11				NdisMoveMemory(&pAd->ChannelList[index], &pAd->TxPower[BG_BAND_REGION_0_START], sizeof(CHANNEL_TX_POWER) * BG_BAND_REGION_0_SIZE);				index += BG_BAND_REGION_0_SIZE;				break;			case REGION_1_BG_BAND:	// 1 - 13				NdisMoveMemory(&pAd->ChannelList[index], &pAd->TxPower[BG_BAND_REGION_1_START], sizeof(CHANNEL_TX_POWER) * BG_BAND_REGION_1_SIZE);				index += BG_BAND_REGION_1_SIZE;				break;			case REGION_2_BG_BAND:	// 10 - 11				NdisMoveMemory(&pAd->ChannelList[index], &pAd->TxPower[BG_BAND_REGION_2_START], sizeof(CHANNEL_TX_POWER) * BG_BAND_REGION_2_SIZE);				index += BG_BAND_REGION_2_SIZE;				break;			case REGION_3_BG_BAND:	// 10 - 13				NdisMoveMemory(&pAd->ChannelList[index], &pAd->TxPower[BG_BAND_REGION_3_START], sizeof(CHANNEL_TX_POWER) * BG_BAND_REGION_3_SIZE);				index += BG_BAND_REGION_3_SIZE;				break;			case REGION_4_BG_BAND:	// 14				NdisMoveMemory(&pAd->ChannelList[index], &pAd->TxPower[BG_BAND_REGION_4_START], sizeof(CHANNEL_TX_POWER) * BG_BAND_REGION_4_SIZE);				index += BG_BAND_REGION_4_SIZE;				break;			case REGION_5_BG_BAND:	// 1 - 14				NdisMoveMemory(&pAd->ChannelList[index], &pAd->TxPower[BG_BAND_REGION_5_START], sizeof(CHANNEL_TX_POWER) * BG_BAND_REGION_5_SIZE);				index += BG_BAND_REGION_5_SIZE;				break;			case REGION_6_BG_BAND:	// 3 - 9				NdisMoveMemory(&pAd->ChannelList[index], &pAd->TxPower[BG_BAND_REGION_6_START], sizeof(CHANNEL_TX_POWER) * BG_BAND_REGION_6_SIZE);				index += BG_BAND_REGION_6_SIZE;				break;			case REGION_7_BG_BAND:  // 5 - 13				NdisMoveMemory(&pAd->ChannelList[index], &pAd->TxPower[BG_BAND_REGION_7_START], sizeof(CHANNEL_TX_POWER) * BG_BAND_REGION_7_SIZE);				index += BG_BAND_REGION_7_SIZE;				break;			case REGION_31_BG_BAND:	// 1 - 14				NdisMoveMemory(&pAd->ChannelList[index], &pAd->TxPower[BG_BAND_REGION_31_START], sizeof(CHANNEL_TX_POWER) * BG_BAND_REGION_31_SIZE);				index += BG_BAND_REGION_31_SIZE;				break;			default:            // Error. should never happen				break;		}   		for (i=0; i<index; i++)			pAd->ChannelList[i].MaxTxPwr = 20;	}	if ((pAd->CommonCfg.PhyMode == PHY_11A) || (pAd->CommonCfg.PhyMode == PHY_11ABG_MIXED) #ifdef DOT11_N_SUPPORT		|| (pAd->CommonCfg.PhyMode == PHY_11ABGN_MIXED) || (pAd->CommonCfg.PhyMode == PHY_11AN_MIXED) 		|| (pAd->CommonCfg.PhyMode == PHY_11AGN_MIXED) || (pAd->CommonCfg.PhyMode == PHY_11N_5G)#endif // DOT11_N_SUPPORT //	)	{		switch (pAd->CommonCfg.CountryRegionForABand & 0x7f)		{			case REGION_0_A_BAND:				num = sizeof(A_BAND_REGION_0_CHANNEL_LIST)/sizeof(UCHAR);				pChannelList = A_BAND_REGION_0_CHANNEL_LIST;				break;			case REGION_1_A_BAND:				num = sizeof(A_BAND_REGION_1_CHANNEL_LIST)/sizeof(UCHAR);				pChannelList = A_BAND_REGION_1_CHANNEL_LIST;				break;			case REGION_2_A_BAND:				num = sizeof(A_BAND_REGION_2_CHANNEL_LIST)/sizeof(UCHAR);				pChannelList = A_BAND_REGION_2_CHANNEL_LIST;				break;			case REGION_3_A_BAND:				num = sizeof(A_BAND_REGION_3_CHANNEL_LIST)/sizeof(UCHAR);				pChannelList = A_BAND_REGION_3_CHANNEL_LIST;				break;			case REGION_4_A_BAND:				num = sizeof(A_BAND_REGION_4_CHANNEL_LIST)/sizeof(UCHAR);				pChannelList = A_BAND_REGION_4_CHANNEL_LIST;				break;			case REGION_5_A_BAND:				num = sizeof(A_BAND_REGION_5_CHANNEL_LIST)/sizeof(UCHAR);				pChannelList = A_BAND_REGION_5_CHANNEL_LIST;				break;			case REGION_6_A_BAND:				num = sizeof(A_BAND_REGION_6_CHANNEL_LIST)/sizeof(UCHAR);				pChannelList = A_BAND_REGION_6_CHANNEL_LIST;				break;			case REGION_7_A_BAND:				num = sizeof(A_BAND_REGION_7_CHANNEL_LIST)/sizeof(UCHAR);				pChannelList = A_BAND_REGION_7_CHANNEL_LIST;				break;			case REGION_8_A_BAND:				num = sizeof(A_BAND_REGION_8_CHANNEL_LIST)/sizeof(UCHAR);				pChannelList = A_BAND_REGION_8_CHANNEL_LIST;				break;			case REGION_9_A_BAND:				num = sizeof(A_BAND_REGION_9_CHANNEL_LIST)/sizeof(UCHAR);				pChannelList = A_BAND_REGION_9_CHANNEL_LIST;				break;			case REGION_10_A_BAND:				num = sizeof(A_BAND_REGION_10_CHANNEL_LIST)/sizeof(UCHAR);				pChannelList = A_BAND_REGION_10_CHANNEL_LIST;				break;			case REGION_11_A_BAND:				num = sizeof(A_BAND_REGION_11_CHANNEL_LIST)/sizeof(UCHAR);				pChannelList = A_BAND_REGION_11_CHANNEL_LIST;				break;				default:            // Error. should never happen				DBGPRINT(RT_DEBUG_WARN,("countryregion=%d not support", pAd->CommonCfg.CountryRegionForABand));				break;		}		if (num != 0)		{			UCHAR RadarCh[15]={52, 56, 60, 64, 100, 104, 108, 112, 116, 120, 124, 128, 132, 136, 140};			for (i=0; i<num; i++)			{				for (j=0; j<MAX_NUM_OF_CHANNELS; j++)				{					if (pChannelList[i] == pAd->TxPower[j].Channel)						NdisMoveMemory(&pAd->ChannelList[index+i], &pAd->TxPower[j], sizeof(CHANNEL_TX_POWER));					}				for (j=0; j<15; j++)				{					if (pChannelList[i] == RadarCh[j])						pAd->ChannelList[index+i].DfsReq = TRUE;				}				pAd->ChannelList[index+i].MaxTxPwr = 20;			}			index += num;		}	}	pAd->ChannelListNum = index;		DBGPRINT(RT_DEBUG_TRACE,("country code=%d/%d, RFIC=%d, PHY mode=%d, support %d channels\n", 		pAd->CommonCfg.CountryRegion, pAd->CommonCfg.CountryRegionForABand, pAd->RfIcType, pAd->CommonCfg.PhyMode, pAd->ChannelListNum));#ifdef DBG		for (i=0;i<pAd->ChannelListNum;i++)	{		DBGPRINT_RAW(RT_DEBUG_TRACE,("BuildChannel # %d :: Pwr0 = %d, Pwr1 =%d, \n ", pAd->ChannelList[i].Channel, pAd->ChannelList[i].Power, pAd->ChannelList[i].Power2));	}#endif}/* 	==========================================================================	Description:		This routine return the first channel number according to the country 		code selection and RF IC selection (signal band or dual band). It is called		whenever driver need to start a site survey of all supported channels.	Return:		ch - the first channel number of current country code setting	IRQL = PASSIVE_LEVEL	========================================================================== */UCHAR FirstChannel(	IN PRTMP_ADAPTER pAd){	return pAd->ChannelList[0].Channel;}/* 	==========================================================================	Description:		This routine returns the next channel number. This routine is called		during driver need to start a site survey of all supported channels.	Return:		next_channel - the next channel number valid in current country code setting.	Note:		return 0 if no more next channel	========================================================================== */UCHAR NextChannel(	IN PRTMP_ADAPTER pAd, 	IN UCHAR channel){	int i;	UCHAR next_channel = 0;				for (i = 0; i < (pAd->ChannelListNum - 1); i++)		if (channel == pAd->ChannelList[i].Channel)		{			next_channel = pAd->ChannelList[i+1].Channel;			break;	}	return next_channel;}/* 	==========================================================================	Description:		This routine is for Cisco Compatible Extensions 2.X 		Spec31. AP Control of Client Transmit Power	Return:		None	Note:	   Required by Aironet dBm(mW)		   0dBm(1mW),   1dBm(5mW), 13dBm(20mW), 15dBm(30mW),		  17dBm(50mw), 20dBm(100mW)	   We supported 		   3dBm(Lowest), 6dBm(10%), 9dBm(25%), 12dBm(50%),		  14dBm(75%),   15dBm(100%)		The client station's actual transmit power shall be within +/- 5dB of		the minimum value or next lower value.	========================================================================== */VOID ChangeToCellPowerLimit(	IN PRTMP_ADAPTER pAd,	IN UCHAR         AironetCellPowerLimit){	//valud 0xFF means that hasn't found power limit information 	//from the AP's Beacon/Probe response.	if (AironetCellPowerLimit == 0xFF)		return;  		if (AironetCellPowerLimit < 6) //Used Lowest Power Percentage.		pAd->CommonCfg.TxPowerPercentage = 6; 	else if (AironetCellPowerLimit < 9)		pAd->CommonCfg.TxPowerPercentage = 10;	else if (AironetCellPowerLimit < 12)		pAd->CommonCfg.TxPowerPercentage = 25;	else if (AironetCellPowerLimit < 14)		pAd->CommonCfg.TxPowerPercentage = 50;	else if (AironetCellPowerLimit < 15)		pAd->CommonCfg.TxPowerPercentage = 75;	else		pAd->CommonCfg.TxPowerPercentage = 100; //else used maximum	if (pAd->CommonCfg.TxPowerPercentage > pAd->CommonCfg.TxPowerDefault)		pAd->CommonCfg.TxPowerPercentage = pAd->CommonCfg.TxPowerDefault;	}CHAR	ConvertToRssi(	IN PRTMP_ADAPTER pAd,	IN	CHAR			Rssi,	IN  UCHAR   RssiNumber){	UCHAR	RssiOffset, LNAGain;	// Rssi equals to zero should be an invalid value	if (Rssi == 0)		return -99;	LNAGain = GET_LNA_GAIN(pAd);    if (pAd->LatchRfRegs.Channel > 14)    {        if (RssiNumber == 0)			RssiOffset = pAd->ARssiOffset0;		else if (RssiNumber == 1)			RssiOffset = pAd->ARssiOffset1;		else

⌨️ 快捷键说明

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