ethtool: Expand documentation of struct ethtool_cmd
struct ethtool_cmd has very limited documentation; it contains several obscure or obsolete fields and several with non-obvious interpretation. Replace the inline comments (and some others below) with a full explanation of the semantics as well as I understand them, in kernel-doc format. Formally deprecate some fields that seem to be of historical use only. Extend the comment about 32/64-bit compatibility to cover all ethtool structures. Signed-off-by: Ben Hutchings <ben@decadent.org.uk> Signed-off-by: David S. Miller <davem@davemloft.net>
This commit is contained in:
		
					parent
					
						
							
								738b52bb98
							
						
					
				
			
			
				commit
				
					
						bf8fc60a62
					
				
			
		
					 1 changed files with 90 additions and 34 deletions
				
			
		| 
						 | 
					@ -16,37 +16,97 @@
 | 
				
			||||||
#include <linux/types.h>
 | 
					#include <linux/types.h>
 | 
				
			||||||
#include <linux/if_ether.h>
 | 
					#include <linux/if_ether.h>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
/* This should work for both 32 and 64 bit userland. */
 | 
					/* All structures exposed to userland should be defined such that they
 | 
				
			||||||
 | 
					 * have the same layout for 32-bit and 64-bit userland.
 | 
				
			||||||
 | 
					 */
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					/**
 | 
				
			||||||
 | 
					 * struct ethtool_cmd - link control and status
 | 
				
			||||||
 | 
					 * @cmd: Command number = %ETHTOOL_GSET or %ETHTOOL_SSET
 | 
				
			||||||
 | 
					 * @supported: Bitmask of %SUPPORTED_* flags for the link modes,
 | 
				
			||||||
 | 
					 *	physical connectors and other link features for which the
 | 
				
			||||||
 | 
					 *	interface supports autonegotiation or auto-detection.
 | 
				
			||||||
 | 
					 *	Read-only.
 | 
				
			||||||
 | 
					 * @advertising: Bitmask of %ADVERTISED_* flags for the link modes,
 | 
				
			||||||
 | 
					 *	physical connectors and other link features that are
 | 
				
			||||||
 | 
					 *	advertised through autonegotiation or enabled for
 | 
				
			||||||
 | 
					 *	auto-detection.
 | 
				
			||||||
 | 
					 * @speed: Low bits of the speed
 | 
				
			||||||
 | 
					 * @duplex: Duplex mode; one of %DUPLEX_*
 | 
				
			||||||
 | 
					 * @port: Physical connector type; one of %PORT_*
 | 
				
			||||||
 | 
					 * @phy_address: MDIO address of PHY (transceiver); 0 or 255 if not
 | 
				
			||||||
 | 
					 *	applicable.  For clause 45 PHYs this is the PRTAD.
 | 
				
			||||||
 | 
					 * @transceiver: Historically used to distinguish different possible
 | 
				
			||||||
 | 
					 *	PHY types, but not in a consistent way.  Deprecated.
 | 
				
			||||||
 | 
					 * @autoneg: Enable/disable autonegotiation and auto-detection;
 | 
				
			||||||
 | 
					 *	either %AUTONEG_DISABLE or %AUTONEG_ENABLE
 | 
				
			||||||
 | 
					 * @mdio_support: Bitmask of %ETH_MDIO_SUPPORTS_* flags for the MDIO
 | 
				
			||||||
 | 
					 *	protocols supported by the interface; 0 if unknown.
 | 
				
			||||||
 | 
					 *	Read-only.
 | 
				
			||||||
 | 
					 * @maxtxpkt: Historically used to report TX IRQ coalescing; now
 | 
				
			||||||
 | 
					 *	obsoleted by &struct ethtool_coalesce.  Read-only; deprecated.
 | 
				
			||||||
 | 
					 * @maxrxpkt: Historically used to report RX IRQ coalescing; now
 | 
				
			||||||
 | 
					 *	obsoleted by &struct ethtool_coalesce.  Read-only; deprecated.
 | 
				
			||||||
 | 
					 * @speed_hi: High bits of the speed
 | 
				
			||||||
 | 
					 * @eth_tp_mdix: Ethernet twisted-pair MDI(-X) status; one of
 | 
				
			||||||
 | 
					 *	%ETH_TP_MDI_*.  If the status is unknown or not applicable, the
 | 
				
			||||||
 | 
					 *	value will be %ETH_TP_MDI_INVALID.  Read-only.
 | 
				
			||||||
 | 
					 * @eth_tp_mdix_ctrl: Ethernet twisted pair MDI(-X) control; one of
 | 
				
			||||||
 | 
					 *	%ETH_TP_MDI_*.  If MDI(-X) control is not implemented, reads
 | 
				
			||||||
 | 
					 *	yield %ETH_TP_MDI_INVALID and writes may be ignored or rejected.
 | 
				
			||||||
 | 
					 *	When written successfully, the link should be renegotiated if
 | 
				
			||||||
 | 
					 *	necessary.
 | 
				
			||||||
 | 
					 * @lp_advertising: Bitmask of %ADVERTISED_* flags for the link modes
 | 
				
			||||||
 | 
					 *	and other link features that the link partner advertised
 | 
				
			||||||
 | 
					 *	through autonegotiation; 0 if unknown or not applicable.
 | 
				
			||||||
 | 
					 *	Read-only.
 | 
				
			||||||
 | 
					 *
 | 
				
			||||||
 | 
					 * The link speed in Mbps is split between @speed and @speed_hi.  Use
 | 
				
			||||||
 | 
					 * the ethtool_cmd_speed() and ethtool_cmd_speed_set() functions to
 | 
				
			||||||
 | 
					 * access it.
 | 
				
			||||||
 | 
					 *
 | 
				
			||||||
 | 
					 * If autonegotiation is disabled, the speed and @duplex represent the
 | 
				
			||||||
 | 
					 * fixed link mode and are writable if the driver supports multiple
 | 
				
			||||||
 | 
					 * link modes.  If it is enabled then they are read-only; if the link
 | 
				
			||||||
 | 
					 * is up they represent the negotiated link mode; if the link is down,
 | 
				
			||||||
 | 
					 * the speed is 0, %SPEED_UNKNOWN or the highest enabled speed and
 | 
				
			||||||
 | 
					 * @duplex is %DUPLEX_UNKNOWN or the best enabled duplex mode.
 | 
				
			||||||
 | 
					 *
 | 
				
			||||||
 | 
					 * Some hardware interfaces may have multiple PHYs and/or physical
 | 
				
			||||||
 | 
					 * connectors fitted or do not allow the driver to detect which are
 | 
				
			||||||
 | 
					 * fitted.  For these interfaces @port and/or @phy_address may be
 | 
				
			||||||
 | 
					 * writable, possibly dependent on @autoneg being %AUTONEG_DISABLE.
 | 
				
			||||||
 | 
					 * Otherwise, attempts to write different values may be ignored or
 | 
				
			||||||
 | 
					 * rejected.
 | 
				
			||||||
 | 
					 *
 | 
				
			||||||
 | 
					 * Users should assume that all fields not marked read-only are
 | 
				
			||||||
 | 
					 * writable and subject to validation by the driver.  They should use
 | 
				
			||||||
 | 
					 * %ETHTOOL_GSET to get the current values before making specific
 | 
				
			||||||
 | 
					 * changes and then applying them with %ETHTOOL_SSET.
 | 
				
			||||||
 | 
					 *
 | 
				
			||||||
 | 
					 * Drivers that implement set_settings() should validate all fields
 | 
				
			||||||
 | 
					 * other than @cmd that are not described as read-only or deprecated,
 | 
				
			||||||
 | 
					 * and must ignore all fields described as read-only.
 | 
				
			||||||
 | 
					 *
 | 
				
			||||||
 | 
					 * Deprecated fields should be ignored by both users and drivers.
 | 
				
			||||||
 | 
					 */
 | 
				
			||||||
struct ethtool_cmd {
 | 
					struct ethtool_cmd {
 | 
				
			||||||
	__u32	cmd;
 | 
						__u32	cmd;
 | 
				
			||||||
	__u32	supported;	/* Features this interface supports */
 | 
						__u32	supported;
 | 
				
			||||||
	__u32	advertising;	/* Features this interface advertises */
 | 
						__u32	advertising;
 | 
				
			||||||
	__u16	speed;	        /* The forced speed (lower bits) in
 | 
						__u16	speed;
 | 
				
			||||||
				 * Mbps. Please use
 | 
						__u8	duplex;
 | 
				
			||||||
				 * ethtool_cmd_speed()/_set() to
 | 
						__u8	port;
 | 
				
			||||||
				 * access it */
 | 
						__u8	phy_address;
 | 
				
			||||||
	__u8	duplex;		/* Duplex, half or full */
 | 
						__u8	transceiver;
 | 
				
			||||||
	__u8	port;		/* Which connector port */
 | 
						__u8	autoneg;
 | 
				
			||||||
	__u8	phy_address;	/* MDIO PHY address (PRTAD for clause 45).
 | 
						__u8	mdio_support;
 | 
				
			||||||
				 * May be read-only or read-write
 | 
						__u32	maxtxpkt;
 | 
				
			||||||
				 * depending on the driver.
 | 
						__u32	maxrxpkt;
 | 
				
			||||||
				 */
 | 
						__u16	speed_hi;
 | 
				
			||||||
	__u8	transceiver;	/* Which transceiver to use */
 | 
						__u8	eth_tp_mdix;
 | 
				
			||||||
	__u8	autoneg;	/* Enable or disable autonegotiation */
 | 
						__u8	eth_tp_mdix_ctrl;
 | 
				
			||||||
	__u8	mdio_support;	/* MDIO protocols supported.  Read-only.
 | 
						__u32	lp_advertising;
 | 
				
			||||||
				 * Not set by all drivers.
 | 
					 | 
				
			||||||
				 */
 | 
					 | 
				
			||||||
	__u32	maxtxpkt;	/* Tx pkts before generating tx int */
 | 
					 | 
				
			||||||
	__u32	maxrxpkt;	/* Rx pkts before generating rx int */
 | 
					 | 
				
			||||||
	__u16	speed_hi;       /* The forced speed (upper
 | 
					 | 
				
			||||||
				 * bits) in Mbps. Please use
 | 
					 | 
				
			||||||
				 * ethtool_cmd_speed()/_set() to
 | 
					 | 
				
			||||||
				 * access it */
 | 
					 | 
				
			||||||
	__u8	eth_tp_mdix;	/* twisted pair MDI-X status */
 | 
					 | 
				
			||||||
	__u8    eth_tp_mdix_ctrl; /* twisted pair MDI-X control, when set,
 | 
					 | 
				
			||||||
				   * link should be renegotiated if necessary
 | 
					 | 
				
			||||||
				   */
 | 
					 | 
				
			||||||
	__u32	lp_advertising;	/* Features the link partner advertises */
 | 
					 | 
				
			||||||
	__u32	reserved[2];
 | 
						__u32	reserved[2];
 | 
				
			||||||
};
 | 
					};
 | 
				
			||||||
 | 
					
 | 
				
			||||||
| 
						 | 
					@ -905,7 +965,6 @@ enum ethtool_sfeatures_retval_bits {
 | 
				
			||||||
#define SPARC_ETH_GSET		ETHTOOL_GSET
 | 
					#define SPARC_ETH_GSET		ETHTOOL_GSET
 | 
				
			||||||
#define SPARC_ETH_SSET		ETHTOOL_SSET
 | 
					#define SPARC_ETH_SSET		ETHTOOL_SSET
 | 
				
			||||||
 | 
					
 | 
				
			||||||
/* Indicates what features are supported by the interface. */
 | 
					 | 
				
			||||||
#define SUPPORTED_10baseT_Half		(1 << 0)
 | 
					#define SUPPORTED_10baseT_Half		(1 << 0)
 | 
				
			||||||
#define SUPPORTED_10baseT_Full		(1 << 1)
 | 
					#define SUPPORTED_10baseT_Full		(1 << 1)
 | 
				
			||||||
#define SUPPORTED_100baseT_Half		(1 << 2)
 | 
					#define SUPPORTED_100baseT_Half		(1 << 2)
 | 
				
			||||||
| 
						 | 
					@ -934,7 +993,6 @@ enum ethtool_sfeatures_retval_bits {
 | 
				
			||||||
#define SUPPORTED_40000baseSR4_Full	(1 << 25)
 | 
					#define SUPPORTED_40000baseSR4_Full	(1 << 25)
 | 
				
			||||||
#define SUPPORTED_40000baseLR4_Full	(1 << 26)
 | 
					#define SUPPORTED_40000baseLR4_Full	(1 << 26)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
/* Indicates what features are advertised by the interface. */
 | 
					 | 
				
			||||||
#define ADVERTISED_10baseT_Half		(1 << 0)
 | 
					#define ADVERTISED_10baseT_Half		(1 << 0)
 | 
				
			||||||
#define ADVERTISED_10baseT_Full		(1 << 1)
 | 
					#define ADVERTISED_10baseT_Full		(1 << 1)
 | 
				
			||||||
#define ADVERTISED_100baseT_Half	(1 << 2)
 | 
					#define ADVERTISED_100baseT_Half	(1 << 2)
 | 
				
			||||||
| 
						 | 
					@ -999,9 +1057,7 @@ enum ethtool_sfeatures_retval_bits {
 | 
				
			||||||
#define XCVR_DUMMY2		0x03
 | 
					#define XCVR_DUMMY2		0x03
 | 
				
			||||||
#define XCVR_DUMMY3		0x04
 | 
					#define XCVR_DUMMY3		0x04
 | 
				
			||||||
 | 
					
 | 
				
			||||||
/* Enable or disable autonegotiation.  If this is set to enable,
 | 
					/* Enable or disable autonegotiation. */
 | 
				
			||||||
 * the forced link modes above are completely ignored.
 | 
					 | 
				
			||||||
 */
 | 
					 | 
				
			||||||
#define AUTONEG_DISABLE		0x00
 | 
					#define AUTONEG_DISABLE		0x00
 | 
				
			||||||
#define AUTONEG_ENABLE		0x01
 | 
					#define AUTONEG_ENABLE		0x01
 | 
				
			||||||
 | 
					
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue