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

📄 rtusb_info.c

📁 华硕无线网卡 167G linux 驱动
💻 C
📖 第 1 页 / 共 5 页
字号:
			val++;		if (val == IW_MAX_FREQUENCIES)			break;	}		range->num_frequency = 0;	for (i = 1; i <= range->num_channels; i++)	{		range->freq[range->num_frequency].i = i;		MAP_CHANNEL_ID_TO_KHZ(i, m);		range->freq[range->num_frequency].m = m;		range->freq[range->num_frequency].e = 3;		if (++range->num_frequency == IW_MAX_FREQUENCIES)		break;	}	range->max_qual.qual = 100; /* percentage */ 	range->max_qual.level = 0; /* dB */	range->max_qual.noise = 0; /* dB */	/* What would be suitable values for "average/typical" qual? */	range->avg_qual.qual = 20;	range->avg_qual.level = -60;	range->avg_qual.noise = -95;	range->sensitivity = 3;	range->max_encoding_tokens = NR_WEP_KEYS;	range->num_encoding_sizes = 2;	range->encoding_size[0] = 5;	range->encoding_size[1] = 13;#if 0	over2 = 0;	len = prism2_get_datarates(dev, rates);	range->num_bitrates = 0;	for (i = 0; i < len; i++) {		if (range->num_bitrates < IW_MAX_BITRATES) {			range->bitrate[range->num_bitrates] =				rates[i] * 500000;			range->num_bitrates++;		}		if (rates[i] == 0x0b || rates[i] == 0x16)			over2 = 1;	}	/* estimated maximum TCP throughput values (bps) */	range->throughput = over2 ? 5500000 : 1500000;    #endif	range->min_rts = 0;	range->max_rts = 2347;	range->min_frag = 256;	range->max_frag = 2346;	return 0;}int rtusb_ioctl_giwap(struct net_device *dev,		      struct iw_request_info *info,		      struct sockaddr *ap_addr, char *extra){	PRT2570ADAPTER pAdapter = (PRT2570ADAPTER) dev->priv;	if (INFRA_ON(pAdapter) || ADHOC_ON(pAdapter))	{		ap_addr->sa_family = ARPHRD_ETHER;		memcpy(ap_addr->sa_data, &pAdapter->PortCfg.Bssid, ETH_ALEN);	}	else	{		DBGPRINT(RT_DEBUG_TRACE, "ioctl::SIOCGIWAP(=EMPTY)\n");		return -ENOTCONN;	}	return 0;}/* * Units are in db above the noise floor. That means the * rssi values reported in the tx/rx descriptors in the * driver are the SNR expressed in db. * * If you assume that the noise floor is -95, which is an * excellent assumption 99.5 % of the time, then you can * derive the absolute signal level (i.e. -95 + rssi).  * There are some other slight factors to take into account * depending on whether the rssi measurement is from 11b, * 11g, or 11a.   These differences are at most 2db and * can be documented. * * NB: various calculations are based on the orinoco/wavelan *     drivers for compatibility */static voidset_quality(struct iw_quality *iq, u_int rssi){	iq->qual = rssi;	/* NB: max is 94 because noise is hardcoded to 161 */	if (iq->qual > 94)		iq->qual = 94;	iq->noise = RSSI_TO_DBM_OFFSET;		/* -95dBm */	iq->level = iq->noise + iq->qual;	iq->updated = 7;}int rtusb_ioctl_iwaplist(struct net_device *dev,			struct iw_request_info *info,			struct iw_point *data, char *extra){	PRT2570ADAPTER pAdapter = (PRT2570ADAPTER) dev->priv;	struct sockaddr addr[IW_MAX_AP];	struct iw_quality qual[IW_MAX_AP];	int i;		for (i = 0; i <IW_MAX_AP ; i++)	{		if (i >=  pAdapter->PortCfg.BssTab.BssNr)			break;		addr[i].sa_family = ARPHRD_ETHER;			memcpy(addr[i].sa_data, &pAdapter->PortCfg.BssTab.BssEntry[i].Bssid, MAC_ADDR_LEN);		set_quality(&qual[i], pAdapter->PortCfg.BssTab.BssEntry[i].Rssi);	}	data->length = i;	memcpy(extra, &addr, i*sizeof(addr[0]));	data->flags = 1;		/* signal quality present (sort of) */	memcpy(extra + i*sizeof(addr[0]), &qual, i*sizeof(qual[i]));	return 0;}#ifdef SIOCGIWSCANint rtusb_ioctl_siwscan(struct net_device *dev,			struct iw_request_info *info,			struct iw_point *data, char *extra){	PRT2570ADAPTER pAdapter = (PRT2570ADAPTER) dev->priv;	int Status = STATUS_SUCCESS;    	do{		if (RTMP_TEST_FLAG(pAdapter, fRTMP_ADAPTER_BSS_SCAN_IN_PROGRESS))			return 0;		if (RTMP_TEST_FLAG(pAdapter, fRTMP_ADAPTER_RADIO_OFF))			return 0;#if LINUX_VERSION_CODE < KERNEL_VERSION(2, 5, 0)		if ((pAdapter->Mlme.CntlMachine.CurrState != CNTL_IDLE) && (pAdapter->MLMEThr_pid > 0))#else		if ((pAdapter->Mlme.CntlMachine.CurrState != CNTL_IDLE) && (pAdapter->MLMEThr_active))#endif		{			DBGPRINT(RT_DEBUG_ERROR, "!!! MLME busy, reset MLME state machine !!!\n");			MlmeRestartStateMachine(pAdapter);			MlmePostRestartStateMachine(pAdapter);			return (RTUSBEnqueueCmdFromNdis(pAdapter, OID_802_11_BSSID_LIST_SCAN, TRUE, NULL, 0));					}		 		pAdapter->Mlme.CntlAux.CurrReqIsFromNdis = FALSE;		// Reset Missed scan number		pAdapter->PortCfg.IgnoredScanNumber = 0;		MlmeEnqueue(pAdapter, 				MLME_CNTL_STATE_MACHINE, 				OID_802_11_BSSID_LIST_SCAN, 				0, 				NULL);		RTUSBUp(pAdapter, (&(pAdapter->mlme_semaphore)));		Status = NDIS_STATUS_SUCCESS;	}while(0);	return 0;}intrtusb_ioctl_giwscan(struct net_device *dev,			struct iw_request_info *info,			struct iw_point *data, char *extra){	PRT2570ADAPTER pAdapter = (PRT2570ADAPTER) dev->priv;	int i=2, j;	char *current_ev = extra;	char *end_buf = extra + IW_SCAN_MAX_DATA;	char *current_val;	struct iw_event iwe;        if (RTMP_TEST_FLAG(pAdapter, fRTMP_ADAPTER_BSS_SCAN_IN_PROGRESS)){                /*                 * Still scanning, indicate the caller should try again.                 */                return -EAGAIN;        }	for (i = 0; i < pAdapter->PortCfg.BssTab.BssNr; i++) 	{		if (current_ev >= end_buf)			break;		//================================		memset(&iwe, 0, sizeof(iwe));		iwe.cmd = SIOCGIWAP;		iwe.u.ap_addr.sa_family = ARPHRD_ETHER;				memcpy(iwe.u.ap_addr.sa_data, &pAdapter->PortCfg.BssTab.BssEntry[i].Bssid, ETH_ALEN);			current_ev = iwe_stream_add_event(current_ev,end_buf, &iwe, IW_EV_ADDR_LEN);		//================================		memset(&iwe, 0, sizeof(iwe));		iwe.cmd = SIOCGIWMODE;		if (pAdapter->PortCfg.BssTab.BssEntry[i].BssType == Ndis802_11IBSS)		{			iwe.u.mode = IW_MODE_ADHOC;		}		else if (pAdapter->PortCfg.BssTab.BssEntry[i].BssType == Ndis802_11Infrastructure)		{			iwe.u.mode = IW_MODE_INFRA;		}		else		{			iwe.u.mode = IW_MODE_AUTO;		}		iwe.len = IW_EV_UINT_LEN;		current_ev = iwe_stream_add_event(current_ev, end_buf, &iwe,  IW_EV_UINT_LEN);		//================================		memset(&iwe, 0, sizeof(iwe));		iwe.cmd = SIOCGIWESSID;		iwe.u.data.length = pAdapter->PortCfg.BssTab.BssEntry[i].SsidLen;		iwe.u.data.flags = 1;		current_ev = iwe_stream_add_point(current_ev,end_buf, &iwe, pAdapter->PortCfg.BssTab.BssEntry[i].Ssid);		//================================		memset(&iwe, 0, sizeof(iwe));		iwe.cmd = SIOCGIWENCODE;		if (CAP_IS_PRIVACY_ON (pAdapter->PortCfg.BssTab.BssEntry[i].CapabilityInfo ))			iwe.u.data.flags =IW_ENCODE_ENABLED | IW_ENCODE_NOKEY;		else			iwe.u.data.flags = IW_ENCODE_DISABLED;		current_ev = iwe_stream_add_point(current_ev, end_buf,&iwe,  pAdapter->PortCfg.BssTab.BssEntry[i].Ssid);		//================================		memset(&iwe, 0, sizeof(iwe));		iwe.cmd = SIOCGIWRATE;		current_val = current_ev + IW_EV_LCP_LEN;		//for (j = 0; j < pAdapter->PortCfg.BssTab.BssEntry[i].RatesLen;j++)		for (j = 0; j < 1;j++)		{			iwe.u.bitrate.value = RateIdToMbps[pAdapter->PortCfg.BssTab.BssEntry[i].Rates[i]/2] * 1000000;			iwe.u.bitrate.disabled = 0;			current_val = iwe_stream_add_value(current_ev,				current_val, end_buf, &iwe,				IW_EV_PARAM_LEN);		}		//================================		memset(&iwe, 0, sizeof(iwe));		iwe.cmd = SIOCGIWFREQ;		if (INFRA_ON(pAdapter) || ADHOC_ON(pAdapter))			iwe.u.freq.m = pAdapter->PortCfg.BssTab.BssEntry[i].Channel;		else			iwe.u.freq.m = pAdapter->PortCfg.BssTab.BssEntry[i].Channel;		iwe.u.freq.e = 0;		iwe.u.freq.i = 0;		current_ev = iwe_stream_add_event(current_ev,end_buf, &iwe, IW_EV_FREQ_LEN);		//================================		memset(&iwe, 0, sizeof(iwe));	}	data->length = current_ev - extra;	DBGPRINT(RT_DEBUG_TRACE,"rtusb_ioctl_giwscan. %d BSS returned\n",pAdapter->PortCfg.BssTab.BssNr);							return 0;}#endifint rtusb_ioctl_siwessid(struct net_device *dev,			 struct iw_request_info *info,			 struct iw_point *data, char *essid){	PRT2570ADAPTER pAdapter = (PRT2570ADAPTER) dev->priv;	NDIS_802_11_SSID					Ssid, *pSsid=NULL;	memset(&Ssid, 0x00, sizeof(NDIS_802_11_SSID));	if (data->flags)	{		if (data->length > IW_ESSID_MAX_SIZE)		{			return -E2BIG;		}		memcpy(Ssid.Ssid, essid, (data->length - 1));		Ssid.SsidLength = data->length - 1;	//minus null character.		memcpy(pAdapter->PortCfg.Ssid, essid, (data->length - 1));		pAdapter->PortCfg.SsidLen = data->length - 1;	}	else		Ssid.SsidLength = 0;  // ANY ssid 	pSsid = &Ssid;	 // tell CNTL state machine to call NdisMSetInformationComplete() after completing	// this request, because this request is initiated by NDIS.	pAdapter->Mlme.CntlAux.CurrReqIsFromNdis = FALSE; 	DBGPRINT(RT_DEBUG_TRACE,"--->Ssid.SsidLength = %d, %s\n",Ssid.SsidLength, Ssid.Ssid);		#if LINUX_VERSION_CODE < KERNEL_VERSION(2, 5, 0)	if (pAdapter->MLMEThr_pid > 0)#else	if (!IS_ERR(pAdapter->MLMEThr))#endif		MlmeEnqueue(pAdapter, 				MLME_CNTL_STATE_MACHINE, 				OID_802_11_SSID,				sizeof(NDIS_802_11_SSID),				(VOID *)pSsid				);	RTUSBUp(pAdapter, (&(pAdapter->mlme_semaphore)));	return 0;}int rtusb_ioctl_giwessid(struct net_device *dev,			 struct iw_request_info *info,			 struct iw_point *data, char *essid){	PRT2570ADAPTER pAdapter = (PRT2570ADAPTER) dev->priv;	data->flags = 1;		/* active */	DBGPRINT(RT_DEBUG_TRACE,"MediaState is connected\n");	data->length = pAdapter->PortCfg.SsidLen;	memcpy(essid, pAdapter->PortCfg.Ssid, pAdapter->PortCfg.SsidLen);	pAdapter->PortCfg.Ssid[pAdapter->PortCfg.SsidLen] = '\0';	DBGPRINT(RT_DEBUG_TRACE,"pAdapter->PortCfg.Ssid=%s , Ssidlen = %d\n",pAdapter->PortCfg.Ssid, pAdapter->PortCfg.SsidLen);	DBGPRINT(RT_DEBUG_TRACE, "<==rtusb_ioctl_giwessid:: (Len=%d, ssid=%s...)\n", pAdapter->PortCfg.SsidLen, pAdapter->PortCfg.Ssid);	return 0;}int rtusb_ioctl_siwnickn(struct net_device *dev,			 struct iw_request_info *info,			 struct iw_point *data, char *nickname){	PRT2570ADAPTER pAdapter = (PRT2570ADAPTER) dev->priv;	if (data->length > IEEE80211_NWID_LEN)		return -EINVAL;	memset(pAdapter->nickn, 0, IEEE80211_NWID_LEN);	memcpy(pAdapter->nickn, nickname, data->length);	pAdapter->nicknamelen = data->length;	return 0;}int rtusb_ioctl_giwnickn(struct net_device *dev,			 struct iw_request_info *info,			 struct iw_point *data, char *nickname){	PRT2570ADAPTER pAdapter = (PRT2570ADAPTER) dev->priv;	if (data->length > pAdapter->nicknamelen + 1)		data->length = pAdapter->nicknamelen + 1;	if (data->length > 0) {		memcpy(nickname, pAdapter->nickn, data->length-1);		nickname[data->length-1] = '\0';	}	return 0;}int rtusb_ioctl_siwrts(struct net_device *dev,		       struct iw_request_info *info,		       struct iw_param *rts, char *extra){	PRT2570ADAPTER pAdapter = (PRT2570ADAPTER) dev->priv;	u16 val;	if (rts->disabled)		val = MAX_RTS_THRESHOLD;	else if (1 > rts->value || rts->value > MAX_RTS_THRESHOLD)		return -EINVAL;	else		val = rts->value;	

⌨️ 快捷键说明

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