|
@@ -21,7 +21,8 @@
|
|
|
*/
|
|
|
|
|
|
/**
|
|
|
- * struct ethtool_cmd - link control and status
|
|
|
+ * struct ethtool_cmd - DEPRECATED, link control and status
|
|
|
+ * This structure is DEPRECATED, please use struct ethtool_link_settings.
|
|
|
* @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
|
|
@@ -1219,8 +1220,12 @@ struct ethtool_per_queue_op {
|
|
|
};
|
|
|
|
|
|
/* CMDs currently supported */
|
|
|
-#define ETHTOOL_GSET 0x00000001 /* Get settings. */
|
|
|
-#define ETHTOOL_SSET 0x00000002 /* Set settings. */
|
|
|
+#define ETHTOOL_GSET 0x00000001 /* DEPRECATED, Get settings.
|
|
|
+ * Please use ETHTOOL_GLINKSETTINGS
|
|
|
+ */
|
|
|
+#define ETHTOOL_SSET 0x00000002 /* DEPRECATED, Set settings.
|
|
|
+ * Please use ETHTOOL_SLINKSETTINGS
|
|
|
+ */
|
|
|
#define ETHTOOL_GDRVINFO 0x00000003 /* Get driver info. */
|
|
|
#define ETHTOOL_GREGS 0x00000004 /* Get NIC registers. */
|
|
|
#define ETHTOOL_GWOL 0x00000005 /* Get wake-on-lan options. */
|
|
@@ -1302,73 +1307,139 @@ struct ethtool_per_queue_op {
|
|
|
|
|
|
#define ETHTOOL_PERQUEUE 0x0000004b /* Set per queue options */
|
|
|
|
|
|
+#define ETHTOOL_GLINKSETTINGS 0x0000004c /* Get ethtool_link_settings */
|
|
|
+#define ETHTOOL_SLINKSETTINGS 0x0000004d /* Set ethtool_link_settings */
|
|
|
+
|
|
|
+
|
|
|
/* compatibility with older code */
|
|
|
#define SPARC_ETH_GSET ETHTOOL_GSET
|
|
|
#define SPARC_ETH_SSET ETHTOOL_SSET
|
|
|
|
|
|
-#define SUPPORTED_10baseT_Half (1 << 0)
|
|
|
-#define SUPPORTED_10baseT_Full (1 << 1)
|
|
|
-#define SUPPORTED_100baseT_Half (1 << 2)
|
|
|
-#define SUPPORTED_100baseT_Full (1 << 3)
|
|
|
-#define SUPPORTED_1000baseT_Half (1 << 4)
|
|
|
-#define SUPPORTED_1000baseT_Full (1 << 5)
|
|
|
-#define SUPPORTED_Autoneg (1 << 6)
|
|
|
-#define SUPPORTED_TP (1 << 7)
|
|
|
-#define SUPPORTED_AUI (1 << 8)
|
|
|
-#define SUPPORTED_MII (1 << 9)
|
|
|
-#define SUPPORTED_FIBRE (1 << 10)
|
|
|
-#define SUPPORTED_BNC (1 << 11)
|
|
|
-#define SUPPORTED_10000baseT_Full (1 << 12)
|
|
|
-#define SUPPORTED_Pause (1 << 13)
|
|
|
-#define SUPPORTED_Asym_Pause (1 << 14)
|
|
|
-#define SUPPORTED_2500baseX_Full (1 << 15)
|
|
|
-#define SUPPORTED_Backplane (1 << 16)
|
|
|
-#define SUPPORTED_1000baseKX_Full (1 << 17)
|
|
|
-#define SUPPORTED_10000baseKX4_Full (1 << 18)
|
|
|
-#define SUPPORTED_10000baseKR_Full (1 << 19)
|
|
|
-#define SUPPORTED_10000baseR_FEC (1 << 20)
|
|
|
-#define SUPPORTED_20000baseMLD2_Full (1 << 21)
|
|
|
-#define SUPPORTED_20000baseKR2_Full (1 << 22)
|
|
|
-#define SUPPORTED_40000baseKR4_Full (1 << 23)
|
|
|
-#define SUPPORTED_40000baseCR4_Full (1 << 24)
|
|
|
-#define SUPPORTED_40000baseSR4_Full (1 << 25)
|
|
|
-#define SUPPORTED_40000baseLR4_Full (1 << 26)
|
|
|
-#define SUPPORTED_56000baseKR4_Full (1 << 27)
|
|
|
-#define SUPPORTED_56000baseCR4_Full (1 << 28)
|
|
|
-#define SUPPORTED_56000baseSR4_Full (1 << 29)
|
|
|
-#define SUPPORTED_56000baseLR4_Full (1 << 30)
|
|
|
-
|
|
|
-#define ADVERTISED_10baseT_Half (1 << 0)
|
|
|
-#define ADVERTISED_10baseT_Full (1 << 1)
|
|
|
-#define ADVERTISED_100baseT_Half (1 << 2)
|
|
|
-#define ADVERTISED_100baseT_Full (1 << 3)
|
|
|
-#define ADVERTISED_1000baseT_Half (1 << 4)
|
|
|
-#define ADVERTISED_1000baseT_Full (1 << 5)
|
|
|
-#define ADVERTISED_Autoneg (1 << 6)
|
|
|
-#define ADVERTISED_TP (1 << 7)
|
|
|
-#define ADVERTISED_AUI (1 << 8)
|
|
|
-#define ADVERTISED_MII (1 << 9)
|
|
|
-#define ADVERTISED_FIBRE (1 << 10)
|
|
|
-#define ADVERTISED_BNC (1 << 11)
|
|
|
-#define ADVERTISED_10000baseT_Full (1 << 12)
|
|
|
-#define ADVERTISED_Pause (1 << 13)
|
|
|
-#define ADVERTISED_Asym_Pause (1 << 14)
|
|
|
-#define ADVERTISED_2500baseX_Full (1 << 15)
|
|
|
-#define ADVERTISED_Backplane (1 << 16)
|
|
|
-#define ADVERTISED_1000baseKX_Full (1 << 17)
|
|
|
-#define ADVERTISED_10000baseKX4_Full (1 << 18)
|
|
|
-#define ADVERTISED_10000baseKR_Full (1 << 19)
|
|
|
-#define ADVERTISED_10000baseR_FEC (1 << 20)
|
|
|
-#define ADVERTISED_20000baseMLD2_Full (1 << 21)
|
|
|
-#define ADVERTISED_20000baseKR2_Full (1 << 22)
|
|
|
-#define ADVERTISED_40000baseKR4_Full (1 << 23)
|
|
|
-#define ADVERTISED_40000baseCR4_Full (1 << 24)
|
|
|
-#define ADVERTISED_40000baseSR4_Full (1 << 25)
|
|
|
-#define ADVERTISED_40000baseLR4_Full (1 << 26)
|
|
|
-#define ADVERTISED_56000baseKR4_Full (1 << 27)
|
|
|
-#define ADVERTISED_56000baseCR4_Full (1 << 28)
|
|
|
-#define ADVERTISED_56000baseSR4_Full (1 << 29)
|
|
|
-#define ADVERTISED_56000baseLR4_Full (1 << 30)
|
|
|
+/* Link mode bit indices */
|
|
|
+enum ethtool_link_mode_bit_indices {
|
|
|
+ ETHTOOL_LINK_MODE_10baseT_Half_BIT = 0,
|
|
|
+ ETHTOOL_LINK_MODE_10baseT_Full_BIT = 1,
|
|
|
+ ETHTOOL_LINK_MODE_100baseT_Half_BIT = 2,
|
|
|
+ ETHTOOL_LINK_MODE_100baseT_Full_BIT = 3,
|
|
|
+ ETHTOOL_LINK_MODE_1000baseT_Half_BIT = 4,
|
|
|
+ ETHTOOL_LINK_MODE_1000baseT_Full_BIT = 5,
|
|
|
+ ETHTOOL_LINK_MODE_Autoneg_BIT = 6,
|
|
|
+ ETHTOOL_LINK_MODE_TP_BIT = 7,
|
|
|
+ ETHTOOL_LINK_MODE_AUI_BIT = 8,
|
|
|
+ ETHTOOL_LINK_MODE_MII_BIT = 9,
|
|
|
+ ETHTOOL_LINK_MODE_FIBRE_BIT = 10,
|
|
|
+ ETHTOOL_LINK_MODE_BNC_BIT = 11,
|
|
|
+ ETHTOOL_LINK_MODE_10000baseT_Full_BIT = 12,
|
|
|
+ ETHTOOL_LINK_MODE_Pause_BIT = 13,
|
|
|
+ ETHTOOL_LINK_MODE_Asym_Pause_BIT = 14,
|
|
|
+ ETHTOOL_LINK_MODE_2500baseX_Full_BIT = 15,
|
|
|
+ ETHTOOL_LINK_MODE_Backplane_BIT = 16,
|
|
|
+ ETHTOOL_LINK_MODE_1000baseKX_Full_BIT = 17,
|
|
|
+ ETHTOOL_LINK_MODE_10000baseKX4_Full_BIT = 18,
|
|
|
+ ETHTOOL_LINK_MODE_10000baseKR_Full_BIT = 19,
|
|
|
+ ETHTOOL_LINK_MODE_10000baseR_FEC_BIT = 20,
|
|
|
+ ETHTOOL_LINK_MODE_20000baseMLD2_Full_BIT = 21,
|
|
|
+ ETHTOOL_LINK_MODE_20000baseKR2_Full_BIT = 22,
|
|
|
+ ETHTOOL_LINK_MODE_40000baseKR4_Full_BIT = 23,
|
|
|
+ ETHTOOL_LINK_MODE_40000baseCR4_Full_BIT = 24,
|
|
|
+ ETHTOOL_LINK_MODE_40000baseSR4_Full_BIT = 25,
|
|
|
+ ETHTOOL_LINK_MODE_40000baseLR4_Full_BIT = 26,
|
|
|
+ ETHTOOL_LINK_MODE_56000baseKR4_Full_BIT = 27,
|
|
|
+ ETHTOOL_LINK_MODE_56000baseCR4_Full_BIT = 28,
|
|
|
+ ETHTOOL_LINK_MODE_56000baseSR4_Full_BIT = 29,
|
|
|
+ ETHTOOL_LINK_MODE_56000baseLR4_Full_BIT = 30,
|
|
|
+
|
|
|
+ /* Last allowed bit for __ETHTOOL_LINK_MODE_LEGACY_MASK is bit
|
|
|
+ * 31. Please do NOT define any SUPPORTED_* or ADVERTISED_*
|
|
|
+ * macro for bits > 31. The only way to use indices > 31 is to
|
|
|
+ * use the new ETHTOOL_GLINKSETTINGS/ETHTOOL_SLINKSETTINGS API.
|
|
|
+ */
|
|
|
+
|
|
|
+ __ETHTOOL_LINK_MODE_LAST
|
|
|
+ = ETHTOOL_LINK_MODE_56000baseLR4_Full_BIT,
|
|
|
+};
|
|
|
+
|
|
|
+#define __ETHTOOL_LINK_MODE_LEGACY_MASK(base_name) \
|
|
|
+ (1UL << (ETHTOOL_LINK_MODE_ ## base_name ## _BIT))
|
|
|
+
|
|
|
+/* DEPRECATED macros. Please migrate to
|
|
|
+ * ETHTOOL_GLINKSETTINGS/ETHTOOL_SLINKSETTINGS API. Please do NOT
|
|
|
+ * define any new SUPPORTED_* macro for bits > 31.
|
|
|
+ */
|
|
|
+#define SUPPORTED_10baseT_Half __ETHTOOL_LINK_MODE_LEGACY_MASK(10baseT_Half)
|
|
|
+#define SUPPORTED_10baseT_Full __ETHTOOL_LINK_MODE_LEGACY_MASK(10baseT_Full)
|
|
|
+#define SUPPORTED_100baseT_Half __ETHTOOL_LINK_MODE_LEGACY_MASK(100baseT_Half)
|
|
|
+#define SUPPORTED_100baseT_Full __ETHTOOL_LINK_MODE_LEGACY_MASK(100baseT_Full)
|
|
|
+#define SUPPORTED_1000baseT_Half __ETHTOOL_LINK_MODE_LEGACY_MASK(1000baseT_Half)
|
|
|
+#define SUPPORTED_1000baseT_Full __ETHTOOL_LINK_MODE_LEGACY_MASK(1000baseT_Full)
|
|
|
+#define SUPPORTED_Autoneg __ETHTOOL_LINK_MODE_LEGACY_MASK(Autoneg)
|
|
|
+#define SUPPORTED_TP __ETHTOOL_LINK_MODE_LEGACY_MASK(TP)
|
|
|
+#define SUPPORTED_AUI __ETHTOOL_LINK_MODE_LEGACY_MASK(AUI)
|
|
|
+#define SUPPORTED_MII __ETHTOOL_LINK_MODE_LEGACY_MASK(MII)
|
|
|
+#define SUPPORTED_FIBRE __ETHTOOL_LINK_MODE_LEGACY_MASK(FIBRE)
|
|
|
+#define SUPPORTED_BNC __ETHTOOL_LINK_MODE_LEGACY_MASK(BNC)
|
|
|
+#define SUPPORTED_10000baseT_Full __ETHTOOL_LINK_MODE_LEGACY_MASK(10000baseT_Full)
|
|
|
+#define SUPPORTED_Pause __ETHTOOL_LINK_MODE_LEGACY_MASK(Pause)
|
|
|
+#define SUPPORTED_Asym_Pause __ETHTOOL_LINK_MODE_LEGACY_MASK(Asym_Pause)
|
|
|
+#define SUPPORTED_2500baseX_Full __ETHTOOL_LINK_MODE_LEGACY_MASK(2500baseX_Full)
|
|
|
+#define SUPPORTED_Backplane __ETHTOOL_LINK_MODE_LEGACY_MASK(Backplane)
|
|
|
+#define SUPPORTED_1000baseKX_Full __ETHTOOL_LINK_MODE_LEGACY_MASK(1000baseKX_Full)
|
|
|
+#define SUPPORTED_10000baseKX4_Full __ETHTOOL_LINK_MODE_LEGACY_MASK(10000baseKX4_Full)
|
|
|
+#define SUPPORTED_10000baseKR_Full __ETHTOOL_LINK_MODE_LEGACY_MASK(10000baseKR_Full)
|
|
|
+#define SUPPORTED_10000baseR_FEC __ETHTOOL_LINK_MODE_LEGACY_MASK(10000baseR_FEC)
|
|
|
+#define SUPPORTED_20000baseMLD2_Full __ETHTOOL_LINK_MODE_LEGACY_MASK(20000baseMLD2_Full)
|
|
|
+#define SUPPORTED_20000baseKR2_Full __ETHTOOL_LINK_MODE_LEGACY_MASK(20000baseKR2_Full)
|
|
|
+#define SUPPORTED_40000baseKR4_Full __ETHTOOL_LINK_MODE_LEGACY_MASK(40000baseKR4_Full)
|
|
|
+#define SUPPORTED_40000baseCR4_Full __ETHTOOL_LINK_MODE_LEGACY_MASK(40000baseCR4_Full)
|
|
|
+#define SUPPORTED_40000baseSR4_Full __ETHTOOL_LINK_MODE_LEGACY_MASK(40000baseSR4_Full)
|
|
|
+#define SUPPORTED_40000baseLR4_Full __ETHTOOL_LINK_MODE_LEGACY_MASK(40000baseLR4_Full)
|
|
|
+#define SUPPORTED_56000baseKR4_Full __ETHTOOL_LINK_MODE_LEGACY_MASK(56000baseKR4_Full)
|
|
|
+#define SUPPORTED_56000baseCR4_Full __ETHTOOL_LINK_MODE_LEGACY_MASK(56000baseCR4_Full)
|
|
|
+#define SUPPORTED_56000baseSR4_Full __ETHTOOL_LINK_MODE_LEGACY_MASK(56000baseSR4_Full)
|
|
|
+#define SUPPORTED_56000baseLR4_Full __ETHTOOL_LINK_MODE_LEGACY_MASK(56000baseLR4_Full)
|
|
|
+/* Please do not define any new SUPPORTED_* macro for bits > 31, see
|
|
|
+ * notice above.
|
|
|
+ */
|
|
|
+
|
|
|
+/*
|
|
|
+ * DEPRECATED macros. Please migrate to
|
|
|
+ * ETHTOOL_GLINKSETTINGS/ETHTOOL_SLINKSETTINGS API. Please do NOT
|
|
|
+ * define any new ADERTISE_* macro for bits > 31.
|
|
|
+ */
|
|
|
+#define ADVERTISED_10baseT_Half __ETHTOOL_LINK_MODE_LEGACY_MASK(10baseT_Half)
|
|
|
+#define ADVERTISED_10baseT_Full __ETHTOOL_LINK_MODE_LEGACY_MASK(10baseT_Full)
|
|
|
+#define ADVERTISED_100baseT_Half __ETHTOOL_LINK_MODE_LEGACY_MASK(100baseT_Half)
|
|
|
+#define ADVERTISED_100baseT_Full __ETHTOOL_LINK_MODE_LEGACY_MASK(100baseT_Full)
|
|
|
+#define ADVERTISED_1000baseT_Half __ETHTOOL_LINK_MODE_LEGACY_MASK(1000baseT_Half)
|
|
|
+#define ADVERTISED_1000baseT_Full __ETHTOOL_LINK_MODE_LEGACY_MASK(1000baseT_Full)
|
|
|
+#define ADVERTISED_Autoneg __ETHTOOL_LINK_MODE_LEGACY_MASK(Autoneg)
|
|
|
+#define ADVERTISED_TP __ETHTOOL_LINK_MODE_LEGACY_MASK(TP)
|
|
|
+#define ADVERTISED_AUI __ETHTOOL_LINK_MODE_LEGACY_MASK(AUI)
|
|
|
+#define ADVERTISED_MII __ETHTOOL_LINK_MODE_LEGACY_MASK(MII)
|
|
|
+#define ADVERTISED_FIBRE __ETHTOOL_LINK_MODE_LEGACY_MASK(FIBRE)
|
|
|
+#define ADVERTISED_BNC __ETHTOOL_LINK_MODE_LEGACY_MASK(BNC)
|
|
|
+#define ADVERTISED_10000baseT_Full __ETHTOOL_LINK_MODE_LEGACY_MASK(10000baseT_Full)
|
|
|
+#define ADVERTISED_Pause __ETHTOOL_LINK_MODE_LEGACY_MASK(Pause)
|
|
|
+#define ADVERTISED_Asym_Pause __ETHTOOL_LINK_MODE_LEGACY_MASK(Asym_Pause)
|
|
|
+#define ADVERTISED_2500baseX_Full __ETHTOOL_LINK_MODE_LEGACY_MASK(2500baseX_Full)
|
|
|
+#define ADVERTISED_Backplane __ETHTOOL_LINK_MODE_LEGACY_MASK(Backplane)
|
|
|
+#define ADVERTISED_1000baseKX_Full __ETHTOOL_LINK_MODE_LEGACY_MASK(1000baseKX_Full)
|
|
|
+#define ADVERTISED_10000baseKX4_Full __ETHTOOL_LINK_MODE_LEGACY_MASK(10000baseKX4_Full)
|
|
|
+#define ADVERTISED_10000baseKR_Full __ETHTOOL_LINK_MODE_LEGACY_MASK(10000baseKR_Full)
|
|
|
+#define ADVERTISED_10000baseR_FEC __ETHTOOL_LINK_MODE_LEGACY_MASK(10000baseR_FEC)
|
|
|
+#define ADVERTISED_20000baseMLD2_Full __ETHTOOL_LINK_MODE_LEGACY_MASK(20000baseMLD2_Full)
|
|
|
+#define ADVERTISED_20000baseKR2_Full __ETHTOOL_LINK_MODE_LEGACY_MASK(20000baseKR2_Full)
|
|
|
+#define ADVERTISED_40000baseKR4_Full __ETHTOOL_LINK_MODE_LEGACY_MASK(40000baseKR4_Full)
|
|
|
+#define ADVERTISED_40000baseCR4_Full __ETHTOOL_LINK_MODE_LEGACY_MASK(40000baseCR4_Full)
|
|
|
+#define ADVERTISED_40000baseSR4_Full __ETHTOOL_LINK_MODE_LEGACY_MASK(40000baseSR4_Full)
|
|
|
+#define ADVERTISED_40000baseLR4_Full __ETHTOOL_LINK_MODE_LEGACY_MASK(40000baseLR4_Full)
|
|
|
+#define ADVERTISED_56000baseKR4_Full __ETHTOOL_LINK_MODE_LEGACY_MASK(56000baseKR4_Full)
|
|
|
+#define ADVERTISED_56000baseCR4_Full __ETHTOOL_LINK_MODE_LEGACY_MASK(56000baseCR4_Full)
|
|
|
+#define ADVERTISED_56000baseSR4_Full __ETHTOOL_LINK_MODE_LEGACY_MASK(56000baseSR4_Full)
|
|
|
+#define ADVERTISED_56000baseLR4_Full __ETHTOOL_LINK_MODE_LEGACY_MASK(56000baseLR4_Full)
|
|
|
+/* Please do not define any new ADVERTISED_* macro for bits > 31, see
|
|
|
+ * notice above.
|
|
|
+ */
|
|
|
|
|
|
/* The following are all involved in forcing a particular link
|
|
|
* mode for the device for setting things. When getting the
|
|
@@ -1533,4 +1604,123 @@ enum ethtool_reset_flags {
|
|
|
};
|
|
|
#define ETH_RESET_SHARED_SHIFT 16
|
|
|
|
|
|
+
|
|
|
+/**
|
|
|
+ * struct ethtool_link_settings - link control and status
|
|
|
+ *
|
|
|
+ * IMPORTANT, Backward compatibility notice: When implementing new
|
|
|
+ * user-space tools, please first try %ETHTOOL_GLINKSETTINGS, and
|
|
|
+ * if it succeeds use %ETHTOOL_SLINKSETTINGS to change link
|
|
|
+ * settings; do not use %ETHTOOL_SSET if %ETHTOOL_GLINKSETTINGS
|
|
|
+ * succeeded: stick to %ETHTOOL_GLINKSETTINGS/%SLINKSETTINGS in
|
|
|
+ * that case. Conversely, if %ETHTOOL_GLINKSETTINGS fails, use
|
|
|
+ * %ETHTOOL_GSET to query and %ETHTOOL_SSET to change link
|
|
|
+ * settings; do not use %ETHTOOL_SLINKSETTINGS if
|
|
|
+ * %ETHTOOL_GLINKSETTINGS failed: stick to
|
|
|
+ * %ETHTOOL_GSET/%ETHTOOL_SSET in that case.
|
|
|
+ *
|
|
|
+ * @cmd: Command number = %ETHTOOL_GLINKSETTINGS or %ETHTOOL_SLINKSETTINGS
|
|
|
+ * @speed: Link speed (Mbps)
|
|
|
+ * @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.
|
|
|
+ * @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.
|
|
|
+ * @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.
|
|
|
+ * @link_mode_masks_nwords: Number of 32-bit words for each of the
|
|
|
+ * supported, advertising, lp_advertising link mode bitmaps. For
|
|
|
+ * %ETHTOOL_GLINKSETTINGS: on entry, number of words passed by user
|
|
|
+ * (>= 0); on return, if handshake in progress, negative if
|
|
|
+ * request size unsupported by kernel: absolute value indicates
|
|
|
+ * kernel recommended size and cmd field is 0, as well as all the
|
|
|
+ * other fields; otherwise (handshake completed), strictly
|
|
|
+ * positive to indicate size used by kernel and cmd field is
|
|
|
+ * %ETHTOOL_GLINKSETTINGS, all other fields populated by driver. For
|
|
|
+ * %ETHTOOL_SLINKSETTINGS: must be valid on entry, ie. a positive
|
|
|
+ * value returned previously by %ETHTOOL_GLINKSETTINGS, otherwise
|
|
|
+ * refused. For drivers: ignore this field (use kernel's
|
|
|
+ * __ETHTOOL_LINK_MODE_MASK_NBITS instead), any change to it will
|
|
|
+ * be overwritten by kernel.
|
|
|
+ * @supported: Bitmap with each bit meaning given by
|
|
|
+ * %ethtool_link_mode_bit_indices for the link modes, physical
|
|
|
+ * connectors and other link features for which the interface
|
|
|
+ * supports autonegotiation or auto-detection. Read-only.
|
|
|
+ * @advertising: Bitmap with each bit meaning given by
|
|
|
+ * %ethtool_link_mode_bit_indices for the link modes, physical
|
|
|
+ * connectors and other link features that are advertised through
|
|
|
+ * autonegotiation or enabled for auto-detection.
|
|
|
+ * @lp_advertising: Bitmap with each bit meaning given by
|
|
|
+ * %ethtool_link_mode_bit_indices for the link modes, and other
|
|
|
+ * link features that the link partner advertised through
|
|
|
+ * autonegotiation; 0 if unknown or not applicable. Read-only.
|
|
|
+ *
|
|
|
+ * 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.
|
|
|
+ *
|
|
|
+ * Deprecated %ethtool_cmd fields transceiver, maxtxpkt and maxrxpkt
|
|
|
+ * are not available in %ethtool_link_settings. Until all drivers are
|
|
|
+ * converted to ignore them or to the new %ethtool_link_settings API,
|
|
|
+ * for both queries and changes, users should always try
|
|
|
+ * %ETHTOOL_GLINKSETTINGS first, and if it fails with -ENOTSUPP stick
|
|
|
+ * only to %ETHTOOL_GSET and %ETHTOOL_SSET consistently. If it
|
|
|
+ * succeeds, then users should stick to %ETHTOOL_GLINKSETTINGS and
|
|
|
+ * %ETHTOOL_SLINKSETTINGS (which would support drivers implementing
|
|
|
+ * either %ethtool_cmd or %ethtool_link_settings).
|
|
|
+ *
|
|
|
+ * Users should assume that all fields not marked read-only are
|
|
|
+ * writable and subject to validation by the driver. They should use
|
|
|
+ * %ETHTOOL_GLINKSETTINGS to get the current values before making specific
|
|
|
+ * changes and then applying them with %ETHTOOL_SLINKSETTINGS.
|
|
|
+ *
|
|
|
+ * Drivers that implement %get_link_ksettings and/or
|
|
|
+ * %set_link_ksettings should ignore the @cmd
|
|
|
+ * and @link_mode_masks_nwords fields (any change to them overwritten
|
|
|
+ * by kernel), and rely only on kernel's internal
|
|
|
+ * %__ETHTOOL_LINK_MODE_MASK_NBITS and
|
|
|
+ * %ethtool_link_mode_mask_t. Drivers that implement
|
|
|
+ * %set_link_ksettings() should validate all fields other than @cmd
|
|
|
+ * and @link_mode_masks_nwords that are not described as read-only or
|
|
|
+ * deprecated, and must ignore all fields described as read-only.
|
|
|
+ */
|
|
|
+struct ethtool_link_settings {
|
|
|
+ __u32 cmd;
|
|
|
+ __u32 speed;
|
|
|
+ __u8 duplex;
|
|
|
+ __u8 port;
|
|
|
+ __u8 phy_address;
|
|
|
+ __u8 autoneg;
|
|
|
+ __u8 mdio_support;
|
|
|
+ __u8 eth_tp_mdix;
|
|
|
+ __u8 eth_tp_mdix_ctrl;
|
|
|
+ __s8 link_mode_masks_nwords;
|
|
|
+ __u32 reserved[8];
|
|
|
+ __u32 link_mode_masks[0];
|
|
|
+ /* layout of link_mode_masks fields:
|
|
|
+ * __u32 map_supported[link_mode_masks_nwords];
|
|
|
+ * __u32 map_advertising[link_mode_masks_nwords];
|
|
|
+ * __u32 map_lp_advertising[link_mode_masks_nwords];
|
|
|
+ */
|
|
|
+};
|
|
|
#endif /* _UAPI_LINUX_ETHTOOL_H */
|