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

📄 rtusb_info.c

📁 华硕无线网卡 167G linux 驱动
💻 C
📖 第 1 页 / 共 5 页
字号:
			wrq->u.data.length = BssLen;			DBGPRINT(RT_DEBUG_INFO,"copy to user in OID_802_11_BSSID_LIST = %d\n",wrq->u.data.length);			if(copy_to_user(wrq->u.data.pointer, pBssidList, wrq->u.data.length))				Status = -EFAULT;			kfree(pBssidList);			break;		case OID_802_11_TX_POWER_LEVEL:			wrq->u.data.length = sizeof(ULONG);			if(copy_to_user(wrq->u.data.pointer, &pAdapter->PortCfg.TxPower, wrq->u.data.length))				Status = -EFAULT;			DBGPRINT(RT_DEBUG_INFO, "Query::OID_802_11_TX_POWER_LEVEL %x\n",pAdapter->PortCfg.TxPower);			break;		case OID_802_3_CURRENT_ADDRESS:			wrq->u.data.length = ETH_LENGTH_OF_ADDRESS;			if(copy_to_user(wrq->u.data.pointer, &pAdapter->CurrentAddress, wrq->u.data.length))				Status = -EFAULT;			DBGPRINT(RT_DEBUG_INFO, "Query::OID_802_3_CURRENT_ADDRESS \n");			break;		case OID_GEN_MEDIA_CONNECT_STATUS:			DBGPRINT(RT_DEBUG_INFO, "Query::OID_GEN_MEDIA_CONNECT_STATUS \n");			wrq->u.data.length = sizeof(NDIS_MEDIA_STATE);			if(copy_to_user(wrq->u.data.pointer, &pAdapter->MediaState, wrq->u.data.length))				Status = -EFAULT;			break;		case OID_802_11_BSSID:			if (INFRA_ON(pAdapter) || ADHOC_ON(pAdapter))			{				if(copy_to_user(wrq->u.data.pointer, &pAdapter->PortCfg.Bssid, sizeof(MACADDR)))					Status = -EFAULT;				DBGPRINT(RT_DEBUG_INFO, "IOCTL::SIOCGIWAP(=%02x:%02x:%02x:%02x:%02x:%02x)\n",						pAdapter->PortCfg.Bssid.Octet[0],pAdapter->PortCfg.Bssid.Octet[1],pAdapter->PortCfg.Bssid.Octet[2],						pAdapter->PortCfg.Bssid.Octet[3],pAdapter->PortCfg.Bssid.Octet[4],pAdapter->PortCfg.Bssid.Octet[5]);			}			else			{				DBGPRINT(RT_DEBUG_INFO, "Query::OID_802_11_BSSID(=EMPTY)\n");				Status = -ENOTCONN;			}			break;		case OID_802_11_SSID:			Ssid.SsidLength = pAdapter->PortCfg.SsidLen;			memset(Ssid.Ssid, 0, MAX_LEN_OF_SSID);			memcpy(Ssid.Ssid, pAdapter->PortCfg.Ssid, Ssid.SsidLength);			wrq->u.data.length = sizeof(NDIS_802_11_SSID);			if(copy_to_user(wrq->u.data.pointer, &Ssid, wrq->u.data.length))				Status = -EFAULT;			DBGPRINT(RT_DEBUG_INFO, "Query::OID_802_11_SSID (Len=%d, ssid=%s)\n", Ssid.SsidLength,Ssid.Ssid);			break;		case RT_OID_802_11_QUERY_LINK_STATUS:			LinkStatus.CurrTxRate = RateIdTo500Kbps[pAdapter->PortCfg.TxRate];	 // unit : 500 kbps			LinkStatus.ChannelQuality = pAdapter->Mlme.ChannelQuality;			LinkStatus.RxByteCount = pAdapter->RalinkCounters.ReceivedByteCount;			LinkStatus.TxByteCount = pAdapter->RalinkCounters.TransmittedByteCount;			wrq->u.data.length = sizeof(RT_802_11_LINK_STATUS);			if(copy_to_user(wrq->u.data.pointer, &LinkStatus, wrq->u.data.length))				Status = -EFAULT;			DBGPRINT(RT_DEBUG_INFO, "Query::RT_OID_802_11_LINK_STATUS\n");			break;		case OID_802_11_CONFIGURATION:			Configuration.Length = sizeof(NDIS_802_11_CONFIGURATION);			Configuration.BeaconPeriod = pAdapter->PortCfg.BeaconPeriod;			Configuration.ATIMWindow = pAdapter->PortCfg.AtimWin;			if (ADHOC_ON(pAdapter))				{MAP_CHANNEL_ID_TO_KHZ(pAdapter->PortCfg.IbssConfig.Channel, Configuration.DSConfig);}			else				{MAP_CHANNEL_ID_TO_KHZ(pAdapter->PortCfg.Channel, Configuration.DSConfig);}			wrq->u.data.length = sizeof(NDIS_802_11_CONFIGURATION);			if(copy_to_user(wrq->u.data.pointer, &Configuration, wrq->u.data.length))				Status = -EFAULT;			DBGPRINT(RT_DEBUG_ERROR, "Query::OID_802_11_CONFIGURATION(BeaconPeriod=%d,AtimW=%d,bssidChannel=%d) \n", 				Configuration.BeaconPeriod, Configuration.ATIMWindow, pAdapter->PortCfg.IbssConfig.Channel);			break;		case OID_802_11_RSSI:			ulInfo = pAdapter->PortCfg.LastRssi;			wrq->u.data.length = sizeof(UCHAR);			if(copy_to_user(wrq->u.data.pointer, &ulInfo, wrq->u.data.length))				Status = -EFAULT;			DBGPRINT(RT_DEBUG_INFO, "Query::OID_802_11_RSSI(=%d)\n", ulInfo);			break;		case OID_802_11_RSSI_TRIGGER:			ulInfo = pAdapter->PortCfg.LastRssi - RSSI_TO_DBM_OFFSET;			wrq->u.data.length = sizeof(ulInfo);			if(copy_to_user(wrq->u.data.pointer, &ulInfo, wrq->u.data.length))				Status = -EFAULT;			DBGPRINT(RT_DEBUG_INFO, "Query::OID_802_11_RSSI_TRIGGER(=%d)\n", ulInfo);			break;		case OID_802_11_STATISTICS:			DBGPRINT(RT_DEBUG_INFO, "Query::OID_802_11_STATISTICS \n");			// Update FCS counters			// Sanity check for calculation of sucessful count			if (pAdapter->WlanCounters.TransmittedFragmentCount.QuadPart < pAdapter->WlanCounters.RetryCount.QuadPart)				pAdapter->WlanCounters.TransmittedFragmentCount.QuadPart = pAdapter->WlanCounters.RetryCount.QuadPart;			Statistics.TransmittedFragmentCount.QuadPart = pAdapter->WlanCounters.TransmittedFragmentCount.QuadPart;			Statistics.MulticastTransmittedFrameCount.QuadPart = pAdapter->WlanCounters.MulticastTransmittedFrameCount.QuadPart;			Statistics.FailedCount.QuadPart = pAdapter->WlanCounters.FailedCount.QuadPart;			Statistics.RetryCount.QuadPart = pAdapter->WlanCounters.RetryCount.QuadPart;			Statistics.MultipleRetryCount.QuadPart = pAdapter->WlanCounters.MultipleRetryCount.QuadPart;			Statistics.RTSSuccessCount.QuadPart = pAdapter->WlanCounters.RTSSuccessCount.QuadPart;			Statistics.RTSFailureCount.QuadPart = pAdapter->WlanCounters.RTSFailureCount.QuadPart;			Statistics.ACKFailureCount.QuadPart = pAdapter->WlanCounters.ACKFailureCount.QuadPart;			Statistics.FrameDuplicateCount.QuadPart = pAdapter->WlanCounters.FrameDuplicateCount.QuadPart;			Statistics.ReceivedFragmentCount.QuadPart = pAdapter->WlanCounters.ReceivedFragmentCount.QuadPart;			Statistics.MulticastReceivedFrameCount.QuadPart = pAdapter->WlanCounters.MulticastReceivedFrameCount.QuadPart;			Statistics.FCSErrorCount.QuadPart = pAdapter->WlanCounters.FCSErrorCount.QuadPart;			wrq->u.data.length = sizeof(NDIS_802_11_STATISTICS);			if(copy_to_user(wrq->u.data.pointer, &Statistics, wrq->u.data.length))				Status = -EFAULT;			break;		case OID_GEN_RCV_OK:			DBGPRINT(RT_DEBUG_INFO, "Query::OID_GEN_RCV_OK \n");			ulInfo = pAdapter->Counters.GoodReceives;			wrq->u.data.length = sizeof(ulInfo);			if(copy_to_user(wrq->u.data.pointer, &ulInfo, wrq->u.data.length))				Status = -EFAULT;			break;		case OID_GEN_RCV_NO_BUFFER:			DBGPRINT(RT_DEBUG_INFO, "Query::OID_GEN_RCV_NO_BUFFER \n");			ulInfo = pAdapter->Counters.RxNoBuffer;			wrq->u.data.length = sizeof(ulInfo);			if(copy_to_user(wrq->u.data.pointer, &ulInfo, wrq->u.data.length))				Status = -EFAULT;			break;		case RT_OID_802_11_PHY_MODE:			ulInfo = (ULONG)pAdapter->PortCfg.PhyMode;			wrq->u.data.length = sizeof(ulInfo);			if(copy_to_user(wrq->u.data.pointer, &ulInfo, wrq->u.data.length))				Status = -EFAULT;			DBGPRINT(RT_DEBUG_INFO, "Query::RT_OID_802_11_PHY_MODE (=%d)\n", ulInfo);			break;		case OID_802_11_RTS_THRESHOLD:			RtsThresh = pAdapter->PortCfg.RtsThreshold;			wrq->u.data.length = sizeof(RtsThresh);			if(copy_to_user(wrq->u.data.pointer, &RtsThresh, wrq->u.data.length))				Status = -EFAULT;			DBGPRINT(RT_DEBUG_INFO, "Query::OID_802_11_RTS_THRESHOLD(=%d)\n", RtsThresh);			break;		case OID_802_11_FRAGMENTATION_THRESHOLD:			FragThresh = pAdapter->PortCfg.FragmentThreshold;			if (pAdapter->PortCfg.bFragmentZeroDisable == TRUE)				FragThresh = 0;			wrq->u.data.length = sizeof(FragThresh);			if(copy_to_user(wrq->u.data.pointer, &FragThresh, wrq->u.data.length))				Status = -EFAULT;			DBGPRINT(RT_DEBUG_INFO, "Query::OID_802_11_FRAGMENTATION_THRESHOLD(=%d)\n", FragThresh);			break;		case OID_802_11_POWER_MODE:			PowerMode = pAdapter->PortCfg.WindowsPowerMode;			wrq->u.data.length = sizeof(PowerMode);			if(copy_to_user(wrq->u.data.pointer, &PowerMode, wrq->u.data.length))				Status = -EFAULT;			DBGPRINT(RT_DEBUG_INFO, "Query::OID_802_11_POWER_MODE(=%d)\n", PowerMode);			break;		case RT_OID_802_11_RADIO:			RadioState = (BOOLEAN) pAdapter->PortCfg.bSwRadio;			wrq->u.data.length = sizeof(RadioState);			if(copy_to_user(wrq->u.data.pointer, &RadioState, wrq->u.data.length))				Status = -EFAULT;			DBGPRINT(RT_DEBUG_INFO, "Query::RT_OID_802_11_QUERY_RADIO (=%d)\n", RadioState);			break;		case OID_802_11_INFRASTRUCTURE_MODE:			if (ADHOC_ON(pAdapter))				BssType = Ndis802_11IBSS;			else if (INFRA_ON(pAdapter))				BssType = Ndis802_11Infrastructure;			else				BssType = Ndis802_11AutoUnknown;			wrq->u.data.length = sizeof(BssType);			if(copy_to_user(wrq->u.data.pointer, &BssType, wrq->u.data.length))				Status = -EFAULT;			DBGPRINT(RT_DEBUG_INFO, "Query::OID_802_11_INFRASTRUCTURE_MODE(=%d)\n", BssType);			break;		case RT_OID_802_11_PREAMBLE:			PreamType = pAdapter->PortCfg.WindowsTxPreamble;			wrq->u.data.length = sizeof(PreamType);			if(copy_to_user(wrq->u.data.pointer, &PreamType, wrq->u.data.length))				Status = -EFAULT;			DBGPRINT(RT_DEBUG_INFO, "Query::RT_OID_802_11_PREAMBLE(=%d)\n", PreamType);			break;		case OID_802_11_AUTHENTICATION_MODE:			AuthMode = pAdapter->PortCfg.AuthMode;			wrq->u.data.length = sizeof(AuthMode);			if(copy_to_user(wrq->u.data.pointer, &AuthMode, wrq->u.data.length))				Status = -EFAULT;			DBGPRINT(RT_DEBUG_INFO, "Query::OID_802_11_AUTHENTICATION_MODE(=%d)\n", AuthMode);			break;		case OID_802_11_WEP_STATUS:			WepStatus = pAdapter->PortCfg.WepStatus;			wrq->u.data.length = sizeof(WepStatus);			if(copy_to_user(wrq->u.data.pointer, &WepStatus, wrq->u.data.length))				Status = -EFAULT;			DBGPRINT(RT_DEBUG_INFO, "Query::OID_802_11_WEP_STATUS(=%d)\n", WepStatus);			break;		case RT_OID_802_11_QUERY_NOISE_LEVEL:			LastR17Value = (pAdapter->PortCfg.LastR17Value > BBP_R17_DYNAMIC_UP_BOUND) ? BBP_R17_DYNAMIC_UP_BOUND : ((ULONG) pAdapter->PortCfg.LastR17Value);			wrq->u.data.length = sizeof(UCHAR);			if(copy_to_user(wrq->u.data.pointer, &LastR17Value, wrq->u.data.length))				Status = -EFAULT;			DBGPRINT(RT_DEBUG_INFO, "Query::RT_OID_802_11_QUERY_NOISE_LEVEL (=%d)\n", LastR17Value);			break;		case RT_OID_802_11_EXTRA_INFO:			wrq->u.data.length = sizeof(ULONG);			if(copy_to_user(wrq->u.data.pointer, &pAdapter->ExtraInfo, wrq->u.data.length))				Status = -EFAULT;	            DBGPRINT(RT_DEBUG_INFO, "Query::RT_OID_802_11_EXTRA_INFO (=%d)\n", pAdapter->ExtraInfo);	            break;		default:			DBGPRINT(RT_DEBUG_TRACE, "Query::unknown IOCTL's subcmd = 0x%08x\n", cmd);			Status = -EOPNOTSUPP;			break;	}	return Status;}INT RTMPSetInformation(	IN	PRT2570ADAPTER pAdapter,	IN	OUT struct ifreq	*rq,	IN	INT 				cmd){	struct iwreq						*wrq = (struct iwreq *) rq;	NDIS_802_11_SSID					Ssid, *pSsid=NULL;	NDIS_802_11_MAC_ADDRESS 			Bssid;	RT_802_11_PHY_MODE					PhyMode;	NDIS_802_11_RATES					aryRates;	RT_802_11_PREAMBLE					Preamble;	NDIS_802_11_WEP_STATUS				WepStatus;	NDIS_802_11_AUTHENTICATION_MODE 	AuthMode;	NDIS_802_11_NETWORK_INFRASTRUCTURE	BssType;	NDIS_802_11_RTS_THRESHOLD			RtsThresh;	NDIS_802_11_FRAGMENTATION_THRESHOLD FragThresh;	NDIS_802_11_POWER_MODE				PowerMode;	NDIS_802_11_TX_POWER_LEVEL			TxPowerLevel;	NDIS_802_11_KEY					Key;	PNDIS_802_11_REMOVE_KEY 			pRemoveKey = NULL;	NDIS_802_11_CONFIGURATION			Config, *pConfig = NULL;	ULONG								Now;	ULONG								KeyIdx;	INT 								Status = NDIS_STATUS_SUCCESS;	UCHAR								CountryRegion;	BOOLEAN 							RadioState;	NDIS_802_11_PRIVACY_FILTER           Filter;	NDIS_802_11_RSSI                     RssiTrigger;		DBGPRINT(RT_DEBUG_INFO, "Set::RTMPSetInformation \n");		switch(cmd & 0x7FFF) {		case OID_802_11_BSSID:		 	DBGPRINT(RT_DEBUG_ERROR,"enter OID_802_11_BSSID in RTMPSetInformation\n");			if (wrq->u.data.length != sizeof(NDIS_802_11_MAC_ADDRESS))				Status	= -EINVAL;			else			{				if(copy_from_user(&Bssid, wrq->u.data.pointer, wrq->u.data.length))					Status = -EINVAL;				pAdapter->Mlme.CntlAux.CurrReqIsFromNdis = FALSE;				Status = RTUSBEnqueueCmdFromNdis(pAdapter, RT_OID_802_11_BSSID, TRUE, &Bssid, wrq->u.data.length);												}			break;		case OID_802_11_SSID:			DBGPRINT(RT_DEBUG_ERROR,"enter OID_802_11_SSID in RTMPSetInformation\n");			if (wrq->u.data.length != sizeof(NDIS_802_11_SSID))				Status = -EINVAL;			else			{				if(copy_from_user(&Ssid, wrq->u.data.pointer, wrq->u.data.length))		    			Status = -EINVAL;									pSsid = &Ssid;				if (pSsid->SsidLength > MAX_LEN_OF_SSID)					Status = -EINVAL;				else				{					Status =RTUSBEnqueueCmdFromNdis(pAdapter, OID_802_11_SSID, TRUE, pSsid, sizeof(NDIS_802_11_SSID));					DBGPRINT(RT_DEBUG_TRACE, "Set::OID_802_11_SSID (Len=%d,Ssid=%s)\n", pSsid->SsidLength, pSsid->Ssid);				}			}			break;		case OID_802_11_INFRASTRUCTURE_MODE:			if (wrq->u.data.length != sizeof(NDIS_802_11_NETWORK_INFRASTRUCTURE))				Status	= -EINVAL;			else			{				if(copy_from_user(&BssType, wrq->u.data.pointer, wrq->u.data.length))					Status = -EINVAL;				if (BssType == Ndis802_11IBSS) 				{					if (pAdapter->PortCfg.BssType != BSS_INDEP)					{						// Config has changed						if INFRA_ON(pAdapter)						{							RTUSBEnqueueInternalCmd(pAdapter, RT_OID_LINK_DOWN);							// First cancel linkdown timer							DBGPRINT(RT_DEBUG_TRACE, "NDIS_STATUS_MEDIA_DISCONNECT Event BB!\n");													}					}					pAdapter->PortCfg.BssType = BSS_INDEP;					DBGPRINT(RT_DEBUG_TRACE, "Set::OID_802_11_INFRASTRUCTURE_MODE (AD-HOC)\n");				}				else if (BssType == Ndis802_11Infrastructure) 				{					if (pAdapter->PortCfg.BssType != BSS_INFRA)					{						// Config has changed						// pAdapter->bConfigChanged = TRUE;						if ADHOC_ON(pAdapter)							RTUSBEnqueueInternalCmd(pAdapter, RT_OID_LINK_DOWN);					}					pAdapter->PortCfg.BssType = BSS_INFRA;					DBGPRINT(RT_DEBUG_TRACE, "Set::OID_802_11_INFRASTRUCTURE_MODE (INFRA)\n");				}				else				{					Status	= -EINVAL;					DBGPRINT(RT_DEBUG_TRACE, "Set::OID_802_11_INFRASTRUCTURE_MODE (unknown)\n");				}			}			// Reset Ralink supplicant to not use, it will be set to start when UI set PMK key			pAdapter->PortCfg.WpaState = SS_NOTUSE;			break;		case OID_802_11_ADD_KEY:			DBGPRINT(RT_DEBUG_ERROR, "!!!!!!!!!!!!!!!!!!!!!Set::OID_802_11_ADD_KEY !!\n");			if(copy_from_user(&Key, wrq->u.data.pointer, wrq->u.data.length))				Status = -EINVAL;								if (Key.Length != wrq->u.data.length)			{				Status	= -EINVAL;				DBGPRINT(RT_DEBUG_TRACE, "Set::OID_802_11_ADD_KEY, Failed!!\n");			}			else			{				if (pAdapter->PortCfg.AuthMode >= Ndis802_11AuthModeWPA)				{					Status = RTUSBEnqueueCmdFromNdis(pAdapter, OID_802_11_ADD_KEY, TRUE, &Key, wrq->u.data.length);				}				else	// Old WEP stuff				{					KeyIdx = Key.KeyIndex & 0x0fffffff;					Status = RTMPWPAWepKeySanity(pAdapter, &Key);					if (Status == NDIS_STATUS_SUCCESS)						Status = RTUSBEnqueueCmdFromNdis(pAdapter, OID_802_11_ADD_KEY_WEP, TRUE, &Key, wrq->u.data.length);				}				DBGPRINT(RT_DEBUG_TRACE, "Set::OID_802_11_ADD_KEY (id=0x%x, Len=%d-byte)\n", Key

⌨️ 快捷键说明

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