1*5f184715SAndy Fleming /* 2*5f184715SAndy Fleming * ethtool.h: Defines for Linux ethtool. 3*5f184715SAndy Fleming * 4*5f184715SAndy Fleming * Copyright (C) 1998 David S. Miller (davem@redhat.com) 5*5f184715SAndy Fleming * Copyright 2001 Jeff Garzik <jgarzik@pobox.com> 6*5f184715SAndy Fleming * Portions Copyright 2001 Sun Microsystems (thockin@sun.com) 7*5f184715SAndy Fleming * Portions Copyright 2002 Intel (eli.kupermann@intel.com, 8*5f184715SAndy Fleming * christopher.leech@intel.com, 9*5f184715SAndy Fleming * scott.feldman@intel.com) 10*5f184715SAndy Fleming * Portions Copyright (C) Sun Microsystems 2008 11*5f184715SAndy Fleming */ 12*5f184715SAndy Fleming 13*5f184715SAndy Fleming #ifndef _LINUX_ETHTOOL_H 14*5f184715SAndy Fleming #define _LINUX_ETHTOOL_H 15*5f184715SAndy Fleming 16*5f184715SAndy Fleming #include <linux/types.h> 17*5f184715SAndy Fleming 18*5f184715SAndy Fleming /* This should work for both 32 and 64 bit userland. */ 19*5f184715SAndy Fleming struct ethtool_cmd { 20*5f184715SAndy Fleming __u32 cmd; 21*5f184715SAndy Fleming __u32 supported; /* Features this interface supports */ 22*5f184715SAndy Fleming __u32 advertising; /* Features this interface advertises */ 23*5f184715SAndy Fleming __u16 speed; /* The forced speed, 10Mb, 100Mb, gigabit */ 24*5f184715SAndy Fleming __u8 duplex; /* Duplex, half or full */ 25*5f184715SAndy Fleming __u8 port; /* Which connector port */ 26*5f184715SAndy Fleming __u8 phy_address; 27*5f184715SAndy Fleming __u8 transceiver; /* Which transceiver to use */ 28*5f184715SAndy Fleming __u8 autoneg; /* Enable or disable autonegotiation */ 29*5f184715SAndy Fleming __u8 mdio_support; 30*5f184715SAndy Fleming __u32 maxtxpkt; /* Tx pkts before generating tx int */ 31*5f184715SAndy Fleming __u32 maxrxpkt; /* Rx pkts before generating rx int */ 32*5f184715SAndy Fleming __u16 speed_hi; 33*5f184715SAndy Fleming __u8 eth_tp_mdix; 34*5f184715SAndy Fleming __u8 reserved2; 35*5f184715SAndy Fleming __u32 lp_advertising; /* Features the link partner advertises */ 36*5f184715SAndy Fleming __u32 reserved[2]; 37*5f184715SAndy Fleming }; 38*5f184715SAndy Fleming 39*5f184715SAndy Fleming static inline void ethtool_cmd_speed_set(struct ethtool_cmd *ep, 40*5f184715SAndy Fleming __u32 speed) 41*5f184715SAndy Fleming { 42*5f184715SAndy Fleming 43*5f184715SAndy Fleming ep->speed = (__u16)speed; 44*5f184715SAndy Fleming ep->speed_hi = (__u16)(speed >> 16); 45*5f184715SAndy Fleming } 46*5f184715SAndy Fleming 47*5f184715SAndy Fleming static inline __u32 ethtool_cmd_speed(struct ethtool_cmd *ep) 48*5f184715SAndy Fleming { 49*5f184715SAndy Fleming return (ep->speed_hi << 16) | ep->speed; 50*5f184715SAndy Fleming } 51*5f184715SAndy Fleming 52*5f184715SAndy Fleming #define ETHTOOL_FWVERS_LEN 32 53*5f184715SAndy Fleming #define ETHTOOL_BUSINFO_LEN 32 54*5f184715SAndy Fleming /* these strings are set to whatever the driver author decides... */ 55*5f184715SAndy Fleming struct ethtool_drvinfo { 56*5f184715SAndy Fleming __u32 cmd; 57*5f184715SAndy Fleming char driver[32]; /* driver short name, "tulip", "eepro100" */ 58*5f184715SAndy Fleming char version[32]; /* driver version string */ 59*5f184715SAndy Fleming char fw_version[ETHTOOL_FWVERS_LEN]; /* firmware version string */ 60*5f184715SAndy Fleming char bus_info[ETHTOOL_BUSINFO_LEN]; /* Bus info for this IF. */ 61*5f184715SAndy Fleming /* For PCI devices, use pci_name(pci_dev). */ 62*5f184715SAndy Fleming char reserved1[32]; 63*5f184715SAndy Fleming char reserved2[12]; 64*5f184715SAndy Fleming /* 65*5f184715SAndy Fleming * Some struct members below are filled in 66*5f184715SAndy Fleming * using ops->get_sset_count(). Obtaining 67*5f184715SAndy Fleming * this info from ethtool_drvinfo is now 68*5f184715SAndy Fleming * deprecated; Use ETHTOOL_GSSET_INFO 69*5f184715SAndy Fleming * instead. 70*5f184715SAndy Fleming */ 71*5f184715SAndy Fleming __u32 n_priv_flags; /* number of flags valid in ETHTOOL_GPFLAGS */ 72*5f184715SAndy Fleming __u32 n_stats; /* number of u64's from ETHTOOL_GSTATS */ 73*5f184715SAndy Fleming __u32 testinfo_len; 74*5f184715SAndy Fleming __u32 eedump_len; /* Size of data from ETHTOOL_GEEPROM (bytes) */ 75*5f184715SAndy Fleming __u32 regdump_len; /* Size of data from ETHTOOL_GREGS (bytes) */ 76*5f184715SAndy Fleming }; 77*5f184715SAndy Fleming 78*5f184715SAndy Fleming #define SOPASS_MAX 6 79*5f184715SAndy Fleming /* wake-on-lan settings */ 80*5f184715SAndy Fleming struct ethtool_wolinfo { 81*5f184715SAndy Fleming __u32 cmd; 82*5f184715SAndy Fleming __u32 supported; 83*5f184715SAndy Fleming __u32 wolopts; 84*5f184715SAndy Fleming __u8 sopass[SOPASS_MAX]; /* SecureOn(tm) password */ 85*5f184715SAndy Fleming }; 86*5f184715SAndy Fleming 87*5f184715SAndy Fleming /* for passing single values */ 88*5f184715SAndy Fleming struct ethtool_value { 89*5f184715SAndy Fleming __u32 cmd; 90*5f184715SAndy Fleming __u32 data; 91*5f184715SAndy Fleming }; 92*5f184715SAndy Fleming 93*5f184715SAndy Fleming /* for passing big chunks of data */ 94*5f184715SAndy Fleming struct ethtool_regs { 95*5f184715SAndy Fleming __u32 cmd; 96*5f184715SAndy Fleming __u32 version; /* driver-specific, indicates different chips/revs */ 97*5f184715SAndy Fleming __u32 len; /* bytes */ 98*5f184715SAndy Fleming __u8 data[0]; 99*5f184715SAndy Fleming }; 100*5f184715SAndy Fleming 101*5f184715SAndy Fleming /* for passing EEPROM chunks */ 102*5f184715SAndy Fleming struct ethtool_eeprom { 103*5f184715SAndy Fleming __u32 cmd; 104*5f184715SAndy Fleming __u32 magic; 105*5f184715SAndy Fleming __u32 offset; /* in bytes */ 106*5f184715SAndy Fleming __u32 len; /* in bytes */ 107*5f184715SAndy Fleming __u8 data[0]; 108*5f184715SAndy Fleming }; 109*5f184715SAndy Fleming 110*5f184715SAndy Fleming /* for configuring coalescing parameters of chip */ 111*5f184715SAndy Fleming struct ethtool_coalesce { 112*5f184715SAndy Fleming __u32 cmd; /* ETHTOOL_{G,S}COALESCE */ 113*5f184715SAndy Fleming 114*5f184715SAndy Fleming /* How many usecs to delay an RX interrupt after 115*5f184715SAndy Fleming * a packet arrives. If 0, only rx_max_coalesced_frames 116*5f184715SAndy Fleming * is used. 117*5f184715SAndy Fleming */ 118*5f184715SAndy Fleming __u32 rx_coalesce_usecs; 119*5f184715SAndy Fleming 120*5f184715SAndy Fleming /* How many packets to delay an RX interrupt after 121*5f184715SAndy Fleming * a packet arrives. If 0, only rx_coalesce_usecs is 122*5f184715SAndy Fleming * used. It is illegal to set both usecs and max frames 123*5f184715SAndy Fleming * to zero as this would cause RX interrupts to never be 124*5f184715SAndy Fleming * generated. 125*5f184715SAndy Fleming */ 126*5f184715SAndy Fleming __u32 rx_max_coalesced_frames; 127*5f184715SAndy Fleming 128*5f184715SAndy Fleming /* Same as above two parameters, except that these values 129*5f184715SAndy Fleming * apply while an IRQ is being serviced by the host. Not 130*5f184715SAndy Fleming * all cards support this feature and the values are ignored 131*5f184715SAndy Fleming * in that case. 132*5f184715SAndy Fleming */ 133*5f184715SAndy Fleming __u32 rx_coalesce_usecs_irq; 134*5f184715SAndy Fleming __u32 rx_max_coalesced_frames_irq; 135*5f184715SAndy Fleming 136*5f184715SAndy Fleming /* How many usecs to delay a TX interrupt after 137*5f184715SAndy Fleming * a packet is sent. If 0, only tx_max_coalesced_frames 138*5f184715SAndy Fleming * is used. 139*5f184715SAndy Fleming */ 140*5f184715SAndy Fleming __u32 tx_coalesce_usecs; 141*5f184715SAndy Fleming 142*5f184715SAndy Fleming /* How many packets to delay a TX interrupt after 143*5f184715SAndy Fleming * a packet is sent. If 0, only tx_coalesce_usecs is 144*5f184715SAndy Fleming * used. It is illegal to set both usecs and max frames 145*5f184715SAndy Fleming * to zero as this would cause TX interrupts to never be 146*5f184715SAndy Fleming * generated. 147*5f184715SAndy Fleming */ 148*5f184715SAndy Fleming __u32 tx_max_coalesced_frames; 149*5f184715SAndy Fleming 150*5f184715SAndy Fleming /* Same as above two parameters, except that these values 151*5f184715SAndy Fleming * apply while an IRQ is being serviced by the host. Not 152*5f184715SAndy Fleming * all cards support this feature and the values are ignored 153*5f184715SAndy Fleming * in that case. 154*5f184715SAndy Fleming */ 155*5f184715SAndy Fleming __u32 tx_coalesce_usecs_irq; 156*5f184715SAndy Fleming __u32 tx_max_coalesced_frames_irq; 157*5f184715SAndy Fleming 158*5f184715SAndy Fleming /* How many usecs to delay in-memory statistics 159*5f184715SAndy Fleming * block updates. Some drivers do not have an in-memory 160*5f184715SAndy Fleming * statistic block, and in such cases this value is ignored. 161*5f184715SAndy Fleming * This value must not be zero. 162*5f184715SAndy Fleming */ 163*5f184715SAndy Fleming __u32 stats_block_coalesce_usecs; 164*5f184715SAndy Fleming 165*5f184715SAndy Fleming /* Adaptive RX/TX coalescing is an algorithm implemented by 166*5f184715SAndy Fleming * some drivers to improve latency under low packet rates and 167*5f184715SAndy Fleming * improve throughput under high packet rates. Some drivers 168*5f184715SAndy Fleming * only implement one of RX or TX adaptive coalescing. Anything 169*5f184715SAndy Fleming * not implemented by the driver causes these values to be 170*5f184715SAndy Fleming * silently ignored. 171*5f184715SAndy Fleming */ 172*5f184715SAndy Fleming __u32 use_adaptive_rx_coalesce; 173*5f184715SAndy Fleming __u32 use_adaptive_tx_coalesce; 174*5f184715SAndy Fleming 175*5f184715SAndy Fleming /* When the packet rate (measured in packets per second) 176*5f184715SAndy Fleming * is below pkt_rate_low, the {rx,tx}_*_low parameters are 177*5f184715SAndy Fleming * used. 178*5f184715SAndy Fleming */ 179*5f184715SAndy Fleming __u32 pkt_rate_low; 180*5f184715SAndy Fleming __u32 rx_coalesce_usecs_low; 181*5f184715SAndy Fleming __u32 rx_max_coalesced_frames_low; 182*5f184715SAndy Fleming __u32 tx_coalesce_usecs_low; 183*5f184715SAndy Fleming __u32 tx_max_coalesced_frames_low; 184*5f184715SAndy Fleming 185*5f184715SAndy Fleming /* When the packet rate is below pkt_rate_high but above 186*5f184715SAndy Fleming * pkt_rate_low (both measured in packets per second) the 187*5f184715SAndy Fleming * normal {rx,tx}_* coalescing parameters are used. 188*5f184715SAndy Fleming */ 189*5f184715SAndy Fleming 190*5f184715SAndy Fleming /* When the packet rate is (measured in packets per second) 191*5f184715SAndy Fleming * is above pkt_rate_high, the {rx,tx}_*_high parameters are 192*5f184715SAndy Fleming * used. 193*5f184715SAndy Fleming */ 194*5f184715SAndy Fleming __u32 pkt_rate_high; 195*5f184715SAndy Fleming __u32 rx_coalesce_usecs_high; 196*5f184715SAndy Fleming __u32 rx_max_coalesced_frames_high; 197*5f184715SAndy Fleming __u32 tx_coalesce_usecs_high; 198*5f184715SAndy Fleming __u32 tx_max_coalesced_frames_high; 199*5f184715SAndy Fleming 200*5f184715SAndy Fleming /* How often to do adaptive coalescing packet rate sampling, 201*5f184715SAndy Fleming * measured in seconds. Must not be zero. 202*5f184715SAndy Fleming */ 203*5f184715SAndy Fleming __u32 rate_sample_interval; 204*5f184715SAndy Fleming }; 205*5f184715SAndy Fleming 206*5f184715SAndy Fleming /* for configuring RX/TX ring parameters */ 207*5f184715SAndy Fleming struct ethtool_ringparam { 208*5f184715SAndy Fleming __u32 cmd; /* ETHTOOL_{G,S}RINGPARAM */ 209*5f184715SAndy Fleming 210*5f184715SAndy Fleming /* Read only attributes. These indicate the maximum number 211*5f184715SAndy Fleming * of pending RX/TX ring entries the driver will allow the 212*5f184715SAndy Fleming * user to set. 213*5f184715SAndy Fleming */ 214*5f184715SAndy Fleming __u32 rx_max_pending; 215*5f184715SAndy Fleming __u32 rx_mini_max_pending; 216*5f184715SAndy Fleming __u32 rx_jumbo_max_pending; 217*5f184715SAndy Fleming __u32 tx_max_pending; 218*5f184715SAndy Fleming 219*5f184715SAndy Fleming /* Values changeable by the user. The valid values are 220*5f184715SAndy Fleming * in the range 1 to the "*_max_pending" counterpart above. 221*5f184715SAndy Fleming */ 222*5f184715SAndy Fleming __u32 rx_pending; 223*5f184715SAndy Fleming __u32 rx_mini_pending; 224*5f184715SAndy Fleming __u32 rx_jumbo_pending; 225*5f184715SAndy Fleming __u32 tx_pending; 226*5f184715SAndy Fleming }; 227*5f184715SAndy Fleming 228*5f184715SAndy Fleming /* for configuring link flow control parameters */ 229*5f184715SAndy Fleming struct ethtool_pauseparam { 230*5f184715SAndy Fleming __u32 cmd; /* ETHTOOL_{G,S}PAUSEPARAM */ 231*5f184715SAndy Fleming 232*5f184715SAndy Fleming /* If the link is being auto-negotiated (via ethtool_cmd.autoneg 233*5f184715SAndy Fleming * being true) the user may set 'autonet' here non-zero to have the 234*5f184715SAndy Fleming * pause parameters be auto-negotiated too. In such a case, the 235*5f184715SAndy Fleming * {rx,tx}_pause values below determine what capabilities are 236*5f184715SAndy Fleming * advertised. 237*5f184715SAndy Fleming * 238*5f184715SAndy Fleming * If 'autoneg' is zero or the link is not being auto-negotiated, 239*5f184715SAndy Fleming * then {rx,tx}_pause force the driver to use/not-use pause 240*5f184715SAndy Fleming * flow control. 241*5f184715SAndy Fleming */ 242*5f184715SAndy Fleming __u32 autoneg; 243*5f184715SAndy Fleming __u32 rx_pause; 244*5f184715SAndy Fleming __u32 tx_pause; 245*5f184715SAndy Fleming }; 246*5f184715SAndy Fleming 247*5f184715SAndy Fleming #define ETH_GSTRING_LEN 32 248*5f184715SAndy Fleming enum ethtool_stringset { 249*5f184715SAndy Fleming ETH_SS_TEST = 0, 250*5f184715SAndy Fleming ETH_SS_STATS, 251*5f184715SAndy Fleming ETH_SS_PRIV_FLAGS, 252*5f184715SAndy Fleming ETH_SS_NTUPLE_FILTERS, 253*5f184715SAndy Fleming ETH_SS_FEATURES, 254*5f184715SAndy Fleming }; 255*5f184715SAndy Fleming 256*5f184715SAndy Fleming /* for passing string sets for data tagging */ 257*5f184715SAndy Fleming struct ethtool_gstrings { 258*5f184715SAndy Fleming __u32 cmd; /* ETHTOOL_GSTRINGS */ 259*5f184715SAndy Fleming __u32 string_set; /* string set id e.c. ETH_SS_TEST, etc*/ 260*5f184715SAndy Fleming __u32 len; /* number of strings in the string set */ 261*5f184715SAndy Fleming __u8 data[0]; 262*5f184715SAndy Fleming }; 263*5f184715SAndy Fleming 264*5f184715SAndy Fleming struct ethtool_sset_info { 265*5f184715SAndy Fleming __u32 cmd; /* ETHTOOL_GSSET_INFO */ 266*5f184715SAndy Fleming __u32 reserved; 267*5f184715SAndy Fleming __u64 sset_mask; /* input: each bit selects an sset to query */ 268*5f184715SAndy Fleming /* output: each bit a returned sset */ 269*5f184715SAndy Fleming __u32 data[0]; /* ETH_SS_xxx count, in order, based on bits 270*5f184715SAndy Fleming in sset_mask. One bit implies one 271*5f184715SAndy Fleming __u32, two bits implies two 272*5f184715SAndy Fleming __u32's, etc. */ 273*5f184715SAndy Fleming }; 274*5f184715SAndy Fleming 275*5f184715SAndy Fleming enum ethtool_test_flags { 276*5f184715SAndy Fleming ETH_TEST_FL_OFFLINE = (1 << 0), /* online / offline */ 277*5f184715SAndy Fleming ETH_TEST_FL_FAILED = (1 << 1), /* test passed / failed */ 278*5f184715SAndy Fleming }; 279*5f184715SAndy Fleming 280*5f184715SAndy Fleming /* for requesting NIC test and getting results*/ 281*5f184715SAndy Fleming struct ethtool_test { 282*5f184715SAndy Fleming __u32 cmd; /* ETHTOOL_TEST */ 283*5f184715SAndy Fleming __u32 flags; /* ETH_TEST_FL_xxx */ 284*5f184715SAndy Fleming __u32 reserved; 285*5f184715SAndy Fleming __u32 len; /* result length, in number of u64 elements */ 286*5f184715SAndy Fleming __u64 data[0]; 287*5f184715SAndy Fleming }; 288*5f184715SAndy Fleming 289*5f184715SAndy Fleming /* for dumping NIC-specific statistics */ 290*5f184715SAndy Fleming struct ethtool_stats { 291*5f184715SAndy Fleming __u32 cmd; /* ETHTOOL_GSTATS */ 292*5f184715SAndy Fleming __u32 n_stats; /* number of u64's being returned */ 293*5f184715SAndy Fleming __u64 data[0]; 294*5f184715SAndy Fleming }; 295*5f184715SAndy Fleming 296*5f184715SAndy Fleming struct ethtool_perm_addr { 297*5f184715SAndy Fleming __u32 cmd; /* ETHTOOL_GPERMADDR */ 298*5f184715SAndy Fleming __u32 size; 299*5f184715SAndy Fleming __u8 data[0]; 300*5f184715SAndy Fleming }; 301*5f184715SAndy Fleming 302*5f184715SAndy Fleming /* boolean flags controlling per-interface behavior characteristics. 303*5f184715SAndy Fleming * When reading, the flag indicates whether or not a certain behavior 304*5f184715SAndy Fleming * is enabled/present. When writing, the flag indicates whether 305*5f184715SAndy Fleming * or not the driver should turn on (set) or off (clear) a behavior. 306*5f184715SAndy Fleming * 307*5f184715SAndy Fleming * Some behaviors may read-only (unconditionally absent or present). 308*5f184715SAndy Fleming * If such is the case, return EINVAL in the set-flags operation if the 309*5f184715SAndy Fleming * flag differs from the read-only value. 310*5f184715SAndy Fleming */ 311*5f184715SAndy Fleming enum ethtool_flags { 312*5f184715SAndy Fleming ETH_FLAG_TXVLAN = (1 << 7), /* TX VLAN offload enabled */ 313*5f184715SAndy Fleming ETH_FLAG_RXVLAN = (1 << 8), /* RX VLAN offload enabled */ 314*5f184715SAndy Fleming ETH_FLAG_LRO = (1 << 15), /* LRO is enabled */ 315*5f184715SAndy Fleming ETH_FLAG_NTUPLE = (1 << 27), /* N-tuple filters enabled */ 316*5f184715SAndy Fleming ETH_FLAG_RXHASH = (1 << 28), 317*5f184715SAndy Fleming }; 318*5f184715SAndy Fleming 319*5f184715SAndy Fleming /* The following structures are for supporting RX network flow 320*5f184715SAndy Fleming * classification and RX n-tuple configuration. Note, all multibyte 321*5f184715SAndy Fleming * fields, e.g., ip4src, ip4dst, psrc, pdst, spi, etc. are expected to 322*5f184715SAndy Fleming * be in network byte order. 323*5f184715SAndy Fleming */ 324*5f184715SAndy Fleming 325*5f184715SAndy Fleming /** 326*5f184715SAndy Fleming * struct ethtool_tcpip4_spec - flow specification for TCP/IPv4 etc. 327*5f184715SAndy Fleming * @ip4src: Source host 328*5f184715SAndy Fleming * @ip4dst: Destination host 329*5f184715SAndy Fleming * @psrc: Source port 330*5f184715SAndy Fleming * @pdst: Destination port 331*5f184715SAndy Fleming * @tos: Type-of-service 332*5f184715SAndy Fleming * 333*5f184715SAndy Fleming * This can be used to specify a TCP/IPv4, UDP/IPv4 or SCTP/IPv4 flow. 334*5f184715SAndy Fleming */ 335*5f184715SAndy Fleming struct ethtool_tcpip4_spec { 336*5f184715SAndy Fleming __be32 ip4src; 337*5f184715SAndy Fleming __be32 ip4dst; 338*5f184715SAndy Fleming __be16 psrc; 339*5f184715SAndy Fleming __be16 pdst; 340*5f184715SAndy Fleming __u8 tos; 341*5f184715SAndy Fleming }; 342*5f184715SAndy Fleming 343*5f184715SAndy Fleming /** 344*5f184715SAndy Fleming * struct ethtool_ah_espip4_spec - flow specification for IPsec/IPv4 345*5f184715SAndy Fleming * @ip4src: Source host 346*5f184715SAndy Fleming * @ip4dst: Destination host 347*5f184715SAndy Fleming * @spi: Security parameters index 348*5f184715SAndy Fleming * @tos: Type-of-service 349*5f184715SAndy Fleming * 350*5f184715SAndy Fleming * This can be used to specify an IPsec transport or tunnel over IPv4. 351*5f184715SAndy Fleming */ 352*5f184715SAndy Fleming struct ethtool_ah_espip4_spec { 353*5f184715SAndy Fleming __be32 ip4src; 354*5f184715SAndy Fleming __be32 ip4dst; 355*5f184715SAndy Fleming __be32 spi; 356*5f184715SAndy Fleming __u8 tos; 357*5f184715SAndy Fleming }; 358*5f184715SAndy Fleming 359*5f184715SAndy Fleming #define ETH_RX_NFC_IP4 1 360*5f184715SAndy Fleming 361*5f184715SAndy Fleming /** 362*5f184715SAndy Fleming * struct ethtool_usrip4_spec - general flow specification for IPv4 363*5f184715SAndy Fleming * @ip4src: Source host 364*5f184715SAndy Fleming * @ip4dst: Destination host 365*5f184715SAndy Fleming * @l4_4_bytes: First 4 bytes of transport (layer 4) header 366*5f184715SAndy Fleming * @tos: Type-of-service 367*5f184715SAndy Fleming * @ip_ver: Value must be %ETH_RX_NFC_IP4; mask must be 0 368*5f184715SAndy Fleming * @proto: Transport protocol number; mask must be 0 369*5f184715SAndy Fleming */ 370*5f184715SAndy Fleming struct ethtool_usrip4_spec { 371*5f184715SAndy Fleming __be32 ip4src; 372*5f184715SAndy Fleming __be32 ip4dst; 373*5f184715SAndy Fleming __be32 l4_4_bytes; 374*5f184715SAndy Fleming __u8 tos; 375*5f184715SAndy Fleming __u8 ip_ver; 376*5f184715SAndy Fleming __u8 proto; 377*5f184715SAndy Fleming }; 378*5f184715SAndy Fleming 379*5f184715SAndy Fleming 380*5f184715SAndy Fleming /** 381*5f184715SAndy Fleming * struct ethtool_rxfh_indir - command to get or set RX flow hash indirection 382*5f184715SAndy Fleming * @cmd: Specific command number - %ETHTOOL_GRXFHINDIR or %ETHTOOL_SRXFHINDIR 383*5f184715SAndy Fleming * @size: On entry, the array size of the user buffer. On return from 384*5f184715SAndy Fleming * %ETHTOOL_GRXFHINDIR, the array size of the hardware indirection table. 385*5f184715SAndy Fleming * @ring_index: RX ring/queue index for each hash value 386*5f184715SAndy Fleming */ 387*5f184715SAndy Fleming struct ethtool_rxfh_indir { 388*5f184715SAndy Fleming __u32 cmd; 389*5f184715SAndy Fleming __u32 size; 390*5f184715SAndy Fleming __u32 ring_index[0]; 391*5f184715SAndy Fleming }; 392*5f184715SAndy Fleming 393*5f184715SAndy Fleming #define ETHTOOL_FLASH_MAX_FILENAME 128 394*5f184715SAndy Fleming enum ethtool_flash_op_type { 395*5f184715SAndy Fleming ETHTOOL_FLASH_ALL_REGIONS = 0, 396*5f184715SAndy Fleming }; 397*5f184715SAndy Fleming 398*5f184715SAndy Fleming /* for passing firmware flashing related parameters */ 399*5f184715SAndy Fleming struct ethtool_flash { 400*5f184715SAndy Fleming __u32 cmd; 401*5f184715SAndy Fleming __u32 region; 402*5f184715SAndy Fleming char data[ETHTOOL_FLASH_MAX_FILENAME]; 403*5f184715SAndy Fleming }; 404*5f184715SAndy Fleming 405*5f184715SAndy Fleming /* for returning and changing feature sets */ 406*5f184715SAndy Fleming 407*5f184715SAndy Fleming /** 408*5f184715SAndy Fleming * struct ethtool_get_features_block - block with state of 32 features 409*5f184715SAndy Fleming * @available: mask of changeable features 410*5f184715SAndy Fleming * @requested: mask of features requested to be enabled if possible 411*5f184715SAndy Fleming * @active: mask of currently enabled features 412*5f184715SAndy Fleming * @never_changed: mask of features not changeable for any device 413*5f184715SAndy Fleming */ 414*5f184715SAndy Fleming struct ethtool_get_features_block { 415*5f184715SAndy Fleming __u32 available; 416*5f184715SAndy Fleming __u32 requested; 417*5f184715SAndy Fleming __u32 active; 418*5f184715SAndy Fleming __u32 never_changed; 419*5f184715SAndy Fleming }; 420*5f184715SAndy Fleming 421*5f184715SAndy Fleming /** 422*5f184715SAndy Fleming * struct ethtool_gfeatures - command to get state of device's features 423*5f184715SAndy Fleming * @cmd: command number = %ETHTOOL_GFEATURES 424*5f184715SAndy Fleming * @size: in: number of elements in the features[] array; 425*5f184715SAndy Fleming * out: number of elements in features[] needed to hold all features 426*5f184715SAndy Fleming * @features: state of features 427*5f184715SAndy Fleming */ 428*5f184715SAndy Fleming struct ethtool_gfeatures { 429*5f184715SAndy Fleming __u32 cmd; 430*5f184715SAndy Fleming __u32 size; 431*5f184715SAndy Fleming struct ethtool_get_features_block features[0]; 432*5f184715SAndy Fleming }; 433*5f184715SAndy Fleming 434*5f184715SAndy Fleming /** 435*5f184715SAndy Fleming * struct ethtool_set_features_block - block with request for 32 features 436*5f184715SAndy Fleming * @valid: mask of features to be changed 437*5f184715SAndy Fleming * @requested: values of features to be changed 438*5f184715SAndy Fleming */ 439*5f184715SAndy Fleming struct ethtool_set_features_block { 440*5f184715SAndy Fleming __u32 valid; 441*5f184715SAndy Fleming __u32 requested; 442*5f184715SAndy Fleming }; 443*5f184715SAndy Fleming 444*5f184715SAndy Fleming /** 445*5f184715SAndy Fleming * struct ethtool_sfeatures - command to request change in device's features 446*5f184715SAndy Fleming * @cmd: command number = %ETHTOOL_SFEATURES 447*5f184715SAndy Fleming * @size: array size of the features[] array 448*5f184715SAndy Fleming * @features: feature change masks 449*5f184715SAndy Fleming */ 450*5f184715SAndy Fleming struct ethtool_sfeatures { 451*5f184715SAndy Fleming __u32 cmd; 452*5f184715SAndy Fleming __u32 size; 453*5f184715SAndy Fleming struct ethtool_set_features_block features[0]; 454*5f184715SAndy Fleming }; 455*5f184715SAndy Fleming 456*5f184715SAndy Fleming /* 457*5f184715SAndy Fleming * %ETHTOOL_SFEATURES changes features present in features[].valid to the 458*5f184715SAndy Fleming * values of corresponding bits in features[].requested. Bits in .requested 459*5f184715SAndy Fleming * not set in .valid or not changeable are ignored. 460*5f184715SAndy Fleming * 461*5f184715SAndy Fleming * Returns %EINVAL when .valid contains undefined or never-changable bits 462*5f184715SAndy Fleming * or size is not equal to required number of features words (32-bit blocks). 463*5f184715SAndy Fleming * Returns >= 0 if request was completed; bits set in the value mean: 464*5f184715SAndy Fleming * %ETHTOOL_F_UNSUPPORTED - there were bits set in .valid that are not 465*5f184715SAndy Fleming * changeable (not present in %ETHTOOL_GFEATURES' features[].available) 466*5f184715SAndy Fleming * those bits were ignored. 467*5f184715SAndy Fleming * %ETHTOOL_F_WISH - some or all changes requested were recorded but the 468*5f184715SAndy Fleming * resulting state of bits masked by .valid is not equal to .requested. 469*5f184715SAndy Fleming * Probably there are other device-specific constraints on some features 470*5f184715SAndy Fleming * in the set. When %ETHTOOL_F_UNSUPPORTED is set, .valid is considered 471*5f184715SAndy Fleming * here as though ignored bits were cleared. 472*5f184715SAndy Fleming * %ETHTOOL_F_COMPAT - some or all changes requested were made by calling 473*5f184715SAndy Fleming * compatibility functions. Requested offload state cannot be properly 474*5f184715SAndy Fleming * managed by kernel. 475*5f184715SAndy Fleming * 476*5f184715SAndy Fleming * Meaning of bits in the masks are obtained by %ETHTOOL_GSSET_INFO (number of 477*5f184715SAndy Fleming * bits in the arrays - always multiple of 32) and %ETHTOOL_GSTRINGS commands 478*5f184715SAndy Fleming * for ETH_SS_FEATURES string set. First entry in the table corresponds to least 479*5f184715SAndy Fleming * significant bit in features[0] fields. Empty strings mark undefined features. 480*5f184715SAndy Fleming */ 481*5f184715SAndy Fleming enum ethtool_sfeatures_retval_bits { 482*5f184715SAndy Fleming ETHTOOL_F_UNSUPPORTED__BIT, 483*5f184715SAndy Fleming ETHTOOL_F_WISH__BIT, 484*5f184715SAndy Fleming ETHTOOL_F_COMPAT__BIT, 485*5f184715SAndy Fleming }; 486*5f184715SAndy Fleming 487*5f184715SAndy Fleming #define ETHTOOL_F_UNSUPPORTED (1 << ETHTOOL_F_UNSUPPORTED__BIT) 488*5f184715SAndy Fleming #define ETHTOOL_F_WISH (1 << ETHTOOL_F_WISH__BIT) 489*5f184715SAndy Fleming #define ETHTOOL_F_COMPAT (1 << ETHTOOL_F_COMPAT__BIT) 490*5f184715SAndy Fleming 491*5f184715SAndy Fleming /* CMDs currently supported */ 492*5f184715SAndy Fleming #define ETHTOOL_GSET 0x00000001 /* Get settings. */ 493*5f184715SAndy Fleming #define ETHTOOL_SSET 0x00000002 /* Set settings. */ 494*5f184715SAndy Fleming #define ETHTOOL_GDRVINFO 0x00000003 /* Get driver info. */ 495*5f184715SAndy Fleming #define ETHTOOL_GREGS 0x00000004 /* Get NIC registers. */ 496*5f184715SAndy Fleming #define ETHTOOL_GWOL 0x00000005 /* Get wake-on-lan options. */ 497*5f184715SAndy Fleming #define ETHTOOL_SWOL 0x00000006 /* Set wake-on-lan options. */ 498*5f184715SAndy Fleming #define ETHTOOL_GMSGLVL 0x00000007 /* Get driver message level */ 499*5f184715SAndy Fleming #define ETHTOOL_SMSGLVL 0x00000008 /* Set driver msg level. */ 500*5f184715SAndy Fleming #define ETHTOOL_NWAY_RST 0x00000009 /* Restart autonegotiation. */ 501*5f184715SAndy Fleming /* Get link status for host, i.e. whether the interface *and* the 502*5f184715SAndy Fleming * physical port (if there is one) are up (ethtool_value). */ 503*5f184715SAndy Fleming #define ETHTOOL_GLINK 0x0000000a 504*5f184715SAndy Fleming #define ETHTOOL_GEEPROM 0x0000000b /* Get EEPROM data */ 505*5f184715SAndy Fleming #define ETHTOOL_SEEPROM 0x0000000c /* Set EEPROM data. */ 506*5f184715SAndy Fleming #define ETHTOOL_GCOALESCE 0x0000000e /* Get coalesce config */ 507*5f184715SAndy Fleming #define ETHTOOL_SCOALESCE 0x0000000f /* Set coalesce config. */ 508*5f184715SAndy Fleming #define ETHTOOL_GRINGPARAM 0x00000010 /* Get ring parameters */ 509*5f184715SAndy Fleming #define ETHTOOL_SRINGPARAM 0x00000011 /* Set ring parameters. */ 510*5f184715SAndy Fleming #define ETHTOOL_GPAUSEPARAM 0x00000012 /* Get pause parameters */ 511*5f184715SAndy Fleming #define ETHTOOL_SPAUSEPARAM 0x00000013 /* Set pause parameters. */ 512*5f184715SAndy Fleming #define ETHTOOL_GRXCSUM 0x00000014 /* Get RX hw csum enable (ethtool_value) */ 513*5f184715SAndy Fleming #define ETHTOOL_SRXCSUM 0x00000015 /* Set RX hw csum enable (ethtool_value) */ 514*5f184715SAndy Fleming #define ETHTOOL_GTXCSUM 0x00000016 /* Get TX hw csum enable (ethtool_value) */ 515*5f184715SAndy Fleming #define ETHTOOL_STXCSUM 0x00000017 /* Set TX hw csum enable (ethtool_value) */ 516*5f184715SAndy Fleming #define ETHTOOL_GSG 0x00000018 /* Get scatter-gather enable 517*5f184715SAndy Fleming * (ethtool_value) */ 518*5f184715SAndy Fleming #define ETHTOOL_SSG 0x00000019 /* Set scatter-gather enable 519*5f184715SAndy Fleming * (ethtool_value). */ 520*5f184715SAndy Fleming #define ETHTOOL_TEST 0x0000001a /* execute NIC self-test. */ 521*5f184715SAndy Fleming #define ETHTOOL_GSTRINGS 0x0000001b /* get specified string set */ 522*5f184715SAndy Fleming #define ETHTOOL_PHYS_ID 0x0000001c /* identify the NIC */ 523*5f184715SAndy Fleming #define ETHTOOL_GSTATS 0x0000001d /* get NIC-specific statistics */ 524*5f184715SAndy Fleming #define ETHTOOL_GTSO 0x0000001e /* Get TSO enable (ethtool_value) */ 525*5f184715SAndy Fleming #define ETHTOOL_STSO 0x0000001f /* Set TSO enable (ethtool_value) */ 526*5f184715SAndy Fleming #define ETHTOOL_GPERMADDR 0x00000020 /* Get permanent hardware address */ 527*5f184715SAndy Fleming #define ETHTOOL_GUFO 0x00000021 /* Get UFO enable (ethtool_value) */ 528*5f184715SAndy Fleming #define ETHTOOL_SUFO 0x00000022 /* Set UFO enable (ethtool_value) */ 529*5f184715SAndy Fleming #define ETHTOOL_GGSO 0x00000023 /* Get GSO enable (ethtool_value) */ 530*5f184715SAndy Fleming #define ETHTOOL_SGSO 0x00000024 /* Set GSO enable (ethtool_value) */ 531*5f184715SAndy Fleming #define ETHTOOL_GFLAGS 0x00000025 /* Get flags bitmap(ethtool_value) */ 532*5f184715SAndy Fleming #define ETHTOOL_SFLAGS 0x00000026 /* Set flags bitmap(ethtool_value) */ 533*5f184715SAndy Fleming #define ETHTOOL_GPFLAGS 0x00000027 /* Get driver-private flags bitmap */ 534*5f184715SAndy Fleming #define ETHTOOL_SPFLAGS 0x00000028 /* Set driver-private flags bitmap */ 535*5f184715SAndy Fleming 536*5f184715SAndy Fleming #define ETHTOOL_GRXFH 0x00000029 /* Get RX flow hash configuration */ 537*5f184715SAndy Fleming #define ETHTOOL_SRXFH 0x0000002a /* Set RX flow hash configuration */ 538*5f184715SAndy Fleming #define ETHTOOL_GGRO 0x0000002b /* Get GRO enable (ethtool_value) */ 539*5f184715SAndy Fleming #define ETHTOOL_SGRO 0x0000002c /* Set GRO enable (ethtool_value) */ 540*5f184715SAndy Fleming #define ETHTOOL_GRXRINGS 0x0000002d /* Get RX rings available for LB */ 541*5f184715SAndy Fleming #define ETHTOOL_GRXCLSRLCNT 0x0000002e /* Get RX class rule count */ 542*5f184715SAndy Fleming #define ETHTOOL_GRXCLSRULE 0x0000002f /* Get RX classification rule */ 543*5f184715SAndy Fleming #define ETHTOOL_GRXCLSRLALL 0x00000030 /* Get all RX classification rule */ 544*5f184715SAndy Fleming #define ETHTOOL_SRXCLSRLDEL 0x00000031 /* Delete RX classification rule */ 545*5f184715SAndy Fleming #define ETHTOOL_SRXCLSRLINS 0x00000032 /* Insert RX classification rule */ 546*5f184715SAndy Fleming #define ETHTOOL_FLASHDEV 0x00000033 /* Flash firmware to device */ 547*5f184715SAndy Fleming #define ETHTOOL_RESET 0x00000034 /* Reset hardware */ 548*5f184715SAndy Fleming #define ETHTOOL_SRXNTUPLE 0x00000035 /* Add an n-tuple filter to device */ 549*5f184715SAndy Fleming #define ETHTOOL_GRXNTUPLE 0x00000036 /* Get n-tuple filters from device */ 550*5f184715SAndy Fleming #define ETHTOOL_GSSET_INFO 0x00000037 /* Get string set info */ 551*5f184715SAndy Fleming #define ETHTOOL_GRXFHINDIR 0x00000038 /* Get RX flow hash indir'n table */ 552*5f184715SAndy Fleming #define ETHTOOL_SRXFHINDIR 0x00000039 /* Set RX flow hash indir'n table */ 553*5f184715SAndy Fleming 554*5f184715SAndy Fleming #define ETHTOOL_GFEATURES 0x0000003a /* Get device offload settings */ 555*5f184715SAndy Fleming #define ETHTOOL_SFEATURES 0x0000003b /* Change device offload settings */ 556*5f184715SAndy Fleming 557*5f184715SAndy Fleming /* compatibility with older code */ 558*5f184715SAndy Fleming #define SPARC_ETH_GSET ETHTOOL_GSET 559*5f184715SAndy Fleming #define SPARC_ETH_SSET ETHTOOL_SSET 560*5f184715SAndy Fleming 561*5f184715SAndy Fleming /* Indicates what features are supported by the interface. */ 562*5f184715SAndy Fleming #define SUPPORTED_10baseT_Half (1 << 0) 563*5f184715SAndy Fleming #define SUPPORTED_10baseT_Full (1 << 1) 564*5f184715SAndy Fleming #define SUPPORTED_100baseT_Half (1 << 2) 565*5f184715SAndy Fleming #define SUPPORTED_100baseT_Full (1 << 3) 566*5f184715SAndy Fleming #define SUPPORTED_1000baseT_Half (1 << 4) 567*5f184715SAndy Fleming #define SUPPORTED_1000baseT_Full (1 << 5) 568*5f184715SAndy Fleming #define SUPPORTED_Autoneg (1 << 6) 569*5f184715SAndy Fleming #define SUPPORTED_TP (1 << 7) 570*5f184715SAndy Fleming #define SUPPORTED_AUI (1 << 8) 571*5f184715SAndy Fleming #define SUPPORTED_MII (1 << 9) 572*5f184715SAndy Fleming #define SUPPORTED_FIBRE (1 << 10) 573*5f184715SAndy Fleming #define SUPPORTED_BNC (1 << 11) 574*5f184715SAndy Fleming #define SUPPORTED_10000baseT_Full (1 << 12) 575*5f184715SAndy Fleming #define SUPPORTED_Pause (1 << 13) 576*5f184715SAndy Fleming #define SUPPORTED_Asym_Pause (1 << 14) 577*5f184715SAndy Fleming #define SUPPORTED_2500baseX_Full (1 << 15) 578*5f184715SAndy Fleming #define SUPPORTED_Backplane (1 << 16) 579*5f184715SAndy Fleming #define SUPPORTED_1000baseKX_Full (1 << 17) 580*5f184715SAndy Fleming #define SUPPORTED_10000baseKX4_Full (1 << 18) 581*5f184715SAndy Fleming #define SUPPORTED_10000baseKR_Full (1 << 19) 582*5f184715SAndy Fleming #define SUPPORTED_10000baseR_FEC (1 << 20) 583*5f184715SAndy Fleming 584*5f184715SAndy Fleming /* Indicates what features are advertised by the interface. */ 585*5f184715SAndy Fleming #define ADVERTISED_10baseT_Half (1 << 0) 586*5f184715SAndy Fleming #define ADVERTISED_10baseT_Full (1 << 1) 587*5f184715SAndy Fleming #define ADVERTISED_100baseT_Half (1 << 2) 588*5f184715SAndy Fleming #define ADVERTISED_100baseT_Full (1 << 3) 589*5f184715SAndy Fleming #define ADVERTISED_1000baseT_Half (1 << 4) 590*5f184715SAndy Fleming #define ADVERTISED_1000baseT_Full (1 << 5) 591*5f184715SAndy Fleming #define ADVERTISED_Autoneg (1 << 6) 592*5f184715SAndy Fleming #define ADVERTISED_TP (1 << 7) 593*5f184715SAndy Fleming #define ADVERTISED_AUI (1 << 8) 594*5f184715SAndy Fleming #define ADVERTISED_MII (1 << 9) 595*5f184715SAndy Fleming #define ADVERTISED_FIBRE (1 << 10) 596*5f184715SAndy Fleming #define ADVERTISED_BNC (1 << 11) 597*5f184715SAndy Fleming #define ADVERTISED_10000baseT_Full (1 << 12) 598*5f184715SAndy Fleming #define ADVERTISED_Pause (1 << 13) 599*5f184715SAndy Fleming #define ADVERTISED_Asym_Pause (1 << 14) 600*5f184715SAndy Fleming #define ADVERTISED_2500baseX_Full (1 << 15) 601*5f184715SAndy Fleming #define ADVERTISED_Backplane (1 << 16) 602*5f184715SAndy Fleming #define ADVERTISED_1000baseKX_Full (1 << 17) 603*5f184715SAndy Fleming #define ADVERTISED_10000baseKX4_Full (1 << 18) 604*5f184715SAndy Fleming #define ADVERTISED_10000baseKR_Full (1 << 19) 605*5f184715SAndy Fleming #define ADVERTISED_10000baseR_FEC (1 << 20) 606*5f184715SAndy Fleming 607*5f184715SAndy Fleming /* The following are all involved in forcing a particular link 608*5f184715SAndy Fleming * mode for the device for setting things. When getting the 609*5f184715SAndy Fleming * devices settings, these indicate the current mode and whether 610*5f184715SAndy Fleming * it was foced up into this mode or autonegotiated. 611*5f184715SAndy Fleming */ 612*5f184715SAndy Fleming 613*5f184715SAndy Fleming /* The forced speed, 10Mb, 100Mb, gigabit, 2.5Gb, 10GbE. */ 614*5f184715SAndy Fleming #define SPEED_10 10 615*5f184715SAndy Fleming #define SPEED_100 100 616*5f184715SAndy Fleming #define SPEED_1000 1000 617*5f184715SAndy Fleming #define SPEED_2500 2500 618*5f184715SAndy Fleming #define SPEED_10000 10000 619*5f184715SAndy Fleming 620*5f184715SAndy Fleming /* Duplex, half or full. */ 621*5f184715SAndy Fleming #define DUPLEX_HALF 0x00 622*5f184715SAndy Fleming #define DUPLEX_FULL 0x01 623*5f184715SAndy Fleming 624*5f184715SAndy Fleming /* Which connector port. */ 625*5f184715SAndy Fleming #define PORT_TP 0x00 626*5f184715SAndy Fleming #define PORT_AUI 0x01 627*5f184715SAndy Fleming #define PORT_MII 0x02 628*5f184715SAndy Fleming #define PORT_FIBRE 0x03 629*5f184715SAndy Fleming #define PORT_BNC 0x04 630*5f184715SAndy Fleming #define PORT_DA 0x05 631*5f184715SAndy Fleming #define PORT_NONE 0xef 632*5f184715SAndy Fleming #define PORT_OTHER 0xff 633*5f184715SAndy Fleming 634*5f184715SAndy Fleming /* Which transceiver to use. */ 635*5f184715SAndy Fleming #define XCVR_INTERNAL 0x00 636*5f184715SAndy Fleming #define XCVR_EXTERNAL 0x01 637*5f184715SAndy Fleming #define XCVR_DUMMY1 0x02 638*5f184715SAndy Fleming #define XCVR_DUMMY2 0x03 639*5f184715SAndy Fleming #define XCVR_DUMMY3 0x04 640*5f184715SAndy Fleming 641*5f184715SAndy Fleming /* Enable or disable autonegotiation. If this is set to enable, 642*5f184715SAndy Fleming * the forced link modes above are completely ignored. 643*5f184715SAndy Fleming */ 644*5f184715SAndy Fleming #define AUTONEG_DISABLE 0x00 645*5f184715SAndy Fleming #define AUTONEG_ENABLE 0x01 646*5f184715SAndy Fleming 647*5f184715SAndy Fleming /* Mode MDI or MDI-X */ 648*5f184715SAndy Fleming #define ETH_TP_MDI_INVALID 0x00 649*5f184715SAndy Fleming #define ETH_TP_MDI 0x01 650*5f184715SAndy Fleming #define ETH_TP_MDI_X 0x02 651*5f184715SAndy Fleming 652*5f184715SAndy Fleming /* Wake-On-Lan options. */ 653*5f184715SAndy Fleming #define WAKE_PHY (1 << 0) 654*5f184715SAndy Fleming #define WAKE_UCAST (1 << 1) 655*5f184715SAndy Fleming #define WAKE_MCAST (1 << 2) 656*5f184715SAndy Fleming #define WAKE_BCAST (1 << 3) 657*5f184715SAndy Fleming #define WAKE_ARP (1 << 4) 658*5f184715SAndy Fleming #define WAKE_MAGIC (1 << 5) 659*5f184715SAndy Fleming #define WAKE_MAGICSECURE (1 << 6) /* only meaningful if WAKE_MAGIC */ 660*5f184715SAndy Fleming 661*5f184715SAndy Fleming /* L2-L4 network traffic flow types */ 662*5f184715SAndy Fleming #define TCP_V4_FLOW 0x01 /* hash or spec (tcp_ip4_spec) */ 663*5f184715SAndy Fleming #define UDP_V4_FLOW 0x02 /* hash or spec (udp_ip4_spec) */ 664*5f184715SAndy Fleming #define SCTP_V4_FLOW 0x03 /* hash or spec (sctp_ip4_spec) */ 665*5f184715SAndy Fleming #define AH_ESP_V4_FLOW 0x04 /* hash only */ 666*5f184715SAndy Fleming #define TCP_V6_FLOW 0x05 /* hash only */ 667*5f184715SAndy Fleming #define UDP_V6_FLOW 0x06 /* hash only */ 668*5f184715SAndy Fleming #define SCTP_V6_FLOW 0x07 /* hash only */ 669*5f184715SAndy Fleming #define AH_ESP_V6_FLOW 0x08 /* hash only */ 670*5f184715SAndy Fleming #define AH_V4_FLOW 0x09 /* hash or spec (ah_ip4_spec) */ 671*5f184715SAndy Fleming #define ESP_V4_FLOW 0x0a /* hash or spec (esp_ip4_spec) */ 672*5f184715SAndy Fleming #define AH_V6_FLOW 0x0b /* hash only */ 673*5f184715SAndy Fleming #define ESP_V6_FLOW 0x0c /* hash only */ 674*5f184715SAndy Fleming #define IP_USER_FLOW 0x0d /* spec only (usr_ip4_spec) */ 675*5f184715SAndy Fleming #define IPV4_FLOW 0x10 /* hash only */ 676*5f184715SAndy Fleming #define IPV6_FLOW 0x11 /* hash only */ 677*5f184715SAndy Fleming #define ETHER_FLOW 0x12 /* spec only (ether_spec) */ 678*5f184715SAndy Fleming 679*5f184715SAndy Fleming /* L3-L4 network traffic flow hash options */ 680*5f184715SAndy Fleming #define RXH_L2DA (1 << 1) 681*5f184715SAndy Fleming #define RXH_VLAN (1 << 2) 682*5f184715SAndy Fleming #define RXH_L3_PROTO (1 << 3) 683*5f184715SAndy Fleming #define RXH_IP_SRC (1 << 4) 684*5f184715SAndy Fleming #define RXH_IP_DST (1 << 5) 685*5f184715SAndy Fleming #define RXH_L4_B_0_1 (1 << 6) /* src port in case of TCP/UDP/SCTP */ 686*5f184715SAndy Fleming #define RXH_L4_B_2_3 (1 << 7) /* dst port in case of TCP/UDP/SCTP */ 687*5f184715SAndy Fleming #define RXH_DISCARD (1 << 31) 688*5f184715SAndy Fleming 689*5f184715SAndy Fleming #define RX_CLS_FLOW_DISC 0xffffffffffffffffULL 690*5f184715SAndy Fleming 691*5f184715SAndy Fleming /* Reset flags */ 692*5f184715SAndy Fleming /* The reset() operation must clear the flags for the components which 693*5f184715SAndy Fleming * were actually reset. On successful return, the flags indicate the 694*5f184715SAndy Fleming * components which were not reset, either because they do not exist 695*5f184715SAndy Fleming * in the hardware or because they cannot be reset independently. The 696*5f184715SAndy Fleming * driver must never reset any components that were not requested. 697*5f184715SAndy Fleming */ 698*5f184715SAndy Fleming enum ethtool_reset_flags { 699*5f184715SAndy Fleming /* These flags represent components dedicated to the interface 700*5f184715SAndy Fleming * the command is addressed to. Shift any flag left by 701*5f184715SAndy Fleming * ETH_RESET_SHARED_SHIFT to reset a shared component of the 702*5f184715SAndy Fleming * same type. 703*5f184715SAndy Fleming */ 704*5f184715SAndy Fleming ETH_RESET_MGMT = 1 << 0, /* Management processor */ 705*5f184715SAndy Fleming ETH_RESET_IRQ = 1 << 1, /* Interrupt requester */ 706*5f184715SAndy Fleming ETH_RESET_DMA = 1 << 2, /* DMA engine */ 707*5f184715SAndy Fleming ETH_RESET_FILTER = 1 << 3, /* Filtering/flow direction */ 708*5f184715SAndy Fleming ETH_RESET_OFFLOAD = 1 << 4, /* Protocol offload */ 709*5f184715SAndy Fleming ETH_RESET_MAC = 1 << 5, /* Media access controller */ 710*5f184715SAndy Fleming ETH_RESET_PHY = 1 << 6, /* Transceiver/PHY */ 711*5f184715SAndy Fleming ETH_RESET_RAM = 1 << 7, /* RAM shared between 712*5f184715SAndy Fleming * multiple components */ 713*5f184715SAndy Fleming 714*5f184715SAndy Fleming ETH_RESET_DEDICATED = 0x0000ffff, /* All components dedicated to 715*5f184715SAndy Fleming * this interface */ 716*5f184715SAndy Fleming ETH_RESET_ALL = 0xffffffff, /* All components used by this 717*5f184715SAndy Fleming * interface, even if shared */ 718*5f184715SAndy Fleming }; 719*5f184715SAndy Fleming #define ETH_RESET_SHARED_SHIFT 16 720*5f184715SAndy Fleming 721*5f184715SAndy Fleming #endif /* _LINUX_ETHTOOL_H */ 722