+/* Number of fields for each protocol */
+#define BNXT_ULP_PROTO_HDR_SVIF_NUM 1
+#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_MAX 128
+#define BNXT_ULP_PROTO_HDR_FIELD_SVIF_IDX 0
+
+/* 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 {
+ 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_hdr_field hdr_field[BNXT_ULP_PROTO_HDR_MAX];
+ uint32_t comp_fld[BNXT_ULP_CF_IDX_LAST];
+ uint32_t field_idx;
+ uint32_t vlan_idx;
+ struct ulp_rte_act_bitmap act_bitmap;
+ struct ulp_rte_act_prop act_prop;
+ uint32_t dir_attr;
+ struct bnxt_ulp_context *ulp_ctx;
+};
+
+/* 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;
+};
+
+/* 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;
+};
+
+/* 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 parameters */