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

📄 rt_ate.c

📁 ralink最新rt3070 usb wifi 无线网卡驱动程序
💻 C
📖 第 1 页 / 共 5 页
字号:
		RTMP_IO_READ32(pAd, MAC_SYS_CTRL, &Value);		Value |= (1 << 3);		RTMP_IO_WRITE32(pAd, MAC_SYS_CTRL, Value);		// Wait 10ms to wait all of the bulk-in URBs to complete.		/* todo : remove this if not necessary */		NdisMSleep(10000);		// Everything is ready to start normal Tx/Rx.		RTUSBBulkReceive(pAd);		netif_start_queue(pAd->net_dev);		ATEDBGPRINT(RT_DEBUG_TRACE, ("<=== ATE : ATESTOP \n"));	}	else if (!strcmp(arg, "TXCARR"))	// Tx Carrier	{		ATEDBGPRINT(RT_DEBUG_TRACE, ("ATE: TXCARR\n"));		pAd->ate.Mode |= ATE_TXCARR;#ifdef RT30xx			for(i=0;i<ATE_BBP_REG_NUM;i++)				restore_BBP[i]=0;			//Record All BBP Value			for(i=0;i<ATE_BBP_REG_NUM;i++)			ATE_BBP_IO_READ8_BY_REG_ID(pAd,i,&restore_BBP[i]);#endif // RT30xx //		// Disable Rx		// May be we need not to do this, because these have been done in ATE_START mode ???		RTMP_IO_READ32(pAd, MAC_SYS_CTRL, &Value);		Value &= ~(1 << 3);		RTMP_IO_WRITE32(pAd, MAC_SYS_CTRL, Value);		// QA has done the following steps if it is used.		if (pAd->ate.bQATxStart == FALSE) 		{			// Soft reset BBP.			BbpSoftReset(pAd);			// Carrier Test set BBP R22 bit7=1, bit6=1, bit[5~0]=0x01			ATE_BBP_IO_READ8_BY_REG_ID(pAd, BBP_R22, &BbpData);			BbpData &= 0xFFFFFF00; //clear bit7, bit6, bit[5~0]			BbpData |= 0x000000C1; //set bit7=1, bit6=1, bit[5~0]=0x01			ATE_BBP_IO_WRITE8_BY_REG_ID(pAd, BBP_R22, BbpData);			// set MAC_SYS_CTRL(0x1004) Continuous Tx Production Test (bit4) = 1			RTMP_IO_READ32(pAd, MAC_SYS_CTRL, &Value);			Value = Value | 0x00000010;			RTMP_IO_WRITE32(pAd, MAC_SYS_CTRL, Value);		}	}	else if (!strcmp(arg, "TXCONT"))	// Tx Continue	{		if (pAd->ate.bQATxStart == TRUE)		{			/* set MAC_SYS_CTRL(0x1004) bit4(Continuous Tx Production Test)			   and bit2(MAC TX enable) back to zero. */ 			RTMP_IO_READ32(pAd, MAC_SYS_CTRL, &MacData);			MacData &= 0xFFFFFFEB;			RTMP_IO_WRITE32(pAd, MAC_SYS_CTRL, MacData);			// set BBP R22 bit7=0			ATE_BBP_IO_READ8_BY_REG_ID(pAd, BBP_R22, &BbpData);			BbpData &= 0xFFFFFF7F; //set bit7=0			ATE_BBP_IO_WRITE8_BY_REG_ID(pAd, BBP_R22, BbpData);		}		/* for TxCont mode.		** Step 1: Send 50 packets first then wait for a moment.		** Step 2: Send more 50 packet then start continue mode.		*/		ATEDBGPRINT(RT_DEBUG_TRACE, ("ATE: TXCONT\n"));#ifdef RT30xx				for(i=0;i<ATE_BBP_REG_NUM;i++)				restore_BBP[i]=0;			//Record All BBP Value			for(i=0;i<ATE_BBP_REG_NUM;i++)			ATE_BBP_IO_READ8_BY_REG_ID(pAd,i,&restore_BBP[i]);#endif // RT30xx //		// Step 1: send 50 packets first.		pAd->ate.Mode |= ATE_TXCONT;		pAd->ate.TxCount = 50;		pAd->ate.TxDoneCount = 0;		// Soft reset BBP.		BbpSoftReset(pAd);		// Abort Tx, RX DMA.		RtmpDmaEnable(pAd, 0);		/* Only needed if we have to send some normal frames. */		SetJapanFilter(pAd);		// Setup frame format.		ATESetUpFrame(pAd, 0);		// Enable Tx		RTMP_IO_READ32(pAd, MAC_SYS_CTRL, &Value);		Value |= (1 << 2);		RTMP_IO_WRITE32(pAd, MAC_SYS_CTRL, Value);		// Disable Rx		RTMP_IO_READ32(pAd, MAC_SYS_CTRL, &Value);		Value &= ~(1 << 3);		RTMP_IO_WRITE32(pAd, MAC_SYS_CTRL, Value);		// Start Tx, RX DMA.		RtmpDmaEnable(pAd, 1);		InterlockedExchange(&pAd->BulkOutRemained, pAd->ate.TxCount);#ifdef	RALINK_28xx_QA		if (pAd->ate.bQATxStart == TRUE)		{			pAd->ate.TxStatus = 1;			//pAd->ate.Repeat = 0;		}#endif	// RALINK_28xx_QA //		NdisAcquireSpinLock(&pAd->GenericLock);//0820		pAd->ContinBulkOut = FALSE;				NdisReleaseSpinLock(&pAd->GenericLock);		RTUSB_SET_BULK_FLAG(pAd, fRTUSB_BULK_OUT_DATA_ATE);		// Kick bulk out 		RTUSBKickBulkOut(pAd);		/* To make sure all the 50 frames have been bulk out before executing step 2 */		while (atomic_read(&pAd->BulkOutRemained) > 0)		{			RTMPusecDelay(5000);		}		// Step 2: send more 50 packets then start continue mode.		// Abort Tx, RX DMA.		RtmpDmaEnable(pAd, 0);		// Cont. TX set BBP R22 bit7=1		ATE_BBP_IO_READ8_BY_REG_ID(pAd, BBP_R22, &BbpData);		BbpData |= 0x00000080; //set bit7=1		ATE_BBP_IO_WRITE8_BY_REG_ID(pAd, BBP_R22, BbpData);		pAd->ate.TxCount = 50;		pAd->ate.TxDoneCount = 0;		SetJapanFilter(pAd);				// Setup frame format.		ATESetUpFrame(pAd, 0);		// Enable Tx		RTMP_IO_READ32(pAd, MAC_SYS_CTRL, &Value);		Value |= (1 << 2);		RTMP_IO_WRITE32(pAd, MAC_SYS_CTRL, Value);		// Disable Rx		RTMP_IO_READ32(pAd, MAC_SYS_CTRL, &Value);		Value &= ~(1 << 3);		// Start Tx, RX DMA.		RtmpDmaEnable(pAd, 1);		InterlockedExchange(&pAd->BulkOutRemained, pAd->ate.TxCount);#ifdef	RALINK_28xx_QA		if (pAd->ate.bQATxStart == TRUE)		{			pAd->ate.TxStatus = 1;			//pAd->ate.Repeat = 0;		}#endif	// RALINK_28xx_QA //		NdisAcquireSpinLock(&pAd->GenericLock);//0820		pAd->ContinBulkOut = FALSE;				NdisReleaseSpinLock(&pAd->GenericLock);		RTUSB_SET_BULK_FLAG(pAd, fRTUSB_BULK_OUT_DATA_ATE);		// Kick bulk out 		RTUSBKickBulkOut(pAd);#if 1		RTMPusecDelay(500);#else		while (atomic_read(&pAd->BulkOutRemained) > 0)		{			RTMPusecDelay(5000);		}#endif // 1 //		// Set MAC_SYS_CTRL(0x1004) Continuous Tx Production Test (bit4) = 1.		RTMP_IO_READ32(pAd, MAC_SYS_CTRL, &MacData);		MacData |= 0x00000010;		RTMP_IO_WRITE32(pAd, MAC_SYS_CTRL, MacData);	}	else if (!strcmp(arg, "TXFRAME"))	// Tx Frames	{		ATEDBGPRINT(RT_DEBUG_TRACE, ("ATE: TXFRAME(Count=0x%08x)\n", pAd->ate.TxCount));		pAd->ate.Mode |= ATE_TXFRAME;		// Soft reset BBP.		BbpSoftReset(pAd);		// Default value in BBP R22 is 0x0.		BbpData = 0;		RTMP_IO_READ32(pAd, MAC_SYS_CTRL, &MacData);		// Clean bit4 to stop continuous Tx production test.		MacData &= 0xFFFFFFEF;	   	ATE_BBP_IO_WRITE8_BY_REG_ID(pAd, BBP_R22, BbpData);		RTMP_IO_WRITE32(pAd, MAC_SYS_CTRL, MacData);#ifdef RALINK_28xx_QA		// add this for LoopBack mode		if (pAd->ate.bQARxStart == FALSE)  		{			// Disable Rx			RTMP_IO_READ32(pAd, MAC_SYS_CTRL, &Value);			Value &= ~(1 << 3);			RTMP_IO_WRITE32(pAd, MAC_SYS_CTRL, Value);		}		if (pAd->ate.bQATxStart == TRUE)  		{			pAd->ate.TxStatus = 1;			//pAd->ate.Repeat = 0;		}#else		// Disable Rx		RTMP_IO_READ32(pAd, MAC_SYS_CTRL, &Value);		Value &= ~(1 << 3);		RTMP_IO_WRITE32(pAd, MAC_SYS_CTRL, Value);#endif // RALINK_28xx_QA //		// Enable Tx		RTMP_IO_READ32(pAd, MAC_SYS_CTRL, &Value);		Value |= (1 << 2);		RTMP_IO_WRITE32(pAd, MAC_SYS_CTRL, Value);        SetJapanFilter(pAd);				// Abort Tx, RX DMA.		RtmpDmaEnable(pAd, 0);		pAd->ate.TxDoneCount = 0;        // Setup frame format		ATESetUpFrame(pAd, 0);			// Start Tx, RX DMA.		RtmpDmaEnable(pAd, 1);		// Check count is continuous or not yet.		//		// Due to the type mismatch between "pAd->BulkOutRemained"(atomic_t) and "pAd->ate.TxCount"(UINT32)		//		if (pAd->ate.TxCount == 0)		{			InterlockedExchange(&pAd->BulkOutRemained, 0);		}		else		{			InterlockedExchange(&pAd->BulkOutRemained, pAd->ate.TxCount);		}		ATEDBGPRINT(RT_DEBUG_TRACE, ("bulk out count = %d\n", atomic_read(&pAd->BulkOutRemained)));		ASSERT((atomic_read(&pAd->BulkOutRemained) >= 0));		if (atomic_read(&pAd->BulkOutRemained) == 0)		{			ATEDBGPRINT(RT_DEBUG_TRACE, ("Send packet countinuously\n"));			/* In 28xx, NdisAcquireSpinLock() == spin_lock_bh() */			/* NdisAcquireSpinLock only need one argument in 28xx. */			NdisAcquireSpinLock(&pAd->GenericLock);			pAd->ContinBulkOut = TRUE;					NdisReleaseSpinLock(&pAd->GenericLock);			/* In 28xx, BULK_OUT_LOCK() == spin_lock_irqsave() */			BULK_OUT_LOCK(&pAd->BulkOutLock[0], IrqFlags);// peter : NdisAcquireSpinLock ==> BULK_OUT_LOCK			pAd->BulkOutPending[0] = FALSE;			BULK_OUT_UNLOCK(&pAd->BulkOutLock[0], IrqFlags);// peter : NdisAcquireSpinLock ==> BULK_OUT_LOCK		}		else		{			ATEDBGPRINT(RT_DEBUG_TRACE, ("Send packets depend on counter\n"));			NdisAcquireSpinLock(&pAd->GenericLock);			pAd->ContinBulkOut = FALSE;					NdisReleaseSpinLock(&pAd->GenericLock);			BULK_OUT_LOCK(&pAd->BulkOutLock[0], IrqFlags);			pAd->BulkOutPending[0] = FALSE;			BULK_OUT_UNLOCK(&pAd->BulkOutLock[0], IrqFlags);		}						RTUSB_SET_BULK_FLAG(pAd, fRTUSB_BULK_OUT_DATA_ATE);		// Kick bulk out 		RTUSBKickBulkOut(pAd);	}#ifdef RALINK_28xx_QA	else if (!strcmp(arg, "TXSTOP")) 		//Enter ATE mode and set Tx/Rx Idle	{								ATEDBGPRINT(RT_DEBUG_TRACE, ("ATE: TXSTOP\n"));				atemode = pAd->ate.Mode;		pAd->ate.Mode &= ATE_TXSTOP;		pAd->ate.bQATxStart = FALSE;//		pAd->ate.TxDoneCount = pAd->ate.TxCount;/*=========================================================================*/		if (atemode & ATE_TXCARR)		{			// No Carrier Test set BBP R22 bit7=0, bit6=0, bit[5~0]=0x0			ATE_BBP_IO_READ8_BY_REG_ID(pAd, BBP_R22, &BbpData);			BbpData &= 0xFFFFFF00; //clear bit7, bit6, bit[5~0]			    ATE_BBP_IO_WRITE8_BY_REG_ID(pAd, BBP_R22, BbpData);		}		else if (atemode & ATE_TXCARRSUPP)		{			// No Cont. TX set BBP R22 bit7=0			ATE_BBP_IO_READ8_BY_REG_ID(pAd, BBP_R22, &BbpData);			BbpData &= ~(1 << 7); //set bit7=0			ATE_BBP_IO_WRITE8_BY_REG_ID(pAd, BBP_R22, BbpData);			// No Carrier Suppression set BBP R24 bit0=0			ATE_BBP_IO_READ8_BY_REG_ID(pAd, BBP_R24, &BbpData);			BbpData &= 0xFFFFFFFE; //clear bit0			    ATE_BBP_IO_WRITE8_BY_REG_ID(pAd, BBP_R24, BbpData);		}				else if ((atemode & ATE_TXFRAME) || (atemode == ATE_STOP))		{			if (atemode & ATE_TXCONT)			{				// No Cont. TX set BBP R22 bit7=0				ATE_BBP_IO_READ8_BY_REG_ID(pAd, BBP_R22, &BbpData);				BbpData &= ~(1 << 7); //set bit7=0				ATE_BBP_IO_WRITE8_BY_REG_ID(pAd, BBP_R22, BbpData);			}		}/*=========================================================================*/		RTUSBRejectPendingPackets(pAd);		RTUSBCleanUpDataBulkOutQueue(pAd);		/* not used in RT28xx */		//RTUSBCleanUpMLMEWaitQueue(pAd);		/* empty function so far */		RTUSBCleanUpMLMEBulkOutQueue(pAd);/*=========================================================================*/		// Abort Tx, RX DMA.		RtmpDmaEnable(pAd, 0);/*=========================================================================*/		/* In 28xx, pAd->PendingRx is not of type atomic_t anymore *///		while ((atomic_read(&pAd->PendingRx) > 0))	//pAd->BulkFlags != 0 wait bulk out finish		/* peter todo : BulkInLock */		while (pAd->PendingRx > 0)		{#if 1			ATE_RTUSBCancelPendingBulkInIRP(pAd);#else//			NdisInterlockedDecrement(&pAd->PendingRx);			pAd->PendingRx--;#endif			RTMPusecDelay(500000);		}		while (((pAd->BulkOutPending[0] == TRUE) ||				(pAd->BulkOutPending[1] == TRUE) || 				(pAd->BulkOutPending[2] == TRUE) ||				(pAd->BulkOutPending[3] == TRUE)) && (pAd->BulkFlags != 0))	//pAd->BulkFlags != 0 wait bulk out finish		{			do 			{				RTUSBCancelPendingBulkOutIRP(pAd);			} while (FALSE);						RTMPusecDelay(500000);		}		ASSERT(pAd->PendingRx == 0);/*=========================================================================*/		// Enable Tx, Rx DMA.		RtmpDmaEnable(pAd, 1);		/* task Tx status : 0 --> task is idle, 1 --> task is running */		pAd->ate.TxStatus = 0;		// Soft reset BBP.				BbpSoftReset(pAd);		// Disable Tx		RTMP_IO_READ32(pAd, MAC_SYS_CTRL, &MacData);		MacData &= (0xfffffffb);		RTMP_IO_WRITE32(pAd, MAC_SYS_CTRL, MacData);		//Clean ATE Bulk in/out counter and continue setup		InterlockedExchange(&pAd->BulkOutRemained, 0);			pAd->ContinBulkOut = FALSE;		}	else if (!strcmp(arg, "RXSTOP"))	{								ATEDBGPRINT(RT_DEBUG_TRACE, ("ATE: RXSTOP\n"));		atemode = pAd->ate.Mode;		// Disable Rx		RTMP_IO_READ32(pAd, MAC_SYS_CTRL, &Value);		Value &= ~(1 << 3);		RTMP_IO_WRITE32(pAd, MAC_SYS_CTRL, Value);				pAd->ate.Mode &= ATE_RXSTOP;		pAd->ate.bQARxStart = FALSE;//		pAd->ate.TxDoneCount = pAd->ate.TxCount;/*=========================================================================*/		RTUSBRejectPendingPackets(pAd);		RTUSBCleanUpDataBulkOutQueue(pAd);		/* not used in RT28xx */		//RTUSBCleanUpMLMEWaitQueue(pAd);			RTUSBCleanUpMLMEBulkOutQueue(pAd);/*=========================================================================*/		// Abort Tx, RX DMA.		RtmpDmaEnable(pAd, 0);/*=========================================================================*///		while ((atomic_read(&pAd->PendingRx) > 0))		while (pAd->PendingRx > 0)		{#if 1			ATE_RTUSBCancelPendingBulkInIRP(pAd);#else//			NdisInterlockedDecrement(&pAd->PendingRx);			pAd->PendingRx--;#endif			RTMPusecDelay(500000);		}		while (((pAd->BulkOutPending[0] == TRUE) ||				(pAd->BulkOutPending[1] == TRUE) || 				(pAd->BulkOutPending[2] == TRUE) ||				(pAd->BulkOutPending[3] == TRUE)) && (pAd->BulkFlags != 0))	//pAd->BulkFlags != 0 wait bulk out finish		{			do			{				RTUSBCancelPendingBulkOutIRP(pAd);			} while (FALSE);						RTMPusecDelay(500000);		}		ASSERT(pAd->PendingRx == 0);/*=========================================================================*/		// Soft reset BBP.				BbpSoftReset(pAd);		pAd->ContinBulkIn = FALSE;	}#endif // RALINK_28xx_QA //	else if (!strcmp(arg, "RXFRAME")) // Rx Frames	{		ATEDBGPRINT(RT_DEBUG_TRACE, ("ATE: RXFRAME\n"));		// Disable Rx of MAC block		RTMP_IO_READ32(pAd, MAC_SYS_CTRL, &Value);		Value &= ~(1 << 3);		RTMP_IO_WRITE32(pAd, MAC_SYS_CTRL, Value);		// Default value in BBP R22 is 0x0.		BbpData = 0;		RTMP_IO_READ32(pAd, MAC_SYS_CTRL, &MacData);		// Clean bit4 to stop continuous Tx production test.		MacData &= 0xFFFFFFEF;	   	ATE_BBP_IO_WRITE8_BY_REG_ID(pAd, BBP_R22, BbpData);		RTMP_IO_WRITE32(pAd, MAC_SYS_CTRL, MacData);		pAd->ate.Mode |= ATE_RXFRAME;		// Abort Tx, RX DMA.		RtmpDmaEnable(pAd, 0);		// Disable TX of MAC block		RTMP_IO_READ32(pAd, MAC_SYS_CTRL, &Value);		Value &= ~(1 << 2);		RTMP_IO_WRITE32(pAd, MAC_SYS_CTRL, Value);        // Reset Rx RING.

⌨️ 快捷键说明

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