crypto: hisilicon/sec - add new type of SQE
Add new type of sqe for Kunpeng930, which is the next generation of SEC accelerator hardware. The hardware adds a new SQE data structure. Signed-off-by: Kai Ye <yekai13@huawei.com> Signed-off-by: Herbert Xu <herbert@gondor.apana.org.au>
This commit is contained in:
parent
76c1f4e0ef
commit
d5c1477b2f
@ -38,7 +38,10 @@ struct sec_aead_req {
|
||||
|
||||
/* SEC request of Crypto */
|
||||
struct sec_req {
|
||||
union {
|
||||
struct sec_sqe sec_sqe;
|
||||
struct sec_sqe3 sec_sqe3;
|
||||
};
|
||||
struct sec_ctx *ctx;
|
||||
struct sec_qp_ctx *qp_ctx;
|
||||
|
||||
|
@ -44,6 +44,7 @@ enum sec_ckey_type {
|
||||
enum sec_bd_type {
|
||||
SEC_BD_TYPE1 = 0x1,
|
||||
SEC_BD_TYPE2 = 0x2,
|
||||
SEC_BD_TYPE3 = 0x3,
|
||||
};
|
||||
|
||||
enum sec_auth {
|
||||
@ -63,6 +64,16 @@ enum sec_addr_type {
|
||||
SEC_PRP = 0x2,
|
||||
};
|
||||
|
||||
enum {
|
||||
AUTHPAD_PAD,
|
||||
AUTHPAD_NOPAD,
|
||||
};
|
||||
|
||||
enum {
|
||||
AIGEN_GEN,
|
||||
AIGEN_NOGEN,
|
||||
};
|
||||
|
||||
struct sec_sqe_type2 {
|
||||
/*
|
||||
* mac_len: 0~4 bits
|
||||
@ -209,6 +220,169 @@ struct sec_sqe {
|
||||
struct sec_sqe_type2 type2;
|
||||
};
|
||||
|
||||
struct bd3_auth_ivin {
|
||||
__le64 a_ivin_addr;
|
||||
__le32 rsvd0;
|
||||
__le32 rsvd1;
|
||||
} __packed __aligned(4);
|
||||
|
||||
struct bd3_skip_data {
|
||||
__le32 rsvd0;
|
||||
|
||||
/*
|
||||
* gran_num: 0~15 bits
|
||||
* reserved: 16~31 bits
|
||||
*/
|
||||
__le32 gran_num;
|
||||
|
||||
/*
|
||||
* src_skip_data_len: 0~24 bits
|
||||
* reserved: 25~31 bits
|
||||
*/
|
||||
__le32 src_skip_data_len;
|
||||
|
||||
/*
|
||||
* dst_skip_data_len: 0~24 bits
|
||||
* reserved: 25~31 bits
|
||||
*/
|
||||
__le32 dst_skip_data_len;
|
||||
};
|
||||
|
||||
struct bd3_stream_scene {
|
||||
__le64 c_ivin_addr;
|
||||
__le64 long_a_data_len;
|
||||
|
||||
/*
|
||||
* auth_pad: 0~1 bits
|
||||
* stream_protocol: 2~4 bits
|
||||
* reserved: 5~7 bits
|
||||
*/
|
||||
__u8 stream_auth_pad;
|
||||
__u8 plaintext_type;
|
||||
__le16 pad_len_1p3;
|
||||
} __packed __aligned(4);
|
||||
|
||||
struct bd3_no_scene {
|
||||
__le64 c_ivin_addr;
|
||||
__le32 rsvd0;
|
||||
__le32 rsvd1;
|
||||
__le32 rsvd2;
|
||||
} __packed __aligned(4);
|
||||
|
||||
struct bd3_check_sum {
|
||||
__u8 rsvd0;
|
||||
__u8 hac_sva_status;
|
||||
__le16 check_sum_i;
|
||||
};
|
||||
|
||||
struct bd3_tls_type_back {
|
||||
__u8 tls_1p3_type_back;
|
||||
__u8 hac_sva_status;
|
||||
__le16 pad_len_1p3_back;
|
||||
};
|
||||
|
||||
struct sec_sqe3 {
|
||||
/*
|
||||
* type: 0~3 bit
|
||||
* bd_invalid: 4 bit
|
||||
* scene: 5~8 bit
|
||||
* de: 9~10 bit
|
||||
* src_addr_type: 11~13 bit
|
||||
* dst_addr_type: 14~16 bit
|
||||
* mac_addr_type: 17~19 bit
|
||||
* reserved: 20~31 bits
|
||||
*/
|
||||
__le32 bd_param;
|
||||
|
||||
/*
|
||||
* cipher: 0~1 bits
|
||||
* ci_gen: 2~3 bit
|
||||
* c_icv_len: 4~9 bit
|
||||
* c_width: 10~12 bits
|
||||
* c_key_len: 13~15 bits
|
||||
*/
|
||||
__le16 c_icv_key;
|
||||
|
||||
/*
|
||||
* c_mode : 0~3 bits
|
||||
* c_alg : 4~7 bits
|
||||
*/
|
||||
__u8 c_mode_alg;
|
||||
|
||||
/*
|
||||
* nonce_len : 0~3 bits
|
||||
* huk : 4 bits
|
||||
* cal_iv_addr_en : 5 bits
|
||||
* seq : 6 bits
|
||||
* reserved : 7 bits
|
||||
*/
|
||||
__u8 huk_iv_seq;
|
||||
|
||||
__le64 tag;
|
||||
__le64 data_src_addr;
|
||||
__le64 a_key_addr;
|
||||
union {
|
||||
struct bd3_auth_ivin auth_ivin;
|
||||
struct bd3_skip_data skip_data;
|
||||
};
|
||||
|
||||
__le64 c_key_addr;
|
||||
|
||||
/*
|
||||
* auth: 0~1 bits
|
||||
* ai_gen: 2~3 bits
|
||||
* mac_len: 4~8 bits
|
||||
* akey_len: 9~14 bits
|
||||
* a_alg: 15~20 bits
|
||||
* key_sel: 21~24 bits
|
||||
* updata_key: 25 bits
|
||||
* reserved: 26~31 bits
|
||||
*/
|
||||
__le32 auth_mac_key;
|
||||
__le32 salt;
|
||||
__le16 auth_src_offset;
|
||||
__le16 cipher_src_offset;
|
||||
|
||||
/*
|
||||
* auth_len: 0~23 bit
|
||||
* auth_key_offset: 24~31 bits
|
||||
*/
|
||||
__le32 a_len_key;
|
||||
|
||||
/*
|
||||
* cipher_len: 0~23 bit
|
||||
* auth_ivin_offset: 24~31 bits
|
||||
*/
|
||||
__le32 c_len_ivin;
|
||||
__le64 data_dst_addr;
|
||||
__le64 mac_addr;
|
||||
union {
|
||||
struct bd3_stream_scene stream_scene;
|
||||
struct bd3_no_scene no_scene;
|
||||
};
|
||||
|
||||
/*
|
||||
* done: 0 bit
|
||||
* icv: 1~3 bit
|
||||
* csc: 4~6 bit
|
||||
* flag: 7~10 bit
|
||||
* reserved: 11~15 bit
|
||||
*/
|
||||
__le16 done_flag;
|
||||
__u8 error_type;
|
||||
__u8 warning_type;
|
||||
union {
|
||||
__le32 mac_i;
|
||||
__le32 kek_key_addr_l;
|
||||
};
|
||||
union {
|
||||
__le32 kek_key_addr_h;
|
||||
struct bd3_check_sum check_sum;
|
||||
struct bd3_tls_type_back tls_type_back;
|
||||
};
|
||||
__le32 counter;
|
||||
} __packed __aligned(4);
|
||||
|
||||
int sec_register_to_crypto(struct hisi_qm *qm);
|
||||
void sec_unregister_from_crypto(struct hisi_qm *qm);
|
||||
#endif
|
||||
|
Loading…
Reference in New Issue
Block a user