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