diff options
Diffstat (limited to 'drivers/net/wireless/orinoco/scan.c')
| -rw-r--r-- | drivers/net/wireless/orinoco/scan.c | 34 | 
1 files changed, 26 insertions, 8 deletions
diff --git a/drivers/net/wireless/orinoco/scan.c b/drivers/net/wireless/orinoco/scan.c index 4300d9db7d8..e175b9b8561 100644 --- a/drivers/net/wireless/orinoco/scan.c +++ b/drivers/net/wireless/orinoco/scan.c @@ -76,6 +76,7 @@ static void orinoco_add_hostscan_result(struct orinoco_private *priv,  {  	struct wiphy *wiphy = priv_to_wiphy(priv);  	struct ieee80211_channel *channel; +	struct cfg80211_bss *cbss;  	u8 *ie;  	u8 ie_buf[46];  	u64 timestamp; @@ -109,16 +110,23 @@ static void orinoco_add_hostscan_result(struct orinoco_private *priv,  		break;  	} -	freq = ieee80211_dsss_chan_to_freq(le16_to_cpu(bss->a.channel)); +	freq = ieee80211_channel_to_frequency( +		le16_to_cpu(bss->a.channel), IEEE80211_BAND_2GHZ);  	channel = ieee80211_get_channel(wiphy, freq); +	if (!channel) { +		printk(KERN_DEBUG "Invalid channel designation %04X(%04X)", +			bss->a.channel, freq); +		return;	/* Then ignore it for now */ +	}  	timestamp = 0;  	capability = le16_to_cpu(bss->a.capabilities);  	beacon_interval = le16_to_cpu(bss->a.beacon_interv);  	signal = SIGNAL_TO_MBM(le16_to_cpu(bss->a.level)); -	cfg80211_inform_bss(wiphy, channel, bss->a.bssid, timestamp, -			    capability, beacon_interval, ie_buf, ie_len, -			    signal, GFP_KERNEL); +	cbss = cfg80211_inform_bss(wiphy, channel, bss->a.bssid, timestamp, +				   capability, beacon_interval, ie_buf, ie_len, +				   signal, GFP_KERNEL); +	cfg80211_put_bss(wiphy, cbss);  }  void orinoco_add_extscan_result(struct orinoco_private *priv, @@ -127,6 +135,7 @@ void orinoco_add_extscan_result(struct orinoco_private *priv,  {  	struct wiphy *wiphy = priv_to_wiphy(priv);  	struct ieee80211_channel *channel; +	struct cfg80211_bss *cbss;  	const u8 *ie;  	u64 timestamp;  	s32 signal; @@ -138,7 +147,7 @@ void orinoco_add_extscan_result(struct orinoco_private *priv,  	ie_len = len - sizeof(*bss);  	ie = cfg80211_find_ie(WLAN_EID_DS_PARAMS, bss->data, ie_len);  	chan = ie ? ie[2] : 0; -	freq = ieee80211_dsss_chan_to_freq(chan); +	freq = ieee80211_channel_to_frequency(chan, IEEE80211_BAND_2GHZ);  	channel = ieee80211_get_channel(wiphy, freq);  	timestamp = le64_to_cpu(bss->timestamp); @@ -147,9 +156,10 @@ void orinoco_add_extscan_result(struct orinoco_private *priv,  	ie = bss->data;  	signal = SIGNAL_TO_MBM(bss->level); -	cfg80211_inform_bss(wiphy, channel, bss->bssid, timestamp, -			    capability, beacon_interval, ie, ie_len, -			    signal, GFP_KERNEL); +	cbss = cfg80211_inform_bss(wiphy, channel, bss->bssid, timestamp, +				   capability, beacon_interval, ie, ie_len, +				   signal, GFP_KERNEL); +	cfg80211_put_bss(wiphy, cbss);  }  void orinoco_add_hostscan_results(struct orinoco_private *priv, @@ -229,3 +239,11 @@ void orinoco_add_hostscan_results(struct orinoco_private *priv,  		priv->scan_request = NULL;  	}  } + +void orinoco_scan_done(struct orinoco_private *priv, bool abort) +{ +	if (priv->scan_request) { +		cfg80211_scan_done(priv->scan_request, abort); +		priv->scan_request = NULL; +	} +}  | 
