Skip site navigation (1)Skip section navigation (2)
Date:      Wed, 1 Jun 2011 01:32:58 +0000 (UTC)
From:      Navdeep Parhar <np@FreeBSD.org>
To:        src-committers@freebsd.org, svn-src-all@freebsd.org, svn-src-head@freebsd.org
Subject:   svn commit: r222552 - head/sys/dev/cxgbe
Message-ID:  <201106010132.p511WwC5048212@svn.freebsd.org>

next in thread | raw e-mail | index | archive | help
Author: np
Date: Wed Jun  1 01:32:58 2011
New Revision: 222552
URL: http://svn.freebsd.org/changeset/base/222552

Log:
  Provide hit-count with rest of the information about a filter.
  
  MFC after:	1 week

Modified:
  head/sys/dev/cxgbe/t4_main.c

Modified: head/sys/dev/cxgbe/t4_main.c
==============================================================================
--- head/sys/dev/cxgbe/t4_main.c	Tue May 31 23:49:13 2011	(r222551)
+++ head/sys/dev/cxgbe/t4_main.c	Wed Jun  1 01:32:58 2011	(r222552)
@@ -305,6 +305,7 @@ static uint32_t mode_to_fconf(uint32_t);
 static uint32_t fspec_to_fconf(struct t4_filter_specification *);
 static int get_filter_mode(struct adapter *, uint32_t *);
 static int set_filter_mode(struct adapter *, uint32_t);
+static inline uint64_t get_filter_hits(struct adapter *, uint32_t);
 static int get_filter(struct adapter *, struct t4_filter *);
 static int set_filter(struct adapter *, struct t4_filter *);
 static int del_filter(struct adapter *, struct t4_filter *);
@@ -3064,6 +3065,20 @@ done:
 	return (rc);
 }
 
+static inline uint64_t
+get_filter_hits(struct adapter *sc, uint32_t fid)
+{
+	uint32_t tcb_base = t4_read_reg(sc, A_TP_CMM_TCB_BASE);
+	uint64_t hits;
+
+	t4_write_reg(sc, PCIE_MEM_ACCESS_REG(A_PCIE_MEM_ACCESS_OFFSET, 0),
+	    tcb_base + (fid + sc->tids.ftid_base) * TCB_SIZE);
+	t4_read_reg(sc, PCIE_MEM_ACCESS_REG(A_PCIE_MEM_ACCESS_OFFSET, 0));
+	hits = t4_read_reg64(sc, MEMWIN0_BASE + 16);
+
+	return (be64toh(hits));
+}
+
 static int
 get_filter(struct adapter *sc, struct t4_filter *t)
 {
@@ -3087,7 +3102,10 @@ get_filter(struct adapter *sc, struct t4
 			t->idx = i;
 			t->l2tidx = f->l2t ? f->l2t->idx : 0;
 			t->smtidx = f->smtidx;
-			t->hits = 0;	/* XXX implement */
+			if (f->fs.hitcnts)
+				t->hits = get_filter_hits(sc, t->idx);
+			else
+				t->hits = UINT64_MAX;
 			t->fs = f->fs;
 
 			return (0);



Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?201106010132.p511WwC5048212>