Skip to content

Commit

Permalink
ath9k: Cleanup add/change_interface callbacks
Browse files Browse the repository at this point in the history
*Remove all the checks that will be handled by cfg80211
based on the interface combination advertised. For instance,
driver supports at the maximum 8 beaconing interface, while
we advertise maximum 8 beaconing interface in the interface
combination support.

*cfg80211 will take care of not allowing
us to add an interface that is not supported by the
driver, further if the change_interface changes the
old interface to a beaconing interface while we had
reached the max limit of 8 beaconing interface, again
cfg80211 takes care of this stuff!
So remove all these checks.

*Beautify placing PS wrappers in the appropriate
position.

Signed-off-by: Mohammed Shafi Shajakhan <mohammed@qca.qualcomm.com>
Signed-off-by: John W. Linville <linville@tuxdriver.com>
  • Loading branch information
Mohammed Shafi Shajakhan authored and John W. Linville committed Sep 11, 2012
1 parent 1b29ce4 commit 327967c
Showing 1 changed file with 10 additions and 47 deletions.
57 changes: 10 additions & 47 deletions drivers/net/wireless/ath/ath9k/main.c
Original file line number Diff line number Diff line change
Expand Up @@ -986,47 +986,21 @@ static int ath9k_add_interface(struct ieee80211_hw *hw,
struct ath_softc *sc = hw->priv;
struct ath_hw *ah = sc->sc_ah;
struct ath_common *common = ath9k_hw_common(ah);
int ret = 0;

ath9k_ps_wakeup(sc);
mutex_lock(&sc->mutex);

switch (vif->type) {
case NL80211_IFTYPE_STATION:
case NL80211_IFTYPE_WDS:
case NL80211_IFTYPE_ADHOC:
case NL80211_IFTYPE_AP:
case NL80211_IFTYPE_MESH_POINT:
break;
default:
ath_err(common, "Interface type %d not yet supported\n",
vif->type);
ret = -EOPNOTSUPP;
goto out;
}

if (ath9k_uses_beacons(vif->type)) {
if (sc->nbcnvifs >= ATH_BCBUF) {
ath_err(common, "Not enough beacon buffers when adding"
" new interface of type: %i\n",
vif->type);
ret = -ENOBUFS;
goto out;
}
}

ath_dbg(common, CONFIG, "Attach a VIF of type: %d\n", vif->type);

sc->nvifs++;

ath9k_ps_wakeup(sc);
ath9k_calculate_summary_state(hw, vif);
ath9k_ps_restore(sc);

if (ath9k_uses_beacons(vif->type))
ath9k_beacon_assign_slot(sc, vif);

out:
mutex_unlock(&sc->mutex);
ath9k_ps_restore(sc);
return ret;
return 0;
}

static int ath9k_change_interface(struct ieee80211_hw *hw,
Expand All @@ -1036,36 +1010,25 @@ static int ath9k_change_interface(struct ieee80211_hw *hw,
{
struct ath_softc *sc = hw->priv;
struct ath_common *common = ath9k_hw_common(sc->sc_ah);
int ret = 0;

ath_dbg(common, CONFIG, "Change Interface\n");

mutex_lock(&sc->mutex);
ath9k_ps_wakeup(sc);

if (ath9k_uses_beacons(new_type) &&
!ath9k_uses_beacons(vif->type)) {
if (sc->nbcnvifs >= ATH_BCBUF) {
ath_err(common, "No beacon slot available\n");
ret = -ENOBUFS;
goto out;
}
}

if (ath9k_uses_beacons(vif->type))
ath9k_beacon_remove_slot(sc, vif);

vif->type = new_type;
vif->p2p = p2p;

ath9k_ps_wakeup(sc);
ath9k_calculate_summary_state(hw, vif);
ath9k_ps_restore(sc);

if (ath9k_uses_beacons(vif->type))
ath9k_beacon_assign_slot(sc, vif);

out:
ath9k_ps_restore(sc);
mutex_unlock(&sc->mutex);
return ret;
return 0;
}

static void ath9k_remove_interface(struct ieee80211_hw *hw,
Expand All @@ -1076,18 +1039,18 @@ static void ath9k_remove_interface(struct ieee80211_hw *hw,

ath_dbg(common, CONFIG, "Detach Interface\n");

ath9k_ps_wakeup(sc);
mutex_lock(&sc->mutex);

sc->nvifs--;

if (ath9k_uses_beacons(vif->type))
ath9k_beacon_remove_slot(sc, vif);

ath9k_ps_wakeup(sc);
ath9k_calculate_summary_state(hw, NULL);
ath9k_ps_restore(sc);

mutex_unlock(&sc->mutex);
ath9k_ps_restore(sc);
}

static void ath9k_enable_ps(struct ath_softc *sc)
Expand Down

0 comments on commit 327967c

Please sign in to comment.