diff options
author | Govindarajulu Varadarajan <_govind@gmx.com> | 2014-12-10 03:10:23 -0500 |
---|---|---|
committer | David S. Miller <davem@davemloft.net> | 2014-12-10 14:41:48 -0500 |
commit | 4f675eb2a736dfb65d68a00ff38e9342252eeabc (patch) | |
tree | d4cc906539c74be231e0d4c26174e52bb99e1900 /drivers/net/ethernet/cisco/enic/enic_main.c | |
parent | 7dbea3e8662eb491e9da109cf8ffc372e160fe9a (diff) |
enic: add support for set/get rss hash key
This patch adds support for setting/getting rss hash key using ethtool.
v2:
respin patch to support RSS hash function changes.
Signed-off-by: Govindarajulu Varadarajan <_govind@gmx.com>
Signed-off-by: David S. Miller <davem@davemloft.net>
Diffstat (limited to 'drivers/net/ethernet/cisco/enic/enic_main.c')
-rw-r--r-- | drivers/net/ethernet/cisco/enic/enic_main.c | 13 |
1 files changed, 9 insertions, 4 deletions
diff --git a/drivers/net/ethernet/cisco/enic/enic_main.c b/drivers/net/ethernet/cisco/enic/enic_main.c index 86ee350e57f0..868d0f605d60 100644 --- a/drivers/net/ethernet/cisco/enic/enic_main.c +++ b/drivers/net/ethernet/cisco/enic/enic_main.c | |||
@@ -1888,11 +1888,10 @@ static int enic_dev_hang_reset(struct enic *enic) | |||
1888 | return err; | 1888 | return err; |
1889 | } | 1889 | } |
1890 | 1890 | ||
1891 | static int enic_set_rsskey(struct enic *enic) | 1891 | int __enic_set_rsskey(struct enic *enic) |
1892 | { | 1892 | { |
1893 | union vnic_rss_key *rss_key_buf_va; | 1893 | union vnic_rss_key *rss_key_buf_va; |
1894 | dma_addr_t rss_key_buf_pa; | 1894 | dma_addr_t rss_key_buf_pa; |
1895 | u8 rss_key[ENIC_RSS_LEN]; | ||
1896 | int i, kidx, bidx, err; | 1895 | int i, kidx, bidx, err; |
1897 | 1896 | ||
1898 | rss_key_buf_va = pci_zalloc_consistent(enic->pdev, | 1897 | rss_key_buf_va = pci_zalloc_consistent(enic->pdev, |
@@ -1901,11 +1900,10 @@ static int enic_set_rsskey(struct enic *enic) | |||
1901 | if (!rss_key_buf_va) | 1900 | if (!rss_key_buf_va) |
1902 | return -ENOMEM; | 1901 | return -ENOMEM; |
1903 | 1902 | ||
1904 | netdev_rss_key_fill(rss_key, ENIC_RSS_LEN); | ||
1905 | for (i = 0; i < ENIC_RSS_LEN; i++) { | 1903 | for (i = 0; i < ENIC_RSS_LEN; i++) { |
1906 | kidx = i / ENIC_RSS_BYTES_PER_KEY; | 1904 | kidx = i / ENIC_RSS_BYTES_PER_KEY; |
1907 | bidx = i % ENIC_RSS_BYTES_PER_KEY; | 1905 | bidx = i % ENIC_RSS_BYTES_PER_KEY; |
1908 | rss_key_buf_va->key[kidx].b[bidx] = rss_key[i]; | 1906 | rss_key_buf_va->key[kidx].b[bidx] = enic->rss_key[i]; |
1909 | } | 1907 | } |
1910 | spin_lock_bh(&enic->devcmd_lock); | 1908 | spin_lock_bh(&enic->devcmd_lock); |
1911 | err = enic_set_rss_key(enic, | 1909 | err = enic_set_rss_key(enic, |
@@ -1919,6 +1917,13 @@ static int enic_set_rsskey(struct enic *enic) | |||
1919 | return err; | 1917 | return err; |
1920 | } | 1918 | } |
1921 | 1919 | ||
1920 | static int enic_set_rsskey(struct enic *enic) | ||
1921 | { | ||
1922 | netdev_rss_key_fill(enic->rss_key, ENIC_RSS_LEN); | ||
1923 | |||
1924 | return __enic_set_rsskey(enic); | ||
1925 | } | ||
1926 | |||
1922 | static int enic_set_rsscpu(struct enic *enic, u8 rss_hash_bits) | 1927 | static int enic_set_rsscpu(struct enic *enic, u8 rss_hash_bits) |
1923 | { | 1928 | { |
1924 | dma_addr_t rss_cpu_buf_pa; | 1929 | dma_addr_t rss_cpu_buf_pa; |