xref: /spdk/module/accel/dpdk_cryptodev/accel_dpdk_cryptodev_rpc.c (revision b02581a89058ebaebe03bd0e16e3b58adfe406c1)
1 /*   SPDX-License-Identifier: BSD-3-Clause
2  *   Copyright (c) Intel Corporation.
3  *   Copyright (c) 2022, NVIDIA CORPORATION & AFFILIATES.
4  *   All rights reserved.
5  */
6 
7 #include "accel_dpdk_cryptodev.h"
8 
9 #include "spdk/rpc.h"
10 #include "spdk/util.h"
11 
12 static void
13 rpc_dpdk_cryptodev_scan_accel_module(struct spdk_jsonrpc_request *request,
14 				     const struct spdk_json_val *params)
15 {
16 	if (params != NULL) {
17 		spdk_jsonrpc_send_error_response(request, SPDK_JSONRPC_ERROR_INVALID_PARAMS,
18 						 "No parameters expected");
19 		return;
20 	}
21 
22 	accel_dpdk_cryptodev_enable();
23 	spdk_jsonrpc_send_bool_response(request, true);
24 }
25 SPDK_RPC_REGISTER("dpdk_cryptodev_scan_accel_module", rpc_dpdk_cryptodev_scan_accel_module,
26 		  SPDK_RPC_STARTUP)
27 
28 struct rpc_set_driver {
29 	char *driver_name;
30 };
31 
32 static const struct spdk_json_object_decoder rpc_set_driver_decoders[] = {
33 	{"driver_name", offsetof(struct rpc_set_driver, driver_name), spdk_json_decode_string},
34 };
35 
36 static void
37 rpc_dpdk_cryptodev_set_driver(struct spdk_jsonrpc_request *request,
38 			      const struct spdk_json_val *params)
39 {
40 	struct rpc_set_driver req = {};
41 	int rc;
42 
43 	if (spdk_json_decode_object(params, rpc_set_driver_decoders,
44 				    SPDK_COUNTOF(rpc_set_driver_decoders), &req)) {
45 		spdk_jsonrpc_send_error_response(request, SPDK_JSONRPC_ERROR_PARSE_ERROR,
46 						 "spdk_json_decode_object failed");
47 		return;
48 	}
49 
50 	rc = accel_dpdk_cryptodev_set_driver(req.driver_name);
51 	free(req.driver_name);
52 	if (rc) {
53 		spdk_jsonrpc_send_error_response(request, SPDK_JSONRPC_ERROR_INVALID_PARAMS,
54 						 "incorrect driver name");
55 	} else {
56 		spdk_jsonrpc_send_bool_response(request, true);
57 	}
58 }
59 SPDK_RPC_REGISTER("dpdk_cryptodev_set_driver", rpc_dpdk_cryptodev_set_driver, SPDK_RPC_STARTUP)
60 
61 static void
62 rpc_dpdk_cryptodev_get_driver(struct spdk_jsonrpc_request *request,
63 			      const struct spdk_json_val *params)
64 {
65 	struct spdk_json_write_ctx *w;
66 	const char *driver_name;
67 
68 	if (params) {
69 		spdk_jsonrpc_send_error_response(request, SPDK_JSONRPC_ERROR_INVALID_PARAMS,
70 						 "No parameters expected");
71 		return;
72 	}
73 
74 	driver_name = accel_dpdk_cryptodev_get_driver();
75 	assert(driver_name);
76 
77 	w = spdk_jsonrpc_begin_result(request);
78 	spdk_json_write_string(w, driver_name);
79 	spdk_jsonrpc_end_result(request, w);
80 }
81 SPDK_RPC_REGISTER("dpdk_cryptodev_get_driver", rpc_dpdk_cryptodev_get_driver,
82 		  SPDK_RPC_STARTUP | SPDK_RPC_RUNTIME)
83