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