mirror of
https://github.com/tbsdtv/linux_media.git
synced 2025-07-23 12:43:29 +02:00
ethtool: add standard pause stats
Currently drivers have to report their pause frames statistics via ethtool -S, and there is a wide variety of names used for these statistics. Add the two statistics defined in IEEE 802.3x to the standard API. Create a new ethtool request header flag for including statistics in the response to GET commands. Always create the ETHTOOL_A_PAUSE_STATS nest in replies when flag is set. Testing if driver declares the op is not a reliable way of checking if any stats will actually be included and therefore we don't want to give the impression that presence of ETHTOOL_A_PAUSE_STATS indicates driver support. Note that this patch does not include PFC counters, which may fit better in dcbnl? But mostly I don't need them/have a setup to test them so I haven't looked deeply into exposing them :) v3: - add a helper for "uninitializing" stats, rather than a cryptic memset() (Andrew) Signed-off-by: Jakub Kicinski <kuba@kernel.org> Reviewed-by: Saeed Mahameed <saeedm@nvidia.com> Signed-off-by: David S. Miller <davem@davemloft.net>
This commit is contained in:
committed by
David S. Miller
parent
0f9ad4e759
commit
9a27a33027
@@ -241,6 +241,27 @@ bool ethtool_convert_link_mode_to_legacy_u32(u32 *legacy_u32,
|
||||
ETHTOOL_COALESCE_PKT_RATE_LOW | ETHTOOL_COALESCE_PKT_RATE_HIGH | \
|
||||
ETHTOOL_COALESCE_RATE_SAMPLE_INTERVAL)
|
||||
|
||||
#define ETHTOOL_STAT_NOT_SET (~0ULL)
|
||||
|
||||
/**
|
||||
* struct ethtool_pause_stats - statistics for IEEE 802.3x pause frames
|
||||
* @tx_pause_frames: transmitted pause frame count. Reported to user space
|
||||
* as %ETHTOOL_A_PAUSE_STAT_TX_FRAMES.
|
||||
*
|
||||
* Equivalent to `30.3.4.2 aPAUSEMACCtrlFramesTransmitted`
|
||||
* from the standard.
|
||||
*
|
||||
* @rx_pause_frames: received pause frame count. Reported to user space
|
||||
* as %ETHTOOL_A_PAUSE_STAT_RX_FRAMES. Equivalent to:
|
||||
*
|
||||
* Equivalent to `30.3.4.3 aPAUSEMACCtrlFramesReceived`
|
||||
* from the standard.
|
||||
*/
|
||||
struct ethtool_pause_stats {
|
||||
u64 tx_pause_frames;
|
||||
u64 rx_pause_frames;
|
||||
};
|
||||
|
||||
/**
|
||||
* struct ethtool_ops - optional netdev operations
|
||||
* @supported_coalesce_params: supported types of interrupt coalescing.
|
||||
@@ -282,6 +303,9 @@ bool ethtool_convert_link_mode_to_legacy_u32(u32 *legacy_u32,
|
||||
* Returns a negative error code or zero.
|
||||
* @get_ringparam: Report ring sizes
|
||||
* @set_ringparam: Set ring sizes. Returns a negative error code or zero.
|
||||
* @get_pause_stats: Report pause frame statistics. Drivers must not zero
|
||||
* statistics which they don't report. The stats structure is initialized
|
||||
* to ETHTOOL_STAT_NOT_SET indicating driver does not report statistics.
|
||||
* @get_pauseparam: Report pause parameters
|
||||
* @set_pauseparam: Set pause parameters. Returns a negative error code
|
||||
* or zero.
|
||||
@@ -418,6 +442,8 @@ struct ethtool_ops {
|
||||
struct ethtool_ringparam *);
|
||||
int (*set_ringparam)(struct net_device *,
|
||||
struct ethtool_ringparam *);
|
||||
void (*get_pause_stats)(struct net_device *dev,
|
||||
struct ethtool_pause_stats *pause_stats);
|
||||
void (*get_pauseparam)(struct net_device *,
|
||||
struct ethtool_pauseparam*);
|
||||
int (*set_pauseparam)(struct net_device *,
|
||||
|
Reference in New Issue
Block a user