18c2ecf20Sopenharmony_ci/* SPDX-License-Identifier: GPL-2.0-only */ 28c2ecf20Sopenharmony_ci/* 38c2ecf20Sopenharmony_ci * Copyright (C) 2016 Cavium, Inc. 48c2ecf20Sopenharmony_ci */ 58c2ecf20Sopenharmony_ci 68c2ecf20Sopenharmony_ci#ifndef _CPTVF_ALGS_H_ 78c2ecf20Sopenharmony_ci#define _CPTVF_ALGS_H_ 88c2ecf20Sopenharmony_ci 98c2ecf20Sopenharmony_ci#include "request_manager.h" 108c2ecf20Sopenharmony_ci 118c2ecf20Sopenharmony_ci#define MAX_DEVICES 16 128c2ecf20Sopenharmony_ci#define MAJOR_OP_FC 0x33 138c2ecf20Sopenharmony_ci#define MAX_ENC_KEY_SIZE 32 148c2ecf20Sopenharmony_ci#define MAX_HASH_KEY_SIZE 64 158c2ecf20Sopenharmony_ci#define MAX_KEY_SIZE (MAX_ENC_KEY_SIZE + MAX_HASH_KEY_SIZE) 168c2ecf20Sopenharmony_ci#define CONTROL_WORD_LEN 8 178c2ecf20Sopenharmony_ci#define KEY2_OFFSET 48 188c2ecf20Sopenharmony_ci 198c2ecf20Sopenharmony_ci#define DMA_MODE_FLAG(dma_mode) \ 208c2ecf20Sopenharmony_ci (((dma_mode) == DMA_GATHER_SCATTER) ? (1 << 7) : 0) 218c2ecf20Sopenharmony_ci 228c2ecf20Sopenharmony_cienum req_type { 238c2ecf20Sopenharmony_ci AE_CORE_REQ, 248c2ecf20Sopenharmony_ci SE_CORE_REQ, 258c2ecf20Sopenharmony_ci}; 268c2ecf20Sopenharmony_ci 278c2ecf20Sopenharmony_cienum cipher_type { 288c2ecf20Sopenharmony_ci DES3_CBC = 0x1, 298c2ecf20Sopenharmony_ci DES3_ECB = 0x2, 308c2ecf20Sopenharmony_ci AES_CBC = 0x3, 318c2ecf20Sopenharmony_ci AES_ECB = 0x4, 328c2ecf20Sopenharmony_ci AES_CFB = 0x5, 338c2ecf20Sopenharmony_ci AES_CTR = 0x6, 348c2ecf20Sopenharmony_ci AES_GCM = 0x7, 358c2ecf20Sopenharmony_ci AES_XTS = 0x8 368c2ecf20Sopenharmony_ci}; 378c2ecf20Sopenharmony_ci 388c2ecf20Sopenharmony_cienum aes_type { 398c2ecf20Sopenharmony_ci AES_128_BIT = 0x1, 408c2ecf20Sopenharmony_ci AES_192_BIT = 0x2, 418c2ecf20Sopenharmony_ci AES_256_BIT = 0x3 428c2ecf20Sopenharmony_ci}; 438c2ecf20Sopenharmony_ci 448c2ecf20Sopenharmony_ciunion encr_ctrl { 458c2ecf20Sopenharmony_ci u64 flags; 468c2ecf20Sopenharmony_ci struct { 478c2ecf20Sopenharmony_ci#if defined(__BIG_ENDIAN_BITFIELD) 488c2ecf20Sopenharmony_ci u64 enc_cipher:4; 498c2ecf20Sopenharmony_ci u64 reserved1:1; 508c2ecf20Sopenharmony_ci u64 aes_key:2; 518c2ecf20Sopenharmony_ci u64 iv_source:1; 528c2ecf20Sopenharmony_ci u64 hash_type:4; 538c2ecf20Sopenharmony_ci u64 reserved2:3; 548c2ecf20Sopenharmony_ci u64 auth_input_type:1; 558c2ecf20Sopenharmony_ci u64 mac_len:8; 568c2ecf20Sopenharmony_ci u64 reserved3:8; 578c2ecf20Sopenharmony_ci u64 encr_offset:16; 588c2ecf20Sopenharmony_ci u64 iv_offset:8; 598c2ecf20Sopenharmony_ci u64 auth_offset:8; 608c2ecf20Sopenharmony_ci#else 618c2ecf20Sopenharmony_ci u64 auth_offset:8; 628c2ecf20Sopenharmony_ci u64 iv_offset:8; 638c2ecf20Sopenharmony_ci u64 encr_offset:16; 648c2ecf20Sopenharmony_ci u64 reserved3:8; 658c2ecf20Sopenharmony_ci u64 mac_len:8; 668c2ecf20Sopenharmony_ci u64 auth_input_type:1; 678c2ecf20Sopenharmony_ci u64 reserved2:3; 688c2ecf20Sopenharmony_ci u64 hash_type:4; 698c2ecf20Sopenharmony_ci u64 iv_source:1; 708c2ecf20Sopenharmony_ci u64 aes_key:2; 718c2ecf20Sopenharmony_ci u64 reserved1:1; 728c2ecf20Sopenharmony_ci u64 enc_cipher:4; 738c2ecf20Sopenharmony_ci#endif 748c2ecf20Sopenharmony_ci } e; 758c2ecf20Sopenharmony_ci}; 768c2ecf20Sopenharmony_ci 778c2ecf20Sopenharmony_cistruct cvm_cipher { 788c2ecf20Sopenharmony_ci const char *name; 798c2ecf20Sopenharmony_ci u8 value; 808c2ecf20Sopenharmony_ci}; 818c2ecf20Sopenharmony_ci 828c2ecf20Sopenharmony_cistruct enc_context { 838c2ecf20Sopenharmony_ci union encr_ctrl enc_ctrl; 848c2ecf20Sopenharmony_ci u8 encr_key[32]; 858c2ecf20Sopenharmony_ci u8 encr_iv[16]; 868c2ecf20Sopenharmony_ci}; 878c2ecf20Sopenharmony_ci 888c2ecf20Sopenharmony_cistruct fchmac_context { 898c2ecf20Sopenharmony_ci u8 ipad[64]; 908c2ecf20Sopenharmony_ci u8 opad[64]; /* or OPAD */ 918c2ecf20Sopenharmony_ci}; 928c2ecf20Sopenharmony_ci 938c2ecf20Sopenharmony_cistruct fc_context { 948c2ecf20Sopenharmony_ci struct enc_context enc; 958c2ecf20Sopenharmony_ci struct fchmac_context hmac; 968c2ecf20Sopenharmony_ci}; 978c2ecf20Sopenharmony_ci 988c2ecf20Sopenharmony_cistruct cvm_enc_ctx { 998c2ecf20Sopenharmony_ci u32 key_len; 1008c2ecf20Sopenharmony_ci u8 enc_key[MAX_KEY_SIZE]; 1018c2ecf20Sopenharmony_ci u8 cipher_type:4; 1028c2ecf20Sopenharmony_ci u8 key_type:2; 1038c2ecf20Sopenharmony_ci}; 1048c2ecf20Sopenharmony_ci 1058c2ecf20Sopenharmony_cistruct cvm_des3_ctx { 1068c2ecf20Sopenharmony_ci u32 key_len; 1078c2ecf20Sopenharmony_ci u8 des3_key[MAX_KEY_SIZE]; 1088c2ecf20Sopenharmony_ci}; 1098c2ecf20Sopenharmony_ci 1108c2ecf20Sopenharmony_cistruct cvm_req_ctx { 1118c2ecf20Sopenharmony_ci struct cpt_request_info cpt_req; 1128c2ecf20Sopenharmony_ci u64 control_word; 1138c2ecf20Sopenharmony_ci struct fc_context fctx; 1148c2ecf20Sopenharmony_ci}; 1158c2ecf20Sopenharmony_ci 1168c2ecf20Sopenharmony_ciint cptvf_do_request(void *cptvf, struct cpt_request_info *req); 1178c2ecf20Sopenharmony_ci#endif /*_CPTVF_ALGS_H_*/ 118