+/* Number of fields for each protocol */
+#define BNXT_ULP_PROTO_HDR_SVIF_NUM 2
+#define BNXT_ULP_PROTO_HDR_ETH_NUM 3
+#define BNXT_ULP_PROTO_HDR_S_VLAN_NUM 3
+#define BNXT_ULP_PROTO_HDR_VLAN_NUM 6
+#define BNXT_ULP_PROTO_HDR_IPV4_NUM 10
+#define BNXT_ULP_PROTO_HDR_IPV6_NUM 8
+#define BNXT_ULP_PROTO_HDR_UDP_NUM 4
+#define BNXT_ULP_PROTO_HDR_TCP_NUM 9
+#define BNXT_ULP_PROTO_HDR_VXLAN_NUM 4
+#define BNXT_ULP_PROTO_HDR_GRE_NUM 6
+#define BNXT_ULP_PROTO_HDR_ICMP_NUM 5
+#define BNXT_ULP_PROTO_HDR_MAX 128
+#define BNXT_ULP_PROTO_HDR_FIELD_SVIF_IDX 1
+
+/* Direction attributes */
+#define BNXT_ULP_FLOW_ATTR_TRANSFER 0x1
+#define BNXT_ULP_FLOW_ATTR_INGRESS 0x2
+#define BNXT_ULP_FLOW_ATTR_EGRESS 0x4
+
+struct ulp_rte_hdr_bitmap {
+ uint64_t bits;
+};
+
+struct ulp_rte_field_bitmap {
+ uint64_t bits;
+};
+
+/* Structure to store the protocol fields */
+#define RTE_PARSER_FLOW_HDR_FIELD_SIZE 16
+struct ulp_rte_hdr_field {
+ uint8_t spec[RTE_PARSER_FLOW_HDR_FIELD_SIZE];
+ uint8_t mask[RTE_PARSER_FLOW_HDR_FIELD_SIZE];
+ uint32_t size;
+};
+
+struct ulp_rte_act_bitmap {
+ uint64_t bits;
+};
+
+/* Structure to hold the action property details. */
+struct ulp_rte_act_prop {
+ uint8_t act_details[BNXT_ULP_ACT_PROP_IDX_LAST];
+};
+
+/* Structure to be used for passing all the parser functions */
+struct ulp_rte_parser_params {
+ STAILQ_ENTRY(ulp_rte_parser_params) next;
+ struct ulp_rte_hdr_bitmap hdr_bitmap;
+ struct ulp_rte_hdr_bitmap hdr_fp_bit;
+ struct ulp_rte_field_bitmap fld_bitmap;
+ struct ulp_rte_field_bitmap fld_s_bitmap;
+ struct ulp_rte_hdr_field hdr_field[BNXT_ULP_PROTO_HDR_MAX];
+ uint64_t comp_fld[BNXT_ULP_CF_IDX_LAST];
+ uint32_t field_idx;
+ struct ulp_rte_act_bitmap act_bitmap;
+ struct ulp_rte_act_prop act_prop;
+ uint32_t dir_attr;
+ uint32_t priority;
+ uint32_t fid;
+ uint32_t parent_flow;
+ uint32_t parent_fid;
+ uint16_t func_id;
+ uint16_t port_id;
+ uint32_t class_id;
+ uint32_t act_tmpl;
+ struct bnxt_ulp_context *ulp_ctx;
+ uint32_t hdr_sig_id;
+ uint32_t flow_sig_id;
+ uint32_t flow_pattern_id;
+ uint32_t act_pattern_id;
+ uint8_t app_id;
+};
+
+/* Flow Parser Header Information Structure */
+struct bnxt_ulp_rte_hdr_info {
+ enum bnxt_ulp_hdr_type hdr_type;
+ /* Flow Parser Protocol Header Function Prototype */
+ int (*proto_hdr_func)(const struct rte_flow_item *item_list,
+ struct ulp_rte_parser_params *params);
+};
+
+/* Flow Parser Header Information Structure Array defined in template source*/
+extern struct bnxt_ulp_rte_hdr_info ulp_hdr_info[];
+
+/* Flow Parser Action Information Structure */
+struct bnxt_ulp_rte_act_info {
+ enum bnxt_ulp_act_type act_type;
+ /* Flow Parser Protocol Action Function Prototype */
+ int32_t (*proto_act_func)
+ (const struct rte_flow_action *action_item,
+ struct ulp_rte_parser_params *params);
+};
+
+/* Flow Parser Action Information Structure Array defined in template source*/
+extern struct bnxt_ulp_rte_act_info ulp_act_info[];
+
+/* Flow Matcher structures */
+struct bnxt_ulp_header_match_info {
+ struct ulp_rte_hdr_bitmap hdr_bitmap;
+ uint32_t start_idx;
+ uint32_t num_entries;
+ uint32_t class_tmpl_id;
+ uint32_t act_vnic;
+};
+
+struct ulp_rte_bitmap {
+ uint64_t bits;
+};
+
+struct bnxt_ulp_class_match_info {
+ struct ulp_rte_bitmap hdr_sig;
+ struct ulp_rte_bitmap field_sig;
+ uint32_t class_hid;
+ uint32_t class_tid;
+ uint8_t act_vnic;
+ uint8_t wc_pri;
+ uint8_t app_sig;
+ uint32_t hdr_sig_id;
+ uint32_t flow_sig_id;
+ uint32_t flow_pattern_id;
+};
+
+/* Flow Matcher templates Structure for class entries */
+extern uint16_t ulp_class_sig_tbl[];
+extern struct bnxt_ulp_class_match_info ulp_class_match_list[];
+
+/* Flow Matcher Action structures */
+struct bnxt_ulp_action_match_info {
+ struct ulp_rte_act_bitmap act_bitmap;
+ uint32_t act_tmpl_id;
+};
+
+struct bnxt_ulp_act_match_info {
+ struct ulp_rte_bitmap act_sig;
+ uint32_t act_hid;
+ uint32_t act_tid;
+ uint32_t act_pattern_id;
+ uint8_t app_sig;
+};
+
+/* Flow Matcher templates Structure for action entries */
+extern uint16_t ulp_act_sig_tbl[];
+extern struct bnxt_ulp_act_match_info ulp_act_match_list[];
+
+/* Device Specific Tables for mapper */
+struct bnxt_ulp_mapper_cond_info {
+ enum bnxt_ulp_cond_opc cond_opcode;
+ uint32_t cond_operand;
+};
+
+struct bnxt_ulp_mapper_cond_list_info {
+ enum bnxt_ulp_cond_list_opc cond_list_opcode;
+ uint32_t cond_start_idx;
+ uint32_t cond_nums;
+ int32_t cond_true_goto;
+ int32_t cond_false_goto;
+};
+
+struct bnxt_ulp_mapper_func_info {
+ enum bnxt_ulp_func_opc func_opc;
+ enum bnxt_ulp_func_src func_src1;
+ enum bnxt_ulp_func_src func_src2;
+ uint16_t func_opr1;
+ uint16_t func_opr2;
+ uint16_t func_dst_opr;
+};
+
+struct bnxt_ulp_template_device_tbls {
+ struct bnxt_ulp_mapper_tmpl_info *tmpl_list;
+ uint32_t tmpl_list_size;
+ struct bnxt_ulp_mapper_tbl_info *tbl_list;
+ uint32_t tbl_list_size;
+ struct bnxt_ulp_mapper_key_info *key_info_list;
+ uint32_t key_info_list_size;
+ struct bnxt_ulp_mapper_field_info *result_field_list;
+ uint32_t result_field_list_size;
+ struct bnxt_ulp_mapper_ident_info *ident_list;
+ uint32_t ident_list_size;
+ struct bnxt_ulp_mapper_cond_info *cond_list;
+ uint32_t cond_list_size;
+};
+
+/* Device specific parameters */