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