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

📄 cmm_info.c

📁 Linux下的RT系列无线网卡驱动,可以直接在x86平台上编译
💻 C
📖 第 1 页 / 共 4 页
字号:
		case 2:			if (pHTPhyMode->MCS == MCS_AUTO)			{				pAd->CommonCfg.DesiredHtPhy.MCSSet[0]= 0xff;				pAd->CommonCfg.DesiredHtPhy.MCSSet[1]= 0xff;			}			else			{				ULONG mode;				//mcs = 1<<(pHTPhyMode->MCS);				mode = pHTPhyMode->MCS / 8;				if (mode < 2)					pAd->CommonCfg.DesiredHtPhy.MCSSet[mode] = (1 << (pHTPhyMode->MCS - mode * 8));//				pmcs = (ULONG*)&(pAd->CommonCfg.DesiredHtPhy.MCSSet[0]);//		*pmcs= 1<<(pHTPhyMode->MCS);			}			//pAd->CommonCfg.HtCapability.MCSSet[0] =  0xff;			//pAd->CommonCfg.HtCapability.MCSSet[1] =  0xff;			break;	}	// Set Rx MCSSet	switch (RxStream)	{		case 1:						pAd->CommonCfg.HtCapability.MCSSet[0] =  0xff;			pAd->CommonCfg.HtCapability.MCSSet[1] =  0x00;			break;		case 2:		case 3:							pAd->CommonCfg.HtCapability.MCSSet[0] =  0xff;			pAd->CommonCfg.HtCapability.MCSSet[1] =  0xff;			break;	}	if (pAd->CommonCfg.bForty_Mhz_Intolerant && (pAd->CommonCfg.Channel <= 14) && (pHTPhyMode->BW == BW_40) )	{		pHTPhyMode->BW = BW_40;		pAd->CommonCfg.HtCapability.HtCapInfo.Forty_Mhz_Intolerant = 1;	}	if(pHTPhyMode->BW == BW_40)	{        pAd->CommonCfg.HtCapability.MCSSet[4] = 0x1; // MCS 32        pAd->CommonCfg.DesiredHtPhy.MCSSet[4] = 0x1;		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) || 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);			BBPValue |= 0x10;			RTMP_BBP_IO_WRITE8_BY_REG_ID(pAd, BBP_R4, BBPValue);			pAd->CommonCfg.BBPCurrentBW = BW_40;		}	}			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. 		// Only for updating Registry transmit setting. However, real transmit setting is from OID setting or via negociation.	pAd->CommonCfg.RegTransmitSetting.field.EXTCHA = pHTPhyMode->ExtOffset;	pAd->CommonCfg.RegTransmitSetting.field.BW = pHTPhyMode->BW;	pAd->CommonCfg.RegTransmitSetting.field.ShortGI = pHTPhyMode->SHORTGI;	pAd->CommonCfg.RegTransmitSetting.field.STBC = pHTPhyMode->STBC;	pAd->CommonCfg.RegTransmitSetting.field.HTMODE = pHTPhyMode->HtMode;	pAd->CommonCfg.RegTransmitSetting.field.MCS = pHTPhyMode->MCS;		{		// 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]  = 96;			pAd->CommonCfg.APEdcaParm.Txop[3]  = 48;		}		AsicSetEdcaParm(pAd, &pAd->CommonCfg.APEdcaParm);	}	MlmeUpdateHtTxRates(pAd, 0xff);	if (pHTPhyMode->MCS != MCS_AUTO)	{		pAd->CommonCfg.bAutoTxRateSwitch = FALSE;				pAd->CommonCfg.HTPhyMode.field.STBC		= pHTPhyMode->STBC;		pAd->CommonCfg.HTPhyMode.field.ShortGI	= pHTPhyMode->SHORTGI;		pAd->CommonCfg.HTPhyMode.field.MCS		= pHTPhyMode->MCS;		pAd->CommonCfg.HTPhyMode.field.MODE		= pHTPhyMode->HtMode;		pAd->CommonCfg.HTPhyMode.field.BW		= pHTPhyMode->BW;#ifdef CONFIG_STA_SUPPORT		pAd->MacTab.Content[BSSID_WCID].HTPhyMode.field.STBC	= pAd->CommonCfg.HTPhyMode.field.STBC;		pAd->MacTab.Content[BSSID_WCID].HTPhyMode.field.ShortGI	= pAd->CommonCfg.HTPhyMode.field.ShortGI;		pAd->MacTab.Content[BSSID_WCID].HTPhyMode.field.MCS		= pAd->CommonCfg.HTPhyMode.field.MCS;		pAd->MacTab.Content[BSSID_WCID].HTPhyMode.field.MODE	= pAd->CommonCfg.HTPhyMode.field.MODE;#endif // CONFIG_STA_SUPPORT //	}	else	{		pAd->CommonCfg.bAutoTxRateSwitch = TRUE;	}}/*	========================================================================	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,	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, 4); // rt2860 only support MCS max=32, no need to copy all 16 uchar.	        DBGPRINT(RT_DEBUG_TRACE,("RTMPUpdateHTIE <== \n"));}/*	========================================================================	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){	ULONG		WCIDAttri;	USHORT		offset;	UCHAR		IVEIV = 0;	USHORT		Wcid;#ifdef CONFIG_STA_SUPPORT	if (pEntry && ADHOC_ON(pAd))		Wcid = pEntry->Aid;	else if (pEntry && INFRA_ON(pAd))		Wcid = BSSID_WCID;	else		Wcid = MCAST_WCID;#endif // CONFIG_STA_SUPPORT //	// Update WCID attribute table	offset = MAC_WCID_ATTRIBUTE_BASE + (Wcid * HW_WCID_ATTRI_SIZE);#ifdef CONFIG_STA_SUPPORT	WCIDAttri = (CipherAlg<<1) | SHAREDKEYTABLE;#endif // CONFIG_STA_SUPPORT //			RTMP_IO_WRITE32(pAd, offset, WCIDAttri);			// Update IV/EIV table	offset = MAC_IVEIV_TABLE_BASE + (Wcid * HW_IVEIV_ENTRY_SIZE);	// WPA mode	if ((CipherAlg == CIPHER_TKIP) || (CipherAlg == CIPHER_TKIP_NO_MIC) || (CipherAlg == CIPHER_AES))	{			// Eiv bit on. keyid always is 0 for pairwise key 					IVEIV = (KeyIdx <<6) | 0x20;		}	 	else	{		// WEP KeyIdx is default tx key. 		IVEIV = (KeyIdx << 6);		}		// For key index and ext IV bit, so only need to update the position(offset+3).	RTMP_IO_WRITE8(pAd, offset+3, IVEIV); 			DBGPRINT(RT_DEBUG_TRACE,("RTMPAddWcidAttributeEntry: WCID #%d, KeyIndex #%d, Alg=%s\n",Wcid, KeyIdx, CipherName[CipherAlg]));	DBGPRINT(RT_DEBUG_TRACE,("	WCIDAttri = %lx \n",  WCIDAttri));	}/*     ==========================================================================    Description:        Parse encryption typeArguments:    pAdapter                    Pointer to our adapter    wrq                         Pointer to the ioctl argument    Return Value:        None    Note:    ==========================================================================*/CHAR *GetEncryptType(CHAR enc){    if(enc == Ndis802_11WEPDisabled)        return "NONE";    if(enc == Ndis802_11WEPEnabled)    	return "WEP";    if(enc == Ndis802_11Encryption2Enabled)    	return "TKIP";    if(enc == Ndis802_11Encryption3Enabled)    	return "AES";	if(enc == Ndis802_11Encryption4Enabled)    	return "TKIPAES";    else    	return "UNKNOW";}CHAR *GetAuthMode(CHAR auth){    if(auth == Ndis802_11AuthModeOpen)    	return "OPEN";    if(auth == Ndis802_11AuthModeShared)    	return "SHARED";	if(auth == Ndis802_11AuthModeAutoSwitch)    	return "AUTOWEP";    if(auth == Ndis802_11AuthModeWPA)    	return "WPA";    if(auth == Ndis802_11AuthModeWPAPSK)    	return "WPAPSK";    if(auth == Ndis802_11AuthModeWPANone)    	return "WPANONE";    if(auth == Ndis802_11AuthModeWPA2)    	return "WPA2";    if(auth == Ndis802_11AuthModeWPA2PSK)    	return "WPA2PSK";	if(auth == Ndis802_11AuthModeWPA1WPA2)    	return "WPA1WPA2";	if(auth == Ndis802_11AuthModeWPA1PSKWPA2PSK)    	return "WPA1PSKWPA2PSK";    else    	return "UNKNOW";}		#ifndef UCOS/*     ==========================================================================    Description:        Get site survey results	Arguments:	    pAdapter                    Pointer to our adapter	    wrq                         Pointer to the ioctl argument    Return Value:        None    Note:        Usage:        		1.) UI needs to wait 4 seconds after issue a site survey command        		2.) iwpriv ra0 get_site_survey        		3.) UI needs to prepare at least 4096bytes to get the results    ==========================================================================*/#define	LINE_LEN	(4+28+20+8+10+9+7+3)	// Channel+SSID+Bssid+WepStatus+AuthMode+Signal+WiressMode+NetworkTypeVOID RTMPIoctlGetSiteSurvey(	IN	PRTMP_ADAPTER	pAdapter, 	IN	struct iwreq	*wrq){	CHAR		*msg;	INT 		i=0;	 	INT 		Status=0;	CHAR		Ssid[MAX_LEN_OF_SSID +1];    INT         Rssi = 0;    UINT        Rssi_Quality = 0;    NDIS_802_11_NETWORK_TYPE    wireless_mode;	os_alloc_mem(NULL, (PUCHAR *)&msg, sizeof(CHAR)*((MAX_LEN_OF_BSS_TABLE)*LINE_LEN));	if (msg == NULL)    {           DBGPRINT(RT_DEBUG_TRACE, ("RTMPIoctlGetSiteSurvey - msg memory alloc fail.\n"));		return;    }    	memset(msg, 0 ,(MAX_LEN_OF_BSS_TABLE)*LINE_LEN );	memset(Ssid, 0 ,(MAX_LEN_OF_SSID +1));	sprintf(msg,"%s","\n");	sprintf(msg+strlen(msg),"%-4s%-28s%-20s%-8s%-10s%-9s%-7s%-3s\n",	    "Ch", "SSID", "BSSID", "Enc", "Auth", "Siganl(%)", "W-Mode", " NT");		for(i=0;i<MAX_LEN_OF_BSS_TABLE;i++)	{		if( pAdapter->ScanTab.BssEntry[i].Channel==0)			break;		if((strlen(msg)+LINE_LEN ) >= IW_SCAN_MAX_DATA)			break;        		//Channel		sprintf(msg+strlen(msg),"%-4d", pAdapter->ScanTab.BssEntry[i].Channel);		//SSID		memcpy(Ssid, pAdapter->ScanTab.BssEntry[i].Ssid, pAdapter->ScanTab.BssEntry[i].SsidLen);		Ssid[pAdapter->ScanTab.BssEntry[i].SsidLen] = '\0';

⌨️ 快捷键说明

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