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