aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/net/wireless/iwlwifi/iwl-agn-rs.c
diff options
context:
space:
mode:
authorWey-Yi Guy <wey-yi.w.guy@intel.com>2009-05-21 16:44:22 -0400
committerJohn W. Linville <linville@tuxdriver.com>2009-05-22 14:06:02 -0400
commit2681b20ba2a255ea20a168c0ebe519c40b55e57e (patch)
tree73a15523270e25b7c415be65edaa9712c9606553 /drivers/net/wireless/iwlwifi/iwl-agn-rs.c
parent749e091ee0065ed366cc26c115abc237e07ed786 (diff)
iwlwifi: add Greenfield support for 11n
Add "Greenfield" support for all devices except 4965 and 3945. "Greenfield" is part of 11n features to improve HT performance. Signed-off-by: Wey-Yi Guy <wey-yi.w.guy@intel.com> Signed-off-by: Reinette Chatre <reinette.chatre@intel.com> Signed-off-by: John W. Linville <linville@tuxdriver.com>
Diffstat (limited to 'drivers/net/wireless/iwlwifi/iwl-agn-rs.c')
-rw-r--r--drivers/net/wireless/iwlwifi/iwl-agn-rs.c34
1 files changed, 20 insertions, 14 deletions
diff --git a/drivers/net/wireless/iwlwifi/iwl-agn-rs.c b/drivers/net/wireless/iwlwifi/iwl-agn-rs.c
index 4c88e8715df2..a1b0ff56bc35 100644
--- a/drivers/net/wireless/iwlwifi/iwl-agn-rs.c
+++ b/drivers/net/wireless/iwlwifi/iwl-agn-rs.c
@@ -652,19 +652,19 @@ static int rs_toggle_antenna(u32 valid_ant, u32 *rate_n_flags,
652 return 1; 652 return 1;
653} 653}
654 654
655/* FIXME:RS: in 4965 we don't use greenfield at all */ 655/* in 4965 we don't use greenfield at all */
656/* FIXME:RS: don't use greenfield for now in TX */ 656static inline u8 rs_use_green(struct iwl_priv *priv,
657#if 0 657 struct ieee80211_conf *conf)
658static inline u8 rs_use_green(struct iwl_priv *priv, struct ieee80211_conf *conf)
659{ 658{
660 return (conf->flags & IEEE80211_CONF_SUPPORT_HT_MODE) && 659 u8 is_green;
661 priv->current_ht_config.is_green_field && 660
662 !priv->current_ht_config.non_GF_STA_present; 661 if ((priv->hw_rev & CSR_HW_REV_TYPE_MSK) == CSR_HW_REV_TYPE_4965)
663} 662 is_green = 0;
664#endif 663 else
665static inline u8 rs_use_green(struct iwl_priv *priv, struct ieee80211_conf *conf) 664 is_green = (conf_is_ht(conf) &&
666{ 665 priv->current_ht_config.is_green_field &&
667 return 0; 666 !priv->current_ht_config.non_GF_STA_present);
667 return is_green;
668} 668}
669 669
670/** 670/**
@@ -2061,6 +2061,10 @@ static void rs_rate_scale_perform(struct iwl_priv *priv,
2061 active_tbl = 1 - lq_sta->active_tbl; 2061 active_tbl = 1 - lq_sta->active_tbl;
2062 2062
2063 tbl = &(lq_sta->lq_info[active_tbl]); 2063 tbl = &(lq_sta->lq_info[active_tbl]);
2064 if (is_legacy(tbl->lq_type))
2065 lq_sta->is_green = 0;
2066 else
2067 lq_sta->is_green = rs_use_green(priv, conf);
2064 is_green = lq_sta->is_green; 2068 is_green = lq_sta->is_green;
2065 2069
2066 /* current tx rate */ 2070 /* current tx rate */
@@ -2896,7 +2900,8 @@ static ssize_t rs_sta_dbgfs_scale_table_read(struct file *file,
2896 ((is_mimo2(tbl->lq_type)) ? "MIMO2" : "MIMO3")); 2900 ((is_mimo2(tbl->lq_type)) ? "MIMO2" : "MIMO3"));
2897 desc += sprintf(buff+desc, " %s", 2901 desc += sprintf(buff+desc, " %s",
2898 (tbl->is_fat) ? "40MHz" : "20MHz"); 2902 (tbl->is_fat) ? "40MHz" : "20MHz");
2899 desc += sprintf(buff+desc, " %s\n", (tbl->is_SGI) ? "SGI" : ""); 2903 desc += sprintf(buff+desc, " %s %s\n", (tbl->is_SGI) ? "SGI" : "",
2904 (lq_sta->is_green) ? "GF enabled" : "");
2900 } 2905 }
2901 desc += sprintf(buff+desc, "last tx rate=0x%X\n", 2906 desc += sprintf(buff+desc, "last tx rate=0x%X\n",
2902 lq_sta->last_rate_n_flags); 2907 lq_sta->last_rate_n_flags);
@@ -2959,13 +2964,14 @@ static ssize_t rs_sta_dbgfs_stats_table_read(struct file *file,
2959 return -ENOMEM; 2964 return -ENOMEM;
2960 2965
2961 for (i = 0; i < LQ_SIZE; i++) { 2966 for (i = 0; i < LQ_SIZE; i++) {
2962 desc += sprintf(buff+desc, "%s type=%d SGI=%d FAT=%d DUP=%d\n" 2967 desc += sprintf(buff+desc, "%s type=%d SGI=%d FAT=%d DUP=%d GF=%d\n"
2963 "rate=0x%X\n", 2968 "rate=0x%X\n",
2964 lq_sta->active_tbl == i ? "*" : "x", 2969 lq_sta->active_tbl == i ? "*" : "x",
2965 lq_sta->lq_info[i].lq_type, 2970 lq_sta->lq_info[i].lq_type,
2966 lq_sta->lq_info[i].is_SGI, 2971 lq_sta->lq_info[i].is_SGI,
2967 lq_sta->lq_info[i].is_fat, 2972 lq_sta->lq_info[i].is_fat,
2968 lq_sta->lq_info[i].is_dup, 2973 lq_sta->lq_info[i].is_dup,
2974 lq_sta->is_green,
2969 lq_sta->lq_info[i].current_rate); 2975 lq_sta->lq_info[i].current_rate);
2970 for (j = 0; j < IWL_RATE_COUNT; j++) { 2976 for (j = 0; j < IWL_RATE_COUNT; j++) {
2971 desc += sprintf(buff+desc, 2977 desc += sprintf(buff+desc,