xref: /freebsd/sys/dev/qat/qat_hw/qat_c4xxx/adf_c4xxx_pke_replay_stats.c (revision 8aa51e6d7de0a828020de64560d1385e15955a1c)
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