1f0f369a6SFan Zhang /* SPDX-License-Identifier: BSD-3-Clause 2254558c8SKai Ji * Copyright(c) 2022 Intel Corporation 3f0f369a6SFan Zhang */ 4f0f369a6SFan Zhang 5f0f369a6SFan Zhang #ifndef _QAT_CRYPTO_H_ 6f0f369a6SFan Zhang #define _QAT_CRYPTO_H_ 7f0f369a6SFan Zhang 8f0f369a6SFan Zhang #include <rte_cryptodev.h> 9f0f369a6SFan Zhang 10f0f369a6SFan Zhang #include "qat_device.h" 11f0f369a6SFan Zhang 12f0f369a6SFan Zhang extern uint8_t qat_sym_driver_id; 13f0f369a6SFan Zhang extern uint8_t qat_asym_driver_id; 14f0f369a6SFan Zhang 15e0a67610SKai Ji /** 16e0a67610SKai Ji * helper macro to set cryptodev capability range 17e0a67610SKai Ji * <n: name> <l: min > <r: max> <i: increment> <v: value> 18e0a67610SKai Ji **/ 19f0f369a6SFan Zhang #define CAP_RNG(n, l, r, i) .n = {.min = l, .max = r, .increment = i} 20f0f369a6SFan Zhang 21f0f369a6SFan Zhang #define CAP_RNG_ZERO(n) .n = {.min = 0, .max = 0, .increment = 0} 22f0f369a6SFan Zhang /** helper macro to set cryptodev capability value **/ 23f0f369a6SFan Zhang #define CAP_SET(n, v) .n = v 24f0f369a6SFan Zhang 25f0f369a6SFan Zhang /** private data structure for a QAT device. 26f0f369a6SFan Zhang * there can be one of these on each qat_pci_device (VF). 27f0f369a6SFan Zhang */ 28f0f369a6SFan Zhang struct qat_cryptodev_private { 29f0f369a6SFan Zhang struct qat_pci_device *qat_dev; 30f0f369a6SFan Zhang /**< The qat pci device hosting the service */ 31f0f369a6SFan Zhang uint8_t dev_id; 32f0f369a6SFan Zhang /**< Device instance for this rte_cryptodev */ 33f0f369a6SFan Zhang const struct rte_cryptodev_capabilities *qat_dev_capabilities; 34f0f369a6SFan Zhang /* QAT device symmetric crypto capabilities */ 35f0f369a6SFan Zhang const struct rte_memzone *capa_mz; 36f0f369a6SFan Zhang /* Shared memzone for storing capabilities */ 37f0f369a6SFan Zhang uint16_t min_enq_burst_threshold; 38f0f369a6SFan Zhang uint32_t internal_capabilities; /* see flags QAT_SYM_CAP_xxx */ 39*ce7a737cSKevin O'Sullivan bool cipher_crc_offload_enable; 40f0f369a6SFan Zhang enum qat_service_type service_type; 41f0f369a6SFan Zhang }; 42f0f369a6SFan Zhang 43f0f369a6SFan Zhang struct qat_capabilities_info { 44f0f369a6SFan Zhang struct rte_cryptodev_capabilities *data; 45f0f369a6SFan Zhang uint64_t size; 46f0f369a6SFan Zhang }; 47f0f369a6SFan Zhang 48b6ac58aeSArek Kusztal typedef int (*get_capabilities_info_t)(struct qat_cryptodev_private *internals, 49b6ac58aeSArek Kusztal const char *capa_memz_name, uint16_t slice_map); 50b6c82d2dSFan Zhang 51b6c82d2dSFan Zhang typedef uint64_t (*get_feature_flags_t)(struct qat_pci_device *qat_dev); 52b6c82d2dSFan Zhang 53b6c82d2dSFan Zhang typedef void * (*create_security_ctx_t)(void *cryptodev); 54b6c82d2dSFan Zhang 55254558c8SKai Ji typedef int (*set_session_t)(void *cryptodev, void *session); 56254558c8SKai Ji 5785fec6fdSKai Ji typedef int (*set_raw_dp_ctx_t)(void *raw_dp_ctx, void *ctx); 5885fec6fdSKai Ji 59b6c82d2dSFan Zhang struct qat_crypto_gen_dev_ops { 60b6c82d2dSFan Zhang get_feature_flags_t get_feature_flags; 61b6c82d2dSFan Zhang get_capabilities_info_t get_capabilities; 62b6c82d2dSFan Zhang struct rte_cryptodev_ops *cryptodev_ops; 63254558c8SKai Ji set_session_t set_session; 6485fec6fdSKai Ji set_raw_dp_ctx_t set_raw_dp_ctx; 65b6c82d2dSFan Zhang create_security_ctx_t create_security_ctx; 66b6c82d2dSFan Zhang }; 67b6c82d2dSFan Zhang 68254558c8SKai Ji extern struct qat_crypto_gen_dev_ops qat_sym_gen_dev_ops[]; 69254558c8SKai Ji extern struct qat_crypto_gen_dev_ops qat_asym_gen_dev_ops[]; 70254558c8SKai Ji 71f0f369a6SFan Zhang int 72f0f369a6SFan Zhang qat_cryptodev_config(struct rte_cryptodev *dev, 73f0f369a6SFan Zhang struct rte_cryptodev_config *config); 74f0f369a6SFan Zhang 75f0f369a6SFan Zhang int 76f0f369a6SFan Zhang qat_cryptodev_start(struct rte_cryptodev *dev); 77f0f369a6SFan Zhang 78f0f369a6SFan Zhang void 79f0f369a6SFan Zhang qat_cryptodev_stop(struct rte_cryptodev *dev); 80f0f369a6SFan Zhang 81f0f369a6SFan Zhang int 82f0f369a6SFan Zhang qat_cryptodev_close(struct rte_cryptodev *dev); 83f0f369a6SFan Zhang 84f0f369a6SFan Zhang void 85f0f369a6SFan Zhang qat_cryptodev_info_get(struct rte_cryptodev *dev, 86f0f369a6SFan Zhang struct rte_cryptodev_info *info); 87f0f369a6SFan Zhang 88f0f369a6SFan Zhang void 89f0f369a6SFan Zhang qat_cryptodev_stats_get(struct rte_cryptodev *dev, 90f0f369a6SFan Zhang struct rte_cryptodev_stats *stats); 91f0f369a6SFan Zhang 92f0f369a6SFan Zhang void 93f0f369a6SFan Zhang qat_cryptodev_stats_reset(struct rte_cryptodev *dev); 94f0f369a6SFan Zhang 95f0f369a6SFan Zhang int 96f0f369a6SFan Zhang qat_cryptodev_qp_setup(struct rte_cryptodev *dev, uint16_t qp_id, 97f0f369a6SFan Zhang const struct rte_cryptodev_qp_conf *qp_conf, int socket_id); 98f0f369a6SFan Zhang 99f0f369a6SFan Zhang int 100f0f369a6SFan Zhang qat_cryptodev_qp_release(struct rte_cryptodev *dev, uint16_t queue_pair_id); 101f0f369a6SFan Zhang 102f0f369a6SFan Zhang #endif 103