- if (tbl->mark_enable &&
- ULP_BITMAP_ISSET(parms->act_bitmap->bits,
- BNXT_ULP_ACTION_BIT_MARK)) {
- uint32_t val, mark, gfid, flag;
- /* TBD: Need to determine if GFID is enabled globally */
- if (sizeof(val) != BNXT_ULP_ACT_PROP_SZ_MARK) {
- BNXT_TF_DBG(ERR, "Mark size (%d) != expected (%zu)\n",
- BNXT_ULP_ACT_PROP_SZ_MARK, sizeof(val));
- rc = -EINVAL;
- goto error;
- }
-
- memcpy(&val,
- &a_prop->act_details[BNXT_ULP_ACT_PROP_IDX_MARK],
- sizeof(val));
-
- mark = tfp_be_to_cpu_32(val);
-
- TF_GET_GFID_FROM_FLOW_ID(iparms.flow_id, gfid);
- flag = BNXT_ULP_MARK_GLOBAL_HW_FID;
- rc = ulp_mark_db_mark_add(parms->ulp_ctx,
- flag,
- gfid,
- mark);
- if (rc) {
- BNXT_TF_DBG(ERR, "Failed to add mark to flow\n");
- goto error;
- }
-
- /*
- * Link the mark resource to the flow in the flow db
- * The mark is never the critical resource, so it is 0.
- */
- memset(&fid_parms, 0, sizeof(fid_parms));
- fid_parms.direction = tbl->direction;
- fid_parms.resource_func = BNXT_ULP_RESOURCE_FUNC_HW_FID;
- fid_parms.resource_type = flag;
- fid_parms.resource_hndl = gfid;
- fid_parms.critical_resource = 0;
-
- rc = ulp_flow_db_resource_add(parms->ulp_ctx,
- parms->tbl_idx,
- parms->fid,
- &fid_parms);
- if (rc) {
- BNXT_TF_DBG(ERR, "Fail to link res to flow rc = %d\n",
- rc);
- /* Need to free the identifier, so goto error */
- goto error;
- }
- }
-