Message ID | f28efa0115c71e97fbef0bd1a6628e087cd210c1.1721910373.git.jerome.forissier@linaro.org |
---|---|
State | Superseded |
Headers | show |
Series | Introduce the lwIP network stack | expand |
On Thu, 25 Jul 2024 at 15:59, Jerome Forissier <jerome.forissier@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.forissier@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, wd@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.apalodimas@linaro.org>
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, wd@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 */
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.forissier@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