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

📄 rt_ate.c

📁 ralink最新rt3070 usb wifi 无线网卡驱动程序
💻 C
📖 第 1 页 / 共 5 页
字号:
/* ************************************************************************* * 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.             *  *                                                                       *  ************************************************************************* */#include "rt_config.h"#ifdef UCOSINT IoctlResponse(PUCHAR payload, PUCHAR msg, INT len);#endif // UCOS //#define ATE_BBP_REG_NUM	168UCHAR restore_BBP[ATE_BBP_REG_NUM]={0};#ifdef RALINK_ATEUCHAR TemplateFrame[24] = {0x08/* Data type */,0x00,0x00,0x00,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0x00,0xAA,0xBB,0x12,0x34,0x56,0x00,0x11,0x22,0xAA,0xBB,0xCC,0x00,0x00};	// 802.11 MAC Header, Type:Data, Length:24bytes extern RTMP_RF_REGS RF2850RegTable[];extern UCHAR NUM_OF_2850_CHNL;#ifdef RT2870extern UCHAR EpToQueue[];extern VOID	RTUSBRejectPendingPackets(	IN	PRTMP_ADAPTER	pAd);#endif // RT2870 //#ifdef RT30xx//2008/07/10:KH adds to support 3070 ATE<--extern FREQUENCY_ITEM FreqItems3020[];extern UCHAR NUM_OF_3020_CHNL;//2008/07/10:KH adds to support 3070 ATE-->#endif // RT30xx //#ifdef UCOSextern INT ConsoleResponse(IN PUCHAR buff);extern int (*remote_display)(char *);#endif // UCOS //static CHAR CCKRateTable[] = {0, 1, 2, 3, 8, 9, 10, 11, -1}; /* CCK Mode. */static CHAR OFDMRateTable[] = {0, 1, 2, 3, 4, 5, 6, 7, -1}; /* OFDM Mode. */static CHAR HTMIXRateTable[] = {0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, -1}; /* HT Mix Mode. */static INT TxDmaBusy(	IN PRTMP_ADAPTER pAd);static INT RxDmaBusy(	IN PRTMP_ADAPTER pAd);static VOID RtmpDmaEnable(	IN PRTMP_ADAPTER pAd,	IN INT Enable);static VOID BbpSoftReset(	IN PRTMP_ADAPTER pAd);static VOID RtmpRfIoWrite(	IN PRTMP_ADAPTER pAd);static INT ATESetUpFrame(	IN PRTMP_ADAPTER pAd,	IN UINT32 TxIdx);static INT ATETxPwrHandler(	IN PRTMP_ADAPTER pAd,	IN char index);static INT ATECmdHandler(	IN	PRTMP_ADAPTER	pAd, 	IN	PUCHAR			arg);static int CheckMCSValid(	IN UCHAR Mode,	IN UCHAR Mcs);#ifdef RT2870static VOID ATEWriteTxInfo(	IN	PRTMP_ADAPTER	pAd,	IN	PTXINFO_STRUC 	pTxInfo,	IN	  USHORT		USBDMApktLen,	IN	  BOOLEAN		bWiv,	IN	  UCHAR			QueueSel,	IN	  UCHAR			NextValid,	IN	  UCHAR			TxBurst);static VOID ATEWriteTxWI(	IN	PRTMP_ADAPTER	pAd,	IN	PTXWI_STRUC 	pTxWI,	IN	BOOLEAN			FRAG,		IN	BOOLEAN			InsTimestamp,	IN	BOOLEAN 		AMPDU,	IN	BOOLEAN 		Ack,	IN	BOOLEAN 		NSeq,		// HW new a sequence.	IN	UCHAR			BASize,	IN	UCHAR			WCID,	IN	ULONG			Length,	IN	UCHAR 			PID,	IN	UCHAR			MIMOps,	IN	UCHAR			Txopmode,		IN	BOOLEAN			CfAck,		IN	HTTRANSMIT_SETTING	Transmit);#endif // RT2870 //static VOID SetJapanFilter(	IN	PRTMP_ADAPTER	pAd);/*=========================end of prototype=========================*/#ifdef RT2870static INT TxDmaBusy(	IN PRTMP_ADAPTER pAd){	INT result;	USB_DMA_CFG_STRUC UsbCfg;	RTMP_IO_READ32(pAd, USB_DMA_CFG, &UsbCfg.word);	// disable DMA	if (UsbCfg.field.TxBusy)		result = 1;	else		result = 0;	return result;}static INT RxDmaBusy(	IN PRTMP_ADAPTER pAd){	INT result;	USB_DMA_CFG_STRUC UsbCfg;	RTMP_IO_READ32(pAd, USB_DMA_CFG, &UsbCfg.word);	// disable DMA	if (UsbCfg.field.RxBusy)		result = 1;	else		result = 0;	return result;}static VOID RtmpDmaEnable(	IN PRTMP_ADAPTER pAd,	IN INT Enable){	BOOLEAN value;	ULONG WaitCnt;	USB_DMA_CFG_STRUC UsbCfg;		value = Enable > 0 ? 1 : 0;	// check DMA is in busy mode.	WaitCnt = 0;	while (TxDmaBusy(pAd) || RxDmaBusy(pAd))	{		RTMPusecDelay(10);		if (WaitCnt++ > 100)			break;	}	//Why not to clear USB DMA TX path first ???	RTMP_IO_READ32(pAd, USB_DMA_CFG, &UsbCfg.word);	// disable DMA	UsbCfg.field.TxBulkEn = value;	UsbCfg.field.RxBulkEn = value;	RTMP_IO_WRITE32(pAd, USB_DMA_CFG, UsbCfg.word);	// abort all TX rings	RTMPusecDelay(5000);	return;}#endif // RT2870 //static VOID BbpSoftReset(	IN PRTMP_ADAPTER pAd){	UCHAR BbpData = 0;	// Soft reset, set BBP R21 bit0=1->0	ATE_BBP_IO_READ8_BY_REG_ID(pAd, BBP_R21, &BbpData);	BbpData |= 0x00000001; //set bit0=1	ATE_BBP_IO_WRITE8_BY_REG_ID(pAd, BBP_R21, BbpData);	ATE_BBP_IO_READ8_BY_REG_ID(pAd, BBP_R21, &BbpData);	BbpData &= ~(0x00000001); //set bit0=0	ATE_BBP_IO_WRITE8_BY_REG_ID(pAd, BBP_R21, BbpData);	return;}static VOID RtmpRfIoWrite(	IN PRTMP_ADAPTER pAd){	// Set RF value 1's set R3[bit2] = [0]	RTMP_RF_IO_WRITE32(pAd, pAd->LatchRfRegs.R1);	RTMP_RF_IO_WRITE32(pAd, pAd->LatchRfRegs.R2);	RTMP_RF_IO_WRITE32(pAd, (pAd->LatchRfRegs.R3 & (~0x04)));	RTMP_RF_IO_WRITE32(pAd, pAd->LatchRfRegs.R4);	RTMPusecDelay(200);	// Set RF value 2's set R3[bit2] = [1]	RTMP_RF_IO_WRITE32(pAd, pAd->LatchRfRegs.R1);	RTMP_RF_IO_WRITE32(pAd, pAd->LatchRfRegs.R2);	RTMP_RF_IO_WRITE32(pAd, (pAd->LatchRfRegs.R3 | 0x04));	RTMP_RF_IO_WRITE32(pAd, pAd->LatchRfRegs.R4);	RTMPusecDelay(200);	// Set RF value 3's set R3[bit2] = [0]	RTMP_RF_IO_WRITE32(pAd, pAd->LatchRfRegs.R1);	RTMP_RF_IO_WRITE32(pAd, pAd->LatchRfRegs.R2);	RTMP_RF_IO_WRITE32(pAd, (pAd->LatchRfRegs.R3 & (~0x04)));	RTMP_RF_IO_WRITE32(pAd, pAd->LatchRfRegs.R4);	return;}static int CheckMCSValid(	UCHAR Mode,	UCHAR Mcs){	int i;	PCHAR pRateTab;	switch(Mode)	{		case 0:			pRateTab = CCKRateTable;			break;		case 1:			pRateTab = OFDMRateTable;			break;		case 2:		case 3:			pRateTab = HTMIXRateTable;			break;		default: 			ATEDBGPRINT(RT_DEBUG_ERROR, ("unrecognizable Tx Mode %d\n", Mode));			return -1;			break;	}	i = 0;	while(pRateTab[i] != -1)	{		if (pRateTab[i] == Mcs)			return 0;		i++;	}	return -1;}#if 1static INT ATETxPwrHandler(	IN PRTMP_ADAPTER pAd,	IN char index){	ULONG R;	CHAR TxPower;	UCHAR Bbp94 = 0;	BOOLEAN bPowerReduce = FALSE;#ifdef RT30xx	UCHAR RFValue;#endif // RT30xx //#ifdef RALINK_28xx_QA	if ((pAd->ate.bQATxStart == TRUE) || (pAd->ate.bQARxStart == TRUE))	{		/* When QA is used for Tx, pAd->ate.TxPower0/1 and real tx power		** are not synchronized.		*//*		pAd->ate.TxPower0 = pAd->LatchRfRegs.xxx;		pAd->ate.TxPower1 = pAd->LatchRfRegs.xxx;*/		return 0;	}	else#endif // RALINK_28xx_QA //	{		TxPower = index == 0 ? pAd->ate.TxPower0 : pAd->ate.TxPower1;		if (pAd->ate.Channel <= 14)		{			if (TxPower > 31)			{				//				// R3, R4 can't large than 31 (0x24), 31 ~ 36 used by BBP 94				//				R = 31;				if (TxPower <= 36)					Bbp94 = BBPR94_DEFAULT + (UCHAR)(TxPower - 31);					}			else if (TxPower < 0)			{				//				// R3, R4 can't less than 0, -1 ~ -6 used by BBP 94				//					R = 0;				if (TxPower >= -6)					Bbp94 = BBPR94_DEFAULT + TxPower;			}			else			{  				// 0 ~ 31				R = (ULONG) TxPower;				Bbp94 = BBPR94_DEFAULT;			}			ATEDBGPRINT(RT_DEBUG_TRACE, ("%s (TxPower=%d, R=%ld, BBP_R94=%d)\n", __FUNCTION__, TxPower, R, Bbp94));		}		else// 5.5 GHz		{			if (TxPower > 15)			{				//				// R3, R4 can't large than 15 (0x0F)				//				R = 15;			}			else if (TxPower < 0)			{				//				// R3, R4 can't less than 0				//					// -1 ~ -7				ASSERT((TxPower >= -7));				R = (ULONG)(TxPower + 7);				bPowerReduce = TRUE;			}			else			{  				// 0 ~ 15				R = (ULONG) TxPower;			}			ATEDBGPRINT(RT_DEBUG_TRACE, ("%s (TxPower=%d, R=%lu)\n", __FUNCTION__, TxPower, R));		}//2008/09/10:KH adds to support 3070 ATE TX Power tunning real time<--#ifdef RT30xx		if(IS_RT30xx(pAd))		{			// Set Tx Power					RT30xxReadRFRegister(pAd, RF_R12, (PUCHAR)&RFValue);					RFValue = (RFValue & 0xE0) | TxPower;					RT30xxWriteRFRegister(pAd, RF_R12, (UCHAR)RFValue);					ATEDBGPRINT(RT_DEBUG_TRACE, ("3070 or 2070:%s (TxPower=%d, RFValue=%x)\n", __FUNCTION__, TxPower, RFValue));		}		else#endif // RT30xx //	      {		if (pAd->ate.Channel <= 14)		{			if (index == 0)			{				R = R << 9;		// shift TX power control to correct RF(R3) register bit position				R |= (pAd->LatchRfRegs.R3 & 0xffffc1ff);				pAd->LatchRfRegs.R3 = R;			}			else			{				R = R << 6;		// shift TX power control to correct RF(R4) register bit position				R |= (pAd->LatchRfRegs.R4 & 0xfffff83f);				pAd->LatchRfRegs.R4 = R;			}		}		else// 5.5GHz		{			if (bPowerReduce == FALSE)			{				if (index == 0)				{					R = (R << 10) | (1 << 9);		// shift TX power control to correct RF(R3) register bit position					R |= (pAd->LatchRfRegs.R3 & 0xffffc1ff);					pAd->LatchRfRegs.R3 = R;				}				else				{					R = (R << 7) | (1 << 6);		// shift TX power control to correct RF(R4) register bit position					R |= (pAd->LatchRfRegs.R4 & 0xfffff83f);					pAd->LatchRfRegs.R4 = R;				}			}			else			{				if (index == 0)				{					R = (R << 10);		// shift TX power control to correct RF(R3) register bit position					R |= (pAd->LatchRfRegs.R3 & 0xffffc1ff);					/* Clear bit 9 of R3 to reduce 7dB. */ 					pAd->LatchRfRegs.R3 = (R & (~(1 << 9)));				}				else				{					R = (R << 7);		// shift TX power control to correct RF(R4) register bit position					R |= (pAd->LatchRfRegs.R4 & 0xfffff83f);					/* Clear bit 6 of R4 to reduce 7dB. */ 					pAd->LatchRfRegs.R4 = (R & (~(1 << 6)));				}			}		}		RtmpRfIoWrite(pAd);           }//2008/09/10:KH adds to support 3070 ATE TX Power tunning real time-->		return 0;	}}#else// 1 //static INT ATETxPwrHandler(	IN PRTMP_ADAPTER pAd,	IN char index){	ULONG R;	CHAR TxPower;	UCHAR Bbp94 = 0;	#ifdef RALINK_28xx_QA	if ((pAd->ate.bQATxStart == TRUE) || (pAd->ate.bQARxStart == TRUE))	{		// TODO: how to get current TxPower0/1 from pAd->LatchRfRegs ?		/* When QA is used for Tx, pAd->ate.TxPower0/1 and real tx power		** are not synchronized.		*//*		pAd->ate.TxPower0 = pAd->LatchRfRegs.xxx;		pAd->ate.TxPower1 = pAd->LatchRfRegs.xxx;*/		return 0;	}	else#endif // RALINK_28xx_QA //	{		TxPower = index == 0 ? pAd->ate.TxPower0 : pAd->ate.TxPower1;	if (TxPower > 31)	{		//		// R3, R4 can't large than 36 (0x24), 31 ~ 36 used by BBP 94		//		R = 31;		if (TxPower <= 36)			Bbp94 = BBPR94_DEFAULT + (UCHAR)(TxPower - 31);			}	else if (TxPower < 0)	{		//		// R3, R4 can't less than 0, -1 ~ -6 used by BBP 94		//			R = 0;		if (TxPower >= -6)			Bbp94 = BBPR94_DEFAULT + TxPower;	}	else	{  		// 0 ~ 31		R = (ULONG) TxPower;		Bbp94 = BBPR94_DEFAULT;	}	ATEDBGPRINT(RT_DEBUG_TRACE, ("%s (TxPower=%d, R3=%ld, BBP_R94=%d)\n", __FUNCTION__, TxPower, R, Bbp94));		if (pAd->ate.Channel <= 14)		{	if (index == 0)	{		R = R << 9;		// shift TX power control to correct RF(R3) register bit position		R |= (pAd->LatchRfRegs.R3 & 0xffffc1ff);		pAd->LatchRfRegs.R3 = R;	}	else	{		R = R << 6;		// shift TX power control to correct RF(R4) register bit position

⌨️ 快捷键说明

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