diff options
Diffstat (limited to 'drivers/net/wireless/ath')
-rw-r--r-- | drivers/net/wireless/ath/ath9k/ar5008_phy.c | 25 | ||||
-rw-r--r-- | drivers/net/wireless/ath/ath9k/ar9002_hw.c | 19 | ||||
-rw-r--r-- | drivers/net/wireless/ath/ath9k/hw.c | 7 | ||||
-rw-r--r-- | drivers/net/wireless/ath/ath9k/hw.h | 1 | ||||
-rw-r--r-- | drivers/net/wireless/ath/ath9k/init.c | 9 | ||||
-rw-r--r-- | drivers/net/wireless/ath/ath9k/rc.c | 4 | ||||
-rw-r--r-- | drivers/net/wireless/ath/ath9k/recv.c | 8 | ||||
-rw-r--r-- | drivers/net/wireless/ath/carl9170/tx.c | 9 |
8 files changed, 46 insertions, 36 deletions
diff --git a/drivers/net/wireless/ath/ath9k/ar5008_phy.c b/drivers/net/wireless/ath/ath9k/ar5008_phy.c index f901a17f76ba..86a891f93fc9 100644 --- a/drivers/net/wireless/ath/ath9k/ar5008_phy.c +++ b/drivers/net/wireless/ath/ath9k/ar5008_phy.c | |||
@@ -489,8 +489,6 @@ static int ar5008_hw_rf_alloc_ext_banks(struct ath_hw *ah) | |||
489 | ATH_ALLOC_BANK(ah->analogBank6Data, ah->iniBank6.ia_rows); | 489 | ATH_ALLOC_BANK(ah->analogBank6Data, ah->iniBank6.ia_rows); |
490 | ATH_ALLOC_BANK(ah->analogBank6TPCData, ah->iniBank6TPC.ia_rows); | 490 | ATH_ALLOC_BANK(ah->analogBank6TPCData, ah->iniBank6TPC.ia_rows); |
491 | ATH_ALLOC_BANK(ah->analogBank7Data, ah->iniBank7.ia_rows); | 491 | ATH_ALLOC_BANK(ah->analogBank7Data, ah->iniBank7.ia_rows); |
492 | ATH_ALLOC_BANK(ah->addac5416_21, | ||
493 | ah->iniAddac.ia_rows * ah->iniAddac.ia_columns); | ||
494 | ATH_ALLOC_BANK(ah->bank6Temp, ah->iniBank6.ia_rows); | 492 | ATH_ALLOC_BANK(ah->bank6Temp, ah->iniBank6.ia_rows); |
495 | 493 | ||
496 | return 0; | 494 | return 0; |
@@ -519,7 +517,6 @@ static void ar5008_hw_rf_free_ext_banks(struct ath_hw *ah) | |||
519 | ATH_FREE_BANK(ah->analogBank6Data); | 517 | ATH_FREE_BANK(ah->analogBank6Data); |
520 | ATH_FREE_BANK(ah->analogBank6TPCData); | 518 | ATH_FREE_BANK(ah->analogBank6TPCData); |
521 | ATH_FREE_BANK(ah->analogBank7Data); | 519 | ATH_FREE_BANK(ah->analogBank7Data); |
522 | ATH_FREE_BANK(ah->addac5416_21); | ||
523 | ATH_FREE_BANK(ah->bank6Temp); | 520 | ATH_FREE_BANK(ah->bank6Temp); |
524 | 521 | ||
525 | #undef ATH_FREE_BANK | 522 | #undef ATH_FREE_BANK |
@@ -805,27 +802,7 @@ static int ar5008_hw_process_ini(struct ath_hw *ah, | |||
805 | if (ah->eep_ops->set_addac) | 802 | if (ah->eep_ops->set_addac) |
806 | ah->eep_ops->set_addac(ah, chan); | 803 | ah->eep_ops->set_addac(ah, chan); |
807 | 804 | ||
808 | if (AR_SREV_5416_22_OR_LATER(ah)) { | 805 | REG_WRITE_ARRAY(&ah->iniAddac, 1, regWrites); |
809 | REG_WRITE_ARRAY(&ah->iniAddac, 1, regWrites); | ||
810 | } else { | ||
811 | struct ar5416IniArray temp; | ||
812 | u32 addacSize = | ||
813 | sizeof(u32) * ah->iniAddac.ia_rows * | ||
814 | ah->iniAddac.ia_columns; | ||
815 | |||
816 | /* For AR5416 2.0/2.1 */ | ||
817 | memcpy(ah->addac5416_21, | ||
818 | ah->iniAddac.ia_array, addacSize); | ||
819 | |||
820 | /* override CLKDRV value at [row, column] = [31, 1] */ | ||
821 | (ah->addac5416_21)[31 * ah->iniAddac.ia_columns + 1] = 0; | ||
822 | |||
823 | temp.ia_array = ah->addac5416_21; | ||
824 | temp.ia_columns = ah->iniAddac.ia_columns; | ||
825 | temp.ia_rows = ah->iniAddac.ia_rows; | ||
826 | REG_WRITE_ARRAY(&temp, 1, regWrites); | ||
827 | } | ||
828 | |||
829 | REG_WRITE(ah, AR_PHY_ADC_SERIAL_CTL, AR_PHY_SEL_INTERNAL_ADDAC); | 806 | REG_WRITE(ah, AR_PHY_ADC_SERIAL_CTL, AR_PHY_SEL_INTERNAL_ADDAC); |
830 | 807 | ||
831 | ENABLE_REGWRITE_BUFFER(ah); | 808 | ENABLE_REGWRITE_BUFFER(ah); |
diff --git a/drivers/net/wireless/ath/ath9k/ar9002_hw.c b/drivers/net/wireless/ath/ath9k/ar9002_hw.c index 11f192a1ceb7..d190411ac8f5 100644 --- a/drivers/net/wireless/ath/ath9k/ar9002_hw.c +++ b/drivers/net/wireless/ath/ath9k/ar9002_hw.c | |||
@@ -180,6 +180,25 @@ static void ar9002_hw_init_mode_regs(struct ath_hw *ah) | |||
180 | INIT_INI_ARRAY(&ah->iniAddac, ar5416Addac, | 180 | INIT_INI_ARRAY(&ah->iniAddac, ar5416Addac, |
181 | ARRAY_SIZE(ar5416Addac), 2); | 181 | ARRAY_SIZE(ar5416Addac), 2); |
182 | } | 182 | } |
183 | |||
184 | /* iniAddac needs to be modified for these chips */ | ||
185 | if (AR_SREV_9160(ah) || !AR_SREV_5416_22_OR_LATER(ah)) { | ||
186 | struct ar5416IniArray *addac = &ah->iniAddac; | ||
187 | u32 size = sizeof(u32) * addac->ia_rows * addac->ia_columns; | ||
188 | u32 *data; | ||
189 | |||
190 | data = kmalloc(size, GFP_KERNEL); | ||
191 | if (!data) | ||
192 | return; | ||
193 | |||
194 | memcpy(data, addac->ia_array, size); | ||
195 | addac->ia_array = data; | ||
196 | |||
197 | if (!AR_SREV_5416_22_OR_LATER(ah)) { | ||
198 | /* override CLKDRV value */ | ||
199 | INI_RA(addac, 31,1) = 0; | ||
200 | } | ||
201 | } | ||
183 | } | 202 | } |
184 | 203 | ||
185 | /* Support for Japan ch.14 (2484) spread */ | 204 | /* Support for Japan ch.14 (2484) spread */ |
diff --git a/drivers/net/wireless/ath/ath9k/hw.c b/drivers/net/wireless/ath/ath9k/hw.c index ee7759575050..87db1ee1c298 100644 --- a/drivers/net/wireless/ath/ath9k/hw.c +++ b/drivers/net/wireless/ath/ath9k/hw.c | |||
@@ -1037,13 +1037,16 @@ void ath9k_hw_init_global_settings(struct ath_hw *ah) | |||
1037 | 1037 | ||
1038 | /* | 1038 | /* |
1039 | * Workaround for early ACK timeouts, add an offset to match the | 1039 | * Workaround for early ACK timeouts, add an offset to match the |
1040 | * initval's 64us ack timeout value. | 1040 | * initval's 64us ack timeout value. Use 48us for the CTS timeout. |
1041 | * This was initially only meant to work around an issue with delayed | 1041 | * This was initially only meant to work around an issue with delayed |
1042 | * BA frames in some implementations, but it has been found to fix ACK | 1042 | * BA frames in some implementations, but it has been found to fix ACK |
1043 | * timeout issues in other cases as well. | 1043 | * timeout issues in other cases as well. |
1044 | */ | 1044 | */ |
1045 | if (conf->channel && conf->channel->band == IEEE80211_BAND_2GHZ) | 1045 | if (conf->channel && conf->channel->band == IEEE80211_BAND_2GHZ) { |
1046 | acktimeout += 64 - sifstime - ah->slottime; | 1046 | acktimeout += 64 - sifstime - ah->slottime; |
1047 | ctstimeout += 48 - sifstime - ah->slottime; | ||
1048 | } | ||
1049 | |||
1047 | 1050 | ||
1048 | ath9k_hw_set_sifs_time(ah, sifstime); | 1051 | ath9k_hw_set_sifs_time(ah, sifstime); |
1049 | ath9k_hw_setslottime(ah, slottime); | 1052 | ath9k_hw_setslottime(ah, slottime); |
diff --git a/drivers/net/wireless/ath/ath9k/hw.h b/drivers/net/wireless/ath/ath9k/hw.h index 6a29004a71b0..c8261d4fc780 100644 --- a/drivers/net/wireless/ath/ath9k/hw.h +++ b/drivers/net/wireless/ath/ath9k/hw.h | |||
@@ -940,7 +940,6 @@ struct ath_hw { | |||
940 | u32 *analogBank6Data; | 940 | u32 *analogBank6Data; |
941 | u32 *analogBank6TPCData; | 941 | u32 *analogBank6TPCData; |
942 | u32 *analogBank7Data; | 942 | u32 *analogBank7Data; |
943 | u32 *addac5416_21; | ||
944 | u32 *bank6Temp; | 943 | u32 *bank6Temp; |
945 | 944 | ||
946 | u8 txpower_limit; | 945 | u8 txpower_limit; |
diff --git a/drivers/net/wireless/ath/ath9k/init.c b/drivers/net/wireless/ath/ath9k/init.c index abf943557dee..53a005d288aa 100644 --- a/drivers/net/wireless/ath/ath9k/init.c +++ b/drivers/net/wireless/ath/ath9k/init.c | |||
@@ -822,6 +822,11 @@ int ath9k_init_device(u16 devid, struct ath_softc *sc, | |||
822 | ARRAY_SIZE(ath9k_tpt_blink)); | 822 | ARRAY_SIZE(ath9k_tpt_blink)); |
823 | #endif | 823 | #endif |
824 | 824 | ||
825 | INIT_WORK(&sc->hw_reset_work, ath_reset_work); | ||
826 | INIT_WORK(&sc->hw_check_work, ath_hw_check); | ||
827 | INIT_WORK(&sc->paprd_work, ath_paprd_calibrate); | ||
828 | INIT_DELAYED_WORK(&sc->hw_pll_work, ath_hw_pll_work); | ||
829 | |||
825 | /* Register with mac80211 */ | 830 | /* Register with mac80211 */ |
826 | error = ieee80211_register_hw(hw); | 831 | error = ieee80211_register_hw(hw); |
827 | if (error) | 832 | if (error) |
@@ -840,10 +845,6 @@ int ath9k_init_device(u16 devid, struct ath_softc *sc, | |||
840 | goto error_world; | 845 | goto error_world; |
841 | } | 846 | } |
842 | 847 | ||
843 | INIT_WORK(&sc->hw_reset_work, ath_reset_work); | ||
844 | INIT_WORK(&sc->hw_check_work, ath_hw_check); | ||
845 | INIT_WORK(&sc->paprd_work, ath_paprd_calibrate); | ||
846 | INIT_DELAYED_WORK(&sc->hw_pll_work, ath_hw_pll_work); | ||
847 | sc->last_rssi = ATH_RSSI_DUMMY_MARKER; | 848 | sc->last_rssi = ATH_RSSI_DUMMY_MARKER; |
848 | 849 | ||
849 | ath_init_leds(sc); | 850 | ath_init_leds(sc); |
diff --git a/drivers/net/wireless/ath/ath9k/rc.c b/drivers/net/wireless/ath/ath9k/rc.c index b3c3798fe513..a427a16bb739 100644 --- a/drivers/net/wireless/ath/ath9k/rc.c +++ b/drivers/net/wireless/ath/ath9k/rc.c | |||
@@ -694,7 +694,7 @@ static u8 ath_rc_get_highest_rix(struct ath_softc *sc, | |||
694 | return rate; | 694 | return rate; |
695 | 695 | ||
696 | /* This should not happen */ | 696 | /* This should not happen */ |
697 | WARN_ON(1); | 697 | WARN_ON_ONCE(1); |
698 | 698 | ||
699 | rate = ath_rc_priv->valid_rate_index[0]; | 699 | rate = ath_rc_priv->valid_rate_index[0]; |
700 | 700 | ||
@@ -1346,7 +1346,7 @@ static void ath_tx_status(void *priv, struct ieee80211_supported_band *sband, | |||
1346 | fc = hdr->frame_control; | 1346 | fc = hdr->frame_control; |
1347 | for (i = 0; i < sc->hw->max_rates; i++) { | 1347 | for (i = 0; i < sc->hw->max_rates; i++) { |
1348 | struct ieee80211_tx_rate *rate = &tx_info->status.rates[i]; | 1348 | struct ieee80211_tx_rate *rate = &tx_info->status.rates[i]; |
1349 | if (!rate->count) | 1349 | if (rate->idx < 0 || !rate->count) |
1350 | break; | 1350 | break; |
1351 | 1351 | ||
1352 | final_ts_idx = i; | 1352 | final_ts_idx = i; |
diff --git a/drivers/net/wireless/ath/ath9k/recv.c b/drivers/net/wireless/ath/ath9k/recv.c index 0e666fbe0842..7e1a91af1497 100644 --- a/drivers/net/wireless/ath/ath9k/recv.c +++ b/drivers/net/wireless/ath/ath9k/recv.c | |||
@@ -822,6 +822,14 @@ static bool ath9k_rx_accept(struct ath_common *common, | |||
822 | (ATH9K_RXERR_DECRYPT | ATH9K_RXERR_CRC | ATH9K_RXERR_MIC | | 822 | (ATH9K_RXERR_DECRYPT | ATH9K_RXERR_CRC | ATH9K_RXERR_MIC | |
823 | ATH9K_RXERR_KEYMISS)); | 823 | ATH9K_RXERR_KEYMISS)); |
824 | 824 | ||
825 | /* | ||
826 | * Key miss events are only relevant for pairwise keys where the | ||
827 | * descriptor does contain a valid key index. This has been observed | ||
828 | * mostly with CCMP encryption. | ||
829 | */ | ||
830 | if (rx_stats->rs_keyix == ATH9K_RXKEYIX_INVALID) | ||
831 | rx_stats->rs_status &= ~ATH9K_RXERR_KEYMISS; | ||
832 | |||
825 | if (!rx_stats->rs_datalen) | 833 | if (!rx_stats->rs_datalen) |
826 | return false; | 834 | return false; |
827 | /* | 835 | /* |
diff --git a/drivers/net/wireless/ath/carl9170/tx.c b/drivers/net/wireless/ath/carl9170/tx.c index d19a9ee9d057..bbc813dee983 100644 --- a/drivers/net/wireless/ath/carl9170/tx.c +++ b/drivers/net/wireless/ath/carl9170/tx.c | |||
@@ -1234,6 +1234,7 @@ static bool carl9170_tx_ps_drop(struct ar9170 *ar, struct sk_buff *skb) | |||
1234 | { | 1234 | { |
1235 | struct ieee80211_sta *sta; | 1235 | struct ieee80211_sta *sta; |
1236 | struct carl9170_sta_info *sta_info; | 1236 | struct carl9170_sta_info *sta_info; |
1237 | struct ieee80211_tx_info *tx_info; | ||
1237 | 1238 | ||
1238 | rcu_read_lock(); | 1239 | rcu_read_lock(); |
1239 | sta = __carl9170_get_tx_sta(ar, skb); | 1240 | sta = __carl9170_get_tx_sta(ar, skb); |
@@ -1241,16 +1242,18 @@ static bool carl9170_tx_ps_drop(struct ar9170 *ar, struct sk_buff *skb) | |||
1241 | goto out_rcu; | 1242 | goto out_rcu; |
1242 | 1243 | ||
1243 | sta_info = (void *) sta->drv_priv; | 1244 | sta_info = (void *) sta->drv_priv; |
1244 | if (unlikely(sta_info->sleeping)) { | 1245 | tx_info = IEEE80211_SKB_CB(skb); |
1245 | struct ieee80211_tx_info *tx_info; | ||
1246 | 1246 | ||
1247 | if (unlikely(sta_info->sleeping) && | ||
1248 | !(tx_info->flags & (IEEE80211_TX_CTL_POLL_RESPONSE | | ||
1249 | IEEE80211_TX_CTL_CLEAR_PS_FILT))) { | ||
1247 | rcu_read_unlock(); | 1250 | rcu_read_unlock(); |
1248 | 1251 | ||
1249 | tx_info = IEEE80211_SKB_CB(skb); | ||
1250 | if (tx_info->flags & IEEE80211_TX_CTL_AMPDU) | 1252 | if (tx_info->flags & IEEE80211_TX_CTL_AMPDU) |
1251 | atomic_dec(&ar->tx_ampdu_upload); | 1253 | atomic_dec(&ar->tx_ampdu_upload); |
1252 | 1254 | ||
1253 | tx_info->flags |= IEEE80211_TX_STAT_TX_FILTERED; | 1255 | tx_info->flags |= IEEE80211_TX_STAT_TX_FILTERED; |
1256 | carl9170_release_dev_space(ar, skb); | ||
1254 | carl9170_tx_status(ar, skb, false); | 1257 | carl9170_tx_status(ar, skb, false); |
1255 | return true; | 1258 | return true; |
1256 | } | 1259 | } |