diff options
Diffstat (limited to 'drivers/net/wireless/ath9k')
-rw-r--r-- | drivers/net/wireless/ath9k/core.c | 9 | ||||
-rw-r--r-- | drivers/net/wireless/ath9k/core.h | 1 | ||||
-rw-r--r-- | drivers/net/wireless/ath9k/main.c | 12 | ||||
-rw-r--r-- | drivers/net/wireless/ath9k/xmit.c | 6 |
4 files changed, 20 insertions, 8 deletions
diff --git a/drivers/net/wireless/ath9k/core.c b/drivers/net/wireless/ath9k/core.c index 690f7c56af3d..6c433a4d003e 100644 --- a/drivers/net/wireless/ath9k/core.c +++ b/drivers/net/wireless/ath9k/core.c | |||
@@ -678,6 +678,12 @@ int ath_open(struct ath_softc *sc, struct ath9k_channel *initial_chan) | |||
678 | if (ah->ah_caps.hw_caps & ATH9K_HW_CAP_HT) | 678 | if (ah->ah_caps.hw_caps & ATH9K_HW_CAP_HT) |
679 | sc->sc_imask |= ATH9K_INT_CST; | 679 | sc->sc_imask |= ATH9K_INT_CST; |
680 | 680 | ||
681 | /* Note: We disable MIB interrupts for now as we don't yet | ||
682 | * handle processing ANI, otherwise you will get an interrupt | ||
683 | * storm after about 7 hours of usage making the system unusable | ||
684 | * with huge latency. Once we do have ANI processing included | ||
685 | * we can re-enable this interrupt. */ | ||
686 | #if 0 | ||
681 | /* | 687 | /* |
682 | * Enable MIB interrupts when there are hardware phy counters. | 688 | * Enable MIB interrupts when there are hardware phy counters. |
683 | * Note we only do this (at the moment) for station mode. | 689 | * Note we only do this (at the moment) for station mode. |
@@ -686,6 +692,7 @@ int ath_open(struct ath_softc *sc, struct ath9k_channel *initial_chan) | |||
686 | ((sc->sc_ah->ah_opmode == ATH9K_M_STA) || | 692 | ((sc->sc_ah->ah_opmode == ATH9K_M_STA) || |
687 | (sc->sc_ah->ah_opmode == ATH9K_M_IBSS))) | 693 | (sc->sc_ah->ah_opmode == ATH9K_M_IBSS))) |
688 | sc->sc_imask |= ATH9K_INT_MIB; | 694 | sc->sc_imask |= ATH9K_INT_MIB; |
695 | #endif | ||
689 | /* | 696 | /* |
690 | * Some hardware processes the TIM IE and fires an | 697 | * Some hardware processes the TIM IE and fires an |
691 | * interrupt when the TIM bit is set. For hardware | 698 | * interrupt when the TIM bit is set. For hardware |
@@ -1184,6 +1191,8 @@ void ath_deinit(struct ath_softc *sc) | |||
1184 | 1191 | ||
1185 | DPRINTF(sc, ATH_DBG_CONFIG, "%s\n", __func__); | 1192 | DPRINTF(sc, ATH_DBG_CONFIG, "%s\n", __func__); |
1186 | 1193 | ||
1194 | tasklet_kill(&sc->intr_tq); | ||
1195 | tasklet_kill(&sc->bcon_tasklet); | ||
1187 | ath_stop(sc); | 1196 | ath_stop(sc); |
1188 | if (!(sc->sc_flags & SC_OP_INVALID)) | 1197 | if (!(sc->sc_flags & SC_OP_INVALID)) |
1189 | ath9k_hw_setpower(sc->sc_ah, ATH9K_PM_AWAKE); | 1198 | ath9k_hw_setpower(sc->sc_ah, ATH9K_PM_AWAKE); |
diff --git a/drivers/net/wireless/ath9k/core.h b/drivers/net/wireless/ath9k/core.h index 6ff3befe39f7..872f0c5a0b0e 100644 --- a/drivers/net/wireless/ath9k/core.h +++ b/drivers/net/wireless/ath9k/core.h | |||
@@ -976,7 +976,6 @@ struct ath_softc { | |||
976 | u32 sc_keymax; /* size of key cache */ | 976 | u32 sc_keymax; /* size of key cache */ |
977 | DECLARE_BITMAP(sc_keymap, ATH_KEYMAX); /* key use bit map */ | 977 | DECLARE_BITMAP(sc_keymap, ATH_KEYMAX); /* key use bit map */ |
978 | u8 sc_splitmic; /* split TKIP MIC keys */ | 978 | u8 sc_splitmic; /* split TKIP MIC keys */ |
979 | int sc_keytype; | ||
980 | 979 | ||
981 | /* RX */ | 980 | /* RX */ |
982 | struct list_head sc_rxbuf; | 981 | struct list_head sc_rxbuf; |
diff --git a/drivers/net/wireless/ath9k/main.c b/drivers/net/wireless/ath9k/main.c index 1ba18006f475..2caba4403167 100644 --- a/drivers/net/wireless/ath9k/main.c +++ b/drivers/net/wireless/ath9k/main.c | |||
@@ -204,8 +204,6 @@ static int ath_key_config(struct ath_softc *sc, | |||
204 | if (!ret) | 204 | if (!ret) |
205 | return -EIO; | 205 | return -EIO; |
206 | 206 | ||
207 | if (mac) | ||
208 | sc->sc_keytype = hk.kv_type; | ||
209 | return 0; | 207 | return 0; |
210 | } | 208 | } |
211 | 209 | ||
@@ -1507,7 +1505,6 @@ static int ath9k_set_key(struct ieee80211_hw *hw, | |||
1507 | case DISABLE_KEY: | 1505 | case DISABLE_KEY: |
1508 | ath_key_delete(sc, key); | 1506 | ath_key_delete(sc, key); |
1509 | clear_bit(key->keyidx, sc->sc_keymap); | 1507 | clear_bit(key->keyidx, sc->sc_keymap); |
1510 | sc->sc_keytype = ATH9K_CIPHER_CLR; | ||
1511 | break; | 1508 | break; |
1512 | default: | 1509 | default: |
1513 | ret = -EINVAL; | 1510 | ret = -EINVAL; |
@@ -1784,10 +1781,17 @@ static void ath_pci_remove(struct pci_dev *pdev) | |||
1784 | { | 1781 | { |
1785 | struct ieee80211_hw *hw = pci_get_drvdata(pdev); | 1782 | struct ieee80211_hw *hw = pci_get_drvdata(pdev); |
1786 | struct ath_softc *sc = hw->priv; | 1783 | struct ath_softc *sc = hw->priv; |
1784 | enum ath9k_int status; | ||
1787 | 1785 | ||
1788 | if (pdev->irq) | 1786 | if (pdev->irq) { |
1787 | ath9k_hw_set_interrupts(sc->sc_ah, 0); | ||
1788 | /* clear the ISR */ | ||
1789 | ath9k_hw_getisr(sc->sc_ah, &status); | ||
1790 | sc->sc_flags |= SC_OP_INVALID; | ||
1789 | free_irq(pdev->irq, sc); | 1791 | free_irq(pdev->irq, sc); |
1792 | } | ||
1790 | ath_detach(sc); | 1793 | ath_detach(sc); |
1794 | |||
1791 | pci_iounmap(pdev, sc->mem); | 1795 | pci_iounmap(pdev, sc->mem); |
1792 | pci_release_region(pdev, 0); | 1796 | pci_release_region(pdev, 0); |
1793 | pci_disable_device(pdev); | 1797 | pci_disable_device(pdev); |
diff --git a/drivers/net/wireless/ath9k/xmit.c b/drivers/net/wireless/ath9k/xmit.c index 3fc6641e8bf7..25929059c7dc 100644 --- a/drivers/net/wireless/ath9k/xmit.c +++ b/drivers/net/wireless/ath9k/xmit.c | |||
@@ -239,11 +239,11 @@ static int ath_tx_prepare(struct ath_softc *sc, | |||
239 | txctl->keyix = tx_info->control.hw_key->hw_key_idx; | 239 | txctl->keyix = tx_info->control.hw_key->hw_key_idx; |
240 | txctl->frmlen += tx_info->control.icv_len; | 240 | txctl->frmlen += tx_info->control.icv_len; |
241 | 241 | ||
242 | if (sc->sc_keytype == ATH9K_CIPHER_WEP) | 242 | if (tx_info->control.hw_key->alg == ALG_WEP) |
243 | txctl->keytype = ATH9K_KEY_TYPE_WEP; | 243 | txctl->keytype = ATH9K_KEY_TYPE_WEP; |
244 | else if (sc->sc_keytype == ATH9K_CIPHER_TKIP) | 244 | else if (tx_info->control.hw_key->alg == ALG_TKIP) |
245 | txctl->keytype = ATH9K_KEY_TYPE_TKIP; | 245 | txctl->keytype = ATH9K_KEY_TYPE_TKIP; |
246 | else if (sc->sc_keytype == ATH9K_CIPHER_AES_CCM) | 246 | else if (tx_info->control.hw_key->alg == ALG_CCMP) |
247 | txctl->keytype = ATH9K_KEY_TYPE_AES; | 247 | txctl->keytype = ATH9K_KEY_TYPE_AES; |
248 | } | 248 | } |
249 | 249 | ||