diff options
Diffstat (limited to 'drivers/net/wireless/ath/ath9k/beacon.c')
-rw-r--r-- | drivers/net/wireless/ath/ath9k/beacon.c | 25 |
1 files changed, 13 insertions, 12 deletions
diff --git a/drivers/net/wireless/ath/ath9k/beacon.c b/drivers/net/wireless/ath/ath9k/beacon.c index 5e108c086904..385ba03134ba 100644 --- a/drivers/net/wireless/ath/ath9k/beacon.c +++ b/drivers/net/wireless/ath/ath9k/beacon.c | |||
@@ -566,8 +566,6 @@ static void ath_beacon_config_sta(struct ath_softc *sc, | |||
566 | * last beacon we received (which may be none). | 566 | * last beacon we received (which may be none). |
567 | */ | 567 | */ |
568 | dtimperiod = conf->dtim_period; | 568 | dtimperiod = conf->dtim_period; |
569 | if (dtimperiod <= 0) /* NB: 0 if not known */ | ||
570 | dtimperiod = 1; | ||
571 | dtimcount = conf->dtim_count; | 569 | dtimcount = conf->dtim_count; |
572 | if (dtimcount >= dtimperiod) /* NB: sanity check */ | 570 | if (dtimcount >= dtimperiod) /* NB: sanity check */ |
573 | dtimcount = 0; | 571 | dtimcount = 0; |
@@ -575,8 +573,6 @@ static void ath_beacon_config_sta(struct ath_softc *sc, | |||
575 | cfpcount = 0; | 573 | cfpcount = 0; |
576 | 574 | ||
577 | sleepduration = conf->listen_interval * intval; | 575 | sleepduration = conf->listen_interval * intval; |
578 | if (sleepduration <= 0) | ||
579 | sleepduration = intval; | ||
580 | 576 | ||
581 | /* | 577 | /* |
582 | * Pull nexttbtt forward to reflect the current | 578 | * Pull nexttbtt forward to reflect the current |
@@ -662,8 +658,7 @@ static void ath_beacon_config_sta(struct ath_softc *sc, | |||
662 | } | 658 | } |
663 | 659 | ||
664 | static void ath_beacon_config_adhoc(struct ath_softc *sc, | 660 | static void ath_beacon_config_adhoc(struct ath_softc *sc, |
665 | struct ath_beacon_config *conf, | 661 | struct ath_beacon_config *conf) |
666 | struct ieee80211_vif *vif) | ||
667 | { | 662 | { |
668 | struct ath_hw *ah = sc->sc_ah; | 663 | struct ath_hw *ah = sc->sc_ah; |
669 | struct ath_common *common = ath9k_hw_common(ah); | 664 | struct ath_common *common = ath9k_hw_common(ah); |
@@ -718,18 +713,17 @@ void ath_beacon_config(struct ath_softc *sc, struct ieee80211_vif *vif) | |||
718 | /* Setup the beacon configuration parameters */ | 713 | /* Setup the beacon configuration parameters */ |
719 | if (vif) { | 714 | if (vif) { |
720 | struct ieee80211_bss_conf *bss_conf = &vif->bss_conf; | 715 | struct ieee80211_bss_conf *bss_conf = &vif->bss_conf; |
721 | |||
722 | iftype = vif->type; | 716 | iftype = vif->type; |
723 | |||
724 | cur_conf->beacon_interval = bss_conf->beacon_int; | 717 | cur_conf->beacon_interval = bss_conf->beacon_int; |
725 | cur_conf->dtim_period = bss_conf->dtim_period; | 718 | cur_conf->dtim_period = bss_conf->dtim_period; |
719 | } else { | ||
720 | iftype = sc->sc_ah->opmode; | ||
721 | } | ||
722 | |||
726 | cur_conf->listen_interval = 1; | 723 | cur_conf->listen_interval = 1; |
727 | cur_conf->dtim_count = 1; | 724 | cur_conf->dtim_count = 1; |
728 | cur_conf->bmiss_timeout = | 725 | cur_conf->bmiss_timeout = |
729 | ATH_DEFAULT_BMISS_LIMIT * cur_conf->beacon_interval; | 726 | ATH_DEFAULT_BMISS_LIMIT * cur_conf->beacon_interval; |
730 | } else { | ||
731 | iftype = sc->sc_ah->opmode; | ||
732 | } | ||
733 | 727 | ||
734 | /* | 728 | /* |
735 | * It looks like mac80211 may end up using beacon interval of zero in | 729 | * It looks like mac80211 may end up using beacon interval of zero in |
@@ -740,13 +734,20 @@ void ath_beacon_config(struct ath_softc *sc, struct ieee80211_vif *vif) | |||
740 | if (cur_conf->beacon_interval == 0) | 734 | if (cur_conf->beacon_interval == 0) |
741 | cur_conf->beacon_interval = 100; | 735 | cur_conf->beacon_interval = 100; |
742 | 736 | ||
737 | /* | ||
738 | * Some times we dont parse dtim period from mac80211, in that case | ||
739 | * use a default value | ||
740 | */ | ||
741 | if (cur_conf->dtim_period == 0) | ||
742 | cur_conf->dtim_period = 1; | ||
743 | |||
743 | switch (iftype) { | 744 | switch (iftype) { |
744 | case NL80211_IFTYPE_AP: | 745 | case NL80211_IFTYPE_AP: |
745 | ath_beacon_config_ap(sc, cur_conf); | 746 | ath_beacon_config_ap(sc, cur_conf); |
746 | break; | 747 | break; |
747 | case NL80211_IFTYPE_ADHOC: | 748 | case NL80211_IFTYPE_ADHOC: |
748 | case NL80211_IFTYPE_MESH_POINT: | 749 | case NL80211_IFTYPE_MESH_POINT: |
749 | ath_beacon_config_adhoc(sc, cur_conf, vif); | 750 | ath_beacon_config_adhoc(sc, cur_conf); |
750 | break; | 751 | break; |
751 | case NL80211_IFTYPE_STATION: | 752 | case NL80211_IFTYPE_STATION: |
752 | ath_beacon_config_sta(sc, cur_conf); | 753 | ath_beacon_config_sta(sc, cur_conf); |