summaryrefslogtreecommitdiff
path: root/drivers/crypto/hisilicon/qm.h
diff options
context:
space:
mode:
authorShukun Tan <tanshukun1@huawei.com>2020-05-09 17:43:57 +0800
committerHerbert Xu <herbert@gondor.apana.org.au>2020-05-15 16:15:02 +1000
commit20b291f51802b35d84e20efbf110e8c9a853a22c (patch)
tree78ea0b17094cad1540df6a07fe1693404ebee185 /drivers/crypto/hisilicon/qm.h
parentcfd66a660f73adfd388666f122e998691763aa55 (diff)
crypto: hisilicon - refactor module parameter pf_q_num related code
put q_num_set similar code into qm to reduce the redundancy. Signed-off-by: Shukun Tan <tanshukun1@huawei.com> Reviewed-by: Zhou Wang <wangzhou1@hisilicon.com> Signed-off-by: Herbert Xu <herbert@gondor.apana.org.au>
Diffstat (limited to 'drivers/crypto/hisilicon/qm.h')
-rw-r--r--drivers/crypto/hisilicon/qm.h39
1 files changed, 39 insertions, 0 deletions
diff --git a/drivers/crypto/hisilicon/qm.h b/drivers/crypto/hisilicon/qm.h
index 9d17167840f8..d1be8cdc99a3 100644
--- a/drivers/crypto/hisilicon/qm.h
+++ b/drivers/crypto/hisilicon/qm.h
@@ -8,6 +8,8 @@
#include <linux/module.h>
#include <linux/pci.h>
+#define QM_QNUM_V1 4096
+#define QM_QNUM_V2 1024
#define QM_MAX_VFS_NUM_V2 63
/* qm user domain */
@@ -252,6 +254,43 @@ struct hisi_qp {
struct uacce_queue *uacce_q;
};
+static inline int q_num_set(const char *val, const struct kernel_param *kp,
+ unsigned int device)
+{
+ struct pci_dev *pdev = pci_get_device(PCI_VENDOR_ID_HUAWEI,
+ device, NULL);
+ u32 n, q_num;
+ u8 rev_id;
+ int ret;
+
+ if (!val)
+ return -EINVAL;
+
+ if (!pdev) {
+ q_num = min_t(u32, QM_QNUM_V1, QM_QNUM_V2);
+ pr_info("No device found currently, suppose queue number is %d\n",
+ q_num);
+ } else {
+ rev_id = pdev->revision;
+ switch (rev_id) {
+ case QM_HW_V1:
+ q_num = QM_QNUM_V1;
+ break;
+ case QM_HW_V2:
+ q_num = QM_QNUM_V2;
+ break;
+ default:
+ return -EINVAL;
+ }
+ }
+
+ ret = kstrtou32(val, 10, &n);
+ if (ret || !n || n > q_num)
+ return -EINVAL;
+
+ return param_set_int(val, kp);
+}
+
static inline int vfs_num_set(const char *val, const struct kernel_param *kp)
{
u32 n;