diff options
Diffstat (limited to 'include/linux/ethtool.h')
| -rw-r--r-- | include/linux/ethtool.h | 24 | 
1 files changed, 18 insertions, 6 deletions
diff --git a/include/linux/ethtool.h b/include/linux/ethtool.h index c8e3e7e39c6..e658229fee3 100644 --- a/include/linux/ethtool.h +++ b/include/linux/ethtool.h @@ -154,13 +154,20 @@ static inline u32 ethtool_rxfh_indir_default(u32 index, u32 n_rx_rings)   * @reset: Reset (part of) the device, as specified by a bitmask of   *	flags from &enum ethtool_reset_flags.  Returns a negative   *	error code or zero. + * @get_rxfh_key_size: Get the size of the RX flow hash key. + *	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_indir: Get the contents of the RX flow hash indirection table. - *	Will not be called if @get_rxfh_indir_size returns zero. + * @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_indir: Set the contents of the RX flow hash indirection table. - *	Will not be called if @get_rxfh_indir_size returns 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.   *	Returns a negative error code or zero.   * @get_channels: Get number of channels.   * @set_channels: Set number of channels.  Returns a negative error code or @@ -183,6 +190,9 @@ static inline u32 ethtool_rxfh_indir_default(u32 index, u32 n_rx_rings)   * hold the RTNL lock.   *   * See the structures used by these operations for further documentation. + * Note that for all operations using a structure ending with a zero- + * length array, the array is allocated separately in the kernel and + * is passed to the driver as an additional parameter.   *   * See &struct net_device and &struct net_device_ops for documentation   * of the generic netdev features interface. @@ -229,9 +239,11 @@ struct ethtool_ops {  	int	(*set_rxnfc)(struct net_device *, struct ethtool_rxnfc *);  	int	(*flash_device)(struct net_device *, struct ethtool_flash *);  	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_indir)(struct net_device *, u32 *); -	int	(*set_rxfh_indir)(struct net_device *, const u32 *); +	int	(*get_rxfh)(struct net_device *, u32 *indir, u8 *key); +	int	(*set_rxfh)(struct net_device *, const u32 *indir, +			    const u8 *key);  	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 *);  | 
