From mboxrd@z Thu Jan  1 00:00:00 1970
Return-Path: <hzhan75@shecgisg004.sh.intel.com>
Received: from mga02.intel.com (mga02.intel.com [134.134.136.20])
 by dpdk.org (Postfix) with ESMTP id A699930D
 for <dev@dpdk.org>; Thu,  5 Jun 2014 07:11:28 +0200 (CEST)
Received: from orsmga002.jf.intel.com ([10.7.209.21])
 by orsmga101.jf.intel.com with ESMTP; 04 Jun 2014 22:11:30 -0700
X-ExtLoop1: 1
X-IronPort-AV: E=Sophos;i="4.98,978,1392192000"; d="scan'208";a="551861426"
Received: from shilc102.sh.intel.com ([10.239.39.44])
 by orsmga002.jf.intel.com with ESMTP; 04 Jun 2014 22:11:28 -0700
Received: from shecgisg004.sh.intel.com (shecgisg004.sh.intel.com
 [10.239.29.89])
 by shilc102.sh.intel.com (8.13.6/8.13.6/SuSE Linux 0.8) with ESMTP id
 s555BOKl025144; Thu, 5 Jun 2014 13:11:26 +0800
Received: from shecgisg004.sh.intel.com (localhost [127.0.0.1])
 by shecgisg004.sh.intel.com (8.13.6/8.13.6/SuSE Linux 0.8) with ESMTP id
 s555BKx7023965; Thu, 5 Jun 2014 13:11:22 +0800
Received: (from hzhan75@localhost)
 by shecgisg004.sh.intel.com (8.13.6/8.13.6/Submit) id s555BKpr023961;
 Thu, 5 Jun 2014 13:11:20 +0800
From: Helin Zhang <helin.zhang@intel.com>
To: dev@dpdk.org
Date: Thu,  5 Jun 2014 13:08:54 +0800
Message-Id: <1401944951-23783-11-git-send-email-helin.zhang@intel.com>
X-Mailer: git-send-email 1.7.0.7
In-Reply-To: <1401944951-23783-1-git-send-email-helin.zhang@intel.com>
References: <1401944951-23783-1-git-send-email-helin.zhang@intel.com>
Subject: [dpdk-dev] [PATCH v2 10/27] igb: enlarge the hash flags of RSS to
	64 bits
X-BeenThere: dev@dpdk.org
X-Mailman-Version: 2.1.15
Precedence: list
List-Id: patches and discussions about DPDK <dev.dpdk.org>
List-Unsubscribe: <http://dpdk.org/ml/options/dev>,
 <mailto:dev-request@dpdk.org?subject=unsubscribe>
List-Archive: <http://dpdk.org/ml/archives/dev/>
List-Post: <mailto:dev@dpdk.org>
List-Help: <mailto:dev-request@dpdk.org?subject=help>
List-Subscribe: <http://dpdk.org/ml/listinfo/dev>,
 <mailto:dev-request@dpdk.org?subject=subscribe>
X-List-Received-Date: Thu, 05 Jun 2014 05:11:29 -0000

As the hash flags of RSS has been enlarged from 16 bits to 64 bits
in 'struct rte_eth_rss_conf' in rte_ethdev.h, the size of it in
igb has to be enlarged as well. In addition, the flags for igb
only are masked, as there are flags for others in those 64 bits.

Signed-off-by: Helin Zhang <helin.zhang@intel.com>
Signed-off-by: Jing Chen <jing.d.chen@intel.com>
Acked-by: Cunming Liang <cunming.liang@intel.com>
Acked-by: Jijiang Liu <jijiang.liu@intel.com>
Acked-by: Jingjing Wu <jingjing.wu@intel.com>
Tested-by: Waterman Cao <waterman.cao@intel.com>
---
 lib/librte_pmd_e1000/igb_rxtx.c | 21 ++++++++++++++++-----
 1 file changed, 16 insertions(+), 5 deletions(-)

diff --git a/lib/librte_pmd_e1000/igb_rxtx.c b/lib/librte_pmd_e1000/igb_rxtx.c
index ae53428..cbb9588 100644
--- a/lib/librte_pmd_e1000/igb_rxtx.c
+++ b/lib/librte_pmd_e1000/igb_rxtx.c
@@ -73,6 +73,17 @@
 #include "e1000/e1000_api.h"
 #include "e1000_ethdev.h"
 
+#define IGB_RSS_OFFLOAD_ALL ( \
+		ETH_RSS_IPV4 | \
+		ETH_RSS_IPV4_TCP | \
+		ETH_RSS_IPV6 | \
+		ETH_RSS_IPV6_EX | \
+		ETH_RSS_IPV6_TCP | \
+		ETH_RSS_IPV6_TCP_EX | \
+		ETH_RSS_IPV4_UDP | \
+		ETH_RSS_IPV6_UDP | \
+		ETH_RSS_IPV6_UDP_EX)
+
 static inline struct rte_mbuf *
 rte_rxmbuf_alloc(struct rte_mempool *mp)
 {
@@ -1524,7 +1535,7 @@ igb_hw_rss_hash_set(struct e1000_hw *hw, struct rte_eth_rss_conf *rss_conf)
 	uint8_t  *hash_key;
 	uint32_t rss_key;
 	uint32_t mrqc;
-	uint16_t rss_hf;
+	uint64_t rss_hf;
 	uint16_t i;
 
 	hash_key = rss_conf->rss_key;
@@ -1569,7 +1580,7 @@ eth_igb_rss_hash_update(struct rte_eth_dev *dev,
 {
 	struct e1000_hw *hw;
 	uint32_t mrqc;
-	uint16_t rss_hf;
+	uint64_t rss_hf;
 
 	hw = E1000_DEV_PRIVATE_TO_HW(dev->data->dev_private);
 
@@ -1579,7 +1590,7 @@ eth_igb_rss_hash_update(struct rte_eth_dev *dev,
 	 * initialization time, or does not attempt to enable RSS, if RSS was
 	 * disabled at initialization time.
 	 */
-	rss_hf = rss_conf->rss_hf;
+	rss_hf = rss_conf->rss_hf & IGB_RSS_OFFLOAD_ALL;
 	mrqc = E1000_READ_REG(hw, E1000_MRQC);
 	if (!(mrqc & E1000_MRQC_ENABLE_MASK)) { /* RSS disabled */
 		if (rss_hf != 0) /* Enable RSS */
@@ -1600,7 +1611,7 @@ int eth_igb_rss_hash_conf_get(struct rte_eth_dev *dev,
 	uint8_t *hash_key;
 	uint32_t rss_key;
 	uint32_t mrqc;
-	uint16_t rss_hf;
+	uint64_t rss_hf;
 	uint16_t i;
 
 	hw = E1000_DEV_PRIVATE_TO_HW(dev->data->dev_private);
@@ -1676,7 +1687,7 @@ igb_rss_configure(struct rte_eth_dev *dev)
 	 * the RSS hash of input packets.
 	 */
 	rss_conf = dev->data->dev_conf.rx_adv_conf.rss_conf;
-	if (rss_conf.rss_hf == 0) {
+	if ((rss_conf.rss_hf & IGB_RSS_OFFLOAD_ALL) == 0) {
 		igb_rss_disable(dev);
 		return;
 	}
-- 
1.8.1.4