xref: /OK3568_Linux_fs/kernel/drivers/crypto/hisilicon/sec2/sec_crypto.h (revision 4882a59341e53eb6f0b4789bf948001014eff981)
1*4882a593Smuzhiyun /* SPDX-License-Identifier: GPL-2.0 */
2*4882a593Smuzhiyun /* Copyright (c) 2019 HiSilicon Limited. */
3*4882a593Smuzhiyun 
4*4882a593Smuzhiyun #ifndef __HISI_SEC_V2_CRYPTO_H
5*4882a593Smuzhiyun #define __HISI_SEC_V2_CRYPTO_H
6*4882a593Smuzhiyun 
7*4882a593Smuzhiyun #define SEC_IV_SIZE		24
8*4882a593Smuzhiyun #define SEC_MAX_KEY_SIZE	64
9*4882a593Smuzhiyun #define SEC_MAX_AKEY_SIZE	128
10*4882a593Smuzhiyun #define SEC_COMM_SCENE		0
11*4882a593Smuzhiyun 
12*4882a593Smuzhiyun enum sec_calg {
13*4882a593Smuzhiyun 	SEC_CALG_3DES = 0x1,
14*4882a593Smuzhiyun 	SEC_CALG_AES  = 0x2,
15*4882a593Smuzhiyun 	SEC_CALG_SM4  = 0x3,
16*4882a593Smuzhiyun };
17*4882a593Smuzhiyun 
18*4882a593Smuzhiyun enum sec_hash_alg {
19*4882a593Smuzhiyun 	SEC_A_HMAC_SHA1   = 0x10,
20*4882a593Smuzhiyun 	SEC_A_HMAC_SHA256 = 0x11,
21*4882a593Smuzhiyun 	SEC_A_HMAC_SHA512 = 0x15,
22*4882a593Smuzhiyun };
23*4882a593Smuzhiyun 
24*4882a593Smuzhiyun enum sec_mac_len {
25*4882a593Smuzhiyun 	SEC_HMAC_SHA1_MAC   = 20,
26*4882a593Smuzhiyun 	SEC_HMAC_SHA256_MAC = 32,
27*4882a593Smuzhiyun 	SEC_HMAC_SHA512_MAC = 64,
28*4882a593Smuzhiyun };
29*4882a593Smuzhiyun 
30*4882a593Smuzhiyun enum sec_cmode {
31*4882a593Smuzhiyun 	SEC_CMODE_ECB    = 0x0,
32*4882a593Smuzhiyun 	SEC_CMODE_CBC    = 0x1,
33*4882a593Smuzhiyun 	SEC_CMODE_CTR    = 0x4,
34*4882a593Smuzhiyun 	SEC_CMODE_XTS    = 0x7,
35*4882a593Smuzhiyun };
36*4882a593Smuzhiyun 
37*4882a593Smuzhiyun enum sec_ckey_type {
38*4882a593Smuzhiyun 	SEC_CKEY_128BIT = 0x0,
39*4882a593Smuzhiyun 	SEC_CKEY_192BIT = 0x1,
40*4882a593Smuzhiyun 	SEC_CKEY_256BIT = 0x2,
41*4882a593Smuzhiyun 	SEC_CKEY_3DES_3KEY = 0x1,
42*4882a593Smuzhiyun 	SEC_CKEY_3DES_2KEY = 0x3,
43*4882a593Smuzhiyun };
44*4882a593Smuzhiyun 
45*4882a593Smuzhiyun enum sec_bd_type {
46*4882a593Smuzhiyun 	SEC_BD_TYPE1 = 0x1,
47*4882a593Smuzhiyun 	SEC_BD_TYPE2 = 0x2,
48*4882a593Smuzhiyun };
49*4882a593Smuzhiyun 
50*4882a593Smuzhiyun enum sec_auth {
51*4882a593Smuzhiyun 	SEC_NO_AUTH = 0x0,
52*4882a593Smuzhiyun 	SEC_AUTH_TYPE1 = 0x1,
53*4882a593Smuzhiyun 	SEC_AUTH_TYPE2 = 0x2,
54*4882a593Smuzhiyun };
55*4882a593Smuzhiyun 
56*4882a593Smuzhiyun enum sec_cipher_dir {
57*4882a593Smuzhiyun 	SEC_CIPHER_ENC = 0x1,
58*4882a593Smuzhiyun 	SEC_CIPHER_DEC = 0x2,
59*4882a593Smuzhiyun };
60*4882a593Smuzhiyun 
61*4882a593Smuzhiyun enum sec_addr_type {
62*4882a593Smuzhiyun 	SEC_PBUF = 0x0,
63*4882a593Smuzhiyun 	SEC_SGL  = 0x1,
64*4882a593Smuzhiyun 	SEC_PRP  = 0x2,
65*4882a593Smuzhiyun };
66*4882a593Smuzhiyun 
67*4882a593Smuzhiyun struct sec_sqe_type2 {
68*4882a593Smuzhiyun 	/*
69*4882a593Smuzhiyun 	 * mac_len: 0~4 bits
70*4882a593Smuzhiyun 	 * a_key_len: 5~10 bits
71*4882a593Smuzhiyun 	 * a_alg: 11~16 bits
72*4882a593Smuzhiyun 	 */
73*4882a593Smuzhiyun 	__le32 mac_key_alg;
74*4882a593Smuzhiyun 
75*4882a593Smuzhiyun 	/*
76*4882a593Smuzhiyun 	 * c_icv_len: 0~5 bits
77*4882a593Smuzhiyun 	 * c_width: 6~8 bits
78*4882a593Smuzhiyun 	 * c_key_len: 9~11 bits
79*4882a593Smuzhiyun 	 * c_mode: 12~15 bits
80*4882a593Smuzhiyun 	 */
81*4882a593Smuzhiyun 	__le16 icvw_kmode;
82*4882a593Smuzhiyun 
83*4882a593Smuzhiyun 	/* c_alg: 0~3 bits */
84*4882a593Smuzhiyun 	__u8 c_alg;
85*4882a593Smuzhiyun 	__u8 rsvd4;
86*4882a593Smuzhiyun 
87*4882a593Smuzhiyun 	/*
88*4882a593Smuzhiyun 	 * a_len: 0~23 bits
89*4882a593Smuzhiyun 	 * iv_offset_l: 24~31 bits
90*4882a593Smuzhiyun 	 */
91*4882a593Smuzhiyun 	__le32 alen_ivllen;
92*4882a593Smuzhiyun 
93*4882a593Smuzhiyun 	/*
94*4882a593Smuzhiyun 	 * c_len: 0~23 bits
95*4882a593Smuzhiyun 	 * iv_offset_h: 24~31 bits
96*4882a593Smuzhiyun 	 */
97*4882a593Smuzhiyun 	__le32 clen_ivhlen;
98*4882a593Smuzhiyun 
99*4882a593Smuzhiyun 	__le16 auth_src_offset;
100*4882a593Smuzhiyun 	__le16 cipher_src_offset;
101*4882a593Smuzhiyun 	__le16 cs_ip_header_offset;
102*4882a593Smuzhiyun 	__le16 cs_udp_header_offset;
103*4882a593Smuzhiyun 	__le16 pass_word_len;
104*4882a593Smuzhiyun 	__le16 dk_len;
105*4882a593Smuzhiyun 	__u8 salt3;
106*4882a593Smuzhiyun 	__u8 salt2;
107*4882a593Smuzhiyun 	__u8 salt1;
108*4882a593Smuzhiyun 	__u8 salt0;
109*4882a593Smuzhiyun 
110*4882a593Smuzhiyun 	__le16 tag;
111*4882a593Smuzhiyun 	__le16 rsvd5;
112*4882a593Smuzhiyun 
113*4882a593Smuzhiyun 	/*
114*4882a593Smuzhiyun 	 * c_pad_type: 0~3 bits
115*4882a593Smuzhiyun 	 * c_pad_len: 4~11 bits
116*4882a593Smuzhiyun 	 * c_pad_data_type: 12~15 bits
117*4882a593Smuzhiyun 	 */
118*4882a593Smuzhiyun 	__le16 cph_pad;
119*4882a593Smuzhiyun 
120*4882a593Smuzhiyun 	/* c_pad_len_field: 0~1 bits */
121*4882a593Smuzhiyun 	__le16 c_pad_len_field;
122*4882a593Smuzhiyun 
123*4882a593Smuzhiyun 	__le64 long_a_data_len;
124*4882a593Smuzhiyun 	__le64 a_ivin_addr;
125*4882a593Smuzhiyun 	__le64 a_key_addr;
126*4882a593Smuzhiyun 	__le64 mac_addr;
127*4882a593Smuzhiyun 	__le64 c_ivin_addr;
128*4882a593Smuzhiyun 	__le64 c_key_addr;
129*4882a593Smuzhiyun 
130*4882a593Smuzhiyun 	__le64 data_src_addr;
131*4882a593Smuzhiyun 	__le64 data_dst_addr;
132*4882a593Smuzhiyun 
133*4882a593Smuzhiyun 	/*
134*4882a593Smuzhiyun 	 * done: 0 bit
135*4882a593Smuzhiyun 	 * icv: 1~3 bits
136*4882a593Smuzhiyun 	 * csc: 4~6 bits
137*4882a593Smuzhiyun 	 * flag: 7-10 bits
138*4882a593Smuzhiyun 	 * dif_check: 11~13 bits
139*4882a593Smuzhiyun 	 */
140*4882a593Smuzhiyun 	__le16 done_flag;
141*4882a593Smuzhiyun 
142*4882a593Smuzhiyun 	__u8 error_type;
143*4882a593Smuzhiyun 	__u8 warning_type;
144*4882a593Smuzhiyun 	__u8 mac_i3;
145*4882a593Smuzhiyun 	__u8 mac_i2;
146*4882a593Smuzhiyun 	__u8 mac_i1;
147*4882a593Smuzhiyun 	__u8 mac_i0;
148*4882a593Smuzhiyun 	__le16 check_sum_i;
149*4882a593Smuzhiyun 	__u8 tls_pad_len_i;
150*4882a593Smuzhiyun 	__u8 rsvd12;
151*4882a593Smuzhiyun 	__le32 counter;
152*4882a593Smuzhiyun };
153*4882a593Smuzhiyun 
154*4882a593Smuzhiyun struct sec_sqe {
155*4882a593Smuzhiyun 	/*
156*4882a593Smuzhiyun 	 * type:	0~3 bits
157*4882a593Smuzhiyun 	 * cipher:	4~5 bits
158*4882a593Smuzhiyun 	 * auth:	6~7 bit s
159*4882a593Smuzhiyun 	 */
160*4882a593Smuzhiyun 	__u8 type_cipher_auth;
161*4882a593Smuzhiyun 
162*4882a593Smuzhiyun 	/*
163*4882a593Smuzhiyun 	 * seq:	0 bit
164*4882a593Smuzhiyun 	 * de:	1~2 bits
165*4882a593Smuzhiyun 	 * scene:	3~6 bits
166*4882a593Smuzhiyun 	 * src_addr_type: ~7 bit, with sdm_addr_type 0-1 bits
167*4882a593Smuzhiyun 	 */
168*4882a593Smuzhiyun 	__u8 sds_sa_type;
169*4882a593Smuzhiyun 
170*4882a593Smuzhiyun 	/*
171*4882a593Smuzhiyun 	 * src_addr_type: 0~1 bits, not used now,
172*4882a593Smuzhiyun 	 * if support PRP, set this field, or set zero.
173*4882a593Smuzhiyun 	 * dst_addr_type: 2~4 bits
174*4882a593Smuzhiyun 	 * mac_addr_type: 5~7 bits
175*4882a593Smuzhiyun 	 */
176*4882a593Smuzhiyun 	__u8 sdm_addr_type;
177*4882a593Smuzhiyun 	__u8 rsvd0;
178*4882a593Smuzhiyun 
179*4882a593Smuzhiyun 	/*
180*4882a593Smuzhiyun 	 * nonce_len(type2): 0~3 bits
181*4882a593Smuzhiyun 	 * huk(type2): 4 bit
182*4882a593Smuzhiyun 	 * key_s(type2): 5 bit
183*4882a593Smuzhiyun 	 * ci_gen: 6~7 bits
184*4882a593Smuzhiyun 	 */
185*4882a593Smuzhiyun 	__u8 huk_key_ci;
186*4882a593Smuzhiyun 
187*4882a593Smuzhiyun 	/*
188*4882a593Smuzhiyun 	 * ai_gen: 0~1 bits
189*4882a593Smuzhiyun 	 * a_pad(type2): 2~3 bits
190*4882a593Smuzhiyun 	 * c_s(type2): 4~5 bits
191*4882a593Smuzhiyun 	 */
192*4882a593Smuzhiyun 	__u8 ai_apd_cs;
193*4882a593Smuzhiyun 
194*4882a593Smuzhiyun 	/*
195*4882a593Smuzhiyun 	 * rhf(type2): 0 bit
196*4882a593Smuzhiyun 	 * c_key_type: 1~2 bits
197*4882a593Smuzhiyun 	 * a_key_type: 3~4 bits
198*4882a593Smuzhiyun 	 * write_frame_len(type2): 5~7 bits
199*4882a593Smuzhiyun 	 */
200*4882a593Smuzhiyun 	__u8 rca_key_frm;
201*4882a593Smuzhiyun 
202*4882a593Smuzhiyun 	/*
203*4882a593Smuzhiyun 	 * cal_iv_addr_en(type2): 0 bit
204*4882a593Smuzhiyun 	 * tls_up(type2): 1 bit
205*4882a593Smuzhiyun 	 * inveld: 7 bit
206*4882a593Smuzhiyun 	 */
207*4882a593Smuzhiyun 	__u8 iv_tls_ld;
208*4882a593Smuzhiyun 
209*4882a593Smuzhiyun 	/* Just using type2 BD now */
210*4882a593Smuzhiyun 	struct sec_sqe_type2 type2;
211*4882a593Smuzhiyun };
212*4882a593Smuzhiyun 
213*4882a593Smuzhiyun int sec_register_to_crypto(void);
214*4882a593Smuzhiyun void sec_unregister_from_crypto(void);
215*4882a593Smuzhiyun #endif
216