ethdev: support queue-based priority flow control
[dpdk.git] / lib / cryptodev / cryptodev_pmd.h
index ec7bb82..b9146f6 100644 (file)
  * them directly.
  */
 
-#ifdef __cplusplus
-extern "C" {
-#endif
-
 #include <string.h>
 
 #include <rte_config.h>
@@ -56,6 +52,71 @@ struct rte_cryptodev_pmd_init_params {
        unsigned int max_nb_queue_pairs;
 };
 
+/**
+ * @internal
+ * The data part, with no function pointers, associated with each device.
+ *
+ * This structure is safe to place in shared memory to be common among
+ * different processes in a multi-process configuration.
+ */
+struct rte_cryptodev_data {
+       /** Device ID for this instance */
+       uint8_t dev_id;
+       /** Socket ID where memory is allocated */
+       uint8_t socket_id;
+       /** Unique identifier name */
+       char name[RTE_CRYPTODEV_NAME_MAX_LEN];
+
+       __extension__
+       /** Device state: STARTED(1)/STOPPED(0) */
+       uint8_t dev_started : 1;
+
+       /** Session memory pool */
+       struct rte_mempool *session_pool;
+       /** Array of pointers to queue pairs. */
+       void **queue_pairs;
+       /** Number of device queue pairs. */
+       uint16_t nb_queue_pairs;
+
+       /** PMD-specific private data */
+       void *dev_private;
+} __rte_cache_aligned;
+
+/** @internal The data structure associated with each crypto device. */
+struct rte_cryptodev {
+       /** Pointer to PMD dequeue function. */
+       dequeue_pkt_burst_t dequeue_burst;
+       /** Pointer to PMD enqueue function. */
+       enqueue_pkt_burst_t enqueue_burst;
+
+       /** Pointer to device data */
+       struct rte_cryptodev_data *data;
+       /** Functions exported by PMD */
+       struct rte_cryptodev_ops *dev_ops;
+       /** Feature flags exposes HW/SW features for the given device */
+       uint64_t feature_flags;
+       /** Backing device */
+       struct rte_device *device;
+
+       /** Crypto driver identifier*/
+       uint8_t driver_id;
+
+       /** User application callback for interrupts if present */
+       struct rte_cryptodev_cb_list link_intr_cbs;
+
+       /** Context for security ops */
+       void *security_ctx;
+
+       __extension__
+       /** Flag indicating the device is attached */
+       uint8_t attached : 1;
+
+       /** User application callback for pre enqueue processing */
+       struct rte_cryptodev_cb_rcu *enq_cbs;
+       /** User application callback for post dequeue processing */
+       struct rte_cryptodev_cb_rcu *deq_cbs;
+} __rte_cache_aligned;
+
 /** Global structure used for maintaining state of allocated crypto devices */
 struct rte_cryptodev_global {
        struct rte_cryptodev *devs;     /**< Device information array */
@@ -66,7 +127,7 @@ struct rte_cryptodev_global {
 
 /* Cryptodev driver, containing the driver ID */
 struct cryptodev_driver {
-       TAILQ_ENTRY(cryptodev_driver) next; /**< Next in list. */
+       RTE_TAILQ_ENTRY(cryptodev_driver) next; /**< Next in list. */
        const struct rte_driver *driver;
        uint8_t id;
 };
@@ -96,15 +157,9 @@ __rte_internal
 struct rte_cryptodev *
 rte_cryptodev_pmd_get_named_dev(const char *name);
 
-/**
- * The pool of rte_cryptodev structures.
- */
-extern struct rte_cryptodev *rte_cryptodevs;
-
-
 /**
  * Definitions of all functions exported by a driver through the
- * the generic structure of type *crypto_dev_ops* supplied in the
+ * generic structure of type *crypto_dev_ops* supplied in the
  * *rte_cryptodev* structure associated with a device.
  */
 
@@ -428,7 +483,7 @@ rte_cryptodev_pmd_release_device(struct rte_cryptodev *cryptodev);
  * PMD assist function to parse initialisation arguments for crypto driver
  * when creating a new crypto PMD device instance.
  *
- * PMD driver should set default values for that PMD before calling function,
+ * PMD should set default values for that PMD before calling function,
  * these default values will be over-written with successfully parsed values
  * from args string.
  *
@@ -519,6 +574,19 @@ __rte_internal
 uint8_t rte_cryptodev_allocate_driver(struct cryptodev_driver *crypto_drv,
                const struct rte_driver *drv);
 
+/**
+ * @internal
+ * This is the last step of device probing. It must be called after a
+ * cryptodev is allocated and initialized successfully.
+ *
+ * @param      dev     Pointer to cryptodev struct
+ *
+ * @return
+ *  void
+ */
+__rte_internal
+void
+rte_cryptodev_pmd_probing_finish(struct rte_cryptodev *dev);
 
 #define RTE_PMD_REGISTER_CRYPTO_DRIVER(crypto_drv, drv, driver_id)\
 RTE_INIT(init_ ##driver_id)\
@@ -526,6 +594,17 @@ RTE_INIT(init_ ##driver_id)\
        driver_id = rte_cryptodev_allocate_driver(&crypto_drv, &(drv));\
 }
 
+/* Reset crypto device fastpath APIs to dummy values. */
+__rte_internal
+void
+cryptodev_fp_ops_reset(struct rte_crypto_fp_ops *fp_ops);
+
+/* Setup crypto device fastpath APIs. */
+__rte_internal
+void
+cryptodev_fp_ops_set(struct rte_crypto_fp_ops *fp_ops,
+                    const struct rte_cryptodev *dev);
+
 static inline void *
 get_sym_session_private_data(const struct rte_cryptodev_sym_session *sess,
                uint8_t driver_id) {
@@ -561,8 +640,4 @@ set_asym_session_private_data(struct rte_cryptodev_asym_session *sess,
        sess->sess_private_data[driver_id] = private_data;
 }
 
-#ifdef __cplusplus
-}
-#endif
-
 #endif /* _CRYPTODEV_PMD_H_ */