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

📄 rtmp_init.c

📁 ralink 2870 usb无线网卡 最新驱动
💻 C
📖 第 1 页 / 共 5 页
字号:
			if (StaFifo.field.TxBF) // 3*3				pEntry->TxBFCount++;#endif // DOT11_N_SUPPORT //#ifdef UAPSD_AP_SUPPORT			UAPSD_SP_AUE_Handle(pAd, pEntry, StaFifo.field.TxSuccess);#endif // UAPSD_AP_SUPPORT // 			if (!StaFifo.field.TxSuccess)			{				pEntry->FIFOCount++;				pEntry->OneSecTxFailCount++;													if (pEntry->FIFOCount >= 1)				{								DBGPRINT(RT_DEBUG_TRACE, ("#"));#ifdef DOT11_N_SUPPORT					pEntry->NoBADataCountDown = 64;#endif // DOT11_N_SUPPORT //					if(pEntry->PsMode == PWR_ACTIVE)					{#ifdef DOT11_N_SUPPORT											int tid;						for (tid=0; tid<NUM_OF_TID; tid++)						{							BAOriSessionTearDown(pAd, pEntry->Aid,  tid, FALSE, FALSE);						}#endif // DOT11_N_SUPPORT //						// Update the continuous transmission counter except PS mode						pEntry->ContinueTxFailCnt++;#ifdef WDS_SUPPORT						// fix WDS Jam issue						if((pEntry->ValidAsWDS == TRUE)							&& (pEntry->LockEntryTx == FALSE)							&& (pEntry->ContinueTxFailCnt >= pAd->ApCfg.EntryLifeCheck))						{ 							DBGPRINT(RT_DEBUG_TRACE, ("Entry %02x:%02x:%02x:%02x:%02x:%02x Blocked!! (Fail Cnt = %d)\n",								pEntry->Addr[0],pEntry->Addr[1],pEntry->Addr[2],pEntry->Addr[3],								pEntry->Addr[4],pEntry->Addr[5],pEntry->ContinueTxFailCnt ));							pEntry->LockEntryTx = TRUE;						}#endif // WDS_SUPPORT //					}					else					{    						// Clear the FIFOCount when sta in Power Save mode. Basically we assume 						//     this tx error happened due to sta just go to sleep.						pEntry->FIFOCount = 0;						pEntry->ContinueTxFailCnt = 0;					}					//pEntry->FIFOCount = 0;				}				//pEntry->bSendBAR = TRUE;			}			else			{#ifdef DOT11_N_SUPPORT				if ((pEntry->PsMode != PWR_SAVE) && (pEntry->NoBADataCountDown > 0))				{					pEntry->NoBADataCountDown--;					if (pEntry->NoBADataCountDown==0)					{						DBGPRINT(RT_DEBUG_TRACE, ("@\n"));					}				}#endif // DOT11_N_SUPPORT //				pEntry->FIFOCount = 0;				pEntry->OneSecTxNoRetryOkCount++;				// update NoDataIdleCount when sucessful send packet to STA.				pEntry->NoDataIdleCount = 0;				pEntry->ContinueTxFailCnt = 0;#ifdef WDS_SUPPORT				pEntry->LockEntryTx = FALSE;#endif // WDS_SUPPORT //			}			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;			}			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){	UINT32	OldValue;//, Value2;	//ULONG	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;	COUNTER_RALINK		*pRalinkCounters;	pRalinkCounters = &pAd->RalinkCounters;	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	pRalinkCounters->OneSecRxFcsErrCnt += RxStaCnt0.field.CrcErr;	OldValue = pRalinkCounters->RealFcsErrCount.u.LowPart;	pRalinkCounters->RealFcsErrCount.u.LowPart += RxStaCnt0.field.CrcErr;	if (pRalinkCounters->RealFcsErrCount.u.LowPart < OldValue)		pRalinkCounters->RealFcsErrCount.u.HighPart++;	// Update Duplicate Rcv check	pRalinkCounters->DuplicateRcv += RxStaCnt2.field.RxDupliCount;	pAd->WlanCounters.FrameDuplicateCount.u.LowPart += RxStaCnt2.field.RxDupliCount;	// Update RX Overflow counter	pAd->Counters8023.RxNoBuffer += (RxStaCnt2.field.RxFifoOverflowCount);		//pAd->RalinkCounters.RxCount = 0;#ifdef RTMP_MAC_USB	if (pRalinkCounters->RxCount != pAd->watchDogRxCnt)	{		pAd->watchDogRxCnt = pRalinkCounters->RxCount;		pAd->watchDogRxOverFlowCnt = 0;	}	else	{		if (RxStaCnt2.field.RxFifoOverflowCount)			pAd->watchDogRxOverFlowCnt++;		else			pAd->watchDogRxOverFlowCnt = 0;	}#endif // RTMP_MAC_USB //		//if (!OPSTATUS_TEST_FLAG(pAd, fOP_STATUS_TX_RATE_SWITCH_ENABLED) || 	//	(OPSTATUS_TEST_FLAG(pAd, fOP_STATUS_TX_RATE_SWITCH_ENABLED) && (pAd->MacTab.Size != 1)))	if (!pAd->bUpdateBcnCntDone)	{	// 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);	pRalinkCounters->OneSecBeaconSentCnt += TxStaCnt0.field.TxBeaconCount;	pRalinkCounters->OneSecTxRetryOkCount += StaTx1.field.TxRetransmit;	pRalinkCounters->OneSecTxNoRetryOkCount += StaTx1.field.TxSuccess;	pRalinkCounters->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;	}	//if (pAd->bStaFifoTest == TRUE)	{		RTMP_IO_READ32(pAd, TX_AGG_CNT, &TxAggCnt.word);	RTMP_IO_READ32(pAd, TX_AGG_CNT0, &TxAggCnt0.word);	RTMP_IO_READ32(pAd, TX_AGG_CNT1, &TxAggCnt1.word);	RTMP_IO_READ32(pAd, TX_AGG_CNT2, &TxAggCnt2.word);	RTMP_IO_READ32(pAd, TX_AGG_CNT3, &TxAggCnt3.word);		RTMP_IO_READ32(pAd, TX_AGG_CNT4, &TxAggCnt4.word);		RTMP_IO_READ32(pAd, TX_AGG_CNT5, &TxAggCnt5.word);		RTMP_IO_READ32(pAd, TX_AGG_CNT6, &TxAggCnt6.word);		RTMP_IO_READ32(pAd, TX_AGG_CNT7, &TxAggCnt7.word);		pRalinkCounters->TxAggCount += TxAggCnt.field.AggTxCount;		pRalinkCounters->TxNonAggCount += TxAggCnt.field.NonAggTxCount;		pRalinkCounters->TxAgg1MPDUCount += TxAggCnt0.field.AggSize1Count;		pRalinkCounters->TxAgg2MPDUCount += TxAggCnt0.field.AggSize2Count;				pRalinkCounters->TxAgg3MPDUCount += TxAggCnt1.field.AggSize3Count;		pRalinkCounters->TxAgg4MPDUCount += TxAggCnt1.field.AggSize4Count;		pRalinkCounters->TxAgg5MPDUCount += TxAggCnt2.field.AggSize5Count;		pRalinkCounters->TxAgg6MPDUCount += TxAggCnt2.field.AggSize6Count;			pRalinkCounters->TxAgg7MPDUCount += TxAggCnt3.field.AggSize7Count;		pRalinkCounters->TxAgg8MPDUCount += TxAggCnt3.field.AggSize8Count;		pRalinkCounters->TxAgg9MPDUCount += TxAggCnt4.field.AggSize9Count;		pRalinkCounters->TxAgg10MPDUCount += TxAggCnt4.field.AggSize10Count;		pRalinkCounters->TxAgg11MPDUCount += TxAggCnt5.field.AggSize11Count;		pRalinkCounters->TxAgg12MPDUCount += TxAggCnt5.field.AggSize12Count;		pRalinkCounters->TxAgg13MPDUCount += TxAggCnt6.field.AggSize13Count;		pRalinkCounters->TxAgg14MPDUCount += TxAggCnt6.field.AggSize14Count;		pRalinkCounters->TxAgg15MPDUCount += TxAggCnt7.field.AggSize15Count;		pRalinkCounters->TxAgg16MPDUCount += TxAggCnt7.field.AggSize16Count;		// Calculate the transmitted A-MPDU count		pRalinkCounters->TransmittedAMPDUCount.u.LowPart += TxAggCnt0.field.AggSize1Count;		pRalinkCounters->TransmittedAMPDUCount.u.LowPart += (TxAggCnt0.field.AggSize2Count / 2);		pRalinkCounters->TransmittedAMPDUCount.u.LowPart += (TxAggCnt1.field.AggSize3Count / 3);		pRalinkCounters->TransmittedAMPDUCount.u.LowPart += (TxAggCnt1.field.AggSize4Count / 4);		pRalinkCounters->TransmittedAMPDUCount.u.LowPart += (TxAggCnt2.field.AggSize5Count / 5);		pRalinkCounters->TransmittedAMPDUCount.u.LowPart += (TxAggCnt2.field.AggSize6Count / 6);		pRalinkCounters->TransmittedAMPDUCount.u.LowPart += (TxAggCnt3.field.AggSize7Count / 7);		pRalinkCounters->TransmittedAMPDUCount.u.LowPart += (TxAggCnt3.field.AggSize8Count / 8);		pRalinkCounters->TransmittedAMPDUCount.u.LowPart += (TxAggCnt4.field.AggSize9Count / 9);		pRalinkCounters->TransmittedAMPDUCount.u.LowPart += (TxAggCnt4.field.AggSize10Count / 10);		pRalinkCounters->TransmittedAMPDUCount.u.LowPart += (TxAggCnt5.field.AggSize11Count / 11);		pRalinkCounters->TransmittedAMPDUCount.u.LowPart += (TxAggCnt5.field.AggSize12Count / 12);		pRalinkCounters->TransmittedAMPDUCount.u.LowPart += (TxAggCnt6.field.AggSize13Count / 13);		pRalinkCounters->TransmittedAMPDUCount.u.LowPart += (TxAggCnt6.field.AggSize14Count / 14);		pRalinkCounters->TransmittedAMPDUCount.u.LowPart += (TxAggCnt7.field.AggSize15Count / 15);		pRalinkCounters->TransmittedAMPDUCount.u.LowPart += (TxAggCnt7.field.AggSize16Count / 16);					}#ifdef DBG_DIAGNOSE	{		RtmpDiagStruct	*pDiag;		UCHAR			ArrayCurIdx, i;				pDiag = &pAd->DiagStruct;		ArrayCurIdx = pDiag->ArrayCurIdx;				if (pDiag->inited == 0)		{			NdisZeroMemory(pDiag, sizeof(struct _RtmpDiagStrcut_));			pDiag->ArrayStartIdx = pDiag->ArrayCurIdx = 0;			pDiag->inited = 1;		}		else		{			// Tx			pDiag->TxFailCnt[ArrayCurIdx] = TxStaCnt0.field.TxFailCount;			pDiag->TxAggCnt[ArrayCurIdx] = TxAggCnt.field.AggTxCount;			pDiag->TxNonAggCnt[ArrayCurIdx] = TxAggCnt.field.NonAggTxCount;			pDiag->TxAMPDUCnt[ArrayCurIdx][0] = TxAggCnt0.field.AggSize1Count;			pDiag->TxAMPDUCnt[ArrayCurIdx][1] = TxAggCnt0.field.AggSize2Count;			pDiag->TxAMPDUCnt[ArrayCurIdx][2] = TxAggCnt1.field.AggSize3Count;			pDiag->TxAMPDUCnt[ArrayCurIdx][3] = TxAggCnt1.field.AggSize4Count;			pDiag->TxAMPDUCnt[ArrayCurIdx][4] = TxAggCnt2.field.AggSize5Count;			pDiag->TxAMPDUCnt[ArrayCurIdx][5] = TxAggCnt2.field.AggSize6Count;			pDiag->TxAMPDUCnt[ArrayCurIdx][6] = TxAggCnt3.field.AggSize7Count;			pDiag->TxAMPDUCnt[ArrayCurIdx][7] = TxAggCnt3.field.AggSize8Count;			pDiag->TxAMPDUCnt[ArrayCurIdx][8] = TxAggCnt4.field.AggSize9Count;			pDiag->TxAMPDUCnt[ArrayCurIdx][9] = TxAggCnt4.field.AggSize10Count;			pDiag->TxAMPDUCnt[ArrayCurIdx][10] = TxAggCnt5.field.AggSize11Count;			pDiag->TxAMPDUCnt[ArrayCurIdx][11] = TxAggCnt5.field.AggSize12Count;			pDiag->TxAMPDUCnt[ArrayCurIdx][12] = TxAggCnt6.field.AggSize13Count;			pDiag->TxAMPDUCnt[ArrayCurIdx][13] = TxAggCnt6.field.AggSize14Count;			pDiag->TxAMPDUCnt[ArrayCurIdx][14] = TxAggCnt7.field.AggSize15Count;			pDiag->TxAMPDUCnt[ArrayCurIdx][15] = TxAggCnt7.field.AggSize16Count;			pDiag->RxCrcErrCnt[ArrayCurIdx] = RxStaCnt0.field.CrcErr;						INC_RING_INDEX(pDiag->ArrayCurIdx,  DIAGNOSE_TIME);			ArrayCurIdx = pDiag->ArrayCurIdx;			for (i =0; i < 9; i++)			{				pDiag->TxDescCnt[ArrayCurIdx][i]= 0;				pDiag->TxSWQueCnt[ArrayCurIdx][i] =0;				pDiag->TxMcsCnt[ArrayCurIdx][i] = 0;				pDiag->RxMcsCnt[ArrayCurIdx][i] = 0;			}			pDiag->TxDataCnt[ArrayCurIdx] = 0;			pDiag->TxFailCnt[ArrayCurIdx] = 0;			pDiag->RxDataCnt[ArrayCurIdx] = 0;			pDiag->RxCrcErrCnt[ArrayCurIdx]  = 0;//			for (i = 9; i < 16; i++)			for (i = 9; i < 24; i++) // 3*3			{				pDiag->TxDescCnt[ArrayCurIdx][i] = 0;				pDiag->TxMcsCnt[ArrayCurIdx][i] = 0;				pDiag->RxMcsCnt[ArrayCurIdx][i] = 0;}			if (pDiag->ArrayCurIdx == pDiag->ArrayStartIdx)				INC_RING_INDEX(pDiag->ArrayStartIdx,  DIAGNOSE_TIME);		}			}#endif // DBG_DIAGNOSE //}/*	========================================================================		Routine Description:		Reset NIC from error	Arguments:		Adapter						Pointer to our adapter	Return Value:		None	IRQL = PASSIVE_LEVEL	Note:		Reset NIC from error state			========================================================================*/VOID	NICResetFromError(	IN	PRTMP_ADAPTER	pAd){	// Reset BBP (according to alex, reset ASIC will force reset BBP	// Therefore, skip the reset BBP	// RTMP_IO_WRITE32(pAd, MAC_CSR1, 0x2);			RTMP_IO_WRITE32(pAd, MAC_SYS_CTRL, 0x1);	// Remove ASIC from reset state	RTMP_IO_WRITE32(pAd, MAC_SYS_CTRL, 0x0);	NICInitializeAdapter(pAd, FALSE);		NICInitAsicFromEEPROM(pAd);	// Switch to current channel, since during reset process, the connection should remains on.		AsicSwitchChannel(pAd, pAd->CommonCfg.CentralChannel, FALSE);	AsicLockChannel(pAd, pAd->CommonCfg.CentralChannel);}NDIS_STATUS NICLoadFirmware(	IN PRTMP_ADAPTER pAd){	NDIS_STATUS	 status = NDIS_STATUS_SUCCESS;	if (pAd->chipOps.loadFirmware)		status = pAd->chipOps.loadFirmware(pAd);	return status;}/*	========================================================================		Routine Description:		erase 8051 firmware image in MAC ASIC	Arguments:		Adapter						Pointer to our adapter	IRQL = PASSIVE_LEVEL			========================================================================*/VOID NICEraseFirmware(	IN PRTMP_ADAPTER pAd){	if (pAd->chipOps.eraseFirmware)		pAd->chipOps.eraseFirmware(pAd);	}/* End of NICEraseFirmware *//*	========================================================================		Routine Description:		Load Tx rate switching parameters	Arguments:		Adapter						Pointer

⌨️ 快捷键说明

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