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

📄 rtusb_init.c

📁 华硕无线网卡 167G linux 驱动
💻 C
📖 第 1 页 / 共 5 页
字号:
		DBGPRINT(RT_DEBUG_INFO, "R24HigherValue = 0x%x\n", pAdapter->BBPTuningParameters.R24HigherValue);	}	if ((pAdapter->EEPROMBBPTuningParameters[2] != 0xffff) && (pAdapter->EEPROMBBPTuningParameters[2] != 0))	{		pAdapter->BBPTuningParameters.R25LowerValue = (UCHAR)(pAdapter->EEPROMBBPTuningParameters[2] & 0xff);		pAdapter->BBPTuningParameters.R25HigherValue = (UCHAR)((pAdapter->EEPROMBBPTuningParameters[2] & 0xff00) >> 8);		DBGPRINT(RT_DEBUG_INFO, "R25LowerValue = 0x%x\n", pAdapter->BBPTuningParameters.R25LowerValue);		DBGPRINT(RT_DEBUG_INFO, "R25HigherValue = 0x%x\n", pAdapter->BBPTuningParameters.R25HigherValue);	}	if ((pAdapter->EEPROMBBPTuningParameters[3] != 0xffff) && (pAdapter->EEPROMBBPTuningParameters[3] != 0))	{		pAdapter->BBPTuningParameters.R61LowerValue = (UCHAR)(pAdapter->EEPROMBBPTuningParameters[3] & 0xff);		pAdapter->BBPTuningParameters.R61HigherValue = (UCHAR)((pAdapter->EEPROMBBPTuningParameters[3] & 0xff00) >> 8);		DBGPRINT(RT_DEBUG_INFO, "R61LowerValue = 0x%x\n", pAdapter->BBPTuningParameters.R61LowerValue);		DBGPRINT(RT_DEBUG_INFO, "R61HigherValue = 0x%x\n", pAdapter->BBPTuningParameters.R61HigherValue);	}	if ((pAdapter->EEPROMBBPTuningParameters[4] != 0xffff) && (pAdapter->EEPROMBBPTuningParameters[4] != 0))	{		pAdapter->PortCfg.BbpTuning.VgcUpperBound = (UCHAR)(pAdapter->EEPROMBBPTuningParameters[4] & 0xff);		DBGPRINT_RAW(RT_DEBUG_INFO, "VgcUpperBound = 0x%x\n", pAdapter->PortCfg.BbpTuning.VgcUpperBound);	}	if ((pAdapter->EEPROMBBPTuningParameters[5] != 0xffff) && (pAdapter->EEPROMBBPTuningParameters[5] != 0))	{		pAdapter->BBPTuningParameters.BBPR17LowSensitivity = (UCHAR)(pAdapter->EEPROMBBPTuningParameters[5] & 0xff);		pAdapter->BBPTuningParameters.BBPR17MidSensitivity = (UCHAR)((pAdapter->EEPROMBBPTuningParameters[5] & 0xff00) >> 8);		DBGPRINT_RAW(RT_DEBUG_INFO, "BBPR17LowSensitivity = 0x%x\n", pAdapter->BBPTuningParameters.BBPR17LowSensitivity);		DBGPRINT_RAW(RT_DEBUG_INFO, "BBPR17MidSensitivity = 0x%x\n", pAdapter->BBPTuningParameters.BBPR17MidSensitivity);	}	if ((pAdapter->EEPROMBBPTuningParameters[6] != 0xffff) && (pAdapter->EEPROMBBPTuningParameters[6] != 0))	{		pAdapter->BBPTuningParameters.RSSIToDbmOffset = (UCHAR)(pAdapter->EEPROMBBPTuningParameters[6] & 0xff);		DBGPRINT_RAW(RT_DEBUG_INFO, "RSSIToDbmOffset = 0x%x\n", pAdapter->BBPTuningParameters.RSSIToDbmOffset);	}	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	PRT2570ADAPTER	pAdapter){	USHORT					i, value;	USHORT	Value5, Value6;	UCHAR					TxValue,RxValue;	EEPROM_ANTENNA_STRUC	Antenna;	EEPROM_NIC_CONFIG2_STRUC	NicConfig2;	DBGPRINT(RT_DEBUG_TRACE,"--> NICInitAsicFromEEPROM\n");	//Initialize BBP registers.	for(i = 3; i < NUM_EEPROM_BBP_PARMS; i++)	{		value = pAdapter->EEPROMDefaultValue[i];				if((value != 0xFFFF) && (value != 0))		{			//blue,RTUSBWriteMACRegister(pAdapter, PHY_CSR7, value);			USHORT	id;			id = ((value & 0xff00) >> 8);			{				USHORT	temp;				UINT	j = 0;				do				{					RTUSBReadMACRegister(pAdapter, PHY_CSR8, &temp);					if (!(temp & BUSY))						break;					j++;				}				while (j < RETRY_LIMIT);								RTUSBWriteMACRegister(pAdapter, PHY_CSR7, value);			}						}	}	DBGPRINT(RT_DEBUG_INFO,"pAdapter->BBPTuningParameters.R24LowerValue = %x\n", pAdapter->BBPTuningParameters.R24LowerValue);	DBGPRINT(RT_DEBUG_INFO, "pAdapter->BBPTuningParameters.R25LowerValue = %x\n", pAdapter->BBPTuningParameters.R25LowerValue);	DBGPRINT(RT_DEBUG_INFO, "pAdapter->BBPTuningParameters.R61LowerValue = %x\n", pAdapter->BBPTuningParameters.R61LowerValue);	RTUSBWriteBBPRegister(pAdapter, 24, pAdapter->BBPTuningParameters.R24LowerValue);	RTUSBWriteBBPRegister(pAdapter, 25, pAdapter->BBPTuningParameters.R25LowerValue);	RTUSBWriteBBPRegister(pAdapter, 61, pAdapter->BBPTuningParameters.R61LowerValue);	//Select antennas.	Antenna.word = pAdapter->EEPROMDefaultValue[0];	if ((Antenna.word == 0xFFFF) || (Antenna.field.TxDefaultAntenna > 2) || (Antenna.field.RxDefaultAntenna > 2))	{		DBGPRINT(RT_DEBUG_ERROR,"E2PROM error(=0x%04x), hard code as 0x0002\n", Antenna.word);		Antenna.word = 0x0002;	}	DBGPRINT(RT_DEBUG_TRACE,"Antenna.word = 0x%x \n", Antenna.word);	pAdapter->PortCfg.NumberOfAntenna = 2;	// (UCHAR)Antenna.field.NumOfAntenna;	pAdapter->PortCfg.CurrentTxAntenna = (UCHAR)Antenna.field.TxDefaultAntenna;	pAdapter->PortCfg.CurrentRxAntenna = (UCHAR)Antenna.field.RxDefaultAntenna;	   pAdapter->PortCfg.RfType = (UCHAR) Antenna.field.RfType;//blue	DBGPRINT(RT_DEBUG_TRACE,"pAdapter->PortCfg.RfType = 0x%x \n", pAdapter->PortCfg.RfType);	RTUSBReadBBPRegister(pAdapter, BBP_Tx_Configure, &TxValue);	RTUSBReadBBPRegister(pAdapter, BBP_Rx_Configure, &RxValue);	RTUSBReadMACRegister(pAdapter, PHY_CSR5, &Value5);	RTUSBReadMACRegister(pAdapter, PHY_CSR6, &Value6);	// Tx antenna select	if(Antenna.field.TxDefaultAntenna == 1)   	{		TxValue = (TxValue & 0xFC) | 0x00; // Antenna A		Value5 = (Value5 & 0xFFFC) | 0x0000;		Value6 = (Value6 & 0xFFFC) | 0x0000;	}	else if(Antenna.field.TxDefaultAntenna == 2)  	{		TxValue = (TxValue & 0xFC) | 0x02; // Antenna B		Value5 = (Value5 & 0xFFFC) | 0x0002;		Value6 = (Value6 & 0xFFFC) | 0x0002;	}	else	{		TxValue = (TxValue & 0xFC) | 0x01; // Antenna Diversity		Value5 = (Value5 & 0xFFFC) | 0x0001;		Value6 = (Value6 & 0xFFFC) | 0x0001;	}	// Rx antenna select	if(Antenna.field.RxDefaultAntenna == 1)		RxValue = (RxValue & 0xFC) | 0x00; // Antenna A	else if(Antenna.field.RxDefaultAntenna == 2)		RxValue = (RxValue & 0xFC) | 0x02; // Antenna B	else		RxValue = (RxValue & 0xFC) | 0x01; // Antenna Diversity	DBGPRINT(RT_DEBUG_TRACE, "<-- NICInitAsicFromEEPROM pAdapter->PortCfg.RfType = %d\n", pAdapter->PortCfg.RfType);	// RT5222 needs special treatment to swap TX I/Q	if (pAdapter->PortCfg.RfType == RFIC_5222)	{		Value5 |= 0x0004;		Value6 |= 0x0004;		TxValue |= 0x04;		 // TX I/Q flip	}	// RT2525E need to flip TX I/Q but not RX I/Q	else if (pAdapter->PortCfg.RfType == RFIC_2525E)		{		Value5 |= 0x0004;		Value6 |= 0x0004;		TxValue |= 0x04;		 // TX I/Q flip		RxValue &= 0xfb;		 // RX I/Q no flip	}		RTUSBWriteMACRegister(pAdapter, PHY_CSR5, Value5);	RTUSBWriteMACRegister(pAdapter, PHY_CSR6, Value6);				// Change to match microsoft definition, 0xff: diversity, 0: A, 1: B	pAdapter->PortCfg.CurrentTxAntenna--;	pAdapter->PortCfg.CurrentRxAntenna--;	RTUSBWriteBBPRegister(pAdapter, BBP_Tx_Configure, TxValue);	RTUSBWriteBBPRegister(pAdapter, BBP_Rx_Configure, RxValue);		//Set LED mode.	if (Antenna.field.LedMode == LED_MODE_TXRX_ACTIVITY)		pAdapter->PortCfg.LedMode = LED_MODE_TXRX_ACTIVITY;	else if (Antenna.field.LedMode == LED_MODE_SINGLE)	{		pAdapter->PortCfg.LedMode = LED_MODE_SINGLE;		ASIC_LED_ACT_ON(pAdapter);	}	else if (Antenna.field.LedMode == LED_MODE_ASUS)	{		pAdapter->PortCfg.LedMode = LED_MODE_ASUS;		RTUSBWriteMACRegister(pAdapter, MAC_CSR20, 0x0002);	}	else if (Antenna.field.LedMode == LED_MODE_ALPHA)	{		pAdapter->PortCfg.LedMode = LED_MODE_ALPHA;		RTUSBWriteMACRegister(pAdapter, MAC_CSR20, 1);		pAdapter->PortCfg.LedCntl.fOdd = FALSE;	}	 	else		pAdapter->PortCfg.LedMode = LED_MODE_DEFAULT;	// Read Hardware controlled Radio state enable bit	if (Antenna.field.HardwareRadioControl == 1)	{		pAdapter->PortCfg.bHardwareRadio = TRUE;		RTUSBWriteMACRegister(pAdapter, MAC_CSR19, 0);		// Read GPIO pin0 as Hardware controlled radio state		RTUSBReadMACRegister(pAdapter, MAC_CSR19, &value);		if ((value & 0x80) == 0)		{			pAdapter->PortCfg.bHwRadio = FALSE;			pAdapter->PortCfg.bRadio = FALSE;			RTUSBWriteMACRegister(pAdapter, MAC_CSR13, 0);			RTUSBWriteMACRegister(pAdapter, MAC_CSR14, 0);			RTMP_SET_FLAG(pAdapter, fRTMP_ADAPTER_RADIO_OFF);        	DBGPRINT(RT_DEBUG_ERROR, "2Set fRTMP_ADAPTER_RADIO_OFF ");			if (pAdapter->PortCfg.LedMode == LED_MODE_ASUS)			{				// Turn bit 17 for Radio OFF				RTUSBWriteMACRegister(pAdapter, MAC_CSR20, 1);			}		}	}	else		pAdapter->PortCfg.bHardwareRadio = FALSE;				NicConfig2.word = pAdapter->EEPROMDefaultValue[1];	if (NicConfig2.word == 0xffff)		NicConfig2.word = 0;	// empty E2PROM, use default		// for dynamic BBP R17:RX sensibility tuning	{		UCHAR r17;		RTUSBReadBBPRegister(pAdapter, 17, &r17);		pAdapter->PortCfg.BbpTuningEnable = (NicConfig2.field.DynamicBbpTuning==0)? 1:0;		pAdapter->PortCfg.VgcLowerBound   = r17;		// 2004-3-4 per David's request, R7 starts at upper bound		r17 = pAdapter->PortCfg.BbpTuning.VgcUpperBound;		pAdapter->PortCfg.LastR17Value = r17;		RTUSBWriteBBPRegister(pAdapter, 17, r17);		// 2004-2-2 per David's request, lower R17 low-bound for very good quality NIC		pAdapter->PortCfg.VgcLowerBound -= 6;  		DBGPRINT(RT_DEBUG_TRACE,"R17 tuning enable=%d, R17=0x%02x, range=<0x%02x, 0x%02x>\n",			pAdapter->PortCfg.BbpTuningEnable, r17, pAdapter->PortCfg.VgcLowerBound, pAdapter->PortCfg.BbpTuning.VgcUpperBound);	}	    AsicSwitchChannel(pAdapter, pAdapter->PortCfg.Channel);	DBGPRINT(RT_DEBUG_TRACE,"RF IC=%d, LED mode=%d\n", pAdapter->PortCfg.RfType, pAdapter->PortCfg.LedMode);	DBGPRINT(RT_DEBUG_TRACE,"<-- NICInitAsicFromEEPROM\n");}VOID	RT2570InitializeAsic(	IN	PRT2570ADAPTER	pAdapter){	ULONG			Index;	UCHAR			buffer[22];	USHORT			temp;	UCHAR			Value = 0xff;	UINT			i;	DBGPRINT(RT_DEBUG_TRACE, "--> NICInitializeAsic\n");	do	{		//NdisMSleep(1000);		RTUSB_VendorRequest(pAdapter,			0,			DEVICE_VENDOR_REQUEST_OUT,			0x1,			0x4,			0x1,			NULL,			0);		RTUSBSingleWrite(pAdapter, 0x308, 0xf0);//asked by MAX		// Disable RX at first beginning. Before BulkInReceive, we will enable RX.		RTUSBWriteMACRegister(pAdapter, TXRX_CSR2, 1);		RTUSBWriteMACRegister(pAdapter, MAC_CSR13, 0x1111);//requested by Jerry		RTUSBWriteMACRegister(pAdapter, MAC_CSR14, 0x1E11);		RTUSBWriteMACRegister(pAdapter, MAC_CSR1, 3); // reset MAC state machine, requested by Kevin 2003-2-11		RTUSBWriteMACRegister(pAdapter, MAC_CSR1, 0); // reset MAC state machine, requested by Kevin 2003-2-11		RTUSBWriteMACRegister(pAdapter, TXRX_CSR5, 0x8C8D);		RTUSBWriteMACRegister(pAdapter, TXRX_CSR6, 0x8B8A);		RTUSBWriteMACRegister(pAdapter, TXRX_CSR7, 0x8687);		RTUSBWriteMACRegister(pAdapter, TXRX_CSR8, 0x0085);		RTUSBWriteMACRegister(pAdapter, TXRX_CSR21, 0xe78f);		RTUSBWriteMACRegister(pAdapter, MAC_CSR9, 0xFF1D);		i = 0;		RTUSBReadMACRegister(pAdapter, MAC_CSR17, &temp);		while (((temp & 0x01e0 ) != 0x01e0) && (i < 50))		{			NdisMSleep(1000);			RTUSBReadMACRegister(pAdapter, MAC_CSR17, &temp);			i++;		}		if (i == 50)		{			if (RTUSB_ResetDevice(pAdapter) == FALSE)			{			//RTMP_SET_FLAG(pAdapter, fRTMP_ADAPTER_REMOVE_IN_PROGRESS);				DBGPRINT(RT_DEBUG_TRACE, "<== NICInitializeAsic ERROR\n");			return;			}			else				continue;		}			RTUSBWriteMACRegister(pAdapter, MAC_CSR1, 4);		RTUSBReadMACRegister(pAdapter, MAC_CSR0, &temp);		if ( temp >= 3){		   RTUSBReadMACRegister(pAdapter, PHY_CSR2, &temp);		   RTUSBWriteMACRegister(pAdapter, PHY_CSR2, temp & 0xFFFD);		   		}		else		{			DBGPRINT(RT_DEBUG_TRACE, "LNA 3 mode\n");			RTUSBWriteMACRegister(pAdapter, PHY_CSR2, 0x3002); // LNA 3 mode		}		RTUSBWriteMACRegister(pAdapter, MAC_CSR11, 2);		RTUSBWriteMACRegister(pAdapter, MAC_CSR22, 0x53);		RTUSBWriteMACRegister(pAdapter, MAC_CSR15, 0x01ee);		RTUSBWriteMACRegister(pAdapter, MAC_CSR16, 0);		RTUSBWriteMACRegister(pAdapter, MAC_CSR8, 0x0780);//steven:limit the maximum frame length				RTUSBReadMACRegister(pAdapter, TXRX_CSR0, &temp);		temp &= 0xe007;		temp |= ((LENGTH_802_11 << 3) | (0x000f << 9));		RTUSBWriteMACRegister(pAdapter, TXRX_CSR0, temp);				RTUSBWriteMACRegister(pAdapter, TXRX_CSR19, 0);		RTUSBWriteMACRegister(pAdapter, MAC_CSR18, 0x5a);		//set RF_LE to low when standby		RTUSBReadMACRegister(pAdapter, PHY_CSR4, &temp);		RTUSBWriteMACRegister(pAdapter, PHY_CSR4, temp | 1);		//NdisMSleep(1);//wait for PLL to become stable		i = 0;		do		{			RTUSBReadBBPRegister(pAdapter, BBP_Version, &Value);			DBGPRINT(RT_DEBUG_TRACE, "Read BBP_Version Value = %d\n", Value);			i++;		}while (((Value == 0xff) || (Value == 0x00)) && (i < 50));		if (i < 50)//BBP ready		{			break;		}		else		{			if ( RTUSB_ResetDevice(pAdapter) == FALSE)			{				RTMP_SET_FLAG(pAdapter, fRTMP_ADAPTER_REMOVE_IN_PROGRESS);				return;			}		}	}while (1);	// Initialize BBP register to default value	for (Index = 0; Index < NUM_BBP_REG_PARMS; Index++)	{		i = 0;		do		{			RTUSBReadMACRegister(pAdapter, PHY_CSR8, &temp);			if (!(temp & BUSY))				break;			i++;		}		while (i < RETRY_LIMIT);				RTUSBWriteMACRegister(pAdapter, PHY_CSR7, BBPRegTable[Index]);	}	// Initialize RF register to default value	AsicSwitchChannel(pAdapter, pAdapter->PortCfg.Channel);	AsicLockChannel(pAdapter, pAdapter->PortCfg.Channel);	// Add radio off control	if (pAdapter->PortCfg.bRadio == FALSE)	{		RTUSBWriteMACRegister(pAdapter, MAC_CSR13, 0);		RTUSBWriteMACRegister(pAdapter, MAC_CSR14, 0);		RTMP_SET_FLAG(pAdapter, fRTMP_ADAPTER_RADIO_OFF);        	DBGPRINT(RT_DEBUG_ERROR, "1Set fRTMP_ADAPTER_RADIO_OFF ");	}	RTUSBMultiRead(pAdapter, STA_CSR0, buffer, 22);		DBGPRINT(RT_DEBUG_TRACE, "<-- NICInitializeAsic\n");}/*	========================================================================

⌨️ 快捷键说明

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