207 lines · c
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 0x01101#define NX_FDM_CONTINUATION 0x02102#define NX_FDM_ENDE_ENCRYPT 0x80103 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 0x80136 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 0156#define NX_MODE_AES_CBC 1157#define NX_MODE_AES_GMAC 2158#define NX_MODE_AES_GCA 3159#define NX_MODE_AES_GCM 4160#define NX_MODE_AES_CCA 5161#define NX_MODE_AES_CCM 6162#define NX_MODE_AES_CTR 7163#define NX_MODE_AES_XCBC_MAC 20164#define NX_MODE_SHA 0165#define NX_MODE_SHA_HMAC 1166#define NX_MODE_AES_CBC_HMAC_ETA 8167#define NX_MODE_AES_CBC_HMAC_ATE 9168#define NX_MODE_AES_CBC_HMAC_EAA 10169#define NX_MODE_AES_CTR_HMAC_ETA 12170#define NX_MODE_AES_CTR_HMAC_ATE 13171#define NX_MODE_AES_CTR_HMAC_EAA 14172 173#define NX_FDM_CI_FULL 0174#define NX_FDM_CI_FIRST 1175#define NX_FDM_CI_LAST 2176#define NX_FDM_CI_MIDDLE 3177 178#define NX_FDM_PR_NONE 0179#define NX_FDM_PR_PAD 1180 181#define NX_KS_AES_128 1182#define NX_KS_AES_192 2183#define NX_KS_AES_256 3184 185#define NX_DS_SHA256 2186#define NX_DS_SHA512 3187 188#define NX_FC_AES 0189#define NX_FC_SHA 2190#define NX_FC_AES_HMAC 6191 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_AES196#define HCOP_FC_SHA NX_FC_SHA197#define HCOP_FC_AES_HMAC NX_FC_AES_HMAC198 199/* indices into the array of algorithm properties */200#define NX_PROPS_AES_128 0201#define NX_PROPS_AES_192 1202#define NX_PROPS_AES_256 2203#define NX_PROPS_SHA256 1204#define NX_PROPS_SHA512 2205 206#endif207