diff options
Diffstat (limited to 'net/wireless/wext-compat.c')
| -rw-r--r-- | net/wireless/wext-compat.c | 285 | 
1 files changed, 139 insertions, 146 deletions
diff --git a/net/wireless/wext-compat.c b/net/wireless/wext-compat.c index 12222ee6ebf..11120bb1416 100644 --- a/net/wireless/wext-compat.c +++ b/net/wireless/wext-compat.c @@ -8,6 +8,7 @@   * Copyright 2008-2009	Johannes Berg <johannes@sipsolutions.net>   */ +#include <linux/export.h>  #include <linux/wireless.h>  #include <linux/nl80211.h>  #include <linux/if_arp.h> @@ -15,8 +16,10 @@  #include <linux/slab.h>  #include <net/iw_handler.h>  #include <net/cfg80211.h> +#include <net/cfg80211-wext.h>  #include "wext-compat.h"  #include "core.h" +#include "rdev-ops.h"  int cfg80211_wext_giwname(struct net_device *dev,  			  struct iw_request_info *info, @@ -69,9 +72,8 @@ int cfg80211_wext_siwmode(struct net_device *dev, struct iw_request_info *info,  	struct cfg80211_registered_device *rdev;  	struct vif_params vifparams;  	enum nl80211_iftype type; -	int ret; -	rdev = wiphy_to_dev(wdev->wiphy); +	rdev = wiphy_to_rdev(wdev->wiphy);  	switch (*mode) {  	case IW_MODE_INFRA: @@ -95,11 +97,7 @@ int cfg80211_wext_siwmode(struct net_device *dev, struct iw_request_info *info,  	memset(&vifparams, 0, sizeof(vifparams)); -	cfg80211_lock_rdev(rdev); -	ret = cfg80211_change_iface(rdev, dev, type, NULL, &vifparams); -	cfg80211_unlock_rdev(rdev); - -	return ret; +	return cfg80211_change_iface(rdev, dev, type, NULL, &vifparams);  }  EXPORT_SYMBOL_GPL(cfg80211_wext_siwmode); @@ -173,7 +171,7 @@ int cfg80211_wext_giwrange(struct net_device *dev,  	case CFG80211_SIGNAL_TYPE_NONE:  		break;  	case CFG80211_SIGNAL_TYPE_MBM: -		range->max_qual.level = -110; +		range->max_qual.level = (u8)-110;  		range->max_qual.qual = 70;  		range->avg_qual.qual = 35;  		range->max_qual.updated |= IW_QUAL_DBM; @@ -255,21 +253,24 @@ EXPORT_SYMBOL_GPL(cfg80211_wext_giwrange);  /**   * cfg80211_wext_freq - get wext frequency for non-"auto" - * @wiphy: the wiphy + * @dev: the net device   * @freq: the wext freq encoding   *   * Returns a frequency, or a negative error code, or 0 for auto.   */ -int cfg80211_wext_freq(struct wiphy *wiphy, struct iw_freq *freq) +int cfg80211_wext_freq(struct iw_freq *freq)  {  	/*  	 * Parse frequency - return 0 for auto and  	 * -EINVAL for impossible things.  	 */  	if (freq->e == 0) { +		enum ieee80211_band band = IEEE80211_BAND_2GHZ;  		if (freq->m < 0)  			return 0; -		return ieee80211_channel_to_frequency(freq->m); +		if (freq->m > 14) +			band = IEEE80211_BAND_5GHZ; +		return ieee80211_channel_to_frequency(freq->m, band);  	} else {  		int i, div = 1000000;  		for (i = 0; i < freq->e; i++) @@ -285,7 +286,7 @@ int cfg80211_wext_siwrts(struct net_device *dev,  			 struct iw_param *rts, char *extra)  {  	struct wireless_dev *wdev = dev->ieee80211_ptr; -	struct cfg80211_registered_device *rdev = wiphy_to_dev(wdev->wiphy); +	struct cfg80211_registered_device *rdev = wiphy_to_rdev(wdev->wiphy);  	u32 orts = wdev->wiphy->rts_threshold;  	int err; @@ -296,8 +297,7 @@ int cfg80211_wext_siwrts(struct net_device *dev,  	else  		wdev->wiphy->rts_threshold = rts->value; -	err = rdev->ops->set_wiphy_params(wdev->wiphy, -					  WIPHY_PARAM_RTS_THRESHOLD); +	err = rdev_set_wiphy_params(rdev, WIPHY_PARAM_RTS_THRESHOLD);  	if (err)  		wdev->wiphy->rts_threshold = orts; @@ -324,7 +324,7 @@ int cfg80211_wext_siwfrag(struct net_device *dev,  			  struct iw_param *frag, char *extra)  {  	struct wireless_dev *wdev = dev->ieee80211_ptr; -	struct cfg80211_registered_device *rdev = wiphy_to_dev(wdev->wiphy); +	struct cfg80211_registered_device *rdev = wiphy_to_rdev(wdev->wiphy);  	u32 ofrag = wdev->wiphy->frag_threshold;  	int err; @@ -337,8 +337,7 @@ int cfg80211_wext_siwfrag(struct net_device *dev,  		wdev->wiphy->frag_threshold = frag->value & ~0x1;  	} -	err = rdev->ops->set_wiphy_params(wdev->wiphy, -					  WIPHY_PARAM_FRAG_THRESHOLD); +	err = rdev_set_wiphy_params(rdev, WIPHY_PARAM_FRAG_THRESHOLD);  	if (err)  		wdev->wiphy->frag_threshold = ofrag; @@ -360,18 +359,18 @@ int cfg80211_wext_giwfrag(struct net_device *dev,  }  EXPORT_SYMBOL_GPL(cfg80211_wext_giwfrag); -int cfg80211_wext_siwretry(struct net_device *dev, -			   struct iw_request_info *info, -			   struct iw_param *retry, char *extra) +static int cfg80211_wext_siwretry(struct net_device *dev, +				  struct iw_request_info *info, +				  struct iw_param *retry, char *extra)  {  	struct wireless_dev *wdev = dev->ieee80211_ptr; -	struct cfg80211_registered_device *rdev = wiphy_to_dev(wdev->wiphy); +	struct cfg80211_registered_device *rdev = wiphy_to_rdev(wdev->wiphy);  	u32 changed = 0;  	u8 olong = wdev->wiphy->retry_long;  	u8 oshort = wdev->wiphy->retry_short;  	int err; -	if (retry->disabled || +	if (retry->disabled || retry->value < 1 || retry->value > 255 ||  	    (retry->flags & IW_RETRY_TYPE) != IW_RETRY_LIMIT)  		return -EINVAL; @@ -391,7 +390,7 @@ int cfg80211_wext_siwretry(struct net_device *dev,  	if (!changed)  		return 0; -	err = rdev->ops->set_wiphy_params(wdev->wiphy, changed); +	err = rdev_set_wiphy_params(rdev, changed);  	if (err) {  		wdev->wiphy->retry_short = oshort;  		wdev->wiphy->retry_long = olong; @@ -399,7 +398,6 @@ int cfg80211_wext_siwretry(struct net_device *dev,  	return err;  } -EXPORT_SYMBOL_GPL(cfg80211_wext_siwretry);  int cfg80211_wext_giwretry(struct net_device *dev,  			   struct iw_request_info *info, @@ -414,9 +412,9 @@ int cfg80211_wext_giwretry(struct net_device *dev,  		 * First return short value, iwconfig will ask long value  		 * later if needed  		 */ -		retry->flags |= IW_RETRY_LIMIT; +		retry->flags |= IW_RETRY_LIMIT | IW_RETRY_SHORT;  		retry->value = wdev->wiphy->retry_short; -		if (wdev->wiphy->retry_long != wdev->wiphy->retry_short) +		if (wdev->wiphy->retry_long == wdev->wiphy->retry_short)  			retry->flags |= IW_RETRY_LONG;  		return 0; @@ -486,8 +484,8 @@ static int __cfg80211_set_encryption(struct cfg80211_registered_device *rdev,  			    !(rdev->wiphy.flags & WIPHY_FLAG_IBSS_RSN))  				err = -ENOENT;  			else -				err = rdev->ops->del_key(&rdev->wiphy, dev, idx, -							 pairwise, addr); +				err = rdev_del_key(rdev, dev, idx, pairwise, +						   addr);  		}  		wdev->wext.connect.privacy = false;  		/* @@ -521,8 +519,7 @@ static int __cfg80211_set_encryption(struct cfg80211_registered_device *rdev,  	err = 0;  	if (wdev->current_bss) -		err = rdev->ops->add_key(&rdev->wiphy, dev, idx, -					 pairwise, addr, params); +		err = rdev_add_key(rdev, dev, idx, pairwise, addr, params);  	if (err)  		return err; @@ -548,8 +545,7 @@ static int __cfg80211_set_encryption(struct cfg80211_registered_device *rdev,  				__cfg80211_leave_ibss(rdev, wdev->netdev, true);  				rejoin = true;  			} -			err = rdev->ops->set_default_key(&rdev->wiphy, -							 dev, idx); +			err = rdev_set_default_key(rdev, dev, idx, true, true);  		}  		if (!err) {  			wdev->wext.default_key = idx; @@ -562,8 +558,7 @@ static int __cfg80211_set_encryption(struct cfg80211_registered_device *rdev,  	if (params->cipher == WLAN_CIPHER_SUITE_AES_CMAC &&  	    (tx_key || (!addr && wdev->wext.default_mgmt_key == -1))) {  		if (wdev->current_bss) -			err = rdev->ops->set_default_mgmt_key(&rdev->wiphy, -							      dev, idx); +			err = rdev_set_default_mgmt_key(rdev, dev, idx);  		if (!err)  			wdev->wext.default_mgmt_key = idx;  		return err; @@ -579,23 +574,20 @@ static int cfg80211_set_encryption(struct cfg80211_registered_device *rdev,  {  	int err; -	/* devlist mutex needed for possible IBSS re-join */ -	mutex_lock(&rdev->devlist_mtx);  	wdev_lock(dev->ieee80211_ptr);  	err = __cfg80211_set_encryption(rdev, dev, pairwise, addr,  					remove, tx_key, idx, params);  	wdev_unlock(dev->ieee80211_ptr); -	mutex_unlock(&rdev->devlist_mtx);  	return err;  } -int cfg80211_wext_siwencode(struct net_device *dev, -			    struct iw_request_info *info, -			    struct iw_point *erq, char *keybuf) +static int cfg80211_wext_siwencode(struct net_device *dev, +				   struct iw_request_info *info, +				   struct iw_point *erq, char *keybuf)  {  	struct wireless_dev *wdev = dev->ieee80211_ptr; -	struct cfg80211_registered_device *rdev = wiphy_to_dev(wdev->wiphy); +	struct cfg80211_registered_device *rdev = wiphy_to_rdev(wdev->wiphy);  	int idx, err;  	bool remove = false;  	struct key_params params; @@ -627,8 +619,8 @@ int cfg80211_wext_siwencode(struct net_device *dev,  		err = 0;  		wdev_lock(wdev);  		if (wdev->current_bss) -			err = rdev->ops->set_default_key(&rdev->wiphy, -							 dev, idx); +			err = rdev_set_default_key(rdev, dev, idx, true, +						   true);  		if (!err)  			wdev->wext.default_key = idx;  		wdev_unlock(wdev); @@ -649,14 +641,13 @@ int cfg80211_wext_siwencode(struct net_device *dev,  				       wdev->wext.default_key == -1,  				       idx, ¶ms);  } -EXPORT_SYMBOL_GPL(cfg80211_wext_siwencode); -int cfg80211_wext_siwencodeext(struct net_device *dev, -			       struct iw_request_info *info, -			       struct iw_point *erq, char *extra) +static int cfg80211_wext_siwencodeext(struct net_device *dev, +				      struct iw_request_info *info, +				      struct iw_point *erq, char *extra)  {  	struct wireless_dev *wdev = dev->ieee80211_ptr; -	struct cfg80211_registered_device *rdev = wiphy_to_dev(wdev->wiphy); +	struct cfg80211_registered_device *rdev = wiphy_to_rdev(wdev->wiphy);  	struct iw_encode_ext *ext = (struct iw_encode_ext *) extra;  	const u8 *addr;  	int idx; @@ -741,11 +732,10 @@ int cfg80211_wext_siwencodeext(struct net_device *dev,  			ext->ext_flags & IW_ENCODE_EXT_SET_TX_KEY,  			idx, ¶ms);  } -EXPORT_SYMBOL_GPL(cfg80211_wext_siwencodeext); -int cfg80211_wext_giwencode(struct net_device *dev, -			    struct iw_request_info *info, -			    struct iw_point *erq, char *keybuf) +static int cfg80211_wext_giwencode(struct net_device *dev, +				   struct iw_request_info *info, +				   struct iw_point *erq, char *keybuf)  {  	struct wireless_dev *wdev = dev->ieee80211_ptr;  	int idx; @@ -779,15 +769,17 @@ int cfg80211_wext_giwencode(struct net_device *dev,  	return 0;  } -EXPORT_SYMBOL_GPL(cfg80211_wext_giwencode); -int cfg80211_wext_siwfreq(struct net_device *dev, -			  struct iw_request_info *info, -			  struct iw_freq *wextfreq, char *extra) +static int cfg80211_wext_siwfreq(struct net_device *dev, +				 struct iw_request_info *info, +				 struct iw_freq *wextfreq, char *extra)  {  	struct wireless_dev *wdev = dev->ieee80211_ptr; -	struct cfg80211_registered_device *rdev = wiphy_to_dev(wdev->wiphy); -	int freq, err; +	struct cfg80211_registered_device *rdev = wiphy_to_rdev(wdev->wiphy); +	struct cfg80211_chan_def chandef = { +		.width = NL80211_CHAN_WIDTH_20_NOHT, +	}; +	int freq;  	switch (wdev->iftype) {  	case NL80211_IFTYPE_STATION: @@ -795,52 +787,67 @@ int cfg80211_wext_siwfreq(struct net_device *dev,  	case NL80211_IFTYPE_ADHOC:  		return cfg80211_ibss_wext_siwfreq(dev, info, wextfreq, extra);  	case NL80211_IFTYPE_MONITOR: -	case NL80211_IFTYPE_WDS: +		freq = cfg80211_wext_freq(wextfreq); +		if (freq < 0) +			return freq; +		if (freq == 0) +			return -EINVAL; +		chandef.center_freq1 = freq; +		chandef.chan = ieee80211_get_channel(&rdev->wiphy, freq); +		if (!chandef.chan) +			return -EINVAL; +		return cfg80211_set_monitor_channel(rdev, &chandef);  	case NL80211_IFTYPE_MESH_POINT: -		freq = cfg80211_wext_freq(wdev->wiphy, wextfreq); +		freq = cfg80211_wext_freq(wextfreq);  		if (freq < 0)  			return freq;  		if (freq == 0)  			return -EINVAL; -		wdev_lock(wdev); -		mutex_lock(&rdev->devlist_mtx); -		err = cfg80211_set_freq(rdev, wdev, freq, NL80211_CHAN_NO_HT); -		mutex_unlock(&rdev->devlist_mtx); -		wdev_unlock(wdev); -		return err; +		chandef.center_freq1 = freq; +		chandef.chan = ieee80211_get_channel(&rdev->wiphy, freq); +		if (!chandef.chan) +			return -EINVAL; +		return cfg80211_set_mesh_channel(rdev, wdev, &chandef);  	default:  		return -EOPNOTSUPP;  	}  } -EXPORT_SYMBOL_GPL(cfg80211_wext_siwfreq); -int cfg80211_wext_giwfreq(struct net_device *dev, -			  struct iw_request_info *info, -			  struct iw_freq *freq, char *extra) +static int cfg80211_wext_giwfreq(struct net_device *dev, +				 struct iw_request_info *info, +				 struct iw_freq *freq, char *extra)  {  	struct wireless_dev *wdev = dev->ieee80211_ptr; +	struct cfg80211_registered_device *rdev = wiphy_to_rdev(wdev->wiphy); +	struct cfg80211_chan_def chandef; +	int ret;  	switch (wdev->iftype) {  	case NL80211_IFTYPE_STATION:  		return cfg80211_mgd_wext_giwfreq(dev, info, freq, extra);  	case NL80211_IFTYPE_ADHOC:  		return cfg80211_ibss_wext_giwfreq(dev, info, freq, extra); -	default: -		if (!wdev->channel) +	case NL80211_IFTYPE_MONITOR: +		if (!rdev->ops->get_channel)  			return -EINVAL; -		freq->m = wdev->channel->center_freq; + +		ret = rdev_get_channel(rdev, wdev, &chandef); +		if (ret) +			return ret; +		freq->m = chandef.chan->center_freq;  		freq->e = 6;  		return 0; +	default: +		return -EINVAL;  	}  } -EXPORT_SYMBOL_GPL(cfg80211_wext_giwfreq); -int cfg80211_wext_siwtxpower(struct net_device *dev, -			     struct iw_request_info *info, -			     union iwreq_data *data, char *extra) +static int cfg80211_wext_siwtxpower(struct net_device *dev, +				    struct iw_request_info *info, +				    union iwreq_data *data, char *extra)  {  	struct wireless_dev *wdev = dev->ieee80211_ptr; -	struct cfg80211_registered_device *rdev = wiphy_to_dev(wdev->wiphy); +	struct cfg80211_registered_device *rdev = wiphy_to_rdev(wdev->wiphy);  	enum nl80211_tx_power_setting type;  	int dbm = 0; @@ -884,16 +891,15 @@ int cfg80211_wext_siwtxpower(struct net_device *dev,  		return 0;  	} -	return rdev->ops->set_tx_power(wdev->wiphy, type, DBM_TO_MBM(dbm)); +	return rdev_set_tx_power(rdev, wdev, type, DBM_TO_MBM(dbm));  } -EXPORT_SYMBOL_GPL(cfg80211_wext_siwtxpower); -int cfg80211_wext_giwtxpower(struct net_device *dev, -			     struct iw_request_info *info, -			     union iwreq_data *data, char *extra) +static int cfg80211_wext_giwtxpower(struct net_device *dev, +				    struct iw_request_info *info, +				    union iwreq_data *data, char *extra)  {  	struct wireless_dev *wdev = dev->ieee80211_ptr; -	struct cfg80211_registered_device *rdev = wiphy_to_dev(wdev->wiphy); +	struct cfg80211_registered_device *rdev = wiphy_to_rdev(wdev->wiphy);  	int err, val;  	if ((data->txpower.flags & IW_TXPOW_TYPE) != IW_TXPOW_DBM) @@ -904,7 +910,7 @@ int cfg80211_wext_giwtxpower(struct net_device *dev,  	if (!rdev->ops->get_tx_power)  		return -EOPNOTSUPP; -	err = rdev->ops->get_tx_power(wdev->wiphy, &val); +	err = rdev_get_tx_power(rdev, wdev, &val);  	if (err)  		return err; @@ -916,7 +922,6 @@ int cfg80211_wext_giwtxpower(struct net_device *dev,  	return 0;  } -EXPORT_SYMBOL_GPL(cfg80211_wext_giwtxpower);  static int cfg80211_set_auth_alg(struct wireless_dev *wdev,  				 s32 auth_alg) @@ -1067,9 +1072,9 @@ static int cfg80211_set_key_mgt(struct wireless_dev *wdev, u32 key_mgt)  	return 0;  } -int cfg80211_wext_siwauth(struct net_device *dev, -			  struct iw_request_info *info, -			  struct iw_param *data, char *extra) +static int cfg80211_wext_siwauth(struct net_device *dev, +				 struct iw_request_info *info, +				 struct iw_param *data, char *extra)  {  	struct wireless_dev *wdev = dev->ieee80211_ptr; @@ -1099,24 +1104,22 @@ int cfg80211_wext_siwauth(struct net_device *dev,  		return -EOPNOTSUPP;  	}  } -EXPORT_SYMBOL_GPL(cfg80211_wext_siwauth); -int cfg80211_wext_giwauth(struct net_device *dev, -			  struct iw_request_info *info, -			  struct iw_param *data, char *extra) +static int cfg80211_wext_giwauth(struct net_device *dev, +				 struct iw_request_info *info, +				 struct iw_param *data, char *extra)  {  	/* XXX: what do we need? */  	return -EOPNOTSUPP;  } -EXPORT_SYMBOL_GPL(cfg80211_wext_giwauth); -int cfg80211_wext_siwpower(struct net_device *dev, -			   struct iw_request_info *info, -			   struct iw_param *wrq, char *extra) +static int cfg80211_wext_siwpower(struct net_device *dev, +				  struct iw_request_info *info, +				  struct iw_param *wrq, char *extra)  {  	struct wireless_dev *wdev = dev->ieee80211_ptr; -	struct cfg80211_registered_device *rdev = wiphy_to_dev(wdev->wiphy); +	struct cfg80211_registered_device *rdev = wiphy_to_rdev(wdev->wiphy);  	bool ps = wdev->ps;  	int timeout = wdev->ps_timeout;  	int err; @@ -1147,7 +1150,7 @@ int cfg80211_wext_siwpower(struct net_device *dev,  			timeout = wrq->value / 1000;  	} -	err = rdev->ops->set_power_mgmt(wdev->wiphy, dev, ps, timeout); +	err = rdev_set_power_mgmt(rdev, dev, ps, timeout);  	if (err)  		return err; @@ -1157,11 +1160,10 @@ int cfg80211_wext_siwpower(struct net_device *dev,  	return 0;  } -EXPORT_SYMBOL_GPL(cfg80211_wext_siwpower); -int cfg80211_wext_giwpower(struct net_device *dev, -			   struct iw_request_info *info, -			   struct iw_param *wrq, char *extra) +static int cfg80211_wext_giwpower(struct net_device *dev, +				  struct iw_request_info *info, +				  struct iw_param *wrq, char *extra)  {  	struct wireless_dev *wdev = dev->ieee80211_ptr; @@ -1169,14 +1171,13 @@ int cfg80211_wext_giwpower(struct net_device *dev,  	return 0;  } -EXPORT_SYMBOL_GPL(cfg80211_wext_giwpower);  static int cfg80211_wds_wext_siwap(struct net_device *dev,  				   struct iw_request_info *info,  				   struct sockaddr *addr, char *extra)  {  	struct wireless_dev *wdev = dev->ieee80211_ptr; -	struct cfg80211_registered_device *rdev = wiphy_to_dev(wdev->wiphy); +	struct cfg80211_registered_device *rdev = wiphy_to_rdev(wdev->wiphy);  	int err;  	if (WARN_ON(wdev->iftype != NL80211_IFTYPE_WDS)) @@ -1191,7 +1192,7 @@ static int cfg80211_wds_wext_siwap(struct net_device *dev,  	if (!rdev->ops->set_wds_peer)  		return -EOPNOTSUPP; -	err = rdev->ops->set_wds_peer(wdev->wiphy, dev, (u8 *) &addr->sa_data); +	err = rdev_set_wds_peer(rdev, dev, (u8 *)&addr->sa_data);  	if (err)  		return err; @@ -1215,12 +1216,12 @@ static int cfg80211_wds_wext_giwap(struct net_device *dev,  	return 0;  } -int cfg80211_wext_siwrate(struct net_device *dev, -			  struct iw_request_info *info, -			  struct iw_param *rate, char *extra) +static int cfg80211_wext_siwrate(struct net_device *dev, +				 struct iw_request_info *info, +				 struct iw_param *rate, char *extra)  {  	struct wireless_dev *wdev = dev->ieee80211_ptr; -	struct cfg80211_registered_device *rdev = wiphy_to_dev(wdev->wiphy); +	struct cfg80211_registered_device *rdev = wiphy_to_rdev(wdev->wiphy);  	struct cfg80211_bitrate_mask mask;  	u32 fixed, maxrate;  	struct ieee80211_supported_band *sband; @@ -1263,16 +1264,15 @@ int cfg80211_wext_siwrate(struct net_device *dev,  	if (!match)  		return -EINVAL; -	return rdev->ops->set_bitrate_mask(wdev->wiphy, dev, NULL, &mask); +	return rdev_set_bitrate_mask(rdev, dev, NULL, &mask);  } -EXPORT_SYMBOL_GPL(cfg80211_wext_siwrate); -int cfg80211_wext_giwrate(struct net_device *dev, -			  struct iw_request_info *info, -			  struct iw_param *rate, char *extra) +static int cfg80211_wext_giwrate(struct net_device *dev, +				 struct iw_request_info *info, +				 struct iw_param *rate, char *extra)  {  	struct wireless_dev *wdev = dev->ieee80211_ptr; -	struct cfg80211_registered_device *rdev = wiphy_to_dev(wdev->wiphy); +	struct cfg80211_registered_device *rdev = wiphy_to_rdev(wdev->wiphy);  	/* we are under RTNL - globally locked - so can use a static struct */  	static struct station_info sinfo;  	u8 addr[ETH_ALEN]; @@ -1294,7 +1294,7 @@ int cfg80211_wext_giwrate(struct net_device *dev,  	if (err)  		return err; -	err = rdev->ops->get_station(&rdev->wiphy, dev, addr, &sinfo); +	err = rdev_get_station(rdev, dev, addr, &sinfo);  	if (err)  		return err; @@ -1305,13 +1305,12 @@ int cfg80211_wext_giwrate(struct net_device *dev,  	return 0;  } -EXPORT_SYMBOL_GPL(cfg80211_wext_giwrate);  /* Get wireless statistics.  Called by /proc/net/wireless and by SIOCGIWSTATS */ -struct iw_statistics *cfg80211_wireless_stats(struct net_device *dev) +static struct iw_statistics *cfg80211_wireless_stats(struct net_device *dev)  {  	struct wireless_dev *wdev = dev->ieee80211_ptr; -	struct cfg80211_registered_device *rdev = wiphy_to_dev(wdev->wiphy); +	struct cfg80211_registered_device *rdev = wiphy_to_rdev(wdev->wiphy);  	/* we are under RTNL - globally locked - so can use static structs */  	static struct iw_statistics wstats;  	static struct station_info sinfo; @@ -1332,7 +1331,7 @@ struct iw_statistics *cfg80211_wireless_stats(struct net_device *dev)  	memcpy(bssid, wdev->current_bss->pub.bssid, ETH_ALEN);  	wdev_unlock(wdev); -	if (rdev->ops->get_station(&rdev->wiphy, dev, bssid, &sinfo)) +	if (rdev_get_station(rdev, dev, bssid, &sinfo))  		return NULL;  	memset(&wstats, 0, sizeof(wstats)); @@ -1373,11 +1372,10 @@ struct iw_statistics *cfg80211_wireless_stats(struct net_device *dev)  	return &wstats;  } -EXPORT_SYMBOL_GPL(cfg80211_wireless_stats); -int cfg80211_wext_siwap(struct net_device *dev, -			struct iw_request_info *info, -			struct sockaddr *ap_addr, char *extra) +static int cfg80211_wext_siwap(struct net_device *dev, +			       struct iw_request_info *info, +			       struct sockaddr *ap_addr, char *extra)  {  	struct wireless_dev *wdev = dev->ieee80211_ptr; @@ -1392,11 +1390,10 @@ int cfg80211_wext_siwap(struct net_device *dev,  		return -EOPNOTSUPP;  	}  } -EXPORT_SYMBOL_GPL(cfg80211_wext_siwap); -int cfg80211_wext_giwap(struct net_device *dev, -			struct iw_request_info *info, -			struct sockaddr *ap_addr, char *extra) +static int cfg80211_wext_giwap(struct net_device *dev, +			       struct iw_request_info *info, +			       struct sockaddr *ap_addr, char *extra)  {  	struct wireless_dev *wdev = dev->ieee80211_ptr; @@ -1411,11 +1408,10 @@ int cfg80211_wext_giwap(struct net_device *dev,  		return -EOPNOTSUPP;  	}  } -EXPORT_SYMBOL_GPL(cfg80211_wext_giwap); -int cfg80211_wext_siwessid(struct net_device *dev, -			   struct iw_request_info *info, -			   struct iw_point *data, char *ssid) +static int cfg80211_wext_siwessid(struct net_device *dev, +				  struct iw_request_info *info, +				  struct iw_point *data, char *ssid)  {  	struct wireless_dev *wdev = dev->ieee80211_ptr; @@ -1428,11 +1424,10 @@ int cfg80211_wext_siwessid(struct net_device *dev,  		return -EOPNOTSUPP;  	}  } -EXPORT_SYMBOL_GPL(cfg80211_wext_siwessid); -int cfg80211_wext_giwessid(struct net_device *dev, -			   struct iw_request_info *info, -			   struct iw_point *data, char *ssid) +static int cfg80211_wext_giwessid(struct net_device *dev, +				  struct iw_request_info *info, +				  struct iw_point *data, char *ssid)  {  	struct wireless_dev *wdev = dev->ieee80211_ptr; @@ -1448,14 +1443,13 @@ int cfg80211_wext_giwessid(struct net_device *dev,  		return -EOPNOTSUPP;  	}  } -EXPORT_SYMBOL_GPL(cfg80211_wext_giwessid); -int cfg80211_wext_siwpmksa(struct net_device *dev, -			   struct iw_request_info *info, -			   struct iw_point *data, char *extra) +static int cfg80211_wext_siwpmksa(struct net_device *dev, +				  struct iw_request_info *info, +				  struct iw_point *data, char *extra)  {  	struct wireless_dev *wdev = dev->ieee80211_ptr; -	struct cfg80211_registered_device *rdev = wiphy_to_dev(wdev->wiphy); +	struct cfg80211_registered_device *rdev = wiphy_to_rdev(wdev->wiphy);  	struct cfg80211_pmksa cfg_pmksa;  	struct iw_pmksa *pmksa = (struct iw_pmksa *)extra; @@ -1472,25 +1466,24 @@ int cfg80211_wext_siwpmksa(struct net_device *dev,  		if (!rdev->ops->set_pmksa)  			return -EOPNOTSUPP; -		return rdev->ops->set_pmksa(&rdev->wiphy, dev, &cfg_pmksa); +		return rdev_set_pmksa(rdev, dev, &cfg_pmksa);  	case IW_PMKSA_REMOVE:  		if (!rdev->ops->del_pmksa)  			return -EOPNOTSUPP; -		return rdev->ops->del_pmksa(&rdev->wiphy, dev, &cfg_pmksa); +		return rdev_del_pmksa(rdev, dev, &cfg_pmksa);  	case IW_PMKSA_FLUSH:  		if (!rdev->ops->flush_pmksa)  			return -EOPNOTSUPP; -		return rdev->ops->flush_pmksa(&rdev->wiphy, dev); +		return rdev_flush_pmksa(rdev, dev);  	default:  		return -EOPNOTSUPP;  	}  } -EXPORT_SYMBOL_GPL(cfg80211_wext_siwpmksa);  static const iw_handler cfg80211_handlers[] = {  	[IW_IOCTL_IDX(SIOCGIWNAME)]	= (iw_handler) cfg80211_wext_giwname,  | 
