1 /* SPDX-License-Identifier: BSD-3-Clause */
2 /* Copyright(c) 2007-2025 Intel Corporation */
3 #include "adf_c4xxx_hw_data.h"
4 #include "adf_c4xxx_pke_replay_stats.h"
5 #include "adf_common_drv.h"
6 #include "icp_qat_fw_init_admin.h"
7 #include <sys/sbuf.h>
8 #include <sys/sysctl.h>
9 #include <sys/priv.h>
10
11 #define PKE_REPLAY_DBG_FILE "pke_replay_stats"
12 #define LINE \
13 "+-----------------------------------------------------------------+\n"
14 #define BANNER \
15 "| PKE Replay Statistics for Qat Device |\n"
16
qat_pke_replay_counters_show(SYSCTL_HANDLER_ARGS)17 static int qat_pke_replay_counters_show(SYSCTL_HANDLER_ARGS)
18 {
19 struct sbuf sb;
20 struct adf_accel_dev *accel_dev = arg1;
21 int ret = 0;
22 u64 suc_counter = 0;
23 u64 unsuc_counter = 0;
24
25 if (priv_check(curthread, PRIV_DRIVER) != 0)
26 return EPERM;
27
28 sbuf_new_for_sysctl(&sb, NULL, 256, req);
29
30 sbuf_printf(&sb, "\n");
31 sbuf_printf(&sb, LINE);
32
33 ret = adf_get_fw_pke_stats(accel_dev, &suc_counter, &unsuc_counter);
34 if (ret)
35 return ret;
36
37 sbuf_printf(
38 &sb,
39 "| Successful Replays: %40llu |\n| Unsuccessful Replays: %40llu |\n",
40 (unsigned long long)suc_counter,
41 (unsigned long long)unsuc_counter);
42
43 sbuf_finish(&sb);
44 SYSCTL_OUT(req, sbuf_data(&sb), sbuf_len(&sb));
45 sbuf_delete(&sb);
46
47 return 0;
48 }
49
50 /**
51 * adf_pke_replay_counters_add_c4xxx() - Create debugfs entry for
52 * acceleration device Freq counters.
53 * @accel_dev: Pointer to acceleration device.
54 *
55 * Return: 0 on success, error code otherwise.
56 */
57 int
adf_pke_replay_counters_add_c4xxx(struct adf_accel_dev * accel_dev)58 adf_pke_replay_counters_add_c4xxx(struct adf_accel_dev *accel_dev)
59 {
60 struct sysctl_ctx_list *qat_sysctl_ctx = NULL;
61 struct sysctl_oid *qat_sysctl_tree = NULL;
62 struct sysctl_oid *pke_rep_file = NULL;
63
64 qat_sysctl_ctx =
65 device_get_sysctl_ctx(accel_dev->accel_pci_dev.pci_dev);
66 qat_sysctl_tree =
67 device_get_sysctl_tree(accel_dev->accel_pci_dev.pci_dev);
68
69 pke_rep_file = SYSCTL_ADD_PROC(qat_sysctl_ctx,
70 SYSCTL_CHILDREN(qat_sysctl_tree),
71 OID_AUTO,
72 PKE_REPLAY_DBG_FILE,
73 CTLTYPE_STRING | CTLFLAG_RD,
74 accel_dev,
75 0,
76 qat_pke_replay_counters_show,
77 "A",
78 "QAT PKE Replay Statistics");
79 accel_dev->pke_replay_dbgfile = pke_rep_file;
80 if (!accel_dev->pke_replay_dbgfile) {
81 device_printf(
82 GET_DEV(accel_dev),
83 "Failed to create qat pke replay debugfs entry.\n");
84 return ENOENT;
85 }
86 return 0;
87 }
88
89 /**
90 * adf_pke_replay_counters_remove_c4xxx() - Remove debugfs entry for
91 * acceleration device Freq counters.
92 * @accel_dev: Pointer to acceleration device.
93 *
94 * Return: void
95 */
96 void
adf_pke_replay_counters_remove_c4xxx(struct adf_accel_dev * accel_dev)97 adf_pke_replay_counters_remove_c4xxx(struct adf_accel_dev *accel_dev)
98 {
99 if (accel_dev->pke_replay_dbgfile) {
100 remove_oid(accel_dev, accel_dev->pke_replay_dbgfile);
101 accel_dev->pke_replay_dbgfile = NULL;
102 }
103 }
104