net/ice/base: avoid undefined behavior
[dpdk.git] / drivers / crypto / caam_jr / caam_jr.c
index 57101d9..caf2386 100644 (file)
 #include <caam_jr_log.h>
 
 /* RTA header files */
-#include <hw/desc/common.h>
-#include <hw/desc/algo.h>
-#include <of.h>
+#include <desc/common.h>
+#include <desc/algo.h>
+#include <dpaa_of.h>
 #ifdef RTE_LIBRTE_PMD_CAAM_JR_DEBUG
-#define CAAM_JR_DBG    1
+#define CAAM_JR_DBG    1
 #else
 #define CAAM_JR_DBG    0
 #endif
@@ -37,8 +37,6 @@
 static uint8_t cryptodev_driver_id;
 int caam_jr_logtype;
 
-enum rta_sec_era rta_sec_era;
-
 /* Lists the states possible for the SEC user space driver. */
 enum sec_driver_state_e {
        SEC_DRIVER_STATE_IDLE,          /* Driver not initialized */
@@ -336,7 +334,6 @@ caam_jr_prep_cdb(struct caam_jr_session *ses)
                shared_desc_len = cnstr_shdsc_blkcipher(
                                                cdb->sh_desc, true,
                                                swap, SHR_NEVER, &alginfo_c,
-                                               NULL,
                                                ses->iv.length,
                                                ses->dir);
        } else if (is_auth_only(ses)) {
@@ -450,13 +447,11 @@ caam_jr_prep_cdb(struct caam_jr_session *ses)
                                                &alginfo_c, &alginfo_a);
                        }
                } else {
-                       /* Auth_only_len is set as 0 here and it will be
-                        * overwritten in fd for each packet.
-                        */
+                       /* Auth_only_len is overwritten in fd for each job */
                        shared_desc_len = cnstr_shdsc_authenc(cdb->sh_desc,
                                        true, swap, SHR_SERIAL,
                                        &alginfo_c, &alginfo_a,
-                                       ses->iv.length, 0,
+                                       ses->iv.length,
                                        ses->digest_length, ses->dir);
                }
        }
@@ -1066,10 +1061,11 @@ build_cipher_auth_sg(struct rte_crypto_op *op, struct caam_jr_session *ses)
        uint8_t *IV_ptr = rte_crypto_op_ctod_offset(op, uint8_t *,
                        ses->iv.offset);
        struct sec_job_descriptor_t *jobdescr;
-       uint32_t auth_only_len;
-
-       auth_only_len = op->sym->auth.data.length -
-                               op->sym->cipher.data.length;
+       uint16_t auth_hdr_len = sym->cipher.data.offset -
+                       sym->auth.data.offset;
+       uint16_t auth_tail_len = sym->auth.data.length -
+                       sym->cipher.data.length - auth_hdr_len;
+       uint32_t auth_only_len = (auth_tail_len << 16) | auth_hdr_len;
 
        if (sym->m_dst) {
                mbuf = sym->m_dst;
@@ -1208,10 +1204,11 @@ build_cipher_auth(struct rte_crypto_op *op, struct caam_jr_session *ses)
        uint8_t *IV_ptr = rte_crypto_op_ctod_offset(op, uint8_t *,
                        ses->iv.offset);
        struct sec_job_descriptor_t *jobdescr;
-       uint32_t auth_only_len;
-
-       auth_only_len = op->sym->auth.data.length -
-                               op->sym->cipher.data.length;
+       uint16_t auth_hdr_len = sym->cipher.data.offset -
+                       sym->auth.data.offset;
+       uint16_t auth_tail_len = sym->auth.data.length -
+                       sym->cipher.data.length - auth_hdr_len;
+       uint32_t auth_only_len = (auth_tail_len << 16) | auth_hdr_len;
 
        src_start_addr = rte_pktmbuf_iova(sym->m_src);
        if (sym->m_dst)
@@ -1539,15 +1536,6 @@ caam_jr_queue_pair_setup(
        return 0;
 }
 
-/* Return the number of allocated queue pairs */
-static uint32_t
-caam_jr_queue_pair_count(struct rte_cryptodev *dev)
-{
-       PMD_INIT_FUNC_TRACE();
-
-       return dev->data->nb_queue_pairs;
-}
-
 /* Returns the size of the aesni gcm session structure */
 static unsigned int
 caam_jr_sym_session_get_size(struct rte_cryptodev *dev __rte_unused)
@@ -2063,7 +2051,6 @@ static struct rte_cryptodev_ops caam_jr_ops = {
        .stats_reset          = caam_jr_stats_reset,
        .queue_pair_setup     = caam_jr_queue_pair_setup,
        .queue_pair_release   = caam_jr_queue_pair_release,
-       .queue_pair_count     = caam_jr_queue_pair_count,
        .sym_session_get_size = caam_jr_sym_session_get_size,
        .sym_session_configure = caam_jr_sym_session_configure,
        .sym_session_clear    = caam_jr_sym_session_clear
@@ -2085,7 +2072,7 @@ static struct rte_security_ops caam_jr_security_ops = {
 static void
 close_job_ring(struct sec_job_ring_t *job_ring)
 {
-       if (job_ring->irq_fd) {
+       if (job_ring->irq_fd != -1) {
                /* Producer index is frozen. If consumer index is not equal
                 * with producer index, then we have descs to flush.
                 */
@@ -2094,7 +2081,7 @@ close_job_ring(struct sec_job_ring_t *job_ring)
 
                /* free the uio job ring */
                free_job_ring(job_ring->irq_fd);
-               job_ring->irq_fd = 0;
+               job_ring->irq_fd = -1;
                caam_jr_dma_free(job_ring->input_ring);
                caam_jr_dma_free(job_ring->output_ring);
                g_job_rings_no--;
@@ -2198,7 +2185,7 @@ caam_jr_dev_uninit(struct rte_cryptodev *dev)
  *
  */
 static void *
-init_job_ring(void *reg_base_addr, uint32_t irq_id)
+init_job_ring(void *reg_base_addr, int irq_id)
 {
        struct sec_job_ring_t *job_ring = NULL;
        int i, ret = 0;
@@ -2208,7 +2195,7 @@ init_job_ring(void *reg_base_addr, uint32_t irq_id)
        int irq_coalescing_count = 0;
 
        for (i = 0; i < MAX_SEC_JOB_RINGS; i++) {
-               if (g_job_rings[i].irq_fd == 0) {
+               if (g_job_rings[i].irq_fd == -1) {
                        job_ring = &g_job_rings[i];
                        g_job_rings_no++;
                        break;
@@ -2461,6 +2448,15 @@ cryptodev_caam_jr_remove(struct rte_vdev_device *vdev)
        return rte_cryptodev_pmd_destroy(cryptodev);
 }
 
+static void
+sec_job_rings_init(void)
+{
+       int i;
+
+       for (i = 0; i < MAX_SEC_JOB_RINGS; i++)
+               g_job_rings[i].irq_fd = -1;
+}
+
 static struct rte_vdev_driver cryptodev_caam_jr_drv = {
        .probe = cryptodev_caam_jr_probe,
        .remove = cryptodev_caam_jr_remove
@@ -2475,6 +2471,12 @@ RTE_PMD_REGISTER_PARAM_STRING(CRYPTODEV_NAME_CAAM_JR_PMD,
 RTE_PMD_REGISTER_CRYPTO_DRIVER(caam_jr_crypto_drv, cryptodev_caam_jr_drv.driver,
                cryptodev_driver_id);
 
+RTE_INIT(caam_jr_init)
+{
+       sec_uio_job_rings_init();
+       sec_job_rings_init();
+}
+
 RTE_INIT(caam_jr_init_log)
 {
        caam_jr_logtype = rte_log_register("pmd.crypto.caam");