net/ice/base: sign external device package programming
[dpdk.git] / drivers / net / ice / ice_generic_flow.c
index 8704812..261f0b7 100644 (file)
@@ -1774,6 +1774,7 @@ enum rte_flow_item_type pattern_eth_ipv6_pfcp[] = {
 typedef struct ice_flow_engine * (*parse_engine_t)(struct ice_adapter *ad,
                struct rte_flow *flow,
                struct ice_parser_list *parser_list,
+               uint32_t priority,
                const struct rte_flow_item pattern[],
                const struct rte_flow_action actions[],
                struct rte_flow_error *error);
@@ -1965,11 +1966,10 @@ ice_flow_valid_attr(struct ice_adapter *ad,
        } else {
                *ice_pipeline_stage =
                        ICE_FLOW_CLASSIFY_STAGE_DISTRIBUTOR_ONLY;
-               /* Not supported */
-               if (attr->priority) {
+               if (attr->priority > 1) {
                        rte_flow_error_set(error, EINVAL,
                                        RTE_FLOW_ERROR_TYPE_ATTR_PRIORITY,
-                                       attr, "Not support priority.");
+                                       attr, "Only support priority 0 and 1.");
                        return -rte_errno;
                }
        }
@@ -2240,6 +2240,7 @@ static struct ice_flow_engine *
 ice_parse_engine_create(struct ice_adapter *ad,
                struct rte_flow *flow,
                struct ice_parser_list *parser_list,
+               uint32_t priority,
                const struct rte_flow_item pattern[],
                const struct rte_flow_action actions[],
                struct rte_flow_error *error)
@@ -2255,7 +2256,7 @@ ice_parse_engine_create(struct ice_adapter *ad,
                if (parser_node->parser->parse_pattern_action(ad,
                                parser_node->parser->array,
                                parser_node->parser->array_len,
-                               pattern, actions, &meta, error) < 0)
+                               pattern, actions, priority, &meta, error) < 0)
                        continue;
 
                engine = parser_node->parser->engine;
@@ -2273,6 +2274,7 @@ static struct ice_flow_engine *
 ice_parse_engine_validate(struct ice_adapter *ad,
                struct rte_flow *flow __rte_unused,
                struct ice_parser_list *parser_list,
+               uint32_t priority,
                const struct rte_flow_item pattern[],
                const struct rte_flow_action actions[],
                struct rte_flow_error *error)
@@ -2285,7 +2287,7 @@ ice_parse_engine_validate(struct ice_adapter *ad,
                if (parser_node->parser->parse_pattern_action(ad,
                                parser_node->parser->array,
                                parser_node->parser->array_len,
-                               pattern, actions, NULL, error) < 0)
+                               pattern, actions, priority, NULL, error) < 0)
                        continue;
 
                engine = parser_node->parser->engine;
@@ -2335,7 +2337,7 @@ ice_flow_process_filter(struct rte_eth_dev *dev,
                return ret;
 
        *engine = ice_parse_engine(ad, flow, &pf->rss_parser_list,
-                       pattern, actions, error);
+                       attr->priority, pattern, actions, error);
        if (*engine != NULL)
                return 0;
 
@@ -2343,11 +2345,11 @@ ice_flow_process_filter(struct rte_eth_dev *dev,
        case ICE_FLOW_CLASSIFY_STAGE_DISTRIBUTOR_ONLY:
        case ICE_FLOW_CLASSIFY_STAGE_DISTRIBUTOR:
                *engine = ice_parse_engine(ad, flow, &pf->dist_parser_list,
-                               pattern, actions, error);
+                               attr->priority, pattern, actions, error);
                break;
        case ICE_FLOW_CLASSIFY_STAGE_PERMISSION:
                *engine = ice_parse_engine(ad, flow, &pf->perm_parser_list,
-                               pattern, actions, error);
+                               attr->priority, pattern, actions, error);
                break;
        default:
                return -EINVAL;