Commit 011a0330 authored by Abhijeet Kolekar's avatar Abhijeet Kolekar Committed by John W. Linville

iwl3945 : Fix a-band association for passive channels

Patch does following things
    1) This patch fixes the a-band association for passive channels with new
    uCode feature that it allows direct scan on passive channels after
    auto-switch from passive to active. This enables sending of direct probes
    on passive channels, as long as some traffic is detected on that channel.
    This improves the scanning for hidden SSIDs in A-band,which is all
    passive channels.

    This patch fixes the bug no 1748.

        http://www.intellinuxwireless.org/bugzilla/show_bug.cgi?id=1748

    2) This fix will only work with uCode version 15.28.2.8 and above.
    Prior versions of uCode would work only if we heard the traffic within
     active dwell time, which is much shorter than passive dwell time and
    is shorter than typical beacon periods. This patch also provids full
    active dwell time even if we hear traffic late in passive dwell.

    3) uCode API version is incremented to 2.
Signed-off-by: default avatarAbhijeet Kolekar <abhijeet.kolekar@intel.com>
Signed-off-by: default avatarZhu Yi <yi.zhu@intel.com>
Acked-by: default avatarBen Cahill <ben.m.cahill@intel.com>
Signed-off-by: default avatarReinette Chatre <reinette.chatre@intel.com>
Signed-off-by: default avatarJohn W. Linville <linville@tuxdriver.com>
parent a0987a8d
...@@ -51,7 +51,7 @@ extern struct pci_device_id iwl3945_hw_card_ids[]; ...@@ -51,7 +51,7 @@ extern struct pci_device_id iwl3945_hw_card_ids[];
#include "iwl-3945-led.h" #include "iwl-3945-led.h"
/* Highest firmware API version supported */ /* Highest firmware API version supported */
#define IWL3945_UCODE_API_MAX 1 #define IWL3945_UCODE_API_MAX 2
/* Lowest firmware API version supported */ /* Lowest firmware API version supported */
#define IWL3945_UCODE_API_MIN 1 #define IWL3945_UCODE_API_MIN 1
......
...@@ -4785,17 +4785,33 @@ static int iwl3945_get_channels_for_scan(struct iwl3945_priv *priv, ...@@ -4785,17 +4785,33 @@ static int iwl3945_get_channels_for_scan(struct iwl3945_priv *priv,
continue; continue;
} }
scan_ch->active_dwell = cpu_to_le16(active_dwell);
scan_ch->passive_dwell = cpu_to_le16(passive_dwell);
/* If passive , set up for auto-switch
* and use long active_dwell time.
*/
if (!is_active || is_channel_passive(ch_info) || if (!is_active || is_channel_passive(ch_info) ||
(channels[i].flags & IEEE80211_CHAN_PASSIVE_SCAN)) (channels[i].flags & IEEE80211_CHAN_PASSIVE_SCAN)) {
scan_ch->type = 0; /* passive */ scan_ch->type = 0; /* passive */
else if (IWL_UCODE_API(priv->ucode_ver) == 1)
scan_ch->active_dwell = cpu_to_le16(passive_dwell - 1);
} else {
scan_ch->type = 1; /* active */ scan_ch->type = 1; /* active */
}
if ((scan_ch->type & 1) && n_probes) /* Set direct probe bits. These may be used both for active
scan_ch->type |= IWL_SCAN_PROBE_MASK(n_probes); * scan channels (probes gets sent right away),
* or for passive channels (probes get se sent only after
scan_ch->active_dwell = cpu_to_le16(active_dwell); * hearing clear Rx packet).*/
scan_ch->passive_dwell = cpu_to_le16(passive_dwell); if (IWL_UCODE_API(priv->ucode_ver) >= 2) {
if (n_probes)
scan_ch->type |= IWL_SCAN_PROBE_MASK(n_probes);
} else {
/* uCode v1 does not allow setting direct probe bits on
* passive channel. */
if ((scan_ch->type & 1) && n_probes)
scan_ch->type |= IWL_SCAN_PROBE_MASK(n_probes);
}
/* Set txpower levels to defaults */ /* Set txpower levels to defaults */
scan_ch->tpc.dsp_atten = 110; scan_ch->tpc.dsp_atten = 110;
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment