Branch data Line data Source code
1 : : /* SPDX-License-Identifier: BSD-3-Clause
2 : : * Copyright(c) 2017-2022 Intel Corporation
3 : : */
4 : :
5 : : #include <rte_cryptodev.h>
6 : : #include <cryptodev_pmd.h>
7 : : #include "qat_asym.h"
8 : : #include "qat_crypto.h"
9 : : #include "qat_crypto_pmd_gens.h"
10 : :
11 : : struct rte_cryptodev_ops qat_asym_crypto_ops_gen1 = {
12 : : /* Device related operations */
13 : : .dev_configure = qat_cryptodev_config,
14 : : .dev_start = qat_cryptodev_start,
15 : : .dev_stop = qat_cryptodev_stop,
16 : : .dev_close = qat_cryptodev_close,
17 : : .dev_infos_get = qat_cryptodev_info_get,
18 : :
19 : : .stats_get = qat_cryptodev_stats_get,
20 : : .stats_reset = qat_cryptodev_stats_reset,
21 : : .queue_pair_setup = qat_cryptodev_qp_setup,
22 : : .queue_pair_release = qat_cryptodev_qp_release,
23 : :
24 : : /* Crypto related operations */
25 : : .asym_session_get_size = qat_asym_session_get_private_size,
26 : : .asym_session_configure = qat_asym_session_configure,
27 : : .asym_session_clear = qat_asym_session_clear
28 : : };
29 : :
30 : : static struct rte_cryptodev_capabilities qat_asym_crypto_caps_gen1[] = {
31 : : QAT_ASYM_CAP(MODEX,
32 : : 0, 1, 512, 1),
33 : : QAT_ASYM_CAP(MODINV,
34 : : 0, 1, 512, 1),
35 : : QAT_ASYM_CAP(RSA,
36 : : ((1 << RTE_CRYPTO_ASYM_OP_SIGN) |
37 : : (1 << RTE_CRYPTO_ASYM_OP_VERIFY) |
38 : : (1 << RTE_CRYPTO_ASYM_OP_ENCRYPT) |
39 : : (1 << RTE_CRYPTO_ASYM_OP_DECRYPT)),
40 : : 64, 512, 64),
41 : : RTE_CRYPTODEV_END_OF_CAPABILITIES_LIST()
42 : : };
43 : :
44 : : int
45 : 0 : qat_asym_crypto_cap_get_gen1(struct qat_cryptodev_private *internals,
46 : : const char *capa_memz_name,
47 : : const uint16_t __rte_unused slice_map)
48 : : {
49 : : const uint32_t size = sizeof(qat_asym_crypto_caps_gen1);
50 : : uint32_t i;
51 : :
52 : 0 : internals->capa_mz = rte_memzone_lookup(capa_memz_name);
53 [ # # ]: 0 : if (internals->capa_mz == NULL) {
54 : 0 : internals->capa_mz = rte_memzone_reserve(capa_memz_name,
55 : 0 : size, rte_socket_id(), 0);
56 [ # # ]: 0 : if (internals->capa_mz == NULL) {
57 : 0 : QAT_LOG(DEBUG,
58 : : "Error allocating memzone for capabilities");
59 : 0 : return -1;
60 : : }
61 : : }
62 : :
63 : 0 : struct rte_cryptodev_capabilities *addr =
64 : : (struct rte_cryptodev_capabilities *)
65 : 0 : internals->capa_mz->addr;
66 : : const struct rte_cryptodev_capabilities *capabilities =
67 : : qat_asym_crypto_caps_gen1;
68 : : const uint32_t capa_num =
69 : : size / sizeof(struct rte_cryptodev_capabilities);
70 : : uint32_t curr_capa = 0;
71 : :
72 [ # # ]: 0 : for (i = 0; i < capa_num; i++) {
73 : 0 : memcpy(addr + curr_capa, capabilities + i,
74 : : sizeof(struct rte_cryptodev_capabilities));
75 : 0 : curr_capa++;
76 : : }
77 : 0 : internals->qat_dev_capabilities = internals->capa_mz->addr;
78 : :
79 : 0 : return 0;
80 : : }
81 : :
82 : : uint64_t
83 : 0 : qat_asym_crypto_feature_flags_get_gen1(
84 : : struct qat_pci_device *qat_dev __rte_unused)
85 : : {
86 : : uint64_t feature_flags = RTE_CRYPTODEV_FF_ASYMMETRIC_CRYPTO |
87 : : RTE_CRYPTODEV_FF_HW_ACCELERATED |
88 : : RTE_CRYPTODEV_FF_ASYM_SESSIONLESS |
89 : : RTE_CRYPTODEV_FF_RSA_PRIV_OP_KEY_EXP |
90 : : RTE_CRYPTODEV_FF_RSA_PRIV_OP_KEY_QT;
91 : :
92 : 0 : return feature_flags;
93 : : }
94 : :
95 : : int
96 : 0 : qat_asym_crypto_set_session_gen1(void *cdev __rte_unused,
97 : : void *session __rte_unused)
98 : : {
99 : 0 : return 0;
100 : : }
101 : :
102 : 235 : RTE_INIT(qat_asym_crypto_gen1_init)
103 : : {
104 : 235 : qat_asym_gen_dev_ops[QAT_GEN1].cryptodev_ops =
105 : : &qat_asym_crypto_ops_gen1;
106 : 235 : qat_asym_gen_dev_ops[QAT_GEN1].get_capabilities =
107 : : qat_asym_crypto_cap_get_gen1;
108 : 235 : qat_asym_gen_dev_ops[QAT_GEN1].get_feature_flags =
109 : : qat_asym_crypto_feature_flags_get_gen1;
110 : 235 : }
|