xref: /dpdk/examples/multi_process/hotplug_mp/commands.c (revision 43f062ac3a926e53993b52a3d4333f2de2c6a706)
105f1d684SQi Zhang /* SPDX-License-Identifier: BSD-3-Clause
2*43f062acSBruce Richardson  * Copyright(c) 2018-2023 Intel Corporation.
305f1d684SQi Zhang  */
405f1d684SQi Zhang 
5770ebc06SDavid Marchand #include <rte_bus.h>
605f1d684SQi Zhang #include <rte_ethdev.h>
7*43f062acSBruce Richardson #include "commands.h"
805f1d684SQi Zhang 
cmd_help_parsed(__rte_unused void * parsed_result,struct cmdline * cl,__rte_unused void * data)9*43f062acSBruce Richardson void cmd_help_parsed(__rte_unused void *parsed_result,
1005f1d684SQi Zhang 			    struct cmdline *cl,
11f2fc83b4SThomas Monjalon 			    __rte_unused void *data)
1205f1d684SQi Zhang {
1305f1d684SQi Zhang 	cmdline_printf(cl,
1405f1d684SQi Zhang 		       "commands:\n"
1505f1d684SQi Zhang 		       "- attach <devargs>\n"
1605f1d684SQi Zhang 		       "- detach <devargs>\n"
1705f1d684SQi Zhang 		       "- list\n\n");
1805f1d684SQi Zhang }
1905f1d684SQi Zhang 
20*43f062acSBruce Richardson void
cmd_quit_parsed(__rte_unused void * parsed_result,struct cmdline * cl,__rte_unused void * data)21*43f062acSBruce Richardson cmd_quit_parsed(__rte_unused void *parsed_result,
2205f1d684SQi Zhang 			    struct cmdline *cl,
23f2fc83b4SThomas Monjalon 			    __rte_unused void *data)
2405f1d684SQi Zhang {
2505f1d684SQi Zhang 	cmdline_quit(cl);
2605f1d684SQi Zhang }
2705f1d684SQi Zhang 
28*43f062acSBruce Richardson void
cmd_list_parsed(__rte_unused void * parsed_result,struct cmdline * cl,__rte_unused void * data)29*43f062acSBruce Richardson cmd_list_parsed(__rte_unused void *parsed_result,
3005f1d684SQi Zhang 			    struct cmdline *cl,
31f2fc83b4SThomas Monjalon 			    __rte_unused void *data)
3205f1d684SQi Zhang {
3305f1d684SQi Zhang 	uint16_t port_id;
3405f1d684SQi Zhang 	char dev_name[RTE_DEV_NAME_MAX_LEN];
3505f1d684SQi Zhang 
3605f1d684SQi Zhang 	cmdline_printf(cl, "list all etherdev\n");
3705f1d684SQi Zhang 
3805f1d684SQi Zhang 	RTE_ETH_FOREACH_DEV(port_id) {
3905f1d684SQi Zhang 		rte_eth_dev_get_name_by_port(port_id, dev_name);
4005f1d684SQi Zhang 		if (strlen(dev_name) > 0)
4105f1d684SQi Zhang 			cmdline_printf(cl, "%d\t%s\n", port_id, dev_name);
4205f1d684SQi Zhang 		else
4305f1d684SQi Zhang 			printf("empty dev_name is not expected!\n");
4405f1d684SQi Zhang 	}
4505f1d684SQi Zhang }
4605f1d684SQi Zhang 
47*43f062acSBruce Richardson void
cmd_attach_parsed(void * parsed_result,struct cmdline * cl,__rte_unused void * data)48*43f062acSBruce Richardson cmd_attach_parsed(void *parsed_result,
4905f1d684SQi Zhang 				  struct cmdline *cl,
50f2fc83b4SThomas Monjalon 				  __rte_unused void *data)
5105f1d684SQi Zhang {
52*43f062acSBruce Richardson 	struct cmd_attach_result *res = parsed_result;
5305f1d684SQi Zhang 	struct rte_devargs da;
5405f1d684SQi Zhang 
5505f1d684SQi Zhang 	memset(&da, 0, sizeof(da));
5605f1d684SQi Zhang 
5705f1d684SQi Zhang 	if (rte_devargs_parsef(&da, "%s", res->devargs)) {
5805f1d684SQi Zhang 		cmdline_printf(cl, "cannot parse devargs\n");
5905f1d684SQi Zhang 		return;
6005f1d684SQi Zhang 	}
6105f1d684SQi Zhang 
62148c51a3SDavid Marchand 	if (!rte_eal_hotplug_add(rte_bus_name(da.bus), da.name, da.args))
6305f1d684SQi Zhang 		cmdline_printf(cl, "attached device %s\n", da.name);
6405f1d684SQi Zhang 	else
6505f1d684SQi Zhang 		cmdline_printf(cl, "failed to attached device %s\n",
6605f1d684SQi Zhang 				da.name);
6764051bb1SXueming Li 	rte_devargs_reset(&da);
6805f1d684SQi Zhang }
6905f1d684SQi Zhang 
70*43f062acSBruce Richardson void
cmd_detach_parsed(void * parsed_result,struct cmdline * cl,__rte_unused void * data)71*43f062acSBruce Richardson cmd_detach_parsed(void *parsed_result,
7205f1d684SQi Zhang 				   struct cmdline *cl,
73f2fc83b4SThomas Monjalon 				   __rte_unused void *data)
7405f1d684SQi Zhang {
75*43f062acSBruce Richardson 	struct cmd_detach_result *res = parsed_result;
7605f1d684SQi Zhang 	struct rte_devargs da;
7705f1d684SQi Zhang 
7805f1d684SQi Zhang 	memset(&da, 0, sizeof(da));
7905f1d684SQi Zhang 
8005f1d684SQi Zhang 	if (rte_devargs_parsef(&da, "%s", res->devargs)) {
8105f1d684SQi Zhang 		cmdline_printf(cl, "cannot parse devargs\n");
8205f1d684SQi Zhang 		return;
8305f1d684SQi Zhang 	}
8405f1d684SQi Zhang 
8505f1d684SQi Zhang 	printf("detaching...\n");
86148c51a3SDavid Marchand 	if (!rte_eal_hotplug_remove(rte_bus_name(da.bus), da.name))
8705f1d684SQi Zhang 		cmdline_printf(cl, "detached device %s\n",
8805f1d684SQi Zhang 			da.name);
8905f1d684SQi Zhang 	else
907be78d02SJosh Soref 		cmdline_printf(cl, "failed to detach device %s\n",
9105f1d684SQi Zhang 			da.name);
9264051bb1SXueming Li 	rte_devargs_reset(&da);
9305f1d684SQi Zhang }
94