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

📄 rt_ate.c.bak

📁 Linux下的RT系列无线网卡驱动,可以直接在x86平台上编译
💻 BAK
📖 第 1 页 / 共 5 页
字号:
        1. ATESTOP   = Stop ATE Mode        2. TXCONT    = Continuous Transmit        3. TXCARR    = Transmit Carrier        4. TXFRAME   = Transmit Frames        5. RXFRAME   = Receive Frames    Return:        TRUE if all parameters are OK, FALSE otherwise    ==========================================================================*/static inline INT	set_ate_proc_inline(	IN	PRTMP_ADAPTER	pAd, 	IN	PUCHAR			arg){	UINT32			Value;	UCHAR			BbpData;	UINT32			MacData;	PTXD_STRUC		pTxD;	UINT			i, atemode;	PRTMP_TX_RING 	pTxRing = &pAd->TxRing[QID_AC_BE];	NDIS_STATUS		Status = NDIS_STATUS_SUCCESS;#ifdef	BIG_ENDIAN    PTXD_STRUC      pDestTxD;    TXD_STRUC       TxD;#endif	DBGPRINT(RT_DEBUG_TRACE, ("===> set_ate_proc_inline()\n"));	ATEAsicSwitchChannel(pAd);		AsicLockChannel(pAd, pAd->ate.Channel);	RTMPusecDelay(5000);	if (pAd->ate.Mode == ATE_STOP)	{		RTMP_BBP_IO_READ8_BY_REG_ID(pAd, BBP_R22, &BbpData);	}	else	{		ATE_BBP_IO_READ8_BY_REG_ID(pAd, BBP_R22, &BbpData);	}	// read PHY_CSR1 and backup MAC_SYS_CTRL value.	RTMP_IO_READ32(pAd, MAC_SYS_CTRL, &MacData);	BbpData = 0;	MacData &= 0xFFFFFFEF; // clean bit4, continuous Tx production test.	if (!strcmp(arg, "ATESTART"))	{		DBGPRINT(RT_DEBUG_TRACE, ("ATE: ATESTART\n"));		// check if we have removed the firmware		if (pAd->ate.Mode == ATE_STOP)		{			NICEraseFirmware(pAd);		}		atemode = pAd->ate.Mode;		pAd->ate.Mode = ATE_START;		pAd->ate.TxDoneCount = pAd->ate.TxCount;		RTMP_IO_WRITE32(pAd, MAC_SYS_CTRL, MacData);		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, 24, &BbpData);			BbpData &= 0xFFFFFFFE; //clear bit0			    ATE_BBP_IO_WRITE8_BY_REG_ID(pAd, 24, BbpData);		}				// We should free some resource which allocate when ATE_TXFRAME , ATE_STOP, and ATE_TXCONT.		// TODO:Should we free some resource which was allocated when LoopBack and ATE_STOP ?		else if ((atemode & ATE_TXFRAME) || (atemode == ATE_STOP))		{			PRTMP_TX_RING pTxRing = &pAd->TxRing[QID_AC_BE];			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);			}			// Abort Tx, RX DMA.			RtmpDmaEnable(pAd, 0);			for (i=0; i<TX_RING_SIZE; i++)			{				PNDIS_PACKET  pPacket;#ifndef BIG_ENDIAN			    pTxD = (PTXD_STRUC)pAd->TxRing[QID_AC_BE].Cell[i].AllocVa;#else        		pDestTxD = (PTXD_STRUC)pAd->TxRing[QID_AC_BE].Cell[i].AllocVa;        		TxD = *pDestTxD;        		pTxD = &TxD;        		RTMPDescriptorEndianChange((PUCHAR)pTxD, TYPE_TXD);#endif				pTxD->DMADONE = 0;				pPacket = pTxRing->Cell[i].pNdisPacket;				if (pPacket)				{					PCI_UNMAP_SINGLE(pAd, pTxD->SDPtr0, pTxD->SDLen0, PCI_DMA_TODEVICE);					RELEASE_NDIS_PACKET(pAd, pPacket, NDIS_STATUS_SUCCESS);				}				//Always assign pNdisPacket as NULL after clear				pTxRing->Cell[i].pNdisPacket = NULL;				pPacket = pTxRing->Cell[i].pNextNdisPacket;				if (pPacket)				{					PCI_UNMAP_SINGLE(pAd, pTxD->SDPtr1, pTxD->SDLen1, PCI_DMA_TODEVICE);					RELEASE_NDIS_PACKET(pAd, pPacket, NDIS_STATUS_SUCCESS);				}				//Always assign pNextNdisPacket as NULL after clear				pTxRing->Cell[i].pNextNdisPacket = NULL;#ifdef BIG_ENDIAN				RTMPDescriptorEndianChange((PUCHAR)pTxD, TYPE_TXD);				WriteBackToDescriptor((PUCHAR)pDestTxD, (PUCHAR)pTxD, FALSE, TYPE_TXD);#endif			}			// Start Tx, RX DMA			RtmpDmaEnable(pAd, 1);		}		// reset Rx Cnt.		pAd->ate.LastRssi0 = 0;		pAd->ate.LastRssi1 = 0;		pAd->ate.LastRssi2 = 0;		pAd->ate.AvgRssi0 = 0;		pAd->ate.AvgRssi1 = 0;		pAd->ate.AvgRssi2 = 0;		pAd->ate.AvgRssi0X8 = 0;		pAd->ate.AvgRssi1X8 = 0;		pAd->ate.AvgRssi2X8 = 0;		pAd->ate.NumOfAvgRssiSample = 0;#ifdef RALINK_2860_QA		// Tx frame		pAd->ate.bQATxStart = FALSE;		pAd->ate.bQARxStart = FALSE;		pAd->ate.seq = 0; 		// counters		pAd->ate.U2M = 0;		pAd->ate.OtherData = 0;		pAd->ate.Beacon = 0;		pAd->ate.OtherCount = 0;		pAd->ate.TxAc0 = 0;		pAd->ate.TxAc1 = 0;		pAd->ate.TxAc2 = 0;		pAd->ate.TxAc3 = 0;		pAd->ate.TxHCCA = 0;		pAd->ate.TxMgmt = 0;		pAd->ate.RSSI0 = 0;		pAd->ate.RSSI1 = 0;		pAd->ate.RSSI2 = 0;		pAd->ate.SNR0 = 0;		pAd->ate.SNR1 = 0;		// control		pAd->ate.TxDoneCount = 0;		pAd->ate.TxStatus = 0; // task Tx status // 0 --> task is idle, 1 --> task is running#endif // RALINK_2860_QA //		// Soft reset BBP.		BbpSoftReset(pAd);#ifdef CONFIG_STA_SUPPORT 		//		// peter : It has "AsicDisableSync();" and "RTMP_BBP_IO_R/W8_BY_REG_ID();" inside.		// Do we need to LinkDown ?		////      LinkDown(pAd, FALSE);		AsicEnableBssSync(pAd);// peter : Do we need to do this ?		netif_stop_queue(pAd->net_dev);		//		// If we skip "LinkDown()", we should disable protection		// to prevent from sending out RTS or CTS-to-self.		//		ATEDisableAsicProtect(pAd);		RTMPStationStop(pAd);#endif // CONFIG_STA_SUPPORT //		// Disable Tx, Rx		RTMP_IO_READ32(pAd, MAC_SYS_CTRL, &Value);		Value &= ~((1 << 3) || (1 << 2));		RTMP_IO_WRITE32(pAd, MAC_SYS_CTRL, Value);	}	else if (!strcmp(arg, "ATESTOP")) 	{								DBGPRINT(RT_DEBUG_TRACE, ("ATE: ATESTOP\n"));				ATE_BBP_IO_WRITE8_BY_REG_ID(pAd, BBP_R22, BbpData);		RTMP_IO_WRITE32(pAd, MAC_SYS_CTRL, MacData); // recover the MAC_SYS_CTRL register back.				// Abort Tx, RX DMA.		RtmpDmaEnable(pAd, 0);		Status = NICLoadFirmware(pAd);		if (Status != NDIS_STATUS_SUCCESS)		{			DBGPRINT_ERR(("NICLoadFirmware failed, Status[=0x%08x]\n", Status));			return FALSE;		}		//RTMPusecDelay(1000000);// peter : Let MCU get ready.(not work!)		pAd->ate.Mode = ATE_STOP;#ifdef CONFIG_STA_SUPPORT 		//		// Even the firmware has been loaded, 		// we still could use ATE_BBP_IO_READ8_BY_REG_ID(). 		// But this is not suggested.		//		BbpSoftReset(pAd);#endif // CONFIG_STA_SUPPORT //		NICDisableInterrupt(pAd);				NICInitializeAdapter(pAd, TRUE);		// We should read EEPROM for all cases.  		NICReadEEPROMParameters(pAd);		NICInitAsicFromEEPROM(pAd); 		AsicSwitchChannel(pAd, pAd->CommonCfg.Channel, FALSE);		AsicLockChannel(pAd, pAd->CommonCfg.Channel);				//		// Enable Interrupt		//		//		// These steps are only for APAutoSelectChannel().		//		RTMP_IO_WRITE32(pAd, INT_SOURCE_CSR, 0xffffffff);  // clear garbage interrupts		NICEnableInterrupt(pAd);		// Enable Tx, RX DMA.		RtmpDmaEnable(pAd, 1);		// Enable Tx		RTMP_IO_READ32(pAd, MAC_SYS_CTRL, &Value);		Value |= (1 << 2);		RTMP_IO_WRITE32(pAd, MAC_SYS_CTRL, Value);		// Enable Rx		RTMP_IO_READ32(pAd, MAC_SYS_CTRL, &Value);		Value |= (1 << 3);		RTMP_IO_WRITE32(pAd, MAC_SYS_CTRL, Value);		netif_start_queue(pAd->net_dev);#ifdef CONFIG_STA_SUPPORT 		RTMPStationStart(pAd);#endif // CONFIG_STA_SUPPORT //	}	else if (!strcmp(arg, "TXCARR"))	// Tx Carrier	{		DBGPRINT(RT_DEBUG_TRACE, ("ATE: TXCARR\n"));		pAd->ate.Mode |= ATE_TXCARR;		// 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 0.5 second.		** Step 2: Send more 50 packet then start continue mode.		*/		DBGPRINT(RT_DEBUG_TRACE, ("ATE: TXCONT\n"));		// Step 1: send 50 packets first.		pAd->ate.Mode |= ATE_TXCONT;		pAd->ate.TxCount = 50;		// Soft reset BBP.		BbpSoftReset(pAd);		// Abort Tx, RX DMA.		RtmpDmaEnable(pAd, 0);		// Fix can't smooth kick		{			RTMP_IO_READ32(pAd, TX_DTX_IDX0 + QID_AC_BE * 0x10,  &pTxRing->TxDmaIdx);			pTxRing->TxSwFreeIdx = pTxRing->TxDmaIdx;			pTxRing->TxCpuIdx = pTxRing->TxDmaIdx;			RTMP_IO_WRITE32(pAd, TX_CTX_IDX0 + QID_AC_BE * 0x10, pTxRing->TxCpuIdx);		}		pAd->ate.TxDoneCount = 0;				SetJapanFilter(pAd);				for (i = 0; (i < TX_RING_SIZE-1) && (i < pAd->ate.TxCount); i++)		{			PNDIS_PACKET pPacket;			ULONG TxIdx = pTxRing->TxCpuIdx;#ifndef BIG_ENDIAN			pTxD = (PTXD_STRUC)pTxRing->Cell[TxIdx].AllocVa;#else			pDestTxD = (PTXD_STRUC)pTxRing->Cell[TxIdx].AllocVa;			TxD = *pDestTxD;			pTxD = &TxD;			RTMPDescriptorEndianChange((PUCHAR)pTxD, TYPE_TXD);#endif			// clean current cell.			pPacket = pTxRing->Cell[TxIdx].pNdisPacket;			if (pPacket)			{				PCI_UNMAP_SINGLE(pAd, pTxD->SDPtr0, pTxD->SDLen0, PCI_DMA_TODEVICE);				RELEASE_NDIS_PACKET(pAd, pPacket, NDIS_STATUS_SUCCESS);			}			//Always assign pNdisPacket as NULL after clear			pTxRing->Cell[TxIdx].pNdisPacket = NULL;			pPacket = pTxRing->Cell[TxIdx].pNextNdisPacket;			if (pPacket)			{				PCI_UNMAP_SINGLE(pAd, pTxD->SDPtr1, pTxD->SDLen1, PCI_DMA_TODEVICE);				RELEASE_NDIS_PACKET(pAd, pPacket, NDIS_STATUS_SUCCESS);			}			//Always assign pNextNdisPacket as NULL after clear			pTxRing->Cell[TxIdx].pNextNdisPacket = NULL;			if(ATE_TxDInit(pAd, TxIdx) != 0)				break;			INC_RING_INDEX(pTxRing->TxCpuIdx, TX_RING_SIZE);		}		ATE_TxDInit(pAd, pTxRing->TxCpuIdx);		// Start Tx, RX DMA.		RtmpDmaEnable(pAd, 1);		// 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);#ifdef	RALINK_2860_QA		if (pAd->ate.bQATxStart == TRUE)		{			pAd->ate.TxStatus = 1;			//pAd->ate.Repeat = 0;		}#endif	// RALINK_2860_QA //		// kick Tx-Ring.		RTMP_IO_WRITE32(pAd, TX_CTX_IDX0 + QID_AC_BE * RINGREG_DIFF, pAd->TxRing[QID_AC_BE].TxCpuIdx);		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;		// Fix can't smooth kick		{			RTMP_IO_READ32(pAd, TX_DTX_IDX0 + QID_AC_BE * 0x10,  &pTxRing->TxDmaIdx);			pTxRing->TxSwFreeIdx = pTxRing->TxDmaIdx;			pTxRing->TxCpuIdx = pTxRing->TxDmaIdx;			RTMP_IO_WRITE32(pAd, TX_CTX_IDX0 + QID_AC_BE * 0x10, pTxRing->TxCpuIdx);							}		pAd->ate.TxDoneCount = 0;		SetJapanFilter(pAd);		for (i = 0; (i < TX_RING_SIZE-1) && (i < pAd->ate.TxCount); i++)		{			PNDIS_PACKET pPacket;			ULONG TxIdx = pTxRing->TxCpuIdx;#ifndef BIG_ENDIAN			pTxD = (PTXD_STRUC)pTxRing->Cell[TxIdx].AllocVa;#else			pDestTxD = (PTXD_STRUC)pTxRing->Cell[TxIdx].AllocVa;			TxD = *pDestTxD;			pTxD = &TxD;			RTMPDescriptorEndianChange((PUCHAR)pTxD, TYPE_TXD);#endif			// clean current cell.			pPacket = pTxRing->Cell[TxIdx].pNdisPacket;			if (pPacket)			{				PCI_UNMAP_SINGLE(pAd, pTxD->SDPtr0, pTxD->SDLen0, PCI_DMA_TODEVICE);				RELEASE_NDIS_PACKET(pAd, pPacket, NDIS_STATUS_SUCCESS);			}			//Always assign pNdisPacket as NULL after clear			pTxRing->Cell[TxIdx].pNdisPacket = NULL;			pPacket = pTxRing->Cell[TxIdx].pNextNdisPacket;			if (pPacket)			{				PCI_UNMAP_SINGLE(pAd, pTxD->SDPtr1, pTxD->SDLen1, PCI_DMA_TODEVICE);				RELEASE_NDIS_PACKET(pAd, pPacket, NDIS_STATUS_SUCCESS);			}			//Always assign pNextNdisPacket as NULL after clear			pTxRing->Cell[TxIdx].pNextNdisPacket = NULL;			if(ATE_TxDInit(pAd, TxIdx) != 0)				break;			INC_RING_INDEX(pTxRing->TxCpuIdx, TX_RING_SIZE);		}		ATE_TxDInit(pAd, pTxRing->TxCpuIdx);		// Start Tx, RX DMA.		RtmpDmaEnable(pAd, 1);		// 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);#ifdef	RALINK_2860_QA		if (pAd->ate.bQATxStart == TRUE)		{			pAd->ate.TxStatus = 1;			//pAd->ate.Repeat = 0;		}#endif	// RALINK_2860_QA //		// kick Tx-Ring.		RTMP_IO_WRITE32(pAd, TX_CTX_IDX0 + QID_AC_BE * RINGREG_DIFF, pAd->TxRing[QID_AC_BE].TxCpuIdx);		RTMPusecDelay(500);		RTMP_IO_READ32(pAd, MAC_SYS_CTRL, &MacData);		MacData |= 0x00000010;

⌨️ 快捷键说明

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