From: Jun Yang <jun.y...@nxp.com>

Add flow supported by soft parser to verification list.

Signed-off-by: Jun Yang <jun.y...@nxp.com>
---
 drivers/net/dpaa2/dpaa2_flow.c | 84 +++++++++++++++++++++-------------
 1 file changed, 51 insertions(+), 33 deletions(-)

diff --git a/drivers/net/dpaa2/dpaa2_flow.c b/drivers/net/dpaa2/dpaa2_flow.c
index 58ea0f578f..018ffec266 100644
--- a/drivers/net/dpaa2/dpaa2_flow.c
+++ b/drivers/net/dpaa2/dpaa2_flow.c
@@ -66,7 +66,7 @@ struct rte_dpaa2_flow_item {
 };
 
 static const
-enum rte_flow_item_type dpaa2_supported_pattern_type[] = {
+enum rte_flow_item_type dpaa2_hp_supported_pattern_type[] = {
        RTE_FLOW_ITEM_TYPE_END,
        RTE_FLOW_ITEM_TYPE_ETH,
        RTE_FLOW_ITEM_TYPE_VLAN,
@@ -77,7 +77,14 @@ enum rte_flow_item_type dpaa2_supported_pattern_type[] = {
        RTE_FLOW_ITEM_TYPE_TCP,
        RTE_FLOW_ITEM_TYPE_SCTP,
        RTE_FLOW_ITEM_TYPE_GRE,
-       RTE_FLOW_ITEM_TYPE_GTP
+       RTE_FLOW_ITEM_TYPE_GTP,
+       RTE_FLOW_ITEM_TYPE_RAW
+};
+
+static const
+enum rte_flow_item_type dpaa2_sp_supported_pattern_type[] = {
+       RTE_FLOW_ITEM_TYPE_VXLAN,
+       RTE_FLOW_ITEM_TYPE_ECPRI
 };
 
 static const
@@ -4556,16 +4563,17 @@ dpaa2_dev_verify_attr(struct dpni_attr *dpni_attr,
        int ret = 0;
 
        if (unlikely(attr->group >= dpni_attr->num_rx_tcs)) {
-               DPAA2_PMD_ERR("Priority group is out of range");
+               DPAA2_PMD_ERR("Group/TC(%d) is out of range(%d)",
+                       attr->group, dpni_attr->num_rx_tcs);
                ret = -ENOTSUP;
        }
        if (unlikely(attr->priority >= dpni_attr->fs_entries)) {
-               DPAA2_PMD_ERR("Priority within the group is out of range");
+               DPAA2_PMD_ERR("Priority(%d) within group is out of range(%d)",
+                       attr->priority, dpni_attr->fs_entries);
                ret = -ENOTSUP;
        }
        if (unlikely(attr->egress)) {
-               DPAA2_PMD_ERR(
-                       "Flow configuration is not supported on egress side");
+               DPAA2_PMD_ERR("Egress flow configuration is not supported");
                ret = -ENOTSUP;
        }
        if (unlikely(!attr->ingress)) {
@@ -4580,27 +4588,41 @@ dpaa2_dev_verify_patterns(const struct rte_flow_item 
pattern[])
 {
        unsigned int i, j, is_found = 0;
        int ret = 0;
+       const enum rte_flow_item_type *hp_supported;
+       const enum rte_flow_item_type *sp_supported;
+       uint64_t hp_supported_num, sp_supported_num;
+
+       hp_supported = dpaa2_hp_supported_pattern_type;
+       hp_supported_num = RTE_DIM(dpaa2_hp_supported_pattern_type);
+
+       sp_supported = dpaa2_sp_supported_pattern_type;
+       sp_supported_num = RTE_DIM(dpaa2_sp_supported_pattern_type);
 
        for (j = 0; pattern[j].type != RTE_FLOW_ITEM_TYPE_END; j++) {
-               for (i = 0; i < RTE_DIM(dpaa2_supported_pattern_type); i++) {
-                       if (dpaa2_supported_pattern_type[i]
-                                       == pattern[j].type) {
+               is_found = 0;
+               for (i = 0; i < hp_supported_num; i++) {
+                       if (hp_supported[i] == pattern[j].type) {
                                is_found = 1;
                                break;
                        }
                }
+               if (is_found)
+                       continue;
+               if (dpaa2_sp_loaded > 0) {
+                       for (i = 0; i < sp_supported_num; i++) {
+                               if (sp_supported[i] == pattern[j].type) {
+                                       is_found = 1;
+                                       break;
+                               }
+                       }
+               }
                if (!is_found) {
+                       DPAA2_PMD_WARN("Flow type(%d) not supported",
+                               pattern[j].type);
                        ret = -ENOTSUP;
                        break;
                }
        }
-       /* Lets verify other combinations of given pattern rules */
-       for (j = 0; pattern[j].type != RTE_FLOW_ITEM_TYPE_END; j++) {
-               if (!pattern[j].spec) {
-                       ret = -EINVAL;
-                       break;
-               }
-       }
 
        return ret;
 }
@@ -4647,43 +4669,39 @@ dpaa2_flow_validate(struct rte_eth_dev *dev,
        memset(&dpni_attr, 0, sizeof(struct dpni_attr));
        ret = dpni_get_attributes(dpni, CMD_PRI_LOW, token, &dpni_attr);
        if (ret < 0) {
-               DPAA2_PMD_ERR(
-                       "Failure to get dpni@%p attribute, err code  %d",
-                       dpni, ret);
+               DPAA2_PMD_ERR("Get dpni@%d attribute failed(%d)",
+                       priv->hw_id, ret);
                rte_flow_error_set(error, EPERM,
-                          RTE_FLOW_ERROR_TYPE_ATTR,
-                          flow_attr, "invalid");
+                       RTE_FLOW_ERROR_TYPE_ATTR,
+                       flow_attr, "invalid");
                return ret;
        }
 
        /* Verify input attributes */
        ret = dpaa2_dev_verify_attr(&dpni_attr, flow_attr);
        if (ret < 0) {
-               DPAA2_PMD_ERR(
-                       "Invalid attributes are given");
+               DPAA2_PMD_ERR("Invalid attributes are given");
                rte_flow_error_set(error, EPERM,
-                          RTE_FLOW_ERROR_TYPE_ATTR,
-                          flow_attr, "invalid");
+                       RTE_FLOW_ERROR_TYPE_ATTR,
+                       flow_attr, "invalid");
                goto not_valid_params;
        }
        /* Verify input pattern list */
        ret = dpaa2_dev_verify_patterns(pattern);
        if (ret < 0) {
-               DPAA2_PMD_ERR(
-                       "Invalid pattern list is given");
+               DPAA2_PMD_ERR("Invalid pattern list is given");
                rte_flow_error_set(error, EPERM,
-                          RTE_FLOW_ERROR_TYPE_ITEM,
-                          pattern, "invalid");
+                       RTE_FLOW_ERROR_TYPE_ITEM,
+                       pattern, "invalid");
                goto not_valid_params;
        }
        /* Verify input action list */
        ret = dpaa2_dev_verify_actions(actions);
        if (ret < 0) {
-               DPAA2_PMD_ERR(
-                       "Invalid action list is given");
+               DPAA2_PMD_ERR("Invalid action list is given");
                rte_flow_error_set(error, EPERM,
-                          RTE_FLOW_ERROR_TYPE_ACTION,
-                          actions, "invalid");
+                       RTE_FLOW_ERROR_TYPE_ACTION,
+                       actions, "invalid");
                goto not_valid_params;
        }
 not_valid_params:
-- 
2.25.1

Reply via email to