123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107 |
- /* SPDX-License-Identifier: GPL-2.0 */
- /* Copyright (c) 2019 HiSilicon Limited. */
- #ifndef __HISI_HPRE_H
- #define __HISI_HPRE_H
- #include <linux/list.h>
- #include <linux/hisi_acc_qm.h>
- #define HPRE_SQE_SIZE sizeof(struct hpre_sqe)
- #define HPRE_PF_DEF_Q_NUM 64
- #define HPRE_PF_DEF_Q_BASE 0
- /*
- * type used in qm sqc DW6.
- * 0 - Algorithm which has been supported in V2, like RSA, DH and so on;
- * 1 - ECC algorithm in V3.
- */
- #define HPRE_V2_ALG_TYPE 0
- #define HPRE_V3_ECC_ALG_TYPE 1
- enum {
- HPRE_CLUSTER0,
- HPRE_CLUSTER1,
- HPRE_CLUSTER2,
- HPRE_CLUSTER3,
- HPRE_CLUSTERS_NUM_MAX
- };
- enum hpre_ctrl_dbgfs_file {
- HPRE_CLEAR_ENABLE,
- HPRE_CLUSTER_CTRL,
- HPRE_DEBUG_FILE_NUM,
- };
- enum hpre_dfx_dbgfs_file {
- HPRE_SEND_CNT,
- HPRE_RECV_CNT,
- HPRE_SEND_FAIL_CNT,
- HPRE_SEND_BUSY_CNT,
- HPRE_OVER_THRHLD_CNT,
- HPRE_OVERTIME_THRHLD,
- HPRE_INVALID_REQ_CNT,
- HPRE_DFX_FILE_NUM
- };
- #define HPRE_DEBUGFS_FILE_NUM (HPRE_DEBUG_FILE_NUM + HPRE_CLUSTERS_NUM_MAX - 1)
- struct hpre_debugfs_file {
- int index;
- enum hpre_ctrl_dbgfs_file type;
- spinlock_t lock;
- struct hpre_debug *debug;
- };
- struct hpre_dfx {
- atomic64_t value;
- enum hpre_dfx_dbgfs_file type;
- };
- /*
- * One HPRE controller has one PF and multiple VFs, some global configurations
- * which PF has need this structure.
- * Just relevant for PF.
- */
- struct hpre_debug {
- struct hpre_dfx dfx[HPRE_DFX_FILE_NUM];
- struct hpre_debugfs_file files[HPRE_DEBUGFS_FILE_NUM];
- };
- struct hpre {
- struct hisi_qm qm;
- struct hpre_debug debug;
- unsigned long status;
- };
- enum hpre_alg_type {
- HPRE_ALG_NC_NCRT = 0x0,
- HPRE_ALG_NC_CRT = 0x1,
- HPRE_ALG_KG_STD = 0x2,
- HPRE_ALG_KG_CRT = 0x3,
- HPRE_ALG_DH_G2 = 0x4,
- HPRE_ALG_DH = 0x5,
- HPRE_ALG_ECC_MUL = 0xD,
- /* shared by x25519 and x448, but x448 is not supported now */
- HPRE_ALG_CURVE25519_MUL = 0x10,
- };
- struct hpre_sqe {
- __le32 dw0;
- __u8 task_len1;
- __u8 task_len2;
- __u8 mrttest_num;
- __u8 resv1;
- __le64 key;
- __le64 in;
- __le64 out;
- __le16 tag;
- __le16 resv2;
- #define _HPRE_SQE_ALIGN_EXT 7
- __le32 rsvd1[_HPRE_SQE_ALIGN_EXT];
- };
- struct hisi_qp *hpre_create_qp(u8 type);
- int hpre_algs_register(struct hisi_qm *qm);
- void hpre_algs_unregister(struct hisi_qm *qm);
- bool hpre_check_alg_support(struct hisi_qm *qm, u32 alg);
- #endif
|