From patchwork Tue Sep 11 17:26:18 2018 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Ali MJ Al-Nasrawy X-Patchwork-Id: 10596025 X-Patchwork-Delegate: kvalo@adurom.com Return-Path: Received: from mail.wl.linuxfoundation.org (pdx-wl-mail.web.codeaurora.org [172.30.200.125]) by pdx-korg-patchwork-2.web.codeaurora.org (Postfix) with ESMTP id 3AEC814E5 for ; Tue, 11 Sep 2018 17:26:34 +0000 (UTC) Received: from mail.wl.linuxfoundation.org (localhost [127.0.0.1]) by mail.wl.linuxfoundation.org (Postfix) with ESMTP id 1D0BB28B91 for ; Tue, 11 Sep 2018 17:26:34 +0000 (UTC) Received: by mail.wl.linuxfoundation.org (Postfix, from userid 486) id 0ECD429B0A; Tue, 11 Sep 2018 17:26:34 +0000 (UTC) X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on pdx-wl-mail.web.codeaurora.org X-Spam-Level: X-Spam-Status: No, score=-8.0 required=2.0 tests=BAYES_00,DKIM_SIGNED, DKIM_VALID,DKIM_VALID_AU,FREEMAIL_FROM,MAILING_LIST_MULTI,RCVD_IN_DNSWL_HI autolearn=ham version=3.3.1 Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) by mail.wl.linuxfoundation.org (Postfix) with ESMTP id A4EB328B91 for ; Tue, 11 Sep 2018 17:26:33 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1727150AbeIKW0v (ORCPT ); Tue, 11 Sep 2018 18:26:51 -0400 Received: from mail-ed1-f68.google.com ([209.85.208.68]:34869 "EHLO mail-ed1-f68.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1726943AbeIKW0u (ORCPT ); Tue, 11 Sep 2018 18:26:50 -0400 Received: by mail-ed1-f68.google.com with SMTP id y20-v6so19898042edq.2 for ; Tue, 11 Sep 2018 10:26:30 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=from:to:cc:subject:date:message-id; bh=XZr7/keRfwjCp4Th17UV1wPJA6TZu72xUq5mN9xfD7A=; b=gdeftzBvO7ErRF/IpbC/xwZdq8S4Rl1E8zdkz6T0bpn1SLVVp/aLMMEW+fm4v4b7d8 Ut4YD5r4YKdGrPVG0aFV9/Kne438Xe9FR9HM0uwGWk2sqh3WHHzLmSLxpEhkICtgvQot aeBi6Q5L6I/QHemydJXJRZoNCp2luK9Ukg5g7MDsjFvxifI5fP7YwKOYd5wu3U2xtvow rmtKDxqIazPNtFBY8LGl0Y4LxLa5di6N+XBLypfvTstnU+IxikJRzBF/fkKOZT3i8xrL oXj7IPoHabHbVSUw4wysJSohr0BkQFj5O4kc03MvuqPejSosIYZ5wS5fLzlZu5Ivql9K ZGgQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:from:to:cc:subject:date:message-id; bh=XZr7/keRfwjCp4Th17UV1wPJA6TZu72xUq5mN9xfD7A=; b=ToJC3IA9PvV2PiO52EPCga0zpb7er4r2xbjtqA2k53S5jkztmCqU1MG81a5+HoPG/7 gLq7MPMFgiLGQ4aP9ltFuF6l01sSfSTm5E97TxGIb/GUdBVT12ZAsL9M8/6o/JU0U5fq hSqCSn0/lGq4xhRi3CCxWtYqi7O348QD7xwI2eM3cnnY9F7uv6KaA4a+zs2h97KWM/YO 22mDpD8WnKIH/aE91zF69C1a00wmOfTzH9+g3H1XgldIZfF1Y2tQ+ROePb/u3lwdhqxH FvRC5s61oHDfjMHnkoLtDcf5B9k/KxFxpa6hcAuCzPh8gPX8ZAFZAeFJlxDs4UNFymvd YRyg== X-Gm-Message-State: APzg51D0V7VWUNtm2zQ9vnCIhK2GUyLDpLuKUiAEFVhxUT7Epo9jKPJR zgQe70javb+6fm8TDy7bs+GT8B439Zk= X-Google-Smtp-Source: ANB0VdY+9LEBnWMhJgVqN8PVswxVnjAAFZl1Pg2CMDmns53P5imCRr3l9t909Fgw6ubWenYwZVMMdw== X-Received: by 2002:a05:6402:397:: with SMTP id o23mr29277145edv.117.1536686790294; Tue, 11 Sep 2018 10:26:30 -0700 (PDT) Received: from localhost.localdomain ([37.237.211.184]) by smtp.gmail.com with ESMTPSA id s36-v6sm12846689edb.56.2018.09.11.10.26.28 (version=TLS1_2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128/128); Tue, 11 Sep 2018 10:26:29 -0700 (PDT) From: Ali MJ Al-Nasrawy To: Arend van Spriel Cc: linux-wireless@vger.kernel.org, brcm80211-dev-list.pdl@broadcom.com, brcm80211-dev-list@cypress.com, Ali MJ Al-Nasrawy Subject: [PATCH] brcmsmac: ap mode: update beacon when TIM changes Date: Tue, 11 Sep 2018 20:26:18 +0300 Message-Id: <20180911172618.13049-1-alimjalnasrawy@gmail.com> X-Mailer: git-send-email 2.18.0 Sender: linux-wireless-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-wireless@vger.kernel.org X-Virus-Scanned: ClamAV using ClamSMTP Beacons+TIM are created/updated for fw beaconing only when BSS_CHANGED_BEACON. This is not compliant with power-saving stations. Fix it by updating beacon templates on mac80211 set_tim callback. Adresses the issue in: https://marc.info/?i=20180911163534.21312d08%20()%20manjaro Signed-off-by: Ali MJ Al-Nasrawy Reviewed-by: Arend van Spriel --- .../broadcom/brcm80211/brcmsmac/mac80211_if.c | 23 +++++++++++++++++++ .../broadcom/brcm80211/brcmsmac/main.h | 2 ++ 2 files changed, 25 insertions(+) diff --git a/drivers/net/wireless/broadcom/brcm80211/brcmsmac/mac80211_if.c b/drivers/net/wireless/broadcom/brcm80211/brcmsmac/mac80211_if.c index ddfdfe1..ee92bb5 100644 --- a/drivers/net/wireless/broadcom/brcm80211/brcmsmac/mac80211_if.c +++ b/drivers/net/wireless/broadcom/brcm80211/brcmsmac/mac80211_if.c @@ -502,6 +502,7 @@ brcms_ops_add_interface(struct ieee80211_hw *hw, struct ieee80211_vif *vif) } spin_lock_bh(&wl->lock); + wl->wlc->vif = vif; wl->mute_tx = false; brcms_c_mute(wl->wlc, false); if (vif->type == NL80211_IFTYPE_STATION) @@ -937,6 +938,27 @@ static void brcms_ops_set_tsf(struct ieee80211_hw *hw, spin_unlock_bh(&wl->lock); } +static int brcms_ops_beacon_set_tim(struct ieee80211_hw *hw, + struct ieee80211_sta *sta, bool set) +{ + /*FIXME: this may be more efficiently handled by delegating + beacon upload to the beacon interrupt handler*/ + struct brcms_info *wl = hw->priv; + struct sk_buff *beacon; + u16 tim_offset = 0; + + beacon = ieee80211_beacon_get_tim(hw, wl->wlc->vif, + &tim_offset, NULL); + if (beacon){ + spin_lock_bh(&wl->lock); + brcms_c_set_new_beacon(wl->wlc, beacon, tim_offset, + wl->wlc->vif->bss_conf.dtim_period); + spin_unlock_bh(&wl->lock); + } + + return 0; +} + static const struct ieee80211_ops brcms_ops = { .tx = brcms_ops_tx, .start = brcms_ops_start, @@ -955,6 +977,7 @@ static const struct ieee80211_ops brcms_ops = { .flush = brcms_ops_flush, .get_tsf = brcms_ops_get_tsf, .set_tsf = brcms_ops_set_tsf, + .set_tim = brcms_ops_beacon_set_tim, }; void brcms_dpc(unsigned long data) diff --git a/drivers/net/wireless/broadcom/brcm80211/brcmsmac/main.h b/drivers/net/wireless/broadcom/brcm80211/brcmsmac/main.h index c4d135c..e3939fc 100644 --- a/drivers/net/wireless/broadcom/brcm80211/brcmsmac/main.h +++ b/drivers/net/wireless/broadcom/brcm80211/brcmsmac/main.h @@ -568,6 +568,8 @@ struct brcms_c_info { u16 beacon_tim_offset; u16 beacon_dtim_period; struct sk_buff *probe_resp; + + struct ieee80211_vif *vif; }; /* antsel module specific state */