@@ -899,11 +899,13 @@ ulp_mapper_mark_gfid_process(struct bnxt_ulp_mapper_parms *parms,
{
struct ulp_flow_db_res_params fid_parms;
uint32_t mark, gfid, mark_flag;
+ enum bnxt_ulp_mark_db_opcode mark_op = tbl->mark_db_opcode;
int32_t rc = 0;
- if (!(tbl->mark_enable &&
- (ULP_BITMAP_ISSET(parms->act_bitmap->bits,
- BNXT_ULP_ACTION_BIT_MARK) || tbl->vfr_flag)))
+ if (mark_op == BNXT_ULP_MARK_DB_OPCODE_NOP ||
+ !(mark_op == BNXT_ULP_MARK_DB_OPCODE_SET_IF_MARK_ACTION &&
+ ULP_BITMAP_ISSET(parms->act_bitmap->bits,
+ BNXT_ULP_ACTION_BIT_MARK)))
return rc; /* no need to perform gfid process */
/* Get the mark id details from action property */
@@ -913,7 +915,7 @@ ulp_mapper_mark_gfid_process(struct bnxt_ulp_mapper_parms *parms,
TF_GET_GFID_FROM_FLOW_ID(flow_id, gfid);
mark_flag = BNXT_ULP_MARK_GLOBAL_HW_FID;
- mark_flag |= (tbl->vfr_flag) ? BNXT_ULP_MARK_VFR_ID : 0;
+
rc = ulp_mark_db_mark_add(parms->ulp_ctx, mark_flag,
gfid, mark);
if (rc) {
@@ -941,11 +943,13 @@ ulp_mapper_mark_act_ptr_process(struct bnxt_ulp_mapper_parms *parms,
struct ulp_flow_db_res_params fid_parms;
uint32_t act_idx, mark, mark_flag;
uint64_t val64;
+ enum bnxt_ulp_mark_db_opcode mark_op = tbl->mark_db_opcode;
int32_t rc = 0;
- if (!(tbl->mark_enable &&
- (ULP_BITMAP_ISSET(parms->act_bitmap->bits,
- BNXT_ULP_ACTION_BIT_MARK) || tbl->vfr_flag)))
+ if (mark_op == BNXT_ULP_MARK_DB_OPCODE_NOP ||
+ !(mark_op == BNXT_ULP_MARK_DB_OPCODE_SET_IF_MARK_ACTION &&
+ ULP_BITMAP_ISSET(parms->act_bitmap->bits,
+ BNXT_ULP_ACTION_BIT_MARK)))
return rc; /* no need to perform mark action process */
/* Get the mark id details from action property */
@@ -961,7 +965,55 @@ ulp_mapper_mark_act_ptr_process(struct bnxt_ulp_mapper_parms *parms,
}
act_idx = tfp_be_to_cpu_64(val64);
mark_flag = BNXT_ULP_MARK_LOCAL_HW_FID;
- mark_flag |= (tbl->vfr_flag) ? BNXT_ULP_MARK_VFR_ID : 0;
+ rc = ulp_mark_db_mark_add(parms->ulp_ctx, mark_flag,
+ act_idx, mark);
+ if (rc) {
+ BNXT_TF_DBG(ERR, "Failed to add mark to flow\n");
+ return rc;
+ }
+ fid_parms.direction = tbl->direction;
+ fid_parms.resource_func = BNXT_ULP_RESOURCE_FUNC_HW_FID;
+ fid_parms.critical_resource = BNXT_ULP_CRITICAL_RESOURCE_NO;
+ fid_parms.resource_type = mark_flag;
+ fid_parms.resource_hndl = act_idx;
+ 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);
+ return rc;
+}
+
+static int32_t
+ulp_mapper_mark_vfr_idx_process(struct bnxt_ulp_mapper_parms *parms,
+ struct bnxt_ulp_mapper_tbl_info *tbl)
+{
+ struct ulp_flow_db_res_params fid_parms;
+ uint32_t act_idx, mark, mark_flag;
+ uint64_t val64;
+ enum bnxt_ulp_mark_db_opcode mark_op = tbl->mark_db_opcode;
+ int32_t rc = 0;
+
+ if (mark_op == BNXT_ULP_MARK_DB_OPCODE_NOP ||
+ mark_op == BNXT_ULP_MARK_DB_OPCODE_SET_IF_MARK_ACTION)
+ return rc; /* no need to perform mark action process */
+
+ /* Get the mark id details from the computed field of dev port id */
+ mark = ULP_COMP_FLD_IDX_RD(parms, BNXT_ULP_CF_IDX_DEV_PORT_ID);
+
+ /* Get the main action pointer */
+ if (!ulp_regfile_read(parms->regfile,
+ BNXT_ULP_REGFILE_INDEX_MAIN_ACTION_PTR,
+ &val64)) {
+ BNXT_TF_DBG(ERR, "read action ptr main failed\n");
+ return -EINVAL;
+ }
+ act_idx = tfp_be_to_cpu_64(val64);
+
+ /* Set the mark flag to local fid and vfr flag */
+ mark_flag = BNXT_ULP_MARK_LOCAL_HW_FID | BNXT_ULP_MARK_VFR_ID;
+
rc = ulp_mark_db_mark_add(parms->ulp_ctx, mark_flag,
act_idx, mark);
if (rc) {
@@ -1525,6 +1577,12 @@ ulp_mapper_index_tbl_process(struct bnxt_ulp_mapper_parms *parms,
goto error;
}
+ /* Perform the VF rep action */
+ rc = ulp_mapper_mark_vfr_idx_process(parms, tbl);
+ if (rc) {
+ BNXT_TF_DBG(ERR, "Failed to add vfr mark rc = %d\n", rc);
+ goto error;
+ }
return rc;
error:
/*
@@ -112,8 +112,7 @@ struct bnxt_ulp_mapper_tbl_info ulp_class_tbl_list[] = {
.encap_num_fields = 0,
.ident_start_idx = 0,
.ident_nums = 1,
- .mark_enable = BNXT_ULP_MARK_ENABLE_NO,
- .vfr_flag = BNXT_ULP_VFR_FLAG_NO,
+ .mark_db_opcode = BNXT_ULP_MARK_DB_OPCODE_NOP,
.critical_resource = BNXT_ULP_CRITICAL_RESOURCE_NO,
.regfile_idx = BNXT_ULP_REGFILE_INDEX_NOT_USED
},
@@ -135,8 +134,7 @@ struct bnxt_ulp_mapper_tbl_info ulp_class_tbl_list[] = {
.encap_num_fields = 0,
.ident_start_idx = 1,
.ident_nums = 0,
- .mark_enable = BNXT_ULP_MARK_ENABLE_NO,
- .vfr_flag = BNXT_ULP_VFR_FLAG_NO,
+ .mark_db_opcode = BNXT_ULP_MARK_DB_OPCODE_NOP,
.critical_resource = BNXT_ULP_CRITICAL_RESOURCE_NO,
.regfile_idx = BNXT_ULP_REGFILE_INDEX_NOT_USED
},
@@ -158,8 +156,7 @@ struct bnxt_ulp_mapper_tbl_info ulp_class_tbl_list[] = {
.encap_num_fields = 0,
.ident_start_idx = 1,
.ident_nums = 1,
- .mark_enable = BNXT_ULP_MARK_ENABLE_NO,
- .vfr_flag = BNXT_ULP_VFR_FLAG_NO,
+ .mark_db_opcode = BNXT_ULP_MARK_DB_OPCODE_NOP,
.critical_resource = BNXT_ULP_CRITICAL_RESOURCE_NO,
.regfile_idx = BNXT_ULP_REGFILE_INDEX_NOT_USED
},
@@ -181,8 +178,7 @@ struct bnxt_ulp_mapper_tbl_info ulp_class_tbl_list[] = {
.encap_num_fields = 0,
.ident_start_idx = 2,
.ident_nums = 0,
- .mark_enable = BNXT_ULP_MARK_ENABLE_NO,
- .vfr_flag = BNXT_ULP_VFR_FLAG_NO,
+ .mark_db_opcode = BNXT_ULP_MARK_DB_OPCODE_NOP,
.critical_resource = BNXT_ULP_CRITICAL_RESOURCE_NO,
.regfile_idx = BNXT_ULP_REGFILE_INDEX_NOT_USED
},
@@ -204,8 +200,7 @@ struct bnxt_ulp_mapper_tbl_info ulp_class_tbl_list[] = {
.encap_num_fields = 0,
.ident_start_idx = 2,
.ident_nums = 0,
- .mark_enable = BNXT_ULP_MARK_ENABLE_YES,
- .vfr_flag = BNXT_ULP_VFR_FLAG_NO,
+ .mark_db_opcode = BNXT_ULP_MARK_DB_OPCODE_SET_IF_MARK_ACTION,
.critical_resource = BNXT_ULP_CRITICAL_RESOURCE_YES,
.regfile_idx = BNXT_ULP_REGFILE_INDEX_NOT_USED
},
@@ -227,8 +222,7 @@ struct bnxt_ulp_mapper_tbl_info ulp_class_tbl_list[] = {
.encap_num_fields = 0,
.ident_start_idx = 2,
.ident_nums = 1,
- .mark_enable = BNXT_ULP_MARK_ENABLE_NO,
- .vfr_flag = BNXT_ULP_VFR_FLAG_NO,
+ .mark_db_opcode = BNXT_ULP_MARK_DB_OPCODE_NOP,
.critical_resource = BNXT_ULP_CRITICAL_RESOURCE_NO,
.regfile_idx = BNXT_ULP_REGFILE_INDEX_NOT_USED
},
@@ -250,8 +244,7 @@ struct bnxt_ulp_mapper_tbl_info ulp_class_tbl_list[] = {
.encap_num_fields = 0,
.ident_start_idx = 3,
.ident_nums = 0,
- .mark_enable = BNXT_ULP_MARK_ENABLE_NO,
- .vfr_flag = BNXT_ULP_VFR_FLAG_NO,
+ .mark_db_opcode = BNXT_ULP_MARK_DB_OPCODE_NOP,
.critical_resource = BNXT_ULP_CRITICAL_RESOURCE_NO,
.regfile_idx = BNXT_ULP_REGFILE_INDEX_NOT_USED
},
@@ -273,8 +266,7 @@ struct bnxt_ulp_mapper_tbl_info ulp_class_tbl_list[] = {
.encap_num_fields = 0,
.ident_start_idx = 3,
.ident_nums = 1,
- .mark_enable = BNXT_ULP_MARK_ENABLE_NO,
- .vfr_flag = BNXT_ULP_VFR_FLAG_NO,
+ .mark_db_opcode = BNXT_ULP_MARK_DB_OPCODE_NOP,
.critical_resource = BNXT_ULP_CRITICAL_RESOURCE_NO,
.regfile_idx = BNXT_ULP_REGFILE_INDEX_NOT_USED
},
@@ -296,8 +288,7 @@ struct bnxt_ulp_mapper_tbl_info ulp_class_tbl_list[] = {
.encap_num_fields = 0,
.ident_start_idx = 4,
.ident_nums = 0,
- .mark_enable = BNXT_ULP_MARK_ENABLE_NO,
- .vfr_flag = BNXT_ULP_VFR_FLAG_NO,
+ .mark_db_opcode = BNXT_ULP_MARK_DB_OPCODE_NOP,
.critical_resource = BNXT_ULP_CRITICAL_RESOURCE_NO,
.regfile_idx = BNXT_ULP_REGFILE_INDEX_NOT_USED
},
@@ -319,8 +310,7 @@ struct bnxt_ulp_mapper_tbl_info ulp_class_tbl_list[] = {
.encap_num_fields = 0,
.ident_start_idx = 4,
.ident_nums = 0,
- .mark_enable = BNXT_ULP_MARK_ENABLE_YES,
- .vfr_flag = BNXT_ULP_VFR_FLAG_NO,
+ .mark_db_opcode = BNXT_ULP_MARK_DB_OPCODE_SET_IF_MARK_ACTION,
.critical_resource = BNXT_ULP_CRITICAL_RESOURCE_YES,
.regfile_idx = BNXT_ULP_REGFILE_INDEX_NOT_USED
},
@@ -342,8 +332,7 @@ struct bnxt_ulp_mapper_tbl_info ulp_class_tbl_list[] = {
.encap_num_fields = 0,
.ident_start_idx = 4,
.ident_nums = 1,
- .mark_enable = BNXT_ULP_MARK_ENABLE_NO,
- .vfr_flag = BNXT_ULP_VFR_FLAG_NO,
+ .mark_db_opcode = BNXT_ULP_MARK_DB_OPCODE_NOP,
.critical_resource = BNXT_ULP_CRITICAL_RESOURCE_NO,
.regfile_idx = BNXT_ULP_REGFILE_INDEX_NOT_USED
},
@@ -365,8 +354,7 @@ struct bnxt_ulp_mapper_tbl_info ulp_class_tbl_list[] = {
.encap_num_fields = 0,
.ident_start_idx = 5,
.ident_nums = 0,
- .mark_enable = BNXT_ULP_MARK_ENABLE_NO,
- .vfr_flag = BNXT_ULP_VFR_FLAG_NO,
+ .mark_db_opcode = BNXT_ULP_MARK_DB_OPCODE_NOP,
.critical_resource = BNXT_ULP_CRITICAL_RESOURCE_NO,
.regfile_idx = BNXT_ULP_REGFILE_INDEX_NOT_USED
},
@@ -388,8 +376,7 @@ struct bnxt_ulp_mapper_tbl_info ulp_class_tbl_list[] = {
.encap_num_fields = 0,
.ident_start_idx = 5,
.ident_nums = 1,
- .mark_enable = BNXT_ULP_MARK_ENABLE_NO,
- .vfr_flag = BNXT_ULP_VFR_FLAG_NO,
+ .mark_db_opcode = BNXT_ULP_MARK_DB_OPCODE_NOP,
.critical_resource = BNXT_ULP_CRITICAL_RESOURCE_NO,
.regfile_idx = BNXT_ULP_REGFILE_INDEX_NOT_USED
},
@@ -411,8 +398,7 @@ struct bnxt_ulp_mapper_tbl_info ulp_class_tbl_list[] = {
.encap_num_fields = 0,
.ident_start_idx = 6,
.ident_nums = 0,
- .mark_enable = BNXT_ULP_MARK_ENABLE_NO,
- .vfr_flag = BNXT_ULP_VFR_FLAG_NO,
+ .mark_db_opcode = BNXT_ULP_MARK_DB_OPCODE_NOP,
.critical_resource = BNXT_ULP_CRITICAL_RESOURCE_NO,
.regfile_idx = BNXT_ULP_REGFILE_INDEX_NOT_USED
},
@@ -434,8 +420,7 @@ struct bnxt_ulp_mapper_tbl_info ulp_class_tbl_list[] = {
.encap_num_fields = 0,
.ident_start_idx = 6,
.ident_nums = 0,
- .mark_enable = BNXT_ULP_MARK_ENABLE_YES,
- .vfr_flag = BNXT_ULP_VFR_FLAG_NO,
+ .mark_db_opcode = BNXT_ULP_MARK_DB_OPCODE_SET_IF_MARK_ACTION,
.critical_resource = BNXT_ULP_CRITICAL_RESOURCE_YES,
.regfile_idx = BNXT_ULP_REGFILE_INDEX_NOT_USED
}
@@ -151,10 +151,11 @@ enum bnxt_ulp_hdr_type {
BNXT_ULP_HDR_TYPE_LAST = 3
};
-enum bnxt_ulp_mark_enable {
- BNXT_ULP_MARK_ENABLE_NO = 0,
- BNXT_ULP_MARK_ENABLE_YES = 1,
- BNXT_ULP_MARK_ENABLE_LAST = 2
+enum bnxt_ulp_mark_db_opcode {
+ BNXT_ULP_MARK_DB_OPCODE_NOP = 0,
+ BNXT_ULP_MARK_DB_OPCODE_SET_IF_MARK_ACTION = 1,
+ BNXT_ULP_MARK_DB_OPCODE_SET_VFR_FLAG = 2,
+ BNXT_ULP_MARK_DB_OPCODE_LAST = 3
};
enum bnxt_ulp_mapper_opc {
@@ -214,12 +215,6 @@ enum bnxt_ulp_search_before_alloc {
BNXT_ULP_SEARCH_BEFORE_ALLOC_LAST = 2
};
-enum bnxt_ulp_vfr_flag {
- BNXT_ULP_VFR_FLAG_NO = 0,
- BNXT_ULP_VFR_FLAG_YES = 1,
- BNXT_ULP_VFR_FLAG_LAST = 2
-};
-
enum bnxt_ulp_fdb_resource_flags {
BNXT_ULP_FDB_RESOURCE_FLAGS_DIR_EGR = 0x01,
BNXT_ULP_FDB_RESOURCE_FLAGS_DIR_INGR = 0x00
@@ -181,9 +181,8 @@ struct bnxt_ulp_mapper_tbl_info {
uint32_t ident_start_idx;
uint16_t ident_nums;
- uint8_t mark_enable;
enum bnxt_ulp_regfile_index regfile_idx;
- enum bnxt_ulp_vfr_flag vfr_flag;
+ enum bnxt_ulp_mark_db_opcode mark_db_opcode;
};
struct bnxt_ulp_mapper_class_key_field_info {