License cleanup: add SPDX GPL-2.0 license identifier to files with no license
[sfrench/cifs-2.6.git] / drivers / crypto / nx / nx_csbcpb.h
1 /* SPDX-License-Identifier: GPL-2.0 */
2
3 #ifndef __NX_CSBCPB_H__
4 #define __NX_CSBCPB_H__
5
6 struct cop_symcpb_aes_ecb {
7         u8 key[32];
8         u8 __rsvd[80];
9 } __packed;
10
11 struct cop_symcpb_aes_cbc {
12         u8 iv[16];
13         u8 key[32];
14         u8 cv[16];
15         u32 spbc;
16         u8 __rsvd[44];
17 } __packed;
18
19 struct cop_symcpb_aes_gca {
20         u8 in_pat[16];
21         u8 key[32];
22         u8 out_pat[16];
23         u32 spbc;
24         u8 __rsvd[44];
25 } __packed;
26
27 struct cop_symcpb_aes_gcm {
28         u8 in_pat_or_aad[16];
29         u8 iv_or_cnt[16];
30         u64 bit_length_aad;
31         u64 bit_length_data;
32         u8 in_s0[16];
33         u8 key[32];
34         u8 __rsvd1[16];
35         u8 out_pat_or_mac[16];
36         u8 out_s0[16];
37         u8 out_cnt[16];
38         u32 spbc;
39         u8 __rsvd2[12];
40 } __packed;
41
42 struct cop_symcpb_aes_ctr {
43         u8 iv[16];
44         u8 key[32];
45         u8 cv[16];
46         u32 spbc;
47         u8 __rsvd2[44];
48 } __packed;
49
50 struct cop_symcpb_aes_cca {
51         u8 b0[16];
52         u8 b1[16];
53         u8 key[16];
54         u8 out_pat_or_b0[16];
55         u32 spbc;
56         u8 __rsvd[44];
57 } __packed;
58
59 struct cop_symcpb_aes_ccm {
60         u8 in_pat_or_b0[16];
61         u8 iv_or_ctr[16];
62         u8 in_s0[16];
63         u8 key[16];
64         u8 __rsvd1[48];
65         u8 out_pat_or_mac[16];
66         u8 out_s0[16];
67         u8 out_ctr[16];
68         u32 spbc;
69         u8 __rsvd2[12];
70 } __packed;
71
72 struct cop_symcpb_aes_xcbc {
73         u8 cv[16];
74         u8 key[16];
75         u8 __rsvd1[16];
76         u8 out_cv_mac[16];
77         u32 spbc;
78         u8 __rsvd2[44];
79 } __packed;
80
81 struct cop_symcpb_sha256 {
82         u64 message_bit_length;
83         u64 __rsvd1;
84         u8 input_partial_digest[32];
85         u8 message_digest[32];
86         u32 spbc;
87         u8 __rsvd2[44];
88 } __packed;
89
90 struct cop_symcpb_sha512 {
91         u64 message_bit_length_hi;
92         u64 message_bit_length_lo;
93         u8 input_partial_digest[64];
94         u8 __rsvd1[32];
95         u8 message_digest[64];
96         u32 spbc;
97         u8 __rsvd2[76];
98 } __packed;
99
100 #define NX_FDM_INTERMEDIATE             0x01
101 #define NX_FDM_CONTINUATION             0x02
102 #define NX_FDM_ENDE_ENCRYPT             0x80
103
104 #define NX_CPB_FDM(c)                   ((c)->cpb.hdr.fdm)
105 #define NX_CPB_KS_DS(c)                 ((c)->cpb.hdr.ks_ds)
106
107 #define NX_CPB_KEY_SIZE(c)              (NX_CPB_KS_DS(c) >> 4)
108 #define NX_CPB_SET_KEY_SIZE(c, x)       NX_CPB_KS_DS(c) |= ((x) << 4)
109 #define NX_CPB_SET_DIGEST_SIZE(c, x)    NX_CPB_KS_DS(c) |= (x)
110
111 struct cop_symcpb_header {
112         u8 mode;
113         u8 fdm;
114         u8 ks_ds;
115         u8 pad_byte;
116         u8 __rsvd[12];
117 } __packed;
118
119 struct cop_parameter_block {
120         struct cop_symcpb_header hdr;
121         union {
122                 struct cop_symcpb_aes_ecb  aes_ecb;
123                 struct cop_symcpb_aes_cbc  aes_cbc;
124                 struct cop_symcpb_aes_gca  aes_gca;
125                 struct cop_symcpb_aes_gcm  aes_gcm;
126                 struct cop_symcpb_aes_cca  aes_cca;
127                 struct cop_symcpb_aes_ccm  aes_ccm;
128                 struct cop_symcpb_aes_ctr  aes_ctr;
129                 struct cop_symcpb_aes_xcbc aes_xcbc;
130                 struct cop_symcpb_sha256   sha256;
131                 struct cop_symcpb_sha512   sha512;
132         };
133 } __packed;
134
135 #define NX_CSB_VALID_BIT        0x80
136
137 /* co-processor status block */
138 struct cop_status_block {
139         u8 valid;
140         u8 crb_seq_number;
141         u8 completion_code;
142         u8 completion_extension;
143         u32 processed_byte_count;
144         u64 address;
145 } __packed;
146
147 /* Nest accelerator workbook section 4.4 */
148 struct nx_csbcpb {
149         unsigned char __rsvd[112];
150         struct cop_status_block csb;
151         struct cop_parameter_block cpb;
152 } __packed;
153
154 /* nx_csbcpb related definitions */
155 #define NX_MODE_AES_ECB                 0
156 #define NX_MODE_AES_CBC                 1
157 #define NX_MODE_AES_GMAC                2
158 #define NX_MODE_AES_GCA                 3
159 #define NX_MODE_AES_GCM                 4
160 #define NX_MODE_AES_CCA                 5
161 #define NX_MODE_AES_CCM                 6
162 #define NX_MODE_AES_CTR                 7
163 #define NX_MODE_AES_XCBC_MAC            20
164 #define NX_MODE_SHA                     0
165 #define NX_MODE_SHA_HMAC                1
166 #define NX_MODE_AES_CBC_HMAC_ETA        8
167 #define NX_MODE_AES_CBC_HMAC_ATE        9
168 #define NX_MODE_AES_CBC_HMAC_EAA        10
169 #define NX_MODE_AES_CTR_HMAC_ETA        12
170 #define NX_MODE_AES_CTR_HMAC_ATE        13
171 #define NX_MODE_AES_CTR_HMAC_EAA        14
172
173 #define NX_FDM_CI_FULL          0
174 #define NX_FDM_CI_FIRST         1
175 #define NX_FDM_CI_LAST          2
176 #define NX_FDM_CI_MIDDLE        3
177
178 #define NX_FDM_PR_NONE          0
179 #define NX_FDM_PR_PAD           1
180
181 #define NX_KS_AES_128           1
182 #define NX_KS_AES_192           2
183 #define NX_KS_AES_256           3
184
185 #define NX_DS_SHA256            2
186 #define NX_DS_SHA512            3
187
188 #define NX_FC_AES               0
189 #define NX_FC_SHA               2
190 #define NX_FC_AES_HMAC          6
191
192 #define NX_MAX_FC               (NX_FC_AES_HMAC + 1)
193 #define NX_MAX_MODE             (NX_MODE_AES_XCBC_MAC + 1)
194
195 #define HCOP_FC_AES          NX_FC_AES
196 #define HCOP_FC_SHA          NX_FC_SHA
197 #define HCOP_FC_AES_HMAC     NX_FC_AES_HMAC
198
199 /* indices into the array of algorithm properties */
200 #define NX_PROPS_AES_128                0
201 #define NX_PROPS_AES_192                1
202 #define NX_PROPS_AES_256                2
203 #define NX_PROPS_SHA256                 1
204 #define NX_PROPS_SHA512                 2
205
206 #endif