New upstream version 17.11.3
[deb_dpdk.git] / lib / librte_cryptodev / rte_cryptodev.c
index b40c028..b8e14b8 100644 (file)
@@ -290,19 +290,40 @@ rte_cryptodev_sym_capability_get(uint8_t dev_id,
 
 }
 
-#define param_range_check(x, y) \
-       (((x < y.min) || (x > y.max)) || \
-       (y.increment != 0 && (x % y.increment) != 0))
+static int
+param_range_check(uint16_t size, const struct rte_crypto_param_range *range)
+{
+       unsigned int next_size;
+
+       /* Check lower/upper bounds */
+       if (size < range->min)
+               return -1;
+
+       if (size > range->max)
+               return -1;
+
+       /* If range is actually only one value, size is correct */
+       if (range->increment == 0)
+               return 0;
+
+       /* Check if value is one of the supported sizes */
+       for (next_size = range->min; next_size <= range->max;
+                       next_size += range->increment)
+               if (size == next_size)
+                       return 0;
+
+       return -1;
+}
 
 int
 rte_cryptodev_sym_capability_check_cipher(
                const struct rte_cryptodev_symmetric_capability *capability,
                uint16_t key_size, uint16_t iv_size)
 {
-       if (param_range_check(key_size, capability->cipher.key_size))
+       if (param_range_check(key_size, &capability->cipher.key_size) != 0)
                return -1;
 
-       if (param_range_check(iv_size, capability->cipher.iv_size))
+       if (param_range_check(iv_size, &capability->cipher.iv_size) != 0)
                return -1;
 
        return 0;
@@ -313,13 +334,13 @@ rte_cryptodev_sym_capability_check_auth(
                const struct rte_cryptodev_symmetric_capability *capability,
                uint16_t key_size, uint16_t digest_size, uint16_t iv_size)
 {
-       if (param_range_check(key_size, capability->auth.key_size))
+       if (param_range_check(key_size, &capability->auth.key_size) != 0)
                return -1;
 
-       if (param_range_check(digest_size, capability->auth.digest_size))
+       if (param_range_check(digest_size, &capability->auth.digest_size) != 0)
                return -1;
 
-       if (param_range_check(iv_size, capability->auth.iv_size))
+       if (param_range_check(iv_size, &capability->auth.iv_size) != 0)
                return -1;
 
        return 0;
@@ -331,16 +352,16 @@ rte_cryptodev_sym_capability_check_aead(
                uint16_t key_size, uint16_t digest_size, uint16_t aad_size,
                uint16_t iv_size)
 {
-       if (param_range_check(key_size, capability->aead.key_size))
+       if (param_range_check(key_size, &capability->aead.key_size) != 0)
                return -1;
 
-       if (param_range_check(digest_size, capability->aead.digest_size))
+       if (param_range_check(digest_size, &capability->aead.digest_size) != 0)
                return -1;
 
-       if (param_range_check(aad_size, capability->aead.aad_size))
+       if (param_range_check(aad_size, &capability->aead.aad_size) != 0)
                return -1;
 
-       if (param_range_check(iv_size, capability->aead.iv_size))
+       if (param_range_check(iv_size, &capability->aead.iv_size) != 0)
                return -1;
 
        return 0;
@@ -362,6 +383,8 @@ rte_cryptodev_get_feature_name(uint64_t flag)
                return "CPU_AVX";
        case RTE_CRYPTODEV_FF_CPU_AVX2:
                return "CPU_AVX2";
+       case RTE_CRYPTODEV_FF_CPU_AVX512:
+               return "CPU_AVX512";
        case RTE_CRYPTODEV_FF_CPU_AESNI:
                return "CPU_AESNI";
        case RTE_CRYPTODEV_FF_HW_ACCELERATED:
@@ -1120,7 +1143,7 @@ rte_cryptodev_sym_session_create(struct rte_mempool *mp)
        struct rte_cryptodev_sym_session *sess;
 
        /* Allocate a session structure from the session pool */
-       if (rte_mempool_get(mp, (void *)&sess)) {
+       if (rte_mempool_get(mp, (void **)&sess)) {
                CDEV_LOG_ERR("couldn't get object from session mempool");
                return NULL;
        }