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);
_______________________________________________
svn-src-head@freebsd.org mailing list
http://lists.freebsd.org/mailman/listinfo/svn-src-head
To unsubscribe, send any mail to "svn-src-head-unsubscr...@freebsd.org"

Reply via email to