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_misc_error_stats.h"
5 #include "adf_common_drv.h"
6 #include "adf_cfg_common.h"
7 #include <sys/sbuf.h>
8 #include <sys/sysctl.h>
9
10 #define MISC_ERROR_DBG_FILE "misc_error_stats"
11 #define LINE \
12 "+-----------------------------------------------------------------+\n"
13 #define BANNER \
14 "| Miscellaneous Error Statistics for Qat Device |\n"
15
16 static void *misc_counter;
17
18 struct adf_dev_miscellaneous_stats {
19 u64 misc_counter;
20 };
21
qat_misc_error_show(SYSCTL_HANDLER_ARGS)22 static int qat_misc_error_show(SYSCTL_HANDLER_ARGS)
23 {
24 struct sbuf sb;
25
26 sbuf_new_for_sysctl(&sb, NULL, 256, req);
27 sbuf_printf(&sb, "\n");
28 sbuf_printf(&sb, LINE);
29 sbuf_printf(&sb,
30 "| Miscellaneous Error: %40llu |\n",
31 (unsigned long long)((struct adf_dev_miscellaneous_stats *)
32 misc_counter)
33 ->misc_counter);
34
35 sbuf_finish(&sb);
36 SYSCTL_OUT(req, sbuf_data(&sb), sbuf_len(&sb));
37 sbuf_delete(&sb);
38
39 return 0;
40 }
41
42 /**
43 * adf_misc_error_add_c4xxx() - Create debugfs entry for
44 * acceleration device Freq counters.
45 * @accel_dev: Pointer to acceleration device.
46 *
47 * Return: 0 on success, error code otherwise.
48 */
49 int
adf_misc_error_add_c4xxx(struct adf_accel_dev * accel_dev)50 adf_misc_error_add_c4xxx(struct adf_accel_dev *accel_dev)
51 {
52 struct sysctl_ctx_list *qat_sysctl_ctx = NULL;
53 struct sysctl_oid *qat_sysctl_tree = NULL;
54 struct sysctl_oid *misc_er_file = NULL;
55
56 qat_sysctl_ctx =
57 device_get_sysctl_ctx(accel_dev->accel_pci_dev.pci_dev);
58 qat_sysctl_tree =
59 device_get_sysctl_tree(accel_dev->accel_pci_dev.pci_dev);
60
61 misc_er_file = SYSCTL_ADD_PROC(qat_sysctl_ctx,
62 SYSCTL_CHILDREN(qat_sysctl_tree),
63 OID_AUTO,
64 MISC_ERROR_DBG_FILE,
65 CTLTYPE_STRING | CTLFLAG_RD,
66 accel_dev,
67 0,
68 qat_misc_error_show,
69 "A",
70 "QAT Miscellaneous Error Statistics");
71 accel_dev->misc_error_dbgfile = misc_er_file;
72 if (!accel_dev->misc_error_dbgfile) {
73 device_printf(
74 GET_DEV(accel_dev),
75 "Failed to create qat miscellaneous error debugfs entry.\n");
76 return ENOENT;
77 }
78
79 misc_counter = kmalloc(PAGE_SIZE, GFP_KERNEL);
80 if (!misc_counter)
81 return ENOMEM;
82
83 memset(misc_counter, 0, PAGE_SIZE);
84
85 return 0;
86 }
87
88 /**
89 * adf_misc_error_remove_c4xxx() - Remove debugfs entry for
90 * acceleration device misc error counter.
91 * @accel_dev: Pointer to acceleration device.
92 *
93 * Return: void
94 */
95 void
adf_misc_error_remove_c4xxx(struct adf_accel_dev * accel_dev)96 adf_misc_error_remove_c4xxx(struct adf_accel_dev *accel_dev)
97 {
98 if (accel_dev->misc_error_dbgfile) {
99 remove_oid(accel_dev, accel_dev->misc_error_dbgfile);
100 accel_dev->misc_error_dbgfile = NULL;
101 }
102
103 kfree(misc_counter);
104 misc_counter = NULL;
105 }
106