162306a36Sopenharmony_ci/* SPDX-License-Identifier: GPL-2.0-only */ 262306a36Sopenharmony_ci/* 362306a36Sopenharmony_ci * Copyright (C) 2016 Cavium, Inc. 462306a36Sopenharmony_ci */ 562306a36Sopenharmony_ci 662306a36Sopenharmony_ci#ifndef _CPTVF_ALGS_H_ 762306a36Sopenharmony_ci#define _CPTVF_ALGS_H_ 862306a36Sopenharmony_ci 962306a36Sopenharmony_ci#include "request_manager.h" 1062306a36Sopenharmony_ci 1162306a36Sopenharmony_ci#define MAX_DEVICES 16 1262306a36Sopenharmony_ci#define MAJOR_OP_FC 0x33 1362306a36Sopenharmony_ci#define MAX_ENC_KEY_SIZE 32 1462306a36Sopenharmony_ci#define MAX_HASH_KEY_SIZE 64 1562306a36Sopenharmony_ci#define MAX_KEY_SIZE (MAX_ENC_KEY_SIZE + MAX_HASH_KEY_SIZE) 1662306a36Sopenharmony_ci#define CONTROL_WORD_LEN 8 1762306a36Sopenharmony_ci#define KEY2_OFFSET 48 1862306a36Sopenharmony_ci 1962306a36Sopenharmony_ci#define DMA_MODE_FLAG(dma_mode) \ 2062306a36Sopenharmony_ci (((dma_mode) == DMA_GATHER_SCATTER) ? (1 << 7) : 0) 2162306a36Sopenharmony_ci 2262306a36Sopenharmony_cienum req_type { 2362306a36Sopenharmony_ci AE_CORE_REQ, 2462306a36Sopenharmony_ci SE_CORE_REQ, 2562306a36Sopenharmony_ci}; 2662306a36Sopenharmony_ci 2762306a36Sopenharmony_cienum cipher_type { 2862306a36Sopenharmony_ci DES3_CBC = 0x1, 2962306a36Sopenharmony_ci DES3_ECB = 0x2, 3062306a36Sopenharmony_ci AES_CBC = 0x3, 3162306a36Sopenharmony_ci AES_ECB = 0x4, 3262306a36Sopenharmony_ci AES_CFB = 0x5, 3362306a36Sopenharmony_ci AES_CTR = 0x6, 3462306a36Sopenharmony_ci AES_GCM = 0x7, 3562306a36Sopenharmony_ci AES_XTS = 0x8 3662306a36Sopenharmony_ci}; 3762306a36Sopenharmony_ci 3862306a36Sopenharmony_cienum aes_type { 3962306a36Sopenharmony_ci AES_128_BIT = 0x1, 4062306a36Sopenharmony_ci AES_192_BIT = 0x2, 4162306a36Sopenharmony_ci AES_256_BIT = 0x3 4262306a36Sopenharmony_ci}; 4362306a36Sopenharmony_ci 4462306a36Sopenharmony_ciunion encr_ctrl { 4562306a36Sopenharmony_ci u64 flags; 4662306a36Sopenharmony_ci struct { 4762306a36Sopenharmony_ci#if defined(__BIG_ENDIAN_BITFIELD) 4862306a36Sopenharmony_ci u64 enc_cipher:4; 4962306a36Sopenharmony_ci u64 reserved1:1; 5062306a36Sopenharmony_ci u64 aes_key:2; 5162306a36Sopenharmony_ci u64 iv_source:1; 5262306a36Sopenharmony_ci u64 hash_type:4; 5362306a36Sopenharmony_ci u64 reserved2:3; 5462306a36Sopenharmony_ci u64 auth_input_type:1; 5562306a36Sopenharmony_ci u64 mac_len:8; 5662306a36Sopenharmony_ci u64 reserved3:8; 5762306a36Sopenharmony_ci u64 encr_offset:16; 5862306a36Sopenharmony_ci u64 iv_offset:8; 5962306a36Sopenharmony_ci u64 auth_offset:8; 6062306a36Sopenharmony_ci#else 6162306a36Sopenharmony_ci u64 auth_offset:8; 6262306a36Sopenharmony_ci u64 iv_offset:8; 6362306a36Sopenharmony_ci u64 encr_offset:16; 6462306a36Sopenharmony_ci u64 reserved3:8; 6562306a36Sopenharmony_ci u64 mac_len:8; 6662306a36Sopenharmony_ci u64 auth_input_type:1; 6762306a36Sopenharmony_ci u64 reserved2:3; 6862306a36Sopenharmony_ci u64 hash_type:4; 6962306a36Sopenharmony_ci u64 iv_source:1; 7062306a36Sopenharmony_ci u64 aes_key:2; 7162306a36Sopenharmony_ci u64 reserved1:1; 7262306a36Sopenharmony_ci u64 enc_cipher:4; 7362306a36Sopenharmony_ci#endif 7462306a36Sopenharmony_ci } e; 7562306a36Sopenharmony_ci}; 7662306a36Sopenharmony_ci 7762306a36Sopenharmony_cistruct cvm_cipher { 7862306a36Sopenharmony_ci const char *name; 7962306a36Sopenharmony_ci u8 value; 8062306a36Sopenharmony_ci}; 8162306a36Sopenharmony_ci 8262306a36Sopenharmony_cistruct enc_context { 8362306a36Sopenharmony_ci union encr_ctrl enc_ctrl; 8462306a36Sopenharmony_ci u8 encr_key[32]; 8562306a36Sopenharmony_ci u8 encr_iv[16]; 8662306a36Sopenharmony_ci}; 8762306a36Sopenharmony_ci 8862306a36Sopenharmony_cistruct fchmac_context { 8962306a36Sopenharmony_ci u8 ipad[64]; 9062306a36Sopenharmony_ci u8 opad[64]; /* or OPAD */ 9162306a36Sopenharmony_ci}; 9262306a36Sopenharmony_ci 9362306a36Sopenharmony_cistruct fc_context { 9462306a36Sopenharmony_ci struct enc_context enc; 9562306a36Sopenharmony_ci struct fchmac_context hmac; 9662306a36Sopenharmony_ci}; 9762306a36Sopenharmony_ci 9862306a36Sopenharmony_cistruct cvm_enc_ctx { 9962306a36Sopenharmony_ci u32 key_len; 10062306a36Sopenharmony_ci u8 enc_key[MAX_KEY_SIZE]; 10162306a36Sopenharmony_ci u8 cipher_type:4; 10262306a36Sopenharmony_ci u8 key_type:2; 10362306a36Sopenharmony_ci}; 10462306a36Sopenharmony_ci 10562306a36Sopenharmony_cistruct cvm_des3_ctx { 10662306a36Sopenharmony_ci u32 key_len; 10762306a36Sopenharmony_ci u8 des3_key[MAX_KEY_SIZE]; 10862306a36Sopenharmony_ci}; 10962306a36Sopenharmony_ci 11062306a36Sopenharmony_cistruct cvm_req_ctx { 11162306a36Sopenharmony_ci struct cpt_request_info cpt_req; 11262306a36Sopenharmony_ci u64 control_word; 11362306a36Sopenharmony_ci struct fc_context fctx; 11462306a36Sopenharmony_ci}; 11562306a36Sopenharmony_ci 11662306a36Sopenharmony_ciint cptvf_do_request(void *cptvf, struct cpt_request_info *req); 11762306a36Sopenharmony_ci#endif /*_CPTVF_ALGS_H_*/ 118