Implements odp_cls_cos_create() and odp_cls_cos_param_init() functions

Signed-off-by: Balasubramanian Manoharan <bala.manoha...@linaro.org>
---
 platform/linux-generic/odp_classification.c | 31 ++++++++++++++++++++++++++---
 1 file changed, 28 insertions(+), 3 deletions(-)

diff --git a/platform/linux-generic/odp_classification.c 
b/platform/linux-generic/odp_classification.c
index b1f51af..da6123e 100644
--- a/platform/linux-generic/odp_classification.c
+++ b/platform/linux-generic/odp_classification.c
@@ -154,9 +154,32 @@ int odp_classification_term_global(void)
        return rc;
 }
 
-odp_cos_t odp_cos_create(const char *name)
+void odp_cls_cos_param_init(odp_cls_cos_param_t *param)
+{
+       param->queue = ODP_QUEUE_INVALID;
+       param->pool = ODP_POOL_INVALID;
+       param->drop_policy = ODP_COS_DROP_NEVER;
+}
+
+odp_cos_t odp_cls_cos_create(const char *name, odp_cls_cos_param_t *param)
 {
        int i;
+       queue_entry_t *queue;
+       pool_entry_t *pool;
+       odp_drop_e drop_policy;
+
+       /* Packets are dropped if Queue or Pool is invalid*/
+       if (param->queue == ODP_QUEUE_INVALID)
+               queue = NULL;
+       else
+               queue = queue_to_qentry(param->queue);
+
+       if (param->pool == ODP_POOL_INVALID)
+               pool = NULL;
+       else
+               pool = odp_pool_to_entry(param->pool);
+
+       drop_policy = param->drop_policy;
 
        for (i = 0; i < ODP_COS_MAX_ENTRY; i++) {
                LOCK(&cos_tbl->cos_entry[i].s.lock);
@@ -166,16 +189,18 @@ odp_cos_t odp_cos_create(const char *name)
                        cos_tbl->cos_entry[i].s.name[ODP_COS_NAME_LEN - 1] = 0;
                        cos_tbl->cos_entry[i].s.pmr = NULL;
                        cos_tbl->cos_entry[i].s.linked_cos = NULL;
-                       cos_tbl->cos_entry[i].s.queue = NULL;
-                       cos_tbl->cos_entry[i].s.pool = NULL;
+                       cos_tbl->cos_entry[i].s.queue = queue;
+                       cos_tbl->cos_entry[i].s.pool = pool;
                        cos_tbl->cos_entry[i].s.flow_set = 0;
                        cos_tbl->cos_entry[i].s.headroom = 0;
                        cos_tbl->cos_entry[i].s.valid = 1;
+                       cos_tbl->cos_entry[i].s.drop_policy = drop_policy;
                        UNLOCK(&cos_tbl->cos_entry[i].s.lock);
                        return _odp_cast_scalar(odp_cos_t, i);
                }
                UNLOCK(&cos_tbl->cos_entry[i].s.lock);
        }
+
        ODP_ERR("ODP_COS_MAX_ENTRY reached");
        return ODP_COS_INVALID;
 }
-- 
1.9.1

_______________________________________________
lng-odp mailing list
lng-odp@lists.linaro.org
https://lists.linaro.org/mailman/listinfo/lng-odp

Reply via email to