*/
#include <rte_common.h>
+#include <rte_cycles.h>
#include <rte_malloc.h>
#include <rte_log.h>
#include <rte_alarm.h>
* num_counters [in] The number of counters
*
*/
-__rte_unused static int32_t ulp_bulk_get_flow_stats(struct tf *tfp,
- struct bnxt_ulp_fc_info *fc_info,
- enum tf_dir dir, uint32_t num_counters)
+__rte_unused static int32_t
+ulp_bulk_get_flow_stats(struct tf *tfp,
+ struct bnxt_ulp_fc_info *fc_info,
+ enum tf_dir dir,
+ struct bnxt_ulp_device_params *dparms)
/* MARK AS UNUSED FOR NOW TO AVOID COMPILATION ERRORS TILL API is RESOLVED */
{
int rc = 0;
parms.dir = dir;
parms.type = stype;
parms.starting_idx = fc_info->shadow_hw_tbl[dir].start_idx;
- parms.num_entries = num_counters;
+ parms.num_entries = dparms->flow_count_db_entries / 2; /* direction */
/*
* TODO:
* Size of an entry needs to obtained from template
return rc;
}
- for (i = 0; i < num_counters; i++) {
+ for (i = 0; i < parms.num_entries; i++) {
/* TBD - Get PKT/BYTE COUNT SHIFT/MASK from Template */
sw_acc_tbl_entry = &fc_info->sw_acc_tbl[dir][i];
if (!sw_acc_tbl_entry->valid)
continue;
- sw_acc_tbl_entry->pkt_count += FLOW_CNTR_PKTS(stats[i]);
- sw_acc_tbl_entry->byte_count += FLOW_CNTR_BYTES(stats[i]);
+ sw_acc_tbl_entry->pkt_count += FLOW_CNTR_PKTS(stats[i], dparms);
+ sw_acc_tbl_entry->byte_count += FLOW_CNTR_BYTES(stats[i],
+ dparms);
}
return rc;
static int ulp_get_single_flow_stat(struct tf *tfp,
struct bnxt_ulp_fc_info *fc_info,
enum tf_dir dir,
- uint32_t hw_cntr_id)
+ uint32_t hw_cntr_id,
+ struct bnxt_ulp_device_params *dparms)
{
int rc = 0;
struct tf_get_tbl_entry_parms parms = { 0 };
/* TBD - Get PKT/BYTE COUNT SHIFT/MASK from Template */
sw_cntr_indx = hw_cntr_id - fc_info->shadow_hw_tbl[dir].start_idx;
sw_acc_tbl_entry = &fc_info->sw_acc_tbl[dir][sw_cntr_indx];
- sw_acc_tbl_entry->pkt_count += FLOW_CNTR_PKTS(stats);
- sw_acc_tbl_entry->byte_count += FLOW_CNTR_BYTES(stats);
+ sw_acc_tbl_entry->pkt_count += FLOW_CNTR_PKTS(stats, dparms);
+ sw_acc_tbl_entry->byte_count += FLOW_CNTR_BYTES(stats, dparms);
return rc;
}
continue;
hw_cntr_id = ulp_fc_info->sw_acc_tbl[i][j].hw_cntr_id;
rc = ulp_get_single_flow_stat(tfp, ulp_fc_info, i,
- hw_cntr_id);
+ hw_cntr_id, dparms);
if (rc)
break;
}
#define FLOW_CNTR_BYTE_WIDTH 36
#define FLOW_CNTR_BYTE_MASK (((uint64_t)1 << FLOW_CNTR_BYTE_WIDTH) - 1)
-#define FLOW_CNTR_PKTS(v) ((v) >> FLOW_CNTR_BYTE_WIDTH)
-#define FLOW_CNTR_BYTES(v) ((v) & FLOW_CNTR_BYTE_MASK)
+#define FLOW_CNTR_PKTS(v, d) (((v) & (d)->packet_count_mask) >> \
+ (d)->packet_count_shift)
+#define FLOW_CNTR_BYTES(v, d) (((v) & (d)->byte_count_mask) >> \
+ (d)->byte_count_shift)
struct sw_acc_counter {
uint64_t pkt_count;