iwlwifi: add context pointer to station
authorJohannes Berg <johannes.berg@intel.com>
Mon, 23 Aug 2010 08:46:45 +0000 (10:46 +0200)
committerWey-Yi Guy <wey-yi.w.guy@intel.com>
Fri, 27 Aug 2010 16:26:54 +0000 (09:26 -0700)
Sometimes we only pass around station
pointers but need to find the context
they belong to, so store it in there.

Signed-off-by: Johannes Berg <johannes.berg@intel.com>
Signed-off-by: Wey-Yi Guy <wey-yi.w.guy@intel.com>
drivers/net/wireless/iwlwifi/iwl-agn.c
drivers/net/wireless/iwlwifi/iwl-dev.h
drivers/net/wireless/iwlwifi/iwl-sta.c
drivers/net/wireless/iwlwifi/iwl-sta.h
drivers/net/wireless/iwlwifi/iwl3945-base.c

index 837406e53b3f873a183d2366dba389c8a64090dc..de8db3a3848d7363316ed86c784d5ba657dd5890 100644 (file)
@@ -3751,7 +3751,7 @@ static int iwlagn_mac_sta_add(struct ieee80211_hw *hw,
                sta_priv->client = true;
 
        ret = iwl_add_station_common(priv, vif_priv->ctx, sta->addr,
-                                    is_ap, &sta->ht_cap, &sta_id);
+                                    is_ap, sta, &sta_id);
        if (ret) {
                IWL_ERR(priv, "Unable to add station %pM (%d)\n",
                        sta->addr, ret);
index 2f9d1daff55486178c926cf061e4301af924647d..93647688d7200be48dcd8c79c23ce6d0d51e1d12 100644 (file)
@@ -502,6 +502,7 @@ struct iwl_station_entry {
 };
 
 struct iwl_station_priv_common {
+       struct iwl_rxon_context *ctx;
        u8 sta_id;
 };
 
index e6bb81b1514c8a5f07f0244e32f0c6b0ddbb30eb..c18eb89a9aedd03e36494ce9ebcd26b26fd6f4de 100644 (file)
@@ -172,12 +172,13 @@ int iwl_send_add_sta(struct iwl_priv *priv,
 EXPORT_SYMBOL(iwl_send_add_sta);
 
 static void iwl_set_ht_add_station(struct iwl_priv *priv, u8 index,
-                                  struct ieee80211_sta_ht_cap *sta_ht_inf)
+                                  struct ieee80211_sta *sta)
 {
+       struct ieee80211_sta_ht_cap *sta_ht_inf = &sta->ht_cap;
        __le32 sta_flags;
        u8 mimo_ps_mode;
 
-       if (!sta_ht_inf || !sta_ht_inf->ht_supported)
+       if (!sta || !sta_ht_inf->ht_supported)
                goto done;
 
        mimo_ps_mode = (sta_ht_inf->cap & IEEE80211_HT_CAP_SM_PS) >> 2;
@@ -228,7 +229,7 @@ static void iwl_set_ht_add_station(struct iwl_priv *priv, u8 index,
  */
 static u8 iwl_prep_station(struct iwl_priv *priv, struct iwl_rxon_context *ctx,
                           const u8 *addr, bool is_ap,
-                          struct ieee80211_sta_ht_cap *ht_info)
+                          struct ieee80211_sta *sta)
 {
        struct iwl_station_entry *station;
        int i;
@@ -292,12 +293,19 @@ static u8 iwl_prep_station(struct iwl_priv *priv, struct iwl_rxon_context *ctx,
        station->sta.station_flags = ctx->station_flags;
        station->ctxid = ctx->ctxid;
 
+       if (sta) {
+               struct iwl_station_priv_common *sta_priv;
+
+               sta_priv = (void *)sta->drv_priv;
+               sta_priv->ctx = ctx;
+       }
+
        /*
         * OK to call unconditionally, since local stations (IBSS BSSID
-        * STA and broadcast STA) pass in a NULL ht_info, and mac80211
+        * STA and broadcast STA) pass in a NULL sta, and mac80211
         * doesn't allow HT IBSS.
         */
-       iwl_set_ht_add_station(priv, sta_id, ht_info);
+       iwl_set_ht_add_station(priv, sta_id, sta);
 
        /* 3945 only */
        rate = (priv->band == IEEE80211_BAND_5GHZ) ?
@@ -316,7 +324,7 @@ static u8 iwl_prep_station(struct iwl_priv *priv, struct iwl_rxon_context *ctx,
  */
 int iwl_add_station_common(struct iwl_priv *priv, struct iwl_rxon_context *ctx,
                           const u8 *addr, bool is_ap,
-                          struct ieee80211_sta_ht_cap *ht_info, u8 *sta_id_r)
+                          struct ieee80211_sta *sta, u8 *sta_id_r)
 {
        unsigned long flags_spin;
        int ret = 0;
@@ -325,7 +333,7 @@ int iwl_add_station_common(struct iwl_priv *priv, struct iwl_rxon_context *ctx,
 
        *sta_id_r = 0;
        spin_lock_irqsave(&priv->sta_lock, flags_spin);
-       sta_id = iwl_prep_station(priv, ctx, addr, is_ap, ht_info);
+       sta_id = iwl_prep_station(priv, ctx, addr, is_ap, sta);
        if (sta_id == IWL_INVALID_STATION) {
                IWL_ERR(priv, "Unable to prepare station %pM for addition\n",
                        addr);
index 6ab5587870dcf2fdaeacd49bfb4cfb443059892f..56bad3f60d8131c74d3874472370e1ca0d241bdb 100644 (file)
@@ -74,7 +74,7 @@ int iwl_add_bssid_station(struct iwl_priv *priv, struct iwl_rxon_context *ctx,
                          const u8 *addr, bool init_rs, u8 *sta_id_r);
 int iwl_add_station_common(struct iwl_priv *priv, struct iwl_rxon_context *ctx,
                           const u8 *addr, bool is_ap,
-                          struct ieee80211_sta_ht_cap *ht_info, u8 *sta_id_r);
+                          struct ieee80211_sta *sta, u8 *sta_id_r);
 int iwl_remove_station(struct iwl_priv *priv, const u8 sta_id,
                       const u8 *addr);
 int iwl_mac_sta_remove(struct ieee80211_hw *hw, struct ieee80211_vif *vif,
index be48f79772785e00339bfe179c877bf495688b53..c048c1db42fdaef96d31a6dad4de8e275479bc1d 100644 (file)
@@ -3390,7 +3390,7 @@ static int iwl3945_mac_sta_add(struct ieee80211_hw *hw,
 
 
        ret = iwl_add_station_common(priv, &priv->contexts[IWL_RXON_CTX_BSS],
-                                    sta->addr, is_ap, &sta->ht_cap, &sta_id);
+                                    sta->addr, is_ap, sta, &sta_id);
        if (ret) {
                IWL_ERR(priv, "Unable to add station %pM (%d)\n",
                        sta->addr, ret);