xref: /OK3568_Linux_fs/kernel/drivers/crypto/hisilicon/hpre/hpre.h (revision 4882a59341e53eb6f0b4789bf948001014eff981)
1*4882a593Smuzhiyun /* SPDX-License-Identifier: GPL-2.0 */
2*4882a593Smuzhiyun /* Copyright (c) 2019 HiSilicon Limited. */
3*4882a593Smuzhiyun #ifndef __HISI_HPRE_H
4*4882a593Smuzhiyun #define __HISI_HPRE_H
5*4882a593Smuzhiyun 
6*4882a593Smuzhiyun #include <linux/list.h>
7*4882a593Smuzhiyun #include "../qm.h"
8*4882a593Smuzhiyun 
9*4882a593Smuzhiyun #define HPRE_SQE_SIZE			sizeof(struct hpre_sqe)
10*4882a593Smuzhiyun #define HPRE_PF_DEF_Q_NUM		64
11*4882a593Smuzhiyun #define HPRE_PF_DEF_Q_BASE		0
12*4882a593Smuzhiyun 
13*4882a593Smuzhiyun enum {
14*4882a593Smuzhiyun 	HPRE_CLUSTER0,
15*4882a593Smuzhiyun 	HPRE_CLUSTER1,
16*4882a593Smuzhiyun 	HPRE_CLUSTER2,
17*4882a593Smuzhiyun 	HPRE_CLUSTER3,
18*4882a593Smuzhiyun 	HPRE_CLUSTERS_NUM,
19*4882a593Smuzhiyun };
20*4882a593Smuzhiyun 
21*4882a593Smuzhiyun enum hpre_ctrl_dbgfs_file {
22*4882a593Smuzhiyun 	HPRE_CURRENT_QM,
23*4882a593Smuzhiyun 	HPRE_CLEAR_ENABLE,
24*4882a593Smuzhiyun 	HPRE_CLUSTER_CTRL,
25*4882a593Smuzhiyun 	HPRE_DEBUG_FILE_NUM,
26*4882a593Smuzhiyun };
27*4882a593Smuzhiyun 
28*4882a593Smuzhiyun enum hpre_dfx_dbgfs_file {
29*4882a593Smuzhiyun 	HPRE_SEND_CNT,
30*4882a593Smuzhiyun 	HPRE_RECV_CNT,
31*4882a593Smuzhiyun 	HPRE_SEND_FAIL_CNT,
32*4882a593Smuzhiyun 	HPRE_SEND_BUSY_CNT,
33*4882a593Smuzhiyun 	HPRE_OVER_THRHLD_CNT,
34*4882a593Smuzhiyun 	HPRE_OVERTIME_THRHLD,
35*4882a593Smuzhiyun 	HPRE_INVALID_REQ_CNT,
36*4882a593Smuzhiyun 	HPRE_DFX_FILE_NUM
37*4882a593Smuzhiyun };
38*4882a593Smuzhiyun 
39*4882a593Smuzhiyun #define HPRE_DEBUGFS_FILE_NUM    (HPRE_DEBUG_FILE_NUM + HPRE_CLUSTERS_NUM - 1)
40*4882a593Smuzhiyun 
41*4882a593Smuzhiyun struct hpre_debugfs_file {
42*4882a593Smuzhiyun 	int index;
43*4882a593Smuzhiyun 	enum hpre_ctrl_dbgfs_file type;
44*4882a593Smuzhiyun 	spinlock_t lock;
45*4882a593Smuzhiyun 	struct hpre_debug *debug;
46*4882a593Smuzhiyun };
47*4882a593Smuzhiyun 
48*4882a593Smuzhiyun struct hpre_dfx {
49*4882a593Smuzhiyun 	atomic64_t value;
50*4882a593Smuzhiyun 	enum hpre_dfx_dbgfs_file type;
51*4882a593Smuzhiyun };
52*4882a593Smuzhiyun 
53*4882a593Smuzhiyun /*
54*4882a593Smuzhiyun  * One HPRE controller has one PF and multiple VFs, some global configurations
55*4882a593Smuzhiyun  * which PF has need this structure.
56*4882a593Smuzhiyun  * Just relevant for PF.
57*4882a593Smuzhiyun  */
58*4882a593Smuzhiyun struct hpre_debug {
59*4882a593Smuzhiyun 	struct hpre_dfx dfx[HPRE_DFX_FILE_NUM];
60*4882a593Smuzhiyun 	struct hpre_debugfs_file files[HPRE_DEBUGFS_FILE_NUM];
61*4882a593Smuzhiyun };
62*4882a593Smuzhiyun 
63*4882a593Smuzhiyun struct hpre {
64*4882a593Smuzhiyun 	struct hisi_qm qm;
65*4882a593Smuzhiyun 	struct hpre_debug debug;
66*4882a593Smuzhiyun 	unsigned long status;
67*4882a593Smuzhiyun };
68*4882a593Smuzhiyun 
69*4882a593Smuzhiyun enum hpre_alg_type {
70*4882a593Smuzhiyun 	HPRE_ALG_NC_NCRT = 0x0,
71*4882a593Smuzhiyun 	HPRE_ALG_NC_CRT = 0x1,
72*4882a593Smuzhiyun 	HPRE_ALG_KG_STD = 0x2,
73*4882a593Smuzhiyun 	HPRE_ALG_KG_CRT = 0x3,
74*4882a593Smuzhiyun 	HPRE_ALG_DH_G2 = 0x4,
75*4882a593Smuzhiyun 	HPRE_ALG_DH = 0x5,
76*4882a593Smuzhiyun };
77*4882a593Smuzhiyun 
78*4882a593Smuzhiyun struct hpre_sqe {
79*4882a593Smuzhiyun 	__le32 dw0;
80*4882a593Smuzhiyun 	__u8 task_len1;
81*4882a593Smuzhiyun 	__u8 task_len2;
82*4882a593Smuzhiyun 	__u8 mrttest_num;
83*4882a593Smuzhiyun 	__u8 resv1;
84*4882a593Smuzhiyun 	__le64 key;
85*4882a593Smuzhiyun 	__le64 in;
86*4882a593Smuzhiyun 	__le64 out;
87*4882a593Smuzhiyun 	__le16 tag;
88*4882a593Smuzhiyun 	__le16 resv2;
89*4882a593Smuzhiyun #define _HPRE_SQE_ALIGN_EXT	7
90*4882a593Smuzhiyun 	__le32 rsvd1[_HPRE_SQE_ALIGN_EXT];
91*4882a593Smuzhiyun };
92*4882a593Smuzhiyun 
93*4882a593Smuzhiyun struct hisi_qp *hpre_create_qp(void);
94*4882a593Smuzhiyun int hpre_algs_register(void);
95*4882a593Smuzhiyun void hpre_algs_unregister(void);
96*4882a593Smuzhiyun 
97*4882a593Smuzhiyun #endif
98