On Thu, 25 Jul 2024 at 15:59, Jerome Forissier <jerome.foriss...@linaro.org> wrote: > > Extract some code from cmd/net.c that will be useful in a subsequent > commit to implement wget with NET_LWIP. > > Signed-off-by: Jerome Forissier <jerome.foriss...@linaro.org> > --- > cmd/Makefile | 5 ++- > cmd/net-common.c | 109 ++++++++++++++++++++++++++++++++++++++++++++ > cmd/net.c | 115 ----------------------------------------------- > 3 files changed, 113 insertions(+), 116 deletions(-) > create mode 100644 cmd/net-common.c > > diff --git a/cmd/Makefile b/cmd/Makefile > index fe733cf6ba9..2c3de45a074 100644 > --- a/cmd/Makefile > +++ b/cmd/Makefile > @@ -130,7 +130,10 @@ obj-$(CONFIG_CMD_NAND) += nand.o > ifdef CONFIG_CMD_NET > obj-$(CONFIG_NET) += net.o > obj-$(CONFIG_NET_LWIP) += net-lwip.o > -CFLAGS_net-lwip.o := -I$(srctree)/lib/lwip/lwip/src/include > -I$(srctree)/lib/lwip/u-boot > +obj-$(filter y,$(CONFIG_CMD_NET) $(CONFIG_CMD_NET_LWIP)) += net-common.o > +lwip-includes := -I$(srctree)/lib/lwip/lwip/src/include > -I$(srctree)/lib/lwip/u-boot > +CFLAGS_net-lwip.o := $(lwip-includes) > +CFLAGS_net-common.o := $(lwip-includes) > endif > obj-$(CONFIG_ENV_SUPPORT) += nvedit.o > obj-$(CONFIG_CMD_NVEDIT_EFI) += nvedit_efi.o > diff --git a/cmd/net-common.c b/cmd/net-common.c > new file mode 100644 > index 00000000000..1c9fb83b896 > --- /dev/null > +++ b/cmd/net-common.c > @@ -0,0 +1,109 @@ > +// SPDX-License-Identifier: GPL-2.0+ > +/* > + * (C) Copyright 2000 > + * Wolfgang Denk, DENX Software Engineering, w...@denx.de. > + */ > + > +#include <command.h> > +#include <dm/device.h> > +#include <dm/uclass.h> > +#include <net.h> > +#include <linux/compat.h> > +#include <linux/ethtool.h> > + > +static int do_net_list(struct cmd_tbl *cmdtp, int flag, int argc, char > *const argv[]) > +{ > + const struct udevice *current = eth_get_dev(); > + unsigned char env_enetaddr[ARP_HLEN]; > + const struct udevice *dev; > + struct uclass *uc; > + > + uclass_id_foreach_dev(UCLASS_ETH, dev, uc) { > + eth_env_get_enetaddr_by_index("eth", dev_seq(dev), > env_enetaddr); > + printf("eth%d : %s %pM %s\n", dev_seq(dev), dev->name, > env_enetaddr, > + current == dev ? "active" : ""); > + } > + return CMD_RET_SUCCESS; > +} > + > +static int do_net_stats(struct cmd_tbl *cmdtp, int flag, int argc, char > *const argv[]) > +{ > + int nstats, err, i, off; > + struct udevice *dev; > + u64 *values; > + u8 *strings; > + > + if (argc < 2) > + return CMD_RET_USAGE; > + > + err = uclass_get_device_by_name(UCLASS_ETH, argv[1], &dev); > + if (err) { > + printf("Could not find device %s\n", argv[1]); > + return CMD_RET_FAILURE; > + } > + > + if (!eth_get_ops(dev)->get_sset_count || > + !eth_get_ops(dev)->get_strings || > + !eth_get_ops(dev)->get_stats) { > + printf("Driver does not implement stats dump!\n"); > + return CMD_RET_FAILURE; > + } > + > + nstats = eth_get_ops(dev)->get_sset_count(dev); > + strings = kcalloc(nstats, ETH_GSTRING_LEN, GFP_KERNEL); > + if (!strings) > + return CMD_RET_FAILURE; > + > + values = kcalloc(nstats, sizeof(u64), GFP_KERNEL); > + if (!values) > + goto err_free_strings; > + > + eth_get_ops(dev)->get_strings(dev, strings); > + eth_get_ops(dev)->get_stats(dev, values); > + > + off = 0; > + for (i = 0; i < nstats; i++) { > + printf(" %s: %llu\n", &strings[off], values[i]); > + off += ETH_GSTRING_LEN; > + }; > + > + kfree(strings); > + kfree(values); > + > + return CMD_RET_SUCCESS; > + > +err_free_strings: > + kfree(strings); > + > + return CMD_RET_FAILURE; > +} > + > +static struct cmd_tbl cmd_net[] = { > + U_BOOT_CMD_MKENT(list, 1, 0, do_net_list, "", ""), > + U_BOOT_CMD_MKENT(stats, 2, 0, do_net_stats, "", ""), > +}; > + > +static int do_net(struct cmd_tbl *cmdtp, int flag, int argc, char *const > argv[]) > +{ > + struct cmd_tbl *cp; > + > + cp = find_cmd_tbl(argv[1], cmd_net, ARRAY_SIZE(cmd_net)); > + > + /* Drop the net command */ > + argc--; > + argv++; > + > + if (!cp || argc > cp->maxargs) > + return CMD_RET_USAGE; > + if (flag == CMD_FLAG_REPEAT && !cmd_is_repeatable(cp)) > + return CMD_RET_SUCCESS; > + > + return cp->cmd(cmdtp, flag, argc, argv); > +} > + > +U_BOOT_CMD( > + net, 3, 1, do_net, > + "NET sub-system", > + "list - list available devices\n" > + "stats <device> - dump statistics for specified device\n" > +); > diff --git a/cmd/net.c b/cmd/net.c > index b206ff58e68..ad5aaf9245e 100644 > --- a/cmd/net.c > +++ b/cmd/net.c > @@ -675,118 +675,3 @@ U_BOOT_CMD( > ); > > #endif /* CONFIG_CMD_LINK_LOCAL */ > - > -static int do_net_list(struct cmd_tbl *cmdtp, int flag, int argc, char > *const argv[]) > -{ > - const struct udevice *current = eth_get_dev(); > - unsigned char env_enetaddr[ARP_HLEN]; > - const struct udevice *dev; > - struct uclass *uc; > - > - uclass_id_foreach_dev(UCLASS_ETH, dev, uc) { > - eth_env_get_enetaddr_by_index("eth", dev_seq(dev), > env_enetaddr); > - printf("eth%d : %s %pM %s\n", dev_seq(dev), dev->name, > env_enetaddr, > - current == dev ? "active" : ""); > - } > - return CMD_RET_SUCCESS; > -} > - > -static int do_net_stats(struct cmd_tbl *cmdtp, int flag, int argc, char > *const argv[]) > -{ > - int nstats, err, i, off; > - struct udevice *dev; > - u64 *values; > - u8 *strings; > - > - if (argc < 2) > - return CMD_RET_USAGE; > - > - err = uclass_get_device_by_name(UCLASS_ETH, argv[1], &dev); > - if (err) { > - printf("Could not find device %s\n", argv[1]); > - return CMD_RET_FAILURE; > - } > - > - if (!eth_get_ops(dev)->get_sset_count || > - !eth_get_ops(dev)->get_strings || > - !eth_get_ops(dev)->get_stats) { > - printf("Driver does not implement stats dump!\n"); > - return CMD_RET_FAILURE; > - } > - > - nstats = eth_get_ops(dev)->get_sset_count(dev); > - strings = kcalloc(nstats, ETH_GSTRING_LEN, GFP_KERNEL); > - if (!strings) > - return CMD_RET_FAILURE; > - > - values = kcalloc(nstats, sizeof(u64), GFP_KERNEL); > - if (!values) > - goto err_free_strings; > - > - eth_get_ops(dev)->get_strings(dev, strings); > - eth_get_ops(dev)->get_stats(dev, values); > - > - off = 0; > - for (i = 0; i < nstats; i++) { > - printf(" %s: %llu\n", &strings[off], values[i]); > - off += ETH_GSTRING_LEN; > - }; > - > - return CMD_RET_SUCCESS; > - > -err_free_strings: > - kfree(strings); > - > - return CMD_RET_FAILURE; > -} > - > -static struct cmd_tbl cmd_net[] = { > - U_BOOT_CMD_MKENT(list, 1, 0, do_net_list, "", ""), > - U_BOOT_CMD_MKENT(stats, 2, 0, do_net_stats, "", ""), > -}; > - > -static int do_net(struct cmd_tbl *cmdtp, int flag, int argc, char *const > argv[]) > -{ > - struct cmd_tbl *cp; > - > - cp = find_cmd_tbl(argv[1], cmd_net, ARRAY_SIZE(cmd_net)); > - > - /* Drop the net command */ > - argc--; > - argv++; > - > - if (!cp || argc > cp->maxargs) > - return CMD_RET_USAGE; > - if (flag == CMD_FLAG_REPEAT && !cmd_is_repeatable(cp)) > - return CMD_RET_SUCCESS; > - > - return cp->cmd(cmdtp, flag, argc, argv); > -} > - > -U_BOOT_CMD( > - net, 3, 1, do_net, > - "NET sub-system", > - "list - list available devices\n" > - "stats <device> - dump statistics for specified device\n" > -); > - > -#if defined(CONFIG_CMD_NCSI) > -static int do_ncsi(struct cmd_tbl *cmdtp, int flag, int argc, char * const > argv[]) > -{ > - if (!phy_interface_is_ncsi() || !ncsi_active()) { > - printf("Device not configured for NC-SI\n"); > - return CMD_RET_FAILURE; > - } > - > - if (net_loop(NCSI) < 0) > - return CMD_RET_FAILURE; > - > - return CMD_RET_SUCCESS; > -} > - > -U_BOOT_CMD( > - ncsi, 1, 1, do_ncsi, > - "Configure attached NIC via NC-SI", > - "" > -); > -#endif /* CONFIG_CMD_NCSI */ > -- > 2.40.1 >
Reviewed-by: Ilias Apalodimas <ilias.apalodi...@linaro.org>