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

📄 cmm_info.c

📁 ralink 2870 usb无线网卡 最新驱动
💻 C
📖 第 1 页 / 共 5 页
字号:
			pAd->CommonCfg.DesireRate[6]  = 96;    // 48 mbps, in units of 0.5 Mbps			pAd->CommonCfg.DesireRate[7]  = 108;   // 54 mbps, in units of 0.5 Mbps			//pAd->CommonCfg.HTPhyMode.field.MODE = MODE_OFDM; // This MODE is only FYI. not use			break;		default:			break;	}	pAd->CommonCfg.BandState = UNKNOWN_BAND;	}#ifdef DOT11_N_SUPPORT/*	========================================================================	Routine Description:		Caller ensures we has 802.11n support.		Calls at setting HT from AP/STASetinformation	Arguments:		pAd - Pointer to our adapter		phymode  - 	========================================================================*/VOID	RTMPSetHT(	IN	PRTMP_ADAPTER	pAd,	IN	OID_SET_HT_PHYMODE *pHTPhyMode){	//ULONG	*pmcs;	UINT32	Value = 0;	UCHAR	BBPValue = 0;	UCHAR	BBP3Value = 0;	UCHAR	RxStream = pAd->CommonCfg.RxStream;	DBGPRINT(RT_DEBUG_TRACE, ("RTMPSetHT : HT_mode(%d), ExtOffset(%d), MCS(%d), BW(%d), STBC(%d), SHORTGI(%d)\n",										pHTPhyMode->HtMode, pHTPhyMode->ExtOffset, 										pHTPhyMode->MCS, pHTPhyMode->BW,										pHTPhyMode->STBC, pHTPhyMode->SHORTGI));				// Don't zero supportedHyPhy structure.	RTMPZeroMemory(&pAd->CommonCfg.HtCapability, sizeof(pAd->CommonCfg.HtCapability));	RTMPZeroMemory(&pAd->CommonCfg.AddHTInfo, sizeof(pAd->CommonCfg.AddHTInfo));	RTMPZeroMemory(&pAd->CommonCfg.NewExtChanOffset, sizeof(pAd->CommonCfg.NewExtChanOffset));	RTMPZeroMemory(&pAd->CommonCfg.DesiredHtPhy, sizeof(pAd->CommonCfg.DesiredHtPhy));   	if (pAd->CommonCfg.bRdg)	{		pAd->CommonCfg.HtCapability.ExtHtCapInfo.PlusHTC = 1;		pAd->CommonCfg.HtCapability.ExtHtCapInfo.RDGSupport = 1;	}	else	{		pAd->CommonCfg.HtCapability.ExtHtCapInfo.PlusHTC = 0;		pAd->CommonCfg.HtCapability.ExtHtCapInfo.RDGSupport = 0;	}	pAd->CommonCfg.HtCapability.HtCapParm.MaxRAmpduFactor = 3;	pAd->CommonCfg.DesiredHtPhy.MaxRAmpduFactor = 3;	DBGPRINT(RT_DEBUG_TRACE, ("RTMPSetHT : RxBAWinLimit = %d\n", pAd->CommonCfg.BACapability.field.RxBAWinLimit));	// Mimo power save, A-MSDU size, 	pAd->CommonCfg.DesiredHtPhy.AmsduEnable = (USHORT)pAd->CommonCfg.BACapability.field.AmsduEnable;	pAd->CommonCfg.DesiredHtPhy.AmsduSize = (UCHAR)pAd->CommonCfg.BACapability.field.AmsduSize;	pAd->CommonCfg.DesiredHtPhy.MimoPs = (UCHAR)pAd->CommonCfg.BACapability.field.MMPSmode;	pAd->CommonCfg.DesiredHtPhy.MpduDensity = (UCHAR)pAd->CommonCfg.BACapability.field.MpduDensity;	pAd->CommonCfg.HtCapability.HtCapInfo.AMsduSize = (USHORT)pAd->CommonCfg.BACapability.field.AmsduSize;	pAd->CommonCfg.HtCapability.HtCapInfo.MimoPs = (USHORT)pAd->CommonCfg.BACapability.field.MMPSmode;	pAd->CommonCfg.HtCapability.HtCapParm.MpduDensity = (UCHAR)pAd->CommonCfg.BACapability.field.MpduDensity;		DBGPRINT(RT_DEBUG_TRACE, ("RTMPSetHT : AMsduSize = %d, MimoPs = %d, MpduDensity = %d, MaxRAmpduFactor = %d\n", 													pAd->CommonCfg.DesiredHtPhy.AmsduSize, 													pAd->CommonCfg.DesiredHtPhy.MimoPs,													pAd->CommonCfg.DesiredHtPhy.MpduDensity,													pAd->CommonCfg.DesiredHtPhy.MaxRAmpduFactor));		if(pHTPhyMode->HtMode == HTMODE_GF)	{		pAd->CommonCfg.HtCapability.HtCapInfo.GF = 1;		pAd->CommonCfg.DesiredHtPhy.GF = 1;	}	else		pAd->CommonCfg.DesiredHtPhy.GF = 0;		// Decide Rx MCSSet	switch (RxStream)	{		case 1:						pAd->CommonCfg.HtCapability.MCSSet[0] =  0xff;			pAd->CommonCfg.HtCapability.MCSSet[1] =  0x00;			break;		case 2:			pAd->CommonCfg.HtCapability.MCSSet[0] =  0xff;			pAd->CommonCfg.HtCapability.MCSSet[1] =  0xff;			break;		case 3: // 3*3			pAd->CommonCfg.HtCapability.MCSSet[0] =  0xff;			pAd->CommonCfg.HtCapability.MCSSet[1] =  0xff;			pAd->CommonCfg.HtCapability.MCSSet[2] =  0xff;			break;	}	if (pAd->CommonCfg.bForty_Mhz_Intolerant && (pAd->CommonCfg.Channel <= 14) && (pHTPhyMode->BW == BW_40) )	{		pHTPhyMode->BW = BW_20;		pAd->CommonCfg.HtCapability.HtCapInfo.Forty_Mhz_Intolerant = 1;	}	if(pHTPhyMode->BW == BW_40)	{		pAd->CommonCfg.HtCapability.MCSSet[4] = 0x1; // MCS 32		pAd->CommonCfg.HtCapability.HtCapInfo.ChannelWidth = 1;		if (pAd->CommonCfg.Channel <= 14) 					pAd->CommonCfg.HtCapability.HtCapInfo.CCKmodein40 = 1;		pAd->CommonCfg.DesiredHtPhy.ChannelWidth = 1;		pAd->CommonCfg.AddHTInfo.AddHtInfo.RecomWidth = 1;		pAd->CommonCfg.AddHTInfo.AddHtInfo.ExtChanOffset = (pHTPhyMode->ExtOffset == EXTCHA_BELOW)? (EXTCHA_BELOW): EXTCHA_ABOVE;		// Set Regsiter for extension channel position.		RTMP_IO_READ32(pAd, TX_BAND_CFG, &Value);		RTMP_BBP_IO_READ8_BY_REG_ID(pAd, BBP_R3, &BBP3Value);		if ((pHTPhyMode->ExtOffset == EXTCHA_BELOW))		{			Value |= 0x1;			BBP3Value |= (0x20);			RTMP_IO_WRITE32(pAd, TX_BAND_CFG, Value);		}		else if ((pHTPhyMode->ExtOffset == EXTCHA_ABOVE))		{			Value &= 0xfe;			BBP3Value &= (~0x20);			RTMP_IO_WRITE32(pAd, TX_BAND_CFG, Value);		}		// Turn on BBP 40MHz mode now only as AP . 		// Sta can turn on BBP 40MHz after connection with 40MHz AP. Sta only broadcast 40MHz capability before connection.		if ((pAd->OpMode == OPMODE_AP) || INFRA_ON(pAd) || ADHOC_ON(pAd)			)		{			RTMP_BBP_IO_READ8_BY_REG_ID(pAd, BBP_R4, &BBPValue);			BBPValue &= (~0x18);			BBPValue |= 0x10;			RTMP_BBP_IO_WRITE8_BY_REG_ID(pAd, BBP_R4, BBPValue);			RTMP_BBP_IO_WRITE8_BY_REG_ID(pAd, BBP_R3, BBP3Value);			pAd->CommonCfg.BBPCurrentBW = BW_40;		}	}	else	{		pAd->CommonCfg.HtCapability.HtCapInfo.ChannelWidth = 0;		pAd->CommonCfg.DesiredHtPhy.ChannelWidth = 0;		pAd->CommonCfg.AddHTInfo.AddHtInfo.RecomWidth = 0;		pAd->CommonCfg.AddHTInfo.AddHtInfo.ExtChanOffset = EXTCHA_NONE;		pAd->CommonCfg.CentralChannel = pAd->CommonCfg.Channel;		// Turn on BBP 20MHz mode by request here.		{			RTMP_BBP_IO_READ8_BY_REG_ID(pAd, BBP_R4, &BBPValue);			BBPValue &= (~0x18);			RTMP_BBP_IO_WRITE8_BY_REG_ID(pAd, BBP_R4, BBPValue);			pAd->CommonCfg.BBPCurrentBW = BW_20;		}	}			if(pHTPhyMode->STBC == STBC_USE)	{		pAd->CommonCfg.HtCapability.HtCapInfo.TxSTBC = 1;		pAd->CommonCfg.DesiredHtPhy.TxSTBC = 1;		pAd->CommonCfg.HtCapability.HtCapInfo.RxSTBC = 1;		pAd->CommonCfg.DesiredHtPhy.RxSTBC = 1;	}	else	{		pAd->CommonCfg.DesiredHtPhy.TxSTBC = 0;		pAd->CommonCfg.DesiredHtPhy.RxSTBC = 0;	}	if(pHTPhyMode->SHORTGI == GI_400)	{		pAd->CommonCfg.HtCapability.HtCapInfo.ShortGIfor20 = 1;		pAd->CommonCfg.HtCapability.HtCapInfo.ShortGIfor40 = 1;		pAd->CommonCfg.DesiredHtPhy.ShortGIfor20 = 1;		pAd->CommonCfg.DesiredHtPhy.ShortGIfor40 = 1;	}	else	{		pAd->CommonCfg.HtCapability.HtCapInfo.ShortGIfor20 = 0;		pAd->CommonCfg.HtCapability.HtCapInfo.ShortGIfor40 = 0;		pAd->CommonCfg.DesiredHtPhy.ShortGIfor20 = 0;		pAd->CommonCfg.DesiredHtPhy.ShortGIfor40 = 0;	}		// We support link adaptation for unsolicit MCS feedback, set to 2.	pAd->CommonCfg.HtCapability.ExtHtCapInfo.MCSFeedback = MCSFBK_NONE; //MCSFBK_UNSOLICIT;	pAd->CommonCfg.AddHTInfo.ControlChan = pAd->CommonCfg.Channel;	// 1, the extension channel above the control channel. 		// EDCA parameters used for AP's own transmission	if (pAd->CommonCfg.APEdcaParm.bValid == FALSE)	{		pAd->CommonCfg.APEdcaParm.bValid = TRUE;		pAd->CommonCfg.APEdcaParm.Aifsn[0] = 3;		pAd->CommonCfg.APEdcaParm.Aifsn[1] = 7;		pAd->CommonCfg.APEdcaParm.Aifsn[2] = 1;		pAd->CommonCfg.APEdcaParm.Aifsn[3] = 1;			pAd->CommonCfg.APEdcaParm.Cwmin[0] = 4;		pAd->CommonCfg.APEdcaParm.Cwmin[1] = 4;		pAd->CommonCfg.APEdcaParm.Cwmin[2] = 3;		pAd->CommonCfg.APEdcaParm.Cwmin[3] = 2;		pAd->CommonCfg.APEdcaParm.Cwmax[0] = 6;		pAd->CommonCfg.APEdcaParm.Cwmax[1] = 10;		pAd->CommonCfg.APEdcaParm.Cwmax[2] = 4;		pAd->CommonCfg.APEdcaParm.Cwmax[3] = 3;		pAd->CommonCfg.APEdcaParm.Txop[0]  = 0;		pAd->CommonCfg.APEdcaParm.Txop[1]  = 0;		pAd->CommonCfg.APEdcaParm.Txop[2]  = 94;			pAd->CommonCfg.APEdcaParm.Txop[3]  = 47;		}	AsicSetEdcaParm(pAd, &pAd->CommonCfg.APEdcaParm);	#ifdef CONFIG_STA_SUPPORT	IF_DEV_CONFIG_OPMODE_ON_STA(pAd)		{		RTMPSetIndividualHT(pAd, 0);		}#endif // CONFIG_STA_SUPPORT //}/*	========================================================================	Routine Description:		Caller ensures we has 802.11n support.		Calls at setting HT from AP/STASetinformation	Arguments:		pAd - Pointer to our adapter		phymode  - 	========================================================================*/VOID	RTMPSetIndividualHT(	IN	PRTMP_ADAPTER		pAd,	IN	UCHAR				apidx){		PRT_HT_PHY_INFO		pDesired_ht_phy = NULL;	UCHAR	TxStream = pAd->CommonCfg.TxStream;			UCHAR	DesiredMcs	= MCS_AUTO;							do	{#ifdef CONFIG_STA_SUPPORT		IF_DEV_CONFIG_OPMODE_ON_STA(pAd)		{					pDesired_ht_phy = &pAd->StaCfg.DesiredHtPhyInfo;								DesiredMcs = pAd->StaCfg.DesiredTransmitSetting.field.MCS;			//pAd->StaCfg.bAutoTxRateSwitch = (DesiredMcs == MCS_AUTO) ? TRUE : FALSE;				break;		}	#endif // CONFIG_STA_SUPPORT //	} while (FALSE);	if (pDesired_ht_phy == NULL)	{		DBGPRINT(RT_DEBUG_ERROR, ("RTMPSetIndividualHT: invalid apidx(%d)\n", apidx));		return;	}	RTMPZeroMemory(pDesired_ht_phy, sizeof(RT_HT_PHY_INFO));	DBGPRINT(RT_DEBUG_TRACE, ("RTMPSetIndividualHT : Desired MCS = %d\n", DesiredMcs));	// Check the validity of MCS 	if ((TxStream == 1) && ((DesiredMcs >= MCS_8) && (DesiredMcs <= MCS_15)))	{		DBGPRINT(RT_DEBUG_WARN, ("RTMPSetIndividualHT: MCS(%d) is invalid in 1S, reset it as MCS_7\n", DesiredMcs));		DesiredMcs = MCS_7;			}	if ((pAd->CommonCfg.DesiredHtPhy.ChannelWidth == BW_20) && (DesiredMcs == MCS_32))	{		DBGPRINT(RT_DEBUG_WARN, ("RTMPSetIndividualHT: MCS_32 is only supported in 40-MHz, reset it as MCS_0\n"));		DesiredMcs = MCS_0;			}	   			pDesired_ht_phy->bHtEnable = TRUE;					 	// Decide desired Tx MCS	switch (TxStream)	{		case 1:			if (DesiredMcs == MCS_AUTO)			{				pDesired_ht_phy->MCSSet[0]= 0xff;				pDesired_ht_phy->MCSSet[1]= 0x00;			}			else if (DesiredMcs <= MCS_7)			{				pDesired_ht_phy->MCSSet[0]= 1<<DesiredMcs;				pDesired_ht_phy->MCSSet[1]= 0x00;			}						break;		case 2:			if (DesiredMcs == MCS_AUTO)			{				pDesired_ht_phy->MCSSet[0]= 0xff;				pDesired_ht_phy->MCSSet[1]= 0xff;			}			else if (DesiredMcs <= MCS_15)			{				ULONG mode;								mode = DesiredMcs / 8;				if (mode < 2)					pDesired_ht_phy->MCSSet[mode] = (1 << (DesiredMcs - mode * 8));			}						break;		case 3: // 3*3			if (DesiredMcs == MCS_AUTO)			{				/* MCS0 ~ MCS23, 3 bytes */				pDesired_ht_phy->MCSSet[0]= 0xff;				pDesired_ht_phy->MCSSet[1]= 0xff;				pDesired_ht_phy->MCSSet[2]= 0xff;			}			else if (DesiredMcs <= MCS_23)			{				ULONG mode;				mode = DesiredMcs / 8;				if (mode < 3)					pDesired_ht_phy->MCSSet[mode] = (1 << (DesiredMcs - mode * 8));			}			break;	}								if(pAd->CommonCfg.DesiredHtPhy.ChannelWidth == BW_40)	{		if (DesiredMcs == MCS_AUTO || DesiredMcs == MCS_32)			pDesired_ht_phy->MCSSet[4] = 0x1;	}	// update HT Rate setting				    if (pAd->OpMode == OPMODE_STA)        MlmeUpdateHtTxRates(pAd, BSS0);    else	    MlmeUpdateHtTxRates(pAd, apidx);}/*	========================================================================	Routine Description:		Update HT IE from our capability.			Arguments:		Send all HT IE in beacon/probe rsp/assoc rsp/action frame.				========================================================================*/VOID	RTMPUpdateHTIE(	IN	RT_HT_CAPABILITY	*pRtHt,	IN		UCHAR				*pMcsSet,	OUT		HT_CAPABILITY_IE *pHtCapability,	OUT		ADD_HT_INFO_IE		*pAddHtInfo){	RTMPZeroMemory(pHtCapability, sizeof(HT_CAPABILITY_IE));	RTMPZeroMemory(pAddHtInfo, sizeof(ADD_HT_INFO_IE));			pHtCapability->HtCapInfo.ChannelWidth = pRtHt->ChannelWidth;		pHtCapability->HtCapInfo.MimoPs = pRtHt->MimoPs;		pHtCapability->HtCapInfo.GF = pRtHt->GF;		pHtCapability->HtCapInfo.ShortGIfor20 = pRtHt->ShortGIfor20;		pHtCapability->HtCapInfo.ShortGIfor40 = pRtHt->ShortGIfor40;		pHtCapability->HtCapInfo.TxSTBC = pRtHt->TxSTBC;		pHtCapability->HtCapInfo.RxSTBC = pRtHt->RxSTBC;		pHtCapability->HtCapInfo.AMsduSize = pRtHt->AmsduSize;		pHtCapability->HtCapParm.MaxRAmpduFactor = pRtHt->MaxRAmpduFactor;		pHtCapability->HtCapParm.MpduDensity = pRtHt->MpduDensity;		pAddHtInfo->AddHtInfo.ExtChanOffset = pRtHt->ExtChanOffset ;		pAddHtInfo->AddHtInfo.RecomWidth = pRtHt->RecomWidth;		pAddHtInfo->AddHtInfo2.OperaionMode = pRtHt->OperaionMode;		pAddHtInfo->AddHtInfo2.NonGfPresent = pRtHt->NonGfPresent;		RTMPMoveMemory(pAddHtInfo->MCSSet, /*pRtHt->MCSSet*/pMcsSet, 4); // rt2860 only support MCS max=32, no need to copy all 16 uchar.	        DBGPRINT(RT_DEBUG_TRACE,("RTMPUpdateHTIE <== \n"));}#endif // DOT11_N_SUPPORT ///*	========================================================================	Description:		Add Client security information into ASIC WCID table and IVEIV table.    Return:	========================================================================*/VOID	RTMPAddWcidAttributeEntry(	IN	PRTMP_ADAPTER	pAd,	IN	UCHAR			BssIdx,	IN 	UCHAR		 	KeyIdx,	IN 	UCHAR		 	CipherAlg,	IN 	MAC_TABLE_ENTRY *pEntry){	UINT32		WCIDAttri = 0;	USHORT		offset;	UCHAR		IVEIV = 0;	USHORT		Wcid = 0;	{#ifdef CONFIG_STA_SUPPORT		IF_DEV_CONFIG_OPMODE_ON_STA(pAd)		{			if (BssIdx > BSS0)			{				DBGPRINT(RT_DEBUG_ERROR, ("RTMPAddWcidAttributeEntry: The BSS-index(%d) is out of range for Infra link. \n", BssIdx));	

⌨️ 快捷键说明

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