1 /* SPDX-License-Identifier: BSD-3-Clause */
2 /* Copyright(c) 2007-2022 Intel Corporation */
3 #include "qat_freebsd.h"
4 #include "adf_cfg.h"
5 #include "adf_common_drv.h"
6 #include "adf_accel_devices.h"
7 #include "adf_ver_dbg.h"
8
adf_sysctl_read_fw_versions(SYSCTL_HANDLER_ARGS)9 static int adf_sysctl_read_fw_versions(SYSCTL_HANDLER_ARGS)
10 {
11 struct adf_accel_dev *accel_dev = arg1;
12 char fw_version[ADF_CFG_MAX_VAL_LEN_IN_BYTES];
13
14 if (!accel_dev)
15 return -EINVAL;
16
17 if (adf_dev_started(accel_dev))
18 snprintf(fw_version,
19 ADF_CFG_MAX_VAL_LEN_IN_BYTES,
20 "%d.%d.%d",
21 accel_dev->fw_versions.fw_version_major,
22 accel_dev->fw_versions.fw_version_minor,
23 accel_dev->fw_versions.fw_version_patch);
24 else
25 snprintf(fw_version, ADF_CFG_MAX_VAL_LEN_IN_BYTES, "");
26
27 return SYSCTL_OUT(req,
28 fw_version,
29 strnlen(fw_version, ADF_CFG_MAX_VAL_LEN_IN_BYTES));
30 }
31
adf_sysctl_read_hw_versions(SYSCTL_HANDLER_ARGS)32 static int adf_sysctl_read_hw_versions(SYSCTL_HANDLER_ARGS)
33 {
34 struct adf_accel_dev *accel_dev = arg1;
35 char hw_version[ADF_CFG_MAX_VAL_LEN_IN_BYTES];
36
37 if (!accel_dev)
38 return -EINVAL;
39
40 if (adf_dev_started(accel_dev))
41 snprintf(hw_version,
42 ADF_CFG_MAX_VAL_LEN_IN_BYTES,
43 "%d",
44 accel_dev->accel_pci_dev.revid);
45 else
46 snprintf(hw_version, ADF_CFG_MAX_VAL_LEN_IN_BYTES, "");
47
48 return SYSCTL_OUT(req,
49 hw_version,
50 strnlen(hw_version, ADF_CFG_MAX_VAL_LEN_IN_BYTES));
51 }
52
adf_sysctl_read_mmp_versions(SYSCTL_HANDLER_ARGS)53 static int adf_sysctl_read_mmp_versions(SYSCTL_HANDLER_ARGS)
54 {
55 struct adf_accel_dev *accel_dev = arg1;
56 char mmp_version[ADF_CFG_MAX_VAL_LEN_IN_BYTES];
57
58 if (!accel_dev)
59 return -EINVAL;
60
61 if (adf_dev_started(accel_dev))
62 snprintf(mmp_version,
63 ADF_CFG_MAX_VAL_LEN_IN_BYTES,
64 "%d.%d.%d",
65 accel_dev->fw_versions.mmp_version_major,
66 accel_dev->fw_versions.mmp_version_minor,
67 accel_dev->fw_versions.mmp_version_patch);
68
69 if (adf_dev_started(accel_dev))
70 snprintf(mmp_version,
71 ADF_CFG_MAX_VAL_LEN_IN_BYTES,
72 "%d.%d.%d",
73 accel_dev->fw_versions.mmp_version_major,
74 accel_dev->fw_versions.mmp_version_minor,
75 accel_dev->fw_versions.mmp_version_patch);
76 else
77 snprintf(mmp_version, ADF_CFG_MAX_VAL_LEN_IN_BYTES, "");
78
79 return SYSCTL_OUT(req,
80 mmp_version,
81 strnlen(mmp_version, ADF_CFG_MAX_VAL_LEN_IN_BYTES));
82 }
83
84 int
adf_ver_dbg_add(struct adf_accel_dev * accel_dev)85 adf_ver_dbg_add(struct adf_accel_dev *accel_dev)
86 {
87 struct sysctl_ctx_list *qat_sysctl_ctx;
88 struct sysctl_oid *qat_sysctl_tree;
89 struct sysctl_oid *rc = 0;
90
91 if (!accel_dev)
92 return -EINVAL;
93
94 qat_sysctl_ctx =
95 device_get_sysctl_ctx(accel_dev->accel_pci_dev.pci_dev);
96 qat_sysctl_tree =
97 device_get_sysctl_tree(accel_dev->accel_pci_dev.pci_dev);
98
99 rc = SYSCTL_ADD_OID(qat_sysctl_ctx,
100 SYSCTL_CHILDREN(qat_sysctl_tree),
101 OID_AUTO,
102 "fw_version",
103 CTLTYPE_STRING | CTLFLAG_RD,
104 accel_dev,
105 0,
106 adf_sysctl_read_fw_versions,
107 "A",
108 "QAT FW version");
109 if (!rc)
110 goto err;
111
112 rc = SYSCTL_ADD_OID(qat_sysctl_ctx,
113 SYSCTL_CHILDREN(qat_sysctl_tree),
114 OID_AUTO,
115 "hw_version",
116 CTLTYPE_STRING | CTLFLAG_RD,
117 accel_dev,
118 0,
119 adf_sysctl_read_hw_versions,
120 "A",
121 "QAT HW version");
122 if (!rc)
123 goto err;
124
125 rc = SYSCTL_ADD_OID(qat_sysctl_ctx,
126 SYSCTL_CHILDREN(qat_sysctl_tree),
127 OID_AUTO,
128 "mmp_version",
129 CTLTYPE_STRING | CTLFLAG_RD,
130 accel_dev,
131 0,
132 adf_sysctl_read_mmp_versions,
133 "A",
134 "QAT MMP version");
135 if (!rc)
136 goto err;
137
138 return 0;
139 err:
140 device_printf(GET_DEV(accel_dev),
141 "Failed to add firmware versions to sysctl\n");
142 return -EINVAL;
143 }
144
145 void
adf_ver_dbg_del(struct adf_accel_dev * accel_dev)146 adf_ver_dbg_del(struct adf_accel_dev *accel_dev)
147 {
148 }
149