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

📄 rt_ate.c

📁 ralink 2870 usb无线网卡 最新驱动
💻 C
📖 第 1 页 / 共 5 页
字号:
 			for (i=0; i<5; i++) 			{				if (pAd->Tx20MPwrCfgABand[i] != 0xffffffff) 				{					RTMP_IO_WRITE32(pAd, TX_PWR_CFG_0 + i*4, pAd->Tx20MPwrCfgABand[i]);	 					RTMPusecDelay(5000);				 				} 			}		} 		// 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			(to set 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);							}		}		// set BW = 20 MHz		{			pAd->LatchRfRegs.R4 &= ~0x00200000;			RtmpRfIoWrite(pAd);		}			}	// If bandwidth = 40M, set RF Reg4 bit 21 = 0.	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.		// set BW = 40 MHz		{		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	PSTRING			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	PSTRING			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	PSTRING			arg){	UCHAR MCS;	INT result;	MCS = simple_strtol(arg, 0, 10);	result = CheckMCSValid(pAd->ate.TxWI.PHYMODE, MCS);	/* RT35xx ATE will reuse this code segment. */			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	PSTRING			arg){	UCHAR BbpData = 0;	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.\nIt 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;	}	// Turn on BBP 20MHz mode by request here.	if (pAd->ate.TxWI.PHYMODE == MODE_CCK)	{		ATE_BBP_IO_READ8_BY_REG_ID(pAd, BBP_R4, &BbpData);		BbpData &= (~0x18);		ATE_BBP_IO_WRITE8_BY_REG_ID(pAd, BBP_R4, BbpData);		ATEDBGPRINT(RT_DEBUG_ERROR, ("Set_ATE_TX_MODE_Proc::CCK Only support 20MHZ. Switch to 20MHZ.\n"));	}	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	PSTRING			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;}INT	Set_ATE_RX_FER_Proc(	IN	PRTMP_ADAPTER	pAd, 	IN	PSTRING			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	PSTRING			arg){	{		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	PSTRING			arg){	UINT32 value = (UINT32) simple_strtol(arg, 0, 16);		{		pAd->LatchRfRegs.R1 = value;		RtmpRfIoWrite(pAd);	}	return TRUE;}INT Set_ATE_Write_RF2_Proc(	IN	PRTMP_ADAPTER	pAd, 	IN	PSTRING			arg){	UINT32 value = (UINT32) simple_strtol(arg, 0, 16);	{		pAd->LatchRfRegs.R2 = value;		RtmpRfIoWrite(pAd);	}	return TRUE;}INT Set_ATE_Write_RF3_Proc(	IN	PRTMP_ADAPTER	pAd, 	IN	PSTRING			arg){	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	PSTRING			arg){	UINT32 value = (UINT32) simple_strtol(arg, 0, 16);	{		pAd->LatchRfRegs.R4 = value;		RtmpRfIoWrite(pAd);	}	return TRUE;}/* ==========================================================================    Description:        Load and Write EEPROM from a binary file prepared in advance.                Return:        	TRUE if all parameters are OK, FALSE otherwise==========================================================================*/#if defined(LINUX) || defined(VXWORKS)INT Set_ATE_Load_E2P_Proc(	IN	PRTMP_ADAPTER	pAd, 	IN	PSTRING			arg){	BOOLEAN		    	ret = FALSE;	PSTRING			src = EEPROM_BIN_FILE_NAME;	RTMP_OS_FD		srcf;	INT32 			retval;	USHORT 			WriteEEPROM[(EEPROM_SIZE/2)];	INT				FileLength = 0;	UINT32 			value = (UINT32) simple_strtol(arg, 0, 10);	RTMP_OS_FS_INFO	osFSInfo;	ATEDBGPRINT(RT_DEBUG_ERROR, ("===> %s (value=%d)\n\n", __FUNCTION__, value));	if (value > 0)	{		/* zero the e2p buffer */		NdisZeroMemory((PUCHAR)WriteEEPROM, EEPROM_SIZE);		RtmpOSFSInfoChange(&osFSInfo, TRUE);		do		{			/* open the bin file */			srcf = RtmpOSFileOpen(src, O_RDONLY, 0);			if (IS_FILE_OPEN_ERR(srcf)) 			{				ate_print("%s - Error opening file %s\n", __FUNCTION__, src);				break;			}			/* read the firmware from the file *.bin */			FileLength = RtmpOSFileRead(srcf, (PSTRING)WriteEEPROM, EEPROM_SIZE);			if (FileLength != EEPROM_SIZE)			{				ate_print("%s: error file length (=%d) in e2p.bin\n",					   __FUNCTION__, FileLength);				break;			}			else			{				/* write the content of .bin file to EEPROM */				rt_ee_write_all(pAd, WriteEEPROM);				ret = TRUE;			}			break;		} while(TRUE);		/* close firmware file */		if (IS_FILE_OPEN_ERR(srcf))		{				;		}		else		{			retval = RtmpOSFileClose(srcf);						if (retval)			{				ATEDBGPRINT(RT_DEBUG_ERROR, ("--> Error %d closing %s\n", -retval, src));							} 		}		/* restore */		RtmpOSFSInfoChange(&osFSInfo, FALSE);			}    ATEDBGPRINT(RT_DEBUG_ERROR, ("<=== %s (ret=%d)\n", __FUNCTION__, ret));    return ret;	}#endif // defined(LINUX) || defined(VXWORKS) //#ifdef UCOSINT Set_ATE_Load_E2P_Proc(	IN	PRTMP_ADAPTER	pAd, 	IN	PCHAR			arg){	USHORT WriteEEPROM[(EEPROM_SIZE/2)];	struct iwreq *wrq = (struct iwreq *)arg;		ATEDBGPRINT(RT_DEBUG_TRACE, ("===> %s (wrq->u.data.length = %d)\n\n", __FUNCTION__, wrq->u.data.length));	if (wrq->u.data.length != EEPROM_SIZE)	{		ate_print("%s: error length (=%d) from host\n",			   __FUNCTION__, wrq->u.data.length);		return FALSE;	}	else/* (wrq->u.data.length == EEPROM_SIZE) */	{		/* zero the e2p buffer */		NdisZeroMemory((PUCHAR)WriteEEPROM, EEPROM_SIZE);		/* fill the local buffer */		NdisMoveMemory((PUCHAR)WriteEEPROM, wrq->u.data.pointer, wrq->u.data.length);		do		{			/* write the content of .bin file to EEPROM */			rt_ee_write_all(pAd, WriteEEPROM);						} while(FALSE);	}    ATEDBGPRINT(RT_DEBUG_TRACE, ("<=== %s\n", __FUNCTION__));    return TRUE;	}#endif // UCOS //INT Set_ATE_Read_E2P_Proc(	IN	PRTMP_ADAPTER	pAd, 	IN	PSTRING			arg){	USHORT buffer[EEPROM_SIZE/2];	USHORT *p;	int i;		rt_ee_read_all(pAd, (USHORT *)b

⌨️ 快捷键说明

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