1266b0663SKrzysztof Zdziarski /* SPDX-License-Identifier: BSD-3-Clause */
2266b0663SKrzysztof Zdziarski /* Copyright(c) 2007-2022 Intel Corporation */
3266b0663SKrzysztof Zdziarski #include <sys/types.h>
4266b0663SKrzysztof Zdziarski #include <sys/sysctl.h>
5266b0663SKrzysztof Zdziarski #include <sys/systm.h>
6266b0663SKrzysztof Zdziarski #include "adf_accel_devices.h"
7266b0663SKrzysztof Zdziarski #include "adf_cfg.h"
8266b0663SKrzysztof Zdziarski #include "adf_cfg_sysctl.h"
9266b0663SKrzysztof Zdziarski #include "adf_cfg_device.h"
10266b0663SKrzysztof Zdziarski #include "adf_common_drv.h"
11266b0663SKrzysztof Zdziarski #include <sys/mutex.h>
12266b0663SKrzysztof Zdziarski #include <sys/sbuf.h>
13266b0663SKrzysztof Zdziarski 
14266b0663SKrzysztof Zdziarski #define ADF_CFG_SYSCTL_BUF_SZ ADF_CFG_MAX_VAL
15266b0663SKrzysztof Zdziarski #define ADF_CFG_UP_STR "up"
16266b0663SKrzysztof Zdziarski #define ADF_CFG_DOWN_STR "down"
17266b0663SKrzysztof Zdziarski 
18266b0663SKrzysztof Zdziarski #define ADF_CFG_MAX_USER_PROCESSES 64
19266b0663SKrzysztof Zdziarski 
20266b0663SKrzysztof Zdziarski static int
adf_cfg_down(struct adf_accel_dev * accel_dev)21266b0663SKrzysztof Zdziarski adf_cfg_down(struct adf_accel_dev *accel_dev)
22266b0663SKrzysztof Zdziarski {
23266b0663SKrzysztof Zdziarski 	int ret = 0;
24266b0663SKrzysztof Zdziarski 
25266b0663SKrzysztof Zdziarski 	if (!adf_dev_started(accel_dev)) {
26266b0663SKrzysztof Zdziarski 		device_printf(GET_DEV(accel_dev),
27266b0663SKrzysztof Zdziarski 			      "Device qat_dev%d already down\n",
28266b0663SKrzysztof Zdziarski 			      accel_dev->accel_id);
29266b0663SKrzysztof Zdziarski 		return 0;
30266b0663SKrzysztof Zdziarski 	}
31266b0663SKrzysztof Zdziarski 
32266b0663SKrzysztof Zdziarski 	if (adf_dev_in_use(accel_dev)) {
33266b0663SKrzysztof Zdziarski 		pr_err("QAT: Device %d in use\n", accel_dev->accel_id);
34266b0663SKrzysztof Zdziarski 		goto out;
35266b0663SKrzysztof Zdziarski 	}
36266b0663SKrzysztof Zdziarski 
37266b0663SKrzysztof Zdziarski 	if (adf_dev_stop(accel_dev)) {
38266b0663SKrzysztof Zdziarski 		device_printf(GET_DEV(accel_dev),
39266b0663SKrzysztof Zdziarski 			      "Failed to stop qat_dev%d\n",
40266b0663SKrzysztof Zdziarski 			      accel_dev->accel_id);
41266b0663SKrzysztof Zdziarski 		ret = EFAULT;
42266b0663SKrzysztof Zdziarski 		goto out;
43266b0663SKrzysztof Zdziarski 	}
44266b0663SKrzysztof Zdziarski 
45266b0663SKrzysztof Zdziarski 	adf_dev_shutdown(accel_dev);
46266b0663SKrzysztof Zdziarski 
47266b0663SKrzysztof Zdziarski out:
48266b0663SKrzysztof Zdziarski 	return ret;
49266b0663SKrzysztof Zdziarski }
50266b0663SKrzysztof Zdziarski 
51266b0663SKrzysztof Zdziarski static int
adf_cfg_up(struct adf_accel_dev * accel_dev)52266b0663SKrzysztof Zdziarski adf_cfg_up(struct adf_accel_dev *accel_dev)
53266b0663SKrzysztof Zdziarski {
54266b0663SKrzysztof Zdziarski 	int ret;
55266b0663SKrzysztof Zdziarski 
56266b0663SKrzysztof Zdziarski 	if (adf_dev_started(accel_dev))
57266b0663SKrzysztof Zdziarski 		return 0;
58266b0663SKrzysztof Zdziarski 
59266b0663SKrzysztof Zdziarski 	if (NULL == accel_dev->hw_device->config_device)
60266b0663SKrzysztof Zdziarski 		return ENXIO;
61266b0663SKrzysztof Zdziarski 
62266b0663SKrzysztof Zdziarski 	ret = accel_dev->hw_device->config_device(accel_dev);
63266b0663SKrzysztof Zdziarski 	if (ret) {
64266b0663SKrzysztof Zdziarski 		device_printf(GET_DEV(accel_dev),
65266b0663SKrzysztof Zdziarski 			      "Failed to start qat_dev%d\n",
66266b0663SKrzysztof Zdziarski 			      accel_dev->accel_id);
67266b0663SKrzysztof Zdziarski 		return ret;
68266b0663SKrzysztof Zdziarski 	}
69266b0663SKrzysztof Zdziarski 
70266b0663SKrzysztof Zdziarski 	ret = adf_dev_init(accel_dev);
71266b0663SKrzysztof Zdziarski 	if (!ret)
72266b0663SKrzysztof Zdziarski 		ret = adf_dev_start(accel_dev);
73266b0663SKrzysztof Zdziarski 
74266b0663SKrzysztof Zdziarski 	if (ret) {
75266b0663SKrzysztof Zdziarski 		device_printf(GET_DEV(accel_dev),
76266b0663SKrzysztof Zdziarski 			      "Failed to start qat_dev%d\n",
77266b0663SKrzysztof Zdziarski 			      accel_dev->accel_id);
78266b0663SKrzysztof Zdziarski 		adf_dev_stop(accel_dev);
79266b0663SKrzysztof Zdziarski 		adf_dev_shutdown(accel_dev);
80266b0663SKrzysztof Zdziarski 	}
81266b0663SKrzysztof Zdziarski 
82266b0663SKrzysztof Zdziarski 	if (!ret) {
83266b0663SKrzysztof Zdziarski 		struct adf_cfg_device *cfg_dev = NULL;
84266b0663SKrzysztof Zdziarski 
85266b0663SKrzysztof Zdziarski 		cfg_dev = accel_dev->cfg->dev;
86266b0663SKrzysztof Zdziarski 		adf_cfg_device_clear(cfg_dev, accel_dev);
87266b0663SKrzysztof Zdziarski 		free(cfg_dev, M_QAT);
88266b0663SKrzysztof Zdziarski 		accel_dev->cfg->dev = NULL;
89266b0663SKrzysztof Zdziarski 	}
90266b0663SKrzysztof Zdziarski 
91266b0663SKrzysztof Zdziarski 	return 0;
92266b0663SKrzysztof Zdziarski }
93266b0663SKrzysztof Zdziarski 
94266b0663SKrzysztof Zdziarski static const char *const cfg_serv[] =
95266b0663SKrzysztof Zdziarski     { "sym;asym", "sym", "asym", "dc", "sym;dc", "asym;dc", "cy", "cy;dc" };
96266b0663SKrzysztof Zdziarski 
97266b0663SKrzysztof Zdziarski static const char *const cfg_mode[] = { "ks;us", "us", "ks" };
98266b0663SKrzysztof Zdziarski 
adf_cfg_sysctl_services_handle(SYSCTL_HANDLER_ARGS)99266b0663SKrzysztof Zdziarski static int adf_cfg_sysctl_services_handle(SYSCTL_HANDLER_ARGS)
100266b0663SKrzysztof Zdziarski {
101266b0663SKrzysztof Zdziarski 	struct adf_cfg_device_data *dev_cfg_data;
102266b0663SKrzysztof Zdziarski 	struct adf_accel_dev *accel_dev;
103266b0663SKrzysztof Zdziarski 	char buf[ADF_CFG_SYSCTL_BUF_SZ];
104266b0663SKrzysztof Zdziarski 	unsigned int len;
105266b0663SKrzysztof Zdziarski 	int ret = 0;
106266b0663SKrzysztof Zdziarski 	int i = 0;
107266b0663SKrzysztof Zdziarski 
108266b0663SKrzysztof Zdziarski 	accel_dev = arg1;
109266b0663SKrzysztof Zdziarski 	if (!accel_dev)
110266b0663SKrzysztof Zdziarski 		return ENXIO;
111266b0663SKrzysztof Zdziarski 
112266b0663SKrzysztof Zdziarski 	dev_cfg_data = accel_dev->cfg;
113266b0663SKrzysztof Zdziarski 	if (!dev_cfg_data)
114266b0663SKrzysztof Zdziarski 		return ENXIO;
115266b0663SKrzysztof Zdziarski 
116266b0663SKrzysztof Zdziarski 	strlcpy(buf, dev_cfg_data->cfg_services, sizeof(buf));
117266b0663SKrzysztof Zdziarski 
118266b0663SKrzysztof Zdziarski 	ret = sysctl_handle_string(oidp, buf, sizeof(buf), req);
119266b0663SKrzysztof Zdziarski 	if (ret != 0 || req->newptr == NULL)
120266b0663SKrzysztof Zdziarski 		return ret;
121266b0663SKrzysztof Zdziarski 
122266b0663SKrzysztof Zdziarski 	/* Handle config change */
123266b0663SKrzysztof Zdziarski 	if (adf_dev_started(accel_dev)) {
124266b0663SKrzysztof Zdziarski 		device_printf(
125266b0663SKrzysztof Zdziarski 		    GET_DEV(accel_dev),
126266b0663SKrzysztof Zdziarski 		    "QAT: configuration could be changed in down state only\n");
127266b0663SKrzysztof Zdziarski 		return EINVAL;
128266b0663SKrzysztof Zdziarski 	}
129266b0663SKrzysztof Zdziarski 
130266b0663SKrzysztof Zdziarski 	len = strlen(buf);
131266b0663SKrzysztof Zdziarski 
132266b0663SKrzysztof Zdziarski 	for (i = 0; i < ARRAY_SIZE(cfg_serv); i++) {
133266b0663SKrzysztof Zdziarski 		if ((len > 0 && strncasecmp(cfg_serv[i], buf, len) == 0)) {
134266b0663SKrzysztof Zdziarski 			strlcpy(dev_cfg_data->cfg_services,
135266b0663SKrzysztof Zdziarski 				buf,
136266b0663SKrzysztof Zdziarski 				ADF_CFG_MAX_VAL);
137266b0663SKrzysztof Zdziarski 			break;
138266b0663SKrzysztof Zdziarski 		}
139266b0663SKrzysztof Zdziarski 	}
140266b0663SKrzysztof Zdziarski 
141266b0663SKrzysztof Zdziarski 	if (i == ARRAY_SIZE(cfg_serv)) {
142266b0663SKrzysztof Zdziarski 		device_printf(GET_DEV(accel_dev),
143266b0663SKrzysztof Zdziarski 			      "Unknown service configuration\n");
144266b0663SKrzysztof Zdziarski 		ret = EINVAL;
145266b0663SKrzysztof Zdziarski 	}
146266b0663SKrzysztof Zdziarski 
147266b0663SKrzysztof Zdziarski 	return ret;
148266b0663SKrzysztof Zdziarski }
149266b0663SKrzysztof Zdziarski 
adf_cfg_sysctl_mode_handle(SYSCTL_HANDLER_ARGS)150266b0663SKrzysztof Zdziarski static int adf_cfg_sysctl_mode_handle(SYSCTL_HANDLER_ARGS)
151266b0663SKrzysztof Zdziarski {
152266b0663SKrzysztof Zdziarski 	struct adf_cfg_device_data *dev_cfg_data;
153266b0663SKrzysztof Zdziarski 	struct adf_accel_dev *accel_dev;
154266b0663SKrzysztof Zdziarski 	char buf[ADF_CFG_SYSCTL_BUF_SZ];
155266b0663SKrzysztof Zdziarski 	unsigned int len;
156266b0663SKrzysztof Zdziarski 	int ret = 0;
157266b0663SKrzysztof Zdziarski 	int i = 0;
158266b0663SKrzysztof Zdziarski 
159266b0663SKrzysztof Zdziarski 	accel_dev = arg1;
160266b0663SKrzysztof Zdziarski 	if (!accel_dev)
161266b0663SKrzysztof Zdziarski 		return ENXIO;
162266b0663SKrzysztof Zdziarski 
163266b0663SKrzysztof Zdziarski 	dev_cfg_data = accel_dev->cfg;
164266b0663SKrzysztof Zdziarski 	if (!dev_cfg_data)
165266b0663SKrzysztof Zdziarski 		return ENXIO;
166266b0663SKrzysztof Zdziarski 
167266b0663SKrzysztof Zdziarski 	strlcpy(buf, dev_cfg_data->cfg_mode, sizeof(buf));
168266b0663SKrzysztof Zdziarski 
169266b0663SKrzysztof Zdziarski 	ret = sysctl_handle_string(oidp, buf, sizeof(buf), req);
170266b0663SKrzysztof Zdziarski 	if (ret != 0 || req->newptr == NULL)
171266b0663SKrzysztof Zdziarski 		return ret;
172266b0663SKrzysztof Zdziarski 
173266b0663SKrzysztof Zdziarski 	/* Handle config change */
174266b0663SKrzysztof Zdziarski 	if (adf_dev_started(accel_dev)) {
175266b0663SKrzysztof Zdziarski 		device_printf(
176266b0663SKrzysztof Zdziarski 		    GET_DEV(accel_dev),
177266b0663SKrzysztof Zdziarski 		    "QAT: configuration could be changed in down state only\n");
178266b0663SKrzysztof Zdziarski 		return EBUSY;
179266b0663SKrzysztof Zdziarski 	}
180266b0663SKrzysztof Zdziarski 
181266b0663SKrzysztof Zdziarski 	len = strlen(buf);
182266b0663SKrzysztof Zdziarski 
183266b0663SKrzysztof Zdziarski 	for (i = 0; i < ARRAY_SIZE(cfg_mode); i++) {
184266b0663SKrzysztof Zdziarski 		if ((len > 0 && strncasecmp(cfg_mode[i], buf, len) == 0)) {
185266b0663SKrzysztof Zdziarski 			strlcpy(dev_cfg_data->cfg_mode, buf, ADF_CFG_MAX_VAL);
186266b0663SKrzysztof Zdziarski 			break;
187266b0663SKrzysztof Zdziarski 		}
188266b0663SKrzysztof Zdziarski 	}
189266b0663SKrzysztof Zdziarski 
190266b0663SKrzysztof Zdziarski 	if (i == ARRAY_SIZE(cfg_mode)) {
191266b0663SKrzysztof Zdziarski 		device_printf(GET_DEV(accel_dev),
192266b0663SKrzysztof Zdziarski 			      "Unknown configuration mode\n");
193266b0663SKrzysztof Zdziarski 		ret = EINVAL;
194266b0663SKrzysztof Zdziarski 	}
195266b0663SKrzysztof Zdziarski 
196266b0663SKrzysztof Zdziarski 	return ret;
197266b0663SKrzysztof Zdziarski }
198266b0663SKrzysztof Zdziarski 
adf_cfg_sysctl_handle(SYSCTL_HANDLER_ARGS)199266b0663SKrzysztof Zdziarski static int adf_cfg_sysctl_handle(SYSCTL_HANDLER_ARGS)
200266b0663SKrzysztof Zdziarski {
201266b0663SKrzysztof Zdziarski 	struct adf_cfg_device_data *dev_cfg_data;
202266b0663SKrzysztof Zdziarski 	struct adf_accel_dev *accel_dev;
203266b0663SKrzysztof Zdziarski 	char buf[ADF_CFG_SYSCTL_BUF_SZ] = { 0 };
204266b0663SKrzysztof Zdziarski 	unsigned int len;
205266b0663SKrzysztof Zdziarski 	int ret = 0;
206266b0663SKrzysztof Zdziarski 
207266b0663SKrzysztof Zdziarski 	accel_dev = arg1;
208266b0663SKrzysztof Zdziarski 	if (!accel_dev)
209266b0663SKrzysztof Zdziarski 		return ENXIO;
210266b0663SKrzysztof Zdziarski 
211266b0663SKrzysztof Zdziarski 	dev_cfg_data = accel_dev->cfg;
212266b0663SKrzysztof Zdziarski 	if (!dev_cfg_data)
213266b0663SKrzysztof Zdziarski 		return ENXIO;
214266b0663SKrzysztof Zdziarski 
215266b0663SKrzysztof Zdziarski 	if (adf_dev_started(accel_dev)) {
216266b0663SKrzysztof Zdziarski 		strlcpy(buf, ADF_CFG_UP_STR, sizeof(buf));
217266b0663SKrzysztof Zdziarski 	} else {
218266b0663SKrzysztof Zdziarski 		strlcpy(buf, ADF_CFG_DOWN_STR, sizeof(buf));
219266b0663SKrzysztof Zdziarski 	}
220266b0663SKrzysztof Zdziarski 
221266b0663SKrzysztof Zdziarski 	ret = sysctl_handle_string(oidp, buf, sizeof(buf), req);
222266b0663SKrzysztof Zdziarski 	if (ret != 0 || req->newptr == NULL)
223266b0663SKrzysztof Zdziarski 		return ret;
224266b0663SKrzysztof Zdziarski 
225266b0663SKrzysztof Zdziarski 	len = strlen(buf);
226266b0663SKrzysztof Zdziarski 
227266b0663SKrzysztof Zdziarski 	if ((len > 0 && strncasecmp(ADF_CFG_UP_STR, buf, len) == 0)) {
228266b0663SKrzysztof Zdziarski 		ret = adf_cfg_up(accel_dev);
229266b0663SKrzysztof Zdziarski 
230266b0663SKrzysztof Zdziarski 	} else if (len > 0 && strncasecmp(ADF_CFG_DOWN_STR, buf, len) == 0) {
231266b0663SKrzysztof Zdziarski 		ret = adf_cfg_down(accel_dev);
232266b0663SKrzysztof Zdziarski 
233266b0663SKrzysztof Zdziarski 	} else {
234266b0663SKrzysztof Zdziarski 		device_printf(GET_DEV(accel_dev), "QAT: Invalid operation\n");
235266b0663SKrzysztof Zdziarski 		ret = EINVAL;
236266b0663SKrzysztof Zdziarski 	}
237266b0663SKrzysztof Zdziarski 
238266b0663SKrzysztof Zdziarski 	return ret;
239266b0663SKrzysztof Zdziarski }
240266b0663SKrzysztof Zdziarski 
adf_cfg_sysctl_num_processes_handle(SYSCTL_HANDLER_ARGS)241266b0663SKrzysztof Zdziarski static int adf_cfg_sysctl_num_processes_handle(SYSCTL_HANDLER_ARGS)
242266b0663SKrzysztof Zdziarski {
243266b0663SKrzysztof Zdziarski 	struct adf_cfg_device_data *dev_cfg_data;
244266b0663SKrzysztof Zdziarski 	struct adf_accel_dev *accel_dev;
245266b0663SKrzysztof Zdziarski 	uint32_t num_user_processes = 0;
246266b0663SKrzysztof Zdziarski 	int ret = 0;
247266b0663SKrzysztof Zdziarski 
248266b0663SKrzysztof Zdziarski 	accel_dev = arg1;
249266b0663SKrzysztof Zdziarski 	if (!accel_dev)
250266b0663SKrzysztof Zdziarski 		return ENXIO;
251266b0663SKrzysztof Zdziarski 
252266b0663SKrzysztof Zdziarski 	dev_cfg_data = accel_dev->cfg;
253266b0663SKrzysztof Zdziarski 	if (!dev_cfg_data)
254266b0663SKrzysztof Zdziarski 		return ENXIO;
255266b0663SKrzysztof Zdziarski 
256266b0663SKrzysztof Zdziarski 	num_user_processes = dev_cfg_data->num_user_processes;
257266b0663SKrzysztof Zdziarski 
258266b0663SKrzysztof Zdziarski 	ret = sysctl_handle_int(oidp, &num_user_processes, 0, req);
259266b0663SKrzysztof Zdziarski 	if (ret != 0 || req->newptr == NULL)
260266b0663SKrzysztof Zdziarski 		return ret;
261266b0663SKrzysztof Zdziarski 
262266b0663SKrzysztof Zdziarski 	if (adf_dev_started(accel_dev)) {
263266b0663SKrzysztof Zdziarski 		device_printf(
264266b0663SKrzysztof Zdziarski 		    GET_DEV(accel_dev),
265266b0663SKrzysztof Zdziarski 		    "QAT: configuration could be changed in down state only\n");
266266b0663SKrzysztof Zdziarski 		return EBUSY;
267266b0663SKrzysztof Zdziarski 	}
268266b0663SKrzysztof Zdziarski 
269266b0663SKrzysztof Zdziarski 	if (num_user_processes > ADF_CFG_MAX_USER_PROCESSES) {
270266b0663SKrzysztof Zdziarski 		return EINVAL;
271266b0663SKrzysztof Zdziarski 	}
272266b0663SKrzysztof Zdziarski 
273266b0663SKrzysztof Zdziarski 	dev_cfg_data->num_user_processes = num_user_processes;
274266b0663SKrzysztof Zdziarski 
275266b0663SKrzysztof Zdziarski 	return ret;
276266b0663SKrzysztof Zdziarski }
277266b0663SKrzysztof Zdziarski 
278266b0663SKrzysztof Zdziarski int
adf_cfg_sysctl_add(struct adf_accel_dev * accel_dev)279266b0663SKrzysztof Zdziarski adf_cfg_sysctl_add(struct adf_accel_dev *accel_dev)
280266b0663SKrzysztof Zdziarski {
281266b0663SKrzysztof Zdziarski 	struct sysctl_ctx_list *qat_sysctl_ctx;
282266b0663SKrzysztof Zdziarski 	struct sysctl_oid *qat_sysctl_tree;
283266b0663SKrzysztof Zdziarski 
284266b0663SKrzysztof Zdziarski 	if (!accel_dev)
285266b0663SKrzysztof Zdziarski 		return EINVAL;
286266b0663SKrzysztof Zdziarski 
287266b0663SKrzysztof Zdziarski 	qat_sysctl_ctx =
288266b0663SKrzysztof Zdziarski 	    device_get_sysctl_ctx(accel_dev->accel_pci_dev.pci_dev);
289266b0663SKrzysztof Zdziarski 	qat_sysctl_tree =
290266b0663SKrzysztof Zdziarski 	    device_get_sysctl_tree(accel_dev->accel_pci_dev.pci_dev);
291266b0663SKrzysztof Zdziarski 
292266b0663SKrzysztof Zdziarski 	SYSCTL_ADD_PROC(qat_sysctl_ctx,
293266b0663SKrzysztof Zdziarski 			SYSCTL_CHILDREN(qat_sysctl_tree),
294266b0663SKrzysztof Zdziarski 			OID_AUTO,
295266b0663SKrzysztof Zdziarski 			"state",
296266b0663SKrzysztof Zdziarski 			CTLTYPE_STRING | CTLFLAG_RW | CTLFLAG_NEEDGIANT,
297266b0663SKrzysztof Zdziarski 			accel_dev,
298266b0663SKrzysztof Zdziarski 			0,
299266b0663SKrzysztof Zdziarski 			adf_cfg_sysctl_handle,
300266b0663SKrzysztof Zdziarski 			"A",
301266b0663SKrzysztof Zdziarski 			"QAT State");
302266b0663SKrzysztof Zdziarski 
303266b0663SKrzysztof Zdziarski 	SYSCTL_ADD_PROC(qat_sysctl_ctx,
304266b0663SKrzysztof Zdziarski 			SYSCTL_CHILDREN(qat_sysctl_tree),
305266b0663SKrzysztof Zdziarski 			OID_AUTO,
306266b0663SKrzysztof Zdziarski 			"cfg_services",
307266b0663SKrzysztof Zdziarski 			CTLTYPE_STRING | CTLFLAG_RWTUN | CTLFLAG_NEEDGIANT,
308266b0663SKrzysztof Zdziarski 			accel_dev,
309266b0663SKrzysztof Zdziarski 			0,
310266b0663SKrzysztof Zdziarski 			adf_cfg_sysctl_services_handle,
311266b0663SKrzysztof Zdziarski 			"A",
312266b0663SKrzysztof Zdziarski 			"QAT services confguration");
313266b0663SKrzysztof Zdziarski 
314266b0663SKrzysztof Zdziarski 	SYSCTL_ADD_PROC(qat_sysctl_ctx,
315266b0663SKrzysztof Zdziarski 			SYSCTL_CHILDREN(qat_sysctl_tree),
316266b0663SKrzysztof Zdziarski 			OID_AUTO,
317266b0663SKrzysztof Zdziarski 			"cfg_mode",
318266b0663SKrzysztof Zdziarski 			CTLTYPE_STRING | CTLFLAG_RWTUN | CTLFLAG_NEEDGIANT,
319266b0663SKrzysztof Zdziarski 			accel_dev,
320266b0663SKrzysztof Zdziarski 			0,
321266b0663SKrzysztof Zdziarski 			adf_cfg_sysctl_mode_handle,
322266b0663SKrzysztof Zdziarski 			"A",
323266b0663SKrzysztof Zdziarski 			"QAT mode configuration");
324266b0663SKrzysztof Zdziarski 
325266b0663SKrzysztof Zdziarski 	SYSCTL_ADD_PROC(qat_sysctl_ctx,
326266b0663SKrzysztof Zdziarski 			SYSCTL_CHILDREN(qat_sysctl_tree),
327266b0663SKrzysztof Zdziarski 			OID_AUTO,
328266b0663SKrzysztof Zdziarski 			"num_user_processes",
329266b0663SKrzysztof Zdziarski 			CTLTYPE_U32 | CTLFLAG_RWTUN | CTLFLAG_NEEDGIANT,
330266b0663SKrzysztof Zdziarski 			accel_dev,
331266b0663SKrzysztof Zdziarski 			0,
332266b0663SKrzysztof Zdziarski 			adf_cfg_sysctl_num_processes_handle,
333266b0663SKrzysztof Zdziarski 			"I",
334266b0663SKrzysztof Zdziarski 			"QAT user processes number ");
335266b0663SKrzysztof Zdziarski 
336266b0663SKrzysztof Zdziarski 	return 0;
337266b0663SKrzysztof Zdziarski }
338266b0663SKrzysztof Zdziarski 
339266b0663SKrzysztof Zdziarski void
adf_cfg_sysctl_remove(struct adf_accel_dev * accel_dev)340266b0663SKrzysztof Zdziarski adf_cfg_sysctl_remove(struct adf_accel_dev *accel_dev)
341266b0663SKrzysztof Zdziarski {
342266b0663SKrzysztof Zdziarski }
343