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