diff options
author | Oleksij Rempel <linux@rempel-privat.de> | 2014-02-27 05:40:46 -0500 |
---|---|---|
committer | John W. Linville <linville@tuxdriver.com> | 2014-03-17 13:13:06 -0400 |
commit | eefa01ddd57893c7f4482024029fec323c8e1b89 (patch) | |
tree | 75fe01172b3a6c5ef608a5718baeda7f590662b0 | |
parent | 88a4f56ef09d6f38beee79e9abff7cb7f867dc52 (diff) |
ath9k: move sc_flags to ath_common
we will need it for ath9k_htc, may be other drivers too
Signed-off-by: Oleksij Rempel <linux@rempel-privat.de>
Signed-off-by: John W. Linville <linville@tuxdriver.com>
-rw-r--r-- | drivers/net/wireless/ath/ath.h | 10 | ||||
-rw-r--r-- | drivers/net/wireless/ath/ath9k/ahb.c | 7 | ||||
-rw-r--r-- | drivers/net/wireless/ath/ath9k/ath9k.h | 10 | ||||
-rw-r--r-- | drivers/net/wireless/ath/ath9k/beacon.c | 18 | ||||
-rw-r--r-- | drivers/net/wireless/ath/ath9k/debug.c | 2 | ||||
-rw-r--r-- | drivers/net/wireless/ath/ath9k/link.c | 16 | ||||
-rw-r--r-- | drivers/net/wireless/ath/ath9k/main.c | 45 | ||||
-rw-r--r-- | drivers/net/wireless/ath/ath9k/mci.c | 2 | ||||
-rw-r--r-- | drivers/net/wireless/ath/ath9k/pci.c | 8 | ||||
-rw-r--r-- | drivers/net/wireless/ath/ath9k/tx99.c | 2 | ||||
-rw-r--r-- | drivers/net/wireless/ath/ath9k/wow.c | 4 | ||||
-rw-r--r-- | drivers/net/wireless/ath/ath9k/xmit.c | 9 |
12 files changed, 73 insertions, 60 deletions
diff --git a/drivers/net/wireless/ath/ath.h b/drivers/net/wireless/ath/ath.h index d239acc26125..a889fd66fc63 100644 --- a/drivers/net/wireless/ath/ath.h +++ b/drivers/net/wireless/ath/ath.h | |||
@@ -56,6 +56,15 @@ enum ath_device_state { | |||
56 | ATH_HW_INITIALIZED, | 56 | ATH_HW_INITIALIZED, |
57 | }; | 57 | }; |
58 | 58 | ||
59 | enum ath_op_flags { | ||
60 | ATH_OP_INVALID, | ||
61 | ATH_OP_BEACONS, | ||
62 | ATH_OP_ANI_RUN, | ||
63 | ATH_OP_PRIM_STA_VIF, | ||
64 | ATH_OP_HW_RESET, | ||
65 | ATH_OP_SCANNING, | ||
66 | }; | ||
67 | |||
59 | enum ath_bus_type { | 68 | enum ath_bus_type { |
60 | ATH_PCI, | 69 | ATH_PCI, |
61 | ATH_AHB, | 70 | ATH_AHB, |
@@ -130,6 +139,7 @@ struct ath_common { | |||
130 | struct ieee80211_hw *hw; | 139 | struct ieee80211_hw *hw; |
131 | int debug_mask; | 140 | int debug_mask; |
132 | enum ath_device_state state; | 141 | enum ath_device_state state; |
142 | unsigned long op_flags; | ||
133 | 143 | ||
134 | struct ath_ani ani; | 144 | struct ath_ani ani; |
135 | 145 | ||
diff --git a/drivers/net/wireless/ath/ath9k/ahb.c b/drivers/net/wireless/ath/ath9k/ahb.c index 2dff2765769b..a5684c38dcd9 100644 --- a/drivers/net/wireless/ath/ath9k/ahb.c +++ b/drivers/net/wireless/ath/ath9k/ahb.c | |||
@@ -82,6 +82,7 @@ static int ath_ahb_probe(struct platform_device *pdev) | |||
82 | int irq; | 82 | int irq; |
83 | int ret = 0; | 83 | int ret = 0; |
84 | struct ath_hw *ah; | 84 | struct ath_hw *ah; |
85 | struct ath_common *common; | ||
85 | char hw_name[64]; | 86 | char hw_name[64]; |
86 | 87 | ||
87 | if (!dev_get_platdata(&pdev->dev)) { | 88 | if (!dev_get_platdata(&pdev->dev)) { |
@@ -124,9 +125,6 @@ static int ath_ahb_probe(struct platform_device *pdev) | |||
124 | sc->mem = mem; | 125 | sc->mem = mem; |
125 | sc->irq = irq; | 126 | sc->irq = irq; |
126 | 127 | ||
127 | /* Will be cleared in ath9k_start() */ | ||
128 | set_bit(SC_OP_INVALID, &sc->sc_flags); | ||
129 | |||
130 | ret = request_irq(irq, ath_isr, IRQF_SHARED, "ath9k", sc); | 128 | ret = request_irq(irq, ath_isr, IRQF_SHARED, "ath9k", sc); |
131 | if (ret) { | 129 | if (ret) { |
132 | dev_err(&pdev->dev, "request_irq failed\n"); | 130 | dev_err(&pdev->dev, "request_irq failed\n"); |
@@ -144,6 +142,9 @@ static int ath_ahb_probe(struct platform_device *pdev) | |||
144 | wiphy_info(hw->wiphy, "%s mem=0x%lx, irq=%d\n", | 142 | wiphy_info(hw->wiphy, "%s mem=0x%lx, irq=%d\n", |
145 | hw_name, (unsigned long)mem, irq); | 143 | hw_name, (unsigned long)mem, irq); |
146 | 144 | ||
145 | common = ath9k_hw_common(sc->sc_ah); | ||
146 | /* Will be cleared in ath9k_start() */ | ||
147 | set_bit(ATH_OP_INVALID, &common->op_flags); | ||
147 | return 0; | 148 | return 0; |
148 | 149 | ||
149 | err_irq: | 150 | err_irq: |
diff --git a/drivers/net/wireless/ath/ath9k/ath9k.h b/drivers/net/wireless/ath/ath9k/ath9k.h index b54bcae61ba1..7f87f338d7c7 100644 --- a/drivers/net/wireless/ath/ath9k/ath9k.h +++ b/drivers/net/wireless/ath/ath9k/ath9k.h | |||
@@ -688,15 +688,6 @@ void ath_ant_comb_scan(struct ath_softc *sc, struct ath_rx_status *rs); | |||
688 | #define ATH_TXPOWER_MAX 100 /* .5 dBm units */ | 688 | #define ATH_TXPOWER_MAX 100 /* .5 dBm units */ |
689 | #define MAX_GTT_CNT 5 | 689 | #define MAX_GTT_CNT 5 |
690 | 690 | ||
691 | enum sc_op_flags { | ||
692 | SC_OP_INVALID, | ||
693 | SC_OP_BEACONS, | ||
694 | SC_OP_ANI_RUN, | ||
695 | SC_OP_PRIM_STA_VIF, | ||
696 | SC_OP_HW_RESET, | ||
697 | SC_OP_SCANNING, | ||
698 | }; | ||
699 | |||
700 | /* Powersave flags */ | 691 | /* Powersave flags */ |
701 | #define PS_WAIT_FOR_BEACON BIT(0) | 692 | #define PS_WAIT_FOR_BEACON BIT(0) |
702 | #define PS_WAIT_FOR_CAB BIT(1) | 693 | #define PS_WAIT_FOR_CAB BIT(1) |
@@ -726,7 +717,6 @@ struct ath_softc { | |||
726 | struct completion paprd_complete; | 717 | struct completion paprd_complete; |
727 | wait_queue_head_t tx_wait; | 718 | wait_queue_head_t tx_wait; |
728 | 719 | ||
729 | unsigned long sc_flags; | ||
730 | unsigned long driver_data; | 720 | unsigned long driver_data; |
731 | 721 | ||
732 | u8 gtt_cnt; | 722 | u8 gtt_cnt; |
diff --git a/drivers/net/wireless/ath/ath9k/beacon.c b/drivers/net/wireless/ath/ath9k/beacon.c index 02eb4f10332b..637267187929 100644 --- a/drivers/net/wireless/ath/ath9k/beacon.c +++ b/drivers/net/wireless/ath/ath9k/beacon.c | |||
@@ -328,7 +328,7 @@ void ath9k_beacon_tasklet(unsigned long data) | |||
328 | bool edma = !!(ah->caps.hw_caps & ATH9K_HW_CAP_EDMA); | 328 | bool edma = !!(ah->caps.hw_caps & ATH9K_HW_CAP_EDMA); |
329 | int slot; | 329 | int slot; |
330 | 330 | ||
331 | if (test_bit(SC_OP_HW_RESET, &sc->sc_flags)) { | 331 | if (test_bit(ATH_OP_HW_RESET, &common->op_flags)) { |
332 | ath_dbg(common, RESET, | 332 | ath_dbg(common, RESET, |
333 | "reset work is pending, skip beaconing now\n"); | 333 | "reset work is pending, skip beaconing now\n"); |
334 | return; | 334 | return; |
@@ -524,7 +524,7 @@ static void ath9k_beacon_config_sta(struct ath_softc *sc, | |||
524 | u64 tsf; | 524 | u64 tsf; |
525 | 525 | ||
526 | /* No need to configure beacon if we are not associated */ | 526 | /* No need to configure beacon if we are not associated */ |
527 | if (!test_bit(SC_OP_PRIM_STA_VIF, &sc->sc_flags)) { | 527 | if (!test_bit(ATH_OP_PRIM_STA_VIF, &common->op_flags)) { |
528 | ath_dbg(common, BEACON, | 528 | ath_dbg(common, BEACON, |
529 | "STA is not yet associated..skipping beacon config\n"); | 529 | "STA is not yet associated..skipping beacon config\n"); |
530 | return; | 530 | return; |
@@ -629,7 +629,7 @@ static void ath9k_beacon_config_adhoc(struct ath_softc *sc, | |||
629 | * joiner case in IBSS mode. | 629 | * joiner case in IBSS mode. |
630 | */ | 630 | */ |
631 | if (!conf->ibss_creator && conf->enable_beacon) | 631 | if (!conf->ibss_creator && conf->enable_beacon) |
632 | set_bit(SC_OP_BEACONS, &sc->sc_flags); | 632 | set_bit(ATH_OP_BEACONS, &common->op_flags); |
633 | } | 633 | } |
634 | 634 | ||
635 | static bool ath9k_allow_beacon_config(struct ath_softc *sc, | 635 | static bool ath9k_allow_beacon_config(struct ath_softc *sc, |
@@ -649,7 +649,7 @@ static bool ath9k_allow_beacon_config(struct ath_softc *sc, | |||
649 | 649 | ||
650 | if (sc->sc_ah->opmode == NL80211_IFTYPE_STATION) { | 650 | if (sc->sc_ah->opmode == NL80211_IFTYPE_STATION) { |
651 | if ((vif->type == NL80211_IFTYPE_STATION) && | 651 | if ((vif->type == NL80211_IFTYPE_STATION) && |
652 | test_bit(SC_OP_BEACONS, &sc->sc_flags) && | 652 | test_bit(ATH_OP_BEACONS, &common->op_flags) && |
653 | !avp->primary_sta_vif) { | 653 | !avp->primary_sta_vif) { |
654 | ath_dbg(common, CONFIG, | 654 | ath_dbg(common, CONFIG, |
655 | "Beacon already configured for a station interface\n"); | 655 | "Beacon already configured for a station interface\n"); |
@@ -700,6 +700,8 @@ void ath9k_beacon_config(struct ath_softc *sc, struct ieee80211_vif *vif, | |||
700 | { | 700 | { |
701 | struct ieee80211_bss_conf *bss_conf = &vif->bss_conf; | 701 | struct ieee80211_bss_conf *bss_conf = &vif->bss_conf; |
702 | struct ath_beacon_config *cur_conf = &sc->cur_beacon_conf; | 702 | struct ath_beacon_config *cur_conf = &sc->cur_beacon_conf; |
703 | struct ath_hw *ah = sc->sc_ah; | ||
704 | struct ath_common *common = ath9k_hw_common(ah); | ||
703 | unsigned long flags; | 705 | unsigned long flags; |
704 | bool skip_beacon = false; | 706 | bool skip_beacon = false; |
705 | 707 | ||
@@ -712,7 +714,7 @@ void ath9k_beacon_config(struct ath_softc *sc, struct ieee80211_vif *vif, | |||
712 | if (sc->sc_ah->opmode == NL80211_IFTYPE_STATION) { | 714 | if (sc->sc_ah->opmode == NL80211_IFTYPE_STATION) { |
713 | ath9k_cache_beacon_config(sc, bss_conf); | 715 | ath9k_cache_beacon_config(sc, bss_conf); |
714 | ath9k_set_beacon(sc); | 716 | ath9k_set_beacon(sc); |
715 | set_bit(SC_OP_BEACONS, &sc->sc_flags); | 717 | set_bit(ATH_OP_BEACONS, &common->op_flags); |
716 | return; | 718 | return; |
717 | } | 719 | } |
718 | 720 | ||
@@ -751,13 +753,13 @@ void ath9k_beacon_config(struct ath_softc *sc, struct ieee80211_vif *vif, | |||
751 | } | 753 | } |
752 | 754 | ||
753 | /* | 755 | /* |
754 | * Do not set the SC_OP_BEACONS flag for IBSS joiner mode | 756 | * Do not set the ATH_OP_BEACONS flag for IBSS joiner mode |
755 | * here, it is done in ath9k_beacon_config_adhoc(). | 757 | * here, it is done in ath9k_beacon_config_adhoc(). |
756 | */ | 758 | */ |
757 | if (cur_conf->enable_beacon && !skip_beacon) | 759 | if (cur_conf->enable_beacon && !skip_beacon) |
758 | set_bit(SC_OP_BEACONS, &sc->sc_flags); | 760 | set_bit(ATH_OP_BEACONS, &common->op_flags); |
759 | else | 761 | else |
760 | clear_bit(SC_OP_BEACONS, &sc->sc_flags); | 762 | clear_bit(ATH_OP_BEACONS, &common->op_flags); |
761 | } | 763 | } |
762 | } | 764 | } |
763 | 765 | ||
diff --git a/drivers/net/wireless/ath/ath9k/debug.c b/drivers/net/wireless/ath/ath9k/debug.c index 86abb3404dc7..780ff1bee6f6 100644 --- a/drivers/net/wireless/ath/ath9k/debug.c +++ b/drivers/net/wireless/ath/ath9k/debug.c | |||
@@ -208,7 +208,7 @@ static ssize_t write_file_ani(struct file *file, | |||
208 | common->disable_ani = !ani; | 208 | common->disable_ani = !ani; |
209 | 209 | ||
210 | if (common->disable_ani) { | 210 | if (common->disable_ani) { |
211 | clear_bit(SC_OP_ANI_RUN, &sc->sc_flags); | 211 | clear_bit(ATH_OP_ANI_RUN, &common->op_flags); |
212 | ath_stop_ani(sc); | 212 | ath_stop_ani(sc); |
213 | } else { | 213 | } else { |
214 | ath_check_ani(sc); | 214 | ath_check_ani(sc); |
diff --git a/drivers/net/wireless/ath/ath9k/link.c b/drivers/net/wireless/ath/ath9k/link.c index 30dcef5aba10..72a715fe8f24 100644 --- a/drivers/net/wireless/ath/ath9k/link.c +++ b/drivers/net/wireless/ath/ath9k/link.c | |||
@@ -115,13 +115,14 @@ void ath_hw_pll_work(struct work_struct *work) | |||
115 | u32 pll_sqsum; | 115 | u32 pll_sqsum; |
116 | struct ath_softc *sc = container_of(work, struct ath_softc, | 116 | struct ath_softc *sc = container_of(work, struct ath_softc, |
117 | hw_pll_work.work); | 117 | hw_pll_work.work); |
118 | struct ath_common *common = ath9k_hw_common(sc->sc_ah); | ||
118 | /* | 119 | /* |
119 | * ensure that the PLL WAR is executed only | 120 | * ensure that the PLL WAR is executed only |
120 | * after the STA is associated (or) if the | 121 | * after the STA is associated (or) if the |
121 | * beaconing had started in interfaces that | 122 | * beaconing had started in interfaces that |
122 | * uses beacons. | 123 | * uses beacons. |
123 | */ | 124 | */ |
124 | if (!test_bit(SC_OP_BEACONS, &sc->sc_flags)) | 125 | if (!test_bit(ATH_OP_BEACONS, &common->op_flags)) |
125 | return; | 126 | return; |
126 | 127 | ||
127 | if (sc->tx99_state) | 128 | if (sc->tx99_state) |
@@ -414,7 +415,7 @@ void ath_start_ani(struct ath_softc *sc) | |||
414 | unsigned long timestamp = jiffies_to_msecs(jiffies); | 415 | unsigned long timestamp = jiffies_to_msecs(jiffies); |
415 | 416 | ||
416 | if (common->disable_ani || | 417 | if (common->disable_ani || |
417 | !test_bit(SC_OP_ANI_RUN, &sc->sc_flags) || | 418 | !test_bit(ATH_OP_ANI_RUN, &common->op_flags) || |
418 | (sc->hw->conf.flags & IEEE80211_CONF_OFFCHANNEL)) | 419 | (sc->hw->conf.flags & IEEE80211_CONF_OFFCHANNEL)) |
419 | return; | 420 | return; |
420 | 421 | ||
@@ -438,6 +439,7 @@ void ath_stop_ani(struct ath_softc *sc) | |||
438 | void ath_check_ani(struct ath_softc *sc) | 439 | void ath_check_ani(struct ath_softc *sc) |
439 | { | 440 | { |
440 | struct ath_hw *ah = sc->sc_ah; | 441 | struct ath_hw *ah = sc->sc_ah; |
442 | struct ath_common *common = ath9k_hw_common(sc->sc_ah); | ||
441 | struct ath_beacon_config *cur_conf = &sc->cur_beacon_conf; | 443 | struct ath_beacon_config *cur_conf = &sc->cur_beacon_conf; |
442 | 444 | ||
443 | /* | 445 | /* |
@@ -453,23 +455,23 @@ void ath_check_ani(struct ath_softc *sc) | |||
453 | * Disable ANI only when there are no | 455 | * Disable ANI only when there are no |
454 | * associated stations. | 456 | * associated stations. |
455 | */ | 457 | */ |
456 | if (!test_bit(SC_OP_PRIM_STA_VIF, &sc->sc_flags)) | 458 | if (!test_bit(ATH_OP_PRIM_STA_VIF, &common->op_flags)) |
457 | goto stop_ani; | 459 | goto stop_ani; |
458 | } | 460 | } |
459 | } else if (ah->opmode == NL80211_IFTYPE_STATION) { | 461 | } else if (ah->opmode == NL80211_IFTYPE_STATION) { |
460 | if (!test_bit(SC_OP_PRIM_STA_VIF, &sc->sc_flags)) | 462 | if (!test_bit(ATH_OP_PRIM_STA_VIF, &common->op_flags)) |
461 | goto stop_ani; | 463 | goto stop_ani; |
462 | } | 464 | } |
463 | 465 | ||
464 | if (!test_bit(SC_OP_ANI_RUN, &sc->sc_flags)) { | 466 | if (!test_bit(ATH_OP_ANI_RUN, &common->op_flags)) { |
465 | set_bit(SC_OP_ANI_RUN, &sc->sc_flags); | 467 | set_bit(ATH_OP_ANI_RUN, &common->op_flags); |
466 | ath_start_ani(sc); | 468 | ath_start_ani(sc); |
467 | } | 469 | } |
468 | 470 | ||
469 | return; | 471 | return; |
470 | 472 | ||
471 | stop_ani: | 473 | stop_ani: |
472 | clear_bit(SC_OP_ANI_RUN, &sc->sc_flags); | 474 | clear_bit(ATH_OP_ANI_RUN, &common->op_flags); |
473 | ath_stop_ani(sc); | 475 | ath_stop_ani(sc); |
474 | } | 476 | } |
475 | 477 | ||
diff --git a/drivers/net/wireless/ath/ath9k/main.c b/drivers/net/wireless/ath/ath9k/main.c index 42a18037004e..d69853b848ce 100644 --- a/drivers/net/wireless/ath/ath9k/main.c +++ b/drivers/net/wireless/ath/ath9k/main.c | |||
@@ -229,16 +229,16 @@ static bool ath_complete_reset(struct ath_softc *sc, bool start) | |||
229 | ath9k_cmn_update_txpow(ah, sc->curtxpow, | 229 | ath9k_cmn_update_txpow(ah, sc->curtxpow, |
230 | sc->config.txpowlimit, &sc->curtxpow); | 230 | sc->config.txpowlimit, &sc->curtxpow); |
231 | 231 | ||
232 | clear_bit(SC_OP_HW_RESET, &sc->sc_flags); | 232 | clear_bit(ATH_OP_HW_RESET, &common->op_flags); |
233 | ath9k_hw_set_interrupts(ah); | 233 | ath9k_hw_set_interrupts(ah); |
234 | ath9k_hw_enable_interrupts(ah); | 234 | ath9k_hw_enable_interrupts(ah); |
235 | 235 | ||
236 | if (!(sc->hw->conf.flags & IEEE80211_CONF_OFFCHANNEL) && start) { | 236 | if (!(sc->hw->conf.flags & IEEE80211_CONF_OFFCHANNEL) && start) { |
237 | if (!test_bit(SC_OP_BEACONS, &sc->sc_flags)) | 237 | if (!test_bit(ATH_OP_BEACONS, &common->op_flags)) |
238 | goto work; | 238 | goto work; |
239 | 239 | ||
240 | if (ah->opmode == NL80211_IFTYPE_STATION && | 240 | if (ah->opmode == NL80211_IFTYPE_STATION && |
241 | test_bit(SC_OP_PRIM_STA_VIF, &sc->sc_flags)) { | 241 | test_bit(ATH_OP_PRIM_STA_VIF, &common->op_flags)) { |
242 | spin_lock_irqsave(&sc->sc_pm_lock, flags); | 242 | spin_lock_irqsave(&sc->sc_pm_lock, flags); |
243 | sc->ps_flags |= PS_BEACON_SYNC | PS_WAIT_FOR_BEACON; | 243 | sc->ps_flags |= PS_BEACON_SYNC | PS_WAIT_FOR_BEACON; |
244 | spin_unlock_irqrestore(&sc->sc_pm_lock, flags); | 244 | spin_unlock_irqrestore(&sc->sc_pm_lock, flags); |
@@ -336,7 +336,7 @@ static int ath_set_channel(struct ath_softc *sc, struct cfg80211_chan_def *chand | |||
336 | int old_pos = -1; | 336 | int old_pos = -1; |
337 | int r; | 337 | int r; |
338 | 338 | ||
339 | if (test_bit(SC_OP_INVALID, &sc->sc_flags)) | 339 | if (test_bit(ATH_OP_INVALID, &common->op_flags)) |
340 | return -EIO; | 340 | return -EIO; |
341 | 341 | ||
342 | offchannel = !!(hw->conf.flags & IEEE80211_CONF_OFFCHANNEL); | 342 | offchannel = !!(hw->conf.flags & IEEE80211_CONF_OFFCHANNEL); |
@@ -402,7 +402,7 @@ static int ath_set_channel(struct ath_softc *sc, struct cfg80211_chan_def *chand | |||
402 | chan->center_freq); | 402 | chan->center_freq); |
403 | } else { | 403 | } else { |
404 | /* perform spectral scan if requested. */ | 404 | /* perform spectral scan if requested. */ |
405 | if (test_bit(SC_OP_SCANNING, &sc->sc_flags) && | 405 | if (test_bit(ATH_OP_SCANNING, &common->op_flags) && |
406 | sc->spectral_mode == SPECTRAL_CHANSCAN) | 406 | sc->spectral_mode == SPECTRAL_CHANSCAN) |
407 | ath9k_spectral_scan_trigger(hw); | 407 | ath9k_spectral_scan_trigger(hw); |
408 | } | 408 | } |
@@ -566,6 +566,7 @@ irqreturn_t ath_isr(int irq, void *dev) | |||
566 | 566 | ||
567 | struct ath_softc *sc = dev; | 567 | struct ath_softc *sc = dev; |
568 | struct ath_hw *ah = sc->sc_ah; | 568 | struct ath_hw *ah = sc->sc_ah; |
569 | struct ath_common *common = ath9k_hw_common(ah); | ||
569 | enum ath9k_int status; | 570 | enum ath9k_int status; |
570 | u32 sync_cause = 0; | 571 | u32 sync_cause = 0; |
571 | bool sched = false; | 572 | bool sched = false; |
@@ -575,7 +576,7 @@ irqreturn_t ath_isr(int irq, void *dev) | |||
575 | * touch anything. Note this can happen early | 576 | * touch anything. Note this can happen early |
576 | * on if the IRQ is shared. | 577 | * on if the IRQ is shared. |
577 | */ | 578 | */ |
578 | if (test_bit(SC_OP_INVALID, &sc->sc_flags)) | 579 | if (test_bit(ATH_OP_INVALID, &common->op_flags)) |
579 | return IRQ_NONE; | 580 | return IRQ_NONE; |
580 | 581 | ||
581 | /* shared irq, not for us */ | 582 | /* shared irq, not for us */ |
@@ -583,7 +584,7 @@ irqreturn_t ath_isr(int irq, void *dev) | |||
583 | if (!ath9k_hw_intrpend(ah)) | 584 | if (!ath9k_hw_intrpend(ah)) |
584 | return IRQ_NONE; | 585 | return IRQ_NONE; |
585 | 586 | ||
586 | if (test_bit(SC_OP_HW_RESET, &sc->sc_flags)) { | 587 | if (test_bit(ATH_OP_HW_RESET, &common->op_flags)) { |
587 | ath9k_hw_kill_interrupts(ah); | 588 | ath9k_hw_kill_interrupts(ah); |
588 | return IRQ_HANDLED; | 589 | return IRQ_HANDLED; |
589 | } | 590 | } |
@@ -684,10 +685,11 @@ int ath_reset(struct ath_softc *sc) | |||
684 | 685 | ||
685 | void ath9k_queue_reset(struct ath_softc *sc, enum ath_reset_type type) | 686 | void ath9k_queue_reset(struct ath_softc *sc, enum ath_reset_type type) |
686 | { | 687 | { |
688 | struct ath_common *common = ath9k_hw_common(sc->sc_ah); | ||
687 | #ifdef CONFIG_ATH9K_DEBUGFS | 689 | #ifdef CONFIG_ATH9K_DEBUGFS |
688 | RESET_STAT_INC(sc, type); | 690 | RESET_STAT_INC(sc, type); |
689 | #endif | 691 | #endif |
690 | set_bit(SC_OP_HW_RESET, &sc->sc_flags); | 692 | set_bit(ATH_OP_HW_RESET, &common->op_flags); |
691 | ieee80211_queue_work(sc->hw, &sc->hw_reset_work); | 693 | ieee80211_queue_work(sc->hw, &sc->hw_reset_work); |
692 | } | 694 | } |
693 | 695 | ||
@@ -768,7 +770,7 @@ static int ath9k_start(struct ieee80211_hw *hw) | |||
768 | 770 | ||
769 | ath_mci_enable(sc); | 771 | ath_mci_enable(sc); |
770 | 772 | ||
771 | clear_bit(SC_OP_INVALID, &sc->sc_flags); | 773 | clear_bit(ATH_OP_INVALID, &common->op_flags); |
772 | sc->sc_ah->is_monitoring = false; | 774 | sc->sc_ah->is_monitoring = false; |
773 | 775 | ||
774 | if (!ath_complete_reset(sc, false)) | 776 | if (!ath_complete_reset(sc, false)) |
@@ -885,7 +887,7 @@ static void ath9k_stop(struct ieee80211_hw *hw) | |||
885 | 887 | ||
886 | ath_cancel_work(sc); | 888 | ath_cancel_work(sc); |
887 | 889 | ||
888 | if (test_bit(SC_OP_INVALID, &sc->sc_flags)) { | 890 | if (test_bit(ATH_OP_INVALID, &common->op_flags)) { |
889 | ath_dbg(common, ANY, "Device not present\n"); | 891 | ath_dbg(common, ANY, "Device not present\n"); |
890 | mutex_unlock(&sc->mutex); | 892 | mutex_unlock(&sc->mutex); |
891 | return; | 893 | return; |
@@ -940,7 +942,7 @@ static void ath9k_stop(struct ieee80211_hw *hw) | |||
940 | 942 | ||
941 | ath9k_ps_restore(sc); | 943 | ath9k_ps_restore(sc); |
942 | 944 | ||
943 | set_bit(SC_OP_INVALID, &sc->sc_flags); | 945 | set_bit(ATH_OP_INVALID, &common->op_flags); |
944 | sc->ps_idle = prev_idle; | 946 | sc->ps_idle = prev_idle; |
945 | 947 | ||
946 | mutex_unlock(&sc->mutex); | 948 | mutex_unlock(&sc->mutex); |
@@ -1081,7 +1083,7 @@ static void ath9k_calculate_summary_state(struct ieee80211_hw *hw, | |||
1081 | */ | 1083 | */ |
1082 | if (ah->opmode == NL80211_IFTYPE_STATION && | 1084 | if (ah->opmode == NL80211_IFTYPE_STATION && |
1083 | old_opmode == NL80211_IFTYPE_AP && | 1085 | old_opmode == NL80211_IFTYPE_AP && |
1084 | test_bit(SC_OP_PRIM_STA_VIF, &sc->sc_flags)) { | 1086 | test_bit(ATH_OP_PRIM_STA_VIF, &common->op_flags)) { |
1085 | ieee80211_iterate_active_interfaces_atomic( | 1087 | ieee80211_iterate_active_interfaces_atomic( |
1086 | sc->hw, IEEE80211_IFACE_ITER_RESUME_ALL, | 1088 | sc->hw, IEEE80211_IFACE_ITER_RESUME_ALL, |
1087 | ath9k_sta_vif_iter, sc); | 1089 | ath9k_sta_vif_iter, sc); |
@@ -1590,7 +1592,7 @@ static void ath9k_set_assoc_state(struct ath_softc *sc, | |||
1590 | struct ieee80211_bss_conf *bss_conf = &vif->bss_conf; | 1592 | struct ieee80211_bss_conf *bss_conf = &vif->bss_conf; |
1591 | unsigned long flags; | 1593 | unsigned long flags; |
1592 | 1594 | ||
1593 | set_bit(SC_OP_PRIM_STA_VIF, &sc->sc_flags); | 1595 | set_bit(ATH_OP_PRIM_STA_VIF, &common->op_flags); |
1594 | avp->primary_sta_vif = true; | 1596 | avp->primary_sta_vif = true; |
1595 | 1597 | ||
1596 | /* | 1598 | /* |
@@ -1625,8 +1627,9 @@ static void ath9k_bss_assoc_iter(void *data, u8 *mac, struct ieee80211_vif *vif) | |||
1625 | { | 1627 | { |
1626 | struct ath_softc *sc = data; | 1628 | struct ath_softc *sc = data; |
1627 | struct ieee80211_bss_conf *bss_conf = &vif->bss_conf; | 1629 | struct ieee80211_bss_conf *bss_conf = &vif->bss_conf; |
1630 | struct ath_common *common = ath9k_hw_common(sc->sc_ah); | ||
1628 | 1631 | ||
1629 | if (test_bit(SC_OP_PRIM_STA_VIF, &sc->sc_flags)) | 1632 | if (test_bit(ATH_OP_PRIM_STA_VIF, &common->op_flags)) |
1630 | return; | 1633 | return; |
1631 | 1634 | ||
1632 | if (bss_conf->assoc) | 1635 | if (bss_conf->assoc) |
@@ -1657,18 +1660,18 @@ static void ath9k_bss_info_changed(struct ieee80211_hw *hw, | |||
1657 | bss_conf->bssid, bss_conf->assoc); | 1660 | bss_conf->bssid, bss_conf->assoc); |
1658 | 1661 | ||
1659 | if (avp->primary_sta_vif && !bss_conf->assoc) { | 1662 | if (avp->primary_sta_vif && !bss_conf->assoc) { |
1660 | clear_bit(SC_OP_PRIM_STA_VIF, &sc->sc_flags); | 1663 | clear_bit(ATH_OP_PRIM_STA_VIF, &common->op_flags); |
1661 | avp->primary_sta_vif = false; | 1664 | avp->primary_sta_vif = false; |
1662 | 1665 | ||
1663 | if (ah->opmode == NL80211_IFTYPE_STATION) | 1666 | if (ah->opmode == NL80211_IFTYPE_STATION) |
1664 | clear_bit(SC_OP_BEACONS, &sc->sc_flags); | 1667 | clear_bit(ATH_OP_BEACONS, &common->op_flags); |
1665 | } | 1668 | } |
1666 | 1669 | ||
1667 | ieee80211_iterate_active_interfaces_atomic( | 1670 | ieee80211_iterate_active_interfaces_atomic( |
1668 | sc->hw, IEEE80211_IFACE_ITER_RESUME_ALL, | 1671 | sc->hw, IEEE80211_IFACE_ITER_RESUME_ALL, |
1669 | ath9k_bss_assoc_iter, sc); | 1672 | ath9k_bss_assoc_iter, sc); |
1670 | 1673 | ||
1671 | if (!test_bit(SC_OP_PRIM_STA_VIF, &sc->sc_flags) && | 1674 | if (!test_bit(ATH_OP_PRIM_STA_VIF, &common->op_flags) && |
1672 | ah->opmode == NL80211_IFTYPE_STATION) { | 1675 | ah->opmode == NL80211_IFTYPE_STATION) { |
1673 | memset(common->curbssid, 0, ETH_ALEN); | 1676 | memset(common->curbssid, 0, ETH_ALEN); |
1674 | common->curaid = 0; | 1677 | common->curaid = 0; |
@@ -1897,7 +1900,7 @@ static void ath9k_flush(struct ieee80211_hw *hw, u32 queues, bool drop) | |||
1897 | return; | 1900 | return; |
1898 | } | 1901 | } |
1899 | 1902 | ||
1900 | if (test_bit(SC_OP_INVALID, &sc->sc_flags)) { | 1903 | if (test_bit(ATH_OP_INVALID, &common->op_flags)) { |
1901 | ath_dbg(common, ANY, "Device not present\n"); | 1904 | ath_dbg(common, ANY, "Device not present\n"); |
1902 | mutex_unlock(&sc->mutex); | 1905 | mutex_unlock(&sc->mutex); |
1903 | return; | 1906 | return; |
@@ -2070,13 +2073,15 @@ static int ath9k_get_antenna(struct ieee80211_hw *hw, u32 *tx_ant, u32 *rx_ant) | |||
2070 | static void ath9k_sw_scan_start(struct ieee80211_hw *hw) | 2073 | static void ath9k_sw_scan_start(struct ieee80211_hw *hw) |
2071 | { | 2074 | { |
2072 | struct ath_softc *sc = hw->priv; | 2075 | struct ath_softc *sc = hw->priv; |
2073 | set_bit(SC_OP_SCANNING, &sc->sc_flags); | 2076 | struct ath_common *common = ath9k_hw_common(sc->sc_ah); |
2077 | set_bit(ATH_OP_SCANNING, &common->op_flags); | ||
2074 | } | 2078 | } |
2075 | 2079 | ||
2076 | static void ath9k_sw_scan_complete(struct ieee80211_hw *hw) | 2080 | static void ath9k_sw_scan_complete(struct ieee80211_hw *hw) |
2077 | { | 2081 | { |
2078 | struct ath_softc *sc = hw->priv; | 2082 | struct ath_softc *sc = hw->priv; |
2079 | clear_bit(SC_OP_SCANNING, &sc->sc_flags); | 2083 | struct ath_common *common = ath9k_hw_common(sc->sc_ah); |
2084 | clear_bit(ATH_OP_SCANNING, &common->op_flags); | ||
2080 | } | 2085 | } |
2081 | 2086 | ||
2082 | static void ath9k_channel_switch_beacon(struct ieee80211_hw *hw, | 2087 | static void ath9k_channel_switch_beacon(struct ieee80211_hw *hw, |
diff --git a/drivers/net/wireless/ath/ath9k/mci.c b/drivers/net/wireless/ath/ath9k/mci.c index 71799fcade54..a0dbcc412384 100644 --- a/drivers/net/wireless/ath/ath9k/mci.c +++ b/drivers/net/wireless/ath/ath9k/mci.c | |||
@@ -555,7 +555,7 @@ void ath_mci_intr(struct ath_softc *sc) | |||
555 | mci_int_rxmsg &= ~AR_MCI_INTERRUPT_RX_MSG_GPM; | 555 | mci_int_rxmsg &= ~AR_MCI_INTERRUPT_RX_MSG_GPM; |
556 | 556 | ||
557 | while (more_data == MCI_GPM_MORE) { | 557 | while (more_data == MCI_GPM_MORE) { |
558 | if (test_bit(SC_OP_HW_RESET, &sc->sc_flags)) | 558 | if (test_bit(ATH_OP_HW_RESET, &common->op_flags)) |
559 | return; | 559 | return; |
560 | 560 | ||
561 | pgpm = mci->gpm_buf.bf_addr; | 561 | pgpm = mci->gpm_buf.bf_addr; |
diff --git a/drivers/net/wireless/ath/ath9k/pci.c b/drivers/net/wireless/ath/ath9k/pci.c index 55724b02316b..25304adece57 100644 --- a/drivers/net/wireless/ath/ath9k/pci.c +++ b/drivers/net/wireless/ath/ath9k/pci.c | |||
@@ -784,6 +784,7 @@ static int ath_pci_probe(struct pci_dev *pdev, const struct pci_device_id *id) | |||
784 | { | 784 | { |
785 | struct ath_softc *sc; | 785 | struct ath_softc *sc; |
786 | struct ieee80211_hw *hw; | 786 | struct ieee80211_hw *hw; |
787 | struct ath_common *common; | ||
787 | u8 csz; | 788 | u8 csz; |
788 | u32 val; | 789 | u32 val; |
789 | int ret = 0; | 790 | int ret = 0; |
@@ -858,9 +859,6 @@ static int ath_pci_probe(struct pci_dev *pdev, const struct pci_device_id *id) | |||
858 | sc->mem = pcim_iomap_table(pdev)[0]; | 859 | sc->mem = pcim_iomap_table(pdev)[0]; |
859 | sc->driver_data = id->driver_data; | 860 | sc->driver_data = id->driver_data; |
860 | 861 | ||
861 | /* Will be cleared in ath9k_start() */ | ||
862 | set_bit(SC_OP_INVALID, &sc->sc_flags); | ||
863 | |||
864 | ret = request_irq(pdev->irq, ath_isr, IRQF_SHARED, "ath9k", sc); | 862 | ret = request_irq(pdev->irq, ath_isr, IRQF_SHARED, "ath9k", sc); |
865 | if (ret) { | 863 | if (ret) { |
866 | dev_err(&pdev->dev, "request_irq failed\n"); | 864 | dev_err(&pdev->dev, "request_irq failed\n"); |
@@ -879,6 +877,10 @@ static int ath_pci_probe(struct pci_dev *pdev, const struct pci_device_id *id) | |||
879 | wiphy_info(hw->wiphy, "%s mem=0x%lx, irq=%d\n", | 877 | wiphy_info(hw->wiphy, "%s mem=0x%lx, irq=%d\n", |
880 | hw_name, (unsigned long)sc->mem, pdev->irq); | 878 | hw_name, (unsigned long)sc->mem, pdev->irq); |
881 | 879 | ||
880 | /* Will be cleared in ath9k_start() */ | ||
881 | common = ath9k_hw_common(sc->sc_ah); | ||
882 | set_bit(ATH_OP_INVALID, &common->op_flags); | ||
883 | |||
882 | return 0; | 884 | return 0; |
883 | 885 | ||
884 | err_init: | 886 | err_init: |
diff --git a/drivers/net/wireless/ath/ath9k/tx99.c b/drivers/net/wireless/ath/ath9k/tx99.c index b686a7498450..a65cfb91adca 100644 --- a/drivers/net/wireless/ath/ath9k/tx99.c +++ b/drivers/net/wireless/ath/ath9k/tx99.c | |||
@@ -108,7 +108,7 @@ static int ath9k_tx99_init(struct ath_softc *sc) | |||
108 | struct ath_tx_control txctl; | 108 | struct ath_tx_control txctl; |
109 | int r; | 109 | int r; |
110 | 110 | ||
111 | if (test_bit(SC_OP_INVALID, &sc->sc_flags)) { | 111 | if (test_bit(ATH_OP_INVALID, &common->op_flags)) { |
112 | ath_err(common, | 112 | ath_err(common, |
113 | "driver is in invalid state unable to use TX99"); | 113 | "driver is in invalid state unable to use TX99"); |
114 | return -EINVAL; | 114 | return -EINVAL; |
diff --git a/drivers/net/wireless/ath/ath9k/wow.c b/drivers/net/wireless/ath/ath9k/wow.c index 1b3230fa3651..2879887f5691 100644 --- a/drivers/net/wireless/ath/ath9k/wow.c +++ b/drivers/net/wireless/ath/ath9k/wow.c | |||
@@ -198,7 +198,7 @@ int ath9k_suspend(struct ieee80211_hw *hw, | |||
198 | ath_cancel_work(sc); | 198 | ath_cancel_work(sc); |
199 | ath_stop_ani(sc); | 199 | ath_stop_ani(sc); |
200 | 200 | ||
201 | if (test_bit(SC_OP_INVALID, &sc->sc_flags)) { | 201 | if (test_bit(ATH_OP_INVALID, &common->op_flags)) { |
202 | ath_dbg(common, ANY, "Device not present\n"); | 202 | ath_dbg(common, ANY, "Device not present\n"); |
203 | ret = -EINVAL; | 203 | ret = -EINVAL; |
204 | goto fail_wow; | 204 | goto fail_wow; |
@@ -224,7 +224,7 @@ int ath9k_suspend(struct ieee80211_hw *hw, | |||
224 | * STA. | 224 | * STA. |
225 | */ | 225 | */ |
226 | 226 | ||
227 | if (!test_bit(SC_OP_PRIM_STA_VIF, &sc->sc_flags)) { | 227 | if (!test_bit(ATH_OP_PRIM_STA_VIF, &common->op_flags)) { |
228 | ath_dbg(common, WOW, "None of the STA vifs are associated\n"); | 228 | ath_dbg(common, WOW, "None of the STA vifs are associated\n"); |
229 | ret = 1; | 229 | ret = 1; |
230 | goto fail_wow; | 230 | goto fail_wow; |
diff --git a/drivers/net/wireless/ath/ath9k/xmit.c b/drivers/net/wireless/ath/ath9k/xmit.c index 3e7966b4b61e..f76e6b9bb8e6 100644 --- a/drivers/net/wireless/ath/ath9k/xmit.c +++ b/drivers/net/wireless/ath/ath9k/xmit.c | |||
@@ -1769,7 +1769,7 @@ bool ath_drain_all_txq(struct ath_softc *sc) | |||
1769 | int i; | 1769 | int i; |
1770 | u32 npend = 0; | 1770 | u32 npend = 0; |
1771 | 1771 | ||
1772 | if (test_bit(SC_OP_INVALID, &sc->sc_flags)) | 1772 | if (test_bit(ATH_OP_INVALID, &common->op_flags)) |
1773 | return true; | 1773 | return true; |
1774 | 1774 | ||
1775 | ath9k_hw_abort_tx_dma(ah); | 1775 | ath9k_hw_abort_tx_dma(ah); |
@@ -1817,11 +1817,12 @@ void ath_tx_cleanupq(struct ath_softc *sc, struct ath_txq *txq) | |||
1817 | */ | 1817 | */ |
1818 | void ath_txq_schedule(struct ath_softc *sc, struct ath_txq *txq) | 1818 | void ath_txq_schedule(struct ath_softc *sc, struct ath_txq *txq) |
1819 | { | 1819 | { |
1820 | struct ath_common *common = ath9k_hw_common(sc->sc_ah); | ||
1820 | struct ath_atx_ac *ac, *last_ac; | 1821 | struct ath_atx_ac *ac, *last_ac; |
1821 | struct ath_atx_tid *tid, *last_tid; | 1822 | struct ath_atx_tid *tid, *last_tid; |
1822 | bool sent = false; | 1823 | bool sent = false; |
1823 | 1824 | ||
1824 | if (test_bit(SC_OP_HW_RESET, &sc->sc_flags) || | 1825 | if (test_bit(ATH_OP_HW_RESET, &common->op_flags) || |
1825 | list_empty(&txq->axq_acq)) | 1826 | list_empty(&txq->axq_acq)) |
1826 | return; | 1827 | return; |
1827 | 1828 | ||
@@ -2471,7 +2472,7 @@ static void ath_tx_processq(struct ath_softc *sc, struct ath_txq *txq) | |||
2471 | 2472 | ||
2472 | ath_txq_lock(sc, txq); | 2473 | ath_txq_lock(sc, txq); |
2473 | for (;;) { | 2474 | for (;;) { |
2474 | if (test_bit(SC_OP_HW_RESET, &sc->sc_flags)) | 2475 | if (test_bit(ATH_OP_HW_RESET, &common->op_flags)) |
2475 | break; | 2476 | break; |
2476 | 2477 | ||
2477 | if (list_empty(&txq->axq_q)) { | 2478 | if (list_empty(&txq->axq_q)) { |
@@ -2554,7 +2555,7 @@ void ath_tx_edma_tasklet(struct ath_softc *sc) | |||
2554 | int status; | 2555 | int status; |
2555 | 2556 | ||
2556 | for (;;) { | 2557 | for (;;) { |
2557 | if (test_bit(SC_OP_HW_RESET, &sc->sc_flags)) | 2558 | if (test_bit(ATH_OP_HW_RESET, &common->op_flags)) |
2558 | break; | 2559 | break; |
2559 | 2560 | ||
2560 | status = ath9k_hw_txprocdesc(ah, NULL, (void *)&ts); | 2561 | status = ath9k_hw_txprocdesc(ah, NULL, (void *)&ts); |