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

📄 rtmp_init.c

📁 TP Link 321 Linux Driver
💻 C
📖 第 1 页 / 共 5 页
字号:
			pAd->TssiPlusBoundaryA[1], pAd->TssiPlusBoundaryA[2], pAd->TssiPlusBoundaryA[3], pAd->TssiPlusBoundaryA[4],			pAd->TxAgcStepA, pAd->bAutoTxAgcA);	}		pAd->BbpRssiToDbmDelta = 0x79;	RTUSBReadEEPROM(pAd, EEPROM_FREQ_OFFSET, (PUCHAR) &value, 2);	if ((value & 0xFF00) == 0xFF00)	{		pAd->RFProgSeq = 0;	}	else	{		pAd->RFProgSeq = (value & 0x0300) >> 8;	// bit 8,9	}	value &= 0x00FF;	if (value != 0x00FF)		pAd->RfFreqOffset = (ULONG) value;	else		pAd->RfFreqOffset = 0;	DBGPRINT(RT_DEBUG_TRACE, "E2PROM: RF freq offset=0x%x\n", pAd->RfFreqOffset);	//CountryRegion byte offset = 0x25	value = pAd->EEPROMDefaultValue[2] >> 8;	value2 = pAd->EEPROMDefaultValue[2] & 0x00FF;    if ((value <= REGION_MAXIMUM_BG_BAND) && (value2 <= REGION_MAXIMUM_A_BAND))	{		pAd->PortCfg.CountryRegion = ((UCHAR) value) | 0x80;		pAd->PortCfg.CountryRegionForABand = ((UCHAR) value2) | 0x80;	}	//	// Get RSSI Offset on EEPROM 0x9Ah & 0x9Ch.	// The valid value are (-10 ~ 10) 	// 	RTUSBReadEEPROM(pAd, EEPROM_RSSI_BG_OFFSET, (PUCHAR) &value, 2);	pAd->BGRssiOffset1 = value & 0x00ff;	pAd->BGRssiOffset2 = (value >> 8);	// Validate 11b/g RSSI_1 offset.	if ((pAd->BGRssiOffset1 < -10) || (pAd->BGRssiOffset1 > 10))		pAd->BGRssiOffset1 = 0;	// Validate 11b/g RSSI_2 offset.	if ((pAd->BGRssiOffset2 < -10) || (pAd->BGRssiOffset2 > 10))		pAd->BGRssiOffset2 = 0;			RTUSBReadEEPROM(pAd, EEPROM_RSSI_A_OFFSET, (PUCHAR) &value, 2);	pAd->ARssiOffset1 = value & 0x00ff;	pAd->ARssiOffset2 = (value >> 8);	// Validate 11a RSSI_1 offset.	if ((pAd->ARssiOffset1 < -10) || (pAd->ARssiOffset1 > 10))		pAd->ARssiOffset1 = 0;	//Validate 11a RSSI_2 offset.	if ((pAd->ARssiOffset2 < -10) || (pAd->ARssiOffset2 > 10))		pAd->ARssiOffset2 = 0;	//	// Get LED Setting.	//	RTUSBReadEEPROM(pAd, EEPROM_LED_OFFSET, (PUCHAR)&LedSetting.word, 2);	if (LedSetting.word == 0xFFFF)	{		//		// Set it to Default.		//		LedSetting.field.PolarityRDY_G = 0;   // Active High.		LedSetting.field.PolarityRDY_A = 0;   // Active High.		LedSetting.field.PolarityACT = 0;	 // Active High.		LedSetting.field.PolarityGPIO_0 = 0; // Active High.		LedSetting.field.PolarityGPIO_1 = 0; // Active High.		LedSetting.field.PolarityGPIO_2 = 0; // Active High.		LedSetting.field.PolarityGPIO_3 = 0; // Active High.		LedSetting.field.PolarityGPIO_4 = 0; // Active High.		LedSetting.field.LedMode = LED_MODE_DEFAULT;			}	pAd->LedCntl.word = 0;	pAd->LedCntl.field.LedMode = LedSetting.field.LedMode;	pAd->LedCntl.field.PolarityRDY_G = LedSetting.field.PolarityRDY_G;	pAd->LedCntl.field.PolarityRDY_A = LedSetting.field.PolarityRDY_A;	pAd->LedCntl.field.PolarityACT = LedSetting.field.PolarityACT;	pAd->LedCntl.field.PolarityGPIO_0 = LedSetting.field.PolarityGPIO_0;	pAd->LedCntl.field.PolarityGPIO_1 = LedSetting.field.PolarityGPIO_1;	pAd->LedCntl.field.PolarityGPIO_2 = LedSetting.field.PolarityGPIO_2;	pAd->LedCntl.field.PolarityGPIO_3 = LedSetting.field.PolarityGPIO_3;	pAd->LedCntl.field.PolarityGPIO_4 = LedSetting.field.PolarityGPIO_4;	RTUSBReadEEPROM(pAd, EEPROM_TXPOWER_DELTA_OFFSET, (PUCHAR)&value, 2);	value = value & 0x00ff;	if (value != 0xff)	{		pAd->TxPowerDeltaConfig.value = (UCHAR) value;		if (pAd->TxPowerDeltaConfig.field.DeltaValue > 0x04)			pAd->TxPowerDeltaConfig.field.DeltaValue = 0x04;	}	else		pAd->TxPowerDeltaConfig.field.TxPowerEnable = FALSE;			DBGPRINT(RT_DEBUG_TRACE, "<-- NICReadEEPROMParameters\n");}/*	========================================================================		Routine Description:		Set default value from EEPROM			Arguments:		Adapter						Pointer to our adapter	Return Value:		None	Note:			========================================================================*/VOID NICInitAsicFromEEPROM(	IN	PRTMP_ADAPTER	pAd){	ULONG					data;	USHORT					i;	ULONG					MiscMode;	EEPROM_ANTENNA_STRUC	Antenna;	EEPROM_NIC_CONFIG2_STRUC	NicConfig2;	DBGPRINT(RT_DEBUG_TRACE, "--> NICInitAsicFromEEPROM\n");	for(i = 3; i < NUM_EEPROM_BBP_PARMS; i++)	{		UCHAR BbpRegIdx, BbpValue;			if ((pAd->EEPROMDefaultValue[i] != 0xFFFF) && (pAd->EEPROMDefaultValue[i] != 0))		{			BbpRegIdx = (UCHAR)(pAd->EEPROMDefaultValue[i] >> 8);			BbpValue  = (UCHAR)(pAd->EEPROMDefaultValue[i] & 0xff);			RTUSBWriteBBPRegister(pAd, BbpRegIdx, BbpValue);		}	}	#ifdef BIG_ENDIAN	Antenna.word = SWAP16(pAd->EEPROMDefaultValue[0]);#else	Antenna.word = pAd->EEPROMDefaultValue[0];#endif	if (Antenna.word == 0xFFFF)	{		Antenna.word = 0;		Antenna.field.RfIcType = RFIC_5226;		Antenna.field.HardwareRadioControl = 0; 	// no hardware control		Antenna.field.DynamicTxAgcControl = 0;		Antenna.field.FrameType = 0;		Antenna.field.RxDefaultAntenna = 2; 		// Ant-B		Antenna.field.TxDefaultAntenna = 2; 		// Ant-B		Antenna.field.NumOfAntenna = 2;		DBGPRINT(RT_DEBUG_WARN, "E2PROM error, hard code as 0x%04x\n", Antenna.word);	}	pAd->RfIcType = (UCHAR) Antenna.field.RfIcType;	DBGPRINT(RT_DEBUG_WARN, "pAd->RfIcType = %d\n", pAd->RfIcType);	//	// For RFIC RFIC_5225 & RFIC_2527	// Must enable RF RPI mode on PHY_CSR1 bit 16.	//	if ((pAd->RfIcType == RFIC_5225) || (pAd->RfIcType == RFIC_2527) || (pAd->RfIcType == RFIC_3020))	{		RTUSBReadMACRegister(pAd, PHY_CSR1, &MiscMode);		MiscMode |= 0x10000;		RTUSBWriteMACRegister(pAd, PHY_CSR1, MiscMode);	}		// Save the antenna for future use	pAd->Antenna.word = Antenna.word;		// Read Hardware controlled Radio state enable bit	if (Antenna.field.HardwareRadioControl == 1)	{		pAd->PortCfg.bHardwareRadio = TRUE;				// Read GPIO pin7 as Hardware controlled radio state		RTUSBReadMACRegister(pAd, MAC_CSR13, &data);		//		// The GPIO pin7 default is 1:Pull-High, means HW Radio Enable.		// When the value is 0, means HW Radio disable.		//		if ((data & 0x80) == 0)		{			pAd->PortCfg.bHwRadio = FALSE;			// Update extra information to link is up			pAd->ExtraInfo = HW_RADIO_OFF;		}	}	else		pAd->PortCfg.bHardwareRadio = FALSE;				pAd->PortCfg.bRadio = pAd->PortCfg.bSwRadio && pAd->PortCfg.bHwRadio;		if (pAd->PortCfg.bRadio == FALSE)	{		RTUSBWriteMACRegister(pAd, MAC_CSR10, 0x00001818);		RTMP_SET_FLAG(pAd, fRTMP_ADAPTER_RADIO_OFF);			RTMPSetLED(pAd, LED_RADIO_OFF);	}	else	{		RTMPSetLED(pAd, LED_RADIO_ON);	}	#ifdef BIG_ENDIAN	NicConfig2.word = SWAP16(pAd->EEPROMDefaultValue[1]);#else	NicConfig2.word = pAd->EEPROMDefaultValue[1];#endif	if (NicConfig2.word == 0xffff)	{		NicConfig2.word = 0;	}	// Save the antenna for future use	pAd->NicConfig2.word = NicConfig2.word;	DBGPRINT(RT_DEBUG_TRACE, "Use Hw Radio Control Pin=%d; if used Pin=%d;\n",		pAd->PortCfg.bHardwareRadio, pAd->PortCfg.bHardwareRadio);		DBGPRINT(RT_DEBUG_TRACE, "RFIC=%d, LED mode=%d\n", pAd->RfIcType, pAd->LedCntl.field.LedMode);	pAd->PortCfg.BandState = UNKNOWN_BAND;	DBGPRINT(RT_DEBUG_TRACE, "<-- NICInitAsicFromEEPROM\n");}/*	========================================================================		Routine Description:		Initialize NIC hardware	Arguments:		Adapter						Pointer to our adapter	Return Value:		None	Note:			========================================================================*/NDIS_STATUS	NICInitializeAsic(	IN	PRTMP_ADAPTER	pAd){	ULONG			Index, Counter;	UCHAR			Value = 0xff;	ULONG			Version;	MAC_CSR12_STRUC	MacCsr12;	DBGPRINT(RT_DEBUG_TRACE, "--> NICInitializeAsic\n");	RTUSBReadMACRegister(pAd, MAC_CSR0, &Version);		// Initialize MAC register to default value	for (Index = 0; Index < NUM_MAC_REG_PARMS; Index++)	{		RTUSBWriteMACRegister(pAd, (USHORT)MACRegTable[Index].Register, MACRegTable[Index].Value);	}		// Set Host ready before kicking Rx	RTUSBWriteMACRegister(pAd, MAC_CSR1, 0x3);	RTUSBWriteMACRegister(pAd, MAC_CSR1, 0x0);			//	// Before program BBP, we need to wait BBP/RF get wake up.	//	Index = 0;	do	{		RTUSBReadMACRegister(pAd, MAC_CSR12, &MacCsr12.word);		if (MacCsr12.field.BbpRfStatus == 1)			break;		RTUSBWriteMACRegister(pAd, MAC_CSR12, 0x4); //Force wake up.		RTMPusecDelay(1000);	} while (Index++ < 1000);	// Read BBP register, make sure BBP is up and running before write new data	Index = 0;	do 	{		RTUSBReadBBPRegister(pAd, BBP_R0, &Value);		DBGPRINT(RT_DEBUG_TRACE, "BBP version = %d\n", Value);	} while ((++Index < 100) && ((Value == 0xff) || (Value == 0x00)));		  	// Initialize BBP register to default value	for (Index = 0; Index < NUM_BBP_REG_PARMS; Index++)	{		RTUSBWriteBBPRegister(pAd, BBPRegTable[Index].Register, BBPRegTable[Index].Value);	}	// Clear raw counters	RTUSBReadMACRegister(pAd, STA_CSR0, &Counter);	RTUSBReadMACRegister(pAd, STA_CSR1, &Counter);	RTUSBReadMACRegister(pAd, STA_CSR2, &Counter);	// assert HOST ready bit	RTUSBWriteMACRegister(pAd, MAC_CSR1, 0x4);		DBGPRINT(RT_DEBUG_TRACE, "<-- NICInitializeAsic\n");	return NDIS_STATUS_SUCCESS;}/*	========================================================================		Routine Description:		Reset NIC Asics	Arguments:		Adapter						Pointer to our adapter	Return Value:		None	Note:		Reset NIC to initial state AS IS system boot up time.			========================================================================*/VOID NICIssueReset(	IN	PRTMP_ADAPTER	pAd){}/*	========================================================================		Routine Description:		Check ASIC registers and find any reason the system might hang	Arguments:		Adapter						Pointer to our adapter	Return Value:		None		========================================================================*/BOOLEAN	NICCheckForHang(	IN	PRTMP_ADAPTER	pAd){	return (FALSE);}/*	========================================================================		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	========================================================================*/VOID NICUpdateRawCounters(	IN PRTMP_ADAPTER pAd){	ULONG	OldValue;	STA_CSR0_STRUC StaCsr0;	STA_CSR1_STRUC StaCsr1;	STA_CSR2_STRUC StaCsr2;	STA_CSR3_STRUC StaCsr3;	STA_CSR4_STRUC StaCsr4;	STA_CSR5_STRUC StaCsr5;	RTUSBReadMACRegister(pAd, STA_CSR0, &StaCsr0.word);	// Update RX PLCP error counter	pAd->PrivateInfo.PhyRxErrCnt += StaCsr0.field.PlcpErr;	// Update FCS counters	OldValue= pAd->WlanCounters.FCSErrorCount.vv.LowPart;	pAd->WlanCounters.FCSErrorCount.vv.LowPart += (StaCsr0.field.CrcErr); // >> 7);	if (pAd->WlanCounters.FCSErrorCount.vv.LowPart < OldValue)		pAd->WlanCounters.FCSErrorCount.vv.HighPart++;			// Add FCS error count to private counters	 	OldValue = pAd->RalinkCounters.RealFcsErrCount.vv.LowPart;	pAd->RalinkCounters.RealFcsErrCount.vv.LowPart += StaCsr0.field.CrcErr;	if (pAd->RalinkCounters.RealFcsErrCount.vv.LowPart < OldValue)		pAd->RalinkCounters.RealFcsErrCount.vv.HighPart++;	// Update False CCA counter	RTUSBReadMACRegister(pAd, STA_CSR1, &StaCsr1.word);	pAd->RalinkCounters.OneSecFalseCCACnt += StaCsr1.field.FalseCca;	// Update RX Overflow counter	RTUSBReadMACRegister(pAd, STA_CSR2, &StaCsr2.word);	pAd->Counters8023.RxNoBuffer += (StaCsr2.field.RxOverflowCount + StaCsr2.field.RxFifoOverflowCount);	// Update BEACON sent count	RTUSBReadMACRegister(pAd, STA_CSR3, &StaCsr3.word);	pAd->RalinkCounters.OneSecBeaconSentCnt += StaCsr3.field.TxBeaconCount;	RTUSBReadMACRegister(pAd, STA_CSR4, &StaCsr4.word);	RTUSBReadMACRegister(pAd, STA_CSR5, &StaCsr5.word);	// 1st - Transmit Success	OldValue = pAd->WlanCounters.TransmittedFragmentCount.vv.LowPart;

⌨️ 快捷键说明

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