From: Prameela Rani Garnepudi <[email protected]>

remove_interface callback of mac80211 is handled for AP mode.
Same is notified to firmware through vap_capabilities frame
with VAP status VAP_DELETE.

Signed-off-by: Prameela Rani Garnepudi <[email protected]>
Signed-off-by: Amitkumar Karwar <[email protected]>
---
 drivers/net/wireless/rsi/rsi_91x_mac80211.c | 26 ++++++++++++++++++++++----
 1 file changed, 22 insertions(+), 4 deletions(-)

diff --git a/drivers/net/wireless/rsi/rsi_91x_mac80211.c 
b/drivers/net/wireless/rsi/rsi_91x_mac80211.c
index edcba56..99446bb 100644
--- a/drivers/net/wireless/rsi/rsi_91x_mac80211.c
+++ b/drivers/net/wireless/rsi/rsi_91x_mac80211.c
@@ -405,13 +405,31 @@ static void rsi_mac80211_remove_interface(struct 
ieee80211_hw *hw,
 {
        struct rsi_hw *adapter = hw->priv;
        struct rsi_common *common = adapter->priv;
+       enum opmode opmode;
+
+       rsi_dbg(INFO_ZONE, "Remove Interface Called\n");
 
        mutex_lock(&common->mutex);
-       if (vif->type == NL80211_IFTYPE_STATION) {
-               adapter->sc_nvifs--;
-               rsi_set_vap_capabilities(common, STA_OPMODE, vif->addr,
-                                        0, VAP_DELETE);
+
+       if (adapter->sc_nvifs <= 0) {
+               mutex_unlock(&common->mutex);
+               return;
+       }
+
+       switch (vif->type) {
+       case NL80211_IFTYPE_STATION:
+               opmode = STA_OPMODE;
+               break;
+       case NL80211_IFTYPE_AP:
+               opmode = AP_OPMODE;
+               break;
+       default:
+               mutex_unlock(&common->mutex);
+               return;
        }
+       rsi_set_vap_capabilities(common, opmode, vif->addr,
+                                0, VAP_DELETE);
+       adapter->sc_nvifs--;
 
        if (!memcmp(adapter->vifs[0], vif, sizeof(struct ieee80211_vif)))
                adapter->vifs[0] = NULL;
-- 
2.7.4

Reply via email to