[dpdk-dev,v3,07/13] compressdev: support stateful operations
Checks
Commit Message
From: Fiona Trahe <fiona.trahe@intel.com>
Added stream data (stream) in compression operation,
which will contain the private data from each PMD
to support stateful operations.
Also, added functions to create/free this data.
Signed-off-by: Fiona Trahe <fiona.trahe@intel.com>
Signed-off-by: Pablo de Lara <pablo.de.lara.guarch@intel.com>
Signed-off-by: Shally Verma <shally.verma@caviumnetworks.com>
Signed-off-by: Ashish Gupta <ashish.gupta@caviumnetworks.com>
---
lib/librte_compressdev/rte_compressdev.c | 49 +++++++++++++++++++++
lib/librte_compressdev/rte_compressdev.h | 50 ++++++++++++++++++++++
lib/librte_compressdev/rte_compressdev_pmd.h | 41 ++++++++++++++++++
lib/librte_compressdev/rte_compressdev_version.map | 2 +
4 files changed, 142 insertions(+)
@@ -578,6 +578,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_pmd_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_pmd_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;
+}
+
/** Initialise rte_comp_op mempool element */
static void
rte_comp_op_init(struct rte_mempool *mempool,
@@ -127,6 +127,8 @@ struct rte_compressdev_config {
/**< Total number of queue pairs to configure on a device */
uint16_t max_nb_priv_xforms;
/**< Max number of private_xforms which will be created on the device */
+ uint16_t max_nb_streams;
+ /**< Max number of streams which will be created on the device */
};
/**
@@ -411,6 +413,54 @@ rte_compressdev_enqueue_burst(uint8_t dev_id, uint16_t qp_id,
dev->data->queue_pairs[qp_id], ops, nb_ops);
}
+/**
+ * This should alloc a stream from the device's mempool and initialise it.
+ * The application should call this API when setting up for the stateful
+ * processing of a set of data on a device. The API can be called multiple
+ * times to set up a stream for each data set. The handle returned is only for
+ * use with ops of op_type STATEFUL and must be passed to the PMD
+ * with every op in the data stream
+ *
+ * @param dev_id
+ * Compress device identifier
+ * @param xform
+ * xform data
+ * @param stream
+ * Pointer to where PMD's private stream handle should be stored
+ *
+ * @return
+ * - 0 if successful and valid stream handle
+ * - <0 in error cases
+ * - Returns -EINVAL if input parameters are invalid.
+ * - Returns -ENOTSUP if comp device does not support STATEFUL operations.
+ * - Returns -ENOTSUP if comp device does not support the comp transform.
+ * - Returns -ENOMEM if the private stream could not be allocated.
+ *
+ */
+int __rte_experimental
+rte_compressdev_stream_create(uint8_t dev_id,
+ const struct rte_comp_xform *xform,
+ void **stream);
+
+/**
+ * This should clear the stream and return it to the device's mempool.
+ *
+ * @param dev_id
+ * Compress device identifier
+ *
+ * @param stream
+ * PMD's private stream data
+ *
+ * @return
+ * - 0 if successful
+ * - <0 in error cases
+ * - Returns -EINVAL if input parameters are invalid.
+ * - Returns -ENOTSUP if comp device does not support STATEFUL operations.
+ * - Returns -EBUSY if can't free stream as there are inflight operations
+ */
+int __rte_experimental
+rte_compressdev_stream_free(uint8_t dev_id, void *stream);
+
/**
* This should alloc a private_xform from the device's mempool and initialise
* it. The application should call this API when setting up for stateless
@@ -190,6 +190,42 @@ typedef int (*compressdev_queue_pair_release_t)(struct rte_compressdev *dev,
*/
typedef uint32_t (*compressdev_queue_pair_count_t)(struct rte_compressdev *dev);
+/**
+ * Create driver private stream data.
+ *
+ * @param dev
+ * Compressdev device
+ * @param xform
+ * xform data
+ * @param stream
+ * ptr where handle of pmd's private stream data should be stored
+ * @return
+ * - Returns 0 if private stream structure has been created successfully.
+ * - Returns -EINVAL if input parameters are invalid.
+ * - Returns -ENOTSUP if comp device does not support STATEFUL operations.
+ * - Returns -ENOTSUP if comp device does not support the comp transform.
+ * - Returns -ENOMEM if the private stream could not be allocated.
+ */
+typedef int (*compressdev_stream_create_t)(struct rte_compressdev *dev,
+ const struct rte_comp_xform *xform, void **stream);
+
+/**
+ * Free driver private stream data.
+ *
+ * @param dev
+ * Compressdev device
+ * @param stream
+ * handle of pmd's private stream data
+ * @return
+ * - 0 if successful
+ * - <0 in error cases
+ * - Returns -EINVAL if input parameters are invalid.
+ * - Returns -ENOTSUP if comp device does not support STATEFUL operations.
+ * - Returns -EBUSY if can't free stream as there are inflight operations
+ */
+typedef int (*compressdev_stream_free_t)(struct rte_compressdev *dev,
+ void *stream);
+
/**
* Create driver private_xform data.
*
@@ -240,6 +276,11 @@ struct rte_compressdev_ops {
compressdev_queue_pair_release_t queue_pair_release;
/**< Release a queue pair. */
+ compressdev_stream_create_t stream_create;
+ /**< Create a comp stream and initialise its private data. */
+ compressdev_stream_free_t stream_free;
+ /**< Free a comp stream's private data. */
+
compressdev_private_xform_create_t private_xform_create;
/**< Create a comp private_xform and initialise its private data. */
compressdev_private_xform_free_t private_xform_free;
@@ -30,6 +30,8 @@ EXPERIMENTAL {
rte_compressdev_socket_id;
rte_compressdev_start;
rte_compressdev_stop;
+ rte_compressdev_stream_create;
+ rte_compressdev_stream_free;
rte_comp_op_pool_create;
local: *;