1*976f8b09Spaul luse /* SPDX-License-Identifier: BSD-3-Clause
2*976f8b09Spaul luse * Copyright (C) 2022 Intel Corporation.
3*976f8b09Spaul luse * All rights reserved.
4*976f8b09Spaul luse */
5*976f8b09Spaul luse
6*976f8b09Spaul luse #include "accel_dpdk_compressdev.h"
7*976f8b09Spaul luse #include "spdk/rpc.h"
8*976f8b09Spaul luse #include "spdk/util.h"
9*976f8b09Spaul luse #include "spdk/string.h"
10*976f8b09Spaul luse #include "spdk/log.h"
11*976f8b09Spaul luse
12*976f8b09Spaul luse struct rpc_compressdev_scan_accel_module {
13*976f8b09Spaul luse uint32_t pmd;
14*976f8b09Spaul luse };
15*976f8b09Spaul luse
16*976f8b09Spaul luse static const struct spdk_json_object_decoder rpc_compressdev_scan_accel_module_decoder[] = {
17*976f8b09Spaul luse {"pmd", offsetof(struct rpc_compressdev_scan_accel_module, pmd), spdk_json_decode_uint32},
18*976f8b09Spaul luse };
19*976f8b09Spaul luse
20*976f8b09Spaul luse static void
rpc_compressdev_scan_accel_module(struct spdk_jsonrpc_request * request,const struct spdk_json_val * params)21*976f8b09Spaul luse rpc_compressdev_scan_accel_module(struct spdk_jsonrpc_request *request,
22*976f8b09Spaul luse const struct spdk_json_val *params)
23*976f8b09Spaul luse {
24*976f8b09Spaul luse struct rpc_compressdev_scan_accel_module req;
25*976f8b09Spaul luse int rc = 0;
26*976f8b09Spaul luse
27*976f8b09Spaul luse if (spdk_json_decode_object(params, rpc_compressdev_scan_accel_module_decoder,
28*976f8b09Spaul luse SPDK_COUNTOF(rpc_compressdev_scan_accel_module_decoder),
29*976f8b09Spaul luse &req)) {
30*976f8b09Spaul luse SPDK_ERRLOG("spdk_json_decode_object failed\n");
31*976f8b09Spaul luse spdk_jsonrpc_send_error_response(request, SPDK_JSONRPC_ERROR_PARSE_ERROR,
32*976f8b09Spaul luse "spdk_json_decode_object failed");
33*976f8b09Spaul luse return;
34*976f8b09Spaul luse }
35*976f8b09Spaul luse
36*976f8b09Spaul luse if (req.pmd >= COMPRESS_PMD_MAX) {
37*976f8b09Spaul luse spdk_jsonrpc_send_error_response_fmt(request, -EINVAL,
38*976f8b09Spaul luse "PMD value %d should be less than %d", req.pmd, COMPRESS_PMD_MAX);
39*976f8b09Spaul luse return;
40*976f8b09Spaul luse }
41*976f8b09Spaul luse
42*976f8b09Spaul luse rc = accel_compressdev_enable_probe(&req.pmd);
43*976f8b09Spaul luse if (rc) {
44*976f8b09Spaul luse spdk_jsonrpc_send_error_response(request, rc, spdk_strerror(-rc));
45*976f8b09Spaul luse return;
46*976f8b09Spaul luse }
47*976f8b09Spaul luse
48*976f8b09Spaul luse accel_dpdk_compressdev_enable();
49*976f8b09Spaul luse spdk_jsonrpc_send_bool_response(request, true);
50*976f8b09Spaul luse }
51*976f8b09Spaul luse SPDK_RPC_REGISTER("compressdev_scan_accel_module", rpc_compressdev_scan_accel_module,
52*976f8b09Spaul luse SPDK_RPC_STARTUP)
53