compressdev: support stateful operations
[dpdk.git] / lib / librte_compressdev / rte_compressdev.c
index 0af1b49..0ffc43b 100644 (file)
@@ -602,6 +602,55 @@ rte_compressdev_private_xform_free(uint8_t dev_id, void *priv_xform)
        return 0;
 }
 
+int __rte_experimental
+rte_compressdev_stream_create(uint8_t dev_id,
+               const struct rte_comp_xform *xform,
+               void **stream)
+{
+       struct rte_compressdev *dev;
+       int ret;
+
+       dev = rte_compressdev_get_dev(dev_id);
+
+       if (xform == NULL || dev == NULL || stream == NULL)
+               return -EINVAL;
+
+       RTE_FUNC_PTR_OR_ERR_RET(*dev->dev_ops->stream_create, -ENOTSUP);
+       ret = (*dev->dev_ops->stream_create)(dev, xform, stream);
+       if (ret < 0) {
+               COMPRESSDEV_LOG(ERR,
+                       "dev_id %d failed to create stream: err=%d",
+                       dev_id, ret);
+               return ret;
+       };
+
+       return 0;
+}
+
+
+int __rte_experimental
+rte_compressdev_stream_free(uint8_t dev_id, void *stream)
+{
+       struct rte_compressdev *dev;
+       int ret;
+
+       dev = rte_compressdev_get_dev(dev_id);
+
+       if (dev == NULL || stream == NULL)
+               return -EINVAL;
+
+       RTE_FUNC_PTR_OR_ERR_RET(*dev->dev_ops->stream_free, -ENOTSUP);
+       ret = dev->dev_ops->stream_free(dev, stream);
+       if (ret < 0) {
+               COMPRESSDEV_LOG(ERR,
+                       "dev_id %d failed to free stream: err=%d",
+                       dev_id, ret);
+               return ret;
+       };
+
+       return 0;
+}
+
 const char * __rte_experimental
 rte_compressdev_name_get(uint8_t dev_id)
 {