Add the rt linux 4.1.3-rt3 as base
[kvmfornfv.git] / kernel / drivers / crypto / nx / nx_csbcpb.h
diff --git a/kernel/drivers/crypto/nx/nx_csbcpb.h b/kernel/drivers/crypto/nx/nx_csbcpb.h
new file mode 100644 (file)
index 0000000..a304f95
--- /dev/null
@@ -0,0 +1,205 @@
+
+#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;
+       u32 processed_byte_count;
+       u64 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