support xmitwait counters

Signed-off-by: Doron Shoham <[email protected]>
---
 ibsim/sim.h     |    3 +++
 ibsim/sim_mad.c |   11 ++++++++++-
 2 files changed, 13 insertions(+), 1 deletions(-)

diff --git a/ibsim/sim.h b/ibsim/sim.h
index 5e9b4f0..5a8a92f 100644
--- a/ibsim/sim.h
+++ b/ibsim/sim.h
@@ -111,6 +111,7 @@ enum GS_PERF_COUNTER_SELECT_MASK {
        GS_PERF_RCV_BYTES_MASK = (1UL << 13),   // PORT_RCV_DATA
        GS_PERF_XMT_PKTS_MASK = (1UL << 14),    // PORT_XMIT_PKTS
        GS_PERF_RCV_PKTS_MASK = (1UL << 15),    // PORT_RCV_PKTS
+       GS_PERF_XMT_WAIT_MASK = (1UL << 16),    // PORT_XMIT_WAIT
 };
 
 enum GS_PC_EXT_SELECT_MASK {
@@ -141,6 +142,7 @@ enum GS_PERF_COUNTER_SELECT_LIMIT {
        GS_PERF_RCV_BYTES_LIMIT = 0xffffffff,
        GS_PERF_XMT_PKTS_LIMIT = 0xffffffff,
        GS_PERF_RCV_PKTS_LIMIT = 0xffffffff,
+       GS_PERF_XMT_WAIT_LIMIT = 0xffffffff,
 };
 
 typedef struct Port Port;
@@ -182,6 +184,7 @@ struct Portcounters {
        uint8_t errs_rcvconstraint;
        uint16_t errs_rcvswitchrelay;
        uint8_t errs_excessbufovrrun;
+       uint32_t xmt_wait;
 };
 
 struct Port {
diff --git a/ibsim/sim_mad.c b/ibsim/sim_mad.c
index d2c313c..f4e7359 100644
--- a/ibsim/sim_mad.c
+++ b/ibsim/sim_mad.c
@@ -567,6 +567,8 @@ static void pc_reset(Portcounters * pc, uint mask)
                pc->flow_xmt_pkts = 0;
        if (mask & GS_PERF_RCV_PKTS_MASK)
                pc->flow_rcv_pkts = 0;
+       if (mask & GS_PERF_XMT_WAIT_MASK)
+               pc->xmt_wait = 0;
 }
 
 static inline uint32_t addval(uint32_t val, uint32_t delta, uint32_t max)
@@ -641,6 +643,9 @@ static int pc_updated(Port ** srcport, Port * destport)
 
 static void pc_sum(Portcounters * totals, Portcounters * pc)
 {
+       totals->xmt_wait =
+           addval(totals->xmt_wait, pc->xmt_wait,
+                  GS_PERF_XMT_WAIT_LIMIT);
        totals->flow_xmt_pkts =
            addval(totals->flow_xmt_pkts, pc->flow_xmt_pkts,
                   GS_PERF_XMT_PKTS_LIMIT);
@@ -691,6 +696,7 @@ static void pc_sum(Portcounters * totals, Portcounters * pc)
 
 static void pc_get(Portcounters * pc, uint8_t * data)
 {
+       mad_set_field(data, 0, IB_PC_XMT_WAIT_F, pc->xmt_wait);
        mad_set_field(data, 0, IB_PC_XMT_PKTS_F, pc->flow_xmt_pkts);
        mad_set_field(data, 0, IB_PC_XMT_BYTES_F, pc->flow_xmt_bytes);
        mad_set_field(data, 0, IB_PC_RCV_PKTS_F, pc->flow_rcv_pkts);
@@ -716,7 +722,7 @@ static int do_portcounters(Port * port, unsigned op, 
uint32_t unused,
        Node *node = port->node;
        int portnum = mad_get_field(data, 0, IB_PC_PORT_SELECT_F);
        Portcounters totals;
-       uint mask;
+       uint mask, mask2;
        Port *p;
        int i;
 
@@ -731,6 +737,9 @@ static int do_portcounters(Port * port, unsigned op, 
uint32_t unused,
              node->nodeguid, port->portguid, portnum);
 
        mask = mad_get_field(data, 0, IB_PC_COUNTER_SELECT_F);
+       mask2 = mad_get_field(data, 0, IB_PC_COUNTER_SELECT2_F);
+       if (mask2)
+               mask |= GS_PERF_XMT_WAIT_MASK;
 
        if (portnum != 0xff) {
                if (!(p = node_get_port(node, portnum)))
-- 
1.5.5

_______________________________________________
general mailing list
[email protected]
http://lists.openfabrics.org/cgi-bin/mailman/listinfo/general

To unsubscribe, please visit http://openib.org/mailman/listinfo/openib-general

Reply via email to