iwl3945: Select correct sta ID from find_station()
authorSamuel Ortiz <sameo@linux.intel.com>
Tue, 2 Dec 2008 20:13:59 +0000 (12:13 -0800)
committerJohn W. Linville <linville@tuxdriver.com>
Fri, 5 Dec 2008 14:35:52 +0000 (09:35 -0500)
The find_station routine needs to look at the IWL_AP_ID entry if we're a STA.
Currently, it only looks for STA entries which causes HW crypto to fail.

Signed-off-by: Samuel Ortiz <samuel.ortiz@intel.com>
Acked-by: Tomas Winkler <tomas.winkler@intel.com>
Signed-off-by: Reinette Chatre <reinette.chatre@intel.com>
Signed-off-by: John W. Linville <linville@tuxdriver.com>
drivers/net/wireless/iwlwifi/iwl-3945.c

index af77ea7..6150004 100644 (file)
@@ -809,12 +809,19 @@ int iwl3945_hw_txq_free_tfd(struct iwl3945_priv *priv, struct iwl3945_tx_queue *
 
 u8 iwl3945_hw_find_station(struct iwl3945_priv *priv, const u8 *addr)
 {
-       int i;
+       int i, start = IWL_AP_ID;
        int ret = IWL_INVALID_STATION;
        unsigned long flags;
 
+       if ((priv->iw_mode == NL80211_IFTYPE_ADHOC) ||
+           (priv->iw_mode == NL80211_IFTYPE_AP))
+               start = IWL_STA_ID;
+
+       if (is_broadcast_ether_addr(addr))
+               return priv->hw_setting.bcast_sta_id;
+
        spin_lock_irqsave(&priv->sta_lock, flags);
-       for (i = IWL_STA_ID; i < priv->hw_setting.max_stations; i++)
+       for (i = start; i < priv->hw_setting.max_stations; i++)
                if ((priv->stations[i].used) &&
                    (!compare_ether_addr
                     (priv->stations[i].sta.sta.addr, addr))) {