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

📄 rtmp_init.c.bak

📁 Linux下的RT系列无线网卡驱动,可以直接在x86平台上编译
💻 BAK
📖 第 1 页 / 共 5 页
字号:
	{		csr0.field.Ac0Txop = 192;//cpu2le16(192);     // AC_VI: 192*32us ~= 6ms		csr0.field.Ac1Txop = 96;//cpu2le16(96);      // AC_VO: 96*32us  ~= 3ms	}	else	{		csr0.field.Ac0Txop = 96;//cpu2le16(96);      // AC_VI: 96*32us ~= 3ms		csr0.field.Ac1Txop = 48;//cpu2le16(48);      // AC_VO: 48*32us ~= 1.5ms	}	RTMP_IO_WRITE32(pAd, WMM_TXOP1_CFG, csr0.word);	// 3. Set DMA global configuration except TX_DMA_EN and RX_DMA_EN bits:	i = 0;	do	{		RTMP_IO_READ32(pAd, WPDMA_GLO_CFG, &GloCfg.word);		if ((GloCfg.field.TxDMABusy == 0)  && (GloCfg.field.RxDMABusy == 0))			break;				RTMPusecDelay(1000);		i++;	}while ( i < 100);	GloCfg.word &= 0xff0;	GloCfg.field.EnTXWriteBackDDONE =1;	RTMP_IO_WRITE32(pAd, WPDMA_GLO_CFG, GloCfg.word);		IntCfg.word = 0;	RTMP_IO_WRITE32(pAd, DELAY_INT_CFG, IntCfg.word);	// reset action	// Load firmware	//  Status = NICLoadFirmware(pAd);	DBGPRINT(RT_DEBUG_TRACE, ("<-- NICInitializeAdapter\n"));	return Status;}/*	========================================================================		Routine Description:		Initialize ASIC	Arguments:		Adapter						Pointer to our adapter	Return Value:		None	IRQL = PASSIVE_LEVEL	Note:			========================================================================*/VOID	NICInitializeAsic(	IN	PRTMP_ADAPTER	pAd,	IN  BOOLEAN		bHardReset){	ULONG			Index = 0, Counter;	UCHAR			R0 = 0xff;	ULONG			MacCsr12;//	ULONG			value;	USHORT			KeyIdx;	INT				i;	DBGPRINT(RT_DEBUG_TRACE, ("--> NICInitializeAsic\n"));	if (bHardReset == TRUE)	{	RTMP_IO_WRITE32(pAd, MAC_SYS_CTRL, 0x3);	}	else		RTMP_IO_WRITE32(pAd, MAC_SYS_CTRL, 0x1);		RTMP_IO_WRITE32(pAd, MAC_SYS_CTRL, 0x0);	// Initialize MAC register to default value	for (Index = 0; Index < NUM_MAC_REG_PARMS; Index++)	{		RTMP_IO_WRITE32(pAd, MACRegTable[Index].Register, MACRegTable[Index].Value);	}		//	// Before program BBP, we need to wait BBP/RF get wake up.	//	Index = 0;	do	{		RTMP_IO_READ32(pAd, MAC_STATUS_CFG, &MacCsr12);		if ((MacCsr12 & 0x03) == 0)	// if BB.RF is stable			break;				DBGPRINT(RT_DEBUG_TRACE, ("Check MAC_STATUS_CFG  = Busy = %lx\n", MacCsr12));		RTMPusecDelay(1000);	} while (Index++ < 100);	RTMP_IO_WRITE32(pAd, H2M_BBP_AGENT, 0);	// initialize BBP R/W access agent	RTMP_IO_WRITE32(pAd, H2M_MAILBOX_CSR, 0);	// Read BBP register, make sure BBP is up and running before write new data	Index = 0;	do 	{		RTMP_BBP_IO_READ8_BY_REG_ID(pAd, BBP_R0, &R0);		DBGPRINT(RT_DEBUG_TRACE, ("BBP version = %x\n", R0));	} while ((++Index < 20) && ((R0 == 0xff) || (R0 == 0x00)));	//ASSERT(Index < 20); //this will cause BSOD on Check-build driver	// Initialize BBP register to default value	for (Index = 0; Index < NUM_BBP_REG_PARMS; Index++)	{		RTMP_BBP_IO_WRITE8_BY_REG_ID(pAd, BBPRegTable[Index].Register, BBPRegTable[Index].Value);	}		if (pAd->MACVersion == 0x28600100)	{		RTMP_BBP_IO_WRITE8_BY_REG_ID(pAd, BBP_R69, 0x16);		RTMP_BBP_IO_WRITE8_BY_REG_ID(pAd, BBP_R73, 0x12);    }		// Add radio off control#ifdef CONFIG_STA_SUPPORT	if (pAd->StaCfg.bRadio == FALSE)	{//		RTMP_IO_WRITE32(pAd, PWR_PIN_CFG, 0x00001818);		RTMP_SET_FLAG(pAd, fRTMP_ADAPTER_RADIO_OFF);		DBGPRINT(RT_DEBUG_TRACE, ("Set Radio Off\n"));	}#endif // CONFIG_STA_SUPPORT //		// Clear raw counters	RTMP_IO_READ32(pAd, RX_STA_CNT0, &Counter);	RTMP_IO_READ32(pAd, RX_STA_CNT1, &Counter);	RTMP_IO_READ32(pAd, RX_STA_CNT2, &Counter);	RTMP_IO_READ32(pAd, TX_STA_CNT0, &Counter);	RTMP_IO_READ32(pAd, TX_STA_CNT1, &Counter);	RTMP_IO_READ32(pAd, TX_STA_CNT2, &Counter);		// ASIC will keep garbage value after boot	// Clear all seared key table when initial	for (KeyIdx = 0; KeyIdx < 4; KeyIdx++)	{		RTMP_IO_WRITE32(pAd, SHARED_KEY_MODE_BASE + 4*KeyIdx, 0);	}	// Clear all pairwise key table when initial	for (KeyIdx = 0; KeyIdx < 256; KeyIdx++)	{		RTMP_IO_WRITE32(pAd, MAC_WCID_ATTRIBUTE_BASE + (KeyIdx * HW_WCID_ATTRI_SIZE), 1);	}		// assert HOST ready bit//  RTMP_IO_WRITE32(pAd, MAC_CSR1, 0x0); // 2004-09-14 asked by Mark//  RTMP_IO_WRITE32(pAd, MAC_CSR1, 0x4);	// clear all on-chip BEACON frame space				for (i = 0; i < HW_BEACON_MAX_SIZE; i++)		RTMP_IO_WRITE8(pAd, HW_BEACON_BASE0 + i, 0x00); 		DBGPRINT(RT_DEBUG_TRACE, ("<-- NICInitializeAsic\n"));}/*	========================================================================		Routine Description:		Reset NIC Asics	Arguments:		Adapter						Pointer to our adapter	Return Value:		None	IRQL = PASSIVE_LEVEL	Note:		Reset NIC to initial state AS IS system boot up time.			========================================================================*/VOID	NICIssueReset(	IN	PRTMP_ADAPTER	pAd){	ULONG	Value;	DBGPRINT(RT_DEBUG_TRACE, ("--> NICIssueReset\n"));	// Abort Tx, prevent ASIC from writing to Host memory	//RTMP_IO_WRITE32(pAd, TX_CNTL_CSR, 0x001f0000);		// Disable Rx, register value supposed will remain after reset	RTMP_IO_READ32(pAd, MAC_SYS_CTRL, &Value);	Value &= (0xfffffff3);	RTMP_IO_WRITE32(pAd, MAC_SYS_CTRL, Value);	// Issue reset and clear from reset state	RTMP_IO_WRITE32(pAd, MAC_SYS_CTRL, 0x03); // 2004-09-17 change from 0x01	RTMP_IO_WRITE32(pAd, MAC_SYS_CTRL, 0x00);	DBGPRINT(RT_DEBUG_TRACE, ("<-- NICIssueReset\n"));}/*	========================================================================		Routine Description:		Check ASIC registers and find any reason the system might hang	Arguments:		Adapter						Pointer to our adapter	Return Value:		None	IRQL = DISPATCH_LEVEL		========================================================================*/BOOLEAN	NICCheckForHang(	IN	PRTMP_ADAPTER	pAd){	return (FALSE);}VOID NICUpdateFifoStaCounters(	IN PRTMP_ADAPTER pAd){	TX_STA_FIFO_STRUC	StaFifo;	MAC_TABLE_ENTRY		*pEntry;	UCHAR				i = 0;	UCHAR			pid = 0, wcid = 0;	CHAR				reTry;	UCHAR				succMCS;		do		{			RTMP_IO_READ32(pAd, TX_STA_FIFO, &StaFifo.word);			if (StaFifo.field.bValid == 0)				break;					wcid = (UCHAR)StaFifo.field.wcid;		/* ignore NoACK and MGMT frame use 0xFF as WCID */		if ((StaFifo.field.TxAckRequired == 0) || (wcid >= MAX_LEN_OF_MAC_TABLE))			{			i++;			    continue;			}		/* PID store Tx MCS Rate */		pid = (UCHAR)StaFifo.field.PidType;		pEntry = &pAd->MacTab.Content[wcid];		pEntry->DebugFIFOCount++;		if (!StaFifo.field.TxSuccess)		{			pEntry->FIFOCount++;			pEntry->OneSecTxFailCount++;			if (pEntry->FIFOCount >= 1)			{							DBGPRINT(RT_DEBUG_TRACE, ("#"));				{					int tid;					for (tid=0; tid<8; tid++)					{						BAOriSessionTearDown(pAd, pEntry->Aid,  tid, FALSE, FALSE);					}				}			}			//pEntry->bSendBAR = TRUE;		}		else		{			if (pEntry->NoBADataCountDown > 0)			{				pEntry->NoBADataCountDown--;				if (pEntry->NoBADataCountDown==0)				{					DBGPRINT(RT_DEBUG_TRACE, ("@\n"));				}			}			pEntry->FIFOCount = 0;			pEntry->OneSecTxNoRetryOkCount++;			// update NoDataIdleCount when sucessful send packet to STA.			pEntry->NoDataIdleCount = 0;		}		succMCS = StaFifo.field.SuccessRate & 0x7F;		reTry = pid - succMCS;		if (StaFifo.field.TxSuccess)		{			pEntry->TXMCSExpected[pid]++;			if (pid == succMCS)			{				pEntry->TXMCSSuccessful[pid]++;			}			else 			{				pEntry->TXMCSAutoFallBack[pid][succMCS]++;			}		}		else		{			pEntry->TXMCSFailed[pid]++;		}		if (reTry > 0)		{			if ((pid >= 12) && succMCS <=7)			{				reTry -= 4;			} 			pEntry->OneSecTxRetryOkCount += reTry;		}		else if (reTry < 0)		{			DBGPRINT(RT_DEBUG_INFO, ("(%d): reTry %d , (TxMCS = %d, SuccessRate = %d)\n", 				wcid, reTry, pid, StaFifo.field.SuccessRate & 0x7F));		}			i++;			// ASIC store 16 stack	} while ( i < (2*TX_RING_SIZE) );}/*	========================================================================		Routine Description:		Read statistical counters from hardware registers and record them		in software variables for later on query	Arguments:		pAd					Pointer to our adapter	Return Value:		None	IRQL = DISPATCH_LEVEL		========================================================================*/VOID NICUpdateRawCounters(	IN PRTMP_ADAPTER pAd){	ULONG	OldValue, Value2, PageSum, OneSecTransmitCount;	ULONG	TxErrorRatio, Retry, Fail;	RX_STA_CNT0_STRUC	 RxStaCnt0;	RX_STA_CNT1_STRUC   RxStaCnt1;	RX_STA_CNT2_STRUC   RxStaCnt2;	TX_STA_CNT0_STRUC 	 TxStaCnt0;	TX_STA_CNT1_STRUC	 StaTx1;	TX_STA_CNT2_STRUC	 StaTx2;	TX_AGG_CNT_STRUC	TxAggCnt;	TX_AGG_CNT0_STRUC	TxAggCnt0;	TX_AGG_CNT1_STRUC	TxAggCnt1;	TX_AGG_CNT2_STRUC	TxAggCnt2;	TX_AGG_CNT3_STRUC	TxAggCnt3;	TX_AGG_CNT4_STRUC	TxAggCnt4;	TX_AGG_CNT5_STRUC	TxAggCnt5;	TX_AGG_CNT6_STRUC	TxAggCnt6;	TX_AGG_CNT7_STRUC	TxAggCnt7;//==================================================================//Read PBF for emulation debug.	RTMP_IO_READ32(pAd, PBF_DBG, &OldValue);	RTMP_IO_READ32(pAd, TXRXQ_PCNT, &Value2);	PageSum = (OldValue&0xff);	PageSum += ((Value2&0xff));	PageSum += ((Value2&0xff00)>>8);	PageSum += ((Value2&0xff0000)>>16);	PageSum += ((Value2&0xff000000)>>24);	//==================================================================	RTMP_IO_READ32(pAd, RX_STA_CNT0, &RxStaCnt0.word);	RTMP_IO_READ32(pAd, RX_STA_CNT2, &RxStaCnt2.word);	{		RTMP_IO_READ32(pAd, RX_STA_CNT1, &RxStaCnt1.word);		// Update RX PLCP error counter		pAd->PrivateInfo.PhyRxErrCnt += RxStaCnt1.field.PlcpErr;		// Update False CCA counter		pAd->RalinkCounters.OneSecFalseCCACnt += RxStaCnt1.field.FalseCca;	}	// Update FCS counters	OldValue= pAd->WlanCounters.FCSErrorCount.u.LowPart;	pAd->WlanCounters.FCSErrorCount.u.LowPart += (RxStaCnt0.field.CrcErr); // >> 7);	if (pAd->WlanCounters.FCSErrorCount.u.LowPart < OldValue)		pAd->WlanCounters.FCSErrorCount.u.HighPart++;	// Add FCS error count to private counters	pAd->RalinkCounters.OneSecRxFcsErrCnt += RxStaCnt0.field.CrcErr;	OldValue = pAd->RalinkCounters.RealFcsErrCount.u.LowPart;	pAd->RalinkCounters.RealFcsErrCount.u.LowPart += RxStaCnt0.field.CrcErr;	if (pAd->RalinkCounters.RealFcsErrCount.u.LowPart < OldValue)		pAd->RalinkCounters.RealFcsErrCount.u.HighPart++;	// Update Duplicate Rcv check	pAd->RalinkCounters.DuplicateRcv += RxStaCnt2.field.RxDupliCount;	pAd->WlanCounters.FrameDuplicateCount.u.LowPart += RxStaCnt2.field.RxDupliCount;	// Update RX Overflow counter	pAd->Counters8023.RxNoBuffer += (RxStaCnt2.field.RxFifoOverflowCount);		// Update BEACON sent count	RTMP_IO_READ32(pAd, TX_STA_CNT0, &TxStaCnt0.word);	RTMP_IO_READ32(pAd, TX_STA_CNT1, &StaTx1.word);	RTMP_IO_READ32(pAd, TX_STA_CNT2, &StaTx2.word);	pAd->RalinkCounters.OneSecBeaconSentCnt += TxStaCnt0.field.TxBeaconCount;	pAd->RalinkCounters.OneSecTxRetryOkCount += StaTx1.field.TxRetransmit;	pAd->RalinkCounters.OneSecTxNoRetryOkCount += StaTx1.field.TxSuccess;	pAd->RalinkCounters.OneSecTxFailCount += TxStaCnt0.field.TxFailCount;	pAd->WlanCounters.TransmittedFragmentCount.u.LowPart += StaTx1.field.TxSuccess;	pAd->WlanCounters.RetryCount.u.LowPart += StaTx1.field.TxRetransmit;	pAd->WlanCounters.FailedCount.u.LowPart += TxStaCnt0.field.TxFailCount;

⌨️ 快捷键说明

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