cryptodev: remove attach/detach session API
[dpdk.git] / lib / librte_cryptodev / rte_cryptodev.h
index c8fa689..8fd3045 100644 (file)
@@ -1,32 +1,5 @@
-/*-
- *
- *   Copyright(c) 2015-2017 Intel Corporation. All rights reserved.
- *
- *   Redistribution and use in source and binary forms, with or without
- *   modification, are permitted provided that the following conditions
- *   are met:
- *
- *     * Redistributions of source code must retain the above copyright
- *       notice, this list of conditions and the following disclaimer.
- *     * Redistributions in binary form must reproduce the above copyright
- *       notice, this list of conditions and the following disclaimer in
- *       the documentation and/or other materials provided with the
- *       distribution.
- *     * Neither the name of Intel Corporation nor the names of its
- *       contributors may be used to endorse or promote products derived
- *       from this software without specific prior written permission.
- *
- *   THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
- *   "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
- *   LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
- *   A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
- *   OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
- *   SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
- *   LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
- *   DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
- *   THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
- *   (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
- *   OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+/* SPDX-License-Identifier: BSD-3-Clause
+ * Copyright(c) 2015-2017 Intel Corporation.
  */
 
 #ifndef _RTE_CRYPTODEV_H_
@@ -65,7 +38,6 @@ extern const char **rte_cyptodev_names;
                RTE_FMT(RTE_FMT_HEAD(__VA_ARGS__,) "\n", \
                        RTE_FMT_TAIL(__VA_ARGS__,)))
 
-#ifdef RTE_LIBRTE_CRYPTODEV_DEBUG
 #define CDEV_LOG_DEBUG(...) \
        RTE_LOG(DEBUG, CRYPTODEV, \
                RTE_FMT("%s() line %u: " RTE_FMT_HEAD(__VA_ARGS__,) "\n", \
@@ -76,13 +48,6 @@ extern const char **rte_cyptodev_names;
                RTE_FMT("[%s] %s: " RTE_FMT_HEAD(__VA_ARGS__,) "\n", \
                        dev, __func__, RTE_FMT_TAIL(__VA_ARGS__,)))
 
-#else
-#define CDEV_LOG_DEBUG(...) (void)0
-#define CDEV_PMD_TRACE(...) (void)0
-#endif
-
-
-
 /**
  * A macro that points to an offset from the start
  * of the crypto operation structure (rte_crypto_op)
@@ -327,31 +292,50 @@ rte_cryptodev_get_aead_algo_enum(enum rte_crypto_aead_algorithm *algo_enum,
  *
  * Keep these flags synchronised with rte_cryptodev_get_feature_name()
  */
-#define        RTE_CRYPTODEV_FF_SYMMETRIC_CRYPTO       (1ULL << 0)
+#define        RTE_CRYPTODEV_FF_SYMMETRIC_CRYPTO               (1ULL << 0)
 /**< Symmetric crypto operations are supported */
-#define        RTE_CRYPTODEV_FF_ASYMMETRIC_CRYPTO      (1ULL << 1)
+#define        RTE_CRYPTODEV_FF_ASYMMETRIC_CRYPTO              (1ULL << 1)
 /**< Asymmetric crypto operations are supported */
-#define        RTE_CRYPTODEV_FF_SYM_OPERATION_CHAINING (1ULL << 2)
+#define        RTE_CRYPTODEV_FF_SYM_OPERATION_CHAINING         (1ULL << 2)
 /**< Chaining symmetric crypto operations are supported */
-#define        RTE_CRYPTODEV_FF_CPU_SSE                (1ULL << 3)
+#define        RTE_CRYPTODEV_FF_CPU_SSE                        (1ULL << 3)
 /**< Utilises CPU SIMD SSE instructions */
-#define        RTE_CRYPTODEV_FF_CPU_AVX                (1ULL << 4)
+#define        RTE_CRYPTODEV_FF_CPU_AVX                        (1ULL << 4)
 /**< Utilises CPU SIMD AVX instructions */
-#define        RTE_CRYPTODEV_FF_CPU_AVX2               (1ULL << 5)
+#define        RTE_CRYPTODEV_FF_CPU_AVX2                       (1ULL << 5)
 /**< Utilises CPU SIMD AVX2 instructions */
-#define        RTE_CRYPTODEV_FF_CPU_AESNI              (1ULL << 6)
+#define        RTE_CRYPTODEV_FF_CPU_AESNI                      (1ULL << 6)
 /**< Utilises CPU AES-NI instructions */
-#define        RTE_CRYPTODEV_FF_HW_ACCELERATED         (1ULL << 7)
-/**< Operations are off-loaded to an external hardware accelerator */
-#define        RTE_CRYPTODEV_FF_CPU_AVX512             (1ULL << 8)
+#define        RTE_CRYPTODEV_FF_HW_ACCELERATED                 (1ULL << 7)
+/**< Operations are off-loaded to an
+ * external hardware accelerator
+ */
+#define        RTE_CRYPTODEV_FF_CPU_AVX512                     (1ULL << 8)
 /**< Utilises CPU SIMD AVX512 instructions */
-#define        RTE_CRYPTODEV_FF_MBUF_SCATTER_GATHER    (1ULL << 9)
-/**< Scatter-gather mbufs are supported */
-#define        RTE_CRYPTODEV_FF_CPU_NEON               (1ULL << 10)
+#define        RTE_CRYPTODEV_FF_IN_PLACE_SGL                   (1ULL << 9)
+/**< In-place Scatter-gather (SGL) buffers, with multiple segments,
+ * are supported
+ */
+#define RTE_CRYPTODEV_FF_OOP_SGL_IN_SGL_OUT            (1ULL << 10)
+/**< Out-of-place Scatter-gather (SGL) buffers are
+ * supported in input and output
+ */
+#define RTE_CRYPTODEV_FF_OOP_SGL_IN_LB_OUT             (1ULL << 11)
+/**< Out-of-place Scatter-gather (SGL) buffers are supported
+ * in input, combined with linear buffers (LB), with a
+ * single segment in output
+ */
+#define RTE_CRYPTODEV_FF_OOP_LB_IN_SGL_OUT             (1ULL << 12)
+/**< Out-of-place Scatter-gather (SGL) buffers are supported
+ * in output, combined with linear buffers (LB) in input
+ */
+#define RTE_CRYPTODEV_FF_OOP_LB_IN_LB_OUT              (1ULL << 13)
+/**< Out-of-place linear buffers (LB) are supported in input and output */
+#define        RTE_CRYPTODEV_FF_CPU_NEON                       (1ULL << 14)
 /**< Utilises CPU NEON instructions */
-#define        RTE_CRYPTODEV_FF_CPU_ARM_CE             (1ULL << 11)
+#define        RTE_CRYPTODEV_FF_CPU_ARM_CE                     (1ULL << 15)
 /**< Utilises ARM CPU Cryptographic Extensions */
-#define        RTE_CRYPTODEV_FF_SECURITY               (1ULL << 12)
+#define        RTE_CRYPTODEV_FF_SECURITY                       (1ULL << 16)
 /**< Support Security Protocol Processing */
 
 
@@ -369,11 +353,12 @@ rte_cryptodev_get_feature_name(uint64_t flag);
 
 /**  Crypto device information */
 struct rte_cryptodev_info {
-       const char *driver_name;                /**< Driver name. */
-       uint8_t driver_id;                      /**< Driver identifier */
-       struct rte_pci_device *pci_dev;         /**< PCI information. */
+       const char *driver_name;        /**< Driver name. */
+       uint8_t driver_id;              /**< Driver identifier */
+       struct rte_device *device;      /**< Generic device information. */
 
-       uint64_t feature_flags;                 /**< Feature flags */
+       uint64_t feature_flags;
+       /**< Feature flags exposes HW/SW features for the given device */
 
        const struct rte_cryptodev_capabilities *capabilities;
        /**< Array of devices supported capabilities */
@@ -383,10 +368,9 @@ struct rte_cryptodev_info {
 
        struct {
                unsigned max_nb_sessions;
-               /**< Maximum number of sessions supported by device. */
-               unsigned int max_nb_sessions_per_qp;
-               /**< Maximum number of sessions per queue pair.
-                * Default 0 for infinite sessions
+               /**< Maximum number of sessions supported by device.
+                * If 0, the device does not have any limitation in
+                * number of sessions that can be used.
                 */
        } sym;
 };
@@ -601,39 +585,6 @@ rte_cryptodev_queue_pair_setup(uint8_t dev_id, uint16_t queue_pair_id,
                const struct rte_cryptodev_qp_conf *qp_conf, int socket_id,
                struct rte_mempool *session_pool);
 
-/**
- * Start a specified queue pair of a device. It is used
- * when deferred_start flag of the specified queue is true.
- *
- * @param      dev_id          The identifier of the device
- * @param      queue_pair_id   The index of the queue pair to start. The value
- *                             must be in the range [0, nb_queue_pair - 1]
- *                             previously supplied to
- *                             rte_crypto_dev_configure().
- * @return
- *   - 0: Success, the transmit queue is correctly set up.
- *   - -EINVAL: The dev_id or the queue_id out of range.
- *   - -ENOTSUP: The function not supported in PMD driver.
- */
-extern int
-rte_cryptodev_queue_pair_start(uint8_t dev_id, uint16_t queue_pair_id);
-
-/**
- * Stop specified queue pair of a device
- *
- * @param      dev_id          The identifier of the device
- * @param      queue_pair_id   The index of the queue pair to stop. The value
- *                             must be in the range [0, nb_queue_pair - 1]
- *                             previously supplied to
- *                             rte_cryptodev_configure().
- * @return
- *   - 0: Success, the transmit queue is correctly set up.
- *   - -EINVAL: The dev_id or the queue_id out of range.
- *   - -ENOTSUP: The function not supported in PMD driver.
- */
-extern int
-rte_cryptodev_queue_pair_stop(uint8_t dev_id, uint16_t queue_pair_id);
-
 /**
  * Get the number of queue pairs on a specific crypto device
  *
@@ -749,7 +700,7 @@ struct rte_cryptodev {
        struct rte_cryptodev_ops *dev_ops;
        /**< Functions exported by PMD */
        uint64_t feature_flags;
-       /**< Supported features */
+       /**< Feature flags exposes HW/SW features for the given device */
        struct rte_device *device;
        /**< Backing device */
 
@@ -951,7 +902,9 @@ rte_cryptodev_sym_session_init(uint8_t dev_id,
 
 /**
  * Frees private data for the device id, based on its device type,
- * returning it to its mempool.
+ * returning it to its mempool. It is the application's responsibility
+ * to ensure that private session data is not cleared while there are
+ * still in-flight operations using it.
  *
  * @param   dev_id   ID of device that uses the session.
  * @param   sess     Session containing the reference to the private data
@@ -968,74 +921,76 @@ rte_cryptodev_sym_session_clear(uint8_t dev_id,
  * Get the size of the header session, for all registered drivers.
  *
  * @return
- *   Size of the header session.
+ *   Size of the symmetric eader session.
  */
 unsigned int
-rte_cryptodev_get_header_session_size(void);
+rte_cryptodev_sym_get_header_session_size(void);
 
 /**
- * Get the size of the private session data for a device.
+ * Get the size of the private symmetric session data
+ * for a device.
  *
  * @param      dev_id          The device identifier.
  *
  * @return
  *   - Size of the private data, if successful
- *   - 0 if device is invalid or does not have private session
+ *   - 0 if device is invalid or does not have private
+ *   symmetric session
  */
 unsigned int
-rte_cryptodev_get_private_session_size(uint8_t dev_id);
+rte_cryptodev_sym_get_private_session_size(uint8_t dev_id);
 
 /**
- * Attach queue pair with sym session.
+ * Provide driver identifier.
  *
- * @param      dev_id          Device to which the session will be attached.
- * @param      qp_id           Queue pair to which the session will be attached.
- * @param      session         Session pointer previously allocated by
- *                             *rte_cryptodev_sym_session_create*.
+ * @param name
+ *   The pointer to a driver name.
+ * @return
+ *  The driver type identifier or -1 if no driver found
+ */
+int rte_cryptodev_driver_id_get(const char *name);
+
+/**
+ * Provide driver name.
  *
+ * @param driver_id
+ *   The driver identifier.
  * @return
- *  - On success, zero.
- *  - On failure, a negative value.
+ *  The driver name or null if no driver found
  */
-int
-rte_cryptodev_queue_pair_attach_sym_session(uint8_t dev_id, uint16_t qp_id,
-               struct rte_cryptodev_sym_session *session);
+const char *rte_cryptodev_driver_name_get(uint8_t driver_id);
 
 /**
- * Detach queue pair with sym session.
+ * Set private data for a session.
  *
- * @param      dev_id          Device to which the session is attached.
- * @param      qp_id           Queue pair to which the session is attached.
- * @param      session         Session pointer previously allocated by
+ * @param      sess            Session pointer allocated by
  *                             *rte_cryptodev_sym_session_create*.
+ * @param      data            Pointer to the private data.
+ * @param      size            Size of the private data.
  *
  * @return
  *  - On success, zero.
  *  - On failure, a negative value.
  */
-int
-rte_cryptodev_queue_pair_detach_sym_session(uint8_t dev_id, uint16_t qp_id,
-               struct rte_cryptodev_sym_session *session);
+int __rte_experimental
+rte_cryptodev_sym_session_set_private_data(
+                                       struct rte_cryptodev_sym_session *sess,
+                                       void *data,
+                                       uint16_t size);
 
 /**
- * Provide driver identifier.
+ * Get private data of a session.
  *
- * @param name
- *   The pointer to a driver name.
- * @return
- *  The driver type identifier or -1 if no driver found
- */
-int rte_cryptodev_driver_id_get(const char *name);
-
-/**
- * Provide driver name.
+ * @param      sess            Session pointer allocated by
+ *                             *rte_cryptodev_sym_session_create*.
  *
- * @param driver_id
- *   The driver identifier.
  * @return
- *  The driver name or null if no driver found
+ *  - On success return pointer to private data.
+ *  - On failure returns NULL.
  */
-const char *rte_cryptodev_driver_name_get(uint8_t driver_id);
+void * __rte_experimental
+rte_cryptodev_sym_session_get_private_data(
+                                       struct rte_cryptodev_sym_session *sess);
 
 #ifdef __cplusplus
 }