ethtool: Support for configurable RSS hash function
[deliverable/linux.git] / include / linux / ethtool.h
index c1a2d60dfb82769c42b65dc2adc324517ed7e79c..653dc9c4ebac7a176183af8e2a8ae26076a03eca 100644 (file)
@@ -59,6 +59,26 @@ enum ethtool_phys_id_state {
        ETHTOOL_ID_OFF
 };
 
+enum {
+       ETH_RSS_HASH_TOP_BIT, /* Configurable RSS hash function - Toeplitz */
+       ETH_RSS_HASH_XOR_BIT, /* Configurable RSS hash function - Xor */
+
+       /*
+        * Add your fresh new hash function bits above and remember to update
+        * rss_hash_func_strings[] in ethtool.c
+        */
+       ETH_RSS_HASH_FUNCS_COUNT
+};
+
+#define __ETH_RSS_HASH_BIT(bit)        ((u32)1 << (bit))
+#define __ETH_RSS_HASH(name)   __ETH_RSS_HASH_BIT(ETH_RSS_HASH_##name##_BIT)
+
+#define ETH_RSS_HASH_TOP       __ETH_RSS_HASH(TOP)
+#define ETH_RSS_HASH_XOR       __ETH_RSS_HASH(XOR)
+
+#define ETH_RSS_HASH_UNKNOWN   0
+#define ETH_RSS_HASH_NO_CHANGE 0
+
 struct net_device;
 
 /* Some generic methods drivers may use in their ethtool_ops */
@@ -158,17 +178,14 @@ static inline u32 ethtool_rxfh_indir_default(u32 index, u32 n_rx_rings)
  *     Returns zero if not supported for this specific device.
  * @get_rxfh_indir_size: Get the size of the RX flow hash indirection table.
  *     Returns zero if not supported for this specific device.
- * @get_rxfh: Get the contents of the RX flow hash indirection table and hash
- *     key.
- *     Will only be called if one or both of @get_rxfh_indir_size and
- *     @get_rxfh_key_size are implemented and return non-zero.
- *     Returns a negative error code or zero.
- * @set_rxfh: Set the contents of the RX flow hash indirection table and/or
- *     hash key.  In case only the indirection table or hash key is to be
- *     changed, the other argument will be %NULL.
- *     Will only be called if one or both of @get_rxfh_indir_size and
- *     @get_rxfh_key_size are implemented and return non-zero.
+ * @get_rxfh: Get the contents of the RX flow hash indirection table, hash key
+ *     and/or hash function.
  *     Returns a negative error code or zero.
+ * @set_rxfh: Set the contents of the RX flow hash indirection table, hash
+ *     key, and/or hash function.  Arguments which are set to %NULL or zero
+ *     will remain unchanged.
+ *     Returns a negative error code or zero. An error code must be returned
+ *     if at least one unsupported change was requested.
  * @get_channels: Get number of channels.
  * @set_channels: Set number of channels.  Returns a negative error code or
  *     zero.
@@ -241,9 +258,10 @@ struct ethtool_ops {
        int     (*reset)(struct net_device *, u32 *);
        u32     (*get_rxfh_key_size)(struct net_device *);
        u32     (*get_rxfh_indir_size)(struct net_device *);
-       int     (*get_rxfh)(struct net_device *, u32 *indir, u8 *key);
+       int     (*get_rxfh)(struct net_device *, u32 *indir, u8 *key,
+                           u8 *hfunc);
        int     (*set_rxfh)(struct net_device *, const u32 *indir,
-                           const u8 *key);
+                           const u8 *key, const u8 hfunc);
        void    (*get_channels)(struct net_device *, struct ethtool_channels *);
        int     (*set_channels)(struct net_device *, struct ethtool_channels *);
        int     (*get_dump_flag)(struct net_device *, struct ethtool_dump *);
This page took 0.028899 seconds and 5 git commands to generate.