ath9k: Add ATH_OP_MULTI_CHANNEL
authorFelix Fietkau <nbd@openwrt.org>
Wed, 11 Jun 2014 10:48:00 +0000 (16:18 +0530)
committerJohn W. Linville <linville@tuxdriver.com>
Thu, 19 Jun 2014 19:49:18 +0000 (15:49 -0400)
Signed-off-by: Felix Fietkau <nbd@openwrt.org>
Signed-off-by: Rajkumar Manoharan <rmanohar@qti.qualcomm.com>
Signed-off-by: John W. Linville <linville@tuxdriver.com>
drivers/net/wireless/ath/ath.h
drivers/net/wireless/ath/ath9k/channel.c

index a889fd66fc63190ec7f393ae8e64a6d117281267..fd9e5305e77fd263cb55ecb46ff08e6d06ca0935 100644 (file)
@@ -63,6 +63,7 @@ enum ath_op_flags {
        ATH_OP_PRIM_STA_VIF,
        ATH_OP_HW_RESET,
        ATH_OP_SCANNING,
+       ATH_OP_MULTI_CHANNEL,
 };
 
 enum ath_bus_type {
index 097207073cd44e6393e4dfa70cc1c0fe6068577f..e3127b52e1eeb8b32fbe2a9f55774762ea050561 100644 (file)
@@ -150,8 +150,10 @@ ath_chanctx_send_vif_ps_frame(struct ath_softc *sc, struct ath_vif *avp,
 
 void ath_chanctx_check_active(struct ath_softc *sc, struct ath_chanctx *ctx)
 {
+       struct ath_common *common = ath9k_hw_common(sc->sc_ah);
        struct ath_vif *avp;
        bool active = false;
+       u8 n_active = 0;
 
        if (!ctx)
                return;
@@ -171,6 +173,17 @@ void ath_chanctx_check_active(struct ath_softc *sc, struct ath_chanctx *ctx)
                }
        }
        ctx->active = active;
+
+       ath_for_each_chanctx(sc, ctx) {
+               if (!ctx->assigned || list_empty(&ctx->vifs))
+                       continue;
+               n_active++;
+       }
+
+       if (n_active > 1)
+               set_bit(ATH_OP_MULTI_CHANNEL, &common->op_flags);
+       else
+               clear_bit(ATH_OP_MULTI_CHANNEL, &common->op_flags);
 }
 
 static bool