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