/* SPDX-License-Identifier: BSD-3-Clause
- * Copyright(c) 2014-2019 Broadcom
+ * Copyright(c) 2014-2021 Broadcom
* All rights reserved.
*/
#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;
uint64_t byte_count;
bool valid;
+ uint32_t hw_cntr_id;
+ uint32_t parent_flow_id;
};
struct hw_fc_mem_info {
*/
void *mem_pa;
uint32_t start_idx;
+ bool start_idx_is_set;
};
struct bnxt_ulp_fc_info {
* ctxt [in] The ulp context for the flow counter manager
*
*/
-
bool ulp_fc_mgr_thread_isstarted(struct bnxt_ulp_context *ctxt);
+/*
+ * Fill the rte_flow_query_count 'data' argument passed
+ * in the rte_flow_query() with the values obtained and
+ * accumulated locally.
+ *
+ * ctxt [in] The ulp context for the flow counter manager
+ *
+ * flow_id [in] The HW flow ID
+ *
+ * count [out] The rte_flow_query_count 'data' that is set
+ *
+ */
+int ulp_fc_mgr_query_count_get(struct bnxt_ulp_context *ulp_ctx,
+ uint32_t flow_id,
+ struct rte_flow_query_count *count);
+
+/*
+ * Set the parent flow if in the SW accumulator table entry
+ *
+ * ctxt [in] The ulp context for the flow counter manager
+ *
+ * dir [in] The direction of the flow
+ *
+ * hw_cntr_id [in] The HW flow counter ID
+ *
+ * fid [in] parent flow id
+ *
+ */
+int32_t ulp_fc_mgr_cntr_parent_flow_set(struct bnxt_ulp_context *ctxt,
+ enum tf_dir dir,
+ uint32_t hw_cntr_id,
+ uint32_t fid);
+
#endif /* _ULP_FC_MGR_H_ */