From: root <root@localhost.localdomain> <br /> <br />Add crypto device operations for zsda devices.<br /> <br />Signed-off-by: Hanxiao Li <li.hanxiao@zte.com.cn> <br />---<br /> drivers/crypto/zsda/zsda_sym_pmd.c | 94 ++++++++++++++++++++++++++++--<br /> 1 file changed, 89 insertions(+), 5 deletions(-)<br /> <br />diff --git a/drivers/crypto/zsda/zsda_sym_pmd.c b/drivers/crypto/zsda/zsda_sym_pmd.c<br />index 0fa546205b..5e714d54bf 100644<br />--- a/drivers/crypto/zsda/zsda_sym_pmd.c<br />+++ b/drivers/crypto/zsda/zsda_sym_pmd.c<br />@@ -8,13 +8,95 @@<br />  <br /> uint8_t zsda_sym_driver_id;<br />  <br />+static int<br />+zsda_sym_dev_config(__rte_unused struct rte_cryptodev *dev,<br />+            __rte_unused struct rte_cryptodev_config *config)<br />+{<br />+    return ZSDA_SUCCESS;<br />+}<br />+<br />+static int<br />+zsda_sym_dev_start(struct rte_cryptodev *dev)<br />+{<br />+    struct zsda_sym_dev_private *sym_dev = dev->data->dev_private;<br />+    int ret;<br />+<br />+    ret = zsda_queue_start(sym_dev->zsda_pci_dev->pci_dev);<br />+<br />+    return ret;<br />+}<br />+<br />+static void<br />+zsda_sym_dev_stop(struct rte_cryptodev *dev)<br />+{<br />+    struct zsda_sym_dev_private *sym_dev = dev->data->dev_private;<br />+<br />+    zsda_queue_stop(sym_dev->zsda_pci_dev->pci_dev);<br />+}<br />+<br />+static int<br />+zsda_sym_qp_release(struct rte_cryptodev *dev, uint16_t queue_pair_id)<br />+{<br />+    return zsda_queue_pair_release(<br />+        (struct zsda_qp **)&(dev->data->queue_pairs[queue_pair_id]));<br />+}<br />+<br />+static int<br />+zsda_sym_dev_close(struct rte_cryptodev *dev)<br />+{<br />+    int ret = ZSDA_SUCCESS;<br />+    uint16_t i;<br />+<br />+    for (i = 0; i < dev->data->nb_queue_pairs; i++)<br />+        ret |= zsda_sym_qp_release(dev, i);<br />+<br />+    return ret;<br />+}<br />+<br />+static uint16_t<br />+zsda_sym_max_nb_qps(void)<br />+{<br />+    uint16_t encrypt = zsda_nb_qps.encrypt;<br />+    uint16_t decrypt = zsda_nb_qps.decrypt;<br />+    uint16_t hash = zsda_nb_qps.hash;<br />+    uint16_t min = 0;<br />+<br />+    if ((encrypt == MAX_QPS_ON_FUNCTION) ||<br />+        (decrypt == MAX_QPS_ON_FUNCTION) ||<br />+        (hash == MAX_QPS_ON_FUNCTION))<br />+        min = MAX_QPS_ON_FUNCTION;<br />+    else {<br />+        min = (encrypt < decrypt) ? encrypt : decrypt;<br />+        min = (min < hash) ? min : hash;<br />+    }<br />+<br />+    if (min == 0)<br />+        return MAX_QPS_ON_FUNCTION;<br />+    return min;<br />+}<br />+<br />+static void<br />+zsda_sym_dev_info_get(struct rte_cryptodev *dev,<br />+              struct rte_cryptodev_info *info)<br />+{<br />+    struct zsda_sym_dev_private *sym_dev_priv = dev->data->dev_private;<br />+<br />+    if (info != NULL) {<br />+        info->max_nb_queue_pairs = zsda_sym_max_nb_qps();<br />+        info->feature_flags = dev->feature_flags;<br />+        info->capabilities = sym_dev_priv->zsda_dev_capabilities;<br />+        info->driver_id = zsda_sym_driver_id;<br />+        info->sym.max_nb_sessions = 0;<br />+    }<br />+}<br />+<br /> static struct rte_cryptodev_ops crypto_zsda_ops = {<br />  <br />-    .dev_configure = NULL,<br />-    .dev_start = NULL,<br />-    .dev_stop = NULL,<br />-    .dev_close = NULL,<br />-    .dev_infos_get = NULL,<br />+    .dev_configure = zsda_sym_dev_config,<br />+    .dev_start = zsda_sym_dev_start,<br />+    .dev_stop = zsda_sym_dev_stop,<br />+    .dev_close = zsda_sym_dev_close,<br />+    .dev_infos_get = zsda_sym_dev_info_get,<br />  <br />     .stats_get = NULL,<br />     .stats_reset = NULL,<br />@@ -104,6 +186,8 @@ zsda_sym_dev_destroy(struct zsda_pci_device *zsda_pci_dev)<br />     if (rte_eal_process_type() == RTE_PROC_PRIMARY)<br />         rte_memzone_free(sym_dev_priv->capa_mz);<br />  <br />+    zsda_sym_dev_close(sym_dev_priv->cryptodev);<br />+<br />     rte_cryptodev_pmd_destroy(sym_dev_priv->cryptodev);<br />     zsda_devs[zsda_pci_dev->zsda_dev_id].sym_rte_dev.name = NULL;<br />     zsda_pci_dev->sym_dev_priv = NULL;<br />--  <br />2.27.0<br />