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