diff options
Diffstat (limited to 'drivers/net/ethernet/intel/iavf/iavf_ethtool.c')
-rw-r--r-- | drivers/net/ethernet/intel/iavf/iavf_ethtool.c | 142 |
1 files changed, 68 insertions, 74 deletions
diff --git a/drivers/net/ethernet/intel/iavf/iavf_ethtool.c b/drivers/net/ethernet/intel/iavf/iavf_ethtool.c index 57142bd5dc09..9f87304109fe 100644 --- a/drivers/net/ethernet/intel/iavf/iavf_ethtool.c +++ b/drivers/net/ethernet/intel/iavf/iavf_ethtool.c @@ -9,57 +9,51 @@ /* ethtool statistics helpers */ /** - * struct i40e_stats - definition for an ethtool statistic + * struct iavf_stats - definition for an ethtool statistic * @stat_string: statistic name to display in ethtool -S output * @sizeof_stat: the sizeof() the stat, must be no greater than sizeof(u64) * @stat_offset: offsetof() the stat from a base pointer * * This structure defines a statistic to be added to the ethtool stats buffer. * It defines a statistic as offset from a common base pointer. Stats should - * be defined in constant arrays using the I40E_STAT macro, with every element + * be defined in constant arrays using the IAVF_STAT macro, with every element * of the array using the same _type for calculating the sizeof_stat and * stat_offset. * * The @sizeof_stat is expected to be sizeof(u8), sizeof(u16), sizeof(u32) or * sizeof(u64). Other sizes are not expected and will produce a WARN_ONCE from - * the i40e_add_ethtool_stat() helper function. + * the iavf_add_ethtool_stat() helper function. * * The @stat_string is interpreted as a format string, allowing formatted * values to be inserted while looping over multiple structures for a given * statistics array. Thus, every statistic string in an array should have the * same type and number of format specifiers, to be formatted by variadic - * arguments to the i40e_add_stat_string() helper function. + * arguments to the iavf_add_stat_string() helper function. **/ -struct i40e_stats { +struct iavf_stats { char stat_string[ETH_GSTRING_LEN]; int sizeof_stat; int stat_offset; }; -/* Helper macro to define an i40e_stat structure with proper size and type. +/* Helper macro to define an iavf_stat structure with proper size and type. * Use this when defining constant statistics arrays. Note that @_type expects * only a type name and is used multiple times. */ -#define I40E_STAT(_type, _name, _stat) { \ +#define IAVF_STAT(_type, _name, _stat) { \ .stat_string = _name, \ .sizeof_stat = FIELD_SIZEOF(_type, _stat), \ .stat_offset = offsetof(_type, _stat) \ } -/* Helper macro for defining some statistics directly copied from the netdev - * stats structure. - */ -#define I40E_NETDEV_STAT(_net_stat) \ - I40E_STAT(struct rtnl_link_stats64, #_net_stat, _net_stat) - /* Helper macro for defining some statistics related to queues */ -#define I40E_QUEUE_STAT(_name, _stat) \ - I40E_STAT(struct i40e_ring, _name, _stat) +#define IAVF_QUEUE_STAT(_name, _stat) \ + IAVF_STAT(struct iavf_ring, _name, _stat) /* Stats associated with a Tx or Rx ring */ -static const struct i40e_stats i40e_gstrings_queue_stats[] = { - I40E_QUEUE_STAT("%s-%u.packets", stats.packets), - I40E_QUEUE_STAT("%s-%u.bytes", stats.bytes), +static const struct iavf_stats iavf_gstrings_queue_stats[] = { + IAVF_QUEUE_STAT("%s-%u.packets", stats.packets), + IAVF_QUEUE_STAT("%s-%u.bytes", stats.bytes), }; /** @@ -69,12 +63,12 @@ static const struct i40e_stats i40e_gstrings_queue_stats[] = { * @stat: the stat definition * * Copies the stat data defined by the pointer and stat structure pair into - * the memory supplied as data. Used to implement i40e_add_ethtool_stats and + * the memory supplied as data. Used to implement iavf_add_ethtool_stats and * iavf_add_queue_stats. If the pointer is null, data will be zero'd. */ static void iavf_add_one_ethtool_stat(u64 *data, void *pointer, - const struct i40e_stats *stat) + const struct iavf_stats *stat) { char *p; @@ -122,7 +116,7 @@ iavf_add_one_ethtool_stat(u64 *data, void *pointer, **/ static void __iavf_add_ethtool_stats(u64 **data, void *pointer, - const struct i40e_stats stats[], + const struct iavf_stats stats[], const unsigned int size) { unsigned int i; @@ -132,7 +126,7 @@ __iavf_add_ethtool_stats(u64 **data, void *pointer, } /** - * i40e_add_ethtool_stats - copy stats into ethtool supplied buffer + * iavf_add_ethtool_stats - copy stats into ethtool supplied buffer * @data: ethtool stats buffer * @pointer: location where stats are stored * @stats: static const array of stat definitions @@ -144,7 +138,7 @@ __iavf_add_ethtool_stats(u64 **data, void *pointer, * The parameter @stats is evaluated twice, so parameters with side effects * should be avoided. **/ -#define i40e_add_ethtool_stats(data, pointer, stats) \ +#define iavf_add_ethtool_stats(data, pointer, stats) \ __iavf_add_ethtool_stats(data, pointer, stats, ARRAY_SIZE(stats)) /** @@ -153,8 +147,8 @@ __iavf_add_ethtool_stats(u64 **data, void *pointer, * @ring: the ring to copy * * Queue statistics must be copied while protected by - * u64_stats_fetch_begin_irq, so we can't directly use i40e_add_ethtool_stats. - * Assumes that queue stats are defined in i40e_gstrings_queue_stats. If the + * u64_stats_fetch_begin_irq, so we can't directly use iavf_add_ethtool_stats. + * Assumes that queue stats are defined in iavf_gstrings_queue_stats. If the * ring pointer is null, zero out the queue stat values and update the data * pointer. Otherwise safely copy the stats from the ring into the supplied * buffer and update the data pointer when finished. @@ -162,10 +156,10 @@ __iavf_add_ethtool_stats(u64 **data, void *pointer, * This function expects to be called while under rcu_read_lock(). **/ static void -iavf_add_queue_stats(u64 **data, struct i40e_ring *ring) +iavf_add_queue_stats(u64 **data, struct iavf_ring *ring) { - const unsigned int size = ARRAY_SIZE(i40e_gstrings_queue_stats); - const struct i40e_stats *stats = i40e_gstrings_queue_stats; + const unsigned int size = ARRAY_SIZE(iavf_gstrings_queue_stats); + const struct iavf_stats *stats = iavf_gstrings_queue_stats; unsigned int start; unsigned int i; @@ -185,7 +179,7 @@ iavf_add_queue_stats(u64 **data, struct i40e_ring *ring) } /** - * __i40e_add_stat_strings - copy stat strings into ethtool buffer + * __iavf_add_stat_strings - copy stat strings into ethtool buffer * @p: ethtool supplied buffer * @stats: stat definitions array * @size: size of the stats array @@ -193,7 +187,7 @@ iavf_add_queue_stats(u64 **data, struct i40e_ring *ring) * Format and copy the strings described by stats into the buffer pointed at * by p. **/ -static void __i40e_add_stat_strings(u8 **p, const struct i40e_stats stats[], +static void __iavf_add_stat_strings(u8 **p, const struct iavf_stats stats[], const unsigned int size, ...) { unsigned int i; @@ -209,7 +203,7 @@ static void __i40e_add_stat_strings(u8 **p, const struct i40e_stats stats[], } /** - * i40e_add_stat_strings - copy stat strings into ethtool buffer + * iavf_add_stat_strings - copy stat strings into ethtool buffer * @p: ethtool supplied buffer * @stats: stat definitions array * @@ -220,30 +214,30 @@ static void __i40e_add_stat_strings(u8 **p, const struct i40e_stats stats[], * should be avoided. Additionally, stats must be an array such that * ARRAY_SIZE can be called on it. **/ -#define i40e_add_stat_strings(p, stats, ...) \ - __i40e_add_stat_strings(p, stats, ARRAY_SIZE(stats), ## __VA_ARGS__) - -#define IAVF_STAT(_name, _stat) \ - I40E_STAT(struct iavf_adapter, _name, _stat) - -static const struct i40e_stats iavf_gstrings_stats[] = { - IAVF_STAT("rx_bytes", current_stats.rx_bytes), - IAVF_STAT("rx_unicast", current_stats.rx_unicast), - IAVF_STAT("rx_multicast", current_stats.rx_multicast), - IAVF_STAT("rx_broadcast", current_stats.rx_broadcast), - IAVF_STAT("rx_discards", current_stats.rx_discards), - IAVF_STAT("rx_unknown_protocol", current_stats.rx_unknown_protocol), - IAVF_STAT("tx_bytes", current_stats.tx_bytes), - IAVF_STAT("tx_unicast", current_stats.tx_unicast), - IAVF_STAT("tx_multicast", current_stats.tx_multicast), - IAVF_STAT("tx_broadcast", current_stats.tx_broadcast), - IAVF_STAT("tx_discards", current_stats.tx_discards), - IAVF_STAT("tx_errors", current_stats.tx_errors), +#define iavf_add_stat_strings(p, stats, ...) \ + __iavf_add_stat_strings(p, stats, ARRAY_SIZE(stats), ## __VA_ARGS__) + +#define VF_STAT(_name, _stat) \ + IAVF_STAT(struct iavf_adapter, _name, _stat) + +static const struct iavf_stats iavf_gstrings_stats[] = { + VF_STAT("rx_bytes", current_stats.rx_bytes), + VF_STAT("rx_unicast", current_stats.rx_unicast), + VF_STAT("rx_multicast", current_stats.rx_multicast), + VF_STAT("rx_broadcast", current_stats.rx_broadcast), + VF_STAT("rx_discards", current_stats.rx_discards), + VF_STAT("rx_unknown_protocol", current_stats.rx_unknown_protocol), + VF_STAT("tx_bytes", current_stats.tx_bytes), + VF_STAT("tx_unicast", current_stats.tx_unicast), + VF_STAT("tx_multicast", current_stats.tx_multicast), + VF_STAT("tx_broadcast", current_stats.tx_broadcast), + VF_STAT("tx_discards", current_stats.tx_discards), + VF_STAT("tx_errors", current_stats.tx_errors), }; #define IAVF_STATS_LEN ARRAY_SIZE(iavf_gstrings_stats) -#define IAVF_QUEUE_STATS_LEN ARRAY_SIZE(i40e_gstrings_queue_stats) +#define IAVF_QUEUE_STATS_LEN ARRAY_SIZE(iavf_gstrings_queue_stats) /* For now we have one and only one private flag and it is only defined * when we have support for the SKIP_CPU_SYNC DMA attribute. Instead @@ -349,11 +343,11 @@ static void iavf_get_ethtool_stats(struct net_device *netdev, struct iavf_adapter *adapter = netdev_priv(netdev); unsigned int i; - i40e_add_ethtool_stats(&data, adapter, iavf_gstrings_stats); + iavf_add_ethtool_stats(&data, adapter, iavf_gstrings_stats); rcu_read_lock(); for (i = 0; i < IAVF_MAX_REQ_QUEUES; i++) { - struct i40e_ring *ring; + struct iavf_ring *ring; /* Avoid accessing un-allocated queues */ ring = (i < adapter->num_active_queues ? @@ -397,15 +391,15 @@ static void iavf_get_stat_strings(struct net_device *netdev, u8 *data) { unsigned int i; - i40e_add_stat_strings(&data, iavf_gstrings_stats); + iavf_add_stat_strings(&data, iavf_gstrings_stats); /* Queues are always allocated in pairs, so we just use num_tx_queues * for both Tx and Rx queues. */ for (i = 0; i < netdev->num_tx_queues; i++) { - i40e_add_stat_strings(&data, i40e_gstrings_queue_stats, + iavf_add_stat_strings(&data, iavf_gstrings_queue_stats, "tx", i); - i40e_add_stat_strings(&data, i40e_gstrings_queue_stats, + iavf_add_stat_strings(&data, iavf_gstrings_queue_stats, "rx", i); } } @@ -437,7 +431,7 @@ static void iavf_get_strings(struct net_device *netdev, u32 sset, u8 *data) * @netdev: network interface device structure * * The get string set count and the string set should be matched for each - * flag returned. Add new strings for each flag to the i40e_gstrings_priv_flags + * flag returned. Add new strings for each flag to the iavf_gstrings_priv_flags * array. * * Returns a u32 bitmap of flags. @@ -548,7 +542,7 @@ static void iavf_set_msglevel(struct net_device *netdev, u32 data) { struct iavf_adapter *adapter = netdev_priv(netdev); - if (I40E_DEBUG_USER & data) + if (IAVF_DEBUG_USER & data) adapter->hw.debug_mask = data; adapter->msg_enable = data; } @@ -648,8 +642,8 @@ static int __iavf_get_coalesce(struct net_device *netdev, struct ethtool_coalesce *ec, int queue) { struct iavf_adapter *adapter = netdev_priv(netdev); - struct i40e_vsi *vsi = &adapter->vsi; - struct i40e_ring *rx_ring, *tx_ring; + struct iavf_vsi *vsi = &adapter->vsi; + struct iavf_ring *rx_ring, *tx_ring; ec->tx_max_coalesced_frames = vsi->work_limit; ec->rx_max_coalesced_frames = vsi->work_limit; @@ -671,8 +665,8 @@ static int __iavf_get_coalesce(struct net_device *netdev, if (ITR_IS_DYNAMIC(tx_ring->itr_setting)) ec->use_adaptive_tx_coalesce = 1; - ec->rx_coalesce_usecs = rx_ring->itr_setting & ~I40E_ITR_DYNAMIC; - ec->tx_coalesce_usecs = tx_ring->itr_setting & ~I40E_ITR_DYNAMIC; + ec->rx_coalesce_usecs = rx_ring->itr_setting & ~IAVF_ITR_DYNAMIC; + ec->tx_coalesce_usecs = tx_ring->itr_setting & ~IAVF_ITR_DYNAMIC; return 0; } @@ -718,20 +712,20 @@ static int iavf_get_per_queue_coalesce(struct net_device *netdev, u32 queue, static void iavf_set_itr_per_queue(struct iavf_adapter *adapter, struct ethtool_coalesce *ec, int queue) { - struct i40e_ring *rx_ring = &adapter->rx_rings[queue]; - struct i40e_ring *tx_ring = &adapter->tx_rings[queue]; - struct i40e_q_vector *q_vector; + struct iavf_ring *rx_ring = &adapter->rx_rings[queue]; + struct iavf_ring *tx_ring = &adapter->tx_rings[queue]; + struct iavf_q_vector *q_vector; rx_ring->itr_setting = ITR_REG_ALIGN(ec->rx_coalesce_usecs); tx_ring->itr_setting = ITR_REG_ALIGN(ec->tx_coalesce_usecs); - rx_ring->itr_setting |= I40E_ITR_DYNAMIC; + rx_ring->itr_setting |= IAVF_ITR_DYNAMIC; if (!ec->use_adaptive_rx_coalesce) - rx_ring->itr_setting ^= I40E_ITR_DYNAMIC; + rx_ring->itr_setting ^= IAVF_ITR_DYNAMIC; - tx_ring->itr_setting |= I40E_ITR_DYNAMIC; + tx_ring->itr_setting |= IAVF_ITR_DYNAMIC; if (!ec->use_adaptive_tx_coalesce) - tx_ring->itr_setting ^= I40E_ITR_DYNAMIC; + tx_ring->itr_setting ^= IAVF_ITR_DYNAMIC; q_vector = rx_ring->q_vector; q_vector->rx.target_itr = ITR_TO_REG(rx_ring->itr_setting); @@ -757,7 +751,7 @@ static int __iavf_set_coalesce(struct net_device *netdev, struct ethtool_coalesce *ec, int queue) { struct iavf_adapter *adapter = netdev_priv(netdev); - struct i40e_vsi *vsi = &adapter->vsi; + struct iavf_vsi *vsi = &adapter->vsi; int i; if (ec->tx_max_coalesced_frames_irq || ec->rx_max_coalesced_frames_irq) @@ -766,15 +760,15 @@ static int __iavf_set_coalesce(struct net_device *netdev, if (ec->rx_coalesce_usecs == 0) { if (ec->use_adaptive_rx_coalesce) netif_info(adapter, drv, netdev, "rx-usecs=0, need to disable adaptive-rx for a complete disable\n"); - } else if ((ec->rx_coalesce_usecs < I40E_MIN_ITR) || - (ec->rx_coalesce_usecs > I40E_MAX_ITR)) { + } else if ((ec->rx_coalesce_usecs < IAVF_MIN_ITR) || + (ec->rx_coalesce_usecs > IAVF_MAX_ITR)) { netif_info(adapter, drv, netdev, "Invalid value, rx-usecs range is 0-8160\n"); return -EINVAL; } else if (ec->tx_coalesce_usecs == 0) { if (ec->use_adaptive_tx_coalesce) netif_info(adapter, drv, netdev, "tx-usecs=0, need to disable adaptive-tx for a complete disable\n"); - } else if ((ec->tx_coalesce_usecs < I40E_MIN_ITR) || - (ec->tx_coalesce_usecs > I40E_MAX_ITR)) { + } else if ((ec->tx_coalesce_usecs < IAVF_MIN_ITR) || + (ec->tx_coalesce_usecs > IAVF_MAX_ITR)) { netif_info(adapter, drv, netdev, "Invalid value, tx-usecs range is 0-8160\n"); return -EINVAL; } |