xref: /spdk/module/accel/dpdk_compressdev/accel_dpdk_compressdev_rpc.c (revision 976f8b0992ee86340e61dcedb2fbe5e265ffcc00)
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