[PATCH v1 7/7] gianfar: Basic Support for programming hash rules

Previous thread: [PATCH v1 3/7] gianfar: Add Multiple Queue Support by Sandeep Gopalpet on Monday, October 26, 2009 - 9:27 am. (1 message)

Next thread: [PATCH v1 6/7] gianfar: Add Multiple group Support by Sandeep Gopalpet on Monday, October 26, 2009 - 9:27 am. (1 message)
From: Sandeep Gopalpet
Date: Monday, October 26, 2009 - 9:27 am

This patch provides basic hash rules programming via the ethtool
interface.

Signed-off-by: Sandeep Gopalpet <sandeep.kumar@freescale.com>
---
 drivers/net/gianfar.c         |   73 +++++++++++++
 drivers/net/gianfar.h         |   93 ++++++++++++++++
 drivers/net/gianfar_ethtool.c |  236 +++++++++++++++++++++++++++++++++++++++++
 include/linux/ethtool.h       |    2 +
 4 files changed, 404 insertions(+), 0 deletions(-)

diff --git a/drivers/net/gianfar.c b/drivers/net/gianfar.c
index a60e05f..c9179d7 100644
--- a/drivers/net/gianfar.c
+++ b/drivers/net/gianfar.c
@@ -416,6 +416,9 @@ static const struct net_device_ops gfar_netdev_ops = {
 #endif
 };
 
+unsigned int ftp_rqfpr[MAX_FILER_IDX + 1];
+unsigned int ftp_rqfcr[MAX_FILER_IDX + 1];
+
 inline void lock_rx_qs(struct gfar_private *priv)
 {
 	int i = 0x0;
@@ -751,6 +754,73 @@ static unsigned int reverse_bitmap(unsigned int bit_map, unsigned int max_qs)
 	}
 	return new_bit_map;
 }
+
+u32 cluster_entry_per_class(struct gfar_private *priv, u32 rqfar, u32 class)
+{
+	u32 rqfpr = FPR_FILER_MASK;
+	u32 rqfcr = 0x0;
+
+	rqfar--;
+	rqfcr = RQFCR_CLE | RQFCR_PID_MASK | RQFCR_CMP_EXACT;
+	ftp_rqfpr[rqfar] = rqfpr;
+	ftp_rqfcr[rqfar] = rqfcr;
+	gfar_write_filer(priv, rqfar, rqfcr, rqfpr);
+
+	rqfar--;
+	rqfcr = RQFCR_CMP_NOMATCH;
+	ftp_rqfpr[rqfar] = rqfpr;
+	ftp_rqfcr[rqfar] = rqfcr;
+	gfar_write_filer(priv, rqfar, rqfcr, rqfpr);
+
+	rqfar--;
+	rqfcr = RQFCR_CMP_EXACT | RQFCR_PID_PARSE | RQFCR_CLE | RQFCR_AND;
+	rqfpr = class;
+	ftp_rqfcr[rqfar] = rqfcr;
+	ftp_rqfpr[rqfar] = rqfpr;
+	gfar_write_filer(priv, rqfar, rqfcr, rqfpr);
+
+	rqfar--;
+	rqfcr = RQFCR_CMP_EXACT | RQFCR_PID_MASK | RQFCR_AND;
+	rqfpr = class;
+	ftp_rqfcr[rqfar] = rqfcr;
+	ftp_rqfpr[rqfar] = rqfpr;
+	gfar_write_filer(priv, rqfar, rqfcr, rqfpr);
+
+	return rqfar;
+}
+
+static void gfar_init_filer_table(struct gfar_private *priv)
+{
+	int i = 0x0;
+	u32 rqfar = MAX_FILER_IDX;
+	u32 rqfcr = 0x0;
+	u32 rqfpr = FPR_FILER_MASK;
+
+	/* ...
Previous thread: [PATCH v1 3/7] gianfar: Add Multiple Queue Support by Sandeep Gopalpet on Monday, October 26, 2009 - 9:27 am. (1 message)

Next thread: [PATCH v1 6/7] gianfar: Add Multiple group Support by Sandeep Gopalpet on Monday, October 26, 2009 - 9:27 am. (1 message)