xref: /dpdk/drivers/mempool/cnxk/cnxk_mempool_telemetry.c (revision dc348f2e81a94dd3b8a32c2f882483227796905d)
1 /* SPDX-License-Identifier: BSD-3-Clause
2  * Copyright(C) 2021 Marvell.
3  */
4 
5 #include <rte_mempool.h>
6 #include <rte_memzone.h>
7 #include <rte_telemetry.h>
8 
9 #include <roc_api.h>
10 
11 #include "cnxk_mempool.h"
12 #include "cnxk_telemetry.h"
13 
14 struct mempool_info_cb_arg {
15 	char *pool_name;
16 	struct rte_tel_data *d;
17 };
18 
19 static void
20 mempool_info_cb(struct rte_mempool *mp, void *arg)
21 {
22 	struct mempool_info_cb_arg *info = (struct mempool_info_cb_arg *)arg;
23 	int aura_id;
24 
25 	if (strncmp(mp->name, info->pool_name, RTE_MEMZONE_NAMESIZE))
26 		return;
27 
28 	aura_id = roc_npa_aura_handle_to_aura(mp->pool_id);
29 	rte_tel_data_add_dict_int(info->d, "aura_id", aura_id);
30 }
31 
32 static int
33 mempool_tel_handle_info(const char *cmd __rte_unused, const char *params,
34 			struct rte_tel_data *d)
35 {
36 	struct mempool_info_cb_arg mp_arg;
37 	char name[RTE_MEMZONE_NAMESIZE];
38 
39 	if (params == NULL || strlen(params) == 0)
40 		return -EINVAL;
41 
42 	rte_strlcpy(name, params, RTE_MEMZONE_NAMESIZE);
43 
44 	rte_tel_data_start_dict(d);
45 	mp_arg.pool_name = name;
46 	mp_arg.d = d;
47 	rte_mempool_walk(mempool_info_cb, &mp_arg);
48 
49 	return 0;
50 }
51 
52 RTE_INIT(cnxk_mempool_init_telemetry)
53 {
54 	rte_telemetry_register_cmd(
55 		"/cnxk/mempool/info", mempool_tel_handle_info,
56 		"Returns mempool info. Parameters: pool_name");
57 }
58