aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/net/wireless/iwlwifi
diff options
context:
space:
mode:
Diffstat (limited to 'drivers/net/wireless/iwlwifi')
-rw-r--r--drivers/net/wireless/iwlwifi/Kconfig8
-rw-r--r--drivers/net/wireless/iwlwifi/iwl-4965-rs.c46
-rw-r--r--drivers/net/wireless/iwlwifi/iwl-4965.c62
-rw-r--r--drivers/net/wireless/iwlwifi/iwl-5000.c44
-rw-r--r--drivers/net/wireless/iwlwifi/iwl-core.c18
-rw-r--r--drivers/net/wireless/iwlwifi/iwl-core.h4
-rw-r--r--drivers/net/wireless/iwlwifi/iwl-debugfs.c4
-rw-r--r--drivers/net/wireless/iwlwifi/iwl-dev.h14
-rw-r--r--drivers/net/wireless/iwlwifi/iwl-sta.c10
-rw-r--r--drivers/net/wireless/iwlwifi/iwl-tx.c10
-rw-r--r--drivers/net/wireless/iwlwifi/iwl4965-base.c23
11 files changed, 43 insertions, 200 deletions
diff --git a/drivers/net/wireless/iwlwifi/Kconfig b/drivers/net/wireless/iwlwifi/Kconfig
index 5f3e849043f7..b992428ab4db 100644
--- a/drivers/net/wireless/iwlwifi/Kconfig
+++ b/drivers/net/wireless/iwlwifi/Kconfig
@@ -54,14 +54,6 @@ config IWL4965
54 say M here and read <file:Documentation/kbuild/modules.txt>. The 54 say M here and read <file:Documentation/kbuild/modules.txt>. The
55 module will be called iwl4965.ko. 55 module will be called iwl4965.ko.
56 56
57config IWL4965_HT
58 bool "Enable 802.11n HT features in iwl4965 driver"
59 depends on EXPERIMENTAL
60 depends on IWL4965
61 ---help---
62 This option enables IEEE 802.11n High Throughput features
63 for the iwl4965 driver.
64
65config IWL4965_LEDS 57config IWL4965_LEDS
66 bool "Enable LEDS features in iwl4965 driver" 58 bool "Enable LEDS features in iwl4965 driver"
67 depends on IWL4965 59 depends on IWL4965
diff --git a/drivers/net/wireless/iwlwifi/iwl-4965-rs.c b/drivers/net/wireless/iwlwifi/iwl-4965-rs.c
index d8f2b4d33fd9..7f9178bf602e 100644
--- a/drivers/net/wireless/iwlwifi/iwl-4965-rs.c
+++ b/drivers/net/wireless/iwlwifi/iwl-4965-rs.c
@@ -105,8 +105,6 @@ struct iwl4965_scale_tbl_info {
105 struct iwl4965_rate_scale_data win[IWL_RATE_COUNT]; /* rate histories */ 105 struct iwl4965_rate_scale_data win[IWL_RATE_COUNT]; /* rate histories */
106}; 106};
107 107
108#ifdef CONFIG_IWL4965_HT
109
110struct iwl4965_traffic_load { 108struct iwl4965_traffic_load {
111 unsigned long time_stamp; /* age of the oldest statistics */ 109 unsigned long time_stamp; /* age of the oldest statistics */
112 u32 packet_count[TID_QUEUE_MAX_SIZE]; /* packet count in this time 110 u32 packet_count[TID_QUEUE_MAX_SIZE]; /* packet count in this time
@@ -118,8 +116,6 @@ struct iwl4965_traffic_load {
118 u8 head; /* start of the circular buffer */ 116 u8 head; /* start of the circular buffer */
119}; 117};
120 118
121#endif /* CONFIG_IWL4965_HT */
122
123/** 119/**
124 * struct iwl4965_lq_sta -- driver's rate scaling private structure 120 * struct iwl4965_lq_sta -- driver's rate scaling private structure
125 * 121 *
@@ -157,16 +153,12 @@ struct iwl4965_lq_sta {
157 153
158 struct iwl_link_quality_cmd lq; 154 struct iwl_link_quality_cmd lq;
159 struct iwl4965_scale_tbl_info lq_info[LQ_SIZE]; /* "active", "search" */ 155 struct iwl4965_scale_tbl_info lq_info[LQ_SIZE]; /* "active", "search" */
160#ifdef CONFIG_IWL4965_HT
161 struct iwl4965_traffic_load load[TID_MAX_LOAD_COUNT]; 156 struct iwl4965_traffic_load load[TID_MAX_LOAD_COUNT];
162 u8 tx_agg_tid_en; 157 u8 tx_agg_tid_en;
163#endif
164#ifdef CONFIG_MAC80211_DEBUGFS 158#ifdef CONFIG_MAC80211_DEBUGFS
165 struct dentry *rs_sta_dbgfs_scale_table_file; 159 struct dentry *rs_sta_dbgfs_scale_table_file;
166 struct dentry *rs_sta_dbgfs_stats_table_file; 160 struct dentry *rs_sta_dbgfs_stats_table_file;
167#ifdef CONFIG_IWL4965_HT
168 struct dentry *rs_sta_dbgfs_tx_agg_tid_en_file; 161 struct dentry *rs_sta_dbgfs_tx_agg_tid_en_file;
169#endif
170 u32 dbg_fixed_rate; 162 u32 dbg_fixed_rate;
171#endif 163#endif
172 struct iwl_priv *drv; 164 struct iwl_priv *drv;
@@ -256,7 +248,6 @@ static inline u8 rs_is_valid_ant(u8 valid_antenna, u8 ant_type)
256 return ((ant_type & valid_antenna) == ant_type); 248 return ((ant_type & valid_antenna) == ant_type);
257} 249}
258 250
259#ifdef CONFIG_IWL4965_HT
260/* 251/*
261 * removes the old data from the statistics. All data that is older than 252 * removes the old data from the statistics. All data that is older than
262 * TID_MAX_TIME_DIFF, will be deleted. 253 * TID_MAX_TIME_DIFF, will be deleted.
@@ -389,8 +380,6 @@ static void rs_tl_turn_on_agg(struct iwl_priv *priv, u8 tid,
389 rs_tl_turn_on_agg_for_tid(priv, lq_data, tid, sta); 380 rs_tl_turn_on_agg_for_tid(priv, lq_data, tid, sta);
390} 381}
391 382
392#endif /* CONFIG_IWLWIFI_HT */
393
394static inline int get_num_of_ant_from_rate(u32 rate_n_flags) 383static inline int get_num_of_ant_from_rate(u32 rate_n_flags)
395{ 384{
396 return (!!(rate_n_flags & RATE_MCS_ANT_A_MSK) + 385 return (!!(rate_n_flags & RATE_MCS_ANT_A_MSK) +
@@ -626,7 +615,6 @@ static int rs_toggle_antenna(u32 valid_ant, u32 *rate_n_flags,
626 615
627/* FIXME:RS: in 4965 we don't use greenfield at all */ 616/* FIXME:RS: in 4965 we don't use greenfield at all */
628/* FIXME:RS: don't use greenfield for now in TX */ 617/* FIXME:RS: don't use greenfield for now in TX */
629/* #ifdef CONFIG_IWL4965_HT */
630#if 0 618#if 0
631static inline u8 rs_use_green(struct iwl_priv *priv, struct ieee80211_conf *conf) 619static inline u8 rs_use_green(struct iwl_priv *priv, struct ieee80211_conf *conf)
632{ 620{
@@ -634,12 +622,11 @@ static inline u8 rs_use_green(struct iwl_priv *priv, struct ieee80211_conf *conf
634 priv->current_ht_config.is_green_field && 622 priv->current_ht_config.is_green_field &&
635 !priv->current_ht_config.non_GF_STA_present); 623 !priv->current_ht_config.non_GF_STA_present);
636} 624}
637#else 625#endif
638static inline u8 rs_use_green(struct iwl_priv *priv, struct ieee80211_conf *conf) 626static inline u8 rs_use_green(struct iwl_priv *priv, struct ieee80211_conf *conf)
639{ 627{
640 return 0; 628 return 0;
641} 629}
642#endif /* CONFIG_IWL4965_HT */
643 630
644/** 631/**
645 * rs_get_supported_rates - get the available rates 632 * rs_get_supported_rates - get the available rates
@@ -1050,7 +1037,6 @@ static void rs_set_expected_tpt_table(struct iwl4965_lq_sta *lq_sta,
1050 tbl->expected_tpt = expected_tpt_G; 1037 tbl->expected_tpt = expected_tpt_G;
1051} 1038}
1052 1039
1053#ifdef CONFIG_IWL4965_HT
1054/* 1040/*
1055 * Find starting rate for new "search" high-throughput mode of modulation. 1041 * Find starting rate for new "search" high-throughput mode of modulation.
1056 * Goal is to find lowest expected rate (under perfect conditions) that is 1042 * Goal is to find lowest expected rate (under perfect conditions) that is
@@ -1152,12 +1138,10 @@ static s32 rs_get_best_rate(struct iwl_priv *priv,
1152 1138
1153 return new_rate; 1139 return new_rate;
1154} 1140}
1155#endif /* CONFIG_IWL4965_HT */
1156 1141
1157/* 1142/*
1158 * Set up search table for MIMO 1143 * Set up search table for MIMO
1159 */ 1144 */
1160#ifdef CONFIG_IWL4965_HT
1161static int rs_switch_to_mimo2(struct iwl_priv *priv, 1145static int rs_switch_to_mimo2(struct iwl_priv *priv,
1162 struct iwl4965_lq_sta *lq_sta, 1146 struct iwl4965_lq_sta *lq_sta,
1163 struct ieee80211_conf *conf, 1147 struct ieee80211_conf *conf,
@@ -1221,16 +1205,6 @@ static int rs_switch_to_mimo2(struct iwl_priv *priv,
1221 tbl->current_rate, is_green); 1205 tbl->current_rate, is_green);
1222 return 0; 1206 return 0;
1223} 1207}
1224#else
1225static int rs_switch_to_mimo2(struct iwl_priv *priv,
1226 struct iwl4965_lq_sta *lq_sta,
1227 struct ieee80211_conf *conf,
1228 struct sta_info *sta,
1229 struct iwl4965_scale_tbl_info *tbl, int index)
1230{
1231 return -1;
1232}
1233#endif /*CONFIG_IWL4965_HT */
1234 1208
1235/* 1209/*
1236 * Set up search table for SISO 1210 * Set up search table for SISO
@@ -1241,7 +1215,6 @@ static int rs_switch_to_siso(struct iwl_priv *priv,
1241 struct sta_info *sta, 1215 struct sta_info *sta,
1242 struct iwl4965_scale_tbl_info *tbl, int index) 1216 struct iwl4965_scale_tbl_info *tbl, int index)
1243{ 1217{
1244#ifdef CONFIG_IWL4965_HT
1245 u16 rate_mask; 1218 u16 rate_mask;
1246 u8 is_green = lq_sta->is_green; 1219 u8 is_green = lq_sta->is_green;
1247 s32 rate; 1220 s32 rate;
@@ -1291,9 +1264,6 @@ static int rs_switch_to_siso(struct iwl_priv *priv,
1291 IWL_DEBUG_RATE("LQ: Switch to new mcs %X index is green %X\n", 1264 IWL_DEBUG_RATE("LQ: Switch to new mcs %X index is green %X\n",
1292 tbl->current_rate, is_green); 1265 tbl->current_rate, is_green);
1293 return 0; 1266 return 0;
1294#else
1295 return -1;
1296#endif /*CONFIG_IWL4965_HT */
1297} 1267}
1298 1268
1299/* 1269/*
@@ -1689,9 +1659,7 @@ static void rs_rate_scale_perform(struct iwl_priv *priv,
1689 u8 done_search = 0; 1659 u8 done_search = 0;
1690 u16 high_low; 1660 u16 high_low;
1691 s32 sr; 1661 s32 sr;
1692#ifdef CONFIG_IWL4965_HT
1693 u8 tid = MAX_TID_COUNT; 1662 u8 tid = MAX_TID_COUNT;
1694#endif
1695 1663
1696 IWL_DEBUG_RATE("rate scale calculate new rate for skb\n"); 1664 IWL_DEBUG_RATE("rate scale calculate new rate for skb\n");
1697 1665
@@ -1712,9 +1680,7 @@ static void rs_rate_scale_perform(struct iwl_priv *priv,
1712 } 1680 }
1713 lq_sta = (struct iwl4965_lq_sta *)sta->rate_ctrl_priv; 1681 lq_sta = (struct iwl4965_lq_sta *)sta->rate_ctrl_priv;
1714 1682
1715#ifdef CONFIG_IWL4965_HT
1716 rs_tl_add_packet(lq_sta, hdr); 1683 rs_tl_add_packet(lq_sta, hdr);
1717#endif
1718 /* 1684 /*
1719 * Select rate-scale / modulation-mode table to work with in 1685 * Select rate-scale / modulation-mode table to work with in
1720 * the rest of this function: "search" if searching for better 1686 * the rest of this function: "search" if searching for better
@@ -2013,9 +1979,7 @@ lq_update:
2013 * before next round of mode comparisons. */ 1979 * before next round of mode comparisons. */
2014 tbl1 = &(lq_sta->lq_info[lq_sta->active_tbl]); 1980 tbl1 = &(lq_sta->lq_info[lq_sta->active_tbl]);
2015 if (is_legacy(tbl1->lq_type) && 1981 if (is_legacy(tbl1->lq_type) &&
2016#ifdef CONFIG_IWL4965_HT
2017 (!(conf->flags & IEEE80211_CONF_SUPPORT_HT_MODE)) && 1982 (!(conf->flags & IEEE80211_CONF_SUPPORT_HT_MODE)) &&
2018#endif
2019 (lq_sta->action_counter >= 1)) { 1983 (lq_sta->action_counter >= 1)) {
2020 lq_sta->action_counter = 0; 1984 lq_sta->action_counter = 0;
2021 IWL_DEBUG_RATE("LQ: STAY in legacy table\n"); 1985 IWL_DEBUG_RATE("LQ: STAY in legacy table\n");
@@ -2027,14 +1991,12 @@ lq_update:
2027 * mode for a while before next round of mode comparisons. */ 1991 * mode for a while before next round of mode comparisons. */
2028 if (lq_sta->enable_counter && 1992 if (lq_sta->enable_counter &&
2029 (lq_sta->action_counter >= IWL_ACTION_LIMIT)) { 1993 (lq_sta->action_counter >= IWL_ACTION_LIMIT)) {
2030#ifdef CONFIG_IWL4965_HT
2031 if ((lq_sta->last_tpt > IWL_AGG_TPT_THREHOLD) && 1994 if ((lq_sta->last_tpt > IWL_AGG_TPT_THREHOLD) &&
2032 (lq_sta->tx_agg_tid_en & (1 << tid)) && 1995 (lq_sta->tx_agg_tid_en & (1 << tid)) &&
2033 (tid != MAX_TID_COUNT)) { 1996 (tid != MAX_TID_COUNT)) {
2034 IWL_DEBUG_RATE("try to aggregate tid %d\n", tid); 1997 IWL_DEBUG_RATE("try to aggregate tid %d\n", tid);
2035 rs_tl_turn_on_agg(priv, tid, lq_sta, sta); 1998 rs_tl_turn_on_agg(priv, tid, lq_sta, sta);
2036 } 1999 }
2037#endif /*CONFIG_IWL4965_HT */
2038 lq_sta->action_counter = 0; 2000 lq_sta->action_counter = 0;
2039 rs_set_stay_in_table(priv, 0, lq_sta); 2001 rs_set_stay_in_table(priv, 0, lq_sta);
2040 } 2002 }
@@ -2279,7 +2241,6 @@ static void rs_rate_init(void *priv_rate, void *priv_sta,
2279 lq_sta->active_legacy_rate = priv->active_rate & ~(0x1000); 2241 lq_sta->active_legacy_rate = priv->active_rate & ~(0x1000);
2280 lq_sta->active_rate_basic = priv->active_rate_basic; 2242 lq_sta->active_rate_basic = priv->active_rate_basic;
2281 lq_sta->band = priv->band; 2243 lq_sta->band = priv->band;
2282#ifdef CONFIG_IWL4965_HT
2283 /* 2244 /*
2284 * active_siso_rate mask includes 9 MBits (bit 5), and CCK (bits 0-3), 2245 * active_siso_rate mask includes 9 MBits (bit 5), and CCK (bits 0-3),
2285 * supp_rates[] does not; shift to convert format, force 9 MBits off. 2246 * supp_rates[] does not; shift to convert format, force 9 MBits off.
@@ -2317,7 +2278,6 @@ static void rs_rate_init(void *priv_rate, void *priv_sta,
2317 2278
2318 /* as default allow aggregation for all tids */ 2279 /* as default allow aggregation for all tids */
2319 lq_sta->tx_agg_tid_en = IWL_AGG_ALL_TID; 2280 lq_sta->tx_agg_tid_en = IWL_AGG_ALL_TID;
2320#endif /*CONFIG_IWL4965_HT*/
2321#ifdef CONFIG_MAC80211_DEBUGFS 2281#ifdef CONFIG_MAC80211_DEBUGFS
2322 lq_sta->drv = priv; 2282 lq_sta->drv = priv;
2323#endif 2283#endif
@@ -2635,11 +2595,9 @@ static void rs_add_debugfs(void *priv, void *priv_sta,
2635 lq_sta->rs_sta_dbgfs_stats_table_file = 2595 lq_sta->rs_sta_dbgfs_stats_table_file =
2636 debugfs_create_file("rate_stats_table", 0600, dir, 2596 debugfs_create_file("rate_stats_table", 0600, dir,
2637 lq_sta, &rs_sta_dbgfs_stats_table_ops); 2597 lq_sta, &rs_sta_dbgfs_stats_table_ops);
2638#ifdef CONFIG_IWL4965_HT
2639 lq_sta->rs_sta_dbgfs_tx_agg_tid_en_file = 2598 lq_sta->rs_sta_dbgfs_tx_agg_tid_en_file =
2640 debugfs_create_u8("tx_agg_tid_enable", 0600, dir, 2599 debugfs_create_u8("tx_agg_tid_enable", 0600, dir,
2641 &lq_sta->tx_agg_tid_en); 2600 &lq_sta->tx_agg_tid_en);
2642#endif
2643 2601
2644} 2602}
2645 2603
@@ -2648,9 +2606,7 @@ static void rs_remove_debugfs(void *priv, void *priv_sta)
2648 struct iwl4965_lq_sta *lq_sta = priv_sta; 2606 struct iwl4965_lq_sta *lq_sta = priv_sta;
2649 debugfs_remove(lq_sta->rs_sta_dbgfs_scale_table_file); 2607 debugfs_remove(lq_sta->rs_sta_dbgfs_scale_table_file);
2650 debugfs_remove(lq_sta->rs_sta_dbgfs_stats_table_file); 2608 debugfs_remove(lq_sta->rs_sta_dbgfs_stats_table_file);
2651#ifdef CONFIG_IWL4965_HT
2652 debugfs_remove(lq_sta->rs_sta_dbgfs_tx_agg_tid_en_file); 2609 debugfs_remove(lq_sta->rs_sta_dbgfs_tx_agg_tid_en_file);
2653#endif
2654} 2610}
2655#endif 2611#endif
2656 2612
diff --git a/drivers/net/wireless/iwlwifi/iwl-4965.c b/drivers/net/wireless/iwlwifi/iwl-4965.c
index aee7014bcb94..84414da0bdeb 100644
--- a/drivers/net/wireless/iwlwifi/iwl-4965.c
+++ b/drivers/net/wireless/iwlwifi/iwl-4965.c
@@ -2819,7 +2819,6 @@ void iwl4965_rx_reply_rx(struct iwl_priv *priv,
2819 break; 2819 break;
2820 2820
2821 case IEEE80211_FTYPE_CTL: 2821 case IEEE80211_FTYPE_CTL:
2822#ifdef CONFIG_IWL4965_HT
2823 switch (fc & IEEE80211_FCTL_STYPE) { 2822 switch (fc & IEEE80211_FCTL_STYPE) {
2824 case IEEE80211_STYPE_BACK_REQ: 2823 case IEEE80211_STYPE_BACK_REQ:
2825 IWL_DEBUG_HT("IEEE80211_STYPE_BACK_REQ arrived\n"); 2824 IWL_DEBUG_HT("IEEE80211_STYPE_BACK_REQ arrived\n");
@@ -2829,7 +2828,6 @@ void iwl4965_rx_reply_rx(struct iwl_priv *priv,
2829 default: 2828 default:
2830 break; 2829 break;
2831 } 2830 }
2832#endif
2833 break; 2831 break;
2834 2832
2835 case IEEE80211_FTYPE_DATA: { 2833 case IEEE80211_FTYPE_DATA: {
@@ -2863,8 +2861,6 @@ void iwl4965_rx_reply_rx(struct iwl_priv *priv,
2863 } 2861 }
2864} 2862}
2865 2863
2866#ifdef CONFIG_IWL4965_HT
2867
2868/** 2864/**
2869 * iwl4965_tx_status_reply_compressed_ba - Update tx status from block-ack 2865 * iwl4965_tx_status_reply_compressed_ba - Update tx status from block-ack
2870 * 2866 *
@@ -3154,10 +3150,6 @@ static int iwl4965_txq_agg_enable(struct iwl_priv *priv, int txq_id,
3154 return 0; 3150 return 0;
3155} 3151}
3156 3152
3157#endif /* CONFIG_IWL4965_HT */
3158
3159
3160#ifdef CONFIG_IWL4965_HT
3161static int iwl4965_rx_agg_start(struct iwl_priv *priv, 3153static int iwl4965_rx_agg_start(struct iwl_priv *priv,
3162 const u8 *addr, int tid, u16 ssn) 3154 const u8 *addr, int tid, u16 ssn)
3163{ 3155{
@@ -3231,8 +3223,6 @@ int iwl4965_mac_ampdu_action(struct ieee80211_hw *hw,
3231 } 3223 }
3232 return 0; 3224 return 0;
3233} 3225}
3234#endif /* CONFIG_IWL4965_HT */
3235
3236 3226
3237static u16 iwl4965_get_hcmd_size(u8 cmd_id, u16 len) 3227static u16 iwl4965_get_hcmd_size(u8 cmd_id, u16 len)
3238{ 3228{
@@ -3262,7 +3252,6 @@ static u16 iwl4965_build_addsta_hcmd(const struct iwl_addsta_cmd *cmd, u8 *data)
3262 return (u16)sizeof(struct iwl4965_addsta_cmd); 3252 return (u16)sizeof(struct iwl4965_addsta_cmd);
3263} 3253}
3264 3254
3265#ifdef CONFIG_IWL4965_HT
3266static inline u32 iwl4965_get_scd_ssn(struct iwl4965_tx_resp *tx_resp) 3255static inline u32 iwl4965_get_scd_ssn(struct iwl4965_tx_resp *tx_resp)
3267{ 3256{
3268 __le32 *scd_ssn = (__le32 *)((u32 *)&tx_resp->status + 3257 __le32 *scd_ssn = (__le32 *)((u32 *)&tx_resp->status +
@@ -3388,7 +3377,6 @@ static int iwl4965_tx_status_reply_tx(struct iwl_priv *priv,
3388 } 3377 }
3389 return 0; 3378 return 0;
3390} 3379}
3391#endif
3392 3380
3393/** 3381/**
3394 * iwl4965_rx_reply_tx - Handle standard (non-aggregation) Tx response 3382 * iwl4965_rx_reply_tx - Handle standard (non-aggregation) Tx response
@@ -3404,12 +3392,10 @@ static void iwl4965_rx_reply_tx(struct iwl_priv *priv,
3404 struct ieee80211_tx_info *info; 3392 struct ieee80211_tx_info *info;
3405 struct iwl4965_tx_resp *tx_resp = (void *)&pkt->u.raw[0]; 3393 struct iwl4965_tx_resp *tx_resp = (void *)&pkt->u.raw[0];
3406 u32 status = le32_to_cpu(tx_resp->status); 3394 u32 status = le32_to_cpu(tx_resp->status);
3407#ifdef CONFIG_IWL4965_HT
3408 int tid = MAX_TID_COUNT, sta_id = IWL_INVALID_STATION; 3395 int tid = MAX_TID_COUNT, sta_id = IWL_INVALID_STATION;
3409 u16 fc; 3396 u16 fc;
3410 struct ieee80211_hdr *hdr; 3397 struct ieee80211_hdr *hdr;
3411 u8 *qc = NULL; 3398 u8 *qc = NULL;
3412#endif
3413 3399
3414 if ((index >= txq->q.n_bd) || (iwl_queue_used(&txq->q, index) == 0)) { 3400 if ((index >= txq->q.n_bd) || (iwl_queue_used(&txq->q, index) == 0)) {
3415 IWL_ERROR("Read index for DMA queue txq_id (%d) index %d " 3401 IWL_ERROR("Read index for DMA queue txq_id (%d) index %d "
@@ -3422,7 +3408,6 @@ static void iwl4965_rx_reply_tx(struct iwl_priv *priv,
3422 info = IEEE80211_SKB_CB(txq->txb[txq->q.read_ptr].skb[0]); 3408 info = IEEE80211_SKB_CB(txq->txb[txq->q.read_ptr].skb[0]);
3423 memset(&info->status, 0, sizeof(info->status)); 3409 memset(&info->status, 0, sizeof(info->status));
3424 3410
3425#ifdef CONFIG_IWL4965_HT
3426 hdr = iwl_tx_queue_get_hdr(priv, txq_id, index); 3411 hdr = iwl_tx_queue_get_hdr(priv, txq_id, index);
3427 fc = le16_to_cpu(hdr->frame_control); 3412 fc = le16_to_cpu(hdr->frame_control);
3428 if (ieee80211_is_qos_data(fc)) { 3413 if (ieee80211_is_qos_data(fc)) {
@@ -3474,32 +3459,31 @@ static void iwl4965_rx_reply_tx(struct iwl_priv *priv,
3474 iwl_txq_check_empty(priv, sta_id, tid, txq_id); 3459 iwl_txq_check_empty(priv, sta_id, tid, txq_id);
3475 } 3460 }
3476 } else { 3461 } else {
3477#endif /* CONFIG_IWL4965_HT */ 3462 info->status.retry_count = tx_resp->failure_frame;
3478 3463 info->flags |=
3479 info->status.retry_count = tx_resp->failure_frame; 3464 iwl_is_tx_success(status) ? IEEE80211_TX_STAT_ACK : 0;
3480 info->flags |= iwl_is_tx_success(status) ? IEEE80211_TX_STAT_ACK : 0; 3465 iwl4965_hwrate_to_tx_control(priv,
3481 iwl4965_hwrate_to_tx_control(priv, le32_to_cpu(tx_resp->rate_n_flags), 3466 le32_to_cpu(tx_resp->rate_n_flags),
3482 info); 3467 info);
3483 3468
3484 IWL_DEBUG_TX("Tx queue %d Status %s (0x%08x) rate_n_flags 0x%x " 3469 IWL_DEBUG_TX("Tx queue %d Status %s (0x%08x) rate_n_flags "
3485 "retries %d\n", txq_id, iwl_get_tx_fail_reason(status), 3470 "0x%x retries %d\n", txq_id,
3486 status, le32_to_cpu(tx_resp->rate_n_flags), 3471 iwl_get_tx_fail_reason(status),
3487 tx_resp->failure_frame); 3472 status, le32_to_cpu(tx_resp->rate_n_flags),
3488 3473 tx_resp->failure_frame);
3489 IWL_DEBUG_TX_REPLY("Tx queue reclaim %d\n", index); 3474
3490#ifdef CONFIG_IWL4965_HT 3475 IWL_DEBUG_TX_REPLY("Tx queue reclaim %d\n", index);
3491 if (index != -1) { 3476 if (index != -1) {
3492 int freed = iwl_tx_queue_reclaim(priv, txq_id, index); 3477 int freed = iwl_tx_queue_reclaim(priv, txq_id, index);
3493 if (tid != MAX_TID_COUNT) 3478 if (tid != MAX_TID_COUNT)
3494 priv->stations[sta_id].tid[tid].tfds_in_queue -= freed; 3479 priv->stations[sta_id].tid[tid].tfds_in_queue -= freed;
3495 if (iwl_queue_space(&txq->q) > txq->q.low_mark && 3480 if (iwl_queue_space(&txq->q) > txq->q.low_mark &&
3496 (txq_id >= 0) && priv->mac80211_registered) 3481 (txq_id >= 0) && priv->mac80211_registered)
3497 ieee80211_wake_queue(priv->hw, txq_id); 3482 ieee80211_wake_queue(priv->hw, txq_id);
3498 if (tid != MAX_TID_COUNT) 3483 if (tid != MAX_TID_COUNT)
3499 iwl_txq_check_empty(priv, sta_id, tid, txq_id); 3484 iwl_txq_check_empty(priv, sta_id, tid, txq_id);
3485 }
3500 } 3486 }
3501 }
3502#endif /* CONFIG_IWL4965_HT */
3503 3487
3504 if (iwl_check_bits(status, TX_ABORT_REQUIRED_MSK)) 3488 if (iwl_check_bits(status, TX_ABORT_REQUIRED_MSK))
3505 IWL_ERROR("TODO: Implement Tx ABORT REQUIRED!!!\n"); 3489 IWL_ERROR("TODO: Implement Tx ABORT REQUIRED!!!\n");
@@ -3513,10 +3497,8 @@ static void iwl4965_rx_handler_setup(struct iwl_priv *priv)
3513 priv->rx_handlers[REPLY_RX] = iwl4965_rx_reply_rx; 3497 priv->rx_handlers[REPLY_RX] = iwl4965_rx_reply_rx;
3514 /* Tx response */ 3498 /* Tx response */
3515 priv->rx_handlers[REPLY_TX] = iwl4965_rx_reply_tx; 3499 priv->rx_handlers[REPLY_TX] = iwl4965_rx_reply_tx;
3516 3500 /* block ack */
3517#ifdef CONFIG_IWL4965_HT
3518 priv->rx_handlers[REPLY_COMPRESSED_BA] = iwl4965_rx_reply_compressed_ba; 3501 priv->rx_handlers[REPLY_COMPRESSED_BA] = iwl4965_rx_reply_compressed_ba;
3519#endif /* CONFIG_IWL4965_HT */
3520} 3502}
3521 3503
3522void iwl4965_hw_setup_deferred_work(struct iwl_priv *priv) 3504void iwl4965_hw_setup_deferred_work(struct iwl_priv *priv)
@@ -3558,10 +3540,8 @@ static struct iwl_lib_ops iwl4965_lib = {
3558 .shared_mem_rx_idx = iwl4965_shared_mem_rx_idx, 3540 .shared_mem_rx_idx = iwl4965_shared_mem_rx_idx,
3559 .txq_update_byte_cnt_tbl = iwl4965_txq_update_byte_cnt_tbl, 3541 .txq_update_byte_cnt_tbl = iwl4965_txq_update_byte_cnt_tbl,
3560 .txq_set_sched = iwl4965_txq_set_sched, 3542 .txq_set_sched = iwl4965_txq_set_sched,
3561#ifdef CONFIG_IWL4965_HT
3562 .txq_agg_enable = iwl4965_txq_agg_enable, 3543 .txq_agg_enable = iwl4965_txq_agg_enable,
3563 .txq_agg_disable = iwl4965_txq_agg_disable, 3544 .txq_agg_disable = iwl4965_txq_agg_disable,
3564#endif
3565 .rx_handler_setup = iwl4965_rx_handler_setup, 3545 .rx_handler_setup = iwl4965_rx_handler_setup,
3566 .is_valid_rtc_data_addr = iwl4965_hw_valid_rtc_data_addr, 3546 .is_valid_rtc_data_addr = iwl4965_hw_valid_rtc_data_addr,
3567 .alive_notify = iwl4965_alive_notify, 3547 .alive_notify = iwl4965_alive_notify,
diff --git a/drivers/net/wireless/iwlwifi/iwl-5000.c b/drivers/net/wireless/iwlwifi/iwl-5000.c
index 7e525ad45135..65484779bd3d 100644
--- a/drivers/net/wireless/iwlwifi/iwl-5000.c
+++ b/drivers/net/wireless/iwlwifi/iwl-5000.c
@@ -1136,12 +1136,10 @@ static void iwl5000_rx_reply_tx(struct iwl_priv *priv,
1136 struct ieee80211_tx_info *info; 1136 struct ieee80211_tx_info *info;
1137 struct iwl5000_tx_resp *tx_resp = (void *)&pkt->u.raw[0]; 1137 struct iwl5000_tx_resp *tx_resp = (void *)&pkt->u.raw[0];
1138 u32 status = le16_to_cpu(tx_resp->status.status); 1138 u32 status = le16_to_cpu(tx_resp->status.status);
1139#ifdef CONFIG_IWL4965_HT
1140 int tid = MAX_TID_COUNT, sta_id = IWL_INVALID_STATION; 1139 int tid = MAX_TID_COUNT, sta_id = IWL_INVALID_STATION;
1141 u16 fc; 1140 u16 fc;
1142 struct ieee80211_hdr *hdr; 1141 struct ieee80211_hdr *hdr;
1143 u8 *qc = NULL; 1142 u8 *qc = NULL;
1144#endif
1145 1143
1146 if ((index >= txq->q.n_bd) || (iwl_queue_used(&txq->q, index) == 0)) { 1144 if ((index >= txq->q.n_bd) || (iwl_queue_used(&txq->q, index) == 0)) {
1147 IWL_ERROR("Read index for DMA queue txq_id (%d) index %d " 1145 IWL_ERROR("Read index for DMA queue txq_id (%d) index %d "
@@ -1154,7 +1152,6 @@ static void iwl5000_rx_reply_tx(struct iwl_priv *priv,
1154 info = IEEE80211_SKB_CB(txq->txb[txq->q.read_ptr].skb[0]); 1152 info = IEEE80211_SKB_CB(txq->txb[txq->q.read_ptr].skb[0]);
1155 memset(&info->status, 0, sizeof(info->status)); 1153 memset(&info->status, 0, sizeof(info->status));
1156 1154
1157#ifdef CONFIG_IWL4965_HT
1158 hdr = iwl_tx_queue_get_hdr(priv, txq_id, index); 1155 hdr = iwl_tx_queue_get_hdr(priv, txq_id, index);
1159 fc = le16_to_cpu(hdr->frame_control); 1156 fc = le16_to_cpu(hdr->frame_control);
1160 if (ieee80211_is_qos_data(fc)) { 1157 if (ieee80211_is_qos_data(fc)) {
@@ -1205,32 +1202,31 @@ static void iwl5000_rx_reply_tx(struct iwl_priv *priv,
1205 iwl_txq_check_empty(priv, sta_id, tid, txq_id); 1202 iwl_txq_check_empty(priv, sta_id, tid, txq_id);
1206 } 1203 }
1207 } else { 1204 } else {
1208#endif /* CONFIG_IWL4965_HT */ 1205 info->status.retry_count = tx_resp->failure_frame;
1209 1206 info->flags =
1210 info->status.retry_count = tx_resp->failure_frame; 1207 iwl_is_tx_success(status) ? IEEE80211_TX_STAT_ACK : 0;
1211 info->flags = iwl_is_tx_success(status) ? IEEE80211_TX_STAT_ACK : 0; 1208 iwl4965_hwrate_to_tx_control(priv,
1212 iwl4965_hwrate_to_tx_control(priv, le32_to_cpu(tx_resp->rate_n_flags), 1209 le32_to_cpu(tx_resp->rate_n_flags),
1213 info); 1210 info);
1214 1211
1215 IWL_DEBUG_TX("Tx queue %d Status %s (0x%08x) rate_n_flags 0x%x " 1212 IWL_DEBUG_TX("Tx queue %d Status %s (0x%08x) rate_n_flags "
1216 "retries %d\n", txq_id, iwl_get_tx_fail_reason(status), 1213 "0x%x retries %d\n", txq_id,
1217 status, le32_to_cpu(tx_resp->rate_n_flags), 1214 iwl_get_tx_fail_reason(status),
1218 tx_resp->failure_frame); 1215 status, le32_to_cpu(tx_resp->rate_n_flags),
1219 1216 tx_resp->failure_frame);
1220 IWL_DEBUG_TX_REPLY("Tx queue reclaim %d\n", index); 1217
1221#ifdef CONFIG_IWL4965_HT 1218 IWL_DEBUG_TX_REPLY("Tx queue reclaim %d\n", index);
1222 if (index != -1) { 1219 if (index != -1) {
1223 int freed = iwl_tx_queue_reclaim(priv, txq_id, index); 1220 int freed = iwl_tx_queue_reclaim(priv, txq_id, index);
1224 if (tid != MAX_TID_COUNT) 1221 if (tid != MAX_TID_COUNT)
1225 priv->stations[sta_id].tid[tid].tfds_in_queue -= freed; 1222 priv->stations[sta_id].tid[tid].tfds_in_queue -= freed;
1226 if (iwl_queue_space(&txq->q) > txq->q.low_mark && 1223 if (iwl_queue_space(&txq->q) > txq->q.low_mark &&
1227 (txq_id >= 0) && priv->mac80211_registered) 1224 (txq_id >= 0) && priv->mac80211_registered)
1228 ieee80211_wake_queue(priv->hw, txq_id); 1225 ieee80211_wake_queue(priv->hw, txq_id);
1229 if (tid != MAX_TID_COUNT) 1226 if (tid != MAX_TID_COUNT)
1230 iwl_txq_check_empty(priv, sta_id, tid, txq_id); 1227 iwl_txq_check_empty(priv, sta_id, tid, txq_id);
1228 }
1231 } 1229 }
1232 }
1233#endif /* CONFIG_IWL4965_HT */
1234 1230
1235 if (iwl_check_bits(status, TX_ABORT_REQUIRED_MSK)) 1231 if (iwl_check_bits(status, TX_ABORT_REQUIRED_MSK))
1236 IWL_ERROR("TODO: Implement Tx ABORT REQUIRED!!!\n"); 1232 IWL_ERROR("TODO: Implement Tx ABORT REQUIRED!!!\n");
diff --git a/drivers/net/wireless/iwlwifi/iwl-core.c b/drivers/net/wireless/iwlwifi/iwl-core.c
index 61716ba90427..6c7617c1bb91 100644
--- a/drivers/net/wireless/iwlwifi/iwl-core.c
+++ b/drivers/net/wireless/iwlwifi/iwl-core.c
@@ -321,7 +321,6 @@ void iwl_reset_qos(struct iwl_priv *priv)
321} 321}
322EXPORT_SYMBOL(iwl_reset_qos); 322EXPORT_SYMBOL(iwl_reset_qos);
323 323
324#ifdef CONFIG_IWL4965_HT
325#define MAX_BIT_RATE_40_MHZ 0x96; /* 150 Mbps */ 324#define MAX_BIT_RATE_40_MHZ 0x96; /* 150 Mbps */
326#define MAX_BIT_RATE_20_MHZ 0x48; /* 72 Mbps */ 325#define MAX_BIT_RATE_20_MHZ 0x48; /* 72 Mbps */
327static void iwlcore_init_ht_hw_capab(const struct iwl_priv *priv, 326static void iwlcore_init_ht_hw_capab(const struct iwl_priv *priv,
@@ -374,13 +373,6 @@ static void iwlcore_init_ht_hw_capab(const struct iwl_priv *priv,
374 ht_info->supp_mcs_set[12] |= ((tx_chains_num - 1) << 2); 373 ht_info->supp_mcs_set[12] |= ((tx_chains_num - 1) << 2);
375 } 374 }
376} 375}
377#else
378static inline void iwlcore_init_ht_hw_capab(const struct iwl_priv *priv,
379 struct ieee80211_ht_info *ht_info,
380 enum ieee80211_band band)
381{
382}
383#endif /* CONFIG_IWL4965_HT */
384 376
385static void iwlcore_init_hw_rates(struct iwl_priv *priv, 377static void iwlcore_init_hw_rates(struct iwl_priv *priv,
386 struct ieee80211_rate *rates) 378 struct ieee80211_rate *rates)
@@ -553,7 +545,6 @@ static void iwlcore_free_geos(struct iwl_priv *priv)
553 clear_bit(STATUS_GEO_CONFIGURED, &priv->status); 545 clear_bit(STATUS_GEO_CONFIGURED, &priv->status);
554} 546}
555 547
556#ifdef CONFIG_IWL4965_HT
557static u8 is_single_rx_stream(struct iwl_priv *priv) 548static u8 is_single_rx_stream(struct iwl_priv *priv)
558{ 549{
559 return !priv->current_ht_config.is_ht || 550 return !priv->current_ht_config.is_ht ||
@@ -660,13 +651,6 @@ void iwl_set_rxon_ht(struct iwl_priv *priv, struct iwl_ht_info *ht_info)
660} 651}
661EXPORT_SYMBOL(iwl_set_rxon_ht); 652EXPORT_SYMBOL(iwl_set_rxon_ht);
662 653
663#else
664static inline u8 is_single_rx_stream(struct iwl_priv *priv)
665{
666 return 1;
667}
668#endif /*CONFIG_IWL4965_HT */
669
670/* 654/*
671 * Determine how many receiver/antenna chains to use. 655 * Determine how many receiver/antenna chains to use.
672 * More provides better reception via diversity. Fewer saves power. 656 * More provides better reception via diversity. Fewer saves power.
@@ -791,10 +775,8 @@ int iwl_setup_mac(struct iwl_priv *priv)
791 IEEE80211_HW_NOISE_DBM; 775 IEEE80211_HW_NOISE_DBM;
792 /* Default value; 4 EDCA QOS priorities */ 776 /* Default value; 4 EDCA QOS priorities */
793 hw->queues = 4; 777 hw->queues = 4;
794#ifdef CONFIG_IWL4965_HT
795 /* Enhanced value; more queues, to support 11n aggregation */ 778 /* Enhanced value; more queues, to support 11n aggregation */
796 hw->ampdu_queues = 12; 779 hw->ampdu_queues = 12;
797#endif /* CONFIG_IWL4965_HT */
798 780
799 hw->conf.beacon_int = 100; 781 hw->conf.beacon_int = 100;
800 782
diff --git a/drivers/net/wireless/iwlwifi/iwl-core.h b/drivers/net/wireless/iwlwifi/iwl-core.h
index 6b5af7afbb25..d9c5bd13e781 100644
--- a/drivers/net/wireless/iwlwifi/iwl-core.h
+++ b/drivers/net/wireless/iwlwifi/iwl-core.h
@@ -111,13 +111,11 @@ struct iwl_lib_ops {
111 void (*txq_inval_byte_cnt_tbl)(struct iwl_priv *priv, 111 void (*txq_inval_byte_cnt_tbl)(struct iwl_priv *priv,
112 struct iwl_tx_queue *txq); 112 struct iwl_tx_queue *txq);
113 void (*txq_set_sched)(struct iwl_priv *priv, u32 mask); 113 void (*txq_set_sched)(struct iwl_priv *priv, u32 mask);
114#ifdef CONFIG_IWL4965_HT
115 /* aggregations */ 114 /* aggregations */
116 int (*txq_agg_enable)(struct iwl_priv *priv, int txq_id, int tx_fifo, 115 int (*txq_agg_enable)(struct iwl_priv *priv, int txq_id, int tx_fifo,
117 int sta_id, int tid, u16 ssn_idx); 116 int sta_id, int tid, u16 ssn_idx);
118 int (*txq_agg_disable)(struct iwl_priv *priv, u16 txq_id, u16 ssn_idx, 117 int (*txq_agg_disable)(struct iwl_priv *priv, u16 txq_id, u16 ssn_idx,
119 u8 tx_fifo); 118 u8 tx_fifo);
120#endif /* CONFIG_IWL4965_HT */
121 /* setup Rx handler */ 119 /* setup Rx handler */
122 void (*rx_handler_setup)(struct iwl_priv *priv); 120 void (*rx_handler_setup)(struct iwl_priv *priv);
123 /* alive notification after init uCode load */ 121 /* alive notification after init uCode load */
@@ -233,11 +231,9 @@ void iwl_hw_txq_ctx_free(struct iwl_priv *priv);
233int iwl_hw_txq_attach_buf_to_tfd(struct iwl_priv *priv, void *tfd, 231int iwl_hw_txq_attach_buf_to_tfd(struct iwl_priv *priv, void *tfd,
234 dma_addr_t addr, u16 len); 232 dma_addr_t addr, u16 len);
235int iwl_txq_update_write_ptr(struct iwl_priv *priv, struct iwl_tx_queue *txq); 233int iwl_txq_update_write_ptr(struct iwl_priv *priv, struct iwl_tx_queue *txq);
236#ifdef CONFIG_IWL4965_HT
237int iwl_tx_agg_start(struct iwl_priv *priv, const u8 *ra, u16 tid, u16 *ssn); 234int iwl_tx_agg_start(struct iwl_priv *priv, const u8 *ra, u16 tid, u16 *ssn);
238int iwl_tx_agg_stop(struct iwl_priv *priv , const u8 *ra, u16 tid); 235int iwl_tx_agg_stop(struct iwl_priv *priv , const u8 *ra, u16 tid);
239int iwl_txq_check_empty(struct iwl_priv *priv, int sta_id, u8 tid, int txq_id); 236int iwl_txq_check_empty(struct iwl_priv *priv, int sta_id, u8 tid, int txq_id);
240#endif
241 237
242/***************************************************** 238/*****************************************************
243 * S e n d i n g H o s t C o m m a n d s * 239 * S e n d i n g H o s t C o m m a n d s *
diff --git a/drivers/net/wireless/iwlwifi/iwl-debugfs.c b/drivers/net/wireless/iwlwifi/iwl-debugfs.c
index 29e16ba69cdb..d5f9df176bab 100644
--- a/drivers/net/wireless/iwlwifi/iwl-debugfs.c
+++ b/drivers/net/wireless/iwlwifi/iwl-debugfs.c
@@ -255,21 +255,18 @@ static ssize_t iwl_dbgfs_stations_read(struct file *file, char __user *user_buf,
255 pos += scnprintf(buf + pos, bufsz - pos, "tid data:\n"); 255 pos += scnprintf(buf + pos, bufsz - pos, "tid data:\n");
256 pos += scnprintf(buf + pos, bufsz - pos, 256 pos += scnprintf(buf + pos, bufsz - pos,
257 "seq_num\t\ttxq_id"); 257 "seq_num\t\ttxq_id");
258#ifdef CONFIG_IWL4965_HT
259 pos += scnprintf(buf + pos, bufsz - pos, 258 pos += scnprintf(buf + pos, bufsz - pos,
260 "\tframe_count\twait_for_ba\t"); 259 "\tframe_count\twait_for_ba\t");
261 pos += scnprintf(buf + pos, bufsz - pos, 260 pos += scnprintf(buf + pos, bufsz - pos,
262 "start_idx\tbitmap0\t"); 261 "start_idx\tbitmap0\t");
263 pos += scnprintf(buf + pos, bufsz - pos, 262 pos += scnprintf(buf + pos, bufsz - pos,
264 "bitmap1\trate_n_flags"); 263 "bitmap1\trate_n_flags");
265#endif
266 pos += scnprintf(buf + pos, bufsz - pos, "\n"); 264 pos += scnprintf(buf + pos, bufsz - pos, "\n");
267 265
268 for (j = 0; j < MAX_TID_COUNT; j++) { 266 for (j = 0; j < MAX_TID_COUNT; j++) {
269 pos += scnprintf(buf + pos, bufsz - pos, 267 pos += scnprintf(buf + pos, bufsz - pos,
270 "[%d]:\t\t%u", j, 268 "[%d]:\t\t%u", j,
271 station->tid[j].seq_number); 269 station->tid[j].seq_number);
272#ifdef CONFIG_IWL4965_HT
273 pos += scnprintf(buf + pos, bufsz - pos, 270 pos += scnprintf(buf + pos, bufsz - pos,
274 "\t%u\t\t%u\t\t%u\t\t", 271 "\t%u\t\t%u\t\t%u\t\t",
275 station->tid[j].agg.txq_id, 272 station->tid[j].agg.txq_id,
@@ -280,7 +277,6 @@ static ssize_t iwl_dbgfs_stations_read(struct file *file, char __user *user_buf,
280 station->tid[j].agg.start_idx, 277 station->tid[j].agg.start_idx,
281 (unsigned long long)station->tid[j].agg.bitmap, 278 (unsigned long long)station->tid[j].agg.bitmap,
282 station->tid[j].agg.rate_n_flags); 279 station->tid[j].agg.rate_n_flags);
283#endif
284 pos += scnprintf(buf + pos, bufsz - pos, "\n"); 280 pos += scnprintf(buf + pos, bufsz - pos, "\n");
285 } 281 }
286 pos += scnprintf(buf + pos, bufsz - pos, "\n"); 282 pos += scnprintf(buf + pos, bufsz - pos, "\n");
diff --git a/drivers/net/wireless/iwlwifi/iwl-dev.h b/drivers/net/wireless/iwlwifi/iwl-dev.h
index 802f1a12b1aa..59a6960f41b3 100644
--- a/drivers/net/wireless/iwlwifi/iwl-dev.h
+++ b/drivers/net/wireless/iwlwifi/iwl-dev.h
@@ -401,7 +401,6 @@ struct iwl_rx_queue {
401#define IWL_INVALID_RATE 0xFF 401#define IWL_INVALID_RATE 0xFF
402#define IWL_INVALID_VALUE -1 402#define IWL_INVALID_VALUE -1
403 403
404#ifdef CONFIG_IWL4965_HT
405/** 404/**
406 * struct iwl_ht_agg -- aggregation status while waiting for block-ack 405 * struct iwl_ht_agg -- aggregation status while waiting for block-ack
407 * @txq_id: Tx queue used for Tx attempt 406 * @txq_id: Tx queue used for Tx attempt
@@ -430,14 +429,11 @@ struct iwl_ht_agg {
430 u8 state; 429 u8 state;
431}; 430};
432 431
433#endif /* CONFIG_IWL4965_HT */
434 432
435struct iwl_tid_data { 433struct iwl_tid_data {
436 u16 seq_number; 434 u16 seq_number;
437 u16 tfds_in_queue; 435 u16 tfds_in_queue;
438#ifdef CONFIG_IWL4965_HT
439 struct iwl_ht_agg agg; 436 struct iwl_ht_agg agg;
440#endif /* CONFIG_IWL4965_HT */
441}; 437};
442 438
443struct iwl_hw_key { 439struct iwl_hw_key {
@@ -752,7 +748,6 @@ extern void iwl4965_hwrate_to_tx_control(struct iwl_priv *priv,
752 u32 rate_n_flags, 748 u32 rate_n_flags,
753 struct ieee80211_tx_info *info); 749 struct ieee80211_tx_info *info);
754 750
755#ifdef CONFIG_IWL4965_HT
756extern void iwl4965_init_ht_hw_capab(const struct iwl_priv *priv, 751extern void iwl4965_init_ht_hw_capab(const struct iwl_priv *priv,
757 struct ieee80211_ht_info *ht_info, 752 struct ieee80211_ht_info *ht_info,
758 enum ieee80211_band band); 753 enum ieee80211_band band);
@@ -763,12 +758,7 @@ int iwl4965_mac_ampdu_action(struct ieee80211_hw *hw,
763 const u8 *addr, u16 tid, u16 *ssn); 758 const u8 *addr, u16 tid, u16 *ssn);
764int iwl4965_check_empty_hw_queue(struct iwl_priv *priv, int sta_id, 759int iwl4965_check_empty_hw_queue(struct iwl_priv *priv, int sta_id,
765 u8 tid, int txq_id); 760 u8 tid, int txq_id);
766#else
767static inline void iwl4965_init_ht_hw_capab(const struct iwl_priv *priv,
768 struct ieee80211_ht_info *ht_info,
769 enum ieee80211_band band) {}
770 761
771#endif /*CONFIG_IWL4965_HT */
772/* Structures, enum, and defines specific to the 4965 */ 762/* Structures, enum, and defines specific to the 4965 */
773 763
774#define IWL_KW_SIZE 0x1000 /*4k */ 764#define IWL_KW_SIZE 0x1000 /*4k */
@@ -1073,9 +1063,7 @@ struct iwl_priv {
1073 __le16 sensitivity_tbl[HD_TABLE_SIZE]; 1063 __le16 sensitivity_tbl[HD_TABLE_SIZE];
1074#endif /*CONFIG_IWLWIFI_RUN_TIME_CALIB*/ 1064#endif /*CONFIG_IWLWIFI_RUN_TIME_CALIB*/
1075 1065
1076#ifdef CONFIG_IWL4965_HT
1077 struct iwl_ht_info current_ht_config; 1066 struct iwl_ht_info current_ht_config;
1078#endif
1079 u8 last_phy_res[100]; 1067 u8 last_phy_res[100];
1080 1068
1081 /* Rate scaling data */ 1069 /* Rate scaling data */
@@ -1250,7 +1238,6 @@ static inline const char *iwl_get_tx_fail_reason(u32 status) { return ""; }
1250#endif 1238#endif
1251 1239
1252 1240
1253#ifdef CONFIG_IWL4965_HT
1254static inline int iwl_get_ra_sta_id(struct iwl_priv *priv, 1241static inline int iwl_get_ra_sta_id(struct iwl_priv *priv,
1255 struct ieee80211_hdr *hdr) 1242 struct ieee80211_hdr *hdr)
1256{ 1243{
@@ -1270,7 +1257,6 @@ static inline struct ieee80211_hdr *iwl_tx_queue_get_hdr(struct iwl_priv *priv,
1270 txb[idx].skb[0]->data; 1257 txb[idx].skb[0]->data;
1271 return NULL; 1258 return NULL;
1272} 1259}
1273#endif
1274 1260
1275 1261
1276static inline int iwl_is_associated(struct iwl_priv *priv) 1262static inline int iwl_is_associated(struct iwl_priv *priv)
diff --git a/drivers/net/wireless/iwlwifi/iwl-sta.c b/drivers/net/wireless/iwlwifi/iwl-sta.c
index 983f10760fb0..b3caed487f03 100644
--- a/drivers/net/wireless/iwlwifi/iwl-sta.c
+++ b/drivers/net/wireless/iwlwifi/iwl-sta.c
@@ -156,8 +156,6 @@ int iwl_send_add_sta(struct iwl_priv *priv,
156} 156}
157EXPORT_SYMBOL(iwl_send_add_sta); 157EXPORT_SYMBOL(iwl_send_add_sta);
158 158
159#ifdef CONFIG_IWL4965_HT
160
161static void iwl_set_ht_add_station(struct iwl_priv *priv, u8 index, 159static void iwl_set_ht_add_station(struct iwl_priv *priv, u8 index,
162 struct ieee80211_ht_info *sta_ht_inf) 160 struct ieee80211_ht_info *sta_ht_inf)
163{ 161{
@@ -202,12 +200,6 @@ static void iwl_set_ht_add_station(struct iwl_priv *priv, u8 index,
202 done: 200 done:
203 return; 201 return;
204} 202}
205#else
206static inline void iwl_set_ht_add_station(struct iwl_priv *priv, u8 index,
207 struct ieee80211_ht_info *sta_ht_info)
208{
209}
210#endif
211 203
212/** 204/**
213 * iwl_add_station_flags - Add station to tables in driver and device 205 * iwl_add_station_flags - Add station to tables in driver and device
@@ -842,7 +834,6 @@ int iwl_rxon_add_station(struct iwl_priv *priv, const u8 *addr, int is_ap)
842 u8 sta_id; 834 u8 sta_id;
843 835
844 /* Add station to device's station table */ 836 /* Add station to device's station table */
845#ifdef CONFIG_IWL4965_HT
846 struct ieee80211_conf *conf = &priv->hw->conf; 837 struct ieee80211_conf *conf = &priv->hw->conf;
847 struct ieee80211_ht_info *cur_ht_config = &conf->ht_conf; 838 struct ieee80211_ht_info *cur_ht_config = &conf->ht_conf;
848 839
@@ -852,7 +843,6 @@ int iwl_rxon_add_station(struct iwl_priv *priv, const u8 *addr, int is_ap)
852 sta_id = iwl_add_station_flags(priv, addr, is_ap, 843 sta_id = iwl_add_station_flags(priv, addr, is_ap,
853 0, cur_ht_config); 844 0, cur_ht_config);
854 else 845 else
855#endif /* CONFIG_IWL4965_HT */
856 sta_id = iwl_add_station_flags(priv, addr, is_ap, 846 sta_id = iwl_add_station_flags(priv, addr, is_ap,
857 0, NULL); 847 0, NULL);
858 848
diff --git a/drivers/net/wireless/iwlwifi/iwl-tx.c b/drivers/net/wireless/iwlwifi/iwl-tx.c
index cfe6f4b233dd..1aa19f4a8bcb 100644
--- a/drivers/net/wireless/iwlwifi/iwl-tx.c
+++ b/drivers/net/wireless/iwlwifi/iwl-tx.c
@@ -36,8 +36,6 @@
36#include "iwl-io.h" 36#include "iwl-io.h"
37#include "iwl-helpers.h" 37#include "iwl-helpers.h"
38 38
39#ifdef CONFIG_IWL4965_HT
40
41static const u16 default_tid_to_tx_fifo[] = { 39static const u16 default_tid_to_tx_fifo[] = {
42 IWL_TX_FIFO_AC1, 40 IWL_TX_FIFO_AC1,
43 IWL_TX_FIFO_AC0, 41 IWL_TX_FIFO_AC0,
@@ -58,9 +56,6 @@ static const u16 default_tid_to_tx_fifo[] = {
58 IWL_TX_FIFO_AC3 56 IWL_TX_FIFO_AC3
59}; 57};
60 58
61#endif /*CONFIG_IWL4965_HT */
62
63
64 59
65/** 60/**
66 * iwl_hw_txq_free_tfd - Free all chunks referenced by TFD [txq->q.read_ptr] 61 * iwl_hw_txq_free_tfd - Free all chunks referenced by TFD [txq->q.read_ptr]
@@ -848,12 +843,10 @@ int iwl_tx_skb(struct iwl_priv *priv, struct sk_buff *skb)
848 (hdr->seq_ctrl & 843 (hdr->seq_ctrl &
849 __constant_cpu_to_le16(IEEE80211_SCTL_FRAG)); 844 __constant_cpu_to_le16(IEEE80211_SCTL_FRAG));
850 seq_number += 0x10; 845 seq_number += 0x10;
851#ifdef CONFIG_IWL4965_HT
852 /* aggregation is on for this <sta,tid> */ 846 /* aggregation is on for this <sta,tid> */
853 if (info->flags & IEEE80211_TX_CTL_AMPDU) 847 if (info->flags & IEEE80211_TX_CTL_AMPDU)
854 txq_id = priv->stations[sta_id].tid[tid].agg.txq_id; 848 txq_id = priv->stations[sta_id].tid[tid].agg.txq_id;
855 priv->stations[sta_id].tid[tid].tfds_in_queue++; 849 priv->stations[sta_id].tid[tid].tfds_in_queue++;
856#endif /* CONFIG_IWL4965_HT */
857 } 850 }
858 851
859 /* Descriptor for chosen Tx queue */ 852 /* Descriptor for chosen Tx queue */
@@ -1196,8 +1189,6 @@ void iwl_tx_cmd_complete(struct iwl_priv *priv, struct iwl_rx_mem_buffer *rxb)
1196} 1189}
1197EXPORT_SYMBOL(iwl_tx_cmd_complete); 1190EXPORT_SYMBOL(iwl_tx_cmd_complete);
1198 1191
1199
1200#ifdef CONFIG_IWL4965_HT
1201/* 1192/*
1202 * Find first available (lowest unused) Tx Queue, mark it "active". 1193 * Find first available (lowest unused) Tx Queue, mark it "active".
1203 * Called only when finding queue for aggregation. 1194 * Called only when finding queue for aggregation.
@@ -1359,7 +1350,6 @@ int iwl_txq_check_empty(struct iwl_priv *priv, int sta_id, u8 tid, int txq_id)
1359 return 0; 1350 return 0;
1360} 1351}
1361EXPORT_SYMBOL(iwl_txq_check_empty); 1352EXPORT_SYMBOL(iwl_txq_check_empty);
1362#endif /* CONFIG_IWL4965_HT */
1363 1353
1364#ifdef CONFIG_IWLWIF_DEBUG 1354#ifdef CONFIG_IWLWIF_DEBUG
1365#define TX_STATUS_ENTRY(x) case TX_STATUS_FAIL_ ## x: return #x 1355#define TX_STATUS_ENTRY(x) case TX_STATUS_FAIL_ ## x: return #x
diff --git a/drivers/net/wireless/iwlwifi/iwl4965-base.c b/drivers/net/wireless/iwlwifi/iwl4965-base.c
index c71daec8c746..88229e25837a 100644
--- a/drivers/net/wireless/iwlwifi/iwl4965-base.c
+++ b/drivers/net/wireless/iwlwifi/iwl4965-base.c
@@ -634,7 +634,6 @@ static u16 iwl4965_supported_rate_to_ie(u8 *ie, u16 supported_rate,
634 return ret_rates; 634 return ret_rates;
635} 635}
636 636
637#ifdef CONFIG_IWL4965_HT
638static void iwl4965_ht_conf(struct iwl_priv *priv, 637static void iwl4965_ht_conf(struct iwl_priv *priv,
639 struct ieee80211_bss_conf *bss_conf) 638 struct ieee80211_bss_conf *bss_conf)
640{ 639{
@@ -707,17 +706,6 @@ static void iwl_ht_cap_to_ie(const struct ieee80211_supported_band *sband,
707 IEEE80211_HT_CAP_AMPDU_DENSITY); 706 IEEE80211_HT_CAP_AMPDU_DENSITY);
708 *left -= sizeof(struct ieee80211_ht_cap); 707 *left -= sizeof(struct ieee80211_ht_cap);
709} 708}
710#else
711static inline void iwl4965_ht_conf(struct iwl_priv *priv,
712 struct ieee80211_bss_conf *bss_conf)
713{
714}
715static void iwl_ht_cap_to_ie(const struct ieee80211_supported_band *sband,
716 u8 *pos, int *left)
717{
718}
719#endif
720
721 709
722/** 710/**
723 * iwl4965_fill_probe_req - fill in all required fields and IE for probe request 711 * iwl4965_fill_probe_req - fill in all required fields and IE for probe request
@@ -862,10 +850,8 @@ static void iwl4965_activate_qos(struct iwl_priv *priv, u8 force)
862 priv->qos_data.def_qos_parm.qos_flags |= 850 priv->qos_data.def_qos_parm.qos_flags |=
863 QOS_PARAM_FLG_UPDATE_EDCA_MSK; 851 QOS_PARAM_FLG_UPDATE_EDCA_MSK;
864 852
865#ifdef CONFIG_IWL4965_HT
866 if (priv->current_ht_config.is_ht) 853 if (priv->current_ht_config.is_ht)
867 priv->qos_data.def_qos_parm.qos_flags |= QOS_PARAM_FLG_TGN_MSK; 854 priv->qos_data.def_qos_parm.qos_flags |= QOS_PARAM_FLG_TGN_MSK;
868#endif /* CONFIG_IWL4965_HT */
869 855
870 spin_unlock_irqrestore(&priv->lock, flags); 856 spin_unlock_irqrestore(&priv->lock, flags);
871 857
@@ -3515,10 +3501,9 @@ static void iwl4965_post_associate(struct iwl_priv *priv)
3515 3501
3516 priv->staging_rxon.filter_flags |= RXON_FILTER_ASSOC_MSK; 3502 priv->staging_rxon.filter_flags |= RXON_FILTER_ASSOC_MSK;
3517 3503
3518#ifdef CONFIG_IWL4965_HT
3519 if (priv->current_ht_config.is_ht) 3504 if (priv->current_ht_config.is_ht)
3520 iwl_set_rxon_ht(priv, &priv->current_ht_config); 3505 iwl_set_rxon_ht(priv, &priv->current_ht_config);
3521#endif /* CONFIG_IWL4965_HT*/ 3506
3522 iwl_set_rxon_chain(priv); 3507 iwl_set_rxon_chain(priv);
3523 priv->staging_rxon.assoc_id = cpu_to_le16(priv->assoc_id); 3508 priv->staging_rxon.assoc_id = cpu_to_le16(priv->assoc_id);
3524 3509
@@ -3854,7 +3839,6 @@ static int iwl4965_mac_config(struct ieee80211_hw *hw, struct ieee80211_conf *co
3854 3839
3855 spin_lock_irqsave(&priv->lock, flags); 3840 spin_lock_irqsave(&priv->lock, flags);
3856 3841
3857#ifdef CONFIG_IWL4965_HT
3858 /* if we are switching from ht to 2.4 clear flags 3842 /* if we are switching from ht to 2.4 clear flags
3859 * from any ht related info since 2.4 does not 3843 * from any ht related info since 2.4 does not
3860 * support ht */ 3844 * support ht */
@@ -3864,7 +3848,6 @@ static int iwl4965_mac_config(struct ieee80211_hw *hw, struct ieee80211_conf *co
3864#endif 3848#endif
3865 ) 3849 )
3866 priv->staging_rxon.flags = 0; 3850 priv->staging_rxon.flags = 0;
3867#endif /* CONFIG_IWL4965_HT */
3868 3851
3869 iwl_set_rxon_channel(priv, conf->channel->band, channel); 3852 iwl_set_rxon_channel(priv, conf->channel->band, channel);
3870 3853
@@ -4489,11 +4472,9 @@ static void iwl4965_mac_reset_tsf(struct ieee80211_hw *hw)
4489 IWL_DEBUG_MAC80211("enter\n"); 4472 IWL_DEBUG_MAC80211("enter\n");
4490 4473
4491 priv->lq_mngr.lq_ready = 0; 4474 priv->lq_mngr.lq_ready = 0;
4492#ifdef CONFIG_IWL4965_HT
4493 spin_lock_irqsave(&priv->lock, flags); 4475 spin_lock_irqsave(&priv->lock, flags);
4494 memset(&priv->current_ht_config, 0, sizeof(struct iwl_ht_info)); 4476 memset(&priv->current_ht_config, 0, sizeof(struct iwl_ht_info));
4495 spin_unlock_irqrestore(&priv->lock, flags); 4477 spin_unlock_irqrestore(&priv->lock, flags);
4496#endif /* CONFIG_IWL4965_HT */
4497 4478
4498 iwl_reset_qos(priv); 4479 iwl_reset_qos(priv);
4499 4480
@@ -5100,9 +5081,7 @@ static struct ieee80211_ops iwl4965_hw_ops = {
5100 .reset_tsf = iwl4965_mac_reset_tsf, 5081 .reset_tsf = iwl4965_mac_reset_tsf,
5101 .beacon_update = iwl4965_mac_beacon_update, 5082 .beacon_update = iwl4965_mac_beacon_update,
5102 .bss_info_changed = iwl4965_bss_info_changed, 5083 .bss_info_changed = iwl4965_bss_info_changed,
5103#ifdef CONFIG_IWL4965_HT
5104 .ampdu_action = iwl4965_mac_ampdu_action, 5084 .ampdu_action = iwl4965_mac_ampdu_action,
5105#endif /* CONFIG_IWL4965_HT */
5106 .hw_scan = iwl4965_mac_hw_scan 5085 .hw_scan = iwl4965_mac_hw_scan
5107}; 5086};
5108 5087