diff options
-rw-r--r-- | Documentation/user/barebox.rst | 8 | ||||
-rw-r--r-- | arch/arm/mach-omap/xload.c | 9 | ||||
-rw-r--r-- | arch/sandbox/Makefile | 5 | ||||
-rw-r--r-- | commands/tftp.c | 4 | ||||
-rw-r--r-- | common/blspec.c | 4 | ||||
-rw-r--r-- | common/complete.c | 16 | ||||
-rw-r--r-- | common/env.c | 48 | ||||
-rw-r--r-- | common/environment.c | 2 | ||||
-rw-r--r-- | drivers/firmware/altera_serial.c | 26 | ||||
-rw-r--r-- | fs/nfs.c | 12 | ||||
-rw-r--r-- | include/net.h | 7 | ||||
-rw-r--r-- | lib/parameter.c | 2 | ||||
-rw-r--r-- | lib/vsprintf.c | 29 | ||||
-rw-r--r-- | net/dhcp.c | 6 | ||||
-rw-r--r-- | net/dns.c | 6 | ||||
-rw-r--r-- | net/eth.c | 2 | ||||
-rw-r--r-- | net/ifup.c | 9 | ||||
-rw-r--r-- | net/lib.c | 19 | ||||
-rw-r--r-- | net/net.c | 4 | ||||
-rw-r--r-- | net/netconsole.c | 2 |
20 files changed, 130 insertions, 90 deletions
diff --git a/Documentation/user/barebox.rst b/Documentation/user/barebox.rst index 32cec3d97c..1203c10cd1 100644 --- a/Documentation/user/barebox.rst +++ b/Documentation/user/barebox.rst @@ -28,9 +28,11 @@ can be checked out as follows: Checking connectivity... done. Checking out files: 100% (5651/5651), done. -After this, make sure to check out the appropriate branch. If you want to -develop for barebox, it's best to check out the ``next`` branch rather than -the ``master`` branch: +By default, the master branch is checked out. If you want to develop for +barebox, this is the right branch to send patches against. + +If you want to see which patches are already selected for the next release, +you can look at the ``next`` branch: .. code-block:: sh diff --git a/arch/arm/mach-omap/xload.c b/arch/arm/mach-omap/xload.c index 14a631ebfc..822389c38c 100644 --- a/arch/arm/mach-omap/xload.c +++ b/arch/arm/mach-omap/xload.c @@ -231,8 +231,10 @@ static void *am33xx_net_boot(void) int err; int len; struct dhcp_req_param dhcp_param; - const char *bootfile, *ip; + const char *bootfile; + IPaddr_t ip; char *file; + char ip4_str[sizeof("255.255.255.255")]; am33xx_register_ethaddr(0, 0); @@ -258,8 +260,9 @@ static void *am33xx_net_boot(void) if (err) return NULL; - ip = ip_to_string(net_get_serverip()); - err = mount(ip, "tftp", TFTP_MOUNT, NULL); + ip = net_get_serverip(); + sprintf(ip4_str, "%pI4", &ip); + err = mount(ip4_str, "tftp", TFTP_MOUNT, NULL); if (err < 0) { printf("Unable to mount.\n"); return NULL; diff --git a/arch/sandbox/Makefile b/arch/sandbox/Makefile index a539a901fc..8155a790eb 100644 --- a/arch/sandbox/Makefile +++ b/arch/sandbox/Makefile @@ -31,11 +31,6 @@ else CPPFLAGS += $(patsubst %,-I$(srctree)/%include,$(machdirs)) endif -SUBARCH := $(shell uname -m | sed -e s/i.86/i386/ -e s/sun4u/sparc64/ \ - -e s/arm.*/arm/ -e s/sa110/arm/ \ - -e s/s390x/s390/ -e s/parisc64/parisc/ \ - -e s/ppc.*/powerpc/ -e s/mips.*/mips/ ) - archprepare: maketools PHONY += maketools diff --git a/commands/tftp.c b/commands/tftp.c index 6a3121ad56..08366b476f 100644 --- a/commands/tftp.c +++ b/commands/tftp.c @@ -36,6 +36,7 @@ static int do_tftpb(int argc, char *argv[]) int tftp_push = 0; int ret; IPaddr_t ip; + char ip4_str[sizeof("255.255.255.255")]; while ((opt = getopt(argc, argv, "p")) > 0) { switch(opt) { @@ -73,7 +74,8 @@ static int do_tftpb(int argc, char *argv[]) goto err_free; ip = net_get_serverip(); - ret = mount(ip_to_string(ip), "tftp", TFTP_MOUNT_PATH, NULL); + sprintf(ip4_str, "%pI4", &ip); + ret = mount(ip4_str, "tftp", TFTP_MOUNT_PATH, NULL); if (ret) goto err_rmdir; diff --git a/common/blspec.c b/common/blspec.c index 82b61f8741..ec63ddb407 100644 --- a/common/blspec.c +++ b/common/blspec.c @@ -306,7 +306,7 @@ static char *parse_nfs_url(const char *url) if (ip == 0) goto out; - hostpath = basprintf("%s:%s", ip_to_string(ip), path); + hostpath = basprintf("%pI4:%s", &ip, path); prevpath = nfs_find_mountpath(hostpath); @@ -348,7 +348,7 @@ out: * entry_is_of_compatible - check if a bootspec entry is compatible with * the current machine. * - * returns true is the entry is compatible, false otherwise + * returns true if the entry is compatible, false otherwise */ static bool entry_is_of_compatible(struct blspec_entry *entry) { diff --git a/common/complete.c b/common/complete.c index aee21ea183..2dab7d1dde 100644 --- a/common/complete.c +++ b/common/complete.c @@ -279,7 +279,7 @@ static int env_param_complete(struct string_list *sl, char *instr, int eval) struct env_context *c; char *instr_param; int len; - char end = '='; + char end = '=', *pos, *dot; char *begin = ""; if (!instr) @@ -290,7 +290,6 @@ static int env_param_complete(struct string_list *sl, char *instr, int eval) end = ' '; } - instr_param = strchr(instr, '.'); len = strlen(instr); c = get_current_context(); @@ -312,20 +311,21 @@ static int env_param_complete(struct string_list *sl, char *instr, int eval) c = c->parent; } - if (instr_param) { + pos = instr; + while ((dot = strchr(pos, '.'))) { char *devname; - len = (instr_param - instr); - - devname = xstrndup(instr, len); + devname = xstrndup(instr, dot - instr); instr_param++; dev = get_device_by_name(devname); free(devname); + if (dev) - device_param_complete(dev, sl, instr_param, eval); - return 0; + device_param_complete(dev, sl, dot + 1, eval); + + pos = dot + 1; } len = strlen(instr); diff --git a/common/env.c b/common/env.c index 6f736d5add..df8a4dff60 100644 --- a/common/env.c +++ b/common/env.c @@ -135,26 +135,46 @@ static const char *getenv_raw(struct list_head *l, const char *name) return NULL; } -const char *getenv (const char *name) +static const char *dev_getenv(const char *name) { - struct env_context *c; - const char *val; + const char *pos, *val, *dot, *varname; + char *devname; + struct device_d *dev; + + pos = name; + + while (1) { + dot = strchr(pos, '.'); + if (!dot) + break; + + devname = xstrndup(name, dot - name); + varname = dot + 1; + + dev = get_device_by_name(devname); + + free(devname); - if (strchr(name, '.')) { - const char *ret = NULL; - char *devstr = strdup(name); - char *par = strchr(devstr, '.'); - struct device_d *dev; - *par = 0; - dev = get_device_by_name(devstr); if (dev) { - par++; - ret = dev_get_param(dev, par); + val = dev_get_param(dev, varname); + if (val) + return val; } - free(devstr); - return ret; + + pos = dot + 1; } + return NULL; +} + +const char *getenv(const char *name) +{ + struct env_context *c; + const char *val; + + if (strchr(name, '.')) + return dev_getenv(name); + c = context; val = getenv_raw(&c->local, name); diff --git a/common/environment.c b/common/environment.c index db127d71ad..c9cef6322a 100644 --- a/common/environment.c +++ b/common/environment.c @@ -382,7 +382,7 @@ EXPORT_SYMBOL(envfs_save); static int envfs_check_super(struct envfs_super *super, size_t *size) { if (ENVFS_32(super->magic) != ENVFS_MAGIC) { - printf("envfs: wrong magic\n"); + printf("envfs: no envfs (magic mismatch) - envfs newer written?\n"); return -EIO; } diff --git a/drivers/firmware/altera_serial.c b/drivers/firmware/altera_serial.c index 4527d27c5c..b119778d72 100644 --- a/drivers/firmware/altera_serial.c +++ b/drivers/firmware/altera_serial.c @@ -35,9 +35,9 @@ * * fpga@0 { * compatible = "altr,fpga-passive-serial"; - * nstat-gpio = <&gpio4 18 0>; - * confd-gpio = <&gpio4 19 0>; - * nconfig-gpio = <&gpio4 20 0>; + * nstat-gpios = <&gpio4 18 0>; + * confd-gpios = <&gpio4 19 0>; + * nconfig-gpios = <&gpio4 20 0>; * spi-max-frequency = <10000000>; * reg = <0>; * }; @@ -220,26 +220,24 @@ static int altera_spi_of(struct device_d *dev, struct fpga_spi *this) const char *name; int ret; - name = "nstat-gpio"; - if (!of_get_property(n, name, NULL)) { + name = "nstat-gpios"; + this->nstat_gpio = of_get_named_gpio(n, name, 0); + if (this->nstat_gpio == -ENOENT) { dev_info(dev, "nstat-gpio is not specified, assuming it is not connected\n"); this->nstat_gpio = -1; - } else { - this->nstat_gpio = of_get_named_gpio(n, name, 0); - if (this->nstat_gpio < 0) { - ret = this->nstat_gpio; - goto out; - } + } else if (this->nstat_gpio < 0) { + ret = this->nstat_gpio; + goto out; } - name = "confd-gpio"; + name = "confd-gpios"; this->confd_gpio = of_get_named_gpio(n, name, 0); if (this->confd_gpio < 0) { ret = this->confd_gpio; goto out; } - name = "nconfig-gpio"; + name = "nconfig-gpios"; this->nconfig_gpio = of_get_named_gpio(n, name, 0); if (this->nconfig_gpio < 0) { ret = this->nconfig_gpio; @@ -330,7 +328,7 @@ out: static struct of_device_id altera_spi_id_table[] = { { - .compatible = "altr,passive-serial", + .compatible = "altr,fpga-passive-serial", }, }; @@ -1314,10 +1314,9 @@ static char *rootnfsopts; static void nfs_set_rootarg(struct nfs_priv *npriv, struct fs_device_d *fsdev) { char *str, *tmp; - const char *ip; + const char *bootargs; - ip = ip_to_string(npriv->server); - str = basprintf("root=/dev/nfs nfsroot=%s:%s%s%s", ip, npriv->path, + str = basprintf("root=/dev/nfs nfsroot=%pI4:%s%s%s", &npriv->server, npriv->path, rootnfsopts[0] ? "," : "", rootnfsopts); /* forward specific mount options on demand */ @@ -1333,6 +1332,13 @@ static void nfs_set_rootarg(struct nfs_priv *npriv, struct fs_device_d *fsdev) str = tmp; } + bootargs = dev_get_param(&npriv->con->edev->dev, "linux.bootargs"); + if (bootargs) { + tmp = basprintf("%s %s", str, bootargs); + free(str); + str = tmp; + } + fsdev_set_linux_rootarg(fsdev, str); free(str); diff --git a/include/net.h b/include/net.h index 8f857c8f85..632b6d5410 100644 --- a/include/net.h +++ b/include/net.h @@ -62,6 +62,7 @@ struct eth_device { IPaddr_t netmask; IPaddr_t gateway; char ethaddr[6]; + char *bootarg; }; #define dev_to_edev(d) container_of(d, struct eth_device, dev) @@ -257,9 +258,6 @@ static inline int net_eth_to_udplen(char *pkt) int net_checksum_ok(unsigned char *, int); /* Return true if cksum OK */ uint16_t net_checksum(unsigned char *, int); /* Calculate the checksum */ -/* Print an IP address on the console */ -void print_IPaddr (IPaddr_t); - /* * The following functions are a bit ugly, but necessary to deal with * alignment restrictions on ARM. @@ -308,9 +306,6 @@ static inline void net_copy_uint32(uint32_t *to, uint32_t *from) memcpy(to, from, sizeof(uint32_t)); } -/* Convert an IP address to a string */ -char *ip_to_string (IPaddr_t x); - /* Convert a string to ip address */ int string_to_ip(const char *s, IPaddr_t *ip); diff --git a/lib/parameter.c b/lib/parameter.c index 529d7ab92a..9f96d0760d 100644 --- a/lib/parameter.c +++ b/lib/parameter.c @@ -777,7 +777,7 @@ static const char *param_ip_get(struct device_d *dev, struct param_d *p) } free(p->value); - p->value = xstrdup(ip_to_string(*pi->ip)); + p->value = xasprintf("%pI4", pi->ip); return p->value; } diff --git a/lib/vsprintf.c b/lib/vsprintf.c index f3885a8201..fa9fb75800 100644 --- a/lib/vsprintf.c +++ b/lib/vsprintf.c @@ -191,6 +191,27 @@ static char *symbol_string(char *buf, char *end, void *ptr, int field_width, int } static noinline_for_stack +char *ip4_addr_string(char *buf, char *end, const u8 *addr, int field_width, + int precision, int flags, const char *fmt) +{ + char ip4_addr[sizeof("255.255.255.255")]; + char *pos; + int i; + + pos = ip4_addr; + + for (i = 0; i < 4; i++) { + pos = number(pos, pos + 3, addr[i], 10, 0, 0, LEFT); + if (i < 3) + *pos++ = '.'; + } + + *pos = 0; + + return string(buf, end, ip4_addr, field_width, precision, flags); +} + +static noinline_for_stack char *uuid_string(char *buf, char *end, const u8 *addr, int field_width, int precision, int flags, const char *fmt) { @@ -267,6 +288,8 @@ char *address_val(char *buf, char *end, const void *addr, * * Right now we handle: * + * - 'I' [4] for IPv4 addresses printed in the usual way + * IPv4 uses dot-separated decimal without leading 0's (1.2.3.4) * - 'S' For symbolic direct pointers * - 'U' For a 16 byte UUID/GUID, it prints the UUID/GUID in the form * "xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx" @@ -297,6 +320,12 @@ static char *pointer(const char *fmt, char *buf, char *end, void *ptr, int field break; case 'a': return address_val(buf, end, ptr, field_width, precision, flags, fmt); + case 'I': + switch (fmt[1]) { + case '4': + return ip4_addr_string(buf, end, ptr, field_width, precision, flags, fmt); + } + break; } flags |= SMALL; if (field_width == -1) { diff --git a/net/dhcp.c b/net/dhcp.c index 792ece491b..c5386fe942 100644 --- a/net/dhcp.c +++ b/net/dhcp.c @@ -613,13 +613,13 @@ static void dhcp_handler(void *ctx, char *packet, unsigned int len) debug ("%s: State REQUESTING\n", __func__); if (dhcp_message_type((u8 *)bp->bp_vend) == DHCP_ACK ) { + IPaddr_t ip; if (net_read_uint32((uint32_t *)&bp->bp_vend[0]) == htonl(BOOTP_VENDOR_MAGIC)) dhcp_options_process((u8 *)&bp->bp_vend[4], bp); bootp_copy_net_params(bp); /* Store net params from reply */ dhcp_state = BOUND; - puts ("DHCP client bound to address "); - print_IPaddr(net_get_ip()); - putchar('\n'); + ip = net_get_ip(); + printf("DHCP client bound to address %pI4\n", &ip); return; } break; @@ -221,7 +221,7 @@ IPaddr_t resolv(const char *host) if (string_to_ip(ns, &ip)) return 0; - debug("resolving host %s via nameserver %s\n", host, ip_to_string(ip)); + debug("resolving host %s via nameserver %pI4\n", host, &ip); dns_con = net_udp_new(ip, DNS_PORT, dns_handler, NULL); if (IS_ERR(dns_con)) @@ -258,9 +258,7 @@ static int do_host(int argc, char *argv[]) if (!ip) printf("unknown host %s\n", argv[1]); else { - printf("%s is at ", argv[1]); - print_IPaddr(ip); - printf("\n"); + printf("%s is at %pI4\n", argv[1], &ip); } return 0; @@ -384,6 +384,8 @@ int eth_register(struct eth_device *edev) dev_add_param_ip(dev, "netmask", NULL, NULL, &edev->netmask, edev); dev_add_param_mac(dev, "ethaddr", eth_param_set_ethaddr, NULL, edev->ethaddr, edev); + edev->bootarg = xstrdup(""); + dev_add_param_string(dev, "linux.bootargs", NULL, NULL, &edev->bootarg, NULL); if (edev->init) edev->init(edev); diff --git a/net/ifup.c b/net/ifup.c index 30ac3f5861..5113d13832 100644 --- a/net/ifup.c +++ b/net/ifup.c @@ -106,12 +106,21 @@ int ifup(const char *name, unsigned flags) ret = eth_set_param(dev, "serverip"); if (ret) goto out; + dev_set_param(dev, "linux.bootargs", "ip=dhcp"); } else if (!strcmp(ip, "static")) { + char *bootarg; for (i = 0; i < ARRAY_SIZE(vars); i++) { ret = eth_set_param(dev, vars[i]); if (ret) goto out; } + bootarg = basprintf("ip=%pI4:%pI4:%pI4:%pI4:::", + &edev->ipaddr, + &edev->serverip, + &edev->gateway, + &edev->netmask); + dev_set_param(dev, "linux.bootargs", bootarg); + free(bootarg); } else { pr_err("unknown ip type: %s\n", ip); ret = -EINVAL; @@ -57,25 +57,6 @@ void ethaddr_to_string(const u8 enetaddr[6], char *str) enetaddr[4], enetaddr[5]); } -void print_IPaddr(IPaddr_t x) -{ - puts(ip_to_string(x)); -} - -char *ip_to_string(IPaddr_t x) -{ - static char s[sizeof("xxx.xxx.xxx.xxx")]; - - x = ntohl(x); - sprintf(s, "%d.%d.%d.%d", - (int) ((x >> 24) & 0xff), - (int) ((x >> 16) & 0xff), - (int) ((x >> 8) & 0xff), (int) ((x >> 0) & 0xff) - ); - - return s; -} - int string_to_ip(const char *s, IPaddr_t *ip) { IPaddr_t addr = 0; @@ -78,9 +78,9 @@ IPaddr_t getenv_ip(const char *name) int setenv_ip(const char *name, IPaddr_t ip) { - const char *str; + char str[sizeof("255.255.255.255")]; - str = ip_to_string(ip); + sprintf(str, "%pI4", &ip); setenv(name, str); diff --git a/net/netconsole.c b/net/netconsole.c index 0ee6a7655b..ce3c418798 100644 --- a/net/netconsole.c +++ b/net/netconsole.c @@ -137,7 +137,7 @@ static int nc_set_active(struct console_device *cdev, unsigned flags) net_udp_bind(priv->con, priv->port); - pr_info("netconsole initialized with %s:%d\n", ip_to_string(priv->ip), priv->port); + pr_info("netconsole initialized with %pI4:%d\n", &priv->ip, priv->port); return 0; } |