1*25763b3cSThomas Gleixner /* SPDX-License-Identifier: GPL-2.0-only */ 2c694b233SGeorge Cherian /* 3c694b233SGeorge Cherian * Copyright (C) 2016 Cavium, Inc. 4c694b233SGeorge Cherian */ 5c694b233SGeorge Cherian 6c694b233SGeorge Cherian #ifndef _CPTVF_ALGS_H_ 7c694b233SGeorge Cherian #define _CPTVF_ALGS_H_ 8c694b233SGeorge Cherian 9c694b233SGeorge Cherian #include "request_manager.h" 10c694b233SGeorge Cherian 11c694b233SGeorge Cherian #define MAX_DEVICES 16 12c694b233SGeorge Cherian #define MAJOR_OP_FC 0x33 13c694b233SGeorge Cherian #define MAX_ENC_KEY_SIZE 32 14c694b233SGeorge Cherian #define MAX_HASH_KEY_SIZE 64 15c694b233SGeorge Cherian #define MAX_KEY_SIZE (MAX_ENC_KEY_SIZE + MAX_HASH_KEY_SIZE) 16c694b233SGeorge Cherian #define CONTROL_WORD_LEN 8 17c694b233SGeorge Cherian #define KEY2_OFFSET 48 18c694b233SGeorge Cherian 19c694b233SGeorge Cherian #define DMA_MODE_FLAG(dma_mode) \ 20c694b233SGeorge Cherian (((dma_mode) == DMA_GATHER_SCATTER) ? (1 << 7) : 0) 21c694b233SGeorge Cherian 22c694b233SGeorge Cherian enum req_type { 23c694b233SGeorge Cherian AE_CORE_REQ, 24c694b233SGeorge Cherian SE_CORE_REQ, 25c694b233SGeorge Cherian }; 26c694b233SGeorge Cherian 27c694b233SGeorge Cherian enum cipher_type { 28c694b233SGeorge Cherian DES3_CBC = 0x1, 29c694b233SGeorge Cherian DES3_ECB = 0x2, 30c694b233SGeorge Cherian AES_CBC = 0x3, 31c694b233SGeorge Cherian AES_ECB = 0x4, 32c694b233SGeorge Cherian AES_CFB = 0x5, 33c694b233SGeorge Cherian AES_CTR = 0x6, 34c694b233SGeorge Cherian AES_GCM = 0x7, 35c694b233SGeorge Cherian AES_XTS = 0x8 36c694b233SGeorge Cherian }; 37c694b233SGeorge Cherian 38c694b233SGeorge Cherian enum aes_type { 39c694b233SGeorge Cherian AES_128_BIT = 0x1, 40c694b233SGeorge Cherian AES_192_BIT = 0x2, 41c694b233SGeorge Cherian AES_256_BIT = 0x3 42c694b233SGeorge Cherian }; 43c694b233SGeorge Cherian 44c694b233SGeorge Cherian union encr_ctrl { 45c694b233SGeorge Cherian u64 flags; 46c694b233SGeorge Cherian struct { 47c694b233SGeorge Cherian #if defined(__BIG_ENDIAN_BITFIELD) 48c694b233SGeorge Cherian u64 enc_cipher:4; 49c694b233SGeorge Cherian u64 reserved1:1; 50c694b233SGeorge Cherian u64 aes_key:2; 51c694b233SGeorge Cherian u64 iv_source:1; 52c694b233SGeorge Cherian u64 hash_type:4; 53c694b233SGeorge Cherian u64 reserved2:3; 54c694b233SGeorge Cherian u64 auth_input_type:1; 55c694b233SGeorge Cherian u64 mac_len:8; 56c694b233SGeorge Cherian u64 reserved3:8; 57c694b233SGeorge Cherian u64 encr_offset:16; 58c694b233SGeorge Cherian u64 iv_offset:8; 59c694b233SGeorge Cherian u64 auth_offset:8; 60c694b233SGeorge Cherian #else 61c694b233SGeorge Cherian u64 auth_offset:8; 62c694b233SGeorge Cherian u64 iv_offset:8; 63c694b233SGeorge Cherian u64 encr_offset:16; 64c694b233SGeorge Cherian u64 reserved3:8; 65c694b233SGeorge Cherian u64 mac_len:8; 66c694b233SGeorge Cherian u64 auth_input_type:1; 67c694b233SGeorge Cherian u64 reserved2:3; 68c694b233SGeorge Cherian u64 hash_type:4; 69c694b233SGeorge Cherian u64 iv_source:1; 70c694b233SGeorge Cherian u64 aes_key:2; 71c694b233SGeorge Cherian u64 reserved1:1; 72c694b233SGeorge Cherian u64 enc_cipher:4; 73c694b233SGeorge Cherian #endif 74c694b233SGeorge Cherian } e; 75c694b233SGeorge Cherian }; 76c694b233SGeorge Cherian 77e2eb769eSGeorge Cherian struct cvm_cipher { 78e2eb769eSGeorge Cherian const char *name; 79e2eb769eSGeorge Cherian u8 value; 80e2eb769eSGeorge Cherian }; 81e2eb769eSGeorge Cherian 82c694b233SGeorge Cherian struct enc_context { 83c694b233SGeorge Cherian union encr_ctrl enc_ctrl; 84c694b233SGeorge Cherian u8 encr_key[32]; 85c694b233SGeorge Cherian u8 encr_iv[16]; 86c694b233SGeorge Cherian }; 87c694b233SGeorge Cherian 88c694b233SGeorge Cherian struct fchmac_context { 89c694b233SGeorge Cherian u8 ipad[64]; 90c694b233SGeorge Cherian u8 opad[64]; /* or OPAD */ 91c694b233SGeorge Cherian }; 92c694b233SGeorge Cherian 93c694b233SGeorge Cherian struct fc_context { 94c694b233SGeorge Cherian struct enc_context enc; 95c694b233SGeorge Cherian struct fchmac_context hmac; 96c694b233SGeorge Cherian }; 97c694b233SGeorge Cherian 98c694b233SGeorge Cherian struct cvm_enc_ctx { 99c694b233SGeorge Cherian u32 key_len; 100c694b233SGeorge Cherian u8 enc_key[MAX_KEY_SIZE]; 101e2eb769eSGeorge Cherian u8 cipher_type:4; 102e2eb769eSGeorge Cherian u8 key_type:2; 103c694b233SGeorge Cherian }; 104c694b233SGeorge Cherian 105c694b233SGeorge Cherian struct cvm_des3_ctx { 106c694b233SGeorge Cherian u32 key_len; 107c694b233SGeorge Cherian u8 des3_key[MAX_KEY_SIZE]; 108c694b233SGeorge Cherian }; 109c694b233SGeorge Cherian 110c694b233SGeorge Cherian struct cvm_req_ctx { 111c694b233SGeorge Cherian struct cpt_request_info cpt_req; 112c694b233SGeorge Cherian u64 control_word; 113c694b233SGeorge Cherian struct fc_context fctx; 114c694b233SGeorge Cherian }; 115c694b233SGeorge Cherian 116c694b233SGeorge Cherian int cptvf_do_request(void *cptvf, struct cpt_request_info *req); 117c694b233SGeorge Cherian #endif /*_CPTVF_ALGS_H_*/ 118