xref: /spdk/module/accel/dsa/accel_dsa_rpc.c (revision 3cac0518ff2f7c83d8aa3d101359f6643d0ab227)
1712e8cb7SBen Walker /*   SPDX-License-Identifier: BSD-3-Clause
2a6dbe372Spaul luse  *   Copyright (C) 2022 Intel Corporation.
3712e8cb7SBen Walker  *   All rights reserved.
4712e8cb7SBen Walker  */
5712e8cb7SBen Walker 
6712e8cb7SBen Walker #include "accel_dsa.h"
7712e8cb7SBen Walker 
8712e8cb7SBen Walker #include "spdk/rpc.h"
9712e8cb7SBen Walker #include "spdk/util.h"
10712e8cb7SBen Walker #include "spdk/event.h"
11712e8cb7SBen Walker #include "spdk/stdinc.h"
12712e8cb7SBen Walker #include "spdk/env.h"
13*3cac0518SKrzysztof Sprzaczkowski #include "spdk/string.h"
14712e8cb7SBen Walker 
15712e8cb7SBen Walker struct rpc_dsa_scan_accel_module {
16712e8cb7SBen Walker 	bool config_kernel_mode;
17712e8cb7SBen Walker };
18712e8cb7SBen Walker 
19712e8cb7SBen Walker static const struct spdk_json_object_decoder rpc_dsa_scan_accel_module_decoder[] = {
20712e8cb7SBen Walker 	{"config_kernel_mode", offsetof(struct rpc_dsa_scan_accel_module, config_kernel_mode), spdk_json_decode_bool, true},
21712e8cb7SBen Walker };
22712e8cb7SBen Walker 
23712e8cb7SBen Walker static void
rpc_dsa_scan_accel_module(struct spdk_jsonrpc_request * request,const struct spdk_json_val * params)24712e8cb7SBen Walker rpc_dsa_scan_accel_module(struct spdk_jsonrpc_request *request,
25712e8cb7SBen Walker 			  const struct spdk_json_val *params)
26712e8cb7SBen Walker {
27712e8cb7SBen Walker 	struct rpc_dsa_scan_accel_module req = {};
28*3cac0518SKrzysztof Sprzaczkowski 	int rc;
29712e8cb7SBen Walker 
30712e8cb7SBen Walker 	if (params != NULL) {
31712e8cb7SBen Walker 		if (spdk_json_decode_object(params, rpc_dsa_scan_accel_module_decoder,
32712e8cb7SBen Walker 					    SPDK_COUNTOF(rpc_dsa_scan_accel_module_decoder),
33712e8cb7SBen Walker 					    &req)) {
34712e8cb7SBen Walker 			SPDK_ERRLOG("spdk_json_decode_object() failed\n");
35712e8cb7SBen Walker 			spdk_jsonrpc_send_error_response(request, SPDK_JSONRPC_ERROR_INVALID_PARAMS,
36712e8cb7SBen Walker 							 "Invalid parameters");
37712e8cb7SBen Walker 			return;
38712e8cb7SBen Walker 		}
39712e8cb7SBen Walker 	}
40712e8cb7SBen Walker 
41*3cac0518SKrzysztof Sprzaczkowski 	rc = accel_dsa_enable_probe(req.config_kernel_mode);
42*3cac0518SKrzysztof Sprzaczkowski 	if (rc != 0) {
43*3cac0518SKrzysztof Sprzaczkowski 		spdk_jsonrpc_send_error_response(request, rc, spdk_strerror(-rc));
44*3cac0518SKrzysztof Sprzaczkowski 		return;
45712e8cb7SBen Walker 	}
46712e8cb7SBen Walker 
47*3cac0518SKrzysztof Sprzaczkowski 	if (req.config_kernel_mode) {
48*3cac0518SKrzysztof Sprzaczkowski 		SPDK_NOTICELOG("Enabled DSA kernel-mode\n");
49*3cac0518SKrzysztof Sprzaczkowski 	} else {
50*3cac0518SKrzysztof Sprzaczkowski 		SPDK_NOTICELOG("Enabled DSA user-mode\n");
51*3cac0518SKrzysztof Sprzaczkowski 	}
52*3cac0518SKrzysztof Sprzaczkowski 
53712e8cb7SBen Walker 	spdk_jsonrpc_send_bool_response(request, true);
54712e8cb7SBen Walker }
55712e8cb7SBen Walker SPDK_RPC_REGISTER("dsa_scan_accel_module", rpc_dsa_scan_accel_module, SPDK_RPC_STARTUP)
56712e8cb7SBen Walker SPDK_RPC_REGISTER_ALIAS_DEPRECATED(dsa_scan_accel_module, dsa_scan_accel_engine)
57