1*a4b16dadSTom Zanussi /* SPDX-License-Identifier: (BSD-3-Clause OR GPL-2.0-only) */ 2*a4b16dadSTom Zanussi /* Copyright(c) 2014 - 2020 Intel Corporation */ 3*a4b16dadSTom Zanussi #ifndef _QAT_CRYPTO_INSTANCE_H_ 4*a4b16dadSTom Zanussi #define _QAT_CRYPTO_INSTANCE_H_ 5*a4b16dadSTom Zanussi 6*a4b16dadSTom Zanussi #include <crypto/aes.h> 7*a4b16dadSTom Zanussi #include <linux/list.h> 8*a4b16dadSTom Zanussi #include <linux/slab.h> 9*a4b16dadSTom Zanussi #include "adf_accel_devices.h" 10*a4b16dadSTom Zanussi #include "icp_qat_fw_la.h" 11*a4b16dadSTom Zanussi #include "qat_algs_send.h" 12*a4b16dadSTom Zanussi #include "qat_bl.h" 13*a4b16dadSTom Zanussi 14*a4b16dadSTom Zanussi struct qat_crypto_instance { 15*a4b16dadSTom Zanussi struct adf_etr_ring_data *sym_tx; 16*a4b16dadSTom Zanussi struct adf_etr_ring_data *sym_rx; 17*a4b16dadSTom Zanussi struct adf_etr_ring_data *pke_tx; 18*a4b16dadSTom Zanussi struct adf_etr_ring_data *pke_rx; 19*a4b16dadSTom Zanussi struct adf_accel_dev *accel_dev; 20*a4b16dadSTom Zanussi struct list_head list; 21*a4b16dadSTom Zanussi unsigned long state; 22*a4b16dadSTom Zanussi int id; 23*a4b16dadSTom Zanussi atomic_t refctr; 24*a4b16dadSTom Zanussi struct qat_instance_backlog backlog; 25*a4b16dadSTom Zanussi }; 26*a4b16dadSTom Zanussi 27*a4b16dadSTom Zanussi struct qat_crypto_request; 28*a4b16dadSTom Zanussi 29*a4b16dadSTom Zanussi struct qat_crypto_request { 30*a4b16dadSTom Zanussi struct icp_qat_fw_la_bulk_req req; 31*a4b16dadSTom Zanussi union { 32*a4b16dadSTom Zanussi struct qat_alg_aead_ctx *aead_ctx; 33*a4b16dadSTom Zanussi struct qat_alg_skcipher_ctx *skcipher_ctx; 34*a4b16dadSTom Zanussi }; 35*a4b16dadSTom Zanussi union { 36*a4b16dadSTom Zanussi struct aead_request *aead_req; 37*a4b16dadSTom Zanussi struct skcipher_request *skcipher_req; 38*a4b16dadSTom Zanussi }; 39*a4b16dadSTom Zanussi struct qat_request_buffs buf; 40*a4b16dadSTom Zanussi void (*cb)(struct icp_qat_fw_la_resp *resp, 41*a4b16dadSTom Zanussi struct qat_crypto_request *req); 42*a4b16dadSTom Zanussi union { 43*a4b16dadSTom Zanussi struct { 44*a4b16dadSTom Zanussi __be64 iv_hi; 45*a4b16dadSTom Zanussi __be64 iv_lo; 46*a4b16dadSTom Zanussi }; 47*a4b16dadSTom Zanussi u8 iv[AES_BLOCK_SIZE]; 48*a4b16dadSTom Zanussi }; 49*a4b16dadSTom Zanussi bool encryption; 50*a4b16dadSTom Zanussi struct qat_alg_req alg_req; 51*a4b16dadSTom Zanussi }; 52*a4b16dadSTom Zanussi adf_hw_dev_has_crypto(struct adf_accel_dev * accel_dev)53*a4b16dadSTom Zanussistatic inline bool adf_hw_dev_has_crypto(struct adf_accel_dev *accel_dev) 54*a4b16dadSTom Zanussi { 55*a4b16dadSTom Zanussi struct adf_hw_device_data *hw_device = accel_dev->hw_device; 56*a4b16dadSTom Zanussi u32 mask = ~hw_device->accel_capabilities_mask; 57*a4b16dadSTom Zanussi 58*a4b16dadSTom Zanussi if (mask & ADF_ACCEL_CAPABILITIES_CRYPTO_SYMMETRIC) 59*a4b16dadSTom Zanussi return false; 60*a4b16dadSTom Zanussi if (mask & ADF_ACCEL_CAPABILITIES_CRYPTO_ASYMMETRIC) 61*a4b16dadSTom Zanussi return false; 62*a4b16dadSTom Zanussi if (mask & ADF_ACCEL_CAPABILITIES_AUTHENTICATION) 63*a4b16dadSTom Zanussi return false; 64*a4b16dadSTom Zanussi 65*a4b16dadSTom Zanussi return true; 66*a4b16dadSTom Zanussi } 67*a4b16dadSTom Zanussi 68*a4b16dadSTom Zanussi #endif 69