LCOV - code coverage report
Current view: top level - include/linux - ethtool.h (source / functions) Hit Total Coverage
Test: landlock.info Lines: 0 2 0.0 %
Date: 2021-04-22 12:43:58 Functions: 0 0 -

          Line data    Source code
       1             : /* SPDX-License-Identifier: GPL-2.0 */
       2             : /*
       3             :  * ethtool.h: Defines for Linux ethtool.
       4             :  *
       5             :  * Copyright (C) 1998 David S. Miller (davem@redhat.com)
       6             :  * Copyright 2001 Jeff Garzik <jgarzik@pobox.com>
       7             :  * Portions Copyright 2001 Sun Microsystems (thockin@sun.com)
       8             :  * Portions Copyright 2002 Intel (eli.kupermann@intel.com,
       9             :  *                                christopher.leech@intel.com,
      10             :  *                                scott.feldman@intel.com)
      11             :  * Portions Copyright (C) Sun Microsystems 2008
      12             :  */
      13             : #ifndef _LINUX_ETHTOOL_H
      14             : #define _LINUX_ETHTOOL_H
      15             : 
      16             : #include <linux/bitmap.h>
      17             : #include <linux/compat.h>
      18             : #include <uapi/linux/ethtool.h>
      19             : 
      20             : #ifdef CONFIG_COMPAT
      21             : 
      22             : struct compat_ethtool_rx_flow_spec {
      23             :         u32             flow_type;
      24             :         union ethtool_flow_union h_u;
      25             :         struct ethtool_flow_ext h_ext;
      26             :         union ethtool_flow_union m_u;
      27             :         struct ethtool_flow_ext m_ext;
      28             :         compat_u64      ring_cookie;
      29             :         u32             location;
      30             : };
      31             : 
      32             : struct compat_ethtool_rxnfc {
      33             :         u32                             cmd;
      34             :         u32                             flow_type;
      35             :         compat_u64                      data;
      36             :         struct compat_ethtool_rx_flow_spec fs;
      37             :         u32                             rule_cnt;
      38             :         u32                             rule_locs[];
      39             : };
      40             : 
      41             : #endif /* CONFIG_COMPAT */
      42             : 
      43             : #include <linux/rculist.h>
      44             : 
      45             : /**
      46             :  * enum ethtool_phys_id_state - indicator state for physical identification
      47             :  * @ETHTOOL_ID_INACTIVE: Physical ID indicator should be deactivated
      48             :  * @ETHTOOL_ID_ACTIVE: Physical ID indicator should be activated
      49             :  * @ETHTOOL_ID_ON: LED should be turned on (used iff %ETHTOOL_ID_ACTIVE
      50             :  *      is not supported)
      51             :  * @ETHTOOL_ID_OFF: LED should be turned off (used iff %ETHTOOL_ID_ACTIVE
      52             :  *      is not supported)
      53             :  */
      54             : enum ethtool_phys_id_state {
      55             :         ETHTOOL_ID_INACTIVE,
      56             :         ETHTOOL_ID_ACTIVE,
      57             :         ETHTOOL_ID_ON,
      58             :         ETHTOOL_ID_OFF
      59             : };
      60             : 
      61             : enum {
      62             :         ETH_RSS_HASH_TOP_BIT, /* Configurable RSS hash function - Toeplitz */
      63             :         ETH_RSS_HASH_XOR_BIT, /* Configurable RSS hash function - Xor */
      64             :         ETH_RSS_HASH_CRC32_BIT, /* Configurable RSS hash function - Crc32 */
      65             : 
      66             :         /*
      67             :          * Add your fresh new hash function bits above and remember to update
      68             :          * rss_hash_func_strings[] in ethtool.c
      69             :          */
      70             :         ETH_RSS_HASH_FUNCS_COUNT
      71             : };
      72             : 
      73             : #define __ETH_RSS_HASH_BIT(bit) ((u32)1 << (bit))
      74             : #define __ETH_RSS_HASH(name)    __ETH_RSS_HASH_BIT(ETH_RSS_HASH_##name##_BIT)
      75             : 
      76             : #define ETH_RSS_HASH_TOP        __ETH_RSS_HASH(TOP)
      77             : #define ETH_RSS_HASH_XOR        __ETH_RSS_HASH(XOR)
      78             : #define ETH_RSS_HASH_CRC32      __ETH_RSS_HASH(CRC32)
      79             : 
      80             : #define ETH_RSS_HASH_UNKNOWN    0
      81             : #define ETH_RSS_HASH_NO_CHANGE  0
      82             : 
      83             : struct net_device;
      84             : 
      85             : /* Some generic methods drivers may use in their ethtool_ops */
      86             : u32 ethtool_op_get_link(struct net_device *dev);
      87             : int ethtool_op_get_ts_info(struct net_device *dev, struct ethtool_ts_info *eti);
      88             : 
      89             : 
      90             : /**
      91             :  * struct ethtool_link_ext_state_info - link extended state and substate.
      92             :  */
      93             : struct ethtool_link_ext_state_info {
      94             :         enum ethtool_link_ext_state link_ext_state;
      95             :         union {
      96             :                 enum ethtool_link_ext_substate_autoneg autoneg;
      97             :                 enum ethtool_link_ext_substate_link_training link_training;
      98             :                 enum ethtool_link_ext_substate_link_logical_mismatch link_logical_mismatch;
      99             :                 enum ethtool_link_ext_substate_bad_signal_integrity bad_signal_integrity;
     100             :                 enum ethtool_link_ext_substate_cable_issue cable_issue;
     101             :                 u8 __link_ext_substate;
     102             :         };
     103             : };
     104             : 
     105             : /**
     106             :  * ethtool_rxfh_indir_default - get default value for RX flow hash indirection
     107             :  * @index: Index in RX flow hash indirection table
     108             :  * @n_rx_rings: Number of RX rings to use
     109             :  *
     110             :  * This function provides the default policy for RX flow hash indirection.
     111             :  */
     112           0 : static inline u32 ethtool_rxfh_indir_default(u32 index, u32 n_rx_rings)
     113             : {
     114           0 :         return index % n_rx_rings;
     115             : }
     116             : 
     117             : /* declare a link mode bitmap */
     118             : #define __ETHTOOL_DECLARE_LINK_MODE_MASK(name)          \
     119             :         DECLARE_BITMAP(name, __ETHTOOL_LINK_MODE_MASK_NBITS)
     120             : 
     121             : /* drivers must ignore base.cmd and base.link_mode_masks_nwords
     122             :  * fields, but they are allowed to overwrite them (will be ignored).
     123             :  */
     124             : struct ethtool_link_ksettings {
     125             :         struct ethtool_link_settings base;
     126             :         struct {
     127             :                 __ETHTOOL_DECLARE_LINK_MODE_MASK(supported);
     128             :                 __ETHTOOL_DECLARE_LINK_MODE_MASK(advertising);
     129             :                 __ETHTOOL_DECLARE_LINK_MODE_MASK(lp_advertising);
     130             :         } link_modes;
     131             :         u32     lanes;
     132             :         enum ethtool_link_mode_bit_indices link_mode;
     133             : };
     134             : 
     135             : /**
     136             :  * ethtool_link_ksettings_zero_link_mode - clear link_ksettings link mode mask
     137             :  *   @ptr : pointer to struct ethtool_link_ksettings
     138             :  *   @name : one of supported/advertising/lp_advertising
     139             :  */
     140             : #define ethtool_link_ksettings_zero_link_mode(ptr, name)                \
     141             :         bitmap_zero((ptr)->link_modes.name, __ETHTOOL_LINK_MODE_MASK_NBITS)
     142             : 
     143             : /**
     144             :  * ethtool_link_ksettings_add_link_mode - set bit in link_ksettings
     145             :  * link mode mask
     146             :  *   @ptr : pointer to struct ethtool_link_ksettings
     147             :  *   @name : one of supported/advertising/lp_advertising
     148             :  *   @mode : one of the ETHTOOL_LINK_MODE_*_BIT
     149             :  * (not atomic, no bound checking)
     150             :  */
     151             : #define ethtool_link_ksettings_add_link_mode(ptr, name, mode)           \
     152             :         __set_bit(ETHTOOL_LINK_MODE_ ## mode ## _BIT, (ptr)->link_modes.name)
     153             : 
     154             : /**
     155             :  * ethtool_link_ksettings_del_link_mode - clear bit in link_ksettings
     156             :  * link mode mask
     157             :  *   @ptr : pointer to struct ethtool_link_ksettings
     158             :  *   @name : one of supported/advertising/lp_advertising
     159             :  *   @mode : one of the ETHTOOL_LINK_MODE_*_BIT
     160             :  * (not atomic, no bound checking)
     161             :  */
     162             : #define ethtool_link_ksettings_del_link_mode(ptr, name, mode)           \
     163             :         __clear_bit(ETHTOOL_LINK_MODE_ ## mode ## _BIT, (ptr)->link_modes.name)
     164             : 
     165             : /**
     166             :  * ethtool_link_ksettings_test_link_mode - test bit in ksettings link mode mask
     167             :  *   @ptr : pointer to struct ethtool_link_ksettings
     168             :  *   @name : one of supported/advertising/lp_advertising
     169             :  *   @mode : one of the ETHTOOL_LINK_MODE_*_BIT
     170             :  * (not atomic, no bound checking)
     171             :  *
     172             :  * Returns true/false.
     173             :  */
     174             : #define ethtool_link_ksettings_test_link_mode(ptr, name, mode)          \
     175             :         test_bit(ETHTOOL_LINK_MODE_ ## mode ## _BIT, (ptr)->link_modes.name)
     176             : 
     177             : extern int
     178             : __ethtool_get_link_ksettings(struct net_device *dev,
     179             :                              struct ethtool_link_ksettings *link_ksettings);
     180             : 
     181             : /**
     182             :  * ethtool_intersect_link_masks - Given two link masks, AND them together
     183             :  * @dst: first mask and where result is stored
     184             :  * @src: second mask to intersect with
     185             :  *
     186             :  * Given two link mode masks, AND them together and save the result in dst.
     187             :  */
     188             : void ethtool_intersect_link_masks(struct ethtool_link_ksettings *dst,
     189             :                                   struct ethtool_link_ksettings *src);
     190             : 
     191             : void ethtool_convert_legacy_u32_to_link_mode(unsigned long *dst,
     192             :                                              u32 legacy_u32);
     193             : 
     194             : /* return false if src had higher bits set. lower bits always updated. */
     195             : bool ethtool_convert_link_mode_to_legacy_u32(u32 *legacy_u32,
     196             :                                      const unsigned long *src);
     197             : 
     198             : #define ETHTOOL_COALESCE_RX_USECS               BIT(0)
     199             : #define ETHTOOL_COALESCE_RX_MAX_FRAMES          BIT(1)
     200             : #define ETHTOOL_COALESCE_RX_USECS_IRQ           BIT(2)
     201             : #define ETHTOOL_COALESCE_RX_MAX_FRAMES_IRQ      BIT(3)
     202             : #define ETHTOOL_COALESCE_TX_USECS               BIT(4)
     203             : #define ETHTOOL_COALESCE_TX_MAX_FRAMES          BIT(5)
     204             : #define ETHTOOL_COALESCE_TX_USECS_IRQ           BIT(6)
     205             : #define ETHTOOL_COALESCE_TX_MAX_FRAMES_IRQ      BIT(7)
     206             : #define ETHTOOL_COALESCE_STATS_BLOCK_USECS      BIT(8)
     207             : #define ETHTOOL_COALESCE_USE_ADAPTIVE_RX        BIT(9)
     208             : #define ETHTOOL_COALESCE_USE_ADAPTIVE_TX        BIT(10)
     209             : #define ETHTOOL_COALESCE_PKT_RATE_LOW           BIT(11)
     210             : #define ETHTOOL_COALESCE_RX_USECS_LOW           BIT(12)
     211             : #define ETHTOOL_COALESCE_RX_MAX_FRAMES_LOW      BIT(13)
     212             : #define ETHTOOL_COALESCE_TX_USECS_LOW           BIT(14)
     213             : #define ETHTOOL_COALESCE_TX_MAX_FRAMES_LOW      BIT(15)
     214             : #define ETHTOOL_COALESCE_PKT_RATE_HIGH          BIT(16)
     215             : #define ETHTOOL_COALESCE_RX_USECS_HIGH          BIT(17)
     216             : #define ETHTOOL_COALESCE_RX_MAX_FRAMES_HIGH     BIT(18)
     217             : #define ETHTOOL_COALESCE_TX_USECS_HIGH          BIT(19)
     218             : #define ETHTOOL_COALESCE_TX_MAX_FRAMES_HIGH     BIT(20)
     219             : #define ETHTOOL_COALESCE_RATE_SAMPLE_INTERVAL   BIT(21)
     220             : #define ETHTOOL_COALESCE_ALL_PARAMS             GENMASK(21, 0)
     221             : 
     222             : #define ETHTOOL_COALESCE_USECS                                          \
     223             :         (ETHTOOL_COALESCE_RX_USECS | ETHTOOL_COALESCE_TX_USECS)
     224             : #define ETHTOOL_COALESCE_MAX_FRAMES                                     \
     225             :         (ETHTOOL_COALESCE_RX_MAX_FRAMES | ETHTOOL_COALESCE_TX_MAX_FRAMES)
     226             : #define ETHTOOL_COALESCE_USECS_IRQ                                      \
     227             :         (ETHTOOL_COALESCE_RX_USECS_IRQ | ETHTOOL_COALESCE_TX_USECS_IRQ)
     228             : #define ETHTOOL_COALESCE_MAX_FRAMES_IRQ         \
     229             :         (ETHTOOL_COALESCE_RX_MAX_FRAMES_IRQ |   \
     230             :          ETHTOOL_COALESCE_TX_MAX_FRAMES_IRQ)
     231             : #define ETHTOOL_COALESCE_USE_ADAPTIVE                                   \
     232             :         (ETHTOOL_COALESCE_USE_ADAPTIVE_RX | ETHTOOL_COALESCE_USE_ADAPTIVE_TX)
     233             : #define ETHTOOL_COALESCE_USECS_LOW_HIGH                                 \
     234             :         (ETHTOOL_COALESCE_RX_USECS_LOW | ETHTOOL_COALESCE_TX_USECS_LOW | \
     235             :          ETHTOOL_COALESCE_RX_USECS_HIGH | ETHTOOL_COALESCE_TX_USECS_HIGH)
     236             : #define ETHTOOL_COALESCE_MAX_FRAMES_LOW_HIGH    \
     237             :         (ETHTOOL_COALESCE_RX_MAX_FRAMES_LOW |   \
     238             :          ETHTOOL_COALESCE_TX_MAX_FRAMES_LOW |   \
     239             :          ETHTOOL_COALESCE_RX_MAX_FRAMES_HIGH |  \
     240             :          ETHTOOL_COALESCE_TX_MAX_FRAMES_HIGH)
     241             : #define ETHTOOL_COALESCE_PKT_RATE_RX_USECS                              \
     242             :         (ETHTOOL_COALESCE_USE_ADAPTIVE_RX |                             \
     243             :          ETHTOOL_COALESCE_RX_USECS_LOW | ETHTOOL_COALESCE_RX_USECS_HIGH | \
     244             :          ETHTOOL_COALESCE_PKT_RATE_LOW | ETHTOOL_COALESCE_PKT_RATE_HIGH | \
     245             :          ETHTOOL_COALESCE_RATE_SAMPLE_INTERVAL)
     246             : 
     247             : #define ETHTOOL_STAT_NOT_SET    (~0ULL)
     248             : 
     249             : /**
     250             :  * struct ethtool_pause_stats - statistics for IEEE 802.3x pause frames
     251             :  * @tx_pause_frames: transmitted pause frame count. Reported to user space
     252             :  *      as %ETHTOOL_A_PAUSE_STAT_TX_FRAMES.
     253             :  *
     254             :  *      Equivalent to `30.3.4.2 aPAUSEMACCtrlFramesTransmitted`
     255             :  *      from the standard.
     256             :  *
     257             :  * @rx_pause_frames: received pause frame count. Reported to user space
     258             :  *      as %ETHTOOL_A_PAUSE_STAT_RX_FRAMES. Equivalent to:
     259             :  *
     260             :  *      Equivalent to `30.3.4.3 aPAUSEMACCtrlFramesReceived`
     261             :  *      from the standard.
     262             :  */
     263             : struct ethtool_pause_stats {
     264             :         u64 tx_pause_frames;
     265             :         u64 rx_pause_frames;
     266             : };
     267             : 
     268             : /**
     269             :  * struct ethtool_ops - optional netdev operations
     270             :  * @cap_link_lanes_supported: indicates if the driver supports lanes
     271             :  *      parameter.
     272             :  * @supported_coalesce_params: supported types of interrupt coalescing.
     273             :  * @get_drvinfo: Report driver/device information.  Should only set the
     274             :  *      @driver, @version, @fw_version and @bus_info fields.  If not
     275             :  *      implemented, the @driver and @bus_info fields will be filled in
     276             :  *      according to the netdev's parent device.
     277             :  * @get_regs_len: Get buffer length required for @get_regs
     278             :  * @get_regs: Get device registers
     279             :  * @get_wol: Report whether Wake-on-Lan is enabled
     280             :  * @set_wol: Turn Wake-on-Lan on or off.  Returns a negative error code
     281             :  *      or zero.
     282             :  * @get_msglevel: Report driver message level.  This should be the value
     283             :  *      of the @msg_enable field used by netif logging functions.
     284             :  * @set_msglevel: Set driver message level
     285             :  * @nway_reset: Restart autonegotiation.  Returns a negative error code
     286             :  *      or zero.
     287             :  * @get_link: Report whether physical link is up.  Will only be called if
     288             :  *      the netdev is up.  Should usually be set to ethtool_op_get_link(),
     289             :  *      which uses netif_carrier_ok().
     290             :  * @get_link_ext_state: Report link extended state. Should set link_ext_state and
     291             :  *      link_ext_substate (link_ext_substate of 0 means link_ext_substate is unknown,
     292             :  *      do not attach ext_substate attribute to netlink message). If link_ext_state
     293             :  *      and link_ext_substate are unknown, return -ENODATA. If not implemented,
     294             :  *      link_ext_state and link_ext_substate will not be sent to userspace.
     295             :  * @get_eeprom: Read data from the device EEPROM.
     296             :  *      Should fill in the magic field.  Don't need to check len for zero
     297             :  *      or wraparound.  Fill in the data argument with the eeprom values
     298             :  *      from offset to offset + len.  Update len to the amount read.
     299             :  *      Returns an error or zero.
     300             :  * @set_eeprom: Write data to the device EEPROM.
     301             :  *      Should validate the magic field.  Don't need to check len for zero
     302             :  *      or wraparound.  Update len to the amount written.  Returns an error
     303             :  *      or zero.
     304             :  * @get_coalesce: Get interrupt coalescing parameters.  Returns a negative
     305             :  *      error code or zero.
     306             :  * @set_coalesce: Set interrupt coalescing parameters.  Supported coalescing
     307             :  *      types should be set in @supported_coalesce_params.
     308             :  *      Returns a negative error code or zero.
     309             :  * @get_ringparam: Report ring sizes
     310             :  * @set_ringparam: Set ring sizes.  Returns a negative error code or zero.
     311             :  * @get_pause_stats: Report pause frame statistics. Drivers must not zero
     312             :  *      statistics which they don't report. The stats structure is initialized
     313             :  *      to ETHTOOL_STAT_NOT_SET indicating driver does not report statistics.
     314             :  * @get_pauseparam: Report pause parameters
     315             :  * @set_pauseparam: Set pause parameters.  Returns a negative error code
     316             :  *      or zero.
     317             :  * @self_test: Run specified self-tests
     318             :  * @get_strings: Return a set of strings that describe the requested objects
     319             :  * @set_phys_id: Identify the physical devices, e.g. by flashing an LED
     320             :  *      attached to it.  The implementation may update the indicator
     321             :  *      asynchronously or synchronously, but in either case it must return
     322             :  *      quickly.  It is initially called with the argument %ETHTOOL_ID_ACTIVE,
     323             :  *      and must either activate asynchronous updates and return zero, return
     324             :  *      a negative error or return a positive frequency for synchronous
     325             :  *      indication (e.g. 1 for one on/off cycle per second).  If it returns
     326             :  *      a frequency then it will be called again at intervals with the
     327             :  *      argument %ETHTOOL_ID_ON or %ETHTOOL_ID_OFF and should set the state of
     328             :  *      the indicator accordingly.  Finally, it is called with the argument
     329             :  *      %ETHTOOL_ID_INACTIVE and must deactivate the indicator.  Returns a
     330             :  *      negative error code or zero.
     331             :  * @get_ethtool_stats: Return extended statistics about the device.
     332             :  *      This is only useful if the device maintains statistics not
     333             :  *      included in &struct rtnl_link_stats64.
     334             :  * @begin: Function to be called before any other operation.  Returns a
     335             :  *      negative error code or zero.
     336             :  * @complete: Function to be called after any other operation except
     337             :  *      @begin.  Will be called even if the other operation failed.
     338             :  * @get_priv_flags: Report driver-specific feature flags.
     339             :  * @set_priv_flags: Set driver-specific feature flags.  Returns a negative
     340             :  *      error code or zero.
     341             :  * @get_sset_count: Get number of strings that @get_strings will write.
     342             :  * @get_rxnfc: Get RX flow classification rules.  Returns a negative
     343             :  *      error code or zero.
     344             :  * @set_rxnfc: Set RX flow classification rules.  Returns a negative
     345             :  *      error code or zero.
     346             :  * @flash_device: Write a firmware image to device's flash memory.
     347             :  *      Returns a negative error code or zero.
     348             :  * @reset: Reset (part of) the device, as specified by a bitmask of
     349             :  *      flags from &enum ethtool_reset_flags.  Returns a negative
     350             :  *      error code or zero.
     351             :  * @get_rxfh_key_size: Get the size of the RX flow hash key.
     352             :  *      Returns zero if not supported for this specific device.
     353             :  * @get_rxfh_indir_size: Get the size of the RX flow hash indirection table.
     354             :  *      Returns zero if not supported for this specific device.
     355             :  * @get_rxfh: Get the contents of the RX flow hash indirection table, hash key
     356             :  *      and/or hash function.
     357             :  *      Returns a negative error code or zero.
     358             :  * @set_rxfh: Set the contents of the RX flow hash indirection table, hash
     359             :  *      key, and/or hash function.  Arguments which are set to %NULL or zero
     360             :  *      will remain unchanged.
     361             :  *      Returns a negative error code or zero. An error code must be returned
     362             :  *      if at least one unsupported change was requested.
     363             :  * @get_rxfh_context: Get the contents of the RX flow hash indirection table,
     364             :  *      hash key, and/or hash function assiciated to the given rss context.
     365             :  *      Returns a negative error code or zero.
     366             :  * @set_rxfh_context: Create, remove and configure RSS contexts. Allows setting
     367             :  *      the contents of the RX flow hash indirection table, hash key, and/or
     368             :  *      hash function associated to the given context. Arguments which are set
     369             :  *      to %NULL or zero will remain unchanged.
     370             :  *      Returns a negative error code or zero. An error code must be returned
     371             :  *      if at least one unsupported change was requested.
     372             :  * @get_channels: Get number of channels.
     373             :  * @set_channels: Set number of channels.  Returns a negative error code or
     374             :  *      zero.
     375             :  * @get_dump_flag: Get dump flag indicating current dump length, version,
     376             :  *                 and flag of the device.
     377             :  * @get_dump_data: Get dump data.
     378             :  * @set_dump: Set dump specific flags to the device.
     379             :  * @get_ts_info: Get the time stamping and PTP hardware clock capabilities.
     380             :  *      Drivers supporting transmit time stamps in software should set this to
     381             :  *      ethtool_op_get_ts_info().
     382             :  * @get_module_info: Get the size and type of the eeprom contained within
     383             :  *      a plug-in module.
     384             :  * @get_module_eeprom: Get the eeprom information from the plug-in module
     385             :  * @get_eee: Get Energy-Efficient (EEE) supported and status.
     386             :  * @set_eee: Set EEE status (enable/disable) as well as LPI timers.
     387             :  * @get_per_queue_coalesce: Get interrupt coalescing parameters per queue.
     388             :  *      It must check that the given queue number is valid. If neither a RX nor
     389             :  *      a TX queue has this number, return -EINVAL. If only a RX queue or a TX
     390             :  *      queue has this number, set the inapplicable fields to ~0 and return 0.
     391             :  *      Returns a negative error code or zero.
     392             :  * @set_per_queue_coalesce: Set interrupt coalescing parameters per queue.
     393             :  *      It must check that the given queue number is valid. If neither a RX nor
     394             :  *      a TX queue has this number, return -EINVAL. If only a RX queue or a TX
     395             :  *      queue has this number, ignore the inapplicable fields. Supported
     396             :  *      coalescing types should be set in @supported_coalesce_params.
     397             :  *      Returns a negative error code or zero.
     398             :  * @get_link_ksettings: Get various device settings including Ethernet link
     399             :  *      settings. The %cmd and %link_mode_masks_nwords fields should be
     400             :  *      ignored (use %__ETHTOOL_LINK_MODE_MASK_NBITS instead of the latter),
     401             :  *      any change to them will be overwritten by kernel. Returns a negative
     402             :  *      error code or zero.
     403             :  * @set_link_ksettings: Set various device settings including Ethernet link
     404             :  *      settings. The %cmd and %link_mode_masks_nwords fields should be
     405             :  *      ignored (use %__ETHTOOL_LINK_MODE_MASK_NBITS instead of the latter),
     406             :  *      any change to them will be overwritten by kernel. Returns a negative
     407             :  *      error code or zero.
     408             :  * @get_fecparam: Get the network device Forward Error Correction parameters.
     409             :  * @set_fecparam: Set the network device Forward Error Correction parameters.
     410             :  * @get_ethtool_phy_stats: Return extended statistics about the PHY device.
     411             :  *      This is only useful if the device maintains PHY statistics and
     412             :  *      cannot use the standard PHY library helpers.
     413             :  *
     414             :  * All operations are optional (i.e. the function pointer may be set
     415             :  * to %NULL) and callers must take this into account.  Callers must
     416             :  * hold the RTNL lock.
     417             :  *
     418             :  * See the structures used by these operations for further documentation.
     419             :  * Note that for all operations using a structure ending with a zero-
     420             :  * length array, the array is allocated separately in the kernel and
     421             :  * is passed to the driver as an additional parameter.
     422             :  *
     423             :  * See &struct net_device and &struct net_device_ops for documentation
     424             :  * of the generic netdev features interface.
     425             :  */
     426             : struct ethtool_ops {
     427             :         u32     cap_link_lanes_supported:1;
     428             :         u32     supported_coalesce_params;
     429             :         void    (*get_drvinfo)(struct net_device *, struct ethtool_drvinfo *);
     430             :         int     (*get_regs_len)(struct net_device *);
     431             :         void    (*get_regs)(struct net_device *, struct ethtool_regs *, void *);
     432             :         void    (*get_wol)(struct net_device *, struct ethtool_wolinfo *);
     433             :         int     (*set_wol)(struct net_device *, struct ethtool_wolinfo *);
     434             :         u32     (*get_msglevel)(struct net_device *);
     435             :         void    (*set_msglevel)(struct net_device *, u32);
     436             :         int     (*nway_reset)(struct net_device *);
     437             :         u32     (*get_link)(struct net_device *);
     438             :         int     (*get_link_ext_state)(struct net_device *,
     439             :                                       struct ethtool_link_ext_state_info *);
     440             :         int     (*get_eeprom_len)(struct net_device *);
     441             :         int     (*get_eeprom)(struct net_device *,
     442             :                               struct ethtool_eeprom *, u8 *);
     443             :         int     (*set_eeprom)(struct net_device *,
     444             :                               struct ethtool_eeprom *, u8 *);
     445             :         int     (*get_coalesce)(struct net_device *, struct ethtool_coalesce *);
     446             :         int     (*set_coalesce)(struct net_device *, struct ethtool_coalesce *);
     447             :         void    (*get_ringparam)(struct net_device *,
     448             :                                  struct ethtool_ringparam *);
     449             :         int     (*set_ringparam)(struct net_device *,
     450             :                                  struct ethtool_ringparam *);
     451             :         void    (*get_pause_stats)(struct net_device *dev,
     452             :                                    struct ethtool_pause_stats *pause_stats);
     453             :         void    (*get_pauseparam)(struct net_device *,
     454             :                                   struct ethtool_pauseparam*);
     455             :         int     (*set_pauseparam)(struct net_device *,
     456             :                                   struct ethtool_pauseparam*);
     457             :         void    (*self_test)(struct net_device *, struct ethtool_test *, u64 *);
     458             :         void    (*get_strings)(struct net_device *, u32 stringset, u8 *);
     459             :         int     (*set_phys_id)(struct net_device *, enum ethtool_phys_id_state);
     460             :         void    (*get_ethtool_stats)(struct net_device *,
     461             :                                      struct ethtool_stats *, u64 *);
     462             :         int     (*begin)(struct net_device *);
     463             :         void    (*complete)(struct net_device *);
     464             :         u32     (*get_priv_flags)(struct net_device *);
     465             :         int     (*set_priv_flags)(struct net_device *, u32);
     466             :         int     (*get_sset_count)(struct net_device *, int);
     467             :         int     (*get_rxnfc)(struct net_device *,
     468             :                              struct ethtool_rxnfc *, u32 *rule_locs);
     469             :         int     (*set_rxnfc)(struct net_device *, struct ethtool_rxnfc *);
     470             :         int     (*flash_device)(struct net_device *, struct ethtool_flash *);
     471             :         int     (*reset)(struct net_device *, u32 *);
     472             :         u32     (*get_rxfh_key_size)(struct net_device *);
     473             :         u32     (*get_rxfh_indir_size)(struct net_device *);
     474             :         int     (*get_rxfh)(struct net_device *, u32 *indir, u8 *key,
     475             :                             u8 *hfunc);
     476             :         int     (*set_rxfh)(struct net_device *, const u32 *indir,
     477             :                             const u8 *key, const u8 hfunc);
     478             :         int     (*get_rxfh_context)(struct net_device *, u32 *indir, u8 *key,
     479             :                                     u8 *hfunc, u32 rss_context);
     480             :         int     (*set_rxfh_context)(struct net_device *, const u32 *indir,
     481             :                                     const u8 *key, const u8 hfunc,
     482             :                                     u32 *rss_context, bool delete);
     483             :         void    (*get_channels)(struct net_device *, struct ethtool_channels *);
     484             :         int     (*set_channels)(struct net_device *, struct ethtool_channels *);
     485             :         int     (*get_dump_flag)(struct net_device *, struct ethtool_dump *);
     486             :         int     (*get_dump_data)(struct net_device *,
     487             :                                  struct ethtool_dump *, void *);
     488             :         int     (*set_dump)(struct net_device *, struct ethtool_dump *);
     489             :         int     (*get_ts_info)(struct net_device *, struct ethtool_ts_info *);
     490             :         int     (*get_module_info)(struct net_device *,
     491             :                                    struct ethtool_modinfo *);
     492             :         int     (*get_module_eeprom)(struct net_device *,
     493             :                                      struct ethtool_eeprom *, u8 *);
     494             :         int     (*get_eee)(struct net_device *, struct ethtool_eee *);
     495             :         int     (*set_eee)(struct net_device *, struct ethtool_eee *);
     496             :         int     (*get_tunable)(struct net_device *,
     497             :                                const struct ethtool_tunable *, void *);
     498             :         int     (*set_tunable)(struct net_device *,
     499             :                                const struct ethtool_tunable *, const void *);
     500             :         int     (*get_per_queue_coalesce)(struct net_device *, u32,
     501             :                                           struct ethtool_coalesce *);
     502             :         int     (*set_per_queue_coalesce)(struct net_device *, u32,
     503             :                                           struct ethtool_coalesce *);
     504             :         int     (*get_link_ksettings)(struct net_device *,
     505             :                                       struct ethtool_link_ksettings *);
     506             :         int     (*set_link_ksettings)(struct net_device *,
     507             :                                       const struct ethtool_link_ksettings *);
     508             :         int     (*get_fecparam)(struct net_device *,
     509             :                                       struct ethtool_fecparam *);
     510             :         int     (*set_fecparam)(struct net_device *,
     511             :                                       struct ethtool_fecparam *);
     512             :         void    (*get_ethtool_phy_stats)(struct net_device *,
     513             :                                          struct ethtool_stats *, u64 *);
     514             :         int     (*get_phy_tunable)(struct net_device *,
     515             :                                    const struct ethtool_tunable *, void *);
     516             :         int     (*set_phy_tunable)(struct net_device *,
     517             :                                    const struct ethtool_tunable *, const void *);
     518             : };
     519             : 
     520             : int ethtool_check_ops(const struct ethtool_ops *ops);
     521             : 
     522             : struct ethtool_rx_flow_rule {
     523             :         struct flow_rule        *rule;
     524             :         unsigned long           priv[];
     525             : };
     526             : 
     527             : struct ethtool_rx_flow_spec_input {
     528             :         const struct ethtool_rx_flow_spec       *fs;
     529             :         u32                                     rss_ctx;
     530             : };
     531             : 
     532             : struct ethtool_rx_flow_rule *
     533             : ethtool_rx_flow_rule_create(const struct ethtool_rx_flow_spec_input *input);
     534             : void ethtool_rx_flow_rule_destroy(struct ethtool_rx_flow_rule *rule);
     535             : 
     536             : bool ethtool_virtdev_validate_cmd(const struct ethtool_link_ksettings *cmd);
     537             : int ethtool_virtdev_set_link_ksettings(struct net_device *dev,
     538             :                                        const struct ethtool_link_ksettings *cmd,
     539             :                                        u32 *dev_speed, u8 *dev_duplex);
     540             : 
     541             : struct netlink_ext_ack;
     542             : struct phy_device;
     543             : struct phy_tdr_config;
     544             : 
     545             : /**
     546             :  * struct ethtool_phy_ops - Optional PHY device options
     547             :  * @get_sset_count: Get number of strings that @get_strings will write.
     548             :  * @get_strings: Return a set of strings that describe the requested objects
     549             :  * @get_stats: Return extended statistics about the PHY device.
     550             :  * @start_cable_test - Start a cable test
     551             :  * @start_cable_test_tdr - Start a Time Domain Reflectometry cable test
     552             :  *
     553             :  * All operations are optional (i.e. the function pointer may be set to %NULL)
     554             :  * and callers must take this into account. Callers must hold the RTNL lock.
     555             :  */
     556             : struct ethtool_phy_ops {
     557             :         int (*get_sset_count)(struct phy_device *dev);
     558             :         int (*get_strings)(struct phy_device *dev, u8 *data);
     559             :         int (*get_stats)(struct phy_device *dev,
     560             :                          struct ethtool_stats *stats, u64 *data);
     561             :         int (*start_cable_test)(struct phy_device *phydev,
     562             :                                 struct netlink_ext_ack *extack);
     563             :         int (*start_cable_test_tdr)(struct phy_device *phydev,
     564             :                                     struct netlink_ext_ack *extack,
     565             :                                     const struct phy_tdr_config *config);
     566             : };
     567             : 
     568             : /**
     569             :  * ethtool_set_ethtool_phy_ops - Set the ethtool_phy_ops singleton
     570             :  * @ops: Ethtool PHY operations to set
     571             :  */
     572             : void ethtool_set_ethtool_phy_ops(const struct ethtool_phy_ops *ops);
     573             : 
     574             : #endif /* _LINUX_ETHTOOL_H */

Generated by: LCOV version 1.14