}
static inline int32_t
-ulp_mapper_index_entry_free(struct bnxt_ulp_context *ulp __rte_unused,
+ulp_mapper_index_entry_free(struct bnxt_ulp_context *ulp,
struct tf *tfp,
struct ulp_flow_db_res_params *res)
{
.idx = (uint32_t)res->resource_hndl
};
+ /*
+ * Just set the table scope, it will be ignored if not necessary
+ * by the tf_free_tbl_entry
+ */
+ bnxt_ulp_cntxt_tbl_scope_id_get(ulp, &fparms.tbl_scope_id);
+
return tf_free_tbl_entry(tfp, &fparms);
}
int32_t rc = 0;
int32_t trc;
uint64_t idx;
+ uint32_t tbl_scope_id;
+
+ bnxt_ulp_cntxt_tbl_scope_id_get(parms->ulp_ctx, &tbl_scope_id);
/* Set the allocation parameters for the table*/
alloc_parms.dir = atbls->direction;
alloc_parms.search_enable = atbls->srch_b4_alloc;
alloc_parms.result = ulp_blob_data_get(blob,
&alloc_parms.result_sz_in_bytes);
+ alloc_parms.tbl_scope_id = tbl_scope_id;
if (!alloc_parms.result) {
BNXT_TF_DBG(ERR, "blob is not populated\n");
return -EINVAL;
}
/* Need to calculate the idx for the result record */
- /*
- * TBD: Need to get the stride from tflib instead of having to
- * understand the construction of the pointer
- */
uint64_t tmpidx = alloc_parms.idx;
if (atbls->table_type == TF_TBL_TYPE_EXT)
- tmpidx = (alloc_parms.idx * TF_ACTION_RECORD_SZ) >> 4;
+ tmpidx = TF_ACT_REC_OFFSET_2_PTR(alloc_parms.idx);
else
tmpidx = alloc_parms.idx;
set_parm.data_sz_in_bytes = length / 8;
if (set_parm.type == TF_TBL_TYPE_EXT)
- bnxt_ulp_cntxt_tbl_scope_id_get(parms->ulp_ctx,
- &set_parm.tbl_scope_id);
- else
- set_parm.tbl_scope_id = 0;
+ set_parm.tbl_scope_id = tbl_scope_id;
/* set the table entry */
rc = tf_set_tbl_entry(parms->tfp, &set_parm);
struct tf_alloc_tbl_entry_parms aparms = { 0 };
struct tf_set_tbl_entry_parms sparms = { 0 };
struct tf_free_tbl_entry_parms free_parms = { 0 };
-
+ uint32_t tbl_scope_id;
struct tf *tfp = bnxt_ulp_cntxt_tfp_get(parms->ulp_ctx);
+ bnxt_ulp_cntxt_tbl_scope_id_get(parms->ulp_ctx, &tbl_scope_id);
+
if (!ulp_blob_init(&data, tbl->result_bit_size, parms->order)) {
BNXT_TF_DBG(ERR, "Failed initial index table blob\n");
return -EINVAL;
aparms.search_enable = tbl->srch_b4_alloc;
aparms.result = ulp_blob_data_get(&data, &tmplen);
aparms.result_sz_in_bytes = ULP_SZ_BITS2BYTES(tbl->result_bit_size);
+ aparms.tbl_scope_id = tbl_scope_id;
/* All failures after the alloc succeeds require a free */
rc = tf_alloc_tbl_entry(tfp, &aparms);
sparms.data_sz_in_bytes =
ULP_SZ_BITS2BYTES(tbl->result_bit_size);
sparms.idx = aparms.idx;
+ sparms.tbl_scope_id = tbl_scope_id;
rc = tf_set_tbl_entry(tfp, &sparms);
if (rc) {
free_parms.dir = tbl->direction;
free_parms.type = tbl->table_type;
free_parms.idx = aparms.idx;
+ free_parms.tbl_scope_id = tbl_scope_id;
trc = tf_free_tbl_entry(tfp, &free_parms);
if (trc)