]> rtime.felk.cvut.cz Git - l4.git/blobdiff - l4/pkg/linux-26-headers/include/linux/ethtool.h
Update
[l4.git] / l4 / pkg / linux-26-headers / include / linux / ethtool.h
index 61b78fc9d463b66c6c50d9ae758379c16eb324b8..1fe607d1c46ab0237078843efa980719475b4e8a 100644 (file)
@@ -139,6 +139,7 @@ static __inline__ __u32 ethtool_cmd_speed(const struct ethtool_cmd *ep)
 
 #define ETHTOOL_FWVERS_LEN     32
 #define ETHTOOL_BUSINFO_LEN    32
+#define ETHTOOL_EROMVERS_LEN   32
 
 /**
  * struct ethtool_drvinfo - general driver and device information
@@ -148,6 +149,7 @@ static __inline__ __u32 ethtool_cmd_speed(const struct ethtool_cmd *ep)
  *     not be an empty string.
  * @version: Driver version string; may be an empty string
  * @fw_version: Firmware version string; may be an empty string
+ * @erom_version: Expansion ROM 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.
@@ -176,7 +178,7 @@ struct ethtool_drvinfo {
        char    version[32];
        char    fw_version[ETHTOOL_FWVERS_LEN];
        char    bus_info[ETHTOOL_BUSINFO_LEN];
-       char    reserved1[32];
+       char    erom_version[ETHTOOL_EROMVERS_LEN];
        char    reserved2[12];
        __u32   n_priv_flags;
        __u32   n_stats;
@@ -209,6 +211,38 @@ struct ethtool_value {
        __u32   data;
 };
 
+enum tunable_id {
+       ETHTOOL_ID_UNSPEC,
+       ETHTOOL_RX_COPYBREAK,
+       ETHTOOL_TX_COPYBREAK,
+       /*
+        * Add your fresh new tubale attribute above and remember to update
+        * tunable_strings[] in net/core/ethtool.c
+        */
+       __ETHTOOL_TUNABLE_COUNT,
+};
+
+enum tunable_type_id {
+       ETHTOOL_TUNABLE_UNSPEC,
+       ETHTOOL_TUNABLE_U8,
+       ETHTOOL_TUNABLE_U16,
+       ETHTOOL_TUNABLE_U32,
+       ETHTOOL_TUNABLE_U64,
+       ETHTOOL_TUNABLE_STRING,
+       ETHTOOL_TUNABLE_S8,
+       ETHTOOL_TUNABLE_S16,
+       ETHTOOL_TUNABLE_S32,
+       ETHTOOL_TUNABLE_S64,
+};
+
+struct ethtool_tunable {
+       __u32   cmd;
+       __u32   id;
+       __u32   type_id;
+       __u32   len;
+       void    *data[0];
+};
+
 /**
  * struct ethtool_regs - hardware register dump
  * @cmd: Command number = %ETHTOOL_GREGS
@@ -507,6 +541,7 @@ struct ethtool_pauseparam {
  * @ETH_SS_NTUPLE_FILTERS: Previously used with %ETHTOOL_GRXNTUPLE;
  *     now deprecated
  * @ETH_SS_FEATURES: Device feature names
+ * @ETH_SS_RSS_HASH_FUNCS: RSS hush function names
  */
 enum ethtool_stringset {
        ETH_SS_TEST             = 0,
@@ -514,6 +549,8 @@ enum ethtool_stringset {
        ETH_SS_PRIV_FLAGS,
        ETH_SS_NTUPLE_FILTERS,
        ETH_SS_FEATURES,
+       ETH_SS_RSS_HASH_FUNCS,
+       ETH_SS_TUNABLES,
 };
 
 /**
@@ -765,6 +802,31 @@ struct ethtool_rx_flow_spec {
        __u32           location;
 };
 
+/* How rings are layed out when accessing virtual functions or
+ * offloaded queues is device specific. To allow users to do flow
+ * steering and specify these queues the ring cookie is partitioned
+ * into a 32bit queue index with an 8 bit virtual function id.
+ * This also leaves the 3bytes for further specifiers. It is possible
+ * future devices may support more than 256 virtual functions if
+ * devices start supporting PCIe w/ARI. However at the moment I
+ * do not know of any devices that support this so I do not reserve
+ * space for this at this time. If a future patch consumes the next
+ * byte it should be aware of this possiblity.
+ */
+#define ETHTOOL_RX_FLOW_SPEC_RING      0x00000000FFFFFFFFLL
+#define ETHTOOL_RX_FLOW_SPEC_RING_VF   0x000000FF00000000LL
+#define ETHTOOL_RX_FLOW_SPEC_RING_VF_OFF 32
+static __inline__ __u64 ethtool_get_flow_spec_ring(__u64 ring_cookie)
+{
+       return ETHTOOL_RX_FLOW_SPEC_RING & ring_cookie;
+};
+
+static __inline__ __u64 ethtool_get_flow_spec_ring_vf(__u64 ring_cookie)
+{
+       return (ETHTOOL_RX_FLOW_SPEC_RING_VF & ring_cookie) >>
+                               ETHTOOL_RX_FLOW_SPEC_RING_VF_OFF;
+};
+
 /**
  * struct ethtool_rxnfc - command to get or set RX flow classification rules
  * @cmd: Specific command number - %ETHTOOL_GRXFH, %ETHTOOL_SRXFH,
@@ -857,6 +919,8 @@ struct ethtool_rxfh_indir {
  * @key_size: On entry, the array size of the user buffer for the hash key,
  *     which may be zero.  On return from %ETHTOOL_GRSSH, the size of the
  *     hardware hash key.
+ * @hfunc: Defines the current RSS hash function used by HW (or to be set to).
+ *     Valid values are one of the %ETH_RSS_HASH_*.
  * @rsvd:      Reserved for future extensions.
  * @rss_config: RX ring/queue index for each hash value i.e., indirection table
  *     of @indir_size __u32 elements, followed by hash key of @key_size
@@ -866,14 +930,16 @@ struct ethtool_rxfh_indir {
  * size should be returned.  For %ETHTOOL_SRSSH, an @indir_size of
  * %ETH_RXFH_INDIR_NO_CHANGE means that indir table setting is not requested
  * and a @indir_size of zero means the indir table should be reset to default
- * values.
+ * values. An hfunc of zero means that hash function setting is not requested.
  */
 struct ethtool_rxfh {
        __u32   cmd;
        __u32   rss_context;
        __u32   indir_size;
        __u32   key_size;
-       __u32   rsvd[2];
+       __u8    hfunc;
+       __u8    rsvd8[3];
+       __u32   rsvd32;
        __u32   rss_config[0];
 };
 #define ETH_RXFH_INDIR_NO_CHANGE       0xffffffff
@@ -1152,6 +1218,8 @@ enum ethtool_sfeatures_retval_bits {
 
 #define ETHTOOL_GRSSH          0x00000046 /* Get RX flow hash configuration */
 #define ETHTOOL_SRSSH          0x00000047 /* Set RX flow hash configuration */
+#define ETHTOOL_GTUNABLE       0x00000048 /* Get tunable configuration */
+#define ETHTOOL_STUNABLE       0x00000049 /* Set tunable configuration */
 
 /* compatibility with older code */
 #define SPARC_ETH_GSET         ETHTOOL_GSET
@@ -1184,6 +1252,10 @@ enum ethtool_sfeatures_retval_bits {
 #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)
@@ -1212,6 +1284,10 @@ enum ethtool_sfeatures_retval_bits {
 #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)
 
 /* The following are all involved in forcing a particular link
  * mode for the device for setting things.  When getting the
@@ -1219,12 +1295,20 @@ enum ethtool_sfeatures_retval_bits {
  * it was forced up into this mode or autonegotiated.
  */
 
-/* The forced speed, 10Mb, 100Mb, gigabit, 2.5Gb, 10GbE. */
+/* The forced speed, 10Mb, 100Mb, gigabit, [2.5|5|10|20|25|40|50|56|100]GbE. */
 #define SPEED_10               10
 #define SPEED_100              100
 #define SPEED_1000             1000
 #define SPEED_2500             2500
+#define SPEED_5000             5000
 #define SPEED_10000            10000
+#define SPEED_20000            20000
+#define SPEED_25000            25000
+#define SPEED_40000            40000
+#define SPEED_50000            50000
+#define SPEED_56000            56000
+#define SPEED_100000           100000
+
 #define SPEED_UNKNOWN          -1
 
 /* Duplex, half or full. */
@@ -1314,6 +1398,10 @@ enum ethtool_sfeatures_retval_bits {
 #define ETH_MODULE_SFF_8079_LEN                256
 #define ETH_MODULE_SFF_8472            0x2
 #define ETH_MODULE_SFF_8472_LEN                512
+#define ETH_MODULE_SFF_8636            0x3
+#define ETH_MODULE_SFF_8636_LEN                256
+#define ETH_MODULE_SFF_8436            0x4
+#define ETH_MODULE_SFF_8436_LEN                256
 
 /* Reset flags */
 /* The reset() operation must clear the flags for the components which