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

📄 rtmp_init.c

📁 r73模块的无线网卡在Linux下的驱动程序
💻 C
📖 第 1 页 / 共 5 页
字号:
		Length		Size	Return Value:		None	Note:	========================================================================*/VOID	RTMPZeroMemory(	IN	PVOID	pSrc,	IN	ULONG	Length){	memset(pSrc, 0, Length);}VOID	RTMPFillMemory(	IN	PVOID	pSrc,	IN	ULONG	Length,	IN	UCHAR	Fill){	memset(pSrc, Fill, Length);}/*	========================================================================	Routine Description:		Copy data from memory block 1 to memory block 2	Arguments:		pDest		Pointer to destination memory address		pSrc		Pointer to source memory address		Length		Copy size	Return Value:		None	Note:	========================================================================*/VOID	RTMPMoveMemory(	OUT PVOID	pDest,	IN	PVOID	pSrc,	IN	ULONG	Length){#ifdef RTMP_EMBEDDED	if(Length <= 8)	{		*(PUCHAR)pDest++ = *(PUCHAR)pSrc++;		if(--Length == 0)	return;		*(PUCHAR)pDest++ = *(PUCHAR)pSrc++;		if(--Length == 0)	return;		*(PUCHAR)pDest++ = *(PUCHAR)pSrc++;		if(--Length == 0)	return;		*(PUCHAR)pDest++ = *(PUCHAR)pSrc++;		if(--Length == 0)	return;		*(PUCHAR)pDest++ = *(PUCHAR)pSrc++;		if(--Length == 0)	return;		*(PUCHAR)pDest++ = *(PUCHAR)pSrc++;		if(--Length == 0)	return;		*(PUCHAR)pDest++ = *(PUCHAR)pSrc++;		if(--Length == 0)	return;		*(PUCHAR)pDest++ = *(PUCHAR)pSrc++;		if(--Length == 0)	return;	}	else		memcpy(pDest, pSrc, Length);#else	memcpy(pDest, pSrc, Length);#endif}/*	========================================================================	Routine Description:		Initialize port configuration structure	Arguments:		Adapter			Pointer to our adapter	Return Value:		None	Note:	========================================================================*/VOID	PortCfgInit(	IN	PRTMP_ADAPTER pAd){	UINT i;	DBGPRINT(RT_DEBUG_TRACE, "--> PortCfgInit\n");	//	//	part I. intialize common configuration	//	for(i = 0; i < SHARE_KEY_NUM; i++)	{		pAd->SharedKey[i].KeyLen = 0;		pAd->SharedKey[i].CipherAlg = CIPHER_NONE;	}	pAd->Antenna.field.TxDefaultAntenna = 2;	// Ant-B	pAd->Antenna.field.RxDefaultAntenna = 2;	// Ant-B	pAd->Antenna.field.NumOfAntenna = 2;	pAd->LedCntl.field.LedMode = LED_MODE_DEFAULT;	pAd->LedIndicatorStrength = 0;	pAd->bAutoTxAgcA = FALSE;			// Default is OFF	pAd->bAutoTxAgcG = FALSE;			// Default is OFF	pAd->RfIcType = RFIC_5226;	pAd->PortCfg.Dsifs = 10;	  // in units of usec	pAd->PortCfg.PrivacyFilter = Ndis802_11PrivFilterAcceptAll;	pAd->PortCfg.TxPower = 100; //mW	pAd->PortCfg.TxPowerPercentage = 0xffffffff; // AUTO	pAd->PortCfg.TxPowerDefault = 0xffffffff; // AUTO	pAd->PortCfg.TxPreamble = Rt802_11PreambleAuto; // use Long preamble on TX by defaut	pAd->PortCfg.bUseZeroToDisableFragment = FALSE;	pAd->PortCfg.RtsThreshold = 2347;	pAd->PortCfg.FragmentThreshold = 2346;    pAd->PortCfg.dBmToRoam = 70;    // default threshold used	pAd->PortCfg.UseBGProtection = 0;	 // 0: AUTO	pAd->PortCfg.bEnableTxBurst = 0;	pAd->PortCfg.PhyMode = 0xff;	 // unknown	pAd->PortCfg.BandState = UNKNOWN_BAND;	pAd->PortCfg.UseShortSlotTime = TRUE;   // default short slot used, it depends on AP's capability	pAd->bAcceptDirect = TRUE;	pAd->bAcceptMulticast = FALSE;	pAd->bAcceptBroadcast = TRUE;	pAd->bAcceptAllMulticast = TRUE;	pAd->bAcceptRFMONTx	= FALSE;	pAd->bLocalAdminMAC = FALSE; //TRUE;    pAd->PortCfg.RadarDetect.CSPeriod = 10;	pAd->PortCfg.RadarDetect.CSCount = 0;	pAd->PortCfg.RadarDetect.RDMode = RD_NORMAL_MODE;	//	// part II. intialize STA specific configuration	//	pAd->PortCfg.Psm = PWR_ACTIVE;	pAd->PortCfg.BeaconPeriod = 100;	 // in mSec	pAd->PortCfg.ScanCnt = 0;	pAd->PortCfg.AuthMode = Ndis802_11AuthModeOpen;	pAd->PortCfg.WepStatus = Ndis802_11EncryptionDisabled;	pAd->PortCfg.PairCipher = Ndis802_11EncryptionDisabled;	pAd->PortCfg.GroupCipher = Ndis802_11EncryptionDisabled;	pAd->PortCfg.bMixCipher = FALSE;	pAd->PortCfg.DefaultKeyId = 0;	// 802.1x port control	pAd->PortCfg.PortSecured = WPA_802_1X_PORT_NOT_SECURED;	pAd->PortCfg.LastMicErrorTime = 0;	pAd->PortCfg.MicErrCnt		  = 0;	pAd->PortCfg.bBlockAssoc	  = FALSE;	pAd->PortCfg.WpaState		  = SS_NOTUSE;		// Handle by microsoft unless RaConfig changed it.	pAd->PortCfg.RssiTrigger = 0;	pAd->PortCfg.LastRssi = 0;	pAd->PortCfg.LastRssi2 = 0;	pAd->PortCfg.AvgRssi  = 0;	pAd->PortCfg.AvgRssiX8 = 0;	pAd->PortCfg.RssiTriggerMode = RSSI_TRIGGERED_UPON_BELOW_THRESHOLD;	pAd->PortCfg.AtimWin = 0;	pAd->PortCfg.DefaultListenCount = 3;//default listen count;	pAd->PortCfg.BssType = BSS_INFRA;  // BSS_INFRA or BSS_ADHOC	pAd->PortCfg.AdhocMode = 0;	// global variables mXXXX used in MAC protocol state machines	OPSTATUS_SET_FLAG(pAd, fOP_STATUS_RECEIVE_DTIM);	OPSTATUS_CLEAR_FLAG(pAd, fOP_STATUS_ADHOC_ON);	OPSTATUS_CLEAR_FLAG(pAd, fOP_STATUS_INFRA_ON);	// PHY specification	pAd->PortCfg.PhyMode = PHY_11ABG_MIXED; 	// default PHY mode	OPSTATUS_CLEAR_FLAG(pAd, fOP_STATUS_SHORT_PREAMBLE_INUSED);  // CCK use LONG preamble	// user desired power mode	pAd->PortCfg.WindowsPowerMode = Ndis802_11PowerModeCAM;	pAd->PortCfg.WindowsBatteryPowerMode = Ndis802_11PowerModeCAM;	pAd->PortCfg.bWindowsACCAMEnable = FALSE;	RTMPInitTimer(pAd, &pAd->PortCfg.QuickResponeForRateUpTimer, &StaQuickResponeForRateUpExec);	pAd->PortCfg.QuickResponeForRateUpTimerRunning = FALSE;	pAd->PortCfg.bHwRadio  = TRUE; // Default Hardware Radio status is On	pAd->PortCfg.bSwRadio  = TRUE; // Default Software Radio status is On	pAd->PortCfg.bRadio    = TRUE; // bHwRadio && bSwRadio	pAd->PortCfg.bHardwareRadio = FALSE;		// Default is OFF	pAd->PortCfg.bShowHiddenSSID = FALSE;		// Default no show	pAd->PortCfg.AdhocMode = 0; // b/g in adhoc	// Nitro mode control	pAd->PortCfg.bAutoReconnect = TRUE;	// Save the init time as last scan time, the system should do scan after 2 seconds.	// This patch is for driver wake up from standby mode, system will do scan right away.	pAd->PortCfg.LastScanTime = 0;	// Default for extra information is not valid	pAd->ExtraInfo = EXTRA_INFO_CLEAR;	// Default Config change flag	pAd->bConfigChanged = FALSE;	//	// part III. others	//	// dynamic BBP R17:sensibity tuning to overcome background noise	pAd->BbpTuning.bEnable				  = TRUE;	pAd->BbpTuning.R17LowerBoundG		  = 0x20; // for best RX sensibility	pAd->BbpTuning.R17UpperBoundG		  = 0x40; // for best RX noise isolation to prevent false CCA	pAd->BbpTuning.R17LowerBoundA		  = 0x28; // for best RX sensibility	pAd->BbpTuning.R17UpperBoundA		  = 0x48; // for best RX noise isolation to prevent false CCA	pAd->BbpTuning.R17LowerUpperSelect	  = 0;	  // Default used LowerBound.	pAd->BbpTuning.FalseCcaLowerThreshold = 100;	pAd->BbpTuning.FalseCcaUpperThreshold = 512;	pAd->BbpTuning.R17Delta 			  = 4;    pAd->Bbp94 = BBPR94_DEFAULT;	pAd->BbpForCCK = FALSE;//#if WPA_SUPPLICANT_SUPPORT	pAd->PortCfg.IEEE8021X = 0;	pAd->PortCfg.IEEE8021x_required_keys = 0;	pAd->PortCfg.WPA_Supplicant = FALSE;	pAd->PortCfg.bWscCapable = TRUE;	pAd->PortCfg.WscIEProbeReq.ValueLen = 0;	pAd->PortCfg.Send_Beacon = FALSE;//#endif	DBGPRINT(RT_DEBUG_TRACE, "<-- PortCfgInit\n");}UCHAR BtoH(	IN CHAR		ch){	if (ch >= '0' && ch <= '9') return (ch - '0');		  // Handle numerals	if (ch >= 'A' && ch <= 'F') return (ch - 'A' + 0xA);  // Handle capitol hex digits	if (ch >= 'a' && ch <= 'f') return (ch - 'a' + 0xA);  // Handle small hex digits	return(255);}////	PURPOSE:  Converts ascii string to network order hex////	PARAMETERS://	  src	 - pointer to input ascii string//	  dest	 - pointer to output hex//	  destlen - size of dest////	COMMENTS:////	  2 ascii bytes make a hex byte so must put 1st ascii byte of pair//	  into upper nibble and 2nd ascii byte of pair into lower nibble.//VOID AtoH(	IN CHAR		*src,	OUT UCHAR	*dest,	IN INT		destlen){	CHAR *srcptr;	PUCHAR destTemp;	srcptr = src;	destTemp = (PUCHAR) dest;	while(destlen--)	{		*destTemp = BtoH(*srcptr++) << 4;	 // Put 1st ascii byte in upper nibble.		*destTemp += BtoH(*srcptr++);	   // Add 2nd ascii byte to above.		destTemp++;	}}VOID	RTMPPatchMacBbpBug(	IN	PRTMP_ADAPTER	pAd){#if 0	ULONG	Index;	// Initialize BBP register to default value	for (Index = 0; Index < NUM_BBP_REG_PARMS; Index++)	{		RTUSBWriteBBPRegister(pAd, BBPRegTable[Index].Register, (UCHAR)BBPRegTable[Index].Value);	}	// Initialize RF register to default value	AsicSwitchChannel(pAd, pAd->PortCfg.Channel);	AsicLockChannel(pAd, pAd->PortCfg.Channel);	// Re-init BBP register from EEPROM value	NICInitAsicFromEEPROM(pAd);#endif}// Unify all delay routine by using udelayVOID	RTMPusecDelay(	IN	ULONG	usec){	ULONG	i;	for (i = 0; i < (usec / 50); i++)		udelay(50);	if (usec % 50)		udelay(usec % 50);}/*	========================================================================	Routine Description:		Set LED Status	Arguments:		pAd						Pointer to our adapter		Status					LED Status	Return Value:		None	Note:	========================================================================*/VOID	RTMPSetLED(	IN PRTMP_ADAPTER	pAd,	IN UCHAR			Status){	switch (Status)	{		case LED_LINK_DOWN:			pAd->LedCntl.field.LinkGStatus = 0;			pAd->LedCntl.field.LinkAStatus = 0;			pAd->LedIndicatorStrength = 0;			RTUSBSetLED(pAd, pAd->LedCntl, pAd->LedIndicatorStrength);			break;		case LED_LINK_UP:			if (pAd->PortCfg.Channel <= 14)			{				// 11 G mode				pAd->LedCntl.field.LinkGStatus = 1;				pAd->LedCntl.field.LinkAStatus = 0;			}			else			{				//11 A mode				pAd->LedCntl.field.LinkGStatus = 0;				pAd->LedCntl.field.LinkAStatus = 1;			}			RTUSBSetLED(pAd, pAd->LedCntl, pAd->LedIndicatorStrength);			break;		case LED_RADIO_ON:			pAd->LedCntl.field.RadioStatus = 1;			RTUSBSetLED(pAd, pAd->LedCntl, pAd->LedIndicatorStrength);			break;		case LED_HALT:			//Same as Radio Off.		case LED_RADIO_OFF:			pAd->LedCntl.field.RadioStatus = 0;			pAd->LedCntl.field.LinkGStatus = 0;			pAd->LedCntl.field.LinkAStatus = 0;			pAd->LedIndicatorStrength = 0;			RTUSBSetLED(pAd, pAd->LedCntl, pAd->LedIndicatorStrength);			break;		default:			DBGPRINT(RT_DEBUG_WARN, "RTMPSetLED::Unknown Status %d\n", Status);			break;	}}/*	========================================================================	Routine Description:		Set LED Signal Stregth	Arguments:		pAd						Pointer to our adapter		Dbm						Signal Stregth	Return Value:		None	Note:		Can be run on any IRQL level.		According to Microsoft Zero Config Wireless Signal Stregth definition as belows.		<= -90	No Signal		<= -81	Very Low		<= -71	Low		<= -67	Good		<= -57	Very Good		 > -57	Excellent	========================================================================*/VOID RTMPSetSignalLED(	IN PRTMP_ADAPTER	pAd,	IN NDIS_802_11_RSSI Dbm){	USHORT		nLed = 0;	if (Dbm <= -90)		nLed = 0;	else if (Dbm <= -81)		nLed = 1;	else if (Dbm <= -71)		nLed = 2;	else if (Dbm <= -67)		nLed = 3;	else if (Dbm <= -57)		nLed = 4;	else		nLed = 5;	//	// Update Signal Stregth to if changed.	//	if ((pAd->LedIndicatorStrength != nLed) &&		(pAd->LedCntl.field.LedMode == LED_MODE_SIGNAL_STREGTH))	{		pAd->LedIndicatorStrength = nLed;		RTUSBSetLED(pAd, pAd->LedCntl, pAd->LedIndicatorStrength);	}}VOID RTMPCckBbpTuning(	IN	PRTMP_ADAPTER	pAd,	IN	UINT			TxRate){	CHAR		Bbp94 = 0xFF;	//	// Do nothing if TxPowerEnable == FALSE	//	if (pAd->TxPowerDeltaConfig.field.TxPowerEnable == FALSE)		return;	if ((TxRate < RATE_FIRST_OFDM_RATE) &&		(pAd->BbpForCCK == FALSE))	{		Bbp94 = pAd->Bbp94;		if (pAd->TxPowerDeltaConfig.field.Type == 1)		{			Bbp94 += pAd->TxPowe

⌨️ 快捷键说明

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