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