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