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

📄 rtmp_info.c

📁 TP Link 321 Linux Driver
💻 C
📖 第 1 页 / 共 5 页
字号:
/* *************************************************************************** * Ralink Tech Inc. * 4F, No. 2 Technology	5th	Rd. * Science-based Industrial	Park * Hsin-chu, Taiwan, R.O.C. * * (c) Copyright 2002-2005, Ralink Technology, Inc. * * All rights reserved.	Ralink's source	code is	an unpublished work	and	the * use of a	copyright notice does not imply	otherwise. This	source code * contains	confidential trade secret material of Ralink Tech. Any attemp * or participation	in deciphering,	decoding, reverse engineering or in	any * way altering	the	source code	is stricitly prohibited, unless	the	prior * written consent of Ralink Technology, Inc. is obtained. ***************************************************************************	Module Name:	rtmp_info.c	Abstract:	IOCTL related subroutines	Revision History:	Who 		When		  What	--------	----------	  ----------------------------------------------	Rory Chen	01-03-2003	  created	Rory Chen	02-14-2005	  modify to support RT61*/#include	"rt_config.h"#include <net/iw_handler.h>#ifdef DBGextern ULONG	RTDebugLevel;#endif#ifndef IW_ESSID_MAX_SIZE/* Maximum size of the ESSID and NICKN strings */#define IW_ESSID_MAX_SIZE	32#endifextern UCHAR	CipherWpa2Template[];extern UCHAR	CipherWpa2TemplateLen;extern UCHAR	CipherWpaPskTkip[];extern UCHAR	CipherWpaPskTkipLen;#define NR_WEP_KEYS 4//#define WEP_SMALL_KEY_LEN (40/8)  //move to rtmp_def.h//#define WEP_LARGE_KEY_LEN (104/8)struct iw_priv_args privtab[] = {{ RTPRIV_IOCTL_SET,   IW_PRIV_TYPE_CHAR | 1024, 0,  "set"},{ RTPRIV_IOCTL_SHOW,  IW_PRIV_TYPE_CHAR | 1024, 0,  "show"},#ifdef DBG{ RTPRIV_IOCTL_BBP,  IW_PRIV_TYPE_CHAR | 1024, IW_PRIV_TYPE_CHAR | 1024,  "bbp"},{ RTPRIV_IOCTL_MAC,  IW_PRIV_TYPE_CHAR | 1024, IW_PRIV_TYPE_CHAR | 1024,  "mac"},#ifdef RALINK_ATE{ RTPRIV_IOCTL_E2P,  IW_PRIV_TYPE_CHAR | 1024, IW_PRIV_TYPE_CHAR | 1024,  "e2p"},#endif  /* RALINK_ATE */  #endif{ RTPRIV_IOCTL_STATISTICS,  IW_PRIV_TYPE_CHAR | 1024, IW_PRIV_TYPE_CHAR | 1024,  "stat"}, { RTPRIV_IOCTL_GSITESURVEY,  IW_PRIV_TYPE_CHAR | 1024, IW_PRIV_TYPE_CHAR | 1024 ,  "get_site_survey"},{ RTPRIV_IOCTL_GETRAAPCFG,  IW_PRIV_TYPE_CHAR | 1024, 0,    "get_RaAP_Cfg"},#if 1 { RTPRIV_IOCTL_AUTH,   IW_PRIV_TYPE_INT	|1, 0,	  "auth"},{ RTPRIV_IOCTL_WEPSTATUS,   IW_PRIV_TYPE_INT	|1, 0,	  "enc"},  { RTPRIV_IOCTL_WPAPSK,   IW_PRIV_TYPE_CHAR |64, 0,    "wpapsk"},{ RTPRIV_IOCTL_PSM,  IW_PRIV_TYPE_INT  |1, 0,   "psm"},#endif};static struct {	CHAR *name;	INT (*set_proc)(PRTMP_ADAPTER pAdapter, PUCHAR arg);} *PRTMP_PRIVATE_SET_PROC, RTMP_PRIVATE_SUPPORT_PROC[] = {	{"CountryRegion",				Set_CountryRegion_Proc},		{"CountryRegionABand",			Set_CountryRegionABand_Proc},	   	{"SSID",						Set_SSID_Proc}, 	{"WirelessMode",				Set_WirelessMode_Proc}, 	  	{"TxRate",						Set_TxRate_Proc},			  	{"Channel",						Set_Channel_Proc},			  	{"BGProtection",				Set_BGProtection_Proc},	{"TxPreamble",					Set_TxPreamble_Proc},		  	{"RTSThreshold",				Set_RTSThreshold_Proc}, 	  	{"FragThreshold",				Set_FragThreshold_Proc},	  	{"TxBurst",						Set_TxBurst_Proc},	{"AdhocOfdm",					Set_AdhocModeRate_Proc},#ifdef AGGREGATION_SUPPORT	{"PktAggregate",				Set_PktAggregate_Proc}, 	  #endif	{"TurboRate",					Set_TurboRate_Proc},		  #if 0	{"WmmCapable",					Set_WmmCapable_Proc},#endif	{"IEEE80211H",					Set_IEEE80211H_Proc},	{"NetworkType", 				Set_NetworkType_Proc},		  	{"AuthMode",					Set_AuthMode_Proc}, 		  	{"EncrypType",					Set_EncrypType_Proc},		  	{"DefaultKeyID",				Set_DefaultKeyID_Proc}, 	  	{"Key1",						Set_Key1_Proc}, 			  	{"Key2",						Set_Key2_Proc}, 			  	{"Key3",						Set_Key3_Proc}, 			  	{"Key4",						Set_Key4_Proc}, 			  	{"WPAPSK",						Set_WPAPSK_Proc},	{"ResetCounter",				Set_ResetStatCounter_Proc},	{"PSMode",						Set_PSMode_Proc},	{"TxQueSize",					Set_TxQueSize_Proc},	#ifdef DBG	{"Debug",						Set_Debug_Proc},			 #endif#ifdef RALINK_ATE   	{"ATE",							Set_ATE_Proc},              // set ATE Mode to: STOP, TXCONT, TXCARR, TXFRAME, RXFRAME          	{"ATEDA",						Set_ATE_DA_Proc},           // set ATE TxFrames ADDR1, DA	{"ATESA",						Set_ATE_SA_Proc},           // set ATE TxFrames ADDR2, SA	{"ATEBSSID",					Set_ATE_BSSID_Proc},        // set ATE TxFrames ADDR3, BSSID	{"ATECHANNEL",					Set_ATE_CHANNEL_Proc},      // set ATE Channel	{"ATETXPOW",					Set_ATE_TX_POWER_Proc},     // set ATE TxPower	{"ATETXFREQOFFSET",				Set_ATE_TX_FREQOFFSET_Proc}, //set ATE RF frequency offset	{"ATETXLEN",					Set_ATE_TX_LENGTH_Proc},    // set ATE TxLength	{"ATETXCNT",					Set_ATE_TX_COUNT_Proc},     // set ATE TxCount	{"ATETXRATE",					Set_ATE_TX_RATE_Proc},      // set ATE TxRate#endif	// RALINK_ATE	{NULL,}};static struct {	CHAR *name;	INT (*set_proc)(PRTMP_ADAPTER pAdapter, PUCHAR arg);} *PRTMP_PRIVATE_SHOW_PROC, RTMP_PRIVATE_SHOW_SUPPORT_PROC[] = {	{NULL,}};char * rtstrchr(const char * s, int c){	for(; *s != (char) c; ++s)		if (*s == '\0')			return NULL;	return (char *) s;}/*This is required for LinEX2004/kernel2.6.7 to provide iwlist scanning function*/intrt_ioctl_giwname(struct net_device *dev,		   struct iw_request_info *info,		   char *name, char *extra){	strncpy(name, "RT73 WLAN", IFNAMSIZ);	return 0;}int rt_ioctl_siwfreq(struct net_device *dev,			struct iw_request_info *info,			struct iw_freq *freq, char *extra){	PRTMP_ADAPTER pAdapter = (PRTMP_ADAPTER) dev->priv;	int 	chan = -1;	    //check if the interface is down	if ((dev->flags & IFF_UP) == 0)		 return -ENETDOWN;    if (pAdapter->RTUSBCmdThr_pid < 0)        return -ENETDOWN;	if (freq->e > 1)		return -EINVAL;	if((freq->e == 0) && (freq->m <= 1000))		chan = freq->m;	// Setting by channel number 	else		MAP_KHZ_TO_CHANNEL_ID( (freq->m /100) , chan); // Setting by frequency - search the table , like 2.412G, 2.422G, 	pAdapter->PortCfg.Channel = chan;	DBGPRINT(RT_DEBUG_TRACE, "==>rt_ioctl_siwfreq::SIOCSIWFREQ[cmd=0x%x] (Channel=%d)\n", SIOCSIWFREQ, pAdapter->PortCfg.Channel);	return 0;}int rt_ioctl_giwfreq(struct net_device *dev,		   struct iw_request_info *info,		   struct iw_freq *freq, char *extra){	PRTMP_ADAPTER pAdapter = (PRTMP_ADAPTER) dev->priv;	ULONG	m;	UCHAR	channel;    if (pAdapter->RTUSBCmdThr_pid < 0)        return -ENETDOWN;		channel = pAdapter->PortCfg.Channel;	DBGPRINT(RT_DEBUG_TRACE,"==>rt_ioctl_giwfreq  %d\n",pAdapter->PortCfg.Channel);		MAP_CHANNEL_ID_TO_KHZ(pAdapter->PortCfg.Channel, m);	freq->m = m * 100;	freq->e = 1;	return 0;}// Set wireless operation mode(Infra or AdHoc).int rt_ioctl_siwmode(struct net_device *dev,		   struct iw_request_info *info,		   __u32 *mode, char *extra){	PRTMP_ADAPTER pAdapter = (PRTMP_ADAPTER) dev->priv;    //check if the interface is down	if ((dev->flags & IFF_UP) == 0)		 return -ENETDOWN;    if (pAdapter->RTUSBCmdThr_pid < 0)        return -ENETDOWN;	// 0 = infra/BSS (associate with an AP), 1 = adhoc/IBSS	switch (*mode)	{		case IW_MODE_ADHOC:			if (pAdapter->PortCfg.BssType != BSS_ADHOC)			{					// 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_ADHOC;			DBGPRINT(RT_DEBUG_TRACE, "===>rt_ioctl_siwmode::SIOCSIWMODE (AD-HOC)\n");			break;		case IW_MODE_INFRA:			if (pAdapter->PortCfg.BssType != BSS_INFRA)			{				// Config has changed				if (ADHOC_ON(pAdapter)) 						  					RTUSBEnqueueInternalCmd(pAdapter, RT_OID_LINK_DOWN);			}			pAdapter->PortCfg.BssType = BSS_INFRA;			DBGPRINT(RT_DEBUG_TRACE, "===>rt_ioctl_siwmode::SIOCSIWMODE (INFRA)\n");			break;		default:			DBGPRINT(RT_DEBUG_TRACE, "===>rt_ioctl_siwmode::SIOCSIWMODE (unknown)\n");			return -EINVAL;	}		// Reset Ralink supplicant to not use, it will be set to start when UI set PMK key	pAdapter->PortCfg.WpaState = SS_NOTUSE;	return 0;}// Get wireless operation modeint rt_ioctl_giwmode(struct net_device *dev,		   struct iw_request_info *info,		   __u32 *mode, char *extra){	PRTMP_ADAPTER pAdapter = (PRTMP_ADAPTER) dev->priv;    if (pAdapter->RTUSBCmdThr_pid < 0)        return -ENETDOWN;        	if (ADHOC_ON(pAdapter))		*mode = IW_MODE_ADHOC;	else if (INFRA_ON(pAdapter))		*mode = IW_MODE_INFRA;	else		*mode = IW_MODE_AUTO;	DBGPRINT(RT_DEBUG_TRACE,"==>rt_ioctl_giwmode\n");			return 0;}int rt_ioctl_siwsens(struct net_device *dev,		   struct iw_request_info *info,		   char *name, char *extra){    PRTMP_ADAPTER pAdapter = (PRTMP_ADAPTER) dev->priv;    //check if the interface is down	if ((dev->flags & IFF_UP) == 0)		 return -ENETDOWN;    if (pAdapter->RTUSBCmdThr_pid < 0)        return -ENETDOWN;	return 0;}int rt_ioctl_giwsens(struct net_device *dev,		   struct iw_request_info *info,		   char *name, char *extra){    PRTMP_ADAPTER pAdapter = (PRTMP_ADAPTER) dev->priv;    if (pAdapter->RTUSBCmdThr_pid < 0)        return -ENETDOWN;        	return 0;}int rt_ioctl_giwrange(struct net_device *dev,		   struct iw_request_info *info,		   struct iw_point *data, char *extra){	PRTMP_ADAPTER pAdapter = (PRTMP_ADAPTER) dev->priv;	struct iw_range *range = (struct iw_range *) extra;	u16 val;	int i;    if (pAdapter->RTUSBCmdThr_pid < 0)        return -ENETDOWN;	DBGPRINT(RT_DEBUG_TRACE,"===>rt_ioctl_giwrange\n");	data->length = sizeof(struct iw_range);	memset(range, 0, sizeof(struct iw_range));	/* Informative stuff, estimated maximum TCP throughput values (bps) */	//range->throughput = ;	/* NWID (or domain id) */	//range->min_nwid = ; // Minimal NWID we are able to set	//range->max_nwid = ; // Maximal NWID we are able to set		/* Old Frequency (backward compat - moved lower ) */	//range->old_num_channels = ;	//range->old_num_frequency = ;#if WIRELESS_EXT > 17	/* Wireless event capability bitmasks */	range->event_capa[0] = (IW_EVENT_CAPA_K_0 |							IW_EVENT_CAPA_MASK(SIOCGIWAP) | 							IW_EVENT_CAPA_MASK(SIOCGIWSCAN));	range->event_capa[1] = IW_EVENT_CAPA_K_1;#endif	/* signal level threshold range */	range->sensitivity = 3;	/* Quality of link & SNR stuff, Quality range (link, level, noise) */	range->max_qual.qual = 100;	// link quality (%retries, SNR, %missed beacons or better...)								// what is correct max? This was not documented exactly. 								// At least 69 has been observed.	range->max_qual.level = 0;	// signal level (dBm)	range->max_qual.noise = 0;	// noise level (dBm)	//range->max_qual.updated = ; // Flags to know if updated		range->avg_qual.qual = 20;	// What would be suitable values for "average/typical" qual? 	range->avg_qual.level = -60;	range->avg_qual.noise = -95;	//range->avg_qual.updated = ;		/* Rates */	if (INFRA_ON(pAdapter)||ADHOC_ON(pAdapter))	{		UCHAR allRateLen, SupRateLen;		SupRateLen = pAdapter->ActiveCfg.SupRateLen;		allRateLen = SupRateLen + pAdapter->ActiveCfg.ExtRateLen;				range->num_bitrates = (allRateLen > IW_MAX_BITRATES ? IW_MAX_BITRATES :  allRateLen);	// Number of entries in the list		for (i = 0; i < range->num_bitrates; i++)		{			if (i < SupRateLen)	        	range->bitrate[i] = (pAdapter->ActiveCfg.SupRate[i] & 0x7F) * 500000; // in bps        	else 				range->bitrate[i] = (pAdapter->ActiveCfg.ExtRate[i-SupRateLen] & 0x7F) * 500000; // in bps		}	} 	else 	{		// If the link is not up, the pAdapter->PortCfg.SupRate will be filled after set PhyMode.		// But we have no idea if the PhyMode didn't set when handle this ioctl. So, ignore this fields.	}		/* RTS threshold */	range->min_rts = 0; // Minimal RTS threshold 	range->max_rts = 2347; // Maximal RTS threshold		/* Frag threshold */	range->min_frag = 256;	// Minimal frag threshold	range->max_frag = 2346; // Maximal frag threshold	/* Power Management duration & timeout */	if (INFRA_ON(pAdapter)||ADHOC_ON(pAdapter))	{		range->min_pmp = 1 * 1024; // Minimal PM period		range->max_pmp = 65535 * 1024; // Maximal PM period		range->min_pmt = 1 * 1024; // Minimal PM timeout		range->max_pmt = 1000 * 1024; // Maximal PM timeout		range->pmp_flags = IW_POWER_PERIOD; // How to decode max/min PM period		range->pmt_flags = IW_POWER_TIMEOUT; // How to decode max/min PM timeout		range->pm_capa = IW_POWER_PERIOD | IW_POWER_TIMEOUT |						IW_POWER_UNICAST_R | IW_POWER_ALL_R; // What PM options are supported	}	/* Encoder stuff */	range->max_encoding_tokens = NR_WEP_KEYS; // Max number of tokens	range->num_encoding_sizes = 2; // Number of entry in the list	range->encoding_size[0] = 5; // size of token 0.	range->encoding_size[1] = 13; // size of token 1.	//range->encoding_login_index = ; // For drivers that need a "login/passwd" form	/* Transmit power */	range->txpower_capa = IW_TXPOW_DBM; // What options are supported	//range->num_txpower = ; // Number of entries in the list	//range->txpower[IW_MAX_TXPOWER] = ; // list, in bps	/* Wireless Extension version info */

⌨️ 快捷键说明

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