diff options
author | John W. Linville <linville@tuxdriver.com> | 2010-02-26 16:58:26 -0500 |
---|---|---|
committer | John W. Linville <linville@tuxdriver.com> | 2010-02-26 16:58:26 -0500 |
commit | 08b2cb0f0613a444368eadca0b67c906d91ab007 (patch) | |
tree | 34d99667748635457efc301732783f2558cee48f /drivers/net/wireless | |
parent | be41f5c7e3688a4555d7fbaa09578fd628bb4cdf (diff) | |
parent | ab9bdc34d68dafc6fea0ba733231f1c9696ce9c4 (diff) |
Merge branch 'wireless-next-2.6' of git://git.kernel.org/pub/scm/linux/kernel/git/iwlwifi/iwlwifi-2.6
Diffstat (limited to 'drivers/net/wireless')
-rw-r--r-- | drivers/net/wireless/iwlwifi/iwl-agn.c | 14 | ||||
-rw-r--r-- | drivers/net/wireless/iwlwifi/iwl-dev.h | 3 | ||||
-rw-r--r-- | drivers/net/wireless/iwlwifi/iwl-rx.c | 46 |
3 files changed, 1 insertions, 62 deletions
diff --git a/drivers/net/wireless/iwlwifi/iwl-agn.c b/drivers/net/wireless/iwlwifi/iwl-agn.c index c5b724eaf306..1fac015efc19 100644 --- a/drivers/net/wireless/iwlwifi/iwl-agn.c +++ b/drivers/net/wireless/iwlwifi/iwl-agn.c | |||
@@ -2941,21 +2941,10 @@ static int iwl_mac_ampdu_action(struct ieee80211_hw *hw, | |||
2941 | return ret; | 2941 | return ret; |
2942 | case IEEE80211_AMPDU_TX_START: | 2942 | case IEEE80211_AMPDU_TX_START: |
2943 | IWL_DEBUG_HT(priv, "start Tx\n"); | 2943 | IWL_DEBUG_HT(priv, "start Tx\n"); |
2944 | ret = iwl_tx_agg_start(priv, sta->addr, tid, ssn); | 2944 | return iwl_tx_agg_start(priv, sta->addr, tid, ssn); |
2945 | if (ret == 0) { | ||
2946 | priv->agg_tids_count++; | ||
2947 | IWL_DEBUG_HT(priv, "priv->agg_tids_count = %u\n", | ||
2948 | priv->agg_tids_count); | ||
2949 | } | ||
2950 | return ret; | ||
2951 | case IEEE80211_AMPDU_TX_STOP: | 2945 | case IEEE80211_AMPDU_TX_STOP: |
2952 | IWL_DEBUG_HT(priv, "stop Tx\n"); | 2946 | IWL_DEBUG_HT(priv, "stop Tx\n"); |
2953 | ret = iwl_tx_agg_stop(priv, sta->addr, tid); | 2947 | ret = iwl_tx_agg_stop(priv, sta->addr, tid); |
2954 | if ((ret == 0) && (priv->agg_tids_count > 0)) { | ||
2955 | priv->agg_tids_count--; | ||
2956 | IWL_DEBUG_HT(priv, "priv->agg_tids_count = %u\n", | ||
2957 | priv->agg_tids_count); | ||
2958 | } | ||
2959 | if (test_bit(STATUS_EXIT_PENDING, &priv->status)) | 2948 | if (test_bit(STATUS_EXIT_PENDING, &priv->status)) |
2960 | return 0; | 2949 | return 0; |
2961 | else | 2950 | else |
@@ -3376,7 +3365,6 @@ static int iwl_init_drv(struct iwl_priv *priv) | |||
3376 | priv->iw_mode = NL80211_IFTYPE_STATION; | 3365 | priv->iw_mode = NL80211_IFTYPE_STATION; |
3377 | priv->current_ht_config.smps = IEEE80211_SMPS_STATIC; | 3366 | priv->current_ht_config.smps = IEEE80211_SMPS_STATIC; |
3378 | priv->missed_beacon_threshold = IWL_MISSED_BEACON_THRESHOLD_DEF; | 3367 | priv->missed_beacon_threshold = IWL_MISSED_BEACON_THRESHOLD_DEF; |
3379 | priv->agg_tids_count = 0; | ||
3380 | 3368 | ||
3381 | /* initialize force reset */ | 3369 | /* initialize force reset */ |
3382 | priv->force_reset[IWL_RF_RESET].reset_duration = | 3370 | priv->force_reset[IWL_RF_RESET].reset_duration = |
diff --git a/drivers/net/wireless/iwlwifi/iwl-dev.h b/drivers/net/wireless/iwlwifi/iwl-dev.h index 7914d65a5a55..ab891b958042 100644 --- a/drivers/net/wireless/iwlwifi/iwl-dev.h +++ b/drivers/net/wireless/iwlwifi/iwl-dev.h | |||
@@ -1084,9 +1084,6 @@ struct iwl_priv { | |||
1084 | /* storing the jiffies when the plcp error rate is received */ | 1084 | /* storing the jiffies when the plcp error rate is received */ |
1085 | unsigned long plcp_jiffies; | 1085 | unsigned long plcp_jiffies; |
1086 | 1086 | ||
1087 | /* reporting the number of tids has AGG on. 0 means no AGGREGATION */ | ||
1088 | u8 agg_tids_count; | ||
1089 | |||
1090 | /* force reset */ | 1087 | /* force reset */ |
1091 | struct iwl_force_reset force_reset[IWL_MAX_FORCE_RESET]; | 1088 | struct iwl_force_reset force_reset[IWL_MAX_FORCE_RESET]; |
1092 | 1089 | ||
diff --git a/drivers/net/wireless/iwlwifi/iwl-rx.c b/drivers/net/wireless/iwlwifi/iwl-rx.c index 0d09f571e185..df257bc15f49 100644 --- a/drivers/net/wireless/iwlwifi/iwl-rx.c +++ b/drivers/net/wireless/iwlwifi/iwl-rx.c | |||
@@ -616,11 +616,6 @@ static void iwl_accumulative_statistics(struct iwl_priv *priv, | |||
616 | 616 | ||
617 | #define REG_RECALIB_PERIOD (60) | 617 | #define REG_RECALIB_PERIOD (60) |
618 | 618 | ||
619 | /* the threshold ratio of actual_ack_cnt to expected_ack_cnt in percent */ | ||
620 | #define ACK_CNT_RATIO (50) | ||
621 | #define BA_TIMEOUT_CNT (5) | ||
622 | #define BA_TIMEOUT_MAX (16) | ||
623 | |||
624 | #define PLCP_MSG "plcp_err exceeded %u, %u, %u, %u, %u, %d, %u mSecs\n" | 619 | #define PLCP_MSG "plcp_err exceeded %u, %u, %u, %u, %u, %d, %u mSecs\n" |
625 | void iwl_rx_statistics(struct iwl_priv *priv, | 620 | void iwl_rx_statistics(struct iwl_priv *priv, |
626 | struct iwl_rx_mem_buffer *rxb) | 621 | struct iwl_rx_mem_buffer *rxb) |
@@ -630,9 +625,6 @@ void iwl_rx_statistics(struct iwl_priv *priv, | |||
630 | int combined_plcp_delta; | 625 | int combined_plcp_delta; |
631 | unsigned int plcp_msec; | 626 | unsigned int plcp_msec; |
632 | unsigned long plcp_received_jiffies; | 627 | unsigned long plcp_received_jiffies; |
633 | int actual_ack_cnt_delta; | ||
634 | int expected_ack_cnt_delta; | ||
635 | int ba_timeout_delta; | ||
636 | 628 | ||
637 | IWL_DEBUG_RX(priv, "Statistics notification received (%d vs %d).\n", | 629 | IWL_DEBUG_RX(priv, "Statistics notification received (%d vs %d).\n", |
638 | (int)sizeof(priv->statistics), | 630 | (int)sizeof(priv->statistics), |
@@ -647,44 +639,6 @@ void iwl_rx_statistics(struct iwl_priv *priv, | |||
647 | #ifdef CONFIG_IWLWIFI_DEBUG | 639 | #ifdef CONFIG_IWLWIFI_DEBUG |
648 | iwl_accumulative_statistics(priv, (__le32 *)&pkt->u.stats); | 640 | iwl_accumulative_statistics(priv, (__le32 *)&pkt->u.stats); |
649 | #endif | 641 | #endif |
650 | actual_ack_cnt_delta = le32_to_cpu(pkt->u.stats.tx.actual_ack_cnt) - | ||
651 | le32_to_cpu(priv->statistics.tx.actual_ack_cnt); | ||
652 | expected_ack_cnt_delta = le32_to_cpu( | ||
653 | pkt->u.stats.tx.expected_ack_cnt) - | ||
654 | le32_to_cpu(priv->statistics.tx.expected_ack_cnt); | ||
655 | ba_timeout_delta = le32_to_cpu( | ||
656 | pkt->u.stats.tx.agg.ba_timeout) - | ||
657 | le32_to_cpu(priv->statistics.tx.agg.ba_timeout); | ||
658 | if ((priv->agg_tids_count > 0) && | ||
659 | (expected_ack_cnt_delta > 0) && | ||
660 | (((actual_ack_cnt_delta * 100) / expected_ack_cnt_delta) < | ||
661 | ACK_CNT_RATIO) && | ||
662 | (ba_timeout_delta > BA_TIMEOUT_CNT)) { | ||
663 | IWL_DEBUG_RADIO(priv, | ||
664 | "actual_ack_cnt delta = %d, expected_ack_cnt = %d\n", | ||
665 | actual_ack_cnt_delta, expected_ack_cnt_delta); | ||
666 | |||
667 | #ifdef CONFIG_IWLWIFI_DEBUG | ||
668 | IWL_DEBUG_RADIO(priv, "rx_detected_cnt delta = %d\n", | ||
669 | priv->delta_statistics.tx.rx_detected_cnt); | ||
670 | IWL_DEBUG_RADIO(priv, | ||
671 | "ack_or_ba_timeout_collision delta = %d\n", | ||
672 | priv->delta_statistics.tx.ack_or_ba_timeout_collision); | ||
673 | #endif | ||
674 | IWL_DEBUG_RADIO(priv, "agg ba_timeout delta = %d\n", | ||
675 | ba_timeout_delta); | ||
676 | if ((actual_ack_cnt_delta == 0) && | ||
677 | (ba_timeout_delta >= | ||
678 | BA_TIMEOUT_MAX)) { | ||
679 | IWL_DEBUG_RADIO(priv, | ||
680 | "call iwl_force_reset(IWL_FW_RESET)\n"); | ||
681 | iwl_force_reset(priv, IWL_FW_RESET); | ||
682 | } else { | ||
683 | IWL_DEBUG_RADIO(priv, | ||
684 | "call iwl_force_reset(IWL_RF_RESET)\n"); | ||
685 | iwl_force_reset(priv, IWL_RF_RESET); | ||
686 | } | ||
687 | } | ||
688 | /* | 642 | /* |
689 | * check for plcp_err and trigger radio reset if it exceeds | 643 | * check for plcp_err and trigger radio reset if it exceeds |
690 | * the plcp error threshold plcp_delta. | 644 | * the plcp error threshold plcp_delta. |