The Design and Implementation of the FreeBSD Operating System, Second Edition
Now available: The Design and Implementation of the FreeBSD Operating System (Second Edition)


[ source navigation ] [ diff markup ] [ identifier search ] [ freetext search ] [ file search ] [ list types ] [ track identifier ]

FreeBSD/Linux Kernel Cross Reference
sys/include/linux/ethtool.h

Version: -  FREEBSD  -  FREEBSD-13-STABLE  -  FREEBSD-13-0  -  FREEBSD-12-STABLE  -  FREEBSD-12-0  -  FREEBSD-11-STABLE  -  FREEBSD-11-0  -  FREEBSD-10-STABLE  -  FREEBSD-10-0  -  FREEBSD-9-STABLE  -  FREEBSD-9-0  -  FREEBSD-8-STABLE  -  FREEBSD-8-0  -  FREEBSD-7-STABLE  -  FREEBSD-7-0  -  FREEBSD-6-STABLE  -  FREEBSD-6-0  -  FREEBSD-5-STABLE  -  FREEBSD-5-0  -  FREEBSD-4-STABLE  -  FREEBSD-3-STABLE  -  FREEBSD22  -  l41  -  OPENBSD  -  linux-2.6  -  MK84  -  PLAN9  -  xnu-8792 
SearchContext: -  none  -  3  -  10 

    1 /*
    2  * ethtool.h: Defines for Linux ethtool.
    3  *
    4  * Copyright (C) 1998 David S. Miller (davem@redhat.com)
    5  * Copyright 2001 Jeff Garzik <jgarzik@pobox.com>
    6  * Portions Copyright 2001 Sun Microsystems (thockin@sun.com)
    7  * Portions Copyright 2002 Intel (eli.kupermann@intel.com,
    8  *                                christopher.leech@intel.com,
    9  *                                scott.feldman@intel.com)
   10  */
   11 
   12 #ifndef _LINUX_ETHTOOL_H
   13 #define _LINUX_ETHTOOL_H
   14 
   15 
   16 /* This should work for both 32 and 64 bit userland. */
   17 struct ethtool_cmd {
   18         u32     cmd;
   19         u32     supported;      /* Features this interface supports */
   20         u32     advertising;    /* Features this interface advertises */
   21         u16     speed;          /* The forced speed, 10Mb, 100Mb, gigabit */
   22         u8      duplex;         /* Duplex, half or full */
   23         u8      port;           /* Which connector port */
   24         u8      phy_address;
   25         u8      transceiver;    /* Which tranceiver to use */
   26         u8      autoneg;        /* Enable or disable autonegotiation */
   27         u32     maxtxpkt;       /* Tx pkts before generating tx int */
   28         u32     maxrxpkt;       /* Rx pkts before generating rx int */
   29         u32     reserved[4];
   30 };
   31 
   32 #define ETHTOOL_BUSINFO_LEN     32
   33 /* these strings are set to whatever the driver author decides... */
   34 struct ethtool_drvinfo {
   35         u32     cmd;
   36         char    driver[32];     /* driver short name, "tulip", "eepro100" */
   37         char    version[32];    /* driver version string */
   38         char    fw_version[32]; /* firmware version string, if applicable */
   39         char    bus_info[ETHTOOL_BUSINFO_LEN];  /* Bus info for this IF. */
   40                                 /* For PCI devices, use pci_dev->slot_name. */
   41         char    reserved1[32];
   42         char    reserved2[16];
   43         u32     n_stats;        /* number of u64's from ETHTOOL_GSTATS */
   44         u32     testinfo_len;
   45         u32     eedump_len;     /* Size of data from ETHTOOL_GEEPROM (bytes) */
   46         u32     regdump_len;    /* Size of data from ETHTOOL_GREGS (bytes) */
   47 };
   48 
   49 #define SOPASS_MAX      6
   50 /* wake-on-lan settings */
   51 struct ethtool_wolinfo {
   52         u32     cmd;
   53         u32     supported;
   54         u32     wolopts;
   55         u8      sopass[SOPASS_MAX]; /* SecureOn(tm) password */
   56 };
   57 
   58 /* for passing single values */
   59 struct ethtool_value {
   60         u32     cmd;
   61         u32     data;
   62 };
   63 
   64 /* for passing big chunks of data */
   65 struct ethtool_regs {
   66         u32     cmd;
   67         u32     version; /* driver-specific, indicates different chips/revs */
   68         u32     len; /* bytes */
   69         u8      data[0];
   70 };
   71 
   72 /* for passing EEPROM chunks */
   73 struct ethtool_eeprom {
   74         u32     cmd;
   75         u32     magic;
   76         u32     offset; /* in bytes */
   77         u32     len; /* in bytes */
   78         u8      data[0];
   79 };
   80 
   81 /* for configuring coalescing parameters of chip */
   82 struct ethtool_coalesce {
   83         u32     cmd;    /* ETHTOOL_{G,S}COALESCE */
   84 
   85         /* How many usecs to delay an RX interrupt after
   86          * a packet arrives.  If 0, only rx_max_coalesced_frames
   87          * is used.
   88          */
   89         u32     rx_coalesce_usecs;
   90 
   91         /* How many packets to delay an RX interrupt after
   92          * a packet arrives.  If 0, only rx_coalesce_usecs is
   93          * used.  It is illegal to set both usecs and max frames
   94          * to zero as this would cause RX interrupts to never be
   95          * generated.
   96          */
   97         u32     rx_max_coalesced_frames;
   98 
   99         /* Same as above two parameters, except that these values
  100          * apply while an IRQ is being services by the host.  Not
  101          * all cards support this feature and the values are ignored
  102          * in that case.
  103          */
  104         u32     rx_coalesce_usecs_irq;
  105         u32     rx_max_coalesced_frames_irq;
  106 
  107         /* How many usecs to delay a TX interrupt after
  108          * a packet is sent.  If 0, only tx_max_coalesced_frames
  109          * is used.
  110          */
  111         u32     tx_coalesce_usecs;
  112 
  113         /* How many packets to delay a TX interrupt after
  114          * a packet is sent.  If 0, only tx_coalesce_usecs is
  115          * used.  It is illegal to set both usecs and max frames
  116          * to zero as this would cause TX interrupts to never be
  117          * generated.
  118          */
  119         u32     tx_max_coalesced_frames;
  120 
  121         /* Same as above two parameters, except that these values
  122          * apply while an IRQ is being services by the host.  Not
  123          * all cards support this feature and the values are ignored
  124          * in that case.
  125          */
  126         u32     tx_coalesce_usecs_irq;
  127         u32     tx_max_coalesced_frames_irq;
  128 
  129         /* How many usecs to delay in-memory statistics
  130          * block updates.  Some drivers do not have an in-memory
  131          * statistic block, and in such cases this value is ignored.
  132          * This value must not be zero.
  133          */
  134         u32     stats_block_coalesce_usecs;
  135 
  136         /* Adaptive RX/TX coalescing is an algorithm implemented by
  137          * some drivers to improve latency under low packet rates and
  138          * improve throughput under high packet rates.  Some drivers
  139          * only implement one of RX or TX adaptive coalescing.  Anything
  140          * not implemented by the driver causes these values to be
  141          * silently ignored.
  142          */
  143         u32     use_adaptive_rx_coalesce;
  144         u32     use_adaptive_tx_coalesce;
  145 
  146         /* When the packet rate (measured in packets per second)
  147          * is below pkt_rate_low, the {rx,tx}_*_low parameters are
  148          * used.
  149          */
  150         u32     pkt_rate_low;
  151         u32     rx_coalesce_usecs_low;
  152         u32     rx_max_coalesced_frames_low;
  153         u32     tx_coalesce_usecs_low;
  154         u32     tx_max_coalesced_frames_low;
  155 
  156         /* When the packet rate is below pkt_rate_high but above
  157          * pkt_rate_low (both measured in packets per second) the
  158          * normal {rx,tx}_* coalescing parameters are used.
  159          */
  160 
  161         /* When the packet rate is (measured in packets per second)
  162          * is above pkt_rate_high, the {rx,tx}_*_high parameters are
  163          * used.
  164          */
  165         u32     pkt_rate_high;
  166         u32     rx_coalesce_usecs_high;
  167         u32     rx_max_coalesced_frames_high;
  168         u32     tx_coalesce_usecs_high;
  169         u32     tx_max_coalesced_frames_high;
  170 
  171         /* How often to do adaptive coalescing packet rate sampling,
  172          * measured in seconds.  Must not be zero.
  173          */
  174         u32     rate_sample_interval;
  175 };
  176 
  177 /* for configuring RX/TX ring parameters */
  178 struct ethtool_ringparam {
  179         u32     cmd;    /* ETHTOOL_{G,S}RINGPARAM */
  180 
  181         /* Read only attributes.  These indicate the maximum number
  182          * of pending RX/TX ring entries the driver will allow the
  183          * user to set.
  184          */
  185         u32     rx_max_pending;
  186         u32     rx_mini_max_pending;
  187         u32     rx_jumbo_max_pending;
  188         u32     tx_max_pending;
  189 
  190         /* Values changeable by the user.  The valid values are
  191          * in the range 1 to the "*_max_pending" counterpart above.
  192          */
  193         u32     rx_pending;
  194         u32     rx_mini_pending;
  195         u32     rx_jumbo_pending;
  196         u32     tx_pending;
  197 };
  198 
  199 /* for configuring link flow control parameters */
  200 struct ethtool_pauseparam {
  201         u32     cmd;    /* ETHTOOL_{G,S}PAUSEPARAM */
  202 
  203         /* If the link is being auto-negotiated (via ethtool_cmd.autoneg
  204          * being true) the user may set 'autonet' here non-zero to have the
  205          * pause parameters be auto-negotiated too.  In such a case, the
  206          * {rx,tx}_pause values below determine what capabilities are
  207          * advertised.
  208          *
  209          * If 'autoneg' is zero or the link is not being auto-negotiated,
  210          * then {rx,tx}_pause force the driver to use/not-use pause
  211          * flow control.
  212          */
  213         u32     autoneg;
  214         u32     rx_pause;
  215         u32     tx_pause;
  216 };
  217 
  218 #define ETH_GSTRING_LEN         32
  219 enum ethtool_stringset {
  220         ETH_SS_TEST             = 0,
  221         ETH_SS_STATS,
  222 };
  223 
  224 /* for passing string sets for data tagging */
  225 struct ethtool_gstrings {
  226         u32     cmd;            /* ETHTOOL_GSTRINGS */
  227         u32     string_set;     /* string set id e.c. ETH_SS_TEST, etc*/
  228         u32     len;            /* number of strings in the string set */
  229         u8      data[0];
  230 };
  231 
  232 enum ethtool_test_flags {
  233         ETH_TEST_FL_OFFLINE     = (1 << 0),     /* online / offline */
  234         ETH_TEST_FL_FAILED      = (1 << 1),     /* test passed / failed */
  235 };
  236 
  237 /* for requesting NIC test and getting results*/
  238 struct ethtool_test {
  239         u32     cmd;            /* ETHTOOL_TEST */
  240         u32     flags;          /* ETH_TEST_FL_xxx */
  241         u32     reserved;
  242         u32     len;            /* result length, in number of u64 elements */
  243         u64     data[0];
  244 };
  245 
  246 /* for dumping NIC-specific statistics */
  247 struct ethtool_stats {
  248         u32     cmd;            /* ETHTOOL_GSTATS */
  249         u32     n_stats;        /* number of u64's being returned */
  250         u64     data[0];
  251 };
  252 
  253 /* CMDs currently supported */
  254 #define ETHTOOL_GSET            0x00000001 /* Get settings. */
  255 #define ETHTOOL_SSET            0x00000002 /* Set settings. */
  256 #define ETHTOOL_GDRVINFO        0x00000003 /* Get driver info. */
  257 #define ETHTOOL_GREGS           0x00000004 /* Get NIC registers. */
  258 #define ETHTOOL_GWOL            0x00000005 /* Get wake-on-lan options. */
  259 #define ETHTOOL_SWOL            0x00000006 /* Set wake-on-lan options. */
  260 #define ETHTOOL_GMSGLVL         0x00000007 /* Get driver message level */
  261 #define ETHTOOL_SMSGLVL         0x00000008 /* Set driver msg level. */
  262 #define ETHTOOL_NWAY_RST        0x00000009 /* Restart autonegotiation. */
  263 #define ETHTOOL_GLINK           0x0000000a /* Get link status (ethtool_value) */
  264 #define ETHTOOL_GEEPROM         0x0000000b /* Get EEPROM data */
  265 #define ETHTOOL_SEEPROM         0x0000000c /* Set EEPROM data. */
  266 #define ETHTOOL_GCOALESCE       0x0000000e /* Get coalesce config */
  267 #define ETHTOOL_SCOALESCE       0x0000000f /* Set coalesce config. */
  268 #define ETHTOOL_GRINGPARAM      0x00000010 /* Get ring parameters */
  269 #define ETHTOOL_SRINGPARAM      0x00000011 /* Set ring parameters. */
  270 #define ETHTOOL_GPAUSEPARAM     0x00000012 /* Get pause parameters */
  271 #define ETHTOOL_SPAUSEPARAM     0x00000013 /* Set pause parameters. */
  272 #define ETHTOOL_GRXCSUM         0x00000014 /* Get RX hw csum enable (ethtool_value) */
  273 #define ETHTOOL_SRXCSUM         0x00000015 /* Set RX hw csum enable (ethtool_value) */
  274 #define ETHTOOL_GTXCSUM         0x00000016 /* Get TX hw csum enable (ethtool_value) */
  275 #define ETHTOOL_STXCSUM         0x00000017 /* Set TX hw csum enable (ethtool_value) */
  276 #define ETHTOOL_GSG             0x00000018 /* Get scatter-gather enable
  277                                             * (ethtool_value) */
  278 #define ETHTOOL_SSG             0x00000019 /* Set scatter-gather enable
  279                                             * (ethtool_value). */
  280 #define ETHTOOL_TEST            0x0000001a /* execute NIC self-test. */
  281 #define ETHTOOL_GSTRINGS        0x0000001b /* get specified string set */
  282 #define ETHTOOL_PHYS_ID         0x0000001c /* identify the NIC */
  283 #define ETHTOOL_GSTATS          0x0000001d /* get NIC-specific statistics */
  284 #define ETHTOOL_GTSO            0x0000001e /* Get TSO enable (ethtool_value) */
  285 #define ETHTOOL_STSO            0x0000001f /* Set TSO enable (ethtool_value) */
  286 
  287 /* compatibility with older code */
  288 #define SPARC_ETH_GSET          ETHTOOL_GSET
  289 #define SPARC_ETH_SSET          ETHTOOL_SSET
  290 
  291 /* Indicates what features are supported by the interface. */
  292 #define SUPPORTED_10baseT_Half          (1 << 0)
  293 #define SUPPORTED_10baseT_Full          (1 << 1)
  294 #define SUPPORTED_100baseT_Half         (1 << 2)
  295 #define SUPPORTED_100baseT_Full         (1 << 3)
  296 #define SUPPORTED_1000baseT_Half        (1 << 4)
  297 #define SUPPORTED_1000baseT_Full        (1 << 5)
  298 #define SUPPORTED_Autoneg               (1 << 6)
  299 #define SUPPORTED_TP                    (1 << 7)
  300 #define SUPPORTED_AUI                   (1 << 8)
  301 #define SUPPORTED_MII                   (1 << 9)
  302 #define SUPPORTED_FIBRE                 (1 << 10)
  303 #define SUPPORTED_BNC                   (1 << 11)
  304 #define SUPPORTED_10000baseT_Full       (1 << 12)
  305 
  306 /* Indicates what features are advertised by the interface. */
  307 #define ADVERTISED_10baseT_Half         (1 << 0)
  308 #define ADVERTISED_10baseT_Full         (1 << 1)
  309 #define ADVERTISED_100baseT_Half        (1 << 2)
  310 #define ADVERTISED_100baseT_Full        (1 << 3)
  311 #define ADVERTISED_1000baseT_Half       (1 << 4)
  312 #define ADVERTISED_1000baseT_Full       (1 << 5)
  313 #define ADVERTISED_Autoneg              (1 << 6)
  314 #define ADVERTISED_TP                   (1 << 7)
  315 #define ADVERTISED_AUI                  (1 << 8)
  316 #define ADVERTISED_MII                  (1 << 9)
  317 #define ADVERTISED_FIBRE                (1 << 10)
  318 #define ADVERTISED_BNC                  (1 << 11)
  319 #define ADVERTISED_10000baseT_Full      (1 << 12)
  320 
  321 /* The following are all involved in forcing a particular link
  322  * mode for the device for setting things.  When getting the
  323  * devices settings, these indicate the current mode and whether
  324  * it was foced up into this mode or autonegotiated.
  325  */
  326 
  327 /* The forced speed, 10Mb, 100Mb, gigabit, 10GbE. */
  328 #define SPEED_10                10
  329 #define SPEED_100               100
  330 #define SPEED_1000              1000
  331 #define SPEED_10000             10000
  332 
  333 /* Duplex, half or full. */
  334 #define DUPLEX_HALF             0x00
  335 #define DUPLEX_FULL             0x01
  336 
  337 /* Which connector port. */
  338 #define PORT_TP                 0x00
  339 #define PORT_AUI                0x01
  340 #define PORT_MII                0x02
  341 #define PORT_FIBRE              0x03
  342 #define PORT_BNC                0x04
  343 
  344 /* Which tranceiver to use. */
  345 #define XCVR_INTERNAL           0x00
  346 #define XCVR_EXTERNAL           0x01
  347 #define XCVR_DUMMY1             0x02
  348 #define XCVR_DUMMY2             0x03
  349 #define XCVR_DUMMY3             0x04
  350 
  351 /* Enable or disable autonegotiation.  If this is set to enable,
  352  * the forced link modes above are completely ignored.
  353  */
  354 #define AUTONEG_DISABLE         0x00
  355 #define AUTONEG_ENABLE          0x01
  356 
  357 /* Wake-On-Lan options. */
  358 #define WAKE_PHY                (1 << 0)
  359 #define WAKE_UCAST              (1 << 1)
  360 #define WAKE_MCAST              (1 << 2)
  361 #define WAKE_BCAST              (1 << 3)
  362 #define WAKE_ARP                (1 << 4)
  363 #define WAKE_MAGIC              (1 << 5)
  364 #define WAKE_MAGICSECURE        (1 << 6) /* only meaningful if WAKE_MAGIC */
  365 
  366 #endif /* _LINUX_ETHTOOL_H */

Cache object: 252e1e248c88912d245acb67e252e7ef


[ source navigation ] [ diff markup ] [ identifier search ] [ freetext search ] [ file search ] [ list types ] [ track identifier ]


This page is part of the FreeBSD/Linux Linux Kernel Cross-Reference, and was automatically generated using a modified version of the LXR engine.