16f03f0e8SSrujana Challa /* SPDX-License-Identifier: GPL-2.0-only 26f03f0e8SSrujana Challa * Copyright (C) 2020 Marvell. 36f03f0e8SSrujana Challa */ 46f03f0e8SSrujana Challa 56f03f0e8SSrujana Challa #ifndef __OTX2_CPT_ALGS_H 66f03f0e8SSrujana Challa #define __OTX2_CPT_ALGS_H 76f03f0e8SSrujana Challa 86f03f0e8SSrujana Challa #include <crypto/hash.h> 96f03f0e8SSrujana Challa #include <crypto/skcipher.h> 106f03f0e8SSrujana Challa #include <crypto/aead.h> 116f03f0e8SSrujana Challa #include "otx2_cpt_common.h" 12*e9297111SSrujana Challa #include "cn10k_cpt.h" 136f03f0e8SSrujana Challa 146f03f0e8SSrujana Challa #define OTX2_CPT_MAX_ENC_KEY_SIZE 32 156f03f0e8SSrujana Challa #define OTX2_CPT_MAX_HASH_KEY_SIZE 64 166f03f0e8SSrujana Challa #define OTX2_CPT_MAX_KEY_SIZE (OTX2_CPT_MAX_ENC_KEY_SIZE + \ 176f03f0e8SSrujana Challa OTX2_CPT_MAX_HASH_KEY_SIZE) 186f03f0e8SSrujana Challa enum otx2_cpt_request_type { 196f03f0e8SSrujana Challa OTX2_CPT_ENC_DEC_REQ = 0x1, 206f03f0e8SSrujana Challa OTX2_CPT_AEAD_ENC_DEC_REQ = 0x2, 216f03f0e8SSrujana Challa OTX2_CPT_AEAD_ENC_DEC_NULL_REQ = 0x3, 226f03f0e8SSrujana Challa OTX2_CPT_PASSTHROUGH_REQ = 0x4 236f03f0e8SSrujana Challa }; 246f03f0e8SSrujana Challa 256f03f0e8SSrujana Challa enum otx2_cpt_major_opcodes { 266f03f0e8SSrujana Challa OTX2_CPT_MAJOR_OP_MISC = 0x01, 276f03f0e8SSrujana Challa OTX2_CPT_MAJOR_OP_FC = 0x33, 286f03f0e8SSrujana Challa OTX2_CPT_MAJOR_OP_HMAC = 0x35, 296f03f0e8SSrujana Challa }; 306f03f0e8SSrujana Challa 316f03f0e8SSrujana Challa enum otx2_cpt_cipher_type { 326f03f0e8SSrujana Challa OTX2_CPT_CIPHER_NULL = 0x0, 336f03f0e8SSrujana Challa OTX2_CPT_DES3_CBC = 0x1, 346f03f0e8SSrujana Challa OTX2_CPT_DES3_ECB = 0x2, 356f03f0e8SSrujana Challa OTX2_CPT_AES_CBC = 0x3, 366f03f0e8SSrujana Challa OTX2_CPT_AES_ECB = 0x4, 376f03f0e8SSrujana Challa OTX2_CPT_AES_CFB = 0x5, 386f03f0e8SSrujana Challa OTX2_CPT_AES_CTR = 0x6, 396f03f0e8SSrujana Challa OTX2_CPT_AES_GCM = 0x7, 406f03f0e8SSrujana Challa OTX2_CPT_AES_XTS = 0x8 416f03f0e8SSrujana Challa }; 426f03f0e8SSrujana Challa 436f03f0e8SSrujana Challa enum otx2_cpt_mac_type { 446f03f0e8SSrujana Challa OTX2_CPT_MAC_NULL = 0x0, 456f03f0e8SSrujana Challa OTX2_CPT_MD5 = 0x1, 466f03f0e8SSrujana Challa OTX2_CPT_SHA1 = 0x2, 476f03f0e8SSrujana Challa OTX2_CPT_SHA224 = 0x3, 486f03f0e8SSrujana Challa OTX2_CPT_SHA256 = 0x4, 496f03f0e8SSrujana Challa OTX2_CPT_SHA384 = 0x5, 506f03f0e8SSrujana Challa OTX2_CPT_SHA512 = 0x6, 516f03f0e8SSrujana Challa OTX2_CPT_GMAC = 0x7 526f03f0e8SSrujana Challa }; 536f03f0e8SSrujana Challa 546f03f0e8SSrujana Challa enum otx2_cpt_aes_key_len { 556f03f0e8SSrujana Challa OTX2_CPT_AES_128_BIT = 0x1, 566f03f0e8SSrujana Challa OTX2_CPT_AES_192_BIT = 0x2, 576f03f0e8SSrujana Challa OTX2_CPT_AES_256_BIT = 0x3 586f03f0e8SSrujana Challa }; 596f03f0e8SSrujana Challa 606f03f0e8SSrujana Challa union otx2_cpt_encr_ctrl { 616f03f0e8SSrujana Challa u64 u; 626f03f0e8SSrujana Challa struct { 636f03f0e8SSrujana Challa #if defined(__BIG_ENDIAN_BITFIELD) 646f03f0e8SSrujana Challa u64 enc_cipher:4; 656f03f0e8SSrujana Challa u64 reserved_59:1; 666f03f0e8SSrujana Challa u64 aes_key:2; 676f03f0e8SSrujana Challa u64 iv_source:1; 686f03f0e8SSrujana Challa u64 mac_type:4; 696f03f0e8SSrujana Challa u64 reserved_49_51:3; 706f03f0e8SSrujana Challa u64 auth_input_type:1; 716f03f0e8SSrujana Challa u64 mac_len:8; 726f03f0e8SSrujana Challa u64 reserved_32_39:8; 736f03f0e8SSrujana Challa u64 encr_offset:16; 746f03f0e8SSrujana Challa u64 iv_offset:8; 756f03f0e8SSrujana Challa u64 auth_offset:8; 766f03f0e8SSrujana Challa #else 776f03f0e8SSrujana Challa u64 auth_offset:8; 786f03f0e8SSrujana Challa u64 iv_offset:8; 796f03f0e8SSrujana Challa u64 encr_offset:16; 806f03f0e8SSrujana Challa u64 reserved_32_39:8; 816f03f0e8SSrujana Challa u64 mac_len:8; 826f03f0e8SSrujana Challa u64 auth_input_type:1; 836f03f0e8SSrujana Challa u64 reserved_49_51:3; 846f03f0e8SSrujana Challa u64 mac_type:4; 856f03f0e8SSrujana Challa u64 iv_source:1; 866f03f0e8SSrujana Challa u64 aes_key:2; 876f03f0e8SSrujana Challa u64 reserved_59:1; 886f03f0e8SSrujana Challa u64 enc_cipher:4; 896f03f0e8SSrujana Challa #endif 906f03f0e8SSrujana Challa } e; 916f03f0e8SSrujana Challa }; 926f03f0e8SSrujana Challa 936f03f0e8SSrujana Challa struct otx2_cpt_cipher { 946f03f0e8SSrujana Challa const char *name; 956f03f0e8SSrujana Challa u8 value; 966f03f0e8SSrujana Challa }; 976f03f0e8SSrujana Challa 986f03f0e8SSrujana Challa struct otx2_cpt_fc_enc_ctx { 996f03f0e8SSrujana Challa union otx2_cpt_encr_ctrl enc_ctrl; 1006f03f0e8SSrujana Challa u8 encr_key[32]; 1016f03f0e8SSrujana Challa u8 encr_iv[16]; 1026f03f0e8SSrujana Challa }; 1036f03f0e8SSrujana Challa 1046f03f0e8SSrujana Challa union otx2_cpt_fc_hmac_ctx { 1056f03f0e8SSrujana Challa struct { 1066f03f0e8SSrujana Challa u8 ipad[64]; 1076f03f0e8SSrujana Challa u8 opad[64]; 1086f03f0e8SSrujana Challa } e; 1096f03f0e8SSrujana Challa struct { 1106f03f0e8SSrujana Challa u8 hmac_calc[64]; /* HMAC calculated */ 1116f03f0e8SSrujana Challa u8 hmac_recv[64]; /* HMAC received */ 1126f03f0e8SSrujana Challa } s; 1136f03f0e8SSrujana Challa }; 1146f03f0e8SSrujana Challa 1156f03f0e8SSrujana Challa struct otx2_cpt_fc_ctx { 1166f03f0e8SSrujana Challa struct otx2_cpt_fc_enc_ctx enc; 1176f03f0e8SSrujana Challa union otx2_cpt_fc_hmac_ctx hmac; 1186f03f0e8SSrujana Challa }; 1196f03f0e8SSrujana Challa 1206f03f0e8SSrujana Challa struct otx2_cpt_enc_ctx { 1216f03f0e8SSrujana Challa u32 key_len; 1226f03f0e8SSrujana Challa u8 enc_key[OTX2_CPT_MAX_KEY_SIZE]; 1236f03f0e8SSrujana Challa u8 cipher_type; 1246f03f0e8SSrujana Challa u8 key_type; 1256f03f0e8SSrujana Challa u8 enc_align_len; 1266f03f0e8SSrujana Challa struct crypto_skcipher *fbk_cipher; 127*e9297111SSrujana Challa struct pci_dev *pdev; 128*e9297111SSrujana Challa struct cn10k_cpt_errata_ctx er_ctx; 1296f03f0e8SSrujana Challa }; 1306f03f0e8SSrujana Challa 1316f03f0e8SSrujana Challa union otx2_cpt_offset_ctrl { 1326f03f0e8SSrujana Challa u64 flags; 1336f03f0e8SSrujana Challa struct { 1346f03f0e8SSrujana Challa #if defined(__BIG_ENDIAN_BITFIELD) 1356f03f0e8SSrujana Challa u64 reserved:32; 1366f03f0e8SSrujana Challa u64 enc_data_offset:16; 1376f03f0e8SSrujana Challa u64 iv_offset:8; 1386f03f0e8SSrujana Challa u64 auth_offset:8; 1396f03f0e8SSrujana Challa #else 1406f03f0e8SSrujana Challa u64 auth_offset:8; 1416f03f0e8SSrujana Challa u64 iv_offset:8; 1426f03f0e8SSrujana Challa u64 enc_data_offset:16; 1436f03f0e8SSrujana Challa u64 reserved:32; 1446f03f0e8SSrujana Challa #endif 1456f03f0e8SSrujana Challa } e; 1466f03f0e8SSrujana Challa }; 1476f03f0e8SSrujana Challa 1486f03f0e8SSrujana Challa struct otx2_cpt_req_ctx { 1496f03f0e8SSrujana Challa struct otx2_cpt_req_info cpt_req; 1506f03f0e8SSrujana Challa union otx2_cpt_offset_ctrl ctrl_word; 1516f03f0e8SSrujana Challa struct otx2_cpt_fc_ctx fctx; 1526f03f0e8SSrujana Challa union { 1536f03f0e8SSrujana Challa struct skcipher_request sk_fbk_req; 1546f03f0e8SSrujana Challa struct aead_request fbk_req; 1556f03f0e8SSrujana Challa }; 1566f03f0e8SSrujana Challa }; 1576f03f0e8SSrujana Challa 1586f03f0e8SSrujana Challa struct otx2_cpt_sdesc { 1596f03f0e8SSrujana Challa struct shash_desc shash; 1606f03f0e8SSrujana Challa }; 1616f03f0e8SSrujana Challa 1626f03f0e8SSrujana Challa struct otx2_cpt_aead_ctx { 1636f03f0e8SSrujana Challa u8 key[OTX2_CPT_MAX_KEY_SIZE]; 1646f03f0e8SSrujana Challa struct crypto_shash *hashalg; 1656f03f0e8SSrujana Challa struct otx2_cpt_sdesc *sdesc; 1666f03f0e8SSrujana Challa struct crypto_aead *fbk_cipher; 167*e9297111SSrujana Challa struct cn10k_cpt_errata_ctx er_ctx; 168*e9297111SSrujana Challa struct pci_dev *pdev; 1696f03f0e8SSrujana Challa u8 *ipad; 1706f03f0e8SSrujana Challa u8 *opad; 1716f03f0e8SSrujana Challa u32 enc_key_len; 1726f03f0e8SSrujana Challa u32 auth_key_len; 1736f03f0e8SSrujana Challa u8 cipher_type; 1746f03f0e8SSrujana Challa u8 mac_type; 1756f03f0e8SSrujana Challa u8 key_type; 1766f03f0e8SSrujana Challa u8 is_trunc_hmac; 1776f03f0e8SSrujana Challa u8 enc_align_len; 1786f03f0e8SSrujana Challa }; 1796f03f0e8SSrujana Challa int otx2_cpt_crypto_init(struct pci_dev *pdev, struct module *mod, 1806f03f0e8SSrujana Challa int num_queues, int num_devices); 1816f03f0e8SSrujana Challa void otx2_cpt_crypto_exit(struct pci_dev *pdev, struct module *mod); 1826f03f0e8SSrujana Challa 1836f03f0e8SSrujana Challa #endif /* __OTX2_CPT_ALGS_H */ 184