1313 lines · 48.6 KB · C
RawDownload
/* * ethtool.h: Defines for Linux ethtool. * * Copyright (C) 1998 David S. Miller (davem@redhat.com) * Copyright 2001 Jeff Garzik <jgarzik@pobox.com> * Portions Copyright 2001 Sun Microsystems (thockin@sun.com) * Portions Copyright 2002 Intel (eli.kupermann@intel.com, *                                christopher.leech@intel.com, *                                scott.feldman@intel.com) * Portions Copyright (C) Sun Microsystems 2008 */ #ifndef _UAPI_LINUX_ETHTOOL_H#define _UAPI_LINUX_ETHTOOL_H #include <linux/types.h>#include <linux/if_ether.h> /* 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 {	__u32	cmd;	__u32	supported;	__u32	advertising;	__u16	speed;	__u8	duplex;	__u8	port;	__u8	phy_address;	__u8	transceiver;	__u8	autoneg;	__u8	mdio_support;	__u32	maxtxpkt;	__u32	maxrxpkt;	__u16	speed_hi;	__u8	eth_tp_mdix;	__u8	eth_tp_mdix_ctrl;	__u32	lp_advertising;	__u32	reserved[2];}; static inline void ethtool_cmd_speed_set(struct ethtool_cmd *ep,					 __u32 speed){ 	ep->speed = (__u16)speed;	ep->speed_hi = (__u16)(speed >> 16);} static inline __u32 ethtool_cmd_speed(const struct ethtool_cmd *ep){	return (ep->speed_hi << 16) | ep->speed;} /* Device supports clause 22 register access to PHY or peripherals * using the interface defined in <linux/mii.h>.  This should not be * set if there are known to be no such peripherals present or if * the driver only emulates clause 22 registers for compatibility. */#define ETH_MDIO_SUPPORTS_C22	1 /* Device supports clause 45 register access to PHY or peripherals * using the interface defined in <linux/mii.h> and <linux/mdio.h>. * This should not be set if there are known to be no such peripherals * present. */#define ETH_MDIO_SUPPORTS_C45	2 #define ETHTOOL_FWVERS_LEN	32#define ETHTOOL_BUSINFO_LEN	32 /** * struct ethtool_drvinfo - general driver and device information * @cmd: Command number = %ETHTOOL_GDRVINFO * @driver: Driver short name.  This should normally match the name *	in its bus driver structure (e.g. pci_driver::name).  Must *	not be an empty string. * @version: Driver version string; may be an empty string * @fw_version: Firmware version string; may be an empty string * @bus_info: Device bus address.  This should match the dev_name() *	string for the underlying bus device, if there is one.  May be *	an empty string. * @n_priv_flags: Number of flags valid for %ETHTOOL_GPFLAGS and *	%ETHTOOL_SPFLAGS commands; also the number of strings in the *	%ETH_SS_PRIV_FLAGS set * @n_stats: Number of u64 statistics returned by the %ETHTOOL_GSTATS *	command; also the number of strings in the %ETH_SS_STATS set * @testinfo_len: Number of results returned by the %ETHTOOL_TEST *	command; also the number of strings in the %ETH_SS_TEST set * @eedump_len: Size of EEPROM accessible through the %ETHTOOL_GEEPROM *	and %ETHTOOL_SEEPROM commands, in bytes * @regdump_len: Size of register dump returned by the %ETHTOOL_GREGS *	command, in bytes * * Users can use the %ETHTOOL_GSSET_INFO command to get the number of * strings in any string set (from Linux 2.6.34). * * Drivers should set at most @driver, @version, @fw_version and * @bus_info in their get_drvinfo() implementation.  The ethtool * core fills in the other fields using other driver operations. */struct ethtool_drvinfo {	__u32	cmd;	char	driver[32];	char	version[32];	char	fw_version[ETHTOOL_FWVERS_LEN];	char	bus_info[ETHTOOL_BUSINFO_LEN];	char	reserved1[32];	char	reserved2[12];	__u32	n_priv_flags;	__u32	n_stats;	__u32	testinfo_len;	__u32	eedump_len;	__u32	regdump_len;}; #define SOPASS_MAX	6 /** * struct ethtool_wolinfo - Wake-On-Lan configuration * @cmd: Command number = %ETHTOOL_GWOL or %ETHTOOL_SWOL * @supported: Bitmask of %WAKE_* flags for supported Wake-On-Lan modes. *	Read-only. * @wolopts: Bitmask of %WAKE_* flags for enabled Wake-On-Lan modes. * @sopass: SecureOn(tm) password; meaningful only if %WAKE_MAGICSECURE *	is set in @wolopts. */struct ethtool_wolinfo {	__u32	cmd;	__u32	supported;	__u32	wolopts;	__u8	sopass[SOPASS_MAX];}; /* for passing single values */struct ethtool_value {	__u32	cmd;	__u32	data;}; /** * struct ethtool_regs - hardware register dump * @cmd: Command number = %ETHTOOL_GREGS * @version: Dump format version.  This is driver-specific and may *	distinguish different chips/revisions.  Drivers must use new *	version numbers whenever the dump format changes in an *	incompatible way. * @len: On entry, the real length of @data.  On return, the number of *	bytes used. * @data: Buffer for the register dump * * Users should use %ETHTOOL_GDRVINFO to find the maximum length of * a register dump for the interface.  They must allocate the buffer * immediately following this structure. */struct ethtool_regs {	__u32	cmd;	__u32	version;	__u32	len;	__u8	data[0];}; /** * struct ethtool_eeprom - EEPROM dump * @cmd: Command number = %ETHTOOL_GEEPROM, %ETHTOOL_GMODULEEEPROM or *	%ETHTOOL_SEEPROM * @magic: A 'magic cookie' value to guard against accidental changes. *	The value passed in to %ETHTOOL_SEEPROM must match the value *	returned by %ETHTOOL_GEEPROM for the same device.  This is *	unused when @cmd is %ETHTOOL_GMODULEEEPROM. * @offset: Offset within the EEPROM to begin reading/writing, in bytes * @len: On entry, number of bytes to read/write.  On successful *	return, number of bytes actually read/written.  In case of *	error, this may indicate at what point the error occurred. * @data: Buffer to read/write from * * Users may use %ETHTOOL_GDRVINFO or %ETHTOOL_GMODULEINFO to find * the length of an on-board or module EEPROM, respectively.  They * must allocate the buffer immediately following this structure. */struct ethtool_eeprom {	__u32	cmd;	__u32	magic;	__u32	offset;	__u32	len;	__u8	data[0];}; /** * struct ethtool_eee - Energy Efficient Ethernet information * @cmd: ETHTOOL_{G,S}EEE * @supported: Mask of %SUPPORTED_* flags for the speed/duplex combinations *	for which there is EEE support. * @advertised: Mask of %ADVERTISED_* flags for the speed/duplex combinations *	advertised as eee capable. * @lp_advertised: Mask of %ADVERTISED_* flags for the speed/duplex *	combinations advertised by the link partner as eee capable. * @eee_active: Result of the eee auto negotiation. * @eee_enabled: EEE configured mode (enabled/disabled). * @tx_lpi_enabled: Whether the interface should assert its tx lpi, given *	that eee was negotiated. * @tx_lpi_timer: Time in microseconds the interface delays prior to asserting *	its tx lpi (after reaching 'idle' state). Effective only when eee *	was negotiated and tx_lpi_enabled was set. */struct ethtool_eee {	__u32	cmd;	__u32	supported;	__u32	advertised;	__u32	lp_advertised;	__u32	eee_active;	__u32	eee_enabled;	__u32	tx_lpi_enabled;	__u32	tx_lpi_timer;	__u32	reserved[2];}; /** * struct ethtool_modinfo - plugin module eeprom information * @cmd: %ETHTOOL_GMODULEINFO * @type: Standard the module information conforms to %ETH_MODULE_SFF_xxxx * @eeprom_len: Length of the eeprom * * This structure is used to return the information to * properly size memory for a subsequent call to %ETHTOOL_GMODULEEEPROM. * The type code indicates the eeprom data format */struct ethtool_modinfo {	__u32   cmd;	__u32   type;	__u32   eeprom_len;	__u32   reserved[8];}; /** * struct ethtool_coalesce - coalescing parameters for IRQs and stats updates * @cmd: ETHTOOL_{G,S}COALESCE * @rx_coalesce_usecs: How many usecs to delay an RX interrupt after *	a packet arrives. * @rx_max_coalesced_frames: Maximum number of packets to receive *	before an RX interrupt. * @rx_coalesce_usecs_irq: Same as @rx_coalesce_usecs, except that *	this value applies while an IRQ is being serviced by the host. * @rx_max_coalesced_frames_irq: Same as @rx_max_coalesced_frames, *	except that this value applies while an IRQ is being serviced *	by the host. * @tx_coalesce_usecs: How many usecs to delay a TX interrupt after *	a packet is sent. * @tx_max_coalesced_frames: Maximum number of packets to be sent *	before a TX interrupt. * @tx_coalesce_usecs_irq: Same as @tx_coalesce_usecs, except that *	this value applies while an IRQ is being serviced by the host. * @tx_max_coalesced_frames_irq: Same as @tx_max_coalesced_frames, *	except that this value applies while an IRQ is being serviced *	by the host. * @stats_block_coalesce_usecs: How many usecs to delay in-memory *	statistics block updates.  Some drivers do not have an *	in-memory statistic block, and in such cases this value is *	ignored.  This value must not be zero. * @use_adaptive_rx_coalesce: Enable adaptive RX coalescing. * @use_adaptive_tx_coalesce: Enable adaptive TX coalescing. * @pkt_rate_low: Threshold for low packet rate (packets per second). * @rx_coalesce_usecs_low: How many usecs to delay an RX interrupt after *	a packet arrives, when the packet rate is below @pkt_rate_low. * @rx_max_coalesced_frames_low: Maximum number of packets to be received *	before an RX interrupt, when the packet rate is below @pkt_rate_low. * @tx_coalesce_usecs_low: How many usecs to delay a TX interrupt after *	a packet is sent, when the packet rate is below @pkt_rate_low. * @tx_max_coalesced_frames_low: Maximum nuumber of packets to be sent before *	a TX interrupt, when the packet rate is below @pkt_rate_low. * @pkt_rate_high: Threshold for high packet rate (packets per second). * @rx_coalesce_usecs_high: How many usecs to delay an RX interrupt after *	a packet arrives, when the packet rate is above @pkt_rate_high. * @rx_max_coalesced_frames_high: Maximum number of packets to be received *	before an RX interrupt, when the packet rate is above @pkt_rate_high. * @tx_coalesce_usecs_high: How many usecs to delay a TX interrupt after *	a packet is sent, when the packet rate is above @pkt_rate_high. * @tx_max_coalesced_frames_high: Maximum number of packets to be sent before *	a TX interrupt, when the packet rate is above @pkt_rate_high. * @rate_sample_interval: How often to do adaptive coalescing packet rate *	sampling, measured in seconds.  Must not be zero. * * Each pair of (usecs, max_frames) fields specifies that interrupts * should be coalesced until *	(usecs > 0 && time_since_first_completion >= usecs) || *	(max_frames > 0 && completed_frames >= max_frames) * * It is illegal to set both usecs and max_frames to zero as this * would cause interrupts to never be generated.  To disable * coalescing, set usecs = 0 and max_frames = 1. * * Some implementations ignore the value of max_frames and use the * condition time_since_first_completion >= usecs * * This is deprecated.  Drivers for hardware that does not support * counting completions should validate that max_frames == !rx_usecs. * * Adaptive RX/TX coalescing is an algorithm implemented by some * drivers to improve latency under low packet rates and improve * throughput under high packet rates.  Some drivers only implement * one of RX or TX adaptive coalescing.  Anything not implemented by * the driver causes these values to be silently ignored. * * When the packet rate is below @pkt_rate_high but above * @pkt_rate_low (both measured in packets per second) the * normal {rx,tx}_* coalescing parameters are used. */struct ethtool_coalesce {	__u32	cmd;	__u32	rx_coalesce_usecs;	__u32	rx_max_coalesced_frames;	__u32	rx_coalesce_usecs_irq;	__u32	rx_max_coalesced_frames_irq;	__u32	tx_coalesce_usecs;	__u32	tx_max_coalesced_frames;	__u32	tx_coalesce_usecs_irq;	__u32	tx_max_coalesced_frames_irq;	__u32	stats_block_coalesce_usecs;	__u32	use_adaptive_rx_coalesce;	__u32	use_adaptive_tx_coalesce;	__u32	pkt_rate_low;	__u32	rx_coalesce_usecs_low;	__u32	rx_max_coalesced_frames_low;	__u32	tx_coalesce_usecs_low;	__u32	tx_max_coalesced_frames_low;	__u32	pkt_rate_high;	__u32	rx_coalesce_usecs_high;	__u32	rx_max_coalesced_frames_high;	__u32	tx_coalesce_usecs_high;	__u32	tx_max_coalesced_frames_high;	__u32	rate_sample_interval;}; /** * struct ethtool_ringparam - RX/TX ring parameters * @cmd: Command number = %ETHTOOL_GRINGPARAM or %ETHTOOL_SRINGPARAM * @rx_max_pending: Maximum supported number of pending entries per *	RX ring.  Read-only. * @rx_mini_max_pending: Maximum supported number of pending entries *	per RX mini ring.  Read-only. * @rx_jumbo_max_pending: Maximum supported number of pending entries *	per RX jumbo ring.  Read-only. * @tx_max_pending: Maximum supported number of pending entries per *	TX ring.  Read-only. * @rx_pending: Current maximum number of pending entries per RX ring * @rx_mini_pending: Current maximum number of pending entries per RX *	mini ring * @rx_jumbo_pending: Current maximum number of pending entries per RX *	jumbo ring * @tx_pending: Current maximum supported number of pending entries *	per TX ring * * If the interface does not have separate RX mini and/or jumbo rings, * @rx_mini_max_pending and/or @rx_jumbo_max_pending will be 0. * * There may also be driver-dependent minimum values for the number * of entries per ring. */struct ethtool_ringparam {	__u32	cmd;	__u32	rx_max_pending;	__u32	rx_mini_max_pending;	__u32	rx_jumbo_max_pending;	__u32	tx_max_pending;	__u32	rx_pending;	__u32	rx_mini_pending;	__u32	rx_jumbo_pending;	__u32	tx_pending;}; /** * struct ethtool_channels - configuring number of network channel * @cmd: ETHTOOL_{G,S}CHANNELS * @max_rx: Read only. Maximum number of receive channel the driver support. * @max_tx: Read only. Maximum number of transmit channel the driver support. * @max_other: Read only. Maximum number of other channel the driver support. * @max_combined: Read only. Maximum number of combined channel the driver *	support. Set of queues RX, TX or other. * @rx_count: Valid values are in the range 1 to the max_rx. * @tx_count: Valid values are in the range 1 to the max_tx. * @other_count: Valid values are in the range 1 to the max_other. * @combined_count: Valid values are in the range 1 to the max_combined. * * This can be used to configure RX, TX and other channels. */ struct ethtool_channels {	__u32	cmd;	__u32	max_rx;	__u32	max_tx;	__u32	max_other;	__u32	max_combined;	__u32	rx_count;	__u32	tx_count;	__u32	other_count;	__u32	combined_count;}; /** * struct ethtool_pauseparam - Ethernet pause (flow control) parameters * @cmd: Command number = %ETHTOOL_GPAUSEPARAM or %ETHTOOL_SPAUSEPARAM * @autoneg: Flag to enable autonegotiation of pause frame use * @rx_pause: Flag to enable reception of pause frames * @tx_pause: Flag to enable transmission of pause frames * * Drivers should reject a non-zero setting of @autoneg when * autoneogotiation is disabled (or not supported) for the link. * * If the link is autonegotiated, drivers should use * mii_advertise_flowctrl() or similar code to set the advertised * pause frame capabilities based on the @rx_pause and @tx_pause flags, * even if @autoneg is zero.  They should also allow the advertised * pause frame capabilities to be controlled directly through the * advertising field of &struct ethtool_cmd. * * If @autoneg is non-zero, the MAC is configured to send and/or * receive pause frames according to the result of autonegotiation. * Otherwise, it is configured directly based on the @rx_pause and * @tx_pause flags. */struct ethtool_pauseparam {	__u32	cmd;	__u32	autoneg;	__u32	rx_pause;	__u32	tx_pause;}; #define ETH_GSTRING_LEN		32 

Lines 1–500 of 1313.