diff options
author | Dimitris Michailidis <dm@chelsio.com> | 2010-07-11 08:01:18 -0400 |
---|---|---|
committer | David S. Miller <davem@davemloft.net> | 2010-07-11 20:07:46 -0400 |
commit | f796564a5fd7be1a4597b66e2a516c18685641df (patch) | |
tree | 826260c75661df51280ae3a03ff782a45d12aba8 /drivers/net/cxgb4/cxgb4_main.c | |
parent | 671b0060d82984a566f2e75ffd166a9b61c6da7d (diff) |
cxgb4: implement the ETHTOOL_GRXFH command
Signed-off-by: Dimitris Michailidis <dm@chelsio.com>
Signed-off-by: David S. Miller <davem@davemloft.net>
Diffstat (limited to 'drivers/net/cxgb4/cxgb4_main.c')
-rw-r--r-- | drivers/net/cxgb4/cxgb4_main.c | 54 |
1 files changed, 53 insertions, 1 deletions
diff --git a/drivers/net/cxgb4/cxgb4_main.c b/drivers/net/cxgb4/cxgb4_main.c index 61d43130eff2..110843c5fde2 100644 --- a/drivers/net/cxgb4/cxgb4_main.c +++ b/drivers/net/cxgb4/cxgb4_main.c | |||
@@ -1851,9 +1851,61 @@ static int set_rss_table(struct net_device *dev, | |||
1851 | static int get_rxnfc(struct net_device *dev, struct ethtool_rxnfc *info, | 1851 | static int get_rxnfc(struct net_device *dev, struct ethtool_rxnfc *info, |
1852 | void *rules) | 1852 | void *rules) |
1853 | { | 1853 | { |
1854 | const struct port_info *pi = netdev_priv(dev); | ||
1855 | |||
1854 | switch (info->cmd) { | 1856 | switch (info->cmd) { |
1857 | case ETHTOOL_GRXFH: { | ||
1858 | unsigned int v = pi->rss_mode; | ||
1859 | |||
1860 | info->data = 0; | ||
1861 | switch (info->flow_type) { | ||
1862 | case TCP_V4_FLOW: | ||
1863 | if (v & FW_RSS_VI_CONFIG_CMD_IP4FOURTUPEN) | ||
1864 | info->data = RXH_IP_SRC | RXH_IP_DST | | ||
1865 | RXH_L4_B_0_1 | RXH_L4_B_2_3; | ||
1866 | else if (v & FW_RSS_VI_CONFIG_CMD_IP4TWOTUPEN) | ||
1867 | info->data = RXH_IP_SRC | RXH_IP_DST; | ||
1868 | break; | ||
1869 | case UDP_V4_FLOW: | ||
1870 | if ((v & FW_RSS_VI_CONFIG_CMD_IP4FOURTUPEN) && | ||
1871 | (v & FW_RSS_VI_CONFIG_CMD_UDPEN)) | ||
1872 | info->data = RXH_IP_SRC | RXH_IP_DST | | ||
1873 | RXH_L4_B_0_1 | RXH_L4_B_2_3; | ||
1874 | else if (v & FW_RSS_VI_CONFIG_CMD_IP4TWOTUPEN) | ||
1875 | info->data = RXH_IP_SRC | RXH_IP_DST; | ||
1876 | break; | ||
1877 | case SCTP_V4_FLOW: | ||
1878 | case AH_ESP_V4_FLOW: | ||
1879 | case IPV4_FLOW: | ||
1880 | if (v & FW_RSS_VI_CONFIG_CMD_IP4TWOTUPEN) | ||
1881 | info->data = RXH_IP_SRC | RXH_IP_DST; | ||
1882 | break; | ||
1883 | case TCP_V6_FLOW: | ||
1884 | if (v & FW_RSS_VI_CONFIG_CMD_IP6FOURTUPEN) | ||
1885 | info->data = RXH_IP_SRC | RXH_IP_DST | | ||
1886 | RXH_L4_B_0_1 | RXH_L4_B_2_3; | ||
1887 | else if (v & FW_RSS_VI_CONFIG_CMD_IP6TWOTUPEN) | ||
1888 | info->data = RXH_IP_SRC | RXH_IP_DST; | ||
1889 | break; | ||
1890 | case UDP_V6_FLOW: | ||
1891 | if ((v & FW_RSS_VI_CONFIG_CMD_IP6FOURTUPEN) && | ||
1892 | (v & FW_RSS_VI_CONFIG_CMD_UDPEN)) | ||
1893 | info->data = RXH_IP_SRC | RXH_IP_DST | | ||
1894 | RXH_L4_B_0_1 | RXH_L4_B_2_3; | ||
1895 | else if (v & FW_RSS_VI_CONFIG_CMD_IP6TWOTUPEN) | ||
1896 | info->data = RXH_IP_SRC | RXH_IP_DST; | ||
1897 | break; | ||
1898 | case SCTP_V6_FLOW: | ||
1899 | case AH_ESP_V6_FLOW: | ||
1900 | case IPV6_FLOW: | ||
1901 | if (v & FW_RSS_VI_CONFIG_CMD_IP6TWOTUPEN) | ||
1902 | info->data = RXH_IP_SRC | RXH_IP_DST; | ||
1903 | break; | ||
1904 | } | ||
1905 | return 0; | ||
1906 | } | ||
1855 | case ETHTOOL_GRXRINGS: | 1907 | case ETHTOOL_GRXRINGS: |
1856 | info->data = netdev2pinfo(dev)->nqsets; | 1908 | info->data = pi->nqsets; |
1857 | return 0; | 1909 | return 0; |
1858 | } | 1910 | } |
1859 | return -EOPNOTSUPP; | 1911 | return -EOPNOTSUPP; |