• Danielle Ratson's avatar
    ethtool: Extend link modes settings uAPI with lanes · 012ce4dd
    Danielle Ratson authored
    Currently, when auto negotiation is on, the user can advertise all the
    linkmodes which correspond to a specific speed, but does not have a
    similar selector for the number of lanes. This is significant when a
    specific speed can be achieved using different number of lanes.  For
    example, 2x50 or 4x25.
    
    Add 'ETHTOOL_A_LINKMODES_LANES' attribute and expand 'struct
    ethtool_link_settings' with lanes field in order to implement a new
    lanes-selector that will enable the user to advertise a specific number
    of lanes as well.
    
    When auto negotiation is off, lanes parameter can be forced only if the
    driver supports it. Add a capability bit in 'struct ethtool_ops' that
    allows ethtool know if the driver can handle the lanes parameter when
    auto negotiation is off, so if it does not, an error message will be
    returned when trying to set lanes.
    
    Example:
    
    $ ethtool -s swp1 lanes 4
    $ ethtool swp1
      Settings for swp1:
    	Supported ports: [ FIBRE ]
            Supported link modes:   1000baseKX/Full
                                    10000baseKR/Full
                                    40000baseCR4/Full
    				40000baseSR4/Full
    				40000baseLR4/Full
                                    25000baseCR/Full
                                    25000baseSR/Full
    				50000baseCR2/Full
                                    100000baseSR4/Full
    				100000baseCR4/Full
            Supported pause frame use: Symmetric Receive-only
            Supports auto-negotiation: Yes
            Supported FEC modes: Not reported
            Advertised link modes:  40000baseCR4/Full
    				40000baseSR4/Full
    				40000baseLR4/Full
                                    100000baseSR4/Full
    				100000baseCR4/Full
            Advertised pause frame use: No
            Advertised auto-negotiation: Yes
            Advertised FEC modes: Not reported
            Speed: Unknown!
            Duplex: Unknown! (255)
            Auto-negotiation: on
            Port: Direct Attach Copper
            PHYAD: 0
            Transceiver: internal
            Link detected: no
    Signed-off-by: default avatarDanielle Ratson <danieller@nvidia.com>
    Signed-off-by: default avatarJakub Kicinski <kuba@kernel.org>
    012ce4dd
linkmodes.c 16.2 KB