Gitweb:     
http://git.kernel.org/git/?p=linux/kernel/git/torvalds/linux-2.6.git;a=commit;h=326eeee807ca7ed4489cb21d4ebe8e52079c11c3
Commit:     326eeee807ca7ed4489cb21d4ebe8e52079c11c3
Parent:     9e0cc6de99792151b16dbd622b11ba6607a85b72
Author:     Ron Rindjunsky <[EMAIL PROTECTED]>
AuthorDate: Mon Nov 26 16:14:37 2007 +0200
Committer:  David S. Miller <[EMAIL PROTECTED]>
CommitDate: Mon Jan 28 15:05:42 2008 -0800

    iwlwifi: 802.11n configuring hw_mode parameters to support HT in A/G
    
    This patch fills the mac80211's ieee80211_hw_mode structures with the
    needed 802.11n data needed for the new framework
    
    Signed-off-by: Ron Rindjunsky <[EMAIL PROTECTED]>
    Signed-off-by: John W. Linville <[EMAIL PROTECTED]>
---
 drivers/net/wireless/iwlwifi/iwl-4965.c     |   24 ++++++++++++++++++++++++
 drivers/net/wireless/iwlwifi/iwl-4965.h     |    2 ++
 drivers/net/wireless/iwlwifi/iwl4965-base.c |   24 +++++++-----------------
 3 files changed, 33 insertions(+), 17 deletions(-)

diff --git a/drivers/net/wireless/iwlwifi/iwl-4965.c 
b/drivers/net/wireless/iwlwifi/iwl-4965.c
index c8e7adf..fbabcb0 100644
--- a/drivers/net/wireless/iwlwifi/iwl-4965.c
+++ b/drivers/net/wireless/iwlwifi/iwl-4965.c
@@ -3768,6 +3768,30 @@ static int parse_elems(u8 *start, size_t len, struct 
ieee802_11_elems *elems)
 
        return 0;
 }
+
+void iwl4965_init_ht_hw_capab(struct ieee80211_ht_info *ht_info, int mode)
+{
+       ht_info->cap = 0;
+       memset(ht_info->supp_mcs_set, 0, 16);
+
+       ht_info->ht_supported = 1;
+
+       if (mode == MODE_IEEE80211A) {
+               ht_info->cap |= (u16)IEEE80211_HT_CAP_SUP_WIDTH;
+               ht_info->cap |= (u16)IEEE80211_HT_CAP_SGI_40;
+               ht_info->supp_mcs_set[4] = 0x01;
+       }
+       ht_info->cap |= (u16)IEEE80211_HT_CAP_GRN_FLD;
+       ht_info->cap |= (u16)IEEE80211_HT_CAP_SGI_20;
+       ht_info->cap |= (u16)(IEEE80211_HT_CAP_MIMO_PS &
+                            (IWL_MIMO_PS_NONE << 2));
+
+       ht_info->ampdu_factor = CFG_HT_RX_AMPDU_FACTOR_DEF;
+       ht_info->ampdu_density = CFG_HT_MPDU_DENSITY_DEF;
+
+       ht_info->supp_mcs_set[0] = 0xFF;
+       ht_info->supp_mcs_set[1] = 0xFF;
+}
 #endif /* CONFIG_IWL4965_HT */
 
 static void iwl4965_sta_modify_ps_wake(struct iwl4965_priv *priv, int sta_id)
diff --git a/drivers/net/wireless/iwlwifi/iwl-4965.h 
b/drivers/net/wireless/iwlwifi/iwl-4965.h
index c0e9747..5fd0114 100644
--- a/drivers/net/wireless/iwlwifi/iwl-4965.h
+++ b/drivers/net/wireless/iwlwifi/iwl-4965.h
@@ -801,6 +801,8 @@ extern int iwl4965_set_fat_chan_info(struct iwl4965_priv 
*priv, int phymode,
 extern void iwl4965_rf_kill_ct_config(struct iwl4965_priv *priv);
 
 #ifdef CONFIG_IWL4965_HT
+extern void iwl4965_init_ht_hw_capab(struct ieee80211_ht_info *ht_info,
+                                       int mode);
 #ifdef CONFIG_IWL4965_HT_AGG
 extern int iwl4965_mac_ht_tx_agg_start(struct ieee80211_hw *hw, u8 *da,
                                   u16 tid, u16 *start_seq_num);
diff --git a/drivers/net/wireless/iwlwifi/iwl4965-base.c 
b/drivers/net/wireless/iwlwifi/iwl4965-base.c
index 4561933..d88363e 100644
--- a/drivers/net/wireless/iwlwifi/iwl4965-base.c
+++ b/drivers/net/wireless/iwlwifi/iwl4965-base.c
@@ -5822,10 +5822,8 @@ static int iwl4965_init_geos(struct iwl4965_priv *priv)
                A = 0,
                B = 1,
                G = 2,
-               A_11N = 3,
-               G_11N = 4,
        };
-       int mode_count = 5;
+       int mode_count = 3;
 
        if (priv->modes) {
                IWL_DEBUG_INFO("Geography modes already initialized.\n");
@@ -5865,6 +5863,9 @@ static int iwl4965_init_geos(struct iwl4965_priv *priv)
        modes[A].num_rates = 8; /* just OFDM */
        modes[A].rates = &rates[4];
        modes[A].num_channels = 0;
+#ifdef CONFIG_IWL4965_HT
+       iwl4965_init_ht_hw_capab(&modes[A].ht_info, MODE_IEEE80211A);
+#endif
 
        modes[B].mode = MODE_IEEE80211B;
        modes[B].channels = channels;
@@ -5877,18 +5878,9 @@ static int iwl4965_init_geos(struct iwl4965_priv *priv)
        modes[G].rates = rates;
        modes[G].num_rates = 12;        /* OFDM & CCK */
        modes[G].num_channels = 0;
-
-       modes[G_11N].mode = MODE_IEEE80211G;
-       modes[G_11N].channels = channels;
-       modes[G_11N].num_rates = 13;        /* OFDM & CCK */
-       modes[G_11N].rates = rates;
-       modes[G_11N].num_channels = 0;
-
-       modes[A_11N].mode = MODE_IEEE80211A;
-       modes[A_11N].channels = &channels[ARRAY_SIZE(iwl4965_eeprom_band_1)];
-       modes[A_11N].rates = &rates[4];
-       modes[A_11N].num_rates = 9; /* just OFDM */
-       modes[A_11N].num_channels = 0;
+#ifdef CONFIG_IWL4965_HT
+       iwl4965_init_ht_hw_capab(&modes[G].ht_info, MODE_IEEE80211G);
+#endif
 
        priv->ieee_channels = channels;
        priv->ieee_rates = rates;
@@ -5908,11 +5900,9 @@ static int iwl4965_init_geos(struct iwl4965_priv *priv)
 
                if (is_channel_a_band(ch)) {
                        geo_ch = &modes[A].channels[modes[A].num_channels++];
-                       modes[A_11N].num_channels++;
                } else {
                        geo_ch = &modes[B].channels[modes[B].num_channels++];
                        modes[G].num_channels++;
-                       modes[G_11N].num_channels++;
                }
 
                geo_ch->freq = ieee80211chan2mhz(ch->channel);
-
To unsubscribe from this list: send the line "unsubscribe git-commits-head" in
the body of a message to [EMAIL PROTECTED]
More majordomo info at  http://vger.kernel.org/majordomo-info.html

Reply via email to