162306a36Sopenharmony_ci/* SPDX-License-Identifier: GPL-2.0 */
262306a36Sopenharmony_ci
362306a36Sopenharmony_ci#ifndef __NX_CSBCPB_H__
462306a36Sopenharmony_ci#define __NX_CSBCPB_H__
562306a36Sopenharmony_ci
662306a36Sopenharmony_cistruct cop_symcpb_aes_ecb {
762306a36Sopenharmony_ci	u8 key[32];
862306a36Sopenharmony_ci	u8 __rsvd[80];
962306a36Sopenharmony_ci} __packed;
1062306a36Sopenharmony_ci
1162306a36Sopenharmony_cistruct cop_symcpb_aes_cbc {
1262306a36Sopenharmony_ci	u8 iv[16];
1362306a36Sopenharmony_ci	u8 key[32];
1462306a36Sopenharmony_ci	u8 cv[16];
1562306a36Sopenharmony_ci	u32 spbc;
1662306a36Sopenharmony_ci	u8 __rsvd[44];
1762306a36Sopenharmony_ci} __packed;
1862306a36Sopenharmony_ci
1962306a36Sopenharmony_cistruct cop_symcpb_aes_gca {
2062306a36Sopenharmony_ci	u8 in_pat[16];
2162306a36Sopenharmony_ci	u8 key[32];
2262306a36Sopenharmony_ci	u8 out_pat[16];
2362306a36Sopenharmony_ci	u32 spbc;
2462306a36Sopenharmony_ci	u8 __rsvd[44];
2562306a36Sopenharmony_ci} __packed;
2662306a36Sopenharmony_ci
2762306a36Sopenharmony_cistruct cop_symcpb_aes_gcm {
2862306a36Sopenharmony_ci	u8 in_pat_or_aad[16];
2962306a36Sopenharmony_ci	u8 iv_or_cnt[16];
3062306a36Sopenharmony_ci	u64 bit_length_aad;
3162306a36Sopenharmony_ci	u64 bit_length_data;
3262306a36Sopenharmony_ci	u8 in_s0[16];
3362306a36Sopenharmony_ci	u8 key[32];
3462306a36Sopenharmony_ci	u8 __rsvd1[16];
3562306a36Sopenharmony_ci	u8 out_pat_or_mac[16];
3662306a36Sopenharmony_ci	u8 out_s0[16];
3762306a36Sopenharmony_ci	u8 out_cnt[16];
3862306a36Sopenharmony_ci	u32 spbc;
3962306a36Sopenharmony_ci	u8 __rsvd2[12];
4062306a36Sopenharmony_ci} __packed;
4162306a36Sopenharmony_ci
4262306a36Sopenharmony_cistruct cop_symcpb_aes_ctr {
4362306a36Sopenharmony_ci	u8 iv[16];
4462306a36Sopenharmony_ci	u8 key[32];
4562306a36Sopenharmony_ci	u8 cv[16];
4662306a36Sopenharmony_ci	u32 spbc;
4762306a36Sopenharmony_ci	u8 __rsvd2[44];
4862306a36Sopenharmony_ci} __packed;
4962306a36Sopenharmony_ci
5062306a36Sopenharmony_cistruct cop_symcpb_aes_cca {
5162306a36Sopenharmony_ci	u8 b0[16];
5262306a36Sopenharmony_ci	u8 b1[16];
5362306a36Sopenharmony_ci	u8 key[16];
5462306a36Sopenharmony_ci	u8 out_pat_or_b0[16];
5562306a36Sopenharmony_ci	u32 spbc;
5662306a36Sopenharmony_ci	u8 __rsvd[44];
5762306a36Sopenharmony_ci} __packed;
5862306a36Sopenharmony_ci
5962306a36Sopenharmony_cistruct cop_symcpb_aes_ccm {
6062306a36Sopenharmony_ci	u8 in_pat_or_b0[16];
6162306a36Sopenharmony_ci	u8 iv_or_ctr[16];
6262306a36Sopenharmony_ci	u8 in_s0[16];
6362306a36Sopenharmony_ci	u8 key[16];
6462306a36Sopenharmony_ci	u8 __rsvd1[48];
6562306a36Sopenharmony_ci	u8 out_pat_or_mac[16];
6662306a36Sopenharmony_ci	u8 out_s0[16];
6762306a36Sopenharmony_ci	u8 out_ctr[16];
6862306a36Sopenharmony_ci	u32 spbc;
6962306a36Sopenharmony_ci	u8 __rsvd2[12];
7062306a36Sopenharmony_ci} __packed;
7162306a36Sopenharmony_ci
7262306a36Sopenharmony_cistruct cop_symcpb_aes_xcbc {
7362306a36Sopenharmony_ci	u8 cv[16];
7462306a36Sopenharmony_ci	u8 key[16];
7562306a36Sopenharmony_ci	u8 __rsvd1[16];
7662306a36Sopenharmony_ci	u8 out_cv_mac[16];
7762306a36Sopenharmony_ci	u32 spbc;
7862306a36Sopenharmony_ci	u8 __rsvd2[44];
7962306a36Sopenharmony_ci} __packed;
8062306a36Sopenharmony_ci
8162306a36Sopenharmony_cistruct cop_symcpb_sha256 {
8262306a36Sopenharmony_ci	u64 message_bit_length;
8362306a36Sopenharmony_ci	u64 __rsvd1;
8462306a36Sopenharmony_ci	u8 input_partial_digest[32];
8562306a36Sopenharmony_ci	u8 message_digest[32];
8662306a36Sopenharmony_ci	u32 spbc;
8762306a36Sopenharmony_ci	u8 __rsvd2[44];
8862306a36Sopenharmony_ci} __packed;
8962306a36Sopenharmony_ci
9062306a36Sopenharmony_cistruct cop_symcpb_sha512 {
9162306a36Sopenharmony_ci	u64 message_bit_length_hi;
9262306a36Sopenharmony_ci	u64 message_bit_length_lo;
9362306a36Sopenharmony_ci	u8 input_partial_digest[64];
9462306a36Sopenharmony_ci	u8 __rsvd1[32];
9562306a36Sopenharmony_ci	u8 message_digest[64];
9662306a36Sopenharmony_ci	u32 spbc;
9762306a36Sopenharmony_ci	u8 __rsvd2[76];
9862306a36Sopenharmony_ci} __packed;
9962306a36Sopenharmony_ci
10062306a36Sopenharmony_ci#define NX_FDM_INTERMEDIATE		0x01
10162306a36Sopenharmony_ci#define NX_FDM_CONTINUATION		0x02
10262306a36Sopenharmony_ci#define NX_FDM_ENDE_ENCRYPT		0x80
10362306a36Sopenharmony_ci
10462306a36Sopenharmony_ci#define NX_CPB_FDM(c)			((c)->cpb.hdr.fdm)
10562306a36Sopenharmony_ci#define NX_CPB_KS_DS(c)			((c)->cpb.hdr.ks_ds)
10662306a36Sopenharmony_ci
10762306a36Sopenharmony_ci#define NX_CPB_KEY_SIZE(c)		(NX_CPB_KS_DS(c) >> 4)
10862306a36Sopenharmony_ci#define NX_CPB_SET_KEY_SIZE(c, x)	NX_CPB_KS_DS(c) |= ((x) << 4)
10962306a36Sopenharmony_ci#define NX_CPB_SET_DIGEST_SIZE(c, x)	NX_CPB_KS_DS(c) |= (x)
11062306a36Sopenharmony_ci
11162306a36Sopenharmony_cistruct cop_symcpb_header {
11262306a36Sopenharmony_ci	u8 mode;
11362306a36Sopenharmony_ci	u8 fdm;
11462306a36Sopenharmony_ci	u8 ks_ds;
11562306a36Sopenharmony_ci	u8 pad_byte;
11662306a36Sopenharmony_ci	u8 __rsvd[12];
11762306a36Sopenharmony_ci} __packed;
11862306a36Sopenharmony_ci
11962306a36Sopenharmony_cistruct cop_parameter_block {
12062306a36Sopenharmony_ci	struct cop_symcpb_header hdr;
12162306a36Sopenharmony_ci	union {
12262306a36Sopenharmony_ci		struct cop_symcpb_aes_ecb  aes_ecb;
12362306a36Sopenharmony_ci		struct cop_symcpb_aes_cbc  aes_cbc;
12462306a36Sopenharmony_ci		struct cop_symcpb_aes_gca  aes_gca;
12562306a36Sopenharmony_ci		struct cop_symcpb_aes_gcm  aes_gcm;
12662306a36Sopenharmony_ci		struct cop_symcpb_aes_cca  aes_cca;
12762306a36Sopenharmony_ci		struct cop_symcpb_aes_ccm  aes_ccm;
12862306a36Sopenharmony_ci		struct cop_symcpb_aes_ctr  aes_ctr;
12962306a36Sopenharmony_ci		struct cop_symcpb_aes_xcbc aes_xcbc;
13062306a36Sopenharmony_ci		struct cop_symcpb_sha256   sha256;
13162306a36Sopenharmony_ci		struct cop_symcpb_sha512   sha512;
13262306a36Sopenharmony_ci	};
13362306a36Sopenharmony_ci} __packed;
13462306a36Sopenharmony_ci
13562306a36Sopenharmony_ci#define NX_CSB_VALID_BIT	0x80
13662306a36Sopenharmony_ci
13762306a36Sopenharmony_ci/* co-processor status block */
13862306a36Sopenharmony_cistruct cop_status_block {
13962306a36Sopenharmony_ci	u8 valid;
14062306a36Sopenharmony_ci	u8 crb_seq_number;
14162306a36Sopenharmony_ci	u8 completion_code;
14262306a36Sopenharmony_ci	u8 completion_extension;
14362306a36Sopenharmony_ci	__be32 processed_byte_count;
14462306a36Sopenharmony_ci	__be64 address;
14562306a36Sopenharmony_ci} __packed;
14662306a36Sopenharmony_ci
14762306a36Sopenharmony_ci/* Nest accelerator workbook section 4.4 */
14862306a36Sopenharmony_cistruct nx_csbcpb {
14962306a36Sopenharmony_ci	unsigned char __rsvd[112];
15062306a36Sopenharmony_ci	struct cop_status_block csb;
15162306a36Sopenharmony_ci	struct cop_parameter_block cpb;
15262306a36Sopenharmony_ci} __packed;
15362306a36Sopenharmony_ci
15462306a36Sopenharmony_ci/* nx_csbcpb related definitions */
15562306a36Sopenharmony_ci#define NX_MODE_AES_ECB			0
15662306a36Sopenharmony_ci#define NX_MODE_AES_CBC			1
15762306a36Sopenharmony_ci#define NX_MODE_AES_GMAC		2
15862306a36Sopenharmony_ci#define NX_MODE_AES_GCA			3
15962306a36Sopenharmony_ci#define NX_MODE_AES_GCM			4
16062306a36Sopenharmony_ci#define NX_MODE_AES_CCA			5
16162306a36Sopenharmony_ci#define NX_MODE_AES_CCM			6
16262306a36Sopenharmony_ci#define NX_MODE_AES_CTR			7
16362306a36Sopenharmony_ci#define NX_MODE_AES_XCBC_MAC		20
16462306a36Sopenharmony_ci#define NX_MODE_SHA			0
16562306a36Sopenharmony_ci#define NX_MODE_SHA_HMAC		1
16662306a36Sopenharmony_ci#define NX_MODE_AES_CBC_HMAC_ETA	8
16762306a36Sopenharmony_ci#define NX_MODE_AES_CBC_HMAC_ATE	9
16862306a36Sopenharmony_ci#define NX_MODE_AES_CBC_HMAC_EAA	10
16962306a36Sopenharmony_ci#define NX_MODE_AES_CTR_HMAC_ETA	12
17062306a36Sopenharmony_ci#define NX_MODE_AES_CTR_HMAC_ATE	13
17162306a36Sopenharmony_ci#define NX_MODE_AES_CTR_HMAC_EAA	14
17262306a36Sopenharmony_ci
17362306a36Sopenharmony_ci#define NX_FDM_CI_FULL		0
17462306a36Sopenharmony_ci#define NX_FDM_CI_FIRST		1
17562306a36Sopenharmony_ci#define NX_FDM_CI_LAST		2
17662306a36Sopenharmony_ci#define NX_FDM_CI_MIDDLE	3
17762306a36Sopenharmony_ci
17862306a36Sopenharmony_ci#define NX_FDM_PR_NONE		0
17962306a36Sopenharmony_ci#define NX_FDM_PR_PAD		1
18062306a36Sopenharmony_ci
18162306a36Sopenharmony_ci#define NX_KS_AES_128		1
18262306a36Sopenharmony_ci#define NX_KS_AES_192		2
18362306a36Sopenharmony_ci#define NX_KS_AES_256		3
18462306a36Sopenharmony_ci
18562306a36Sopenharmony_ci#define NX_DS_SHA256		2
18662306a36Sopenharmony_ci#define NX_DS_SHA512		3
18762306a36Sopenharmony_ci
18862306a36Sopenharmony_ci#define NX_FC_AES		0
18962306a36Sopenharmony_ci#define NX_FC_SHA		2
19062306a36Sopenharmony_ci#define NX_FC_AES_HMAC		6
19162306a36Sopenharmony_ci
19262306a36Sopenharmony_ci#define NX_MAX_FC		(NX_FC_AES_HMAC + 1)
19362306a36Sopenharmony_ci#define NX_MAX_MODE		(NX_MODE_AES_XCBC_MAC + 1)
19462306a36Sopenharmony_ci
19562306a36Sopenharmony_ci#define HCOP_FC_AES          NX_FC_AES
19662306a36Sopenharmony_ci#define HCOP_FC_SHA          NX_FC_SHA
19762306a36Sopenharmony_ci#define HCOP_FC_AES_HMAC     NX_FC_AES_HMAC
19862306a36Sopenharmony_ci
19962306a36Sopenharmony_ci/* indices into the array of algorithm properties */
20062306a36Sopenharmony_ci#define NX_PROPS_AES_128		0
20162306a36Sopenharmony_ci#define NX_PROPS_AES_192		1
20262306a36Sopenharmony_ci#define NX_PROPS_AES_256		2
20362306a36Sopenharmony_ci#define NX_PROPS_SHA256			1
20462306a36Sopenharmony_ci#define NX_PROPS_SHA512			2
20562306a36Sopenharmony_ci
20662306a36Sopenharmony_ci#endif
207