From patchwork Wed Apr 18 01:49:35 2018 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Ben Greear X-Patchwork-Id: 10347121 X-Patchwork-Delegate: johannes@sipsolutions.net Return-Path: Received: from mail.wl.linuxfoundation.org (pdx-wl-mail.web.codeaurora.org [172.30.200.125]) by pdx-korg-patchwork.web.codeaurora.org (Postfix) with ESMTP id BDB1F60542 for ; Wed, 18 Apr 2018 01:49:58 +0000 (UTC) Received: from mail.wl.linuxfoundation.org (localhost [127.0.0.1]) by mail.wl.linuxfoundation.org (Postfix) with ESMTP id C185C28471 for ; Wed, 18 Apr 2018 01:49:58 +0000 (UTC) Received: by mail.wl.linuxfoundation.org (Postfix, from userid 486) id B4D5428475; Wed, 18 Apr 2018 01:49:58 +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=-7.9 required=2.0 tests=BAYES_00, 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 4E8FC28471 for ; Wed, 18 Apr 2018 01:49:58 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1753359AbeDRBtp (ORCPT ); Tue, 17 Apr 2018 21:49:45 -0400 Received: from mail2.candelatech.com ([208.74.158.173]:57358 "EHLO mail2.candelatech.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1753251AbeDRBtn (ORCPT ); Tue, 17 Apr 2018 21:49:43 -0400 Received: from ben-dt3.candelatech.com (firewall.candelatech.com [50.251.239.81]) by mail2.candelatech.com (Postfix) with ESMTP id 8D82C40A7E2; Tue, 17 Apr 2018 18:49:40 -0700 (PDT) From: greearb@candelatech.com To: netdev@vger.kernel.org Cc: linux-wireless@vger.kernel.org, ath10k@lists.infradead.org, Ben Greear Subject: [PATCH 2/3] mac80211: Add support for ethtool gstats2 API. Date: Tue, 17 Apr 2018 18:49:35 -0700 Message-Id: <1524016176-3881-2-git-send-email-greearb@candelatech.com> X-Mailer: git-send-email 2.4.11 In-Reply-To: <1524016176-3881-1-git-send-email-greearb@candelatech.com> References: <1524016176-3881-1-git-send-email-greearb@candelatech.com> 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 From: Ben Greear This enables users to request fewer stats to be refreshed in cases where firmware does not need to be probed. Signed-off-by: Ben Greear --- include/net/mac80211.h | 6 ++++++ net/mac80211/driver-ops.h | 9 +++++++-- net/mac80211/ethtool.c | 18 +++++++++++++----- 3 files changed, 26 insertions(+), 7 deletions(-) diff --git a/include/net/mac80211.h b/include/net/mac80211.h index d2279b2..4854f33 100644 --- a/include/net/mac80211.h +++ b/include/net/mac80211.h @@ -3361,6 +3361,8 @@ enum ieee80211_reconfig_type { * * @get_et_stats: Ethtool API to get a set of u64 stats. * + * @get_et_stats2: Ethtool API to get a set of u64 stats, with flags. + * * @get_et_strings: Ethtool API to get a set of strings to describe stats * and perhaps other supported types of ethtool data-sets. * @@ -3692,6 +3694,10 @@ struct ieee80211_ops { void (*get_et_stats)(struct ieee80211_hw *hw, struct ieee80211_vif *vif, struct ethtool_stats *stats, u64 *data); + void (*get_et_stats2)(struct ieee80211_hw *hw, + struct ieee80211_vif *vif, + struct ethtool_stats *stats, u64 *data, + u32 flags); void (*get_et_strings)(struct ieee80211_hw *hw, struct ieee80211_vif *vif, u32 sset, u8 *data); diff --git a/net/mac80211/driver-ops.h b/net/mac80211/driver-ops.h index 4d82fe7..519d2db 100644 --- a/net/mac80211/driver-ops.h +++ b/net/mac80211/driver-ops.h @@ -58,10 +58,15 @@ static inline void drv_get_et_strings(struct ieee80211_sub_if_data *sdata, static inline void drv_get_et_stats(struct ieee80211_sub_if_data *sdata, struct ethtool_stats *stats, - u64 *data) + u64 *data, u32 flags) { struct ieee80211_local *local = sdata->local; - if (local->ops->get_et_stats) { + if (local->ops->get_et_stats2) { + trace_drv_get_et_stats(local); + local->ops->get_et_stats2(&local->hw, &sdata->vif, stats, data, + flags); + trace_drv_return_void(local); + } else if (local->ops->get_et_stats) { trace_drv_get_et_stats(local); local->ops->get_et_stats(&local->hw, &sdata->vif, stats, data); trace_drv_return_void(local); diff --git a/net/mac80211/ethtool.c b/net/mac80211/ethtool.c index 9cc986d..b67520e 100644 --- a/net/mac80211/ethtool.c +++ b/net/mac80211/ethtool.c @@ -61,9 +61,9 @@ static int ieee80211_get_sset_count(struct net_device *dev, int sset) return rv; } -static void ieee80211_get_stats(struct net_device *dev, - struct ethtool_stats *stats, - u64 *data) +static void ieee80211_get_stats2(struct net_device *dev, + struct ethtool_stats *stats, + u64 *data, u32 flags) { struct ieee80211_sub_if_data *sdata = IEEE80211_DEV_TO_SUB_IF(dev); struct ieee80211_chanctx_conf *chanctx_conf; @@ -199,7 +199,14 @@ static void ieee80211_get_stats(struct net_device *dev, if (WARN_ON(i != STA_STATS_LEN)) return; - drv_get_et_stats(sdata, stats, &(data[STA_STATS_LEN])); + drv_get_et_stats(sdata, stats, &data[STA_STATS_LEN], flags); +} + +static void ieee80211_get_stats(struct net_device *dev, + struct ethtool_stats *stats, + u64 *data) +{ + ieee80211_get_stats2(dev, stats, data, 0); } static void ieee80211_get_strings(struct net_device *dev, u32 sset, u8 *data) @@ -211,7 +218,7 @@ static void ieee80211_get_strings(struct net_device *dev, u32 sset, u8 *data) sz_sta_stats = sizeof(ieee80211_gstrings_sta_stats); memcpy(data, ieee80211_gstrings_sta_stats, sz_sta_stats); } - drv_get_et_strings(sdata, sset, &(data[sz_sta_stats])); + drv_get_et_strings(sdata, sset, &data[sz_sta_stats]); } static int ieee80211_get_regs_len(struct net_device *dev) @@ -238,5 +245,6 @@ const struct ethtool_ops ieee80211_ethtool_ops = { .set_ringparam = ieee80211_set_ringparam, .get_strings = ieee80211_get_strings, .get_ethtool_stats = ieee80211_get_stats, + .get_ethtool_stats2 = ieee80211_get_stats2, .get_sset_count = ieee80211_get_sset_count, };