aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/net/ethernet/intel/ixgbe
diff options
context:
space:
mode:
authorVlad Zolotarov <vladz@cloudius-systems.com>2015-03-30 14:18:58 -0400
committerJeff Kirsher <jeffrey.t.kirsher@intel.com>2015-04-11 00:47:53 -0400
commit7f276efb45f8b022eeb9a0453240937806dc27e3 (patch)
treeb7e6fdb468d75640ed061ec41f95612fa49165ca /drivers/net/ethernet/intel/ixgbe
parentdfaf891dd3e1e2e4531c4fd800bd6d8e3079ed72 (diff)
ixgbe: Add the appropriate ethtool ops to query RSS indirection table and key
Added get_rxfh_indir_size, get_rxfh_key_size and get_rxfh ethtool_ops callbacks implementations. This enables the ethtool's "-x" and "--show-rxfh[-indir]" options. Signed-off-by: Vlad Zolotarov <vladz@cloudius-systems.com> Tested-by: Phil Schmitt <phillip.j.schmitt@intel.com> Signed-off-by: Jeff Kirsher <jeffrey.t.kirsher@intel.com>
Diffstat (limited to 'drivers/net/ethernet/intel/ixgbe')
-rw-r--r--drivers/net/ethernet/intel/ixgbe/ixgbe.h1
-rw-r--r--drivers/net/ethernet/intel/ixgbe/ixgbe_ethtool.c42
-rw-r--r--drivers/net/ethernet/intel/ixgbe/ixgbe_main.c2
3 files changed, 44 insertions, 1 deletions
diff --git a/drivers/net/ethernet/intel/ixgbe/ixgbe.h b/drivers/net/ethernet/intel/ixgbe/ixgbe.h
index d13ab87dfc3a..d3d27ec86ad2 100644
--- a/drivers/net/ethernet/intel/ixgbe/ixgbe.h
+++ b/drivers/net/ethernet/intel/ixgbe/ixgbe.h
@@ -964,4 +964,5 @@ void ixgbe_sriov_reinit(struct ixgbe_adapter *adapter);
964netdev_tx_t ixgbe_xmit_frame_ring(struct sk_buff *skb, 964netdev_tx_t ixgbe_xmit_frame_ring(struct sk_buff *skb,
965 struct ixgbe_adapter *adapter, 965 struct ixgbe_adapter *adapter,
966 struct ixgbe_ring *tx_ring); 966 struct ixgbe_ring *tx_ring);
967u32 ixgbe_rss_indir_tbl_entries(struct ixgbe_adapter *adapter);
967#endif /* _IXGBE_H_ */ 968#endif /* _IXGBE_H_ */
diff --git a/drivers/net/ethernet/intel/ixgbe/ixgbe_ethtool.c b/drivers/net/ethernet/intel/ixgbe/ixgbe_ethtool.c
index ccaecb1b8619..eafa9ec802ba 100644
--- a/drivers/net/ethernet/intel/ixgbe/ixgbe_ethtool.c
+++ b/drivers/net/ethernet/intel/ixgbe/ixgbe_ethtool.c
@@ -2853,6 +2853,45 @@ static int ixgbe_set_rxnfc(struct net_device *dev, struct ethtool_rxnfc *cmd)
2853 return ret; 2853 return ret;
2854} 2854}
2855 2855
2856static u32 ixgbe_get_rxfh_key_size(struct net_device *netdev)
2857{
2858 struct ixgbe_adapter *adapter = netdev_priv(netdev);
2859
2860 return sizeof(adapter->rss_key);
2861}
2862
2863static u32 ixgbe_rss_indir_size(struct net_device *netdev)
2864{
2865 struct ixgbe_adapter *adapter = netdev_priv(netdev);
2866
2867 return ixgbe_rss_indir_tbl_entries(adapter);
2868}
2869
2870static void ixgbe_get_reta(struct ixgbe_adapter *adapter, u32 *indir)
2871{
2872 int i, reta_size = ixgbe_rss_indir_tbl_entries(adapter);
2873
2874 for (i = 0; i < reta_size; i++)
2875 indir[i] = adapter->rss_indir_tbl[i];
2876}
2877
2878static int ixgbe_get_rxfh(struct net_device *netdev, u32 *indir, u8 *key,
2879 u8 *hfunc)
2880{
2881 struct ixgbe_adapter *adapter = netdev_priv(netdev);
2882
2883 if (hfunc)
2884 *hfunc = ETH_RSS_HASH_TOP;
2885
2886 if (indir)
2887 ixgbe_get_reta(adapter, indir);
2888
2889 if (key)
2890 memcpy(key, adapter->rss_key, ixgbe_get_rxfh_key_size(netdev));
2891
2892 return 0;
2893}
2894
2856static int ixgbe_get_ts_info(struct net_device *dev, 2895static int ixgbe_get_ts_info(struct net_device *dev,
2857 struct ethtool_ts_info *info) 2896 struct ethtool_ts_info *info)
2858{ 2897{
@@ -3110,6 +3149,9 @@ static const struct ethtool_ops ixgbe_ethtool_ops = {
3110 .set_coalesce = ixgbe_set_coalesce, 3149 .set_coalesce = ixgbe_set_coalesce,
3111 .get_rxnfc = ixgbe_get_rxnfc, 3150 .get_rxnfc = ixgbe_get_rxnfc,
3112 .set_rxnfc = ixgbe_set_rxnfc, 3151 .set_rxnfc = ixgbe_set_rxnfc,
3152 .get_rxfh_indir_size = ixgbe_rss_indir_size,
3153 .get_rxfh_key_size = ixgbe_get_rxfh_key_size,
3154 .get_rxfh = ixgbe_get_rxfh,
3113 .get_channels = ixgbe_get_channels, 3155 .get_channels = ixgbe_get_channels,
3114 .set_channels = ixgbe_set_channels, 3156 .set_channels = ixgbe_set_channels,
3115 .get_ts_info = ixgbe_get_ts_info, 3157 .get_ts_info = ixgbe_get_ts_info,
diff --git a/drivers/net/ethernet/intel/ixgbe/ixgbe_main.c b/drivers/net/ethernet/intel/ixgbe/ixgbe_main.c
index 57a3ec459ef7..fb096dd7b773 100644
--- a/drivers/net/ethernet/intel/ixgbe/ixgbe_main.c
+++ b/drivers/net/ethernet/intel/ixgbe/ixgbe_main.c
@@ -3237,7 +3237,7 @@ static void ixgbe_configure_srrctl(struct ixgbe_adapter *adapter,
3237 * - X550(non-SRIOV mode): 512 3237 * - X550(non-SRIOV mode): 512
3238 * - X550(SRIOV mode): 64 3238 * - X550(SRIOV mode): 64
3239 */ 3239 */
3240static u32 ixgbe_rss_indir_tbl_entries(struct ixgbe_adapter *adapter) 3240u32 ixgbe_rss_indir_tbl_entries(struct ixgbe_adapter *adapter)
3241{ 3241{
3242 if (adapter->hw.mac.type < ixgbe_mac_X550) 3242 if (adapter->hw.mac.type < ixgbe_mac_X550)
3243 return 128; 3243 return 128;