1*6f03f0e8SSrujana Challa /* SPDX-License-Identifier: GPL-2.0-only 2*6f03f0e8SSrujana Challa * Copyright (C) 2020 Marvell. 3*6f03f0e8SSrujana Challa */ 4*6f03f0e8SSrujana Challa 5*6f03f0e8SSrujana Challa #ifndef __OTX2_CPT_ALGS_H 6*6f03f0e8SSrujana Challa #define __OTX2_CPT_ALGS_H 7*6f03f0e8SSrujana Challa 8*6f03f0e8SSrujana Challa #include <crypto/hash.h> 9*6f03f0e8SSrujana Challa #include <crypto/skcipher.h> 10*6f03f0e8SSrujana Challa #include <crypto/aead.h> 11*6f03f0e8SSrujana Challa #include "otx2_cpt_common.h" 12*6f03f0e8SSrujana Challa 13*6f03f0e8SSrujana Challa #define OTX2_CPT_MAX_ENC_KEY_SIZE 32 14*6f03f0e8SSrujana Challa #define OTX2_CPT_MAX_HASH_KEY_SIZE 64 15*6f03f0e8SSrujana Challa #define OTX2_CPT_MAX_KEY_SIZE (OTX2_CPT_MAX_ENC_KEY_SIZE + \ 16*6f03f0e8SSrujana Challa OTX2_CPT_MAX_HASH_KEY_SIZE) 17*6f03f0e8SSrujana Challa enum otx2_cpt_request_type { 18*6f03f0e8SSrujana Challa OTX2_CPT_ENC_DEC_REQ = 0x1, 19*6f03f0e8SSrujana Challa OTX2_CPT_AEAD_ENC_DEC_REQ = 0x2, 20*6f03f0e8SSrujana Challa OTX2_CPT_AEAD_ENC_DEC_NULL_REQ = 0x3, 21*6f03f0e8SSrujana Challa OTX2_CPT_PASSTHROUGH_REQ = 0x4 22*6f03f0e8SSrujana Challa }; 23*6f03f0e8SSrujana Challa 24*6f03f0e8SSrujana Challa enum otx2_cpt_major_opcodes { 25*6f03f0e8SSrujana Challa OTX2_CPT_MAJOR_OP_MISC = 0x01, 26*6f03f0e8SSrujana Challa OTX2_CPT_MAJOR_OP_FC = 0x33, 27*6f03f0e8SSrujana Challa OTX2_CPT_MAJOR_OP_HMAC = 0x35, 28*6f03f0e8SSrujana Challa }; 29*6f03f0e8SSrujana Challa 30*6f03f0e8SSrujana Challa enum otx2_cpt_cipher_type { 31*6f03f0e8SSrujana Challa OTX2_CPT_CIPHER_NULL = 0x0, 32*6f03f0e8SSrujana Challa OTX2_CPT_DES3_CBC = 0x1, 33*6f03f0e8SSrujana Challa OTX2_CPT_DES3_ECB = 0x2, 34*6f03f0e8SSrujana Challa OTX2_CPT_AES_CBC = 0x3, 35*6f03f0e8SSrujana Challa OTX2_CPT_AES_ECB = 0x4, 36*6f03f0e8SSrujana Challa OTX2_CPT_AES_CFB = 0x5, 37*6f03f0e8SSrujana Challa OTX2_CPT_AES_CTR = 0x6, 38*6f03f0e8SSrujana Challa OTX2_CPT_AES_GCM = 0x7, 39*6f03f0e8SSrujana Challa OTX2_CPT_AES_XTS = 0x8 40*6f03f0e8SSrujana Challa }; 41*6f03f0e8SSrujana Challa 42*6f03f0e8SSrujana Challa enum otx2_cpt_mac_type { 43*6f03f0e8SSrujana Challa OTX2_CPT_MAC_NULL = 0x0, 44*6f03f0e8SSrujana Challa OTX2_CPT_MD5 = 0x1, 45*6f03f0e8SSrujana Challa OTX2_CPT_SHA1 = 0x2, 46*6f03f0e8SSrujana Challa OTX2_CPT_SHA224 = 0x3, 47*6f03f0e8SSrujana Challa OTX2_CPT_SHA256 = 0x4, 48*6f03f0e8SSrujana Challa OTX2_CPT_SHA384 = 0x5, 49*6f03f0e8SSrujana Challa OTX2_CPT_SHA512 = 0x6, 50*6f03f0e8SSrujana Challa OTX2_CPT_GMAC = 0x7 51*6f03f0e8SSrujana Challa }; 52*6f03f0e8SSrujana Challa 53*6f03f0e8SSrujana Challa enum otx2_cpt_aes_key_len { 54*6f03f0e8SSrujana Challa OTX2_CPT_AES_128_BIT = 0x1, 55*6f03f0e8SSrujana Challa OTX2_CPT_AES_192_BIT = 0x2, 56*6f03f0e8SSrujana Challa OTX2_CPT_AES_256_BIT = 0x3 57*6f03f0e8SSrujana Challa }; 58*6f03f0e8SSrujana Challa 59*6f03f0e8SSrujana Challa union otx2_cpt_encr_ctrl { 60*6f03f0e8SSrujana Challa u64 u; 61*6f03f0e8SSrujana Challa struct { 62*6f03f0e8SSrujana Challa #if defined(__BIG_ENDIAN_BITFIELD) 63*6f03f0e8SSrujana Challa u64 enc_cipher:4; 64*6f03f0e8SSrujana Challa u64 reserved_59:1; 65*6f03f0e8SSrujana Challa u64 aes_key:2; 66*6f03f0e8SSrujana Challa u64 iv_source:1; 67*6f03f0e8SSrujana Challa u64 mac_type:4; 68*6f03f0e8SSrujana Challa u64 reserved_49_51:3; 69*6f03f0e8SSrujana Challa u64 auth_input_type:1; 70*6f03f0e8SSrujana Challa u64 mac_len:8; 71*6f03f0e8SSrujana Challa u64 reserved_32_39:8; 72*6f03f0e8SSrujana Challa u64 encr_offset:16; 73*6f03f0e8SSrujana Challa u64 iv_offset:8; 74*6f03f0e8SSrujana Challa u64 auth_offset:8; 75*6f03f0e8SSrujana Challa #else 76*6f03f0e8SSrujana Challa u64 auth_offset:8; 77*6f03f0e8SSrujana Challa u64 iv_offset:8; 78*6f03f0e8SSrujana Challa u64 encr_offset:16; 79*6f03f0e8SSrujana Challa u64 reserved_32_39:8; 80*6f03f0e8SSrujana Challa u64 mac_len:8; 81*6f03f0e8SSrujana Challa u64 auth_input_type:1; 82*6f03f0e8SSrujana Challa u64 reserved_49_51:3; 83*6f03f0e8SSrujana Challa u64 mac_type:4; 84*6f03f0e8SSrujana Challa u64 iv_source:1; 85*6f03f0e8SSrujana Challa u64 aes_key:2; 86*6f03f0e8SSrujana Challa u64 reserved_59:1; 87*6f03f0e8SSrujana Challa u64 enc_cipher:4; 88*6f03f0e8SSrujana Challa #endif 89*6f03f0e8SSrujana Challa } e; 90*6f03f0e8SSrujana Challa }; 91*6f03f0e8SSrujana Challa 92*6f03f0e8SSrujana Challa struct otx2_cpt_cipher { 93*6f03f0e8SSrujana Challa const char *name; 94*6f03f0e8SSrujana Challa u8 value; 95*6f03f0e8SSrujana Challa }; 96*6f03f0e8SSrujana Challa 97*6f03f0e8SSrujana Challa struct otx2_cpt_fc_enc_ctx { 98*6f03f0e8SSrujana Challa union otx2_cpt_encr_ctrl enc_ctrl; 99*6f03f0e8SSrujana Challa u8 encr_key[32]; 100*6f03f0e8SSrujana Challa u8 encr_iv[16]; 101*6f03f0e8SSrujana Challa }; 102*6f03f0e8SSrujana Challa 103*6f03f0e8SSrujana Challa union otx2_cpt_fc_hmac_ctx { 104*6f03f0e8SSrujana Challa struct { 105*6f03f0e8SSrujana Challa u8 ipad[64]; 106*6f03f0e8SSrujana Challa u8 opad[64]; 107*6f03f0e8SSrujana Challa } e; 108*6f03f0e8SSrujana Challa struct { 109*6f03f0e8SSrujana Challa u8 hmac_calc[64]; /* HMAC calculated */ 110*6f03f0e8SSrujana Challa u8 hmac_recv[64]; /* HMAC received */ 111*6f03f0e8SSrujana Challa } s; 112*6f03f0e8SSrujana Challa }; 113*6f03f0e8SSrujana Challa 114*6f03f0e8SSrujana Challa struct otx2_cpt_fc_ctx { 115*6f03f0e8SSrujana Challa struct otx2_cpt_fc_enc_ctx enc; 116*6f03f0e8SSrujana Challa union otx2_cpt_fc_hmac_ctx hmac; 117*6f03f0e8SSrujana Challa }; 118*6f03f0e8SSrujana Challa 119*6f03f0e8SSrujana Challa struct otx2_cpt_enc_ctx { 120*6f03f0e8SSrujana Challa u32 key_len; 121*6f03f0e8SSrujana Challa u8 enc_key[OTX2_CPT_MAX_KEY_SIZE]; 122*6f03f0e8SSrujana Challa u8 cipher_type; 123*6f03f0e8SSrujana Challa u8 key_type; 124*6f03f0e8SSrujana Challa u8 enc_align_len; 125*6f03f0e8SSrujana Challa struct crypto_skcipher *fbk_cipher; 126*6f03f0e8SSrujana Challa }; 127*6f03f0e8SSrujana Challa 128*6f03f0e8SSrujana Challa union otx2_cpt_offset_ctrl { 129*6f03f0e8SSrujana Challa u64 flags; 130*6f03f0e8SSrujana Challa struct { 131*6f03f0e8SSrujana Challa #if defined(__BIG_ENDIAN_BITFIELD) 132*6f03f0e8SSrujana Challa u64 reserved:32; 133*6f03f0e8SSrujana Challa u64 enc_data_offset:16; 134*6f03f0e8SSrujana Challa u64 iv_offset:8; 135*6f03f0e8SSrujana Challa u64 auth_offset:8; 136*6f03f0e8SSrujana Challa #else 137*6f03f0e8SSrujana Challa u64 auth_offset:8; 138*6f03f0e8SSrujana Challa u64 iv_offset:8; 139*6f03f0e8SSrujana Challa u64 enc_data_offset:16; 140*6f03f0e8SSrujana Challa u64 reserved:32; 141*6f03f0e8SSrujana Challa #endif 142*6f03f0e8SSrujana Challa } e; 143*6f03f0e8SSrujana Challa }; 144*6f03f0e8SSrujana Challa 145*6f03f0e8SSrujana Challa struct otx2_cpt_req_ctx { 146*6f03f0e8SSrujana Challa struct otx2_cpt_req_info cpt_req; 147*6f03f0e8SSrujana Challa union otx2_cpt_offset_ctrl ctrl_word; 148*6f03f0e8SSrujana Challa struct otx2_cpt_fc_ctx fctx; 149*6f03f0e8SSrujana Challa union { 150*6f03f0e8SSrujana Challa struct skcipher_request sk_fbk_req; 151*6f03f0e8SSrujana Challa struct aead_request fbk_req; 152*6f03f0e8SSrujana Challa }; 153*6f03f0e8SSrujana Challa }; 154*6f03f0e8SSrujana Challa 155*6f03f0e8SSrujana Challa struct otx2_cpt_sdesc { 156*6f03f0e8SSrujana Challa struct shash_desc shash; 157*6f03f0e8SSrujana Challa }; 158*6f03f0e8SSrujana Challa 159*6f03f0e8SSrujana Challa struct otx2_cpt_aead_ctx { 160*6f03f0e8SSrujana Challa u8 key[OTX2_CPT_MAX_KEY_SIZE]; 161*6f03f0e8SSrujana Challa struct crypto_shash *hashalg; 162*6f03f0e8SSrujana Challa struct otx2_cpt_sdesc *sdesc; 163*6f03f0e8SSrujana Challa struct crypto_aead *fbk_cipher; 164*6f03f0e8SSrujana Challa u8 *ipad; 165*6f03f0e8SSrujana Challa u8 *opad; 166*6f03f0e8SSrujana Challa u32 enc_key_len; 167*6f03f0e8SSrujana Challa u32 auth_key_len; 168*6f03f0e8SSrujana Challa u8 cipher_type; 169*6f03f0e8SSrujana Challa u8 mac_type; 170*6f03f0e8SSrujana Challa u8 key_type; 171*6f03f0e8SSrujana Challa u8 is_trunc_hmac; 172*6f03f0e8SSrujana Challa u8 enc_align_len; 173*6f03f0e8SSrujana Challa }; 174*6f03f0e8SSrujana Challa int otx2_cpt_crypto_init(struct pci_dev *pdev, struct module *mod, 175*6f03f0e8SSrujana Challa int num_queues, int num_devices); 176*6f03f0e8SSrujana Challa void otx2_cpt_crypto_exit(struct pci_dev *pdev, struct module *mod); 177*6f03f0e8SSrujana Challa 178*6f03f0e8SSrujana Challa #endif /* __OTX2_CPT_ALGS_H */ 179