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

📄 rtmp_init.c

📁 Linux下的RT系列无线网卡驱动,可以直接在x86平台上编译
💻 C
📖 第 1 页 / 共 5 页
字号:
				t3 = ((value&0xf00)>>8)-(Apwrdelta);			else				t3 = 0;			if (((value&0xf000)>>12) > Apwrdelta)				t4 = ((value&0xf000)>>12)-(Apwrdelta);			else				t4 = 0;		}						Adata40M = t1 + (t2<<4) + (t3<<8) + (t4<<12);		if (bGpwrdeltaMinus == FALSE)		{			t1 = (value&0xf)+(Gpwrdelta);			if (t1 > 0xf)				t1 = 0xf;			t2 = ((value&0xf0)>>4)+(Gpwrdelta);			if (t2 > 0xf)				t2 = 0xf;			t3 = ((value&0xf00)>>8)+(Gpwrdelta);			if (t3 > 0xf)				t3 = 0xf;			t4 = ((value&0xf000)>>12)+(Gpwrdelta);			if (t4 > 0xf)				t4 = 0xf;		}		else		{			if ((value&0xf) > Gpwrdelta)				t1 = (value&0xf)-(Gpwrdelta);			else				t1 = 0;			if (((value&0xf0)>>4) > Gpwrdelta)				t2 = ((value&0xf0)>>4)-(Gpwrdelta);			else				t2 = 0;			if (((value&0xf00)>>8) > Gpwrdelta)				t3 = ((value&0xf00)>>8)-(Gpwrdelta);			else				t3 = 0;			if (((value&0xf000)>>12) > Gpwrdelta)				t4 = ((value&0xf000)>>12)-(Gpwrdelta);			else				t4 = 0;		}						Gdata40M = t1 + (t2<<4) + (t3<<8) + (t4<<12);				value = RTMP_EEPROM_READ16(pAd, EEPROM_TXPOWER_BYRATE + i*4 + 2);		if (bApwrdeltaMinus == FALSE)		{			t1 = (value&0xf)+(Apwrdelta);			if (t1 > 0xf)				t1 = 0xf;			t2 = ((value&0xf0)>>4)+(Apwrdelta);			if (t2 > 0xf)				t2 = 0xf;			t3 = ((value&0xf00)>>8)+(Apwrdelta);			if (t3 > 0xf)				t3 = 0xf;			t4 = ((value&0xf000)>>12)+(Apwrdelta);			if (t4 > 0xf)				t4 = 0xf;		}		else		{			if ((value&0xf) > Apwrdelta)				t1 = (value&0xf)-(Apwrdelta);			else				t1 = 0;			if (((value&0xf0)>>4) > Apwrdelta)				t2 = ((value&0xf0)>>4)-(Apwrdelta);			else				t2 = 0;			if (((value&0xf00)>>8) > Apwrdelta)				t3 = ((value&0xf00)>>8)-(Apwrdelta);			else				t3 = 0;			if (((value&0xf000)>>12) > Apwrdelta)				t4 = ((value&0xf000)>>12)-(Apwrdelta);			else				t4 = 0;		}						Adata40M |= ((t1<<16) + (t2<<20) + (t3<<24) + (t4<<28));		if (bGpwrdeltaMinus == FALSE)		{			t1 = (value&0xf)+(Gpwrdelta);			if (t1 > 0xf)				t1 = 0xf;			t2 = ((value&0xf0)>>4)+(Gpwrdelta);			if (t2 > 0xf)				t2 = 0xf;			t3 = ((value&0xf00)>>8)+(Gpwrdelta);			if (t3 > 0xf)				t3 = 0xf;			t4 = ((value&0xf000)>>12)+(Gpwrdelta);			if (t4 > 0xf)				t4 = 0xf;		}		else		{			if ((value&0xf) > Gpwrdelta)				t1 = (value&0xf)-(Gpwrdelta);			else				t1 = 0;			if (((value&0xf0)>>4) > Gpwrdelta)				t2 = ((value&0xf0)>>4)-(Gpwrdelta);			else				t2 = 0;			if (((value&0xf00)>>8) > Gpwrdelta)				t3 = ((value&0xf00)>>8)-(Gpwrdelta);			else				t3 = 0;			if (((value&0xf000)>>12) > Gpwrdelta)				t4 = ((value&0xf000)>>12)-(Gpwrdelta);			else				t4 = 0;		}						Gdata40M |= ((t1<<16) + (t2<<20) + (t3<<24) + (t4<<28));		data |= (value<<16);		//#ifdef WIFI_TEST		// For WPA WiFi-test, suggest to downgrade tx power level.		// Because high TX power results in the abnormal disconnection of Intel BG-STA. 		if (pAd->CommonCfg.bWiFiTest)		{			data = default_tx_power;			Adata40M = default_tx_power;			Gdata40M = default_tx_power;		}//#endif // WIFI_TEST //				pAd->TxPwrCfg[i] = data;		pAd->Tx40MPwrCfgABand[i] = Adata40M;		pAd->Tx40MPwrCfgGBand[i] = Gdata40M;				if (data != 0xffffffff)			RTMP_IO_WRITE32(pAd, TX_PWR_CFG_0 + i*4, data);		DBGPRINT_RAW(RT_DEBUG_TRACE, ("%lx,  Adata40M = %lx,  Gdata40M = %lx \n", data, Adata40M, Gdata40M));	}	DBGPRINT(RT_DEBUG_TRACE, ("\n"));		DBGPRINT(RT_DEBUG_TRACE, ("<-- NICReadEEPROMParameters\n"));}/*	========================================================================		Routine Description:		Set default value from EEPROM			Arguments:		Adapter						Pointer to our adapter	Return Value:		None	IRQL = PASSIVE_LEVEL		Note:			========================================================================*/VOID	NICInitAsicFromEEPROM(	IN	PRTMP_ADAPTER	pAd){#ifdef CONFIG_STA_SUPPORT	ULONG					data;#endif // CONFIG_STA_SUPPORT //	USHORT					i;	EEPROM_ANTENNA_STRUC	Antenna;	EEPROM_NIC_CONFIG2_STRUC    NicConfig2;	UCHAR	BBPR3 = 0;		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);			RTMP_BBP_IO_WRITE8_BY_REG_ID(pAd, BbpRegIdx, BbpValue);		}	}	Antenna.word = pAd->Antenna.word;	pAd->Mlme.RealRxPath = (UCHAR) Antenna.field.RxPath;	pAd->RfIcType = (UCHAR) Antenna.field.RfIcType;	NicConfig2.word = pAd->EEPROMDefaultValue[1];#ifdef CONFIG_STA_SUPPORT	NicConfig2.word = 0;    if ((NicConfig2.word & 0x00ff) == 0xff)	{		NicConfig2.word &= 0xff00;	}	if ((NicConfig2.word >> 8) == 0xff)	{		NicConfig2.word &= 0x00ff;	}#endif // CONFIG_STA_SUPPORT //		// Save the antenna for future use	pAd->NicConfig2.word = NicConfig2.word;	//	// Send LED Setting to MCU.	//	if (pAd->LedCntl.word == 0xFF)	{		pAd->LedCntl.word = 0x01;		pAd->Led1 = 0x5555;		pAd->Led2 = 0x2221;		pAd->Led3 = 0xA9F8;	}	AsicSendCommandToMcu(pAd, 0x52, 0xff, (UCHAR)pAd->Led1, (UCHAR)(pAd->Led1 >> 8));	AsicSendCommandToMcu(pAd, 0x53, 0xff, (UCHAR)pAd->Led2, (UCHAR)(pAd->Led2 >> 8));	AsicSendCommandToMcu(pAd, 0x54, 0xff, (UCHAR)pAd->Led3, (UCHAR)(pAd->Led3 >> 8));#ifdef CONFIG_STA_SUPPORT	// Read Hardware controlled Radio state enable bit	if (NicConfig2.field.HardwareRadioControl == 1)	{		pAd->StaCfg.bHardwareRadio = TRUE;				// Read GPIO pin2 as Hardware controlled radio state		RTMP_IO_READ32(pAd, GPIO_CTRL_CFG, &data);		if ((data & 0x04) == 0)		{			pAd->StaCfg.bHwRadio = FALSE;			pAd->StaCfg.bRadio = FALSE;//			RTMP_IO_WRITE32(pAd, PWR_PIN_CFG, 0x00001818);			RTMP_SET_FLAG(pAd, fRTMP_ADAPTER_RADIO_OFF);		}	}	else		pAd->StaCfg.bHardwareRadio = FALSE;			if (pAd->StaCfg.bRadio == FALSE)	{		RTMPSetLED(pAd, LED_RADIO_OFF);	}	else	{		RTMPSetLED(pAd, LED_RADIO_ON);	}#endif // CONFIG_STA_SUPPORT //		// Turn off patching for cardbus controller	if (NicConfig2.field.CardbusAcceleration == 1)	{		pAd->bTest1 = TRUE;	}	if (NicConfig2.field.DynamicTxAgcControl == 1)		pAd->bAutoTxAgcA = pAd->bAutoTxAgcG = TRUE;	else		pAd->bAutoTxAgcA = pAd->bAutoTxAgcG = FALSE;	//	// Since BBP has been progamed, to make sure BBP setting will be 	// upate inside of AsicAntennaSelect, so reset to UNKNOWN_BAND!!	//	pAd->CommonCfg.BandState = UNKNOWN_BAND;		RTMP_BBP_IO_READ8_BY_REG_ID(pAd, BBP_R3, &BBPR3);	BBPR3 &= (~0x18);	if(pAd->Antenna.field.RxPath == 3)	{		BBPR3 |= (0x10);	}	else if(pAd->Antenna.field.RxPath == 2)	{		BBPR3 |= (0x8);	}	else if(pAd->Antenna.field.RxPath == 1)	{		BBPR3 |= (0x0);	}	RTMP_BBP_IO_WRITE8_BY_REG_ID(pAd, BBP_R3, BBPR3);#ifdef CONFIG_STA_SUPPORT	DBGPRINT(RT_DEBUG_TRACE, ("Use Hw Radio Control Pin=%d; if used Pin=%d;\n", pAd->StaCfg.bHardwareRadio, pAd->StaCfg.bHardwareRadio));#endif // CONFIG_STA_SUPPORT //	DBGPRINT(RT_DEBUG_TRACE, ("TxPath = %d, RxPath = %d, RFIC=%d, Polar+LED mode=%x\n", pAd->Antenna.field.TxPath, pAd->Antenna.field.RxPath, pAd->RfIcType, pAd->LedCntl.word));	DBGPRINT(RT_DEBUG_TRACE, ("<-- NICInitAsicFromEEPROM\n"));}/*	========================================================================		Routine Description:		Initialize NIC hardware	Arguments:		Adapter						Pointer to our adapter	Return Value:		None	IRQL = PASSIVE_LEVEL	Note:			========================================================================*/NDIS_STATUS	NICInitializeAdapter(	IN	PRTMP_ADAPTER	pAd,	IN   BOOLEAN    bHardReset){	ULONG			Value;	NDIS_STATUS     Status = NDIS_STATUS_SUCCESS;	WPDMA_GLO_CFG_STRUC	GloCfg;	DELAY_INT_CFG_STRUC	IntCfg;//	INT_MASK_CSR_STRUC		IntMask;	ULONG	i =0;	AC_TXOP_CSR0_STRUC	csr0;		DBGPRINT(RT_DEBUG_TRACE, ("--> NICInitializeAdapter\n"));	// 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);	DBGPRINT(RT_DEBUG_TRACE, ("<== DMA offset 0x208 = 0x%x\n", GloCfg.word));		GloCfg.word &= 0xff0;	GloCfg.field.EnTXWriteBackDDONE =1;	RTMP_IO_WRITE32(pAd, WPDMA_GLO_CFG, GloCfg.word);		//	// write all shared Ring's base address into ASIC	//	// asic simulation sequence put this ahead before loading firmware.	// pbf hardware reset	RTMP_IO_WRITE32(pAd, WPDMA_RST_IDX, 0x1003f);	// 0x10000 for reset rx, 0x3f resets all 6 tx rings.	RTMP_IO_WRITE32(pAd, PBF_SYS_CTRL, 0xe1f);	RTMP_IO_WRITE32(pAd, PBF_SYS_CTRL, 0xe00);	// Initialze ASIC for TX & Rx operation	NICInitializeAsic(pAd , bHardReset);	// Write AC_BK base address register	Value = RTMP_GetPhysicalAddressLow(pAd->TxRing[QID_AC_BK].Cell[0].AllocPa);	RTMP_IO_WRITE32(pAd, TX_BASE_PTR1, Value);	DBGPRINT(RT_DEBUG_TRACE, ("--> TX_BASE_PTR1 : 0x%lx\n", Value));	// Write AC_BE base address register	Value = RTMP_GetPhysicalAddressLow(pAd->TxRing[QID_AC_BE].Cell[0].AllocPa);	RTMP_IO_WRITE32(pAd, TX_BASE_PTR0, Value);	DBGPRINT(RT_DEBUG_TRACE, ("--> TX_BASE_PTR0 : 0x%lx\n", Value));	// Write AC_VI base address register	Value = RTMP_GetPhysicalAddressLow(pAd->TxRing[QID_AC_VI].Cell[0].AllocPa);	RTMP_IO_WRITE32(pAd, TX_BASE_PTR2, Value);	DBGPRINT(RT_DEBUG_TRACE, ("--> TX_BASE_PTR2 : 0x%lx\n", Value));	// Write AC_VO base address register	Value = RTMP_GetPhysicalAddressLow(pAd->TxRing[QID_AC_VO].Cell[0].AllocPa);		RTMP_IO_WRITE32(pAd, TX_BASE_PTR3, Value);	DBGPRINT(RT_DEBUG_TRACE, ("--> TX_BASE_PTR3 : 0x%lx\n", Value));	// Write HCCA base address register    Value = RTMP_GetPhysicalAddressLow(pAd->TxRing[QID_HCCA].Cell[0].AllocPa);	RTMP_IO_WRITE32(pAd, TX_BASE_PTR4, Value);	DBGPRINT(RT_DEBUG_TRACE, ("--> TX_BASE_PTR4 : 0x%lx\n", Value));	// Write MGMT_BASE_CSR register	Value = RTMP_GetPhysicalAddressLow(pAd->MgmtRing.Cell[0].AllocPa);	RTMP_IO_WRITE32(pAd, TX_BASE_PTR5, Value);	DBGPRINT(RT_DEBUG_TRACE, ("--> TX_BASE_PTR5 : 0x%lx\n", Value));	// Write RX_BASE_CSR register	Value = RTMP_GetPhysicalAddressLow(pAd->RxRing.Cell[0].AllocPa);	RTMP_IO_WRITE32(pAd, RX_BASE_PTR, Value);	DBGPRINT(RT_DEBUG_TRACE, ("--> RX_BASE_PTR : 0x%lx\n", Value));	// Init RX Ring index pointer	pAd->RxRing.RxSwReadIdx = 0;	pAd->RxRing.RxCpuIdx = RX_RING_SIZE-1;	RTMP_IO_WRITE32(pAd, RX_CRX_IDX, pAd->RxRing.RxCpuIdx);		// Init TX rings index pointer	{		for (i=0; i<NUM_OF_TX_RING; i++)		{			pAd->TxRing[i].TxSwFreeIdx = 0;			pAd->TxRing[i].TxCpuIdx = 0;			RTMP_IO_WRITE32(pAd, (TX_CTX_IDX0 + i * 0x10) ,  pAd->TxRing[i].TxCpuIdx);		}	}	// init MGMT ring index pointer	pAd->MgmtRing.TxSwFreeIdx = 0;	pAd->MgmtRing.TxCpuIdx = 0;	RTMP_IO_WRITE32(pAd, TX_MGMTCTX_IDX,  pAd->MgmtRing.TxCpuIdx);	//	// set each Ring's SIZE  into ASIC. Descriptor Size is fixed by design.	//	// Write TX_RING_CSR0 register	Value = TX_RING_SIZE;	RTMP_IO_WRITE32(pAd, TX_MAX_CNT0, Value);	RTMP_IO_WRITE32(pAd, TX_MAX_CNT1, Value);	RTMP_IO_WRITE32(pAd, TX_MAX_CNT2, Value);	RTMP_IO_WRITE32(pAd, TX_MAX_CNT3, Value);	RTMP_IO_WRITE32(pAd, TX_MAX_CNT4, Value);	Value = MGMT_RING_SIZE;	RTMP_IO_WRITE32(pAd, TX_MGMTMAX_CNT, Value);	// Write RX_RING_CSR register	Value = RX_RING_SIZE;	RTMP_IO_WRITE32(pAd, RX_MAX_CNT, Value);	// WMM parameter	csr0.word = 0;	RTMP_IO_WRITE32(pAd, WMM_TXOP0_CFG, csr0.word);	if (pAd->CommonCfg.PhyMode == PHY_11B)

⌨️ 快捷键说明

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