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

📄 rt_ate.c

📁 ralink最新rt3070 usb wifi 无线网卡驱动程序
💻 C
📖 第 1 页 / 共 5 页
字号:
		//Set BBP R4 bit[4:3]=0:0 		ATE_BBP_IO_READ8_BY_REG_ID(pAd, BBP_R4, &value); 		value &= (~0x18); 		ATE_BBP_IO_WRITE8_BY_REG_ID(pAd, BBP_R4, value);   		//Set BBP R66=0x3C 		value = 0x3C; 		ATE_BBP_IO_WRITE8_BY_REG_ID(pAd, BBP_R66, value);		//Set BBP R68=0x0B		//to improve Rx sensitivity.		value = 0x0B;		ATE_BBP_IO_WRITE8_BY_REG_ID(pAd, BBP_R68, value);		//Set BBP R69=0x16		value = 0x16; 		ATE_BBP_IO_WRITE8_BY_REG_ID(pAd, BBP_R69, value);		//Set BBP R70=0x08		value = 0x08; 		ATE_BBP_IO_WRITE8_BY_REG_ID(pAd, BBP_R70, value);		//Set BBP R73=0x11		value = 0x11; 		ATE_BBP_IO_WRITE8_BY_REG_ID(pAd, BBP_R73, value);	    // If Channel=14, Bandwidth=20M and Mode=CCK, Set BBP R4 bit5=1	    // (Japan filter coefficients)	    // This segment of code will only works when ATETXMODE and ATECHANNEL	    // were set to MODE_CCK and 14 respectively before ATETXBW is set to 0.	    //=====================================================================		if (pAd->ate.Channel == 14)		{			int TxMode = pAd->ate.TxWI.PHYMODE;			if (TxMode == MODE_CCK)			{				// when Channel==14 && Mode==CCK && BandWidth==20M, BBP R4 bit5=1 				ATE_BBP_IO_READ8_BY_REG_ID(pAd, BBP_R4, &value);				value |= 0x20; //set bit5=1 				ATE_BBP_IO_WRITE8_BY_REG_ID(pAd, BBP_R4, value);							}		}	    //=====================================================================		// If bandwidth != 40M, RF Reg4 bit 21 = 0.#ifdef RT30xx	// Set BW		if(IS_RT30xx(pAd))			RT30xxWriteRFRegister(pAd, RF_R24, (UCHAR) pAd->Mlme.CaliBW20RfR24);		else#endif // RT30xx //		{		pAd->LatchRfRegs.R4 &= ~0x00200000;		RtmpRfIoWrite(pAd);	}			}	else if(pAd->ate.TxWI.BW == BW_40)	{		if(pAd->ate.Channel <= 14)		{			for (i=0; i<5; i++)			{				if (pAd->Tx40MPwrCfgGBand[i] != 0xffffffff)				{					RTMP_IO_WRITE32(pAd, TX_PWR_CFG_0 + i*4, pAd->Tx40MPwrCfgGBand[i]);						RTMPusecDelay(5000);								}			}		}		else		{			for (i=0; i<5; i++)			{				if (pAd->Tx40MPwrCfgABand[i] != 0xffffffff)				{					RTMP_IO_WRITE32(pAd, TX_PWR_CFG_0 + i*4, pAd->Tx40MPwrCfgABand[i]);						RTMPusecDelay(5000);								}			}		#ifdef DOT11_N_SUPPORT			if ((pAd->ate.TxWI.PHYMODE >= MODE_HTMIX) && (pAd->ate.TxWI.MCS == 7))			{    			value = 0x28;    			ATE_BBP_IO_WRITE8_BY_REG_ID(pAd, BBP_R67, value);			}#endif // DOT11_N_SUPPORT //		}		//Set BBP R4 bit[4:3]=1:0		ATE_BBP_IO_READ8_BY_REG_ID(pAd, BBP_R4, &value);		value &= (~0x18);		value |= 0x10;		ATE_BBP_IO_WRITE8_BY_REG_ID(pAd, BBP_R4, value);		//Set BBP R66=0x3C		value = 0x3C;		ATE_BBP_IO_WRITE8_BY_REG_ID(pAd, BBP_R66, value);		//Set BBP R68=0x0C		//to improve Rx sensitivity.		value = 0x0C;		ATE_BBP_IO_WRITE8_BY_REG_ID(pAd, BBP_R68, value);		//Set BBP R69=0x1A		value = 0x1A;		ATE_BBP_IO_WRITE8_BY_REG_ID(pAd, BBP_R69, value);		//Set BBP R70=0x0A		value = 0x0A;		ATE_BBP_IO_WRITE8_BY_REG_ID(pAd, BBP_R70, value);		//Set BBP R73=0x16		value = 0x16;		ATE_BBP_IO_WRITE8_BY_REG_ID(pAd, BBP_R73, value);		// If bandwidth = 40M, set RF Reg4 bit 21 = 1.#ifdef RT30xx	// Set BW		if(IS_RT30xx(pAd))			RT30xxWriteRFRegister(pAd, RF_R24, (UCHAR) pAd->Mlme.CaliBW40RfR24);		else#endif // RT30xx //		{			pAd->LatchRfRegs.R4 |= 0x00200000;			RtmpRfIoWrite(pAd);		}	}	ATEDBGPRINT(RT_DEBUG_TRACE, ("Set_ATE_TX_BW_Proc (BBPCurrentBW = %d)\n", pAd->ate.TxWI.BW));	ATEDBGPRINT(RT_DEBUG_TRACE, ("Ralink: Set_ATE_TX_BW_Proc Success\n"));		return TRUE;}/*     ==========================================================================    Description:        Set ATE Tx frame length            Return:        TRUE if all parameters are OK, FALSE otherwise    ==========================================================================*/INT	Set_ATE_TX_LENGTH_Proc(	IN	PRTMP_ADAPTER	pAd, 	IN	PUCHAR			arg){	pAd->ate.TxLength = simple_strtol(arg, 0, 10);	if((pAd->ate.TxLength < 24) || (pAd->ate.TxLength > (MAX_FRAME_SIZE - 34/* == 2312 */)))	{		pAd->ate.TxLength = (MAX_FRAME_SIZE - 34/* == 2312 */);		ATEDBGPRINT(RT_DEBUG_ERROR, ("Set_ATE_TX_LENGTH_Proc::Out of range, it should be in range of 24~%d.\n", (MAX_FRAME_SIZE - 34/* == 2312 */)));		return FALSE;	}	ATEDBGPRINT(RT_DEBUG_TRACE, ("Set_ATE_TX_LENGTH_Proc (TxLength = %d)\n", pAd->ate.TxLength));	ATEDBGPRINT(RT_DEBUG_TRACE, ("Ralink: Set_ATE_TX_LENGTH_Proc Success\n"));		return TRUE;}/*     ==========================================================================    Description:        Set ATE Tx frame count            Return:        TRUE if all parameters are OK, FALSE otherwise    ==========================================================================*/INT	Set_ATE_TX_COUNT_Proc(	IN	PRTMP_ADAPTER	pAd, 	IN	PUCHAR			arg){	pAd->ate.TxCount = simple_strtol(arg, 0, 10);	ATEDBGPRINT(RT_DEBUG_TRACE, ("Set_ATE_TX_COUNT_Proc (TxCount = %d)\n", pAd->ate.TxCount));	ATEDBGPRINT(RT_DEBUG_TRACE, ("Ralink: Set_ATE_TX_COUNT_Proc Success\n"));		return TRUE;}/*     ==========================================================================    Description:        Set ATE Tx frame MCS                Return:        	TRUE if all parameters are OK, FALSE otherwise    ==========================================================================*/INT	Set_ATE_TX_MCS_Proc(	IN	PRTMP_ADAPTER	pAd,	IN	PUCHAR			arg){	UCHAR MCS;	int result;	MCS = simple_strtol(arg, 0, 10);	result = CheckMCSValid(pAd->ate.TxWI.PHYMODE, MCS);	if (result != -1)	{		pAd->ate.TxWI.MCS = (UCHAR)MCS;	}	else	{		ATEDBGPRINT(RT_DEBUG_ERROR, ("Set_ATE_TX_MCS_Proc::Out of range, refer to rate table.\n"));		return FALSE;	}	ATEDBGPRINT(RT_DEBUG_TRACE, ("Set_ATE_TX_MCS_Proc (MCS = %d)\n", pAd->ate.TxWI.MCS));	ATEDBGPRINT(RT_DEBUG_TRACE, ("Ralink: Set_ATE_TX_MCS_Proc Success\n"));		return TRUE;}/*     ==========================================================================    Description:        Set ATE Tx frame Mode        0: MODE_CCK        1: MODE_OFDM        2: MODE_HTMIX        3: MODE_HTGREENFIELD                Return:        	TRUE if all parameters are OK, FALSE otherwise    ==========================================================================*/INT	Set_ATE_TX_MODE_Proc(	IN	PRTMP_ADAPTER	pAd,	IN	PUCHAR			arg){	pAd->ate.TxWI.PHYMODE = simple_strtol(arg, 0, 10);	if(pAd->ate.TxWI.PHYMODE > 3)	{		pAd->ate.TxWI.PHYMODE = 0;		ATEDBGPRINT(RT_DEBUG_ERROR, ("Set_ATE_TX_MODE_Proc::Out of range. it should be in range of 0~3\n"));		ATEDBGPRINT(RT_DEBUG_ERROR, ("0: CCK, 1: OFDM, 2: HT_MIX, 3: HT_GREEN_FIELD.\n"));		return FALSE;	}	ATEDBGPRINT(RT_DEBUG_TRACE, ("Set_ATE_TX_MODE_Proc (TxMode = %d)\n", pAd->ate.TxWI.PHYMODE));	ATEDBGPRINT(RT_DEBUG_TRACE, ("Ralink: Set_ATE_TX_MODE_Proc Success\n"));		return TRUE;}/*     ==========================================================================    Description:        Set ATE Tx frame GI                Return:        	TRUE if all parameters are OK, FALSE otherwise    ==========================================================================*/INT	Set_ATE_TX_GI_Proc(	IN	PRTMP_ADAPTER	pAd,	IN	PUCHAR			arg){	pAd->ate.TxWI.ShortGI = simple_strtol(arg, 0, 10);	if(pAd->ate.TxWI.ShortGI > 1)	{		pAd->ate.TxWI.ShortGI = 0;		ATEDBGPRINT(RT_DEBUG_ERROR, ("Set_ATE_TX_GI_Proc::Out of range\n"));		return FALSE;	}	ATEDBGPRINT(RT_DEBUG_TRACE, ("Set_ATE_TX_GI_Proc (GI = %d)\n", pAd->ate.TxWI.ShortGI));	ATEDBGPRINT(RT_DEBUG_TRACE, ("Ralink: Set_ATE_TX_GI_Proc Success\n"));		return TRUE;}/*    ==========================================================================    Description:    ========================================================================== */INT	Set_ATE_RX_FER_Proc(	IN	PRTMP_ADAPTER	pAd, 	IN	PUCHAR			arg){	pAd->ate.bRxFer = simple_strtol(arg, 0, 10);	if (pAd->ate.bRxFer == 1)	{		pAd->ate.RxCntPerSec = 0;		pAd->ate.RxTotalCnt = 0;	}	ATEDBGPRINT(RT_DEBUG_TRACE, ("Set_ATE_RX_FER_Proc (bRxFer = %d)\n", pAd->ate.bRxFer));	ATEDBGPRINT(RT_DEBUG_TRACE, ("Ralink: Set_ATE_RX_FER_Proc Success\n"));		return TRUE;}INT Set_ATE_Read_RF_Proc(	IN	PRTMP_ADAPTER	pAd, 	IN	PUCHAR			arg){#ifdef RT30xx//2008/07/10:KH add to support RT30xx ATE<--	if(IS_RT30xx(pAd))	{			/* modify by WY for Read RF Reg. error */		UCHAR RFValue;		INT index=0;		for (index = 0; index < 32; index++)		{			RT30xxReadRFRegister(pAd, index, (PUCHAR)&RFValue);			printk("R%d=%d\n",index,RFValue);		}			}	else//2008/07/10:KH add to support RT30xx ATE-->#endif // RT30xx //	{		ate_print(KERN_EMERG "R1 = %lx\n", pAd->LatchRfRegs.R1);		ate_print(KERN_EMERG "R2 = %lx\n", pAd->LatchRfRegs.R2);		ate_print(KERN_EMERG "R3 = %lx\n", pAd->LatchRfRegs.R3);		ate_print(KERN_EMERG "R4 = %lx\n", pAd->LatchRfRegs.R4);	}	return TRUE;}INT Set_ATE_Write_RF1_Proc(	IN	PRTMP_ADAPTER	pAd, 	IN	PUCHAR			arg){#ifdef RT30xx//2008/07/10:KH add to support 3070 ATE<--	if(IS_RT30xx(pAd))	{		printk("Warning!! RT30xx Don't Support\n");		return FALSE;				}	else//2008/07/10:KH add to support 3070 ATE-->#endif // RT30xx //	{		UINT32 value = simple_strtol(arg, 0, 16);		pAd->LatchRfRegs.R1 = value;		RtmpRfIoWrite(pAd);	}	return TRUE;}INT Set_ATE_Write_RF2_Proc(	IN	PRTMP_ADAPTER	pAd, 	IN	PUCHAR			arg){#ifdef RT30xx//2008/07/10:KH add to support 3070 ATE<--	if(IS_RT30xx(pAd))	{		printk("Warning!! RT30xx Don't Support\n");		return FALSE;				}	else//2008/07/10:KH add to support 3070 ATE-->#endif // RT30xx //	{		UINT32 value = simple_strtol(arg, 0, 16);		pAd->LatchRfRegs.R2 = value;		RtmpRfIoWrite(pAd);	}	return TRUE;}INT Set_ATE_Write_RF3_Proc(	IN	PRTMP_ADAPTER	pAd, 	IN	PUCHAR			arg){#ifdef RT30xx//2008/07/10:KH add to support 3070 ATE<--	if(IS_RT30xx(pAd))	{		printk("Warning!! RT30xx Don't Support\n");		return FALSE;				}	else//2008/07/10:KH add to support 3070 ATE-->#endif // RT30xx //	{		UINT32 value = simple_strtol(arg, 0, 16);		pAd->LatchRfRegs.R3 = value;		RtmpRfIoWrite(pAd);	}	return TRUE;}INT Set_ATE_Write_RF4_Proc(	IN	PRTMP_ADAPTER	pAd, 	IN	PUCHAR			arg){#ifdef RT30xx//2008/07/10:KH add to support 3070 ATE<--	if(IS_RT30xx(pAd))	{		printk("Warning!! RT30xx Don't Support\n");		return FALSE;				}	else//2008/07/10:KH add to support 3070 ATE-->#endif // RT30xx //	{		UINT32 value = simple_strtol(arg, 0, 16);		pAd->LatchRfRegs.R4 = value;		RtmpRfIoWrite(pAd);	}	return TRUE;}#ifdef RT30xx//2008/07/10:KH add to support 3070 ATE<--INT	SET_ATE_3070RF_Proc(	IN	PRTMP_ADAPTER	pAd, 	IN	PUCHAR			arg){	CHAR *this_char;	CHAR *value;	UINT32 Reg,RFValue; 	if(IS_RT30xx(pAd))	{		printk("SET_ATE_3070RF_Proc=%s\n",arg);		this_char =arg;		if ((value = strchr(this_char, ':')) != NULL)			*value++ = 0;		Reg= simple_strtol(this_char, 0, 16);		RFValue= simple_strtol(value, 0, 16);		printk("RF Reg[%d]=%d\n",Reg,RFValue);		RT30xxWriteRFRegister(pAd, Reg,RFValue);	}	else		printk("Warning!! Only 3070 Support\n");	return TRUE;}//2008/07/10:KH add to support 3070 ATE-->#endif // RT30xx ///*     ==========================================================================    Description:        Load and Write EEPROM from a binary file prepared in advance.                Return:        	TRUE if all parameters are OK, FALSE otherwise    ==========================================================================*/#ifndef UCOSINT Set_ATE_Load_E2P_Proc(	IN	PRTMP_ADAPTER	pAd, 	IN	PUCHAR			arg){	BOOLEAN		    ret = FALSE;	PUCHAR			src = EEPROM_BIN_FILE_NAME;	struct file		*srcf;	INT32 			retval, orgfsuid, orgfsgid;   	mm_segment_t	orgfs;	USHORT 			WriteEEPROM[(EEPROM_SIZE/2)];	UINT32			FileLength = 0;	UINT32 			value = simple_strtol(arg, 0, 10);		ATEDBGPRINT(RT_DEBUG_ERROR, ("===> %s (value=%d)\n\n", __FUNCTION__, value));	if (value > 0)	{		/* zero the e2p buffer */		NdisZeroMemory((PUCHAR)WriteEEPROM, EEPROM_SIZE);		/* save uid and gid used for filesystem access.	    ** set user and group to 0 (root)	    */		orgfsuid = current->fsuid;		orgfsgid = current->fsgid;		/* as root */		current->fsuid = current->fsgid = 0;    	orgfs = get_fs();    	set_fs(KERNEL_DS);		do		{			/* open the bin file */

⌨️ 快捷键说明

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