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