Search Linux Wireless

Re: [BUG] iwlwifi need to correct channels info

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



On Fri, Jan 28, 2011 at 07:06:09PM +0100, Johannes Berg wrote:
> On Fri, 2011-01-28 at 16:41 +0100, Stanislaw Gruszka wrote:
> > After commit 59eb21a6504731fc16db4cf9463065dd61093e08
> > "cfg80211: Extend channel to frequency mapping for 802.11j"
> > 5GHz networks are not seen on scan results.
> > 
> > I think above commit is correct, but we have broken channel
> > information on iwlwifi (freq is 0 on 5GHz channels):
> 
> No, the above commit is buggy -- it assumes sband->band is set when it
> isn't. 
But it should be, no? It seems we initialize it nowhere, but it's
used in iwl-*-rs.c

BTW:
Is iwl_eeprom_band_2[] array correct? It have 7, 8, 11, 12 channels entries
on 5GHz.

Can we get rid of /* FIXME: might be removed if scan is OK */ ?

> Does this fix it?

I tested on 3945, it fix freq=0 on messages. But what about something
slightly different? Use ch->band already set in iwl_init_channel_map()
and initialize sband->band.

diff --git a/drivers/net/wireless/iwlwifi/iwl-core.c b/drivers/net/wireless/iwlwifi/iwl-core.c
index 92724cb..1c1da6f 100644
--- a/drivers/net/wireless/iwlwifi/iwl-core.c
+++ b/drivers/net/wireless/iwlwifi/iwl-core.c
@@ -190,6 +190,7 @@ int iwlcore_init_geos(struct iwl_priv *priv)
 
 	/* 5.2GHz channels start after the 2.4GHz channels */
 	sband = &priv->bands[IEEE80211_BAND_5GHZ];
+	sband->band = IEEE80211_BAND_5GHZ;
 	sband->channels = &channels[ARRAY_SIZE(iwl_eeprom_band_1)];
 	/* just OFDM */
 	sband->bitrates = &rates[IWL_FIRST_OFDM_RATE];
@@ -200,6 +201,7 @@ int iwlcore_init_geos(struct iwl_priv *priv)
 					 IEEE80211_BAND_5GHZ);
 
 	sband = &priv->bands[IEEE80211_BAND_2GHZ];
+	sband->band = IEEE80211_BAND_2GHZ;
 	sband->channels = channels;
 	/* OFDM & CCK */
 	sband->bitrates = rates;
@@ -219,16 +221,12 @@ int iwlcore_init_geos(struct iwl_priv *priv)
 		if (!is_channel_valid(ch))
 			continue;
 
-		if (is_channel_a_band(ch))
-			sband =  &priv->bands[IEEE80211_BAND_5GHZ];
-		else
-			sband =  &priv->bands[IEEE80211_BAND_2GHZ];
+		sband =  &priv->bands[ch->band];
 
 		geo_ch = &sband->channels[sband->n_channels++];
 
 		geo_ch->center_freq =
-				ieee80211_channel_to_frequency(ch->channel,
-							       sband->band);
+			ieee80211_channel_to_frequency(ch->channel, ch->band);
 		geo_ch->max_power = ch->max_power_avg;
 		geo_ch->max_antenna_gain = 0xff;
 		geo_ch->hw_value = ch->channel;
--
To unsubscribe from this list: send the line "unsubscribe linux-wireless" in
the body of a message to majordomo@xxxxxxxxxxxxxxx
More majordomo info at  http://vger.kernel.org/majordomo-info.html


[Index of Archives]     [Linux Host AP]     [ATH6KL]     [Linux Bluetooth]     [Linux Netdev]     [Kernel Newbies]     [Linux Kernel]     [IDE]     [Security]     [Git]     [Netfilter]     [Bugtraq]     [Yosemite News]     [MIPS Linux]     [ARM Linux]     [Linux Security]     [Linux RAID]     [Linux ATA RAID]     [Samba]     [Device Mapper]
  Powered by Linux