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

📄 rt_ate.c

📁 ralink 2870 usb无线网卡 最新驱动
💻 C
📖 第 1 页 / 共 5 页
字号:
			pRxContext->Readable	= FALSE;//			pRxContext->ReorderInUse = FALSE;//			pRxContext->ReadPosOffset = 0;		}/*=========================================================================*//*      Reset Tx RING                                                      */ /*=========================================================================*/		do 		{			RTUSBCancelPendingBulkOutIRP(pAd);		} while (FALSE);		// Enable auto responder.		RTMP_IO_READ32(pAd, AUTO_RSP_CFG, &temp);		temp = temp | (0x01);		RTMP_IO_WRITE32(pAd, AUTO_RSP_CFG, temp);		AsicEnableBssSync(pAd);		/* Soft reset BBP.*/		/* In 2870 chipset, ATE_BBP_IO_READ8_BY_REG_ID() == RTMP_BBP_IO_READ8_BY_REG_ID() */		/* Both rt2870ap and rt2870sta use BbpSoftReset(pAd) to do BBP soft reset */		BbpSoftReset(pAd);		{#ifdef CONFIG_STA_SUPPORT			// Set all state machines back IDLE			pAd->Mlme.CntlMachine.CurrState    = CNTL_IDLE;			pAd->Mlme.AssocMachine.CurrState   = ASSOC_IDLE;			pAd->Mlme.AuthMachine.CurrState    = AUTH_REQ_IDLE;			pAd->Mlme.AuthRspMachine.CurrState = AUTH_RSP_IDLE;			pAd->Mlme.SyncMachine.CurrState    = SYNC_IDLE;			pAd->Mlme.ActMachine.CurrState    = ACT_IDLE;#endif // CONFIG_STA_SUPPORT //			//			// ===> refer to MlmeRestartStateMachine().			// When we entered ATE_START mode, PeriodicTimer was not cancelled.			// So we don't have to set it here.			////			RTMPSetTimer(pAd, &pAd->Mlme.PeriodicTimer, MLME_TASK_EXEC_INTV);						ASSERT(pAd->CommonCfg.Channel != 0);						AsicSwitchChannel(pAd, pAd->CommonCfg.Channel, FALSE);			/* empty function */			AsicLockChannel(pAd, pAd->CommonCfg.Channel);#ifdef CONFIG_STA_SUPPORT 		    RTMPStationStart(pAd);#endif // CONFIG_STA_SUPPORT //		}			// Clean ATE Bulk in/out counter and continue setup.		InterlockedExchange(&pAd->BulkOutRemained, 0);						NdisAcquireSpinLock(&pAd->GenericLock);		pAd->ContinBulkOut = FALSE;				pAd->ContinBulkIn = FALSE;		NdisReleaseSpinLock(&pAd->GenericLock);				/* Wait 50ms to prevent next URB to bulkout during HW reset. */		/* todo : remove this if not necessary */		RTMPusecDelay(50000);		pAd->ate.Mode = ATE_STOP;		// Enable Tx		RTMP_IO_READ32(pAd, MAC_SYS_CTRL, &Value);		Value |= (1 << 2);		RTMP_IO_WRITE32(pAd, MAC_SYS_CTRL, Value);		/* restore RX_FILTR_CFG */#ifdef CONFIG_STA_SUPPORT 		/* restore RX_FILTR_CFG in order that QA maybe set it to 0x3 */		RTMP_IO_WRITE32(pAd, RX_FILTR_CFG, STANORMAL);#endif // CONFIG_STA_SUPPORT //		// Enable Tx, RX DMA.		RtmpDmaEnable(pAd, 1);		// Enable Rx		RTMP_IO_READ32(pAd, MAC_SYS_CTRL, &Value);		Value |= (1 << 3);		RTMP_IO_WRITE32(pAd, MAC_SYS_CTRL, Value);		/* Wait 10ms for all of the bulk-in URBs to complete. */		/* todo : remove this if not necessary */		RTMPusecDelay(10000);		// Everything is ready to start normal Tx/Rx.		RTUSBBulkReceive(pAd);#if defined(LINUX) || defined(VXWORKS)		RTMP_OS_NETDEV_START_QUEUE(pAd->net_dev);#endif // defined(LINUX) || defined(VXWORKS) //		ATEDBGPRINT(RT_DEBUG_TRACE, ("<=== ATE : ATESTOP \n"));	}	else if (!strcmp(arg, "TXCARR"))		{		ATEDBGPRINT(RT_DEBUG_TRACE, ("ATE: TXCARR\n"));		pAd->ate.Mode = ATE_TXCARR;		/* RT35xx ATE will reuse this code segment. */		// 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"))		{		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"));		/* RT35xx ATE will reuse this code segment. */		// 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;		}#endif	// RALINK_28xx_QA //		NdisAcquireSpinLock(&pAd->GenericLock);		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;		}#endif	// RALINK_28xx_QA //		NdisAcquireSpinLock(&pAd->GenericLock);		pAd->ContinBulkOut = FALSE;				NdisReleaseSpinLock(&pAd->GenericLock);		RTUSB_SET_BULK_FLAG(pAd, fRTUSB_BULK_OUT_DATA_ATE);		// Kick bulk out 		RTUSBKickBulkOut(pAd);		/* Let pAd->BulkOutRemained be consumed to zero */		RTMPusecDelay(500);		// 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"))		{		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;		}#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. */		if (pAd->ate.TxCount == 0)		{			/*				Due to the type mismatch between "pAd->BulkOutRemained"(atomic_t)				and "pAd->ate.TxCount"(UINT32)			*/			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);// NdisAcquireSpinLock ==> BULK_OUT_LOCK			pAd->BulkOutPending[0] = FALSE;			BULK_OUT_UNLOCK(&pAd->BulkOutLock[0], IrqFlags);// 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	// Enter ATE mode and set Tx/Rx Idle	else if (!strcmp(arg, "TXSTOP")) 			{								ATEDBGPRINT(RT_DEBUG_TRACE, ("ATE: TXSTOP\n"));				atemode = pAd->ate.Mode;		pAd->ate.Mode &= ATE_TXSTOP;		pAd->ate.bQATxStart = FALSE;		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 */		/* pAd->BulkFlags != 0 : wait bulk out finish */		/* todo : BulkInLock */		while (pAd->PendingRx > 0)		{			ATE_RTUSBCancelPendingBulkInIRP(pAd);			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);		// TxStatus : 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 (pAd->PendingRx > 0)		{			ATE_RTUSBCancelPendingBulkInIRP(pAd);			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")) 	{		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;

⌨️ 快捷键说明

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