forked from Minki/linux
b20d9a73a3
The nx driver started out its life as a BE-only driver. However, somewhere along the way LE support was partially added. This never seems to have been extended all the way but it does trigger numerous warnings during build. This patch fixes all those warnings, but it doesn't mean that the driver will work on LE. Signed-off-by: Herbert Xu <herbert@gondor.apana.org.au>
207 lines
4.1 KiB
C
207 lines
4.1 KiB
C
/* SPDX-License-Identifier: GPL-2.0 */
|
|
|
|
#ifndef __NX_CSBCPB_H__
|
|
#define __NX_CSBCPB_H__
|
|
|
|
struct cop_symcpb_aes_ecb {
|
|
u8 key[32];
|
|
u8 __rsvd[80];
|
|
} __packed;
|
|
|
|
struct cop_symcpb_aes_cbc {
|
|
u8 iv[16];
|
|
u8 key[32];
|
|
u8 cv[16];
|
|
u32 spbc;
|
|
u8 __rsvd[44];
|
|
} __packed;
|
|
|
|
struct cop_symcpb_aes_gca {
|
|
u8 in_pat[16];
|
|
u8 key[32];
|
|
u8 out_pat[16];
|
|
u32 spbc;
|
|
u8 __rsvd[44];
|
|
} __packed;
|
|
|
|
struct cop_symcpb_aes_gcm {
|
|
u8 in_pat_or_aad[16];
|
|
u8 iv_or_cnt[16];
|
|
u64 bit_length_aad;
|
|
u64 bit_length_data;
|
|
u8 in_s0[16];
|
|
u8 key[32];
|
|
u8 __rsvd1[16];
|
|
u8 out_pat_or_mac[16];
|
|
u8 out_s0[16];
|
|
u8 out_cnt[16];
|
|
u32 spbc;
|
|
u8 __rsvd2[12];
|
|
} __packed;
|
|
|
|
struct cop_symcpb_aes_ctr {
|
|
u8 iv[16];
|
|
u8 key[32];
|
|
u8 cv[16];
|
|
u32 spbc;
|
|
u8 __rsvd2[44];
|
|
} __packed;
|
|
|
|
struct cop_symcpb_aes_cca {
|
|
u8 b0[16];
|
|
u8 b1[16];
|
|
u8 key[16];
|
|
u8 out_pat_or_b0[16];
|
|
u32 spbc;
|
|
u8 __rsvd[44];
|
|
} __packed;
|
|
|
|
struct cop_symcpb_aes_ccm {
|
|
u8 in_pat_or_b0[16];
|
|
u8 iv_or_ctr[16];
|
|
u8 in_s0[16];
|
|
u8 key[16];
|
|
u8 __rsvd1[48];
|
|
u8 out_pat_or_mac[16];
|
|
u8 out_s0[16];
|
|
u8 out_ctr[16];
|
|
u32 spbc;
|
|
u8 __rsvd2[12];
|
|
} __packed;
|
|
|
|
struct cop_symcpb_aes_xcbc {
|
|
u8 cv[16];
|
|
u8 key[16];
|
|
u8 __rsvd1[16];
|
|
u8 out_cv_mac[16];
|
|
u32 spbc;
|
|
u8 __rsvd2[44];
|
|
} __packed;
|
|
|
|
struct cop_symcpb_sha256 {
|
|
u64 message_bit_length;
|
|
u64 __rsvd1;
|
|
u8 input_partial_digest[32];
|
|
u8 message_digest[32];
|
|
u32 spbc;
|
|
u8 __rsvd2[44];
|
|
} __packed;
|
|
|
|
struct cop_symcpb_sha512 {
|
|
u64 message_bit_length_hi;
|
|
u64 message_bit_length_lo;
|
|
u8 input_partial_digest[64];
|
|
u8 __rsvd1[32];
|
|
u8 message_digest[64];
|
|
u32 spbc;
|
|
u8 __rsvd2[76];
|
|
} __packed;
|
|
|
|
#define NX_FDM_INTERMEDIATE 0x01
|
|
#define NX_FDM_CONTINUATION 0x02
|
|
#define NX_FDM_ENDE_ENCRYPT 0x80
|
|
|
|
#define NX_CPB_FDM(c) ((c)->cpb.hdr.fdm)
|
|
#define NX_CPB_KS_DS(c) ((c)->cpb.hdr.ks_ds)
|
|
|
|
#define NX_CPB_KEY_SIZE(c) (NX_CPB_KS_DS(c) >> 4)
|
|
#define NX_CPB_SET_KEY_SIZE(c, x) NX_CPB_KS_DS(c) |= ((x) << 4)
|
|
#define NX_CPB_SET_DIGEST_SIZE(c, x) NX_CPB_KS_DS(c) |= (x)
|
|
|
|
struct cop_symcpb_header {
|
|
u8 mode;
|
|
u8 fdm;
|
|
u8 ks_ds;
|
|
u8 pad_byte;
|
|
u8 __rsvd[12];
|
|
} __packed;
|
|
|
|
struct cop_parameter_block {
|
|
struct cop_symcpb_header hdr;
|
|
union {
|
|
struct cop_symcpb_aes_ecb aes_ecb;
|
|
struct cop_symcpb_aes_cbc aes_cbc;
|
|
struct cop_symcpb_aes_gca aes_gca;
|
|
struct cop_symcpb_aes_gcm aes_gcm;
|
|
struct cop_symcpb_aes_cca aes_cca;
|
|
struct cop_symcpb_aes_ccm aes_ccm;
|
|
struct cop_symcpb_aes_ctr aes_ctr;
|
|
struct cop_symcpb_aes_xcbc aes_xcbc;
|
|
struct cop_symcpb_sha256 sha256;
|
|
struct cop_symcpb_sha512 sha512;
|
|
};
|
|
} __packed;
|
|
|
|
#define NX_CSB_VALID_BIT 0x80
|
|
|
|
/* co-processor status block */
|
|
struct cop_status_block {
|
|
u8 valid;
|
|
u8 crb_seq_number;
|
|
u8 completion_code;
|
|
u8 completion_extension;
|
|
__be32 processed_byte_count;
|
|
__be64 address;
|
|
} __packed;
|
|
|
|
/* Nest accelerator workbook section 4.4 */
|
|
struct nx_csbcpb {
|
|
unsigned char __rsvd[112];
|
|
struct cop_status_block csb;
|
|
struct cop_parameter_block cpb;
|
|
} __packed;
|
|
|
|
/* nx_csbcpb related definitions */
|
|
#define NX_MODE_AES_ECB 0
|
|
#define NX_MODE_AES_CBC 1
|
|
#define NX_MODE_AES_GMAC 2
|
|
#define NX_MODE_AES_GCA 3
|
|
#define NX_MODE_AES_GCM 4
|
|
#define NX_MODE_AES_CCA 5
|
|
#define NX_MODE_AES_CCM 6
|
|
#define NX_MODE_AES_CTR 7
|
|
#define NX_MODE_AES_XCBC_MAC 20
|
|
#define NX_MODE_SHA 0
|
|
#define NX_MODE_SHA_HMAC 1
|
|
#define NX_MODE_AES_CBC_HMAC_ETA 8
|
|
#define NX_MODE_AES_CBC_HMAC_ATE 9
|
|
#define NX_MODE_AES_CBC_HMAC_EAA 10
|
|
#define NX_MODE_AES_CTR_HMAC_ETA 12
|
|
#define NX_MODE_AES_CTR_HMAC_ATE 13
|
|
#define NX_MODE_AES_CTR_HMAC_EAA 14
|
|
|
|
#define NX_FDM_CI_FULL 0
|
|
#define NX_FDM_CI_FIRST 1
|
|
#define NX_FDM_CI_LAST 2
|
|
#define NX_FDM_CI_MIDDLE 3
|
|
|
|
#define NX_FDM_PR_NONE 0
|
|
#define NX_FDM_PR_PAD 1
|
|
|
|
#define NX_KS_AES_128 1
|
|
#define NX_KS_AES_192 2
|
|
#define NX_KS_AES_256 3
|
|
|
|
#define NX_DS_SHA256 2
|
|
#define NX_DS_SHA512 3
|
|
|
|
#define NX_FC_AES 0
|
|
#define NX_FC_SHA 2
|
|
#define NX_FC_AES_HMAC 6
|
|
|
|
#define NX_MAX_FC (NX_FC_AES_HMAC + 1)
|
|
#define NX_MAX_MODE (NX_MODE_AES_XCBC_MAC + 1)
|
|
|
|
#define HCOP_FC_AES NX_FC_AES
|
|
#define HCOP_FC_SHA NX_FC_SHA
|
|
#define HCOP_FC_AES_HMAC NX_FC_AES_HMAC
|
|
|
|
/* indices into the array of algorithm properties */
|
|
#define NX_PROPS_AES_128 0
|
|
#define NX_PROPS_AES_192 1
|
|
#define NX_PROPS_AES_256 2
|
|
#define NX_PROPS_SHA256 1
|
|
#define NX_PROPS_SHA512 2
|
|
|
|
#endif
|